CADsite forum

AutoCAD => Autolisp => Topic gestart door: DIJKHUIS op wo 06 08 2008, 12:30:24

Titel: In lisp werkt het niet maar handmatig wel
Bericht door: DIJKHUIS op wo 06 08 2008, 12:30:24
Ik krijg nog al eens tekeningen binnen (van architecten) die vol staan met voor mij overbodige info. Daarom wil ik een routine maken die alle blokken in de tekening explodeert en vervolgens gooi ik de overbodige info er uit. Het stukje code ziet er als volgt uit:
  (setq ss2 (ssget "X" '((0 . "INSERT"))))
  (command "_explode" ss2 "")

Als ik dit door de routine zelf laat doen krijg ik een nil melding in autocad en wordt er niets geëxplodeerd. Ik heb het ook al geprobeerd met (command "_explode" ss2) maar dat werk ook niet.
Als ik de eerste regel plak in de command regel en vervolgens explode<enter> !ss2 <enter> geef gaat het wel goed.

Het is vast een klein l..... dingetje dat ik over het hoofd zie.

Graag tips

Michel

Titel: Re: In lisp werkt het niet maar handmatig wel
Bericht door: EddyBeerke op wo 06 08 2008, 14:12:44
Er is bij mij wel een block geëxplodeerd maar de rest niet.
Je kunt niet alle block's explodeeren! bv modelspace en paperspace e.d.
wat je zou kunne in bouwen is dat je alleen objecten (block's) in modelspace selecteert.

Om netjes de routine af te sluiten gebruik je (princ) daardoor kruig je niet de melding "nil"
(setq ss2 (ssget "X" '((0 . "INSERT"))))
  (command "_explode" ss2 "")(princ)
Titel: Re: In lisp werkt het niet maar handmatig wel
Bericht door: Kenny H op wo 06 08 2008, 15:52:02
Beste,

Probeer het volgende eens,

(command "select" (ssget "X" '((0 . "INSERT"))) "")
(setq ss1 (ssget "P"))
(setq i 0)
(repeat (sslength ss1)
(command "explode" ss1)
(setq i (1+ i))
  )
(princ)

Mvg

Kenny
Titel: Re: In lisp werkt het niet maar handmatig wel
Bericht door: Petperm op do 04 09 2008, 09:43:09
Volgens mij gaat dat ook niet werken.
Je maakt een selectieset van alle blocken en vervolgens probeer je de selectieset te exploderen. Je moet eigenlijk de blocken IN de selectieset exploderen.
Met de functie 'ssname' ga je door de selectieset en je explodeert elk block afzonderlijk. Het zou er iets meer zo uit moet zien. (heel snel zonder te controleren of het echt werkt)

(defun c:xall ( / ss i)
  (setq ss (ssget "_X" '((0 . "INSERT"))))
  (setq i 0)
  (while (<= i (sslength ss))
    (command "explode" (ssname ss i))
    (setq i (1+ i))
    );_while
  (princ)
);_defun
Titel: Re: In lisp werkt het niet maar handmatig wel
Bericht door: HofCAD op do 04 09 2008, 13:29:04
Beste Lezers,

Zie ook het programma Boem bij http://www.cadsite.be/smf/index.php/topic,791.0.html,
en kijk daar naar de bijbehorende vraagstelling.

(defun c:boem( / s1 i en)
(command "select" "ALL" "")
(setq s1 (ssget "P"))
(setq i 0)
(repeat (sslength s1)
(setq en (cdr (cadr (entget (ssname s1 i)))))
(print en)
(if (or (= en "POLYLINE") (= en "LWPOLYLINE") (= en "INSERT")
(= en "MTEXT") (= en "LEADER")(= en "MLINE") (= en "DIMENSION")
(= en "HATCH") (= en "REGION") (= en "3DSOLID")(= en "BODY")
(= en "IMAGE"))
(command "_EXPLODE" (ssname s1 i)))
(setq i (1+ i))
)
)


Met vriendelijke groet,
HofCAD CSI