Zobrazit plnou verzi příspěvku: Nefunkční LISP aplikace po přechodu na AutoCAD 19
Dostojevskij
06.12.2018, 16:26
Zdravím a prosím o radu. Ve verzi 16 jsem používal jednoduchou aplikaci pro vkládání uzlových bodů do křivky dle zvoleného intervalu. Po přechodu na verzi 19 tato aplikace přestala fungovat. Přikládám zdrojový kód. Nevěděl by někdo, jak ho upravit na novou verzi? Děkuji.(Defun c:staniceni () (if (and (setq pline (car (entsel "\nVyber křivku:"))) (eq (cdr (assoc 0 (entget pline))) "LWPOLYLINE") (setq int (getdist "\nVlož interval staničení:")) (setq in int) ) (while (Setq pt (vlax-curve-getPointAtDist pline int)) (setq ppt (vlax-curve-getparamatpoint pline pt)) (vlax-invoke (vlax-ename->vla-object pline) 'AddVertex (1+ (fix ppt)) (list (car pt) (Cadr pt)) ) (setq int (+ int in)) ) ))
Vladimír Michl
06.12.2018, 16:52
Funguje i ve verzi 2019. Možná doplňte definici lokálních symbolů a (vl-load-com).
Dostojevskij
06.12.2018, 23:20
Děkuji za reakci, ale bohužel se v tom nevyznám. Tu aplikaci jsem nepsal já, poskytl mi ji zde na fóru jeden uživatel na můj dotaz, já pouze editoval dialogy. Byl bych Vám vděčný, kdybyste mne nasměroval, kam do toho kódu patří "definice lokálních symbolů" a kam (vl-load-com), pokusím se s tím poprat... :/ Díky moc.
pavelstyl
07.12.2018, 06:06
Asi nějak takto.Pavel Štyl (Defun c:staniceni (/ pline int in pt ppt) (vl-load-com) (if (and (setq pline (car (entsel "\nVyber křivku:"))) (eq (cdr (assoc 0 (entget pline))) "LWPOLYLINE") (setq int (getdist "\nVlož interval staničení:")) (setq in int) ) (while (Setq pt (vlax-curve-getPointAtDist pline int)) (setq ppt (vlax-curve-getparamatpoint pline pt)) (vlax-invoke (vlax-ename->vla-object pline) 'AddVertex (1+ (fix ppt)) (list (car pt) (Cadr pt)) ) (setq int (+ int in)) ) ))
Vladimír Michl
07.12.2018, 06:06
Zkuste úplně na začátek přidat řádek:(vl-load-com)Nebo ještě lépe použijte aplikaci VTXdist, která nabízí i tuto funkčnost. Viz:https://www.cadforum.cz/cadforum/pridani-vrcholu-krivky-po-stejne-dlouhych-usecich-tip10090
Dostojevskij
07.12.2018, 11:45
Díky vám oběma, pánové, ale bohužel nefunguje ani jedna z možností. U Staničení proběhne výběr křivky i zadání intervalu, ale uzlové body se nepřidají. U VTXdist se objeví pouze dialog "Select a polyline to divide/measure:" a ten po výběru křivky zmizí...
Vladimír Michl
07.12.2018, 13:04
To je nějaké divné. Modifikujete opravdu křivku (LWPOLYLINE)? Zadáváte staničení v jednotkách odpovídajících reálnému rozměru oné křivky? Ve VTXdist není použit žádný dialog a pokud nevyberete křivku, vypíše se varování.
Dostojevskij
28.01.2019, 14:43
Zdravím, pánové. Po delší době se vracím k problému nefunkční aplikace. Hledal jsem všude možně ale bez úspěchu. K otázce výše: ano, modifikuji křivku a zadávám staničení v jednotkách odpovídajících jejímu reálnému rozměru. VTXdist se ukončí po prvním kliknutí a to kamkoli, varování "not a lwpolyline !" se nezobrazí. Nemůže to být chyba v instalaci nebo v nastavení?
Vladimír Michl
28.01.2019, 14:56
Instalace u těchto LISP nástrojů není potřeba. Ta aplikace se "potichu" ukončí jen v případě, že kliknete někam "do prázdna". Vybíráte opravdu vybíratelnou entitu, v nezamčené hladině?
Dostojevskij
28.01.2019, 16:16
Měl jsem na mysli instalaci a nastavení přímo AutoCADu 2019. A jinak dělám všechno, jak píšete. VTXdist se ukončí, ať kliknu kamkoliv - na křivku, na úsečku, do prázdna. Pokusím se zachytit obrazovku a pošlu.
Dostojevskij
28.01.2019, 17:45
Zde můj chabý pokus o demonstraci...
https://youtu.be/xHsmoB6eUxs
Vladimír Michl
28.01.2019, 22:18
Tam bohužel není vidět to nejdůležitější - příkazový řádek a výzvy nebo chyby, které se do něj vypisují. Když tak jednodušší na zachycení je možná Autodesk Screencast.
Dostojevskij
28.01.2019, 22:51
Teď s CMD.https://youtu.be/8d8dwIIQDRk
Vladimír Michl
29.01.2019, 07:09
Zkuste prosím napsat hlášení toho VTXdist. Je to v globálním USS?
Zkoušel jsem VTXdist horem dolem a žádný problém v násilném ukončování tam nevidím.Vladimír Michl2019-01-29 08:48:47
Ondřej Urban
29.01.2019, 10:32
Zdravím,pravda jedu na 2017, ale funguje oboje i s jiným souřadným systémem.Testováno jen systémem drag end drop - "staniceni.lsp" hozeno z průzkumníka na daný výkres a vyzkoušeno, OK.pěkný den Ondra
Zkuste následovat po mě: https://autode.sk/2MKgsTfNakreslete KŘIVKU 150 jednotekVLIDENovýToggle BreakAdd WatchLoad active edit windowActivate AutocadZadejte Staniceni A pak rozumnou rychlostí pořád klikejte Step Into, nebo mačkejte F8.Až budete vyzván, vyberete tu křivku a zadejte 100.Takle vytrasujete na čem vám to spadne. Pak postněte videa a váš testovací výkres. PS. A přístě až budete nahrávat něco s příkazovýcm řádkem tak prosím s více než jedním viditelným řádkem, kde to důležitý uteče a není vidět!!
Dostojevskij
29.01.2019, 17:03
Díky všem za reakce. Johnyho PS mne konečně nakoplo k tomu, co už jsem měl udělat dávno, a to rozšířit příkazový řádek. Pardon. Nuže toto jsme tam našel:Příkaz: VTXDISTSelect a polyline to divide/measure: ; chyba: no function definition: VLAX-ENAME->VLA-OBJECTPříkaz:Příkaz: STANICENIVyber křivku:Vlož interval staničení:100; chyba: no function definition: VLAX-CURVE-GETPOINTATDIST
Vladimír Michl
29.01.2019, 17:33
Vida, a je jasno :-)Stačí přidat ten řádek (vl-load-com) avizovaný v 5. zprávě shora.
Dostojevskij
29.01.2019, 17:50
Ale ten sem tam přidal hned, jak jste mi to napsal!(Defun c:staniceni (/ pline int in pt ppt) (vl-load-com) (if (and (setq pline (car (entsel "\nVyber křivku:"))) (eq (cdr (assoc 0 (entget pline))) "LWPOLYLINE") (setq int (getdist "\nVlož interval staničení:")) (setq in int) ) (while (Setq pt (vlax-curve-getPointAtDist pline int)) (setq ppt (vlax-curve-getparamatpoint pline pt)) (vlax-invoke (vlax-ename->vla-object pline) 'AddVertex (1+ (fix ppt)) (list (car pt) (Cadr pt)) ) (setq int (+ int in)) ) ))
Vladimír Michl
29.01.2019, 17:52
Pak tedy ještě zkuste postupy dle:https://www.cadforum.cz/cadforum/chyba-no-function-definition-vlax-ename-vla-object-tip12122
Dostojevskij
02.02.2019, 17:27
Nuže, pánové, všem vám díky za reakce. Problém konečně vyřešen díky poslednímu odkazu pana Michla, jemuž tímto děkuji obzvláště za ochotu a trpělivost. Bylo to v registrech - doplnil jsem chybějící klíče a vše funguje. Díky!