FastFiber

In lisp werkt het niet maar handmatig wel

Gestart door DIJKHUIS, wo 06 08 2008, 12:30:24

Vorige topic - Volgende topic

DIJKHUIS

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


EddyBeerke

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)
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

Kenny H

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
8) Volvo 4 Life 8)

Petperm

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

HofCAD

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