Pawcyk Posted March 1, 2017 Report Share Posted March 1, 2017 Dzień dobry. W pewnym lispie chciałbym wykorzystywać blok o nazwie znacznik. Blok ten składa się z linii prostej pionowej o długości 0.1 Ponieważ nie potrafię stworzyć czegoś takiego przy pomocy entmake...jak na poniższych przykładach:https://www.zwcad.pl/3-tworzenie-i-modyfikacja-obiektow.html skorzystałem z lispa Lee Mac'a:http://www.cadtutor.net/forum/showthread.php?45495-Block-creation-and-insertion-Lisp-Template i wygląda to tak: (defun c:zna () ;tworzenie definicji bloku "znacznik" ;ale najpierw definicja linii (setq LiniaDef (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") '(100 . "AcDbLine") '(62 . 0) '(370 . -2) (cons 10 (list 0.1 0.1 0)) (cons 11 (list 0.1 0 0 )) ))) ;teraz blok z tej linii ;kod stworzony przez Lee Mac ~11.01.10 (setq P40 (list 0.1 0.1 0)) (cond ( (not (setq ss (ssget (list 0.1 0.1 0))))) ( (repeat 1 (progn (setq bNme "znacznik") (cond ( (not (snvalid bNme)) (princ "\n** Invalid Block Name **")) ( (tblsearch "BLOCK" bNme) (princ "\n** Block Already Exists **")))))) ( (not (setq i -1 pt (list 0.1 0.1 0)))) (t (entmake (list (cons 0 "BLOCK") (cons 10 pt) (cons 2 bNme) (cons 70 0))) (while (setq ent (ssname ss (setq i (1+ i)))) (entmake (entget ent)) (entdel ent)) (entmake (list (cons 0 "ENDBLK") (cons 8 "0"))) (entmake (list (cons 0 "INSERT") (cons 2 bNme) (cons 10 pt))))) (princ) ;Koniec tworzenia bloku ;usuwanie utworzonego bloku lub linii (jeżeli blok już istniał) (setq P41 (list 0 0 0)) (setq P42 (list 1 1 0)) (command "_zoom" "_w" P41 P42) (command "_erase" (ssget P40) "") ;(command "_zoom" "_p") (princ) );KONIEC Problem się pojawia w trzeciej linijce od końca. Jeżeli ta linijka jest aktywna to usuwa także definicję bloku "znacznik". Może jest lepszy sposób na kasowanie stworzonych obiektów np bez konieczności migania widokiem? Pozdrawiam i dziękuję za ewentualną pomoc Link to comment Share on other sites More sharing options...
kruszynski Posted March 1, 2017 Report Share Posted March 1, 2017 Korzystając z entmake, rzeczywiście trochę skomplikowane. A może wystarczy utworzyć blok tak: (vl-load-com) (defun GetModelspace ( / ) (vla-get-Modelspace (vla-get-activedocument (vlax-get-acad-object) ) ) ) (defun UtworzZnacznik ( / blocks bNme blok ) (setq blocks (vlax-get-property (vla-get-activedocument (vlax-get-acad-object) ) 'Blocks ) ) (setq bNme "znacznik") (setq blok (vlax-invoke-method blocks 'Add (vlax-3d-point (list 0 0 0 ) ) bNme ) ) (vlax-invoke-method blok 'AddLine (vlax-3d-point (list 0 0 0 ) ) (vlax-3d-point (list 0 0.1 0 ) ) ) blok ) (defun C:WstawZnacznik ( / ) (setq bNme "znacznik") (setq blok (tblsearch "BLOCK" bNme) ) (if (null blok ) (setq blok (UtworzZnacznik) ) ) (vlax-invoke-method (GetModelspace) 'InsertBlock (vlax-3d-point ( getpoint "Gdzie wstawić" ) ) bNme 1 1 1 0 ) ) blok.lsp Link to comment Share on other sites More sharing options...
Pawcyk Posted March 1, 2017 Author Report Share Posted March 1, 2017 Dziękuję bardzo, działa idealnie. Link to comment Share on other sites More sharing options...
dmatusz3 Posted March 1, 2017 Report Share Posted March 1, 2017 Dzięki za informacje, zamykam temat. Link to comment Share on other sites More sharing options...
Recommended Posts