CADsite forum

AutoCAD => Autolisp => Topic gestart door: acad2012 op zo 24 11 2013, 19:27:04

Titel: Divide by linetype
Bericht door: acad2012 op zo 24 11 2013, 19:27:04
Goede dag,
De bedoeling is om een bepaalde linetype polyline of line om te vervangen door losse blokjes mbv van een lisp routine.
Er is bijvoorbeeld een line of polyline met linetype "hidden" en die wil ik verdelen met een gelijkmatige verdeling met vierkantjes van 1 bij 1 mm (blockname in de tekening markering, tussenmaat van 7.5mm). Dus alleen de lijnen met type "hidden" en alle andere lijnsoorten niet.
Na de verdeling moet de originele lijn verplaatst worden naar een andere laag zodat deze niet meer zichtbaar wordt.
Wie kan mij hier mee helpen?
Titel: Re: Divide by linetype
Bericht door: HofCAD op ma 25 11 2013, 11:51:17
Beste Acad2012,

Kijk eens in de bijlage!

Met vriendelijke groet, HofCAD CSI.
Titel: Re: Divide by linetype opgelost
Bericht door: acad2012 op ma 25 11 2013, 13:16:30
Geweldig, hartelijk bedankt voor de lisp routine.
Ga dit gelijk onderzoeken hoe het werkt. weer iets om te bestuderen.
Titel: Re: Divide by linetype
Bericht door: EddyBeerke op di 26 11 2013, 09:24:04
HofCAD,

Kun je ook de functie RN mee sturen ik krijg de melding dat ie gemist wordt.
Deze wordt aangeroepen vanuit @recblk.
Alvast bedankt.
Titel: Re: Divide by linetype
Bericht door: HofCAD op di 26 11 2013, 13:06:15
Beste Eddy,

De functie rn is niet nodig, en daarom heb ik hem er uit gehaald.
Deze functie zette een prefix voor de laagnaam.

Met vriendelijke groet, HofCAD CSI.
Titel: Re: Divide by linetype
Bericht door: acad2012 op di 26 11 2013, 17:20:01
Hoi Hofcad,
Nogmaal super bedankt voor je Lisp. Alleen probeer ik er iets van te leren en loop een beetje door de code heen en als ik goed heb maak je dan een block aan als die er niet is?
(if (not (tblsearch "BLOCK" "Markering"))
    (progn
      (entmake (list '(0 . "BLOCK")
           (cons 2 Lay2)
           '(70 . 64)
           '(10 1.5 1.5 0.0)
          )
      )
      (@recblk '(1 1 0) '(2 2 0) Lay2)
      (entmake '((0 . "ENDBLK")))

Of heb ik het helemaal mis? Zou wel mooi zijn dat als het block er niet is er een aangemaakt wordt.

Mvgr
Henk
Titel: Re: Divide by linetype
Bericht door: HofCAD op wo 27 11 2013, 11:18:45
Citaat van: acad2012 op di 26 11 2013, 17:20:01
Hoi Hofcad,
Nogmaal super bedankt voor je Lisp. Alleen probeer ik er iets van te leren en loop een beetje door de code heen en als ik goed heb maak je dan een block aan als die er niet is?
(if (not (tblsearch "BLOCK" "Markering"))
    (progn
      (entmake (list '(0 . "BLOCK")
           (cons 2 "Markering")
           '(70 . 64)
           '(10 1.5 1.5 0.0)
          )
      )
      (@recblk '(1 1 0) '(2 2 0) Lay2)
      (entmake '((0 . "ENDBLK")))

Of heb ik het helemaal mis? Zou wel mooi zijn dat als het block er niet is er een aangemaakt wordt.

Mvgr
Henk
Beste Henk,

Dat klopt!
Als er geen block "Markering" is, dan wordt via @recblk een vierkant aangemaakt op de laag Lay2 ("Markering")
wat in de blockdefinitie BlkName "Markering" wordt geplaatst.
Als je liever het vierkant in de blockdefinitie op de laag "0"" wilt hebben,
dan verander (@recblk '(1 1 0) '(2 2 0) Lay2) in (@recblk '(1 1 0) '(2 2 0) "0").
Verder ben ik in de Lisp ervan uit gegaan, dat de bedoelde lijnen en polylijnen het lijntype
niet ByLayer staat maar op HIDDEN en dat je een automatische selectie wil toepassen.

Met vriendelijke groet, HofCAD CSI.

PS In bovenstaande bijlage van 2BLKs.lsp heb ik kleine veranderingen gemaakt.