Ik wil graag in een lisproutine een tekst laten zien in het grafische scherm. Ik dacht dat ik hiervoor grtext nodig had, maar die werkt niet met het grafische scherm. Op de site van Lee Mac zie ik een voorbeeld van wat ik ongeveer wil, maar ik kan zijn code niet zo snel doorgronden. http://www.lee-mac.com/grtext.html (http://www.lee-mac.com/grtext.html). Op de een of andere manier zet hij blijkbaar een tekst om in vertors, die hij met grvecs op scherm laat zien.
Heeft iemand hier ervaring mee?
Reimer
Wat wil je tonen in die tekst?
Ik wil graag de waarde van TRIMMODE kort op scherm tonen voordat fillet wordt gestart.
(in een andere post zocht ik een andere oplossing hiervoor. Ik merk dat dit nog niet goed werkt voor mij.
http://www.cadsite.be/smf/index.php?topic=6186.0 (http://www.cadsite.be/smf/index.php?topic=6186.0))
Daarnaast ben ik wel benieuwd hoe het principe werkt.
Groeten,
Reimer
Voordat je heel veel tijd investeert: grvecs zijn tijdelijk. Na een zoom, pan of redraw zijn ze verdwenen.
Dat is precies wat ik wil! :vreegoe: Puur om informatie te verschaffen.
Bij het uitvoeren van een fillet wissel ik nog al vaak tussen Trim en No trim. Het zou makkelijk zijn als er na het starten van fillet groot op mijn scherm komt te staan wat de instelling van Trimmode is. Nu moet ik altijd op de commandline lezen hoe deze staat.
Reimer
Ik bedacht dat ik geen tekst hoef om te zetten in vectors. Met 2 of 3 streepjes maak ik een T (Trim) en een N (Notrim). Met GRVECS projecteer ik deze op het midden van het scherm. Zie TRRR hieronder.
Nu wil ik graag de sub-routine TRRR uitvoeren voordat ik Fillet start. Ik weet alleen niet hoe ik het fillet-commando vervolgens moet uitvoeren, aangezien de invoer variabel is. Ik neem aan dat ik iets met CMDACTIVE moet doen, maar ik weet niet hoe ik dit moet toepassen?
(defun c:FRR ()
(TRRR)
(command "fillet"
;(hier iets met CMDACTIVE?)
)
)
Reimer
(defun TRRR ( / XCEN YCEN SCL X1 X2 X3 Y1 Y2)
(setq SCL (/ (getvar 'viewsize) (cadr (getvar 'screensize)) 0.05))
(setq X1 (car (getvar 'viewctr)))
(setq Y1 (cadr (getvar 'viewctr)))
(setq X2 (+ X1 SCL))
(setq X3 (+ X1 SCL SCL))
(setq Y2 (+ Y1 (* 3 SCL)))
(cond
((= (getvar 'trimmode) 0) (grvecs (list 3
(list X1 Y1) (list X1 Y2)
(list X1 Y2) (list X3 Y1)
(list X3 Y1) (list X3 Y2)
));_grvecs
)
((= (getvar 'trimmode) 1) (grvecs (list 1
(list X2 Y1) (list X2 Y2)
(list X1 Y2) (list X3 Y2)
));_grvecs
)
(T (prompt "\nEr is iets fout"))
);_cond
)
(defun c:FRR ()
(TRRR)
(command "_.fillet")
(while (/= 0 (getvar 'cmdactive)) (command pause))
(command "_.redraw")
(princ)
)
Ja, zo logisch kan het zijn. Ik ga het proberen. :vreegoe:
Reimer
Ik heb de code van Roy getest. Helaas werkt deze niet wanneer ik een radius wil opgeven tijdens het uitvoeren van het fillet commando.
Weet iemand waarom het onderstaande commando stopt wanneer ik de filletradius verander?
Reimer
(defun c:FRR ()
(setvar "TRIMMODE" 1)
(command "_.fillet")
(while (/= 0 (getvar 'cmdactive)) (command pause))
(princ)
)
Ik stel hetzelfde vast met BricsCAD. Na het ingeven van de radius is de waarde van CMDACTIVE even (?) 0. Vreemd.
Je zou onderstaande code kunnen proberen. Nadeel van deze oplossing is dat de functie binnen het FILLET commando eindigt en dat het aanroepen van het REDRAW commando om de tijdelijke vectoren te verwijderen niet meer mogelijk is.
(defun c:FRR ()
(setvar "TRIMMODE" 1)
(command "_.fillet")
(princ)
)
Deze 'workaround' code werkt ook in BricsCAD:
(defun c:FRR ()
(setvar "TRIMMODE" 1)
(command "_.fillet")
(while (/= 0 (getvar 'cmdactive)) (command pause))
(if (wcmatch (strcase (getvar 'lastprompt)) "*FILLET RADIUS*")
(progn
(command "_.fillet")
(while (/= 0 (getvar 'cmdactive)) (command pause))
)
)
(princ)
)
Ik vond het ook al een vreemd gebeuren. Je workaround is voor mij momenteel wel de beste oplossing. Bedankt hiervoor! :vreegoe:
Reimer