(if (ssget "X" (list (cons -4 "&")
(cons 70 1)))
(alert "& 1 T"))
(if (ssget "X" (list (cons -4 "&")
(cons 70 4)))
(alert "& 4 T"))
(if (ssget "X" (list (cons -4 "&")
(cons 70 5)))
(alert "& 5 T"))
(if (ssget "X" (list (cons -4 "&=")
(cons 70 1)))
(alert "&= 1 T"))
(if (ssget "X" (list (cons -4 "&=")
(cons 70 4)))
(alert "&= 4 T"))
(if (ssget "X" (list (cons -4 "&=")
(cons 70 5)))
(alert "&= 5 T"))
You should have several faces with different DXF 70 values, e.g. (70 . 1), (70 . 4) and (70 . 5) and try both:
;to filter out meshes
(-4 . "<")
(70 . 16)
;or
;to filter out any 3d entities
(-4 . "<")
(70 . 8)
; ALE_Pline_LwClosedP - Version: 1.01
;
; Return Values:
; nil if LwPolyline is Open
; 1 if is Closed - (or logand 1 flag 70 is True)
; 2 if is Open BUT startpoint is equal endpoint
; 3 if is Closed AND startpoint is equal endpoint
;
; Example:
; (ALE_Pline_LwClosedP (vlax-ename->vla-object (car (entsel "Poly: "))) 0.001)
;
(defun ALE_Pline_LwClosedP (LwPObj FuzFac)
(cond
( (eq :vlax-true (vla-get-closed LwPObj))
(if
(equal
(vlax-curve-getEndPoint LwPObj)
(vlax-curve-getPointAtParam LwPObj (1- (vlax-curve-getEndParam LwPObj)))
)
3 1
)
)
( (equal (vlax-curve-getStartPoint LwPObj) (vlax-curve-getEndPoint LwPObj) FuzFac) 2 )
)
)
; ALE_Pline_ClosedP - Version: 1.01 - mod by M.R. (Vanilla Check for all Polyline types)
;
; Return Values:
; nil if Polyline is Open
; 1 if is Closed
; 2 if is Open BUT startpoint is equal endpoint
; 3 if is Closed AND startpoint is equal endpoint
;
; Example:
; (ALE_Pline_ClosedP (car (entsel "Poly: ")) 0.001)
;
(defun ALE_Pline_ClosedP ( pl fuzz / conddata stvtx envtx )
(defun conddata ( pl / v vv )
(cond
( (= (cdr (assoc 0 (entget pl))) "LWPOLYLINE")
(setq stvtx (cdr (assoc 10 (entget pl))))
(setq envtx (cdr (assoc 10 (reverse (entget pl)))))
)
( t
(setq stvtx (cdr (assoc 10 (entget (setq v (entnext pl))))))
(while (= (cdr (assoc 0 (entget v))) "VERTEX")
(setq vv v v (entnext v))
)
(setq envtx (cdr (assoc 10 (entget vv))))
)
)
)
(cond
( (= 1 (logand 1 (cdr (assoc 70 (entget pl)))))
(conddata pl)
(if
(equal stvtx envtx fuzz)
3 1
)
)
( t
(conddata pl)
(if (equal stvtx envtx fuzz) 2)
)
)
)
(defun c:fixclosedpolylines ( / conddata ss i pl case stvtx envtx stpar b p f )
(defun conddata ( pl / v vv vvv )
(cond
( (= (cdr (assoc 0 (entget pl))) "LWPOLYLINE")
(setq stvtx (cdr (assoc 10 (cdr (member (assoc 10 (reverse (entget pl))) (reverse (entget pl)))))))
(setq envtx (cdr (assoc 10 (reverse (entget pl)))))
)
( t
(setq v (entnext pl))
(while (= (cdr (assoc 0 (entget v))) "VERTEX")
(setq vv v v (entnext v))
)
(setq envtx (cdr (assoc 10 (entget vv))))
(setq v (entnext pl))
(while (not (eq vv v))
(setq vvv v v (entnext v))
)
(setq stvtx (cdr (assoc 10 (entget vvv))))
)
)
)
(if (cadr (sssetfirst nil (ssget "_X" '((0 . "*POLYLINE") (-4 . "<or") (70 . 0) (70 . 1) (70 . 8) (70 . 9) (70 . 128) (70 . 129) (-4 . "or>")))))
(setq ss (ssget "_:L"))
)
(repeat (setq i (sslength ss))
(setq pl (ssname ss (setq i (1- i))))
(if (> (setq case (ALE_Pline_ClosedP pl 1e-6)) 1)
(progn
(conddata pl)
(cond
( (= (cdr (assoc 100 (reverse (entget pl)))) "AcDbPolyline")
(if (= case 3)
(vla-put-closed (vlax-ename->vla-object pl) :vlax-false)
)
(setq stvtx (trans (list (car stvtx) (cadr stvtx) (cdr (assoc 38 (entget pl)))) pl 0))
(setq envtx (trans (list (car envtx) (cadr envtx) (cdr (assoc 38 (entget pl)))) pl 0))
(setq stpar (vlax-curve-getparamatpoint pl (vlax-curve-getclosestpointto pl stvtx)))
(setq b (vla-getbulge (vlax-ename->vla-object pl) stpar))
(setq p (trans (vlax-curve-getpointatparam pl (+ stpar 0.95)) 0 1))
)
( (= (cdr (assoc 100 (reverse (entget pl)))) "AcDb2dPolyline")
(setq f t)
(command "_.CONVERTPOLY" "_L" pl "")
(if (= case 3)
(vla-put-closed (vlax-ename->vla-object pl) :vlax-false)
)
(setq stvtx (trans stvtx pl 0))
(setq envtx (trans envtx pl 0))
(setq stpar (vlax-curve-getparamatpoint pl (vlax-curve-getclosestpointto pl stvtx)))
(setq b (vla-getbulge (vlax-ename->vla-object pl) stpar))
(setq p (trans (vlax-curve-getpointatparam pl (+ stpar 0.95)) 0 1))
)
( (= (cdr (assoc 100 (reverse (entget pl)))) "AcDb3dPolyline")
(if (= case 3)
(vla-put-closed (vlax-ename->vla-object pl) :vlax-false)
)
(setq stpar (vlax-curve-getparamatpoint pl (vlax-curve-getclosestpointto pl stvtx)))
(setq p (trans (vlax-curve-getpointatparam pl (+ stpar 0.95)) 0 1))
)
)
(while (not (and (equal stvtx (vlax-curve-getendpoint pl) 1e-6) (equal envtx (vlax-curve-getstartpoint pl) 1e-6)))
(command "_.TRIM" pl "" "_non" p "")
(if (vlax-erased-p pl)
(setq pl (entlast))
)
(if (zerop (vlax-curve-getparamatpoint pl (vlax-curve-getendpoint pl)))
(progn
(entdel pl)
(setq pl (entlast))
)
(setq p (trans (vlax-curve-getpointatparam pl (- (vlax-curve-getparamatpoint pl (vlax-curve-getendpoint pl)) 0.05)) 0 1))
)
)
(entupd (cdr (assoc -1 (entmod (subst (cons 70 (1+ (cdr (assoc 70 (entget pl))))) (assoc 70 (entget pl)) (entget pl))))))
(if b
(progn
(vla-setbulge (vlax-ename->vla-object pl) stpar b)
(setq b nil)
)
)
(if f
(progn
(command "_.CONVERTPOLY" "_H" pl "")
(setq f nil)
)
)
)
)
)
(princ)
)