kojacek Opublikowano 27 Października 2015 Zgłoś Opublikowano 27 Października 2015 Racja, przeoczyłem to z dwuteownikami, oooops . plik skoryguję, nie wiedziałem, ze to narobi kupe problemów B3D-018.jpg bedzie zasada jak na grafice DWG z dwuteownikami pozamykanymi, zetowniki także, pręt to okrąg, rura kwadratowa to region mam nadzieje ze bedzie juz ok B3D-003.dwg p.s. dyscyplina w CAD ważna , @kojacek - zrozumiałem, mam nadzieje że tak Ale samo zamknięcie to połowa sukcesu. W tym przypadku "niehigieniczne" jest przecież także pokrywanie się pierwszego i ostatniego wierzchołka. Z tymi regionami to fajna sprawa, można bedzie płyty kanałowe modelować w 3D dużo dużo łatwiej lub pustaki stropowe dowolne do stropów gestożebrowych ..... ciekawych rzeczy sie uczę ;) Jeśli dobrze pamiętam regiony w AutoCAD-zie były dostępne chyba już w wersji 12 (z AME) czyli w ~ 1992 roku! :) Cytuj
Martin_S Opublikowano 27 Października 2015 Autor Zgłoś Opublikowano 27 Października 2015 Co do 1. Skorzystałem z biblioteki profili stalowych , w ten sposób wykonstruowanych - jedynie co moge to uzyc zamkniecia, ale t jak piszesz 1 i ostatni punkt sie pokrywa co do 2. Nie korzystałem z tej opcji , dopiero dzis ją poznałem , wniosek jaki mi sie nasuwa, regiony z otworami są ok do tworzenia brył solidowych, ale niestety nie nadają sie do polecenia SLAB w zwcad architecture. p.s. dygresja dla architecturowców Jesli chcemy miec np. komin 3D sparametryzowany z polecenia SLAB to winny byc osobne obszary zamkniete, w przypadku tworzenia bryły solidowej to nie ma znaczenia, region "z dziurami" duzo wygodniejszy Cytuj
kojacek Opublikowano 27 Października 2015 Zgłoś Opublikowano 27 Października 2015 (edytowane) Kojacku załączam kilka bloków stworzonych w Zwcadzie do testowania. Bloki od "a1" do "a8" zawierają albo polilinie zamknięte albo regiony więc powinny się dać wyciągnąć. Bloki B nie nadają się do tego. err. blok b2 zawiera niezamkniętą polilinię a udaje się go wyciągnąć ?? Wg moich testów - dwie listy: bloków wszystkich i dobrych czyli tych które akceptujemy (Polilinia zamknięta lub region). Jak widać B2 jest skutecznie odfiltrowany: Co do 1. Skorzystałem z biblioteki profili stalowych , w ten sposób wykonstruowanych - jedynie co moge to uzyc zamkniecia, ale t jak piszesz 1 i ostatni punkt sie pokrywa Przecież nie jest zabronione wykorzystanie LISP-a z funkcją (autoreklama): jk:LWP_CorrectStartEndPoint pokazaną na (autoreklama) https://kojacek.wordpress.com/polilinia-zamknieta/ Edytowane 27 Października 2015 przez kojacek Cytuj
kojacek Opublikowano 28 Października 2015 Zgłoś Opublikowano 28 Października 2015 (edytowane) Kolejny etap do testowania... Jeśli chodzi powinien: 1) Rozpoznawać prawidłowe bloki 2) "Urozmaicić wybór", poprzez: podanie nazwy z ręki / wybranie z listy / wskazanie bloku 3) Zapamiętywać ostatnie ustawienia 4) No i polecenie ma skrócone - teraz jest B3D Kod: ; =========================================================================================== ; (load "CADPL-Pack-v1.lsp" -1) ; =========================================================================================== ; (defun C:B3D ()(ExtrIns)(princ)) ; =========================================================================================== ; (defun ExtrIns (/ LBlk InsName StartP EndP PathEnt InsObj) (if (not (setq LBlk (BlockProfileList))) (princ "\nW rysunku nie zdefiniowano bloków dla profili. ") (progn (if (not *B3D-Settings*)(setq *B3D-Settings* (list (car LBlk) 1.0))) (if (setq StartP (getpoint "\nPierwszy punkt linii definiującej ścieżkę: ")) (if (setq EndP (getpoint StartP "\nKoniec ścieżki: ")) (if (setq InsName (GetBlockProfileName LBlk)) (progn (cd:SYS_UndoBegin) (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)) (ExtrudeProfile (vlax-ename->vla-object InsObj) PathEnt) (cd:SYS_UndoEnd) ) ) ) ) ) ) ) ; =========================================================================================== ; (defun GetBlockProfileName (LProf / f k s) (setq f (car *B3D-Settings*) s (car (mapcar '(lambda (%)(cd:STR_ReParse LProf %))(list " "))) ) (initget (strcat "Lista Wybierz " s)) (setq k (vl-catch-all-apply 'getkword (list (strcat "\nProfil [Lista/Wybierz] lub podaj nazwę <" f ">: ")) ) ) (if (not k) f (if (= (type k) 'STR) (cond ( (= k "Lista")(ProfileDlg LProf)) ( (= k "Wybierz")(SelectBlock LProf)) (t k) ) ) ) ) ; =========================================================================================== ; (defun ProfileDlg (BlkL / r p) (setq r (cd:DCL_StdListDialog BlkL (vl-position (car *B3D-Settings*) BlkL) "Profile" "Wybierz:" 25 12 2 12 (list "&Ok" "&Anuluj") nil T T nil) ) (if r (progn (setq p (nth r BlkL)) (setq *B3D-Settings* (list p (cadr *B3D-Settings*)))) ) p ) ; =========================================================================================== ; (defun SelectBlock (Lst / e d s) (if (and (setq e (entsel "\nWybierz blok: ")) (setq d (entget (car e))) (= "INSERT" (cdr (assoc 0 d))) (member (strcase (setq s (cdr (assoc 2 d)))) (mapcar 'strcase Lst) ) ) (progn (setq *B3D-Settings* (list s (cadr *B3D-Settings*))) s ) ) ) ; =========================================================================================== ; (defun ExtrudeProfile (Blk Lin / Prf Crv Reg Del) (vla-explode Blk) (setq Prf (entlast)) (vla-delete Blk) (if (cond ( (= "LWPOLYLINE" (cdr (assoc 0 (entget Prf)))) (setq Crv (vlax-make-safearray vlax-vbObject '(0 . 0))) (vlax-safearray-put-element Crv 0 (vlax-ename->vla-object Prf)) (setq Reg (vla-AddRegion (cd:ACX_ASpace) Crv)) ) ( (= "REGION" (cdr (assoc 0 (entget Prf)))) (setq Reg (vlax-ename->vla-object Prf)) ) (t nil) ) (progn (vla-AddExtrudedSolidAlongPath (cd:ACX_ASpace) (if (= (type Reg )'VLA-OBJECT) Reg (setq Del (vlax-safearray-get-element (vlax-variant-value Reg) 0)) ) (vlax-ename->vla-object Lin) ) (if Del (vla-delete Del)) (foreach % (list Lin Prf)(entdel %)) ) ) ) ; =========================================================================================== ; (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) ) ; =========================================================================================== ; (defun BlockProfile-p (Name / l d) (if (= 1 (length (setq l (cd:BLK_GetEntity Name nil)))) (progn (setq d (entget (car l))) (or (and (= (cdr (assoc 0 d)) "LWPOLYLINE") (= 1 (logand 1 (cdr (assoc 70 d)))) ) (= (cdr (assoc 0 d)) "REGION") ) ) ) ) ; =========================================================================================== ; (defun BlockProfileList (/ l) (if (setq l (cd:SYS_CollList "BLOCK" (+ 1 2 4 8))) (acad_strlsort (vl-remove-if-not '(lambda (%)(BlockProfile-p %)) l)) ) ) ; =========================================================================================== ; (princ "\nZaładowano polecenie: B3D ") (princ) Edytowane 28 Października 2015 przez kojacek pawmal 1 Cytuj
Martin_S Opublikowano 28 Października 2015 Autor Zgłoś Opublikowano 28 Października 2015 (edytowane) Działa, szacun :hi: Mam pytanie o polskie znaki, Chińczycy wprowadzili do ZWCAD UTF-8, a ale w lispie trzeba zawartość zapisac jako ANSI, o tym ostatnio gruzin pisał, znaki polskie już mi działają. Używam angielskojezycznej wersji ZWCAD ARCHITECTURE - na silniku ZWCAD+ 2015 SP3.1 - z przyzwyczajenia. To pytanie to taka odskocznia od problematyki. W następnym kroku zajmę sie matematyczną stroną polecenia F3D do modelowania zakończeń bryły (typu: 0,1,2) po wykonaniu polecenia B3D ... ogarnę to by było łatwiej ;) Edytowane 28 Października 2015 przez Martin_S Cytuj
gruzin Opublikowano 28 Października 2015 Zgłoś Opublikowano 28 Października 2015 Tak wprowadzili UTF-8, ale w plikach lisp to nie działa, próbowałem już przekonwertować swoje lispy na UTF-8 bo potrzebowałem greckich znaków ale to nie działa w ZwCad. Cytuj
Martin_S Opublikowano 28 Października 2015 Autor Zgłoś Opublikowano 28 Października 2015 (edytowane) W takim razie, powinna iść konsekwencja i korekta tego UTF-8 w wersji ZWCAD2017 chyba, by działało to w lispach Niesamowite, modelowanie na bryłach solidowych dawno nie było tak "przyjemne" jak teraz, kilka wieczorów wystarczyło. Ale po co to 3D, to ma na celu dokładne spasowanie elementów w realnym modelu 3D, a z nich powstaną rysunki robocze 2D, to spore ułatwienie jeśli nie korzysta się z profesjonalnych "kombajnów CAD". Taki sobe komentarz. Dobra robota @kojacek. Edytowane 28 Października 2015 przez Martin_S Cytuj
pawmal Opublikowano 28 Października 2015 Zgłoś Opublikowano 28 Października 2015 Witam Dla mnie lisp działa sprawnie i podoba mi się to, że użytkownik może wskazać profil do wyciągnięcia na wiele sposobów. Pozdrawiam Cytuj
kojacek Opublikowano 28 Października 2015 Zgłoś Opublikowano 28 Października 2015 Niestety jest jeden dość duży błąd, ujawniający się w pewnych okolicznościach. Póki co pracuję nad tym... :( Cytuj
Martin_S Opublikowano 28 Października 2015 Autor Zgłoś Opublikowano 28 Października 2015 Jak można pomóc? Cytuj
pawmal Opublikowano 28 Października 2015 Zgłoś Opublikowano 28 Października 2015 Chodzi pewnie o LUW... Pozdrawiam Cytuj
kojacek Opublikowano 28 Października 2015 Zgłoś Opublikowano 28 Października 2015 Nie o LUW, z LUW-em nie ma problemu - tu się wstawi zabezpieczenie że ma być w globalnym i jest po krzyku. Chodzi o nazwy bloków zawierające podkreślnik lub spację. Aby można było wybrać blok z "wolnej ręki", lista bloków przekazywana jest do initget. To zaś powoduje że nazwy są "rozrywane" (podkreślnik służy do lokalizowania nazw, spacej to separatory). Są dwa rozwiązania: 1) Rezygnacja z wpisywania ręcznego (jest wybierz, i wybór z listy, oraz enter jako ostatni) 2) Dodanie słowa kluczowego do wpisu czyli zgłoszenie typu: Profil [Lista/Wybierz/Nazwa]<IPE500>: czyli Lista - wiadomo, Wybierz - wiadomo, i trzeba dodatkowo Nazwa, aby podać nazwę bloku (tu już bez initgeta, tylko zakres listy), enter - wiadomo To jest dodatkowe wydłużenie operacji Cytuj
gruzin Opublikowano 28 Października 2015 Zgłoś Opublikowano 28 Października 2015 ja nigdy nazw bloków nie pamiętam więc dla mnie rezygnacja z wpisywanej nazwy bloku (ewentualnie zmiana na "N" "nazwa bloku") nie jest wadą. Cytuj
dmatusz3 Opublikowano 28 Października 2015 Zgłoś Opublikowano 28 Października 2015 Ja też myślę, że wpisywanie "z rączki" przy innych możliwościach będzie mało popularne. Jeśli można wybrać to lepiej wybrać, ale według mnie wpisanie może być przydatne w jednym przypadku - jeśli w rysunku jest sporo bloków. Nie wiem czy to możliwe (pewnie nie), ale może zamiast wpisywania nazwy bloku dodać filtr, który w oknie wyboru wyświetlałby tylko bloki, które w nazwie mają wpisane znaki. Ale namotałem. Cytuj
Martin_S Opublikowano 28 Października 2015 Autor Zgłoś Opublikowano 28 Października 2015 Dla mnie jako użytkownika wystarczy napisać, zakaz używania w nazwie podkreślnika i spacji i po problemie, krótka piłka, a tak jak jest działa super, po prostu nie bede uzywał spacji ani podkreslnika :) Super jest ta lista i opcja wybierz, szacun :hi: Cytuj
kojacek Opublikowano 28 Października 2015 Zgłoś Opublikowano 28 Października 2015 (edytowane) Dla mnie jako użytkownika wystarczy napisać, zakaz używania w nazwie podkreślnika i spacji i po problemie, krótka piłka, a tak jak jest działa super, po prostu nie bede uzywał spacji ani podkreslnika :) Super jest ta lista i opcja wybierz, szacun :hi: To już lepiej nie brać do listy takich bloków, ale... mam mieszane uczucia czy to dobry sposób. Nakładanie zbyt dużo ograniczeń, też nie jest dobrą drogą. Na razie myślę zrobię z tą Nazwą jako słowo kluczowe, i zobaczymy jak to działa. Edytowane 28 Października 2015 przez kojacek Cytuj
kojacek Opublikowano 28 Października 2015 Zgłoś Opublikowano 28 Października 2015 Kolejne wcielenie do testowania. Zmiany są takie:. 1) Na samym początku można ustawić skalę wstawianego bloku (w konsekwencji profilu). Zakres od 0,001 do 100, ustawiane w oknie. 2) Słowo kluczowe Nazwa do wpisania z ręki nazwy bloku. 3) Poprawki różne Kod: ; =========================================================================================== ; (if (not cd:ACX_ADoc)(load "CADPL-Pack-v1.lsp" -1)) ; =========================================================================================== ; (defun C:B3D ()(b3d:ExtrIns)(princ)) ; =========================================================================================== ; ; ExtrudeProfile.lsp by kojacek 2015 / ; =========================================================================================== ; (defun b3d:ExtrIns (/ l n s e p o x) (if (not (setq l (b3d:BlockProfileList))) (princ "\nW rysunku nie zdefiniowano bloków dla profili. ") (progn (if (not *B3D-Settings*)(setq *B3D-Settings* (list (car l) 1.0))) (if (setq s (vl-catch-all-apply 'b3d:GetPointProfile (list nil))) (if (and (listp s) (setq e (vl-catch-all-apply 'b3d:GetPointProfile (list s))) ) (if (listp e) (if (and (setq n (vl-catch-all-apply 'b3d:GetBlockProfileName (list l))) (= (type n) 'STR) ) (progn (setq x (cadr *B3D-Settings*)) (cd:SYS_UndoBegin) (setq o (cd:BLK_InsertBlock s n (list x x x) 0 T)) (b3d:SetInsertZOrient (b3d:NewVect s e) (setq o (vlax-vla-object->ename o)) ) (setq p (cd:ENT_MakeLine (getvar "CTAB") s e T)) (b3d:ExtrudeProfile (vlax-ename->vla-object o) p) (cd:SYS_UndoEnd) ) ) ) ) ) ) ) ) ; =========================================================================================== ; (defun b3d:GetBlockProfileName (LProf / f k s) (setq f (car *B3D-Settings*) s (car (mapcar '(lambda (%)(cd:STR_ReParse LProf %))(list " "))) ) (initget (strcat "Lista Wybierz Nazwa")) (setq k (vl-catch-all-apply 'getkword (list (strcat "\nProfil [Lista/Wybierz/Nazwa] lub podaj nazwę <" f ">: ")) ) ) (if (not k) f (if (= (type k) 'STR) (cond ( (= k "Lista")(b3d:ProfileDlg LProf)) ( (= k "Wybierz")(b3d:SelectBlock LProf)) ( (= k "Nazwa")(b3d:SelectName LProf)) (t k) ) ) ) ) ; =========================================================================================== ; (defun b3d:SetGlobal (Mode Val) (if (zerop Mode) (setq *B3D-Settings* (list Val (cadr *B3D-Settings*))) (setq *B3D-Settings* (list (car *B3D-Settings*) Val)) ) ) ; =========================================================================================== ; (defun b3d:SelectName (Lst / r) (if (and (setq r (getstring "\nNazwa: ")) (member (strcase r)(mapcar 'strcase Lst)) ) (progn (b3d:SetGlobal 0 r) r) (b3d:GetBlockProfileName Lst) ) ) ; =========================================================================================== ; (defun b3d:ProfileDlg (BlkL / r p) (setq r (cd:DCL_StdListDialog BlkL (vl-position (car *B3D-Settings*) BlkL) "Profile" "Wybierz:" 25 12 2 12 (list "&Ok" "&Anuluj") nil T T nil) ) (if r (progn (setq p (nth r BlkL))(b3d:SetGlobal 0 p))) p ) ; =========================================================================================== ; (defun b3d:SelectBlock (Lst / e d s) (if (and (setq e (entsel "\nWybierz blok: ")) (setq d (entget (car e))) (= "INSERT" (cdr (assoc 0 d))) (member (strcase (setq s (cdr (assoc 2 d)))) (mapcar 'strcase Lst) ) ) (progn (b3d:SetGlobal 0 s) s) (b3d:GetBlockProfileName Lst) ) ) ; =========================================================================================== ; (defun b3d:ExtrudeProfile (Blk Lin / p c r d) (vla-explode Blk) (setq p (entlast)) (vla-delete Blk) (if (cond ( (= "LWPOLYLINE" (cdr (assoc 0 (entget p)))) (setq c (vlax-make-safearray vlax-vbObject '(0 . 0))) (vlax-safearray-put-element c 0 (vlax-ename->vla-object p)) (setq r (vla-AddRegion (cd:ACX_ASpace) c)) ) ( (= "REGION" (cdr (assoc 0 (entget p)))) (setq r (vlax-ename->vla-object p)) ) (t nil) ) (progn (vla-AddExtrudedSolidAlongPath (cd:ACX_ASpace) (if (= (type r)'VLA-OBJECT) r (setq d (vlax-safearray-get-element (vlax-variant-value r) 0)) ) (vlax-ename->vla-object Lin) ) (if d (vla-delete d)) (foreach % (list Lin p)(entdel %)) ) ) ) ; =========================================================================================== ; (defun b3d:NewVect (p1 p2 / d q s m v) (setq d (mapcar '- p2 p1) q (mapcar '* d d) s (apply '+ q) m (sqrt s) v (mapcar '/ d (list m m m)) ) ) ; =========================================================================================== ; (defun b3d: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) ) ; =========================================================================================== ; (defun b3d:BlockProfile-p (Name / l d) (if (= 1 (length (setq l (cd:BLK_GetEntity Name nil)))) (progn (setq d (entget (car l))) (or (and (= (cdr (assoc 0 d)) "LWPOLYLINE") (= 1 (logand 1 (cdr (assoc 70 d)))) ) (= (cdr (assoc 0 d)) "REGION") ) ) ) ) ; =========================================================================================== ; (defun b3d:BlockProfileList (/ l) (if (setq l (cd:SYS_CollList "BLOCK" (+ 1 2 4 8))) (acad_strlsort (vl-remove-if-not '(lambda (%)(b3d:BlockProfile-p %)) l)) ) ) ; =========================================================================================== ; (defun b3d:GetPointProfile (Pt / m r) (setq r (if Pt (progn (initget 1) (getpoint Pt "\nKoniec ścieżki: ") ) (progn (setq m (strcat "\nProfil (" (car *B3D-Settings*) " skala=" (cd:CON_Real2Str (cadr *B3D-Settings*) 2 (getvar "LUPREC")) ") [Skala] lub wskaż pierwszy punkt ścieżki: " ) ) (initget 1 "Skala") (getpoint m) ) ) ) (if (= r "Skala")(b3d:SetProfileScale) r) ) ; =========================================================================================== ; (defun b3d:SetProfileScale ( / f l r) (setq f (cadr *B3D-Settings*) l (getvar "LUPREC") ) (if (setq r (cd:DCL_StdEditBoxDialog (list 3 (list (cons 1 "Wprowadź liczbę rzeczywistą") (cons 2 "Liczba nie może być zerem") (cons 8 "Spacje są niedozwolone") (cons 16 "To nie jest liczba") (cons 32 "Liczba jest za mała") (cons 64 "Liczba jest za duża") ) (cd:CON_Real2Str f 2 l) 0.001 100 2 l ) "Skala" "Wartość: " 25 12 (list "&OK" "&Anuluj") T nil ) ) (b3d:SetGlobal 1 (read r)) ) (b3d:GetPointProfile nil) ) ; =========================================================================================== ; (princ "\nZaładowano polecenie: B3D ") (princ) Testujcie! Cytuj
Martin_S Opublikowano 28 Października 2015 Autor Zgłoś Opublikowano 28 Października 2015 Działa, wyszło lepiej niż myślałem o założeniach na początku, @kojacek jesteś łebski gość - w pozytywnym sensie :hi: Cytuj
kojacek Opublikowano 29 Października 2015 Zgłoś Opublikowano 29 Października 2015 Wy tu sobie testujcie póki co, dajcie znać jak macie jakieś uwagi, a ja sobie powoli przemyślę innych parę pomysłów, bo coś bym tu jeszcze ewentualnie zmienił... Cytuj
Martin_S Opublikowano 29 Października 2015 Autor Zgłoś Opublikowano 29 Października 2015 Ok, fajnie, chcesz B3D "podrasować", ja zajmę się ułatwieniem fazowania końcówek brył solidowych (F3D) od strony matematycznej ;) bo to chyba będzie "SAJGON" Cytuj
gruzin Opublikowano 29 Października 2015 Zgłoś Opublikowano 29 Października 2015 tak sobie myślę: czemu podajemy dwa punkty do wyciągania kształtu. Dlaczego nie dodać opcji typu "wskaż polilinię" i wyciągnąć blok po polilinii. Można by było wyciągnąć od razu rurę po jej osi i uzyskać od razu gotową bryłę rurociągu. To raczej mała zmiana w kodzie ale bardzo duże ułatwienie podczas rysowania. Cytuj
Martin_S Opublikowano 29 Października 2015 Autor Zgłoś Opublikowano 29 Października 2015 To tez mysl, Dwa połaczone punkty mogą byc odcinkiem/ścieżką ze zwyklej linii, polilinii lub polilinii3D ... opcja z 2 punktami jest ok , ale rzeczywiście trochę dłuższa. Cytuj
kojacek Opublikowano 30 Października 2015 Zgłoś Opublikowano 30 Października 2015 Opcja z dwoma punktami jest najprostsza. Wydaje się że też najbardziej naturalna (mam jakieś przeczucie, że w wymyślny sposób gięte profile, w konstrukcjach występują z mniejszą intensywnością, niźli proste). Wyciąganie po wskazanej ścieżce jest też jak najbardziej możliwe. Problemem z jakim się pewnie zetkniemy, a które będzie trudno rozwiązać (albo rozwiązać w sposób stosunkowo rozbudowany) będą: 1) Bryła będzie jedna dla całej ścieżki. Zwykle oczekiwalibyśmy dopasowanych do siebie ale jednak kilka brył. 2) Zbyt małe kąty, czy promienie zaokrągleń, potrzebne do prawidłowego wyciągnięcia (zbyt dużego) profilu.Tego nie będzie można prawdopodobnie kontrolować przed wykonaniem operacji. 3) Ustawienie orientacji profili w początku ścieżki. O ile dla profilu będącym rurą okrągłą, nie ma to szczególnie znaczenia, dla innych może mieć (np. ścieżka oparta na polilinii 2d jest w istocie dwuwymiarowa. Pytanie - czy określamy każdorazowo w jaki sposób względem płaszczyzny na której leży ścieżka ustawiamy np. dwuteownik? Półka równolegle? prostopadle? Inaczej? Dla polilini 3d jest podobnie. Oczywiście coś tam potestujemy, zobaczymy jak to wygląda. Cytuj
Martin_S Opublikowano 30 Października 2015 Autor Zgłoś Opublikowano 30 Października 2015 Najtrudniejsze zagadnieenie to osadzanie bloku prostopadle na początku ścieżki, na prostej ścieżce to "mały pikuś" , gorzej gdy początkiem ścieżki jest łuk, na płaszczyźnie globalnej XY taką sciezke idzie ogarnąć poprzez znalezieniie stycznej na łuku co pomaga w osadzeniu bloku prostopadle do ściezki, gdy łuk jest w przestrzeni XYZ to chyba jest masakra, ale chyba wiem jak to matematycznie obejść. Najlepiej by ścieżka cała (jednolita linia pomieszana z łukami lub bez, nalezała do 1 płaszczyzny. wtedy nie ma problemu ze sprowadzeniem za pomocą 2 wyliczonych obrotów wzgledem osi X i Y aby sprowadzic scieżkę do płaszczyzny globalnej XY, na niej w 2D duzo łatwiej "szuka" się stycznej, potem powrót ze styczną wykonując poprzednie obroty względem Y i X ścieżka wraca na własciwą pozycję w 3D ze styczną, wtedy osadzenie bloku na poczatku łuku i ściezki wykorzystujac zaczepioną styczną jest juz proste. Pisze to , bo na "piechotę" jestem wstanie to wyrzeźbić. ale to nie ten wątek. Cytuj
Rekomendowane odpowiedzi
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ą.