Guten Morgen liebes Forum,
ich habe folgendes Problem:
Axel hat mir netterweise vor einiger Zeit ein Skript geschrieben, mit dem ich automatisch Querschnitte, mit einem freiwählbaren Abstand, durch einen Volumenkörper legen kann. Nun muss dieses Skript allerdings ein wenig umgeschreiben werden, aber ich bekomme es alleine nicht hin. (Ich weiß aber auch noch nicht mal ob das geht).
Die Querschnitte, sollen wie auf dem Bild gezeigt, nur durch den 3D-Bereich gehen.
Das dazugehörige Skript lautet wie folgt:
;....................................................................................................................
(defun get-bbox(ent / pmin pmax)
(setvar "CLAYER" "breitester_Querschnitt") ; Layer auswählen
(setq pmin(vlax-3d-point'(0 0 0)))
(setq pmax(vlax-3d-point'(0 0 0)))
(vlax-invoke-method
(vlax-ename->vla-object ent)
'getBoundingBox 'pmin 'pmax
)
(list
(vlax-safearray->list pmin)
(vlax-safearray->list pmax)
)
)
(defun newbies(lastent / retlist)
(while(setq lastent(entnext lastent))
(setq retlist(cons lastent retlist))
)
)
(defun streifen(ent plane ofs steps / ents lastent)
(repeat (1+ steps)
(setq lastent(entlast))
(apply'vlax-invoke-method
(append
(list(vlax-ename->vla-object ent))
(list 'SectionSolid)
(mapcar'vlax-3d-point plane)
)
)
(command"_explode"(entlast)) ; gibt' da eigentlich kein vlax-put-them-into-jail???
(setq ents(append ents(newbies lastent)))
(setq plane
(mapcar'(lambda(p)(mapcar'+ p ofs))plane)
)
)
ents
)
(defun Querschnitte(ent d / dimx dimz bb)
(setq bb(get-bbox ent))
(setq dimx(abs(-(caar bb)(caadr bb))))
(setq dimz(abs(-(caddar bb)(caddr(cadr bb)))))
(append
(streifen ent'((0 0 0)(0 1 0)(0 0 1))(list d 0 0)(fix(/ dimx d))) ;y/z-Ebene
)
)
;..................................
(defun ss-foreach(ss expr / i)
(if ss
(repeat(setq i(sslength ss))
((eval expr)(ssname ss(setq i(1- i))))
)
)
)
(defun line-in-xy-plane?(line / ) ; löscht alle Linien in x/y-Ebene
(and
(equal 0 (caddr(cdr(assoc 10(entget line))))*epsilon*) ; die einen Z-Wert von 0 haben
(equal 0 (caddr(cdr(assoc 11(entget line))))*epsilon*) ; (caddr = Zugriff auf z-Wert)
)
)
(setq *epsilon* 1e-8)
Viele Grüße
Andrea
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP