Message 1 of 6
Identifying entities along a rectangular border
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
Lets say I have a shape with a notch removed:
of the objects in this shape, I want to isolate any entity that doesn't lie entirely on an orthogonal bounding box, and return them as a select set.
(defun C:Testing (/)
(vl-load-com)
(setq fabdata nil)
(setq p1 (getpoint "\nSelect First Corner of window: "))
(setq p2 (getcorner p1 "\nSecond Corner: "))
(setq result (lineminmax (ssget "_w" p1 p2 '((0 . "Line")(8 . "OBJ") ))))
(if (setq cutsel (ssget "_w" p1 p2 '((0 . "Line")(8 . "OBJ") )))
(progn
(setq i 0)
(setq X (abs (- (car (car result))(car (cadr result)))))
(setq Y (abs (- (cadr (car result))(cadr (cadr result)))))
(if (> Y X)
(setq x (abs (- (cadr (car result))(cadr (cadr result))))
y (abs (- (car (car result))(car (cadr result)))))
)
(while (< i (sslength cutsel))
(setq ent (entget (ssname cutsel i)))
(setq start (trans (cdr (assoc 10 ent)) 0 1))
(setq end (trans (cdr (assoc 11 ent)) 0 1))
;(if (= i 1) (quit))
(if (or
(= (abs (car start)) (abs (car end)) (car (car result)))
(= (abs (car start)) (abs (car end)) (car (cadr result)))
(= (abs (cadr start)) (abs (cadr end)) (cadr (car result)))
(= (abs (cadr start)) (abs (cadr end)) (cadr (cadr result)))
)
(ssdel (ssname cutsel i) cutsel)
)
(setq i (1+ i))
;(princ fabdata)
)
)
)
(princ)
)
(defun lineminmax ( s / e i l s x )
;(if (setq s (ssget '((0 . "LINE"))))
(progn
(repeat (setq i (sslength s))
(setq e (entget (ssname s (setq i (1- i))))
l (vl-list* (cdr (assoc 10 e)) (cdr (assoc 11 e)) l)
)
)
(mapcar '(lambda ( x ) (apply 'mapcar (cons x l))) '(min max))
)
; )
)
I haven't been able to puzzle out why this doesn't work consistantly. Adding a little notch to the shape only confuses it even more.
Anyone here have any suggestions?