this is slice soild with polyline by russian cool man
but that didn;t work well
pls , fix them
;; local defuns
;; groupping the list
(defun group-by-num (lst num / ls ret)
(if (= (rem (length lst) num) 0)
(progn
(setq ls nil)
(repeat (/ (length lst) num)
(repeat num
(setq ls
(cons (car lst) ls)
lst (cdr lst)))
(setq ret (append ret (list (reverse ls)))
ls nil)))
)
ret
)
;get polyline vertices
(defun get-vexs (pline_obj / verts)
(setq verts (vlax-get pline_obj 'Coordinates)
verts
(cond
((wcmatch (vlax-get pline_obj 'Objectname)
"AcDb2dPolyline,AcDb3dPolyline")
(group-by-num verts 3)
)
((eq (vlax-get pline_obj 'Objectname)
"AcDbPolyline")
(group-by-num verts 2)
)
(T nil)
)
)
)
(vl-load-com)
;;main part
(defun C:SSP (/ *error* acsp adoc con osmd sscon sspline vertices_list)
(defun *error* (msg)
(cond
((not msg))
((wcmatch (strcase msg) "*QUIT*,*CANCEL*"))
(T (princ (strcat "\nError: " msg)))
)
(if osmd (setvar "osmode" osmd))
(vl-cmdf "ucs" "w")
(vl-cmdf "-view" "swiso")
(vla-regen adoc acactiveviewport)
(vla-endundomark adoc)
(princ)
)
(setq adoc (vla-get-activedocument
(vlax-get-acad-object)
)
acsp (vla-get-block
(vla-get-activelayout adoc)
)
)
(vla-startundomark adoc)
(vl-cmdf "ucs" "w")
(setq osmd (getvar "osmode"))
(setvar "osmode" 0)
(alert "\nSelect the solid first\nthan select the polyline")
(if (and
(setq sscon (ssget "+.:S:N" (list (cons 0 "3DSOLID"))))
(setq sspline (ssget "+.:S:N" (list (cons 0 "POLYLINE")))))
(progn
(setq vertices_list
(get-vexs
(vlax-ename->vla-object
(ssname sspline 0))))
(vl-cmdf "slice" (ssname sscon 0) "" "3P" (trans (car vertices_list) 1 0)
(trans (cadr vertices_list) 1 0)
(trans (caddr vertices_list) 1 0)
'(0. 0. -100000.));;<-- change on '(0. 0. 100000.) if you need to keep the upper section
))
(alert "Delete unused section\n of sliced solid manually")
(*error* nil)
(princ)
)
(prompt "\n=======================================================\n")
(prompt "\n\t\t***\tStart command with SSP\t***")
(prompt "\n=======================================================\n")
(prin1)