eu já... isso ocorre porque muitas delas simplesmente desenham uma nova polilinha e deletam a antiga...então tente usar esta rotina ao invéz daquelas...
mais...
(defun c:ivp (/ pts ent ss n qtd b StartWidth EndWidth)
(tbn:error-init (list (list "cmdecho" 0) T))
(prompt "\nSelecione as polilinhas...\n")
(setq ss (ssget '((0 . "LWPOLYLINE,LINE"))))
(repeat (if ss
(sslength ss)
0)
(setq ent (ssname ss 0))
(ssdel ent ss)
(setq ent (vlax-ename->vla-object ent))
(if (= "LINE" (DXF 0 ENT))
(remake-ent ent '(10 11) (list (dxf 11 ent) (dxf 10 ent)))
(progn
(Setq pts (3d-of-vla (vla-get-coordinates ent))
qtd (length pts)
b nil
n 0)
(repeat (/ qtd 2)
(vla-GetWidth ent n 'StartWidth 'EndWidth)
(setq b (cons (list (vla-getbulge ent n) StartWidth EndWidth)
b)
n (1+ n)))
(setq n (- qtd 2))
(vla-put-coordinates
ent
(vlax-safearray-fill
(vlax-make-safearray vlax-vbdouble (cons 0 (1- qtd)))
(mapcar '(lambda (x / tmo)
(setq tmp n
n (if (zerop (rem n 2.0))
(1+ n)
(- n 3)))
(nth tmp pts))
pts)))
(setq n 0
qtd (/ qtd 2)
b (append (cdr b) (list (car b))))
(foreach x b
(vla-setbulge ent n (* -1 (car x)))
(vla-setwidth ent n (cadr x) (caddr x))
(setq n (1+ n))))))
(tbn:error-restore))
Link(s) da(s) subrotina(s) usada(s):
tbn:error-init, DXF, remake-ent, dxf, 3d-of-vla, tbn:error-restore
(tbn:error-init (list (list "cmdecho" 0) T))
(prompt "\nSelecione as polilinhas...\n")
(setq ss (ssget '((0 . "LWPOLYLINE,LINE"))))
(repeat (if ss
(sslength ss)
0)
(setq ent (ssname ss 0))
(ssdel ent ss)
(setq ent (vlax-ename->vla-object ent))
(if (= "LINE" (DXF 0 ENT))
(remake-ent ent '(10 11) (list (dxf 11 ent) (dxf 10 ent)))
(progn
(Setq pts (3d-of-vla (vla-get-coordinates ent))
qtd (length pts)
b nil
n 0)
(repeat (/ qtd 2)
(vla-GetWidth ent n 'StartWidth 'EndWidth)
(setq b (cons (list (vla-getbulge ent n) StartWidth EndWidth)
b)
n (1+ n)))
(setq n (- qtd 2))
(vla-put-coordinates
ent
(vlax-safearray-fill
(vlax-make-safearray vlax-vbdouble (cons 0 (1- qtd)))
(mapcar '(lambda (x / tmo)
(setq tmp n
n (if (zerop (rem n 2.0))
(1+ n)
(- n 3)))
(nth tmp pts))
pts)))
(setq n 0
qtd (/ qtd 2)
b (append (cdr b) (list (car b))))
(foreach x b
(vla-setbulge ent n (* -1 (car x)))
(vla-setwidth ent n (cadr x) (caddr x))
(setq n (1+ n))))))
(tbn:error-restore))
Link(s) da(s) subrotina(s) usada(s):
tbn:error-init, DXF, remake-ent, dxf, 3d-of-vla, tbn:error-restore
Neyton, olá novamente!!
ResponderExcluirPara não perder o costume, estou aqui para perturbar.
Desta vez eu consegui fazer sua totina rodar beleza, acho que aprendio a usar o recurso do seu blog, ainda bem.
Só faltou o link do ename-of mas eu achei.
Abraços e parabéns!
que é isso, encomoda não!!!
ResponderExcluirquanto ao link do ename-of, realmente, não está na lista desta rotina pois ela não o usa diretamente, que usa ela é a subrotina DXF, quando converto a rotina LSP para HTML, não consigo pegar as subrotinas que estão dentro de subrotinas pelo programinha (LSP2HTML)...