Martin_S Posted October 24, 2015 Report Share Posted October 24, 2015 (edited) Mam pomysł na lisp (B3D) dla branży budowlanej (bardziej konstrukcyjnej ale i architektonicznej). W najbliższym czasie pokaże to na grafikach, by ułatwić idee. W wersji podstawoewej będzie to podobne do Architecterowego "Wyciągania po ścieżce"/"Path Surface" , ale dużo bardziej użyteczne, bo efektem będzie bryła solidowa 3D, Zasada działania, W przestrzeni XYZ wskazujemy punkt początkowy P1 i końcowy P2 (alternatywnie odcinek prosty linii lub polilinii lub polilinii3D), nastepnie kształt zamknięty (może to być jakis np. przekrój profila stalowego HEB300 itp.), Profil jest ustawiany normalnie tj. prostopadle do odcinka P1-P2, przekrój 2D (płaski o podstawie równoległej do osi X), zawsze zorientowany jest swoją podstawą równolegle do płaszczyzny globalnej XY. grafiki przykładowe w opracowaniu .... pokażą idee :) ... którą w kaleczący sposób stosuje w 3D z powodzeniem co nie raz pokazywałem w sekcji ARCHITECTURE ;) 1. definiowanie dowolnego przekroju 2D zorientowanego do osi X i 9 punktów orientacyjnych 2. Przykładowy odcinek dowolnie usytuowany w przestrzeni 3D względem globalnych osi XYZ. 3. Kluczem ułatwiającym to zadanie jest orientacja tymczasowego lokalnego układu współrzędnych w taki sposób, by oś Z była równoległa do odcinka P1-P2 oś X równoległa do płaszczyzny globalnej XY, co determinuje taki fakt że osie lokalne Z i Y tworzą płaszczyznę lokalną zawsze prostopadłą do płaszczyzny globalnej XY. (Patrz obrazek) 4. Wg tego przykładu zamkniety przekrój w postaci przykładowego IPE500 jest zapisywany jako blok z punktem wstawienia/orientacji np. wg punktu 8. 5. Następnie blok jest wstawiany automatycznie na poczatku odcinka P1, zgodnie z punktem wstawiania osadzany w układzie lokalnym XYZ w punkcie (0,0,0) , na tym przykładzie punkt wstawiania jest zgodny z zdefiniowanym punktem orientacyjnym przekroju tu (8) - środek podstawy IPE500, na koncu blok jest rozbijany (explode) 6. Na końcu przekrój poddawany jest komendzie extrude, gdzie wyciaganie odbędzie się po ścieżce będacej odcinkiem P1-P2 7. Na końcu powrót do układu globalnego XYZ, i mamy efekt finalny, bryła solidowa 3D w postaci IPE500 na odcinku P1-P2 osadzonego na środku podstawy (punkt orientacyjny nr 8) KONIEC ZADANIA p.s. Ja w ten sposób próbuję modelować skomplikowane bryły 3D, dowolnie usytuowane w przestrzeni, ale na "piechotę" B3D.dwg Pomyślę także nad fazowaniem końcówek i offsetowaniem takiego elementu 3D w przestrzeni globalnej XYZ :) Edited October 25, 2015 by Martin_S Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted October 25, 2015 Report Share Posted October 25, 2015 Martin_S, dzięki za opis, jest bardzo czytelny i szczegółowy, ale mam pytanie - jakie byłoby zadanie dla takiego LISPa? To akurat narzędzie z KOMPAS-3D, ale według mnie świetnie rozpracowali rysowanie w przestrzeni. To co pokazałem to tylko kropla w morzu możliwości. Quote Link to comment Share on other sites More sharing options...
Martin_S Posted October 25, 2015 Author Report Share Posted October 25, 2015 (edited) Lisp miałby za zadanie ułatwienie modelowania brył o konkretnym kształcie przekroju zamkniętego. To jest narzędzie o które nie idzie sie doprosić w ZWSOFT (2,5roku) w ZWCAD ARCHITECTURE mające duży potencjał w modelowaniu trudnych konstrukcji https://forum.cad.info.pl/topic/815-co-warto-udoskonalić-w-zwcad-architecture/?p=4321 https://forum.cad.info.pl/topic/815-co-warto-udoskonalić-w-zwcad-architecture/?p=4323 ja sobie radze co pokazałem ostatnio, ale to droga przez "mękę" Edited October 25, 2015 by Martin_S Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted October 25, 2015 Report Share Posted October 25, 2015 Film już powinien śmigać. Źle zaznaczyłem Czyli rozumiem, że jest narysowany profil, i trzeba wskazać ścieżkę po której należy go "puścić", oraz przez który punkt profilu ma przechodzić ścieżka? Quote Link to comment Share on other sites More sharing options...
Martin_S Posted October 25, 2015 Author Report Share Posted October 25, 2015 (edited) Programistycznie proponuje ścieżke jako odcinek prosty, bo ścieżka dowolna np. łuk to chyba masakra, chodzi o znalezienie stycznej na początku łuku by osadzić przekrój w sposób normalny na ściezce, tj prostopadle do ściezki, przekrój jest prostopadły do płaszczyzny utworzonej przez układ lokalny YZ, będący płaszczyzną prostopadłą do płaszczyzny globalnej XY, (kwestia modelowania zgodnego z grawitacją do płaszczyzny głównej XY) - punkt 3 jest kluczowy (osadzenie przekroju normalnie na ścieżce) Docelowo marzy mi się coś takiego Co udowodniłem robiąc to na tzw. piechotę bryłami 3DSolid, że się da Dodam jeszcze, że jestem wstanie na ZWCAD ARCHITECTURE lub gołym ZWCAD zrobić / wycisnąć dużo więcej , ale fajnie by było gdyby inni mogli z tego korzystać, ja sobie radzę na "piechotę" w 3D Drugie marzenie to implementacja AcDbSubDMesh, ale to inna bajka nie dotyczaca tego wątku Lisp B3D działa w ten sposób że użytkownik nie zna "silnika" lispu, ja jestem zielony pod tym wzgledem, wskazuje przekrój i ścieżkę i sposób osadzenia (orientacja przekroju na ściezce) i to wszystko ) jest to "mega" ułatwienie przy modelowaniu konstrukcji stalowych i drewnianych głównie. Co będę pokazywał na przykładach w przyszłosci. :) Edited October 25, 2015 by Martin_S Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted October 25, 2015 Report Share Posted October 25, 2015 To spróbuję podsumować. Dane wejściowe: Wskazujemy przekrój zamknięty (np. dwuteownik). Wskazujemy punkt przekroju, który ma się znaleźć na ścieżce. Wskazujemy ścieżkę. Dane wyjściowe: Skrypt kopiuje wskazany przekrój (w pkt.1) na płaszczyznę prostopadłą do ścieżki (na jej początku). Punkt początku ścieżki pokrywa się z punktem przekroju (wskazany w pkt. 2). :) Quote Link to comment Share on other sites More sharing options...
Martin_S Posted October 25, 2015 Author Report Share Posted October 25, 2015 (edited) Tak dokładnie o to chodzi, by polecenie EXTRUDE prowadziło przekrój na ścieżce w sposób normalny po ścieżce. Bo inaczej wyjdzie bzdura konstrukcyjna a fazowaniem może by to robił inny lisp, ale potrzebuje czasu by krok po kroku pokazać sens i idee działania. W skrócie chodzi o 3 rodzaje końców dla poczatku lub konca: normalny (jako standard), fazowanie prostopadłe do płaszczyzny globalnej XY, równoległe do płaszczyzny globalnej XY opisywałem to w 2013r. https://forum.cad.info.pl/topic/815-co-warto-udoskonalić-w-zwcad-architecture/?p=4323 cytuję: " Polecenie do definiowania sposobu zakończenia początku i końca obiektu 3D BIM tj. Typ 0 - zakończenie normalne do stycznej w punkcie P1 lub P2 obiektu 3D BIM Typ 1 - zakończenie równoległe do płaszczyzny globalnej XY stycznej w punkcie P1 lub P2 obiektu 3D BIM Typ 2 - zakończenie prostopadłe do płaszczyzny globalnej XY stycznej w punkcie P1 lub P2 obiektu 3D BIM wyjątki: Kiedy styczna obiektu 3D BIM w punkcie P1 lub P2 jest równoległa do płaszczyzny globalnej XY , zakończenie typu 1 nie jest aktywne (bo następuje efekt nieskończonego przekroju). Kiedy styczna obiektu 3D BIM w punkcie P1 lub P2 jest równoległa do osi globalnej Z , zakończenie typu 2 nie jest aktywne (bo tu także następuje efekt nieskończonego przekroju)." Edited October 25, 2015 by Martin_S Quote Link to comment Share on other sites More sharing options...
kojacek Posted October 25, 2015 Report Share Posted October 25, 2015 Na sam początek. Od razu pewne uwagi:1) Polecenie EXTRINS wyciąga profil (jedna Polilinia w definicji bloku), po ścieżce będącej linią utworzoną przez wskazanie dwóch punktów.2) To na razie robocza "brudna" wersja do testowania - bez obsługi błędów i z commandem (docelowo bez niego bym wolał)3) Podczas pracy układ współrzędnych powinien być globalnym (nie ma potrzeby niczego zmieniać)4) Na razie blok profilu trzeba podać ręcznie przez nazwę. W przyszłości można zastosować listę w oknie i (lub) przez wskazanie bloku.4) Profil jest ustawiany "prostopadle" do linii wyciągnięcia. To podstawowa cecha. W przyszłości można będzie ustawić go "pod kątem" (generalnie na płaszczyźnie GUW raczej.)5) Testujcie. Nie wiem czy to będzie chodzić na wszystkich waszych ZwCAD-ach, ale zobaczymy.6) Ostatnia uwaga, trzeba załadować CADPL-Pack'a7) Kod: ; =========================================================================================== ; (defun C:EXTRINS (/ InsName StartP EndP PathEnt InsObj Cmd) (if (setq StartP (getpoint "\nPierwszy punkt linii definiującej ścieżkę: ")) (if (setq EndP (getpoint StartP "\nKoniec ścieżki: ")) (if (and (setq InsName (getstring "\nPodaj nazwe bloku: ")) (member (strcase InsName) (mapcar 'strcase (cd:SYS_CollList "BLOCK" (+ 1 2 4 8))) ) ) (progn (cd:SYS_UndoStart) (setq Cmd (getvar "CMDECHO")) (setq InsObj (cd:BLK_InsertBlock StartP InsName '(1 1 1) 0 T)) (SetInsertZOrient (NewVect StartP EndP) (setq InsObj (vlax-vla-object->ename InsObj) ) ) (setq PathEnt (cd:ENT_MakeLine (getvar "CTAB") StartP EndP T)) (vla-explode (vlax-ename->vla-object InsObj)) (entdel InsObj) (setvar "CMDECHO" 0) (command "_.EXTRUDE" (entlast) "" "_path" PathEnt) (setvar "CMDECHO" 1) (entdel PathEnt) (cd:SYS_UndoEnd) ) ) ) ) (princ) ) ; =========================================================================================== ; (defun NewVect (p1 p2 / dt sq sm um uv) (setq dt (mapcar '- p2 p1) sq (mapcar '* dt dt) sm (apply '+ sq) um (sqrt sm) uv (mapcar '/ dt (list um um um)) ) ) ; =========================================================================================== ; (defun SetInsertZOrient (ExtrVec Ename / e b) (setq e (entget Ename) b (trans (cdr (assoc 10 e)) Ename ExtrVec) e (subst (cons 10 b)(assoc 10 e) e) e (subst (cons 50 0.0)(assoc 50 e) e) e (subst (cons 210 ExtrVec)(assoc 210 e) e) ) (entmod e) ) ; =========================================================================================== ; (princ) Quote Link to comment Share on other sites More sharing options...
Martin_S Posted October 25, 2015 Author Report Share Posted October 25, 2015 (edited) Na początek przepraszam , ale lispów nie kumam, zostawiam to fachowcom - dla mnie to "magicy CAD", tak tak, niesamowite rzeczy robicie. Przeciętny uzytkownik wskazuje zamkniętą polilinię jako przekrój (Polilinia musi być zamknięta), blok jest kłopotliwy w nastepnym kroku punkt orientacyjny (9 szt., ale nr 8 standard domyślnie środek opisanej podstawy przekroju) potem wskazanie ścieżki i następuje generowanie bryły solidowej 3D. Edited October 25, 2015 by Martin_S Quote Link to comment Share on other sites More sharing options...
kojacek Posted October 25, 2015 Report Share Posted October 25, 2015 Na początek przepraszam , ale lispów nie kumam, zostawiam to fachowcom - dla mnie to "magicy CAD", tak tak, niesamowite rzeczy robicie. Przeciętny uzytkownik wskazuje zamkniętą polilinię jako przekrój (polilinia musi być zamknięta), blok jest kłopotliwy potem wskazanie ścieżki i następuje generowanie bryły solidowej 3D. Zrobiłem to na podstawie Twojego pliku DWG który tu opublikowałeś na początku. Tam jest jest blok IPE500, testowałem LISP-a na tym właśnie przykładzie. Blok jest o tyle dobry bo można go "porządnie" zdefiniować (właśnie zamknięcie polilinii), jak też określić dla całości orientację (gdzie "dół / góra) itp. Quote Link to comment Share on other sites More sharing options...
Martin_S Posted October 25, 2015 Author Report Share Posted October 25, 2015 (edited) Orientację polilinii zamkniętej okreslamy na płaszczyźnie głównej LUW XY, na płasko , względem osi X globalnej, narysuje przykład za chwilę Przekroj do B3D.dwg Dowolny przekrój jest bez wiedzy użytkownika wirtualnie opisany prostokatem o podstawie równoległej do osi głównej LUW X, stąd powstają wirtualne 9 punkty orientacyjne profilu zamkniętego na scieżce. Te 9 punktów są podstawą dalszego postępowania , jak osadzić taki przekrój na ścieżce domyślnie p. 8 środek prostokata opisujacego przekrój, to chyba powinno ułatwić programowanie lispu, jest wystarczajace dla przekrojów np. symetrycznych w postaci profili stalowych. Edited October 25, 2015 by Martin_S Quote Link to comment Share on other sites More sharing options...
kojacek Posted October 25, 2015 Report Share Posted October 25, 2015 Orientację polilinii zamkniętej okreslamy na płaszczyźnie głównej LUW XY, na płasko , względem osi X globalnej, narysuje przykład za chwilę B3D-008.jpg Przekroj do B3D.dwg Dowolny przekrój jest bez wiedzy użytkownika wirtualnie opisany prostokatem o podstawie równoległej do osi głównej LUW X, stąd powstają wirtualne 9 punkty orientacyjne profilu zamkniętego na scieżce. Te 9 punktów są podstawą dalszego postępowania , jak osadzić taki przekrój na ścieżce domyślnie p. 8 środek prostokata opisujacego przekrój, to chyba powinno ułatwić programowanie lispu, jest wystarczajace dla przekrojów np. symetrycznych w postaci profili stalowych. Spokojnie, póki co oczekuję informacji czy to co podałem działa, i czy działa w sposób, ogólnie oczekiwany. Nie da się zrobić wszystkiego na raz, zwłaszcza że zmienia się co chwilę zdanie (raz blok fajny, innym razem niefajny). Quote Link to comment Share on other sites More sharing options...
Martin_S Posted October 25, 2015 Author Report Share Posted October 25, 2015 Blok wykorzystywuję jak "rzeźbię" na "piechotę" w 3D, on nie jest mi wcale do szczęścia potrzebny, ale pomaga osadzać przekrój w postaci bloku na ściezce ale ten blok rozbijam od razu. Opis punktu 5 (tam osadzam blok i go rozbijam) ;) Quote Link to comment Share on other sites More sharing options...
kojacek Posted October 25, 2015 Report Share Posted October 25, 2015 Blok wykorzystywuję jak "rzeźbię" na "piechotę" w 3D, on nie jest mi wcale do szczęścia potrzebny, ale pomaga osadzać przekrój w postaci bloku na ściezce ale ten blok rozbijam od razu. Opis punktu 5 (tam osadzam blok i go rozbijam) ;) Działa z blokiem teraz czy nie? A jeśli działa to jest źle czy dobrze? Quote Link to comment Share on other sites More sharing options...
Martin_S Posted October 25, 2015 Author Report Share Posted October 25, 2015 (edited) Jak z tego zrobic plik nazwa.lsp (B3D.lsp), czy w notatniku? Zaznaczam że jestem zielony, prosze sie nie denerwować z tego powodu Edited October 25, 2015 by Martin_S Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted October 25, 2015 Report Share Posted October 25, 2015 Zaraz wstawię opis jak uruchomić LISPa, a w zasadzie LISPy. Pierwsze trzeba wczytać CADPL-Pack-v1.lsp , a następnie tego lispa EXTRINS. CAD Pack'a trzeba kliknąć "Zapisz jako" i zapisać na dysku, natomiast kod źródłowy z postu powyżej trzeba wkleić do notatnika i zapisać z rozszerzeniem .lsp i tak wczytać do ZWCAD. Quote Link to comment Share on other sites More sharing options...
Martin_S Posted October 25, 2015 Author Report Share Posted October 25, 2015 (edited) Nie wiem co zrobiłem nie tak wklejam F2 Command: _apploadR:\pliki3D\CADPL-Pack-v1.lsp loaded successfully!R:\pliki3D\B3D.lsp loaded successfully!Command:------- CADPL-Pack-v1.lsp - http://forum.cad.pl-------Command:Command:Command: extrins Testowałem w ZWCAD ARCHITECTURE 2015 SP2 na silniku ZWCAD+ 2015 SP3.1 , czy to mam testować na Classic? wolałbym na ZWCAD+ raczejPierwszy punkt linii definiujÄ…cej Ĺ›cieĹĽkÄ™:Koniec Ĺ›cieĹĽki:Podaj nazwe bloku: IPE600; error: no function definition: CD:SYS_UNDOSTART B3D-001.dwg Testowałem na ZWCAD ARCHITECTURE 2015 SP2 na silniku ZWCAD+ 2015 SP 3.1 Edited October 25, 2015 by Martin_S Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted October 25, 2015 Report Share Posted October 25, 2015 Jak najbardziej może być na ZWCAD+, na filmie chciałem pokazać tylko sposób ładowania LISPa. W obu wersjach jest tak samo. Quote Link to comment Share on other sites More sharing options...
Martin_S Posted October 25, 2015 Author Report Share Posted October 25, 2015 (edited) OOps, w ZWCAD Classic wygląda tak Command: _openCommand: EXTRINSPierwszy punkt linii definiujÄ…cej Ĺ›cieĹĽkÄ™:Koniec Ĺ›cieĹĽki:Podaj nazwe bloku: IPE600error: null function(CD:SYS_UNDOSTART)(PROGN (CD:SYS_UNDOSTART) (SETQ CMD (GETVAR "CMDECHO")) (SETQ INSOBJ (CD:BLK_INSERTBLOCK STARTP INSNAME (QUOTE (1 1 1)) 0 T)) (SETINSERTZORIENT (NEWVECT STARTP ENDP) (SETQ INSOBJ (VLAX-VLA-OBJECT->ENAME INSOBJ))) (SETQ PATHENT (CD:ENT_MAKELINE (GETVAR "CTAB") STARTP ENDP T)) (VLA-EXPLODE (VLAX-ENAME->VLA-OBJECT INSOBJ)) (ENTDEL INSOBJ) (SETVAR "CMDECHO" 0) (COMMAND "_.EXTRUDE" (ENTLAST) "" "_path" PATHENT) (SETVAR "CMDECHO" 1) (ENTDEL PATHENT) (CD:SYS_UNDOEND))(IF (AND (SETQ INSNAME (GETSTRING "\nPodaj nazwe bloku: ")) (MEMBER (STRCASE INSNAME) (MAPCAR (QUOTE STRCASE) (CD:SYS_COLLLIST "BLOCK" (+ 1 2 4 8))))) (PROGN (CD:SYS_UNDOSTART) (SETQ CMD (GETVAR "CMDECHO")) (SETQ INSOBJ (CD:BLK_INSERTBLOCK STARTP INSNAME (QUOTE (1 1 1)) 0 T)) (SETINSERTZORIENT (NEWVECT STARTP ENDP) (SETQ INSOBJ (VLAX-VLA-OBJECT->ENAME INSOBJ))) (SETQ PATHENT (CD:ENT_MAKELINE (GETVAR "CTAB") STARTP ENDP T)) (VLA-EXPLODE (VLAX-ENAME->VLA-OBJECT INSOBJ)) (ENTDEL INSOBJ) (SETVAR "CMDECHO" 0) (COMMAND "_.EXTRUDE" (ENTLAST) "" "_path" PATHENT) (SETVAR "CMDECHO" 1) (ENTDEL PATHENT) (CD:SYS_UNDOEND)))(IF (SETQ ENDP (GETPOINT STARTP "\nKoniec Ĺ›cieĹĽki: ")) (IF (AND (SETQ INSNAME (GETSTRING "\nPodaj nazwe bloku: ")) (MEMBER (STRCASE INSNAME) (MAPCAR (QUOTE STRCASE) (CD:SYS_COLLLIST "BLOCK" (+ 1 2 4 8))))) (PROGN (CD:SYS_UNDOSTART) (SETQ CMD (GETVAR "CMDECHO")) (SETQ INSOBJ (CD:BLK_INSERTBLOCK STARTP INSNAME (QUOTE (1 1 1)) 0 T)) (SETINSERTZORIENT (NEWVECT STARTP ENDP) (SETQ INSOBJ (VLAX-VLA-OBJECT->ENAME INSOBJ))) (SETQ PATHENT (CD:ENT_MAKELINE (GETVAR "CTAB") STARTP ENDP T)) (VLA-EXPLODE (VLAX-ENAME->VLA-OBJECT INSOBJ)) (ENTDEL INSOBJ) (SETVAR "CMDECHO" 0) (COMMAND "_.EXTRUDE" (ENTLAST) "" "_path" PATHENT) (SETVAR "CMDECHO" 1) (ENTDEL PATHENT) (CD:SYS_UNDOEND))))(IF (SETQ STARTP (GETPOINT "\nPierwszy punkt linii definiujÄ…cej Ĺ›cieĹĽkÄ™: ")) (IF (SETQ ENDP (GETPOINT STARTP "\nKoniec Ĺ›cieĹĽki: ")) (IF (AND (SETQ INSNAME (GETSTRING "\nPodaj nazwe bloku: ")) (MEMBER (STRCASE INSNAME) (MAPCAR (QUOTE STRCASE) (CD:SYS_COLLLIST "BLOCK" (+ 1 2 4 8))))) (PROGN (CD:SYS_UNDOSTART) (SETQ CMD (GETVAR "CMDECHO")) (SETQ INSOBJ (CD:BLK_INSERTBLOCK STARTP INSNAME (QUOTE (1 1 1)) 0 T)) (SETINSERTZORIENT (NEWVECT STARTP ENDP) (SETQ INSOBJ (VLAX-VLA-OBJECT->ENAME INSOBJ))) (SETQ PATHENT (CD:ENT_MAKELINE (GETVAR "CTAB") STARTP ENDP T)) (VLA-EXPLODE (VLAX-ENAME->VLA-OBJECT INSOBJ)) (ENTDEL INSOBJ) (SETVAR "CMDECHO" 0) (COMMAND "_.EXTRUDE" (ENTLAST) "" "_path" PATHENT) (SETVAR "CMDECHO" 1) (ENTDEL PATHENT) (CD:SYS_UNDOEND)))))(C:EXTRINS) Sorrki, może jutro mi coś się przejaśni, na razie sie poddaję :) Wracam do ZWCAD ARCHITECTURE z ZWCAD+ Edited October 25, 2015 by Martin_S Quote Link to comment Share on other sites More sharing options...
kojacek Posted October 25, 2015 Report Share Posted October 25, 2015 (edited) Poprawiony kod (zamiast CD:SYS_UNDOSTART powinno być CD:SYS_UNDOBEGIN)Cały kod: ; =========================================================================================== ; (defun C:EXTRINS (/ InsName StartP EndP PathEnt InsObj Cmd) (if (setq StartP (getpoint "\nPierwszy punkt linii definiującej ścieżkę: ")) (if (setq EndP (getpoint StartP "\nKoniec ścieżki: ")) (if (and (setq InsName (getstring "\nPodaj nazwe bloku: ")) (member (strcase InsName) (mapcar 'strcase (cd:SYS_CollList "BLOCK" (+ 1 2 4 8))) ) ) (progn (cd:SYS_UndoBegin) (setq Cmd (getvar "CMDECHO")) (setq InsObj (cd:BLK_InsertBlock StartP InsName '(1 1 1) 0 T)) (SetInsertZOrient (NewVect StartP EndP) (setq InsObj (vlax-vla-object->ename InsObj) ) ) (setq PathEnt (cd:ENT_MakeLine (getvar "CTAB") StartP EndP T)) (vla-explode (vlax-ename->vla-object InsObj)) (entdel InsObj) (setvar "CMDECHO" 0) (command "_.EXTRUDE" (entlast) "" "_path" PathEnt) (setvar "CMDECHO" 1) (entdel PathEnt) (cd:SYS_UndoEnd) ) ) ) ) (princ) ) ; =========================================================================================== ; (defun NewVect (p1 p2 / dt sq sm um uv) (setq dt (mapcar '- p2 p1) sq (mapcar '* dt dt) sm (apply '+ sq) um (sqrt sm) uv (mapcar '/ dt (list um um um)) ) ) ; =========================================================================================== ; (defun SetInsertZOrient (ExtrVec Ename / e b) (setq e (entget Ename) b (trans (cdr (assoc 10 e)) Ename ExtrVec) e (subst (cons 10 b)(assoc 10 e) e) e (subst (cons 50 0.0)(assoc 50 e) e) e (subst (cons 210 ExtrVec)(assoc 210 e) e) ) (entmod e) ) ; =========================================================================================== ; (princ) Edited October 25, 2015 by kojacek Quote Link to comment Share on other sites More sharing options...
Martin_S Posted October 25, 2015 Author Report Share Posted October 25, 2015 W ZWCAD Architecture 2015 SP2 (silnik ZWCAD+ 2015 3.1) po tej korekcie cos dalej nie tak u mnie, cytuje F2 Command: _apploadR:\pliki3D\EXTRINS.lsp loaded successfully!Command:Command:Command: EXTRINSPierwszy punkt linii definiującej ścieżkę:Koniec ścieżki:Podaj nazwe bloku: IPE600; error: no function definition: CD:SYS_COLLLIST Quote Link to comment Share on other sites More sharing options...
kojacek Posted October 25, 2015 Report Share Posted October 25, 2015 Nie no, to dramat jakiś z tym zwcad... a pack teraz załadowany jest? Quote Link to comment Share on other sites More sharing options...
Martin_S Posted October 25, 2015 Author Report Share Posted October 25, 2015 (edited) jest ok już, zaraz wrzuce obrazek , ufff, szacun kojacek Command: _apploadR:\pliki3D\CADPL-Pack-v1.lsp loaded successfully!R:\pliki3D\EXTRINS.lsp loaded successfully!Command:------- CADPL-Pack-v1.lsp - http://forum.cad.pl-------Command:Command:Command: EXTRINSPierwszy punkt linii definiujÄ…cej Ĺ›cieĹĽkÄ™:Koniec Ĺ›cieĹĽki: Cancel!; error: Function cancelledCommand:Command: EXTRINSPierwszy punkt linii definiujÄ…cej Ĺ›cieĹĽkÄ™:Koniec Ĺ›cieĹĽki:Podaj nazwe bloku: IPE600Command:Command:Command: _shademode Current mode: 2D wireframeEnter option [2D wireframe/3Dwireframe/Hidden/Flat/Gouraud/fLat+edges/gOuraud+edges] <2D wireframe>: g B3D-001.dwg Jak tak dobrze idzie to czy ścieżka może być dowolną polilinią o dowolnym kształcie? Z tym blokiem mi sie podoba u kojacka, odpada problem punktu orientacji, bo jest nim punkt wstawiania bloku , to duzo prostsze jednak. Masz rację kojacek. Po prostu Użytkowniku CAD , jak sobie zdefiniujesz punkt wstawiania bloku - przekrój zamkniety, tak ci sie taka "bela" utworzy na ściezce :) Edited October 25, 2015 by Martin_S Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted October 26, 2015 Report Share Posted October 26, 2015 Widzę wszystko działa. Poniżej zamieszczam LISP, który wykonuje zadanie jak w temacie. EXTRINS.lsp LISP jest jest sprawdzony na ZWCAD+ 2015. Wobec powyższego temat zamykam. Dla innych wersji LISPa, nowych pomysłów proszę założyć osobny temat w tym dziale. Quote Link to comment Share on other sites More sharing options...
kojacek Posted October 26, 2015 Report Share Posted October 26, 2015 Przepraszam, jeśli można... Czy nie za szybko zamykamy? Powinno się to jeszcze poprawić: 1. Obsługa błędów. Wywalenie command. 2. Wybieranie bloków, skalowanie ewentualnie. 3. Sprawdzenie bloku (jeden profil) 4. Wprowadzenie innych zakończeń (trzy typy - jak tu Martin pokazywał) 5. (Opcjonalnie) te zabawy ze zmianą punktów (9 wstawień) Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.