AutoCAD... AutoLISP... VisualLISP...

  [8] Prostowanie chmurki

index  

  W AutoCAD-zie istnieje możliwość rysowania "chmurki" (revision cloud). Jest to zwyczaja płaska dwuwymiarowa zamknięta polinia, której wszystkimi segmentami są łuki. Problem "wyprostowania chmurki" pojawił się na forum CAD. Znając budowę obiektu LWPOLYLINE, wiadomo że segmenty łukowe to tzw. "wypukłości" (bulge), które opisują łuk i zapisywane są jako wartość kodu 42 danych obiektu. Nie wdając się w szczegóły, najprostszą drogą pozbycia się łuków z polilini, jest nadanie wszystkim kodom 42 polilini wartość 0. Poniżej uproszczony kod programu, realizującego taką zmianę. Kod programu poniżej:

(defun C:PLWP (/ Sel Data NData) 
  (if 
    (setq Sel (entsel "\nWybierz LWPoly: ")) 
    (if 
      (= 
        (cdr 
          (assoc 0 
            (setq Data 
              (entget (car Sel)) 
            ) 
          ) 
        ) "LWPOLYLINE") 
        (progn 
          (setq NData 
            (vl-remove-if 
              (function 
                (lambda (%)(= (car %) 42)) 
              ) 
              Data 
            ) 
         ) 
         (entmod NData) 
         T 
       )
       Nil 
    ) 
    Nil 
  ) 
)
Poniżej widać polilinię przed i po usunięciu bulge:
Przedstawiony tutaj program w skróconej wersji, nie posiada obsługi błędów, nie sprawdza możliwości zmian obiektów, oraz nie ustawia znaczników dla UNDO.