FastFiber

na polyline verder gaan met selectie van de polyline

Gestart door Wilfred, vr 10 02 2006, 09:15:05

Vorige topic - Volgende topic

Wilfred

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:

bart

Om het te laten werken diend het commando netjes te eindigen.
je moet dus weten waneer het laaste punt is gezet.
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

Wilfred

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?

bart

#3
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
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

Wilfred

#4
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


Ja klopt maar dat is voor latere zorg. Ik moet een brug maken tussen de polyline en het vervolg van de routine

bart

(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)
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

HofCAD

#6
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)
)
ACADcadabra

Wilfred

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?

bart

#8
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)
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

Wilfred

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

bart

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)

Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

HofCAD

#11
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)
)
ACADcadabra

FastFiber