Rekomendowane odpowiedzi

Opublikowano

Witam, potrzebujemy połączyć długość wskazanej polilinii z atrybutem w bloku. Mam dużo polilinii i chcę opisać dowolną wielolinią odniesienia do której mam podpięty blok w którym jednym z atrybutów jest długość wskazanej polilinii. 

Opublikowano

kojacek - dzięki za odzew, oczywiście doszedłem do Twojego forum (od tego zawsze zaczynam 😉 i znam przykład ale jest on dla mnie za "skomplikowany" - pracuję na GstarCAD 2022 i ratuję się też "chatem" "copilotem" i "gemini" i nawet już to wygląda tak jak chcę mam problem z powiązaniem długości polilinii przy zimianie jej długości (oczywiście po regeneracji) się mój lisp sypie - przy wersji bez zmiany długości było OK.

Opublikowano

Voila! Musisz mieć wczytany CADPL-Pack. I ten kod:

; -------------------------------------------------------------------- ;
; MLELEN by kojacek 2026 
; -------------------------------------------------------------------- ;
(defun C:MLELEN ()(jk:ACX_MLePlineLen)(princ))
; -------------------------------------------------------------------- ;
(defun jk:ACX_MLePlineLen (/ %e %o %s %f %l %m %a %v)
  (if
    (and
      (setq %s (car (setq %e (entsel "\nWskaz polilinie:"))))
      (= "LWPOLYLINE" (cdr (assoc 0 (entget %s))))
    )
    (if
      (setq %e (getpoint (setq %f (cadr %e)) "\nPunkt opisu:"))
      (progn
        (setq %l (strcat
                    "%<\\AcObjProp Object(%<\\_ObjId "
                    (GetObjectID
                      (vlax-ename->vla-object %s)(cd:ACX_ADoc))
                    ">%).Length \\f \"%lu2%pr2\">%"
                 )
              %a (angle %f %e)
        )
        (cd:SYS_UndoBegin)
        (setq %m
          (jk:ACX_AddMleader (cd:ACX_ASpace) %l %f %e 1)
        )
        (vla-SetDogLegDirection %m 0
          (vlax-3D-point
            (list (if (<= (car %f)(car %e)) 1 -1) 0 0)
          )
        )
        (vla-update %m)
        (vla-Regen (cd:ACX_ADoc) acActiveViewport)
        (cd:SYS_UndoEnd)
      )
    )
  )
)
; -------------------------------------------------------------------- ;
(defun jk:ACX_AddMleader (Space txt Ps Pe Dir / v vo)
  (if (= (length Ps) 2)(setq Ps (append Ps (list 0.0))))
  (if (= (length Pe) 2)(setq Pe (append Pe (list 0.0))))
  (setq v
    (vlax-make-variant
      (vlax-safearray-fill
        (vlax-make-safearray vlax-vbdouble '(0 . 5))
        (apply 'append (list Ps Pe))
      )
    )
  )
  (setq vo (vla-addMleader Space v 0))
  (if txt (vla-put-TextString vo txt))
  (vla-SetDogLegDirection vo 0
    (vlax-3D-point
      (list
        Dir 0.0 0.0
      )
    )
  )
  (vla-SetLeaderLineVertices vo 0 v)
  vo
)
; -------------------------------------------------------------------- ;
(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))
  )
)
; -------------------------------------------------------------------- ;

A wygląda to tak:

 mlelen.gif.90ab4ad7c21ebcb497010cec694076bf.gif

Opublikowano

Jeszcze mały problemik jest - wczoraj w domu sprawdzałem skrypt na wersji GstarCAD 2025 PRO, dzisiaj w pracy na wersji GstarCAD2022 PRO skrypt "działa" ale zamiast długości polilinii wyświetla mi: %<cObjProp Object(%<\_ObjId 1355108825392>%).Length - nie wiem w czym rzecz wszystkie biblioteki z CADpacka mam podczytane. Testowe lispy z którymi sam walczyłem mam "wyrzucone" z obszaru podczytywania - sprawdziłem na 2 komputerach. Może być wina wersji samego GstarCADa? Podobne "krzaczki" uzyskałem jak sam pisałem skrypty z AI. 

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie