Zobrazit plnou verzi příspěvku: Vytvoření složitější polyline
Zdravím, potřeboval bych poradit, jak udělat složitější čáru slouženou z vícero křivek. Ušetřilo by mi to fůru času. díky Tu je jak by měla vypadat.
Co to zkusit jako dynamický blok?
Vladimír Michl
09.01.2018, 13:49
Jestli stačí rovný úsek, určitě dynamickým blokem. Nebo pak multičárou, ale bez oněch koncových bloků.
nebude to pouze rovná čára, ideální by bylo, kdyby šla i do oblouků vimplementovat.
Dynamický blok nemůžu, protože to potřebuji na křivky
Vladimír Michl
09.01.2018, 14:43
V tom případě jedině programováním - odvozením nového typu objektu z objektu LWPOLYLINE (to už je trochu "vyšší dívčí").
To není dobré, a když by se jednalo pouze o křivku, řešení by tedy bylo před tu Multičáru? zkoušel jsem to složil, ale odrazuje mě tam věc, že nejde nastavit tloušťka jednotlivých čar. Nebo je řešení takové, že to musím poskládát po desetinách milimetru čáry jedné barvy a posléze na střed v řadě za sebou umístit tu čárkovanou?
Vladimír Michl
09.01.2018, 15:07
Tloušťka jde většinou nahradit výplní, popř. jde změnit globálně (jako u jiných čar).
No asi by šlo docela snadno napsat utilitku (nebo i najít), která by aplikovala specifickou sestavu na již nakreslenou polyline (jakože násobný offset + změna vlastností). Samozřejmě by to bylo jen statické, čili kdyby se změnila ta původní polyline, tak by se ostatní nezměnily...
fůha, tak to je pro mě španělská vesnice se přiznám. Nemáte někde někdo náhodou nějaký návod jak se z tohodle vymotat?
Vladimír Michl
09.01.2018, 18:26
Vzhledem k tomu, že to je dost specifický požadavek a případný nástroj asi nepůjde úplně zobecnit a byl by jen pro vás - je asi jen možnost poptat vývoj takové utility. Johny nebo někdo u nás by si s tím určitě poradili :-)
Návod jak napsat utilitku nebo jak hledat? Ukazuje se že není snadné něco kloudného dohledat. Napsat to není opravdu moc složité, ale chce to trochu mít základy.Přemýšlel jsem, že bych napsal něco univerzálnějšího, ale pak jsem dal přednost to napsat jak nejjednodušeji to jde, aby jste si to mohl snadno upravit k obrazu svému. V utilitě jsou použity autocadovské příkazy, takže si to můžete v příkazovém řádku odkoukat. Jediné co je, že mám ENG autocad a neznám přesně české překlady, ale vy pokud budete něco upravovat, tak to můžete klidně přepsat na příkazy české.Např "_.COPY" -> "KOPIE", (česky bez podtržítka a tečky)(vl-load-com)(defun c:SložitějšíKřivka ( / pnt enl ent ss i) (if (setq pnt (getpoint "\nPrvní bod nebo <vyber>: ")) (progn (setq enl (entlast)) (command-s "_.PLINE" "_none" pnt) (if (not (equal enl (setq enl (entlast)))) (setq ss (ssadd enl)))) (progn (princ "\nVyber křivky, ") (setq ss (ssget "_:L" '((0 . "LWPOLYLINE")))))) (if ss (repeat (setq i (sslength ss)) (setq ent (ssname ss (setq i (1- i)))) (vla-offset (vlax-ename->vla-object ent) 0.25) (command "_.CHPROP" "_Last" "" "_Color" 30 "" "_.PEDIT" "_Last" "_Width" 0.25 "") (vla-offset (vlax-ename->vla-object ent) -0.25) (command "_.CHPROP" "_Last" "" "_Color" 30 "" "_.PEDIT" "_Last" "_Width" 0.25 "") (command "_.CHPROP" ent "" "_Color" 41 "" "_.PEDIT" ent "_Width" 0.25 "") (command "_.COPY" ent "" "_Displacement" "_none" '(0 0 0) "_.CHPROP" "_Last" "" "_Color" 1 "" "_.CHPROP" "_Last" "" "_LType" "Dashed" "" "_.PEDIT" "_Last" "_Width" 0.08 ""))) (princ))Utilita je LISPem, ten kód vezměte, uložte jako *.lsp někde do SupportPath, ujistěte se že ji máte i mezi SecurityPath, pak to načtěte příkazem _APPLOAD a uložte do Kufříku v dialogu appload.
Vladimír Michl
09.01.2018, 22:24
Hezké, pro CZ verzi jen "Dashed" -> "Čárkovaná".Plus bude potřeba doplnit ty bloky na začátku a na konci. Buď jako blok nebo "namalovat". Tedy např.[CODE](command "_INSERT" "StartBlock" (vlax-curve-getPointAtParam (vlax-ename->vla-object ent) 0) "" "" "")[/CODE]
Vladimír Michl
10.01.2018, 11:05
Tak nakonec to přeci jen stálo za zobecnění. Freeware utilita "toMulti" (ke stažení viz Download) převede vybrané křivky na multi-čáry (s případnými koncovými bloky) dle předefinované sady definic v tabulce v textovém souboru toMulti.tab (kdekoliv v cestě). Viz ukázkové definice v .tab souboru.http://www.cadforum.cz/cadforum/prevod-krivky-na-multi-caru-podle-definicni-tabulky-tip11750
Vladimír Michl2018-01-10 13:25:30
[QUOTE=Vladimír Michl]Hezké, pro CZ verzi jen "Dashed" -> "Čárkovaná".Plus bude potřeba doplnit ty bloky na začátku a na konci....[/QUOTE]
Díky -- nemyslel jsem že to úplně stojí za to -- ale vypadá to pěkně když člověk nakreslí tu polyline v libovolném tvaru a ono se to vzápětí celé prokreslí.Bloky musí být buď ve výkrese nebo uložené ve vyhledávacích cestách.(vl-load-com)(defun c:SložitějšíKřivka ( / pnt enl ent ss i) (if (setq pnt (getpoint "\nPrvní bod nebo <vyber>: ")) (progn (setq enl (entlast)) (command-s "_.PLINE" "_none" pnt) (if (not (equal enl (setq enl (entlast)))) (setq ss (ssadd enl)))) (progn (princ "\nVyber křivky, ") (setq ss (ssget "_:L" '((0 . "LWPOLYLINE")))))) (if ss (repeat (setq i (sslength ss)) (setq ent (ssname ss (setq i (1- i)))) (vla-offset (vlax-ename->vla-object ent) 0.25) (command "_.CHPROP" "_Last" "" "_Color" 30 "" "_.PEDIT" "_Last" "_Width" 0.25 "") (vla-offset (vlax-ename->vla-object ent) -0.25) (command "_.CHPROP" "_Last" "" "_Color" 30 "" "_.PEDIT" "_Last" "_Width" 0.25 "") (command "_.CHPROP" ent "" "_Color" 41 "" "_.PEDIT" ent "_Width" 0.25 "") (command "_.COPY" ent "" "_Displacement" "_none" '(0 0 0) "_.CHPROP" "_Last" "" "_Color" 1 "" "_.CHPROP" "_Last" "" "_LType" "Dashed" "" "_.PEDIT" "_Last" "_Width" 0.08 "") (command "._INSERT" "ArrowBlock" "_Scale" 1 "_Rotate" "_none" (trans (vlax-curve-getFirstDeriv ent (vlax-curve-getParamAtPoint ent (vlax-curve-getStartPoint ent))) 0 1) "_none" (trans '(0 0 0) 0 1) "_none" (trans (vlax-curve-getStartPoint ent) 0 1)) (command "._INSERT" "ArrowBlock" "_Scale" 1 "_Rotate" "_none" (trans '(0 0 0) 0 1) "_none" (trans (vlax-curve-getFirstDeriv ent (vlax-curve-getParamAtPoint ent (vlax-curve-getEndPoint ent))) 0 1) "_none" (trans (vlax-curve-getEndPoint ent) 0 1)))) (princ))
Mockrát Vám všem děkuji, jsem z toho nadšený a ušetří to mnoho času. Díky pánové!