FastFiber
Menu

Toon bijdragen

Deze sectie stelt je in staat om alle bijdragen van dit lid te bekijken. Je kunt alleen de bijdragen zien waar je op dit moment toegang toe hebt.

Toon bijdragen Menu

Berichten - Wilfred

#1
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
#2
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?
#3
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
#4
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?
#5
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:
#6
Ik ben bezig om een lisp te schrijven waar ik wanden mee kan teken. Dit doe ik m.b.v. een polyline.
Nu wil ik graag alle punten van deze polyline opslaan als variabelen. De punten op een polyline hebben als waarde assoc 10. Als ik assoc 10 filter uit mijn polyline dan krijg ik allen de eerste assoc 10. Maar ik wil ze allemaal. Ik heb wel de eerste en de laatste d'r uit weten te krijgen maar dus tussen liggende nog niet. De aantallen hiertussen is altijd variabel. Misschien kan iemand mij helpen. Ik heb mijn routine hieronder staan:

;PuntHB = beginpunt hartlijn
;PuntHE = eindpunt hartlijn
;SSH = selectieset hartlijn
;SSHL = lijn Links naast hartlijn
;SSHR = lijn Recht selectieset hartlijn
;PuntHBL = beginpunt lijn links naast hartlijn
;PuntHBR = beginpunt lijn rechts naast hartlijn
;PuntHEL = Eindpunt lijn links naast hartlijn
;PuntHER = Eindpunt lijn rechts naast hartlijn
;LIJNL = selectie lijn links van hartlijn
;LIJNR = selectie lijn rechts van hartlijn
;HPAT = hatch patroon komt vanuit JK-bib.mns en is daar ingesteld
;(H/L)KLEUR = LaagKleur komt vanuit JK-bib.mns en is daar ingesteld
;(H/L)LAAG = Laag komt vanuit JK-bib.mns en is daar ingesteld

(defun C:Wand ( / )

;onderstaande setq's zijn tijdelijk, deze moeten allemaal uit het JK-BIB.mns komen
(setq HPAT "baksteen")
(setq HLAAG "21A")
(setq HKLEUR "243")

(setq LLAAG "21L")
(setq LKLEUR "3")

(setq WDIKTE "100")
 
(setq PLINEWID (getvar "plinewid"))
   (command "plinewid" WDIKTE)
      

(command "-layer" "m" LLAAG  "C" LKLEUR "" "")
(princ "\nSelecteer een polyline die moet worden omgezet naar een wand")
(setq SSH (ssget))   
(setq HARTLIJN (entget (entlast)))

(setq HTCUT (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr HARTLIJN))))))))))))))) ; eerste pair = eindpunt van de polyline
(setq PUNTHE (cdr (assoc 10 HTCUT))) ;filtert de coordinaten van het eindpunt
(setq PUNTHB (cdr (assoc 10 (cdr (cdr (cdr (cdr (reverse HTCUT)))))))) ;keert waardes harlijn in omgkeerde volgorde en Filtert de coordinaten van het beginpunt[/font]

(command "offset" "50" SSH "-1000,-1000" ^C) ;-100 = offset ene zijde van hartlijn
(setq SSHL (ssget "l"))
(setq LIJNL (entget (entlast)))
(setq HTCUTL (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr LIJNL))))))))))))))) ; eerste pair = eindpunt van de polyline
(setq PUNTHEL (cdr (assoc 10 HTCUTL))) ;filtert de coordinaten van het eindpunt
(setq PUNTHBL (cdr (assoc 10 (cdr (cdr (cdr (cdr (reverse HTCUTL)))))))) ;keert waardes harlijn in omgkeerde volgorde en Filtert de coordinaten van het beginpunt


(command "offset" "50" SSH "999999,999999" ^C) ;-100 = offset andere zijde van hartlijn
(setq SSHR (ssget "l"))
(setq LIJNR (entget (entlast)))
(setq HTCUTR (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr (cdr LIJNR))))))))))))))) ; eerste pair = eindpunt van de polyline
(setq PUNTHER (cdr (assoc 10 HTCUTR))) ;filtert de coordinaten van het eindpunt
(setq PUNTHBR (cdr (assoc 10 (cdr (cdr (cdr (cdr (reverse HTCUTR)))))))) ;keert waardes harlijn in omgkeerde volgorde en Filtert de coordinaten van het beginpunt

(command "erase" SSH "") ;verwijderd harlijn
 
;einden van de linker en rechter lijn verbinden d.m.v. een polyline
(command "pline" PUNTHBL PUNTHBR ^C)
(setq KOP1 (ssget "l"))
(command "pline" PUNTHEL PUNTHER ^C)
(setq KOP2 (ssget "l"))
 
;Alle 4 polylijnen met elkaar verbinden
(command "pedit" KOP1 "J" SSHR KOP2 SSHL "" "")
(setq SSWAND (ssget "l")) ;Wand omlijningselectie
(pedit SSWAND "W" "0" "" "")
 
;arceren van de wand
(command "-layer" "m" HLAAG  "C" HKLEUR "" "")
(command "-bhatch" "p" HPAT "1" "0" "s" SSWAND "" "")

)
 
FastFiber