Auswahl mit SSPOLY

Um mehr Auswahlmöglichkeiten zu erhalten verwenden Sie unten stehende LISP-Routine. Diese erlaubt Ihnen die Auswahl von Objekten entlang einer Polylinie, innerhalb einer Polylinie oder ausserhalb dieser.

Aufruf

Der Aufruf des Tools erfolgt mit "(sspoly)", "(sspolyf)", "(sspolyw)" oder aber "(sspolyc)".

sspoly startet das Tool ganz normal.
sspolyf betrachtet dabei die Polylinie als "Zaun". Alle von der Polylinie geschnittenen Elemente werden in die Auswahl aufgenommen.
sspolyw betrachtet dabei die Polylinie als "Fenster". Alle Elemente, die zur Gänze innerhalb der Polylinie liegen werden in die Auswahl aufgenommen.
sspolyc betrachtet dabei die Polylinie als "Kreuzen". Alle Elemente, die auf oder innerhalb der definierten Polylinie liegen werden in die Auswahl aufgenommen.

Um die Auswahl ausserhalb zu aktivieren, wählen Sie einfach alle Objekte aus und gehen Sie dann in den Deselktieren-Modus der Auswahl - derAufruf erfolgt über die Eingabe von "E" ("_R") - bei der Objektwahl und wählen Sie mittels sspoly die zu entfernenden Objekte aus.

01 ;;; sspoly.lsp                                                     *
02 ;;; (sspolyw) returns a selection set inside a polyline            *
03 ;;; (sspolyf) returns a selection set fenced by a polyline         *
04 ;;; (sspolyc) returns a selection set crossed by a polyline        *
05 (defun 2Dpt (pt)
06   (list (car pt) (cadr pt))
07 )
08 
09 (defun sspoly (/ apoly ptlist)
10   (while (not apoly)
11     (setq apoly (car (entsel "\nSelect polyline: ")))
12     (if apoly
13       (if (not (member (setq typ (cdr (assoc 0 (setq plist (entget apoly)))))
14                        '("LWPOLYLINE" "POLYLINE")
15                )
16           )
17         (progn (setq apoly nil)
18                (princ "\nNo polyline selected ")
19         )
20       )
21     )
22   )
23   (cond
24     ((= typ "LWPOLYLINE")
25      (foreach n plist
26        (if (= (car n) 10)
27          (setq ptlist (cons (cdr n) ptlist))
28        )
29      )
30     )
31     ((= typ "POLYLINE")
32      (while (/= typ "SEQEND")
33        (setq typ
34               (cdr (assoc 0 (setq plist (entget (setq apoly (entnext apoly))))))
35        )
36        (if (= typ "VERTEX")
37          (setq ptlist (cons (2Dpt (cdr (assoc 10 plist))) ptlist))
38        )
39      )
40     )
41   )
42   ptlist
43 )
44 
45 (defun sspolyw ()
46   (ssget "_WP" (sspoly))
47 )
48 
49 (defun sspolyf ()
50   (ssget "_F" (sspoly))
51 )
52 
53 (defun sspolyc ()
54   (ssget "_CP" (sspoly))
55 )

Download

sspoly.lsp

Links

Quelle: http://web.archive.org/web/20020722085849/http://intervision.hjem.wanadoo.dk/lisps/sspoly.lsp (Web-Archiv)
cad.de: http://ww3.cad.de/foren/ubb/Forum285/HTML/000377.shtml