Ik ben een wandroutine aan het schrijven.
Nu kan ik wel een polyline selecteren en dezel laten veranderen in een wand.
Maar het lukt mij niet om de routine te vervolgen na het tekenen van een polyline.
Ik wil dus een polyline ((command: "polyline" enz... ) teken (met variabel aantal punten) en daarna deze lijn laten selecteren met (entsel "Last").
Maar na het tekenen van de polyline wordt de routine altijd afgebroken. :?
Weet iemand hoe mijn routine kan worden vervolgd zonder onderbreken na het tekenen van de polyline>>
Groet Wilfred :wink:
Om het te laten werken diend het commando netjes te eindigen.
je moet dus weten waneer het laaste punt is gezet.
Citaat van: bart op vr 10 02 2006, 09:50:00
Om het te laten werken diend het commando netjes te eindigen.
je moet dus weten waneer het laaste punt is gezet.
Ja maar hoe weet ik dat, hoe merkt autolisp dat het laatste punt gezet is?
ik neem aan dat je de punten van de geselecteerde polylijn in een lijst zet
zie onderstaande uitleg van Joop over lijsten
http://www.cadsite.be/lisp/lisp.php (http://www.cadsite.be/lisp/lisp.php)
Citaat van: bart op vr 10 02 2006, 10:24:24
ik neem aan dat je de punten van de geselecteerde polylijn in een lijst zet
zie onderstaande uitleg van Joop over lijsten
http://www.cadsite.be/lisp/lisp.php (http://www.cadsite.be/lisp/lisp.php)
Ja klopt maar dat is voor latere zorg. Ik moet een brug maken tussen de polyline en het vervolg van de routine
(command ".pline" p1 p2 p3 "")
deze regel tekend een pline met 3 punten
waarna de lisp gewoon verder gaat
plaats anders even een stuk van je code met een stukje tekst wat je wilt
want volgensmij moet je eerst een lijst van de punten aanmaken
(om hun aantal vast te stellen)
Citaat van: Wilfred op vr 10 02 2006, 09:15:05
Ik ben een wandroutine aan het schrijven.
Nu kan ik wel een polyline selecteren en dezel laten veranderen in een wand.
Maar het lukt mij niet om de routine te vervolgen na het tekenen van een polyline.
Ik wil dus een polyline ((command: " polyline" enz... ) teken (met variabel aantal punten) en daarna deze lijn laten selecteren met (entsel "Last").
Maar na het tekenen van de polyline wordt de routine altijd afgebroken. :?
Weet iemand hoe mijn routine kan worden vervolgd zonder onderbreken na het tekenen van de polyline>>
Groet Wilfred :wink:
Beste Wilfred,
Je kunt zoiets als onderstaand maken.
Natuurlijk kun je in plaats van repeat natuurlijk ook while gebruiken.
Groetjes HofCAD CSI
(defun c:test()
(setq ~CMD (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(princ "\nHallo Wilfred, ik begin.")
(setq i 0)
(setq plist '( '(20 30) '(20 40) '(30 40) '(30 50) '(40 50) '(40 60) '(50 60) '(50 70)))
(command "PLINE")
(eval (nth 0 plist))
(repeat (length plist)
(command (eval (nth i plist)))
(setq i (1+ i))
)
(command "")
(setq e (entlast))
(command "_CHPROP" e "" "C" "1" "")
(getstring "\nWilfred geef een <Enter> voor kleurverandering.")
(command "_CHPROP" e "" "C" "6" "")
(princ "\nHallo Wilfred, ik eindig.")
(setvar "CMDECHO" ~CMD)
(princ)
)
Citaat van: HofCAD op vr 10 02 2006, 13:37:27
Citaat van: Wilfred op vr 10 02 2006, 09:15:05
Ik ben een wandroutine aan het schrijven.
Nu kan ik wel een polyline selecteren en dezel laten veranderen in een wand.
Maar het lukt mij niet om de routine te vervolgen na het tekenen van een polyline.
Ik wil dus een polyline ((command: " polyline" enz... ) teken (met variabel aantal punten) en daarna deze lijn laten selecteren met (entsel "Last").
Maar na het tekenen van de polyline wordt de routine altijd afgebroken. :?
Weet iemand hoe mijn routine kan worden vervolgd zonder onderbreken na het tekenen van de polyline>>
Groet Wilfred :wink:
Beste Wilfred,
Je kunt zoiets als onderstaand maken.
Natuurlijk kun je in plaats van repeat natuurlijk ook while gebruiken.
Groetjes HofCAD CSI
(defun c:test()
(setq ~CMD (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(princ "\nHallo Wilfred, ik begin.")
(setq i 0)
(setq plist '( '(20 30) '(20 40) '(30 40) '(30 50) '(40 50) '(40 60) '(50 60) '(50 70)))
(command "PLINE")
(eval (nth 0 plist))
(repeat (length plist)
(command (eval (nth i plist)))
(setq i (1+ i))
)
(command "")
(setq e (entlast))
(command "_CHPROP" e "" "C" "1" "")
(getstring "\nWilfred geef een <Enter> voor kleurverandering.")
(command "_CHPROP" e "" "C" "6" "")
(princ "\nHallo Wilfred, ik eindig.")
(setvar "CMDECHO" ~CMD)
(princ)
)
Ja dit werkt wel maar nu zijn de punten al door jou voor gedefineerd.
Bij mij moet de gebruiker zelf de punten en de hoeveelheid daarvan zelf aangeven.
duss de gebruiker tekent een polyline en mijn routine moet vervolgens na het zetten van het laatste punt verder gaan met het opvragen van de eigenschappen van de lijn. kan dat?
Citaat van: Wilfred op za 11 02 2006, 11:10:00
Bij mij moet de gebruiker zelf de punten en de hoeveelheid daarvan zelf aangeven.
duss de gebruiker tekent een polyline en mijn routine moet vervolgens na het zetten van het laatste punt verder gaan met het opvragen van de eigenschappen van de lijn. kan dat?
waarom je weet al die punten immers al want je hebt ze net laten tekenen
om de lijn tijdens het invoeren te laten zien kan je ook eerst de lijn in stukjes opbouwen van steeds twee punten
(het beginpunt van een lijn start automatiche op het laatse punt als je met een enter begint.)
als alle punten zijn gezet vervang je de lijnstukjes door een nieuwe polylijn (waatvan je dan het aantal punten weet omdat je die in een lijst hebt opgeslagen)
Citaat van: bart op vr 10 02 2006, 09:50:00
Om het te laten werken diend het commando netjes te eindigen.
je moet dus weten waneer het laaste punt is gezet.
Inderdaad, als ik zou weten wanneer het laatse punt gezet wordt kan zou ik ook geen probleem hebben.
Maar ik weet juist niet wanneer het laatste punt geplaatst gaat worden? of kan autocad dat herkennen op 1 of ander manier. Als het niet lukt kan ik met getpoint gaan werken en zo een lijst maken met punt. MAAR dan ziet de tekenaar niet de lijn tussen de punten die hij aangeeft. OF kan ik dat wel zichtbaar maken zodat hij kan zien welke lijnen hij al heeft gezet.
Groet Wilfred
Citaat van: bart op za 11 02 2006, 11:40:45
om de lijn tijdens het invoeren te laten zien kan je ook eerst de lijn in stukjes opbouwen van steeds twee punten
(het beginpunt van een lijn start automatiche op het laatse punt als je met een enter begint.)
als alle punten zijn gezet vervang je de lijnstukjes door een nieuwe polylijn (waatvan je dan het aantal punten weet omdat je die in een lijst hebt opgeslagen)
Citaat van: Wilfred op za 11 02 2006, 11:10:00
Ja dit werkt wel maar nu zijn de punten al door jou voor gedefineerd.
Bij mij moet de gebruiker zelf de punten en de hoeveelheid daarvan zelf aangeven.
duss de gebruiker tekent een polyline en mijn routine moet vervolgens na het zetten van het laatste punt verder gaan met het opvragen van de eigenschappen van de lijn. kan dat?
Beste Wilfred,
Ik maak van het aantal punten dat is voor gedefinieerd geen echt gebruik,
want ik laat Lisp de lengte van de lijst bepalen.
En bij die lijst mag je nog punten toevoegen of eraf halen.
Het volgende onderstaande programma is een variant op het vorige,
waarbij repeat o.a. is vervangen door while.
Waarschijnlijk is ook dit tweede programma niet wat je wenst. :oops:
Je kunt overigens ook met (grvecs vlist [trans]) en met (grdraw from to color [highlight])
eerst tijdelijke lijnen trekken, bij het eventueel plaatsen in een lijst.
Welke eigenschappen van de lijn wens je eigenlijk te weten?
Groetjes HofCAD CSI
PS Ik heb nog geen reactie gehad op mijn programma voor:
  punten van polyline opvragen en opslaan.
« Antwoord #1 Gepost op: 18 januari 2006, 16:15:15 »
(defun C:test2()
(setq ~CMD (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(princ "\nHallo Wilfred, ik begin.")
(setq p1 (getpoint "\nWilfred startpunt graag"))
(command "_PLINE" p1 "W" "0" "")
(while (setq p1 (getpoint p1 "\nWilfred volgende punt graag, of een <Enter> voor einde"))
(command p1)
)
(command "")
(setq e (entlast))
(command "_CHPROP" e "" "C" "1" "")
(getstring "\nWilfred geef een <Enter> voor kleurverandering.")
(command "_CHPROP" e "" "C" "6" "")
(getstring (strcat "\nWilfred geef een <Enter>, de polylijn is getekend op laag "
(cdr (assoc 8 (entget e)))))
(command "_CHPROP" e "" "C" "bylayer" "")
(princ "\nHallo Wilfred de kleur is nu weer Bylayer, en ik eindig.")
(setvar "CMDECHO" ~CMD)
(princ)
)