FastFiber

Lisp pauzeren (Opgelost)

Gestart door zone2000, vr 09 05 2008, 12:16:50

Vorige topic - Volgende topic

zone2000

Hallo,

Ik zit met een structureel probleem, namelijk dat LISP routines niet willen pauzeren zoals ik dat graag wil.
Ik wil bij veel programma's de LISP pauzeren zodat ik handmatig objecten kan selecteren of punten op kan geven. Het lukt mij alleen door middel van het commando 'pause' de lisp tijdelijk stop te zetten. Op zich kan ik als ik 4 punten op wil geven 4 pauzes na elkaar zetten. Dat werkt wel. Maar nu ben ik bezig met een programma die een polyline tekent en deze daarna arceert via het 'hatch' commando.
Bij dit programma is het de bedoeling dat ik oneindig veel punten kan opgeven voor de polyline en pas als ik zelf weer een 'enter' geef mag de LISP verder gaan.

Heeft iemand enig idee hoe dat mogelijk is?

Alvast bedankt,
Groeten Lars.

Joop

er zijn binnen vlisp verschillende opdrachten die vlisp laten "pauzeren".
bv: ssget, getpoint, entsel.......

In dit geval zou ik zeggen: gebruik  command opdracht.

(command "pline" "")
(setq HatchBoundery (entlast))
Een gelovig volger van
"de Sacrale Kunst van Luiheid",
zijn leider "Lisp" en acoliet "Script".

zone2000

Hallo Joop,

Bedankt voor je reactie, maar de code die je gaf werkt ook niet.

Dit is mijn programma tot zover:

(defun c:plp ()
(command "pline")
(setq a (entlast))
(command "-hatch" "p" "u" 45 15 "n" "s" "a" "" "")
  )

Kan iemand me helpen?

Alvast bedankt.

Groeten, Lars.

Kenny H

Beste Lars,

Wat jij wil laten tekenen is dus het volgende:
Je duid gewoon een aantal punten aan, deze punten moeten dan met elkaar verbonden worden met een Polyline en dit moet dan gearceerd worden?
Klopt dit?

8) Volvo 4 Life 8)

Joop

Citaat van: zone2000 op vr 09 05 2008, 15:21:37
(defun c:plp ()
(command "pline")
(setq a (entlast))
(command "-hatch" "p" "u" 45 15 "n" "s" "a" "" "")
  )

Dit kan ook niet werken.
Je geeft de variabele a als text in.

(command "-hatch" "p" "u" 45 15 "n" "s" a "" "")

Joop
Een gelovig volger van
"de Sacrale Kunst van Luiheid",
zijn leider "Lisp" en acoliet "Script".

Reimer

Moeten de lisp onderwerpen ook nog even bij de andere lisp vragen worden gezet? Dit vergemakkelijkt het zoeken in de toekomst.

Reimer.

zone2000

Citaat van: Kenny H op vr 09 05 2008, 16:24:11
Beste Lars,

Wat jij wil laten tekenen is dus het volgende:
Je duid gewoon een aantal punten aan, deze punten moeten dan met elkaar verbonden worden met een Polyline en dit moet dan gearceerd worden?
Klopt dit?



Ja dit klopt precies. Ik wil een gebied aangeven die daarna meteen gearceerd wordt.

zone2000

(defun c:plp ()
(command "pline")
(setq a (entlast))
(command "-hatch" "p" "u" 45 15 "n" "s" a "" "")
  )

Deze lisp schiet in één keer van boven naar beneden. Dus zodra ik het commando 'plp' uitvoer wordt het 'pline' commando uitgevoerd. Ik wil op dat moment handmatig een onbeperkt aantal punten ingeven voor de polyline. Pas als ik op enter druk moet de hatch hierover uitgevoerd worden.
Maar AutoCAD voert zelf bij het eerste coördinaat van de polyline meteen de volgende regel van de lisp in, en krijg ik dus een melding dat het een 'invalid point' is.

Hoe kan ik dit oplossen?

Reimer

Ik zou het tekenen van de Pline niet in de lisproutine stoppen. Deze kun je net zo goed eerst tekenen. Je krijgt dan de volgende lisp:

Citeer(defun c:plp ()
(setq a (entsel "Selecteer een polyline om te arceren:   "))
(command "-hatch" "p" "u" 45 15 "n" "s" a "" "")
)

Zelf gebruik ik nog liever mijn eigen HATCHLAST lisp. Na het tekenen van een gesloten lijn geef ik het commando HL en het laatste object wordt gearceerd.

Citeer(defun C:hl ()
(command "-hatch" "p" "u" 45 15 "n" "s" "l" "" "")
)

Reimer

HofCAD

#9
Citaat van: zone2000 op vr 09 05 2008, 12:16:50
Hallo,

Ik zit met een structureel probleem, namelijk dat LISP routines niet willen pauzeren zoals ik dat graag wil.
Ik wil bij veel programma's de LISP pauzeren zodat ik handmatig objecten kan selecteren of punten op kan geven. Het lukt mij alleen door middel van het commando 'pause' de lisp tijdelijk stop te zetten. Op zich kan ik als ik 4 punten op wil geven 4 pauzes na elkaar zetten. Dat werkt wel. Maar nu ben ik bezig met een programma die een polyline tekent en deze daarna arceert via het 'hatch' commando.
Bij dit programma is het de bedoeling dat ik oneindig veel punten kan opgeven voor de polyline en pas als ik zelf weer een 'enter' geef mag de LISP verder gaan.

Heeft iemand enig idee hoe dat mogelijk is?

Alvast bedankt,
Groeten Lars.

Beste Lars,

Moet je Lisp wel pauzeren?

Een variant uit http://www.cadsite.be/smf/index.php/topic,1030.0.html

(defun C:test(/ p1 ~CMD)
(setq ~CMD (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(princ "\nHallo Lars, ik begin.")
(setq p1 (getpoint "\nLars een startpunt graag"))
(command "_PLINE" p1 "W" "0" "")
(while (setq p1 (getpoint p1 "\nLars volgende punt graag, of een <Enter> voor Close"))
(command p1)
)
(command "C")
(command "-HATCH" "p" "u" 45 15 "n" "s" "l" "" "")
(setvar "CMDECHO" ~CMD)
(princ)
)


Met vriendelijke groet, HofCAD CSI

PS 1) Topic moet verplaatst worden naar AutoLisp
     2) AutoLisp is geen VisualLisp http://www.cadsite.be/smf/index.php/topic,2560.0.html
http://www.dailyautocad.com/autolisp/difference-between-autolisp-and-visuallisp-2/
     3) Dit werkt natuurlijk ook:

(defun C:HPL1()
(command "HATCH" "u" 45 15 "n" "" "Y")
)


     4) Uiteindelijk zal je wel zoiets als onderstaand willen hebben, waarbij je natuurlijk
         wel de lagendefinities aan moet passen.

(defun C:HPL2(/ p1 ~CMD ~CLAY Lay1 Lay2)
(setq ~CMD (getvar "CMDECHO")
~CLAY (getvar "CLAYER")
Lay1 "Figuurlijnen" Lay2 "Arceringen")
(setvar "CMDECHO" 0)
(if (tblsearch "LAYER" Lay1)
(command "_LAYER" "T" Lay1 "ON" Lay1 "S" Lay1 "")
(command "_LAYER" "M" Lay1 "C" "Cyan" Lay1 "LW" 0.5 Lay1"")
)
(setq p1 (getpoint "\nEen startpunt graag"))
(command "_PLINE" p1 "W" "0" "")
(while (setq p1 (getpoint p1 "\nEen volgend punt graag, of een <Enter> voor Close"))
(command p1)
)
(command "C")
(if (tblsearch "LAYER" Lay2)
(command "_LAYER" "T" Lay2 "ON" Lay2 "S" Lay2 "")
(command "_LAYER" "M" Lay2 "C" "Yellow" Lay2 "LW" 0.25 Lay2 "")
)
(command "-HATCH" "p" "u" 45 15 "n" "s" "l" "" "")
(setvar "CLAYER" ~CLAY)(setvar "CMDECHO" ~CMD)
(princ)
)



of
(defun C:HPL3(/ ~CMD ~CLAY p1 p2 Lay1 Lay2 oke)
(setq ~CMD (getvar "CMDECHO")
~CLAY (getvar "CLAYER")
Lay1 "Figuurlijnen" Lay2 "Arceringen")
(setvar "CMDECHO" 0)
(if (tblsearch "LAYER" Lay1)
(command "_LAYER" "T" Lay1 "ON" Lay1 "S" Lay1 "")
(command "_LAYER" "M" Lay1 "C" "Cyan" Lay1 "LW" 0.5 Lay1"")
)
(setq p1 (getpoint "\nEen startpunt graag") p2 p1)
(setq oke T)
(command "_PLINE" p1 "W" "0" "")
(while (and oke (setq p2 (getpoint p2 "\nEen volgend punt graag, of een <Enter> voor Close")))
(if (not (and (= (CAR p1) (car p2)) (= (CADR p1)(CADR p2)) (= (CADDR p1)(CADDR p2))))
(command p2)(setq oke nil))
)
(command "C")
(if (tblsearch "LAYER" Lay2)
(command "_LAYER" "T" Lay2 "ON" Lay2 "S" Lay2 "")
(command "_LAYER" "M" Lay2 "C" "Yellow" Lay2 "LW" 0.25 Lay2 "")
)
(command "-HATCH" "p" "u" 45 15 "n" "s" "l" "" "")
(setvar "CLAYER" ~CLAY)(setvar "CMDECHO" ~CMD)
(princ)
)

     5) Misschien is het wel zinvol om de arceerafstand afhankelijk te maken van
         de AutoCAD variabele Dimscale.




ACADcadabra

zone2000

Bedankt HofCAD, dit is precies wat ik zocht.
SUPER!!!:)

En verder iedereen die me geholpen heeft, bedankt!

yoin