Wyciągnięcie bryły pomiędzy dwoma punktami (po linii prostej).


Rekomendowane odpowiedzi

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

post-140-0-82666900-1445724176_thumb.jpg

 

2. Przykładowy odcinek dowolnie usytuowany w przestrzeni 3D względem globalnych osi XYZ.

post-140-0-50331100-1445724252_thumb.jpg

 

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)

post-140-0-57102300-1445724874_thumb.jpg

 

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.

post-140-0-51373200-1445725259_thumb.jpg

 

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)

post-140-0-97354900-1445725765_thumb.jpg

 

6. Na końcu przekrój poddawany jest komendzie extrude, gdzie wyciaganie odbędzie się po ścieżce będacej odcinkiem P1-P2

post-140-0-19296600-1445726142_thumb.jpg

 

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

post-140-0-24327000-1445726284_thumb.jpg

 

 

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 :)

Edytowane przez Martin_S
Odnośnik do komentarza
Udostępnij na innych stronach

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.

 

Odnośnik do komentarza
Udostępnij na innych stronach

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ę"

photo_wiata_MS-BUD_19-10-20153.jpg

Edytowane przez Martin_S
Odnośnik do komentarza
Udostępnij na innych stronach

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)

B3D-003.jpg

 

 

Docelowo marzy mi się coś takiego

sml_gallery_140_2_14029.jpg

 

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. :)

Edytowane przez Martin_S
Odnośnik do komentarza
Udostępnij na innych stronach

To spróbuję podsumować.

 

Dane wejściowe:

  1. Wskazujemy przekrój zamknięty (np. dwuteownik).
  2. Wskazujemy punkt przekroju, który ma się znaleźć na ścieżce.
  3. 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).

:)

Odnośnik do komentarza
Udostępnij na innych stronach

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

 

UNIVERSAL_3D_PROFILE-003-ENDING_COMMAND.jpg

 

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)."

Edytowane przez Martin_S
Odnośnik do komentarza
Udostępnij na innych stronach

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'a
7) 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)

 

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Edytowane przez Martin_S
Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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ę

 

post-140-0-27440600-1445804007_thumb.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.

Edytowane przez Martin_S
Odnośnik do komentarza
Udostępnij na innych stronach

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ę

 

attachicon.gifB3D-008.jpg

 

attachicon.gifPrzekroj 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).

Odnośnik do komentarza
Udostępnij na innych stronach

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?

Odnośnik do komentarza
Udostępnij na innych stronach

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.

 

Odnośnik do komentarza
Udostępnij na innych stronach

Nie wiem co zrobiłem nie tak

 

wklejam F2

 

Command: _appload
R:\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+ raczej

Pierwszy 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

Edytowane przez Martin_S
Odnośnik do komentarza
Udostępnij na innych stronach

OOps, w ZWCAD Classic wygląda tak

 

Command: _open
Command: EXTRINS
Pierwszy punkt linii definiującej ścieżkę:
Koniec ścieżki:
Podaj nazwe bloku: IPE600
error: 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+

Edytowane przez Martin_S
Odnośnik do komentarza
Udostępnij na innych stronach

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)
Edytowane przez kojacek
Odnośnik do komentarza
Udostępnij na innych stronach

W ZWCAD Architecture 2015 SP2 (silnik ZWCAD+ 2015 3.1)

 

po tej korekcie cos dalej nie tak u mnie, cytuje F2

 

Command: _appload
R:\pliki3D\EXTRINS.lsp loaded successfully!



Command:
Command:
Command: EXTRINS

Pierwszy punkt linii definiującej ścieżkę:
Koniec ścieżki:
Podaj nazwe bloku: IPE600
; error: no function definition: CD:SYS_COLLLIST

Odnośnik do komentarza
Udostępnij na innych stronach

jest ok już, zaraz wrzuce obrazek , ufff, szacun kojacek

 

Command: _appload
R:\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: EXTRINS

Pierwszy punkt linii definiującej ścieżkę:
Koniec ścieżki: Cancel!
; error: Function cancelled

Command:
Command: EXTRINS

Pierwszy punkt linii definiującej ścieżkę:
Koniec ścieżki:
Podaj nazwe bloku: IPE600


Command:
Command:
Command: _shademode Current mode: 2D wireframe
Enter option [2D wireframe/3D
wireframe/Hidden/Flat/Gouraud/fLat+edges/gOuraud+edges] <2D wireframe>: g

 

 

post-140-0-58640000-1445808989_thumb.jpg

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 :)

Edytowane przez Martin_S
Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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ń)

Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie