_

Prosty LISP do tworzenia opisu (Multileader) z parametrem?

Forum ogólne, ale nie do zadawania "prostych pytań". Wszystko o CAD, czego nie da się bezpośrednio połączyć z tematyką jednego z poniższych forów tematycznych.

Prosty LISP do tworzenia opisu (Multileader) z parametrem?

Postprzez Tony » wrz 27, 2018 19:59

Cześć wszystkim kolegom i koleżankom inżynierom.

Jestem laikiem AutoCadowym, mimo, że używam go od 10 lat, więc przepraszam, jeżeli pytam o coś oczywistego.

Robię projekt budowli liniowej który składa się w zasadzie tylko z kresek na mapie i ich opisów. W projekcie pojawiają się setki krótkich odcinków, które należy opisać przy pomocy Multleadera. Czy dysponujecie jakimś LISPem, który po uruchomieniu stworzy kreskę + multileader ją opisujący + w tekście multileadera wstawi pożądany tekst i długość kreski zaokrągloną do 0.5? A może LISP do samego Multileadera w którym pojawi się długość odcinka opisywanego?

Pomocy!
Tony
 
Posty: 1
Dołączył(a): wrz 27, 2018 19:47

Re: Prosty LISP do tworzenia opisu (Multileader) z parametre

Postprzez kruuger » paź 05, 2018 11:14

Tony napisał(a):Cześć wszystkim kolegom i koleżankom inżynierom.

Jestem laikiem AutoCadowym, mimo, że używam go od 10 lat, więc przepraszam, jeżeli pytam o coś oczywistego.

Robię projekt budowli liniowej który składa się w zasadzie tylko z kresek na mapie i ich opisów. W projekcie pojawiają się setki krótkich odcinków, które należy opisać przy pomocy Multleadera. Czy dysponujecie jakimś LISPem, który po uruchomieniu stworzy kreskę + multileader ją opisujący + w tekście multileadera wstawi pożądany tekst i długość kreski zaokrągloną do 0.5? A może LISP do samego Multileadera w którym pojawi się długość odcinka opisywanego?

Pomocy!

ale po co lispy? zrob jeden dobrze i CTRL+C CTRL+V. Po wklejenie zmien tekst
k.
Avatar użytkownika
kruuger
 
Posty: 4839
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: Prosty LISP do tworzenia opisu (Multileader) z parametre

Postprzez asa » paź 06, 2018 18:46

[quote="Tony"]Cześć wszystkim kolegom i koleżankom inżynierom.

Jestem laikiem AutoCadowym, mimo, że używam go od 10 lat, więc przepraszam, jeżeli pytam o coś oczywistego.

Robię projekt budowli liniowej który składa się w zasadzie tylko z kresek na mapie i ich opisów. W projekcie pojawiają się setki krótkich odcinków, które należy opisać przy pomocy Multleadera. Czy dysponujecie jakimś LISPem, który po uruchomieniu stworzy kreskę + multileader ją opisujący + w tekście multileadera wstawi pożądany tekst i długość kreski zaokrągloną do 0.5? A może LISP do samego Multileadera w którym pojawi się długość odcinka opisywanego?

Pomocy!

O zaokrąglenia poproś kogoś innego. Reszta powinna działać poprawnie.
Kod: Zaznacz cały
;;dodawanie xdaty do obiektu
(defun xdata_set (obiekt  lista_par / styl dane)
(setq styl (vlax-make-safearray vlax-vbInteger (cons 0 2))
      dane (vlax-make-safearray vlax-vbVariant (cons 0 2)))
(vlax-safearray-put-element styl   0 1001); nazwa (string)
(vlax-safearray-put-element styl   1 1000); informacja (string)
(vlax-safearray-put-element styl   2 1005); handle obiektu skojarzonego


(vlax-safearray-put-element dane 0 (car lista_par))
(vlax-safearray-put-element dane 1 (cadr lista_par))
(vlax-safearray-put-element dane 2 (last lista_par))
(vla-setXdata obiekt styl dane )
)
;;;(setq handle(vla-get-handle(vlax-ename->vla-object(car(entsel)))))
;;;(xdata_set  (vlax-ename->vla-object(car(entsel)))  (list "ss" "too" handle))



(defun ps_odc (linia / x1 y1)
(setq x1 (/(+(vlax-safearray-get-element(vlax-variant-value(vla-get-startpoint linia)) 0)
(vlax-safearray-get-element(vlax-variant-value(vla-get-endpoint linia)) 0))2))
(setq y1 (/(+(vlax-safearray-get-element(vlax-variant-value(vla-get-startpoint linia)) 1)
(vlax-safearray-get-element(vlax-variant-value(vla-get-endpoint linia)) 1))2))
(list x1 y1 0)
)

 
(defun c:test(/ linia p0 p1 mld)
(setq linia(vlax-ename->vla-object(car(entsel"\wybierz linie"))))
(setq p0 (ps_odc linia)
      p1 (list (+(car p0 ) 50)  (+(cadr p0 ) 50) (last p0) )); tutaj jak dalek mld odsuniety od linii dol gora lewo prawo
(setq arr(vlax-make-safearray vlax-vbDouble (cons 0 5)))
(vlax-safearray-fill arr(append p0 p1))
 (setq mld (vla-addmleader (vla-get-modelspace(vla-get-ActiveDocument(vlax-get-acad-object))) arr 0))
(vla-put-textstring mld(rtos (vla-get-length linia) 2 2))
(xdata_set linia (list "asa" "h_mld" (vla-get-handle mld)))
(xdata_set mld (list "asa" "h_linia" (vla-get-handle  linia)))
)

; zmiana lini
(defun zmiana_lini (linia / s d mld1 lista arr)
(vla-getxdata linia "asa" 's 'd)
(setq mld1(vla-HandletoObject (vla-get-ActiveDocument(vlax-get-acad-object)) (vlax-variant-value(vlax-safearray-get-element d 2))))
(setq lista (vlax-safearray->list(vlax-variant-value(vla-getLeaderLineVertices mld1 0))))
(setq lista(append (ps_odc linia) (cdddr lista)))
(setq arr(vlax-make-safearray vlax-vbDouble (cons 0  (1-(length lista)))))
(vlax-safearray-fill arr lista)
(vla-SetLeaderLineVertices mld1 0 arr)
(vla-put-textstring mld1(rtos (vla-get-length linia) 2 2))
)

(defun przesz_i_zm ( / sel1 i lista )
(setq sel1 nil sel1 (ssget "X" '((0 . "LINE") (-3 ("asa"))))i 0 lista nil)
(repeat (sslength sel1)(setq lista (append lista (list(vlax-ename->vla-object(ssname  sel1 i)))))(setq i (1+ i)) )
(foreach el lista (zmiana_lini el))
)


(defun cl_com_re ( / )
 (vlr-remove-all :vlr-command-reactor)
); czyszczenie reaktorów polecen


;;;; zakładanie reaktorow na polecenia
(vlr-command-reactor "asa" '((:vlr-commandwillstart . asa-start)(:vlr-commandended . asa-end)
                    (:vlr-commandcancelled . asa-esc) (:vlr-commandfailed . asa-fail)))

(defun asa-start (?? polecenie /  )
(setq ss nil)


(defun asa-esc (?? polecenie /  )"princ")

(defun asa-fail (?? polecenie /  ) "princ")

(defun asa-end(?? polecenie / )

(cond ((or(=(vl-string-search "MOVE" (car polecenie)))
     (=(vl-string-search "GRIP_STRETCH" (car polecenie)))
     (=(vl-string-search "EXTEND" (car polecenie)))
          (=(vl-string-search "TRIM" (car polecenie))) ) (przesz_i_zm))
(t nil))
 
)


P.S.
Czy bardzo zardzewiałem ?
asa
 
Posty: 522
Dołączył(a): lut 18, 2007 20:01


Powrót do Forum CAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników