Nalezení např. 1/6 mezi dvěmi body
Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: CAD programování
Popis fóra: Otázky programování - nadstavby a utility pro CAD a GIS aplikace Autodesk (VBA, AutoLISP, ARX/C++, .Net, JavaScript, Python, MEL...)
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=4961
Datum vytištění: 03.čvc.2026 v 08:48
Téma: Nalezení např. 1/6 mezi dvěmi body
Odeslal: chlebovsky
Předmět: Nalezení např. 1/6 mezi dvěmi body
Datum odeslání: 02.srp.2007 v 13:16
|
Zdravím. Někdy se mi stane že mám dva objekty a potřebuju mezi ně třeba do 1/6 nakopírovat něco. Vytvořil jsem si utilitku rozdel, ale volám ji vrámci příkazu. A ta mi to má provést. Ale mám problém s tím že mi ten výsledný bod sice dobře spočítá ale vždy přichytí k uchopovacím funkcím. Tak jsem tam nastavil vypnutí, teď to funguje bezvadně, ale vždy vypne uchop. Nevíte jak to opětovně zapnout? Problém je v tom že výsledkem funkce musí být (xyz)....
Tady je lsp:
(defun rozdel (dist / b1 b2 b) (setq b1 (getpoint (getvar "LASTPOINT") "\nDefinuj první bod :")) (setq b2 (getpoint (getvar "LASTPOINT") "\nDefinuj druhý bod :")) (if (< (getvar "OSMODE") 16384)
(setvar "OSMODE" (+ 16384 (getvar "OSMODE")))
) (setq b (polar b1 (angle b1 b2)(* dist (distance b1 b2)))) )
Funguje takto, mám dva prvky. Vemu jeden, dám kopie, a teď určuju bod vložení a já napíšu : (rozdel 0.166666), spustí se funkce, zadám první bod, druhý bod, a prvek se nakreslí do 1/6 ale jak pak zapnout uchop ???
Vždy musím znovu f3.....
|
Odpovědi:
Odeslal: Kackac
Datum odeslání: 03.srp.2007 v 01:00
mám v některých svých lispech: (setq osold (getvar "OSMODE")) - na začátku programu (command "_-osnap" "") - před vložením bloku, resp. ukázáním místa vložení (setvar "OSMODE" osold) - na konci možná to není nejhladší způsob, ale mělo by to fungovat i u toho vašeho lispu
|
Odeslal: Seiner
Datum odeslání: 03.srp.2007 v 06:57
|
Nojo - to je notoricky známá věc, jejíž první část taky p.Chlebovský ve svém lispu (korektněji napsaný) má. Jenže jste si asi nevšimnul, že on chce zadat příkaz normálně (tlačítkem, zkratkou...) a někde uprostřed vkládání parametrů použít předdefinovanou funkci.
Nějak mne nenapadá jiné řešení, něž napsat lispy, které by zahrnovaly i vlastní modifikační funkci (kopírování aj.). Pak není problém vrátit uchopovací mód zpátky. Ztrácí se tak ona flexibilita použití. Na druhou stranu si myslím, že vypisovat pořád "(rozdel 0.166666)" taky není příklad uživatelského konfortu :-)
------------- Vítězslav Seiner
Chrudim
|
Odeslal: chlebovsky
Datum odeslání: 04.srp.2007 v 08:16
|
Použití zpětného nastavení osold, nelze, z důvodu jak zmiňuje i p. Seiner. Poněvadž kdybych použil na konci lispu nastavení (setvar osmode tak hodnota co funkce vrátí je číslo uchopu a nikoliv hodnota spočítaného bodu.
Samo že nevypisuju (rozdel.....) ale mám to defunované v ikoně.
Prostě kliknu na ikonu 1/6 a ta volá celou funkci.
Jen mě napadlo, jestli to co funkce vrátí by nemusel být celý bod, ale posloupnost příkázu
např
(setvar "OSMODE" 0)(list x y z)(setvar "OSMODE" old).... jenže nějak to nemůžu rozchodit.... prostě že výstupem bude celý proces nastavení i bodu...
|
Odeslal: Vladimír Michl
Datum odeslání: 05.srp.2007 v 17:28
Nezkoušel jsem to, ale myslím, že by mohlo v tomto případě pomoci nastavení OSNAPCOORD na 1 - nemusíte pak OSMODE vůbec vypínat.
------------- Vladimír Michl (moderátor) ARKANCE CZ - https://arkance.world - arkance.world (podpora viz emea.support.arkance.world)
|
Odeslal: chlebovsky
Datum odeslání: 06.srp.2007 v 13:37
|
pane Michl tak Vám jsem dával největší šanci, ale taky né. Taky to pořád chytá za uchopovací body....
To předělání funkcí (kopie, ....) dle p. Seinera moc nechci dělat...
Způsob že bych jako vrácenou hodnotu použil
(setvar "OSMODE" 0)(list x y z)(setvar "OSMODE" old) nelze taky protože to sice, vypne, nakreslí bod, a tapne, ale i ty dvě nastavení bere jako info o bodu, takže ve skutečnosti nakreslí 3 body.
Jen mě napadlo, kterou funkci vyvolává klávesa F3 jestli by se to nedalo řešit přímo takto :
(funkce F3)(list x y z)(funkce F3) jen vědět co ta F3 spouští za funkci, a hlavně musí vracet nil..
|
Odeslal: Vladimír Michl
Datum odeslání: 06.srp.2007 v 15:30
|
ne, to na to jdete špatně
zkuste do té vaší rutiny připsat na konec ještě převod na text:
(strcat (rtos(car b)) "," (rtos (cadr b)))
pak bude chodit ten postup s OSNAPCOORD
------------- Vladimír Michl (moderátor) ARKANCE CZ - https://arkance.world - arkance.world (podpora viz emea.support.arkance.world)
|
Odeslal: Seiner
Datum odeslání: 07.srp.2007 v 07:13
Hezké - ono to skutečně funguje. Logika mi sice uniká, ale pokusím si to zapamatovat :-)
------------- Vítězslav Seiner
Chrudim
|
Odeslal: Vladimír Michl
Datum odeslání: 07.srp.2007 v 07:54
Logika je ta, že musíte AutoCAD přesvědčit že jde o "souřadnici zadanou pomocí klávesnice" - pak zabere nastavení OSNAPCOORD.
------------- Vladimír Michl (moderátor) ARKANCE CZ - https://arkance.world - arkance.world (podpora viz emea.support.arkance.world)
|
Odeslal: chlebovsky
Datum odeslání: 13.srp.2007 v 16:39
|
Jo tak nakonec to funguje, moc moc díky všem.
A tady je teda výsledek :
(defun rozdel (dist / b1 b2 b) (if (/= (getvar "OSNAPCOORD") 1)(setvar "OSNAPCOORD" 1)) (setq b1 (getpoint (getvar "LASTPOINT") "\nDefinuj první bod :")) (setq b2 (getpoint (getvar "LASTPOINT") "\nDefinuj druhý bod :")) (setq b (polar b1 (angle b1 b2)(* dist (distance b1 b2)))) (strcat (rtos(car b)) "," (rtos (cadr b))) )
a pak mám dvě ikonky :
a v makru mám lispík : (rozdel 0.5)
a druhý (rozdel (/ 1.0 3.0))
díky.
|
Odeslal: Sedláček
Datum odeslání: 13.srp.2007 v 17:02
|
Nebylo by to jednodušší pře geometrickou kalkulačku _CALC?
Já to sice nepoužívám (ani nemohu - mám LT) ale dle helpu by to mělo jít.
|
Odeslal: Seiner
Datum odeslání: 13.srp.2007 v 17:12
|
BTW, tu polovinu teď už nemusíte řešit - uchopení _M2P.
(Ale takhle to máte jednotné a můžete případně přidávat další zlomky.)
------------- Vítězslav Seiner
Chrudim
|
|