Commando's via toolpallet (opgelost)

Gestart door Jacob, wo 22 06 2022, 15:57:42

Vorige topic - Volgende topic

Jacob

Beste,

Of mijn vraag hier helemaal juist staat weet ik niet....

Wij tekenen hier met Autocad Architecture, hierop is een applicatie (HSB-cad) gebouwd die commando's heeft die niet van Autocad komen.
Er zijn diverse commando's die we via de "Command string" van een knop in de toolpallet starten/activeren.
Bijvoorbeeld:
^C^C_-PURGE;A;*;N;-PURGE;R;*;N;QSAVE (dit is wel van Autocad), dit purgen en opslaan gaat goed omdat alles achter elkaar afgewerkt kan worden, dus 2 commando's achter elkaar.

De volgende 2 regels zijn 2 commando's van de applicatie:
^c^c(DEFUN c:palettecommand()(hsb_scriptinsert "WV_T-Langsbewerking" "")) palettecommand
^C^C_HSB_DB_ANALYSE
Bij deze commando's moet er een selectie gedaan worden van onderdelen waar vervolgens wat mee gebeurt.
Nu wil ik verschillende/meerdere commando's achter elkaar maken zoals in het Autocad voorbeeld.

Dat heb ik dus ook gedaan:
^c^c(DEFUN c:palettecommand()(hsb_scriptinsert "WV_T-Langsbewerking" "")) palettecommand;^C^C_HSB_DB_ANALYSE
Maar nu stopt hij na het eerste commando niet om een selectie te kunnen maken en gaat gelijk door naar het tweede commando.

De vraag is nu; kan ik tussen de twee commando's iets (code) neerzetten zodat hij wel wacht tot het eerste commando is afgewerkt?
Bijvoorbeeld:
^c^c(DEFUN c:palettecommand()(hsb_scriptinsert "WV_T-Langsbewerking" "")) palettecommand;pauze;^C^C_HSB_DB_ANALYSE

Vast bedankt voor alle tips.
Een expert is iemand die steeds meer weet over steeds minder.

bart

een selectie is te kort info.
voor een  oplossing moet je exact uitleggen wat je wilt selecteren.
je kunt via de commandline het e.e.a. doen maar echt handig werkt dat niet

het is een veel logischere/betere oplossing om het selecteren in de tool  HSB_DB_ANALYSE te verwerken


Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

Jacob

Beste Bart,

Voor het eerste commando selecteren we een aantal "balken" bij die balken wordt naar het volume/eigenschappen gekeken. Als de doorsnede van die balk niet haaks is moet er een langsbewerking aan komen. Op het moment dat dat wordt geconstateerd wordt er bij de eigenschappen in het vakje "Informatie" een tekst toegevoegd.

Bij het tweede commando selecteren we ook een aantal balken, dat kan een andere selectie zijn dan de eerste keer. Dan word bij de geselecteerde balken gekeken naar de verschillende doorsneden. Elke doorsnede krijgt dan bij de eigenschappen een code.

Het probleem is dat de eerste selectie niet kan plaatsvinden omdat hij gelijk doorgaat naar het tweede commando.

Het gaat ook niet precies om wat het commando doet maar meer om een stop na elk commando en dat het tweede, derde of vierde commando pas verder gaat als de voorgaande klaar is.

Ik hoop dat ik het duidelijk genoeg heb uitgelegd.
Een expert is iemand die steeds meer weet over steeds minder.

gery

#3
In LISP gebruik ik deze code direct na het commando waarop gewacht moet worden:(while (= (logand (getvar "CmdActive") 1) 1) (command pause))
AutoCAD 2020 - Windows 10

Jacob

Beste Gery,

Bedankt voor je reactie.
Jouw code heb ik er nu tussen gezet.
Dat is dan:

^c^c(DEFUN c:palettecommand()(hsb_scriptinsert "WV_T-Langsbewerking" "")) palettecommand;(while (= (logand (getvar "CmdActive") 1) 1) (command pause));^C^C_HSB_DB_ANALYSE


Nu veranderd er wel wat, halverwege het eerste commando krijg ik de melding:
Command: (DEFUN c:palettecommand()(hsb_scriptinsert "WV_T-Langsbewerking" "")) C:PALETTECOMMAND
Command: palettecommand
Select a set of beams: (while (= (logand (getvar "CmdActive") 1) 1) (command pause))
Can't reenter LISP.
*Invalid selection*
Expects a point or Window/Last/Crossing/BOX/ALL/Fence/WPolygon/CPolygon/Group/Add/Remove/Multiple/Previous/Undo/AUto/SIngle

Dan kan ik nog wel de selectie doen van het eerste commando en die werkt hij ook goed af.
Nu slaat hij het tweede commando over.

Ook als ik alleen de code "(command pause)" ertussen zet gaat het op dezelfde wijze fout.
Een expert is iemand die steeds meer weet over steeds minder.

roy_043

Probeer:
^c^c_Select;(DEFUN c:palettecommand()(hsb_scriptinsert "WV_T-Langsbewerking" ""));palettecommand;_p;_HSB_DB_ANALYSE

Of:
^c^c(ssget);(DEFUN c:palettecommand()(hsb_scriptinsert "WV_T-Langsbewerking" ""));palettecommand;_p;_HSB_DB_ANALYSE

Jacob

Bij de eerste code gaat hij alles wat in beeld is selecteren en geeft de volgende melding

Command: _Select
Select objects: (DEFUN c:palettecommand()(hsb_scriptinsert "WV_T-Langsbewerking" ""))
C:PALETTECOMMAND
Select objects: palettecommand
*Invalid selection*
Expects a point or Window/Last/Crossing/BOX/ALL/Fence/WPolygon/CPolygon/Group/Add/Remove/Multiple/Previous/Undo/AUto/SIngle/SUbobject/Object
Select objects: _p
6 found
Select objects: _HSB_DB_ANALYSE
*Invalid selection*
Expects a point or Window/Last/Crossing/BOX/ALL/Fence/WPolygon/CPolygon/Group/Add/Remove/Multiple/Previous/Undo/AUto/SIngle/SUbobject/Object
Select objects: *Cancel*


Bij de 2e code geeft hij onderstaande weer, dan moet ik wel een selectie maken, maar de commando's worden niet gedaan.

Command: Loading AEC Design Center UI...
Loading AEC RoomBook Tool...
Command:
Command:
Command: (ssget)
Select objects: (DEFUN c:palettecommand()(hsb_scriptinsert "WV_T-Langsbewerking" ""))
Can't reenter LISP.
*Invalid selection*
Expects a point or Window/Last/Crossing/BOX/ALL/Fence/WPolygon/CPolygon/Group/Add/Remove/Multiple/Previous/Undo/AUto/SIngle
Select objects: Specify opposite corner: 6 found
Select objects:
<Selection set: 299>
Command:
Een expert is iemand die steeds meer weet over steeds minder.

roy_043

Oops. Ik had eerst zelf moeten testen... Er ontbreek een "\" en een ";" in mijn voorstellen.

Dit werkt in BricsCAD (ik heb zelf geen AutoCAD licentie):
^c^c_select;\(c:seltest);_p;;(c:seltest);_p;;

Met deze Lisp code:
(defun c:seltest ( / ss)
  (setq ss (ssget))
  (print (sslength ss))
  (princ)
)


Passen we hetzelfde toe op jouw situatie dan zou dit het resultaat moeten zijn:
^c^c_select;\(DEFUN c:palettecommand()(hsb_scriptinsert "WV_T-Langsbewerking" ""));palettecommand;_p;;_HSB_DB_ANALYSE

bart

met 1 \ kan je presies 1 element selecteren.
je kan er meerdere achter elkaar plaatsen maar het blijft behelpen als je niet vooraf weet of er 1 of 20 balken geselecteerd moeten worden.

het is m.i veel praktischer om de selectie binnen de lispen te laten maken
of beide lispen vanuit een derde aan te sturen waarmee je de selectie regelt als de lispen niet toegankelijk zijn.

Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

Jacob

@Roy,
Die code is juist. de 2 commando's worden allebei correct afgewerkt.
Nu probeer ik dat zelf uit te breiden naar meer commando's
Bedankt   :D

@Bart,
Ik heb zelf ook aan een lisp gedacht, maar daar ben ik niet zo in thuis.
Wellicht kom ik daar alsnog op uit. Ook bedankt.
Een expert is iemand die steeds meer weet over steeds minder.

gery

#10
Citaat van: Jacob op di 28 06 2022, 07:38:09
Beste Gery,

Bedankt voor je reactie.
Jouw code heb ik er nu tussen gezet.
Dat is dan:

^c^c(DEFUN c:palettecommand()(hsb_scriptinsert "WV_T-Langsbewerking" "")) palettecommand;(while (= (logand (getvar "CmdActive") 1) 1) (command pause));^C^C_HSB_DB_ANALYSE


Nu veranderd er wel wat, halverwege het eerste commando krijg ik de melding:
Command: (DEFUN c:palettecommand()(hsb_scriptinsert "WV_T-Langsbewerking" "")) C:PALETTECOMMAND
Command: palettecommand
Select a set of beams: (while (= (logand (getvar "CmdActive") 1) 1) (command pause))
Can't reenter LISP.
*Invalid selection*
Expects a point or Window/Last/Crossing/BOX/ALL/Fence/WPolygon/CPolygon/Group/Add/Remove/Multiple/Previous/Undo/AUto/SIngle

Dan kan ik nog wel de selectie doen van het eerste commando en die werkt hij ook goed af.
Nu slaat hij het tweede commando over.

Ook als ik alleen de code "(command pause)" ertussen zet gaat het op dezelfde wijze fout.
Ik zij "in LISP" gebruik ik die code, niet in "macro".
Zet alle code in een LISP-routine, en laad de LISP-routine via de knop in de TP.
AutoCAD 2020 - Windows 10

gery

Zet deze code in een LISP-bestand, bijv. langsbewerking.lsp, en zet dit LISP-bestand in 1 van de search paths van je AutoCAD sessie.

(hsb_scriptinsert "WV_T-Langsbewerking" "")
  (while (= (logand (getvar "CmdActive") 1) 1) (command pause))
(command "_.HSB_DB_ANALYSE")


In de command string van de knop op de TP, zet je ^C^C(load "test.lsp").
AutoCAD 2020 - Windows 10

Jacob

We zijn er uit met de code in de TP
Vooralsnog laten we het even zo.

Allen bedankt.
Een expert is iemand die steeds meer weet over steeds minder.