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

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się