FastFiber

Hoe zet ik tekst in het grafische venster met GRVECS?

Gestart door Reimer, vr 20 11 2015, 13:35:22

Vorige topic - Volgende topic

Reimer

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. 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

EddyBeerke

Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

Reimer

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)

Daarnaast ben ik wel benieuwd hoe het principe werkt.

Groeten,
Reimer

roy_043

Voordat je heel veel tijd investeert: grvecs zijn tijdelijk. Na een zoom, pan of redraw zijn ze verdwenen.

Reimer

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

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
)

roy_043

(defun c:FRR ()
  (TRRR)
  (command "_.fillet")
  (while (/= 0 (getvar 'cmdactive)) (command pause))
  (command "_.redraw")
  (princ)
)

Reimer

Ja, zo logisch kan het zijn. Ik ga het proberen.  :vreegoe:

Reimer

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)
)

roy_043

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)
)

roy_043

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)
)

Reimer

Ik vond het ook al een vreemd gebeuren. Je workaround is voor mij momenteel wel de beste oplossing. Bedankt hiervoor!  :vreegoe:

Reimer

FastFiber