Inverter polilinha

Quem trabalha com topografia e ja usou alguma rotina para inverter o sentido de uma poligonal e descobriu que ela perde a informação da WIDTH? ou o linetype scale?
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

LinkWithin

Related Posts Plugin for WordPress, Blogger...