AutoLISP

FIELD – pochylenie dynamiczne LISP-em

Utworzenie opisu którego treścią jest dynamiczna wartość pochylenia linii, opisałem za pomocą obiektu typu FIELD (pole danych), opisałem TUTAJ. Teraz przedstawię ten sposób, ale zautomatyzowany za pomocą LISP-a. Krótkie makro tworzy polecenie NACHYL, redukując w ten sposób proces tworzenia dynamicznego opisu, do kilku kliknięć.

Wywołanie polecenia NACHYL pozwala wstawić opis pochylenia wskazanej linii w jednym z trzech formatów, jako procent, promil, lub wartość kąta w stopniach:

nachyl01

Po wybraniu opcji, wybraniu linii, oraz wskazaniu miejsca wstawienia tekstu, tworzony jest obiekt tekstowy z zawartością będącą FIELD-em (dynamicznym polem danych).  Tekst powstaje na aktualnej warstwie, z aktualnie ustawioną wysokością tekstu, aktualnym stylem tekstu. Co ważne – powinien to być styl oparty o czcionkę typu TTF, większość fontów SHX nie ma znaku promila, zakodowanego jako UNICODE.

nachyl

Poniżej kod LISP-a, definiującego polecenie NACHYL. Program wymaga załadowanego CADPL-Pack’a , w dowolnej wersji.


; ----------------------------------------------------------------- ;
; Polecenie NACHYL tworzy opis pochylenia wskazanej linii           ;
; Wymaga CADPL-Pack-v1.lsp                                          ;
; 2016 kojacek                                                      ;
; ----------------------------------------------------------------- ;

(defun C:NACHYL (/ o l p f v i x GetObjectID)
  (defun GetObjectID (obj doc) ;; Lee Mac
    (if (eq "64" (strcase (getenv "PROCESSOR_ARCHITECTURE")))
      (vlax-invoke-method (vla-get-Utility doc)
        'GetObjectIdString obj :vlax-false)
      (itoa (vla-get-Objectid obj))
    )
  )
  (if
    (setq o
      (cd:USR_GetKeyWord "\nOpis nachylenia linii"
        '("Procent" "pRomil" "Kąt") "Procent")
    )
    (if
      (setq l
        (cd:USR_EntSelObj
          (list
            "\nWybierz linię nachylenia: " "Należy wskazać linię. "
            "Nic nie wybrano. " "To nie jest linia. "
          )
          (list "LINE") nil nil t
        )
      )
      (if
        (setq p (getpoint "\nPunkt wstawienia tekstu: "))
        (progn
          (setq v (GetObjectID (vlax-ename->vla-object (car l))
                    (cd:ACX_ADoc))
                i (if
                    (>= (atof (getvar "ACADVER")) 17.1)
                    "%<\\AcObjProp.16.2 Object(%<\\_ObjId "
                    "%<\\AcObjProp Object(%<\\_ObjId "
                  )
                j ">%).Angle \\f \"%au0%zs8\">%"
                x "%<\\AcExpr (round(abs(tang("
                z (if
                    (= o "Procent")
                    "))*100))>%"
                    "))*1000))>%"
                  )
          )
          (setq f
            (if
              (= o "Kąt")
              (strcat i v j "%%d")
              (strcat
                (strcat x i v j z)
                (if (= o "Procent") "%" "\\U+2030")
              )
            )
          )
          (cd:SYS_UndoBegin)
          (cd:ACX_AddText (cd:ACX_ASpace) f p
            (getvar "TEXTSIZE") 0.0)
          (cd:SYS_UndoEnd)
        )
        (princ "\nAnulowano. ")
      )
      (princ "\nAnulowano. ")
    )
  )
  (princ)
)

Dodaj komentarz

Ta witryna wykorzystuje usługę Akismet aby zredukować ilość spamu. Dowiedz się w jaki sposób dane w twoich komentarzach są przetwarzane.