Pawcyk Opublikowano 1 Marca 2017 Zgłoś Opublikowano 1 Marca 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
kruszynski Opublikowano 1 Marca 2017 Zgłoś Opublikowano 1 Marca 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
Pawcyk Opublikowano 1 Marca 2017 Autor Zgłoś Opublikowano 1 Marca 2017 Dziękuję bardzo, działa idealnie.
dmatusz3 Opublikowano 1 Marca 2017 Zgłoś Opublikowano 1 Marca 2017 Dzięki za informacje, zamykam temat.
Rekomendowane odpowiedzi