Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Selection-Set über Zaunauswahl

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Selection-Set über Zaunauswahl (447 mal gelesen)
romi1
Mitglied
Bautechniker


Sehen Sie sich das Profil von romi1 an!   Senden Sie eine Private Message an romi1  Schreiben Sie einen Gästebucheintrag für romi1

Beiträge: 622
Registriert: 09.02.2006

Xeon E3-1245V2
16GB RAM
Windows 10 Professional 64 bit
AutoCAD 2014

erstellt am: 04. Jan. 2020 08:37    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Forum und Prosit Neujahr noch allen!
Ich suche eine Lösung für die (oder entsprechend der) Selection-Set-Auswahl mit der "Zaunoption", also (ssget "_F" ...), nur mit der zusätzlichen Anforderung, daß die Zaunlinie auch Kreisbögen enthalten kann bzw. auch ein Kreis sein kann. Meines Wissens kann man ja bei dieser "Zaunoption" nur eine Liste von Polygonstützpunkten übergeben, aber keine Bögen.
Warum die Bögen benötigt werden: der User soll eine vorhandenen POLYLINE oder LWPOLYLINE (die auch Bögen enthalten kann) oder auch einen Kreis anwählen. Dieses Element (bzw. die Daten davon) werden dann zur Zaunauswahl verwendet, um Objekte, die eben von dieser Linie (echt oder scheinbar) geschnitten werden zu finden. Leider weiß ich nicht wie man das mit den Bögen in ssget hinbekommt oder wie man das sonst lösen kann.
Gruß,
Roman

[Diese Nachricht wurde von romi1 am 04. Jan. 2020 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 19657
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 04. Jan. 2020 12:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für romi1 10 Unities + Antwort hilfreich

Zunächst mal: Die Objektwahlmethode Zaun ist auf Liniensegmente begrenzt, dementsprechend lässt auch auch die Lispfunktion SSGET bei der Methode nur Liniensegmente zu.

Es gibt nunmal keine Objektwahlmethode mit Bögen, ausser vielleicht das neuere Lasso (ungeprüft und unrelevant in deinem Fall).

Also bleibt dir nichts anderes übrig selbst die Objekte zu suchen die gewählt werden sollen.

Es gibt dafür einige Beispiele im Forum, für gewöhnlich geht es um "ssget polygon" oder trace - die Verfolgung eines Objektes zum nächsten anschließenden.

In deinem Fall ist es recht simple und du könntest wie folgt vorgehen:
1. Wähle Pfadobjekt
2. Programm wählt alle Objekte per Kreuzenpolygon mit den Koordinaten der Boundingbox(vom Pfadobjekt)
3. Jedes Objekt auf Überschneidungen mit Pfadobjekt prüfen
Falls Ja, ab in die Trefferliste oder Auswahlsatz.


Das Stichwort ist also: IntersectWith
Reicht das? Habe gerade nicht mehr Zeit..

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brischke
Moderator
CAD on demand GmbH




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4136
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 07. Jan. 2020 07:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für romi1 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von romi1:
... Leider weiß ich nicht wie man das mit den Bögen in ssget hinbekommt oder wie man das sonst lösen kann.


.. du musst die Kreise und Bögen in ein angenähertes Polygon, bestehend aus Liniensegmenten, umrechnen - also eine dementsprechende Koordinatenliste berechnen.

Am einfachsten ist das, wenn du dafür die vlax-curve-* Funktionen nutzt. Damit kannst du die Koordinaten des Parameters oder Abstand vom Anfangspunkt ermitteln. Wenn du also Start & End Parameter des Bogensegments hast, kannst du mehrere Koordinaten auf dem Bogen ermitteln, indem du vlax-curve-getPointAtParam mit mehreren Parametern zwischen Start- und Endparameter des Bogensegments anwendest. Somit kannst du die Koordinatenliste für SSGET mit hinreichender Genauigkeit an die Bogenkontur erstellen. Die Genauigkeit kannst du durch die Anzahl der Zwischenpunkte auf dem Bogen bestimmen.

Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

romi1
Mitglied
Bautechniker


Sehen Sie sich das Profil von romi1 an!   Senden Sie eine Private Message an romi1  Schreiben Sie einen Gästebucheintrag für romi1

Beiträge: 622
Registriert: 09.02.2006

Xeon E3-1245V2
16GB RAM
Windows 10 Professional 64 bit
AutoCAD 2014

erstellt am: 08. Jan. 2020 07:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo!
Habs's jetzt hinbekommen, und zwar entspechend dem Vorschlag von cadffm:
- Boundingbox vom Pfadobjekt
- ssget per Kreuzen-Rechteck entsprechend den Eckpunkten der Boundingbox
- diesen Auswahlsatz jetzt auf Schnittpunkte mit dem Pfadobjekt prüfen per IntersetWith ...

@ Holger: Danke für den 2. Lösungsvorschlag - kann ich ev. noch in einem anderen Zusammenhang gebrauchen.

Vielen Dank!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

archtools
Mitglied



Sehen Sie sich das Profil von archtools an!   Senden Sie eine Private Message an archtools  Schreiben Sie einen Gästebucheintrag für archtools

Beiträge: 704
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 09. Jan. 2020 16:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für romi1 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von romi1:

@ Holger: Danke für den 2. Lösungsvorschlag - kann ich ev. noch in einem anderen Zusammenhang gebrauchen.

Da hilft dann diese Funktion, die für Entities eine Punktliste ausgibt, die die Geometrie des Entity als Polygon darstellt. Das funktioniert mit Polylinien, Bögen, Kreisen, Ellipsen und Splines. Die Auflösung ist über die globale Variable ::CURVE->POLY-ACCURACY einstellbar:

Code:

(defun ff-curve->vertexlist (en / lastent len vertexnumber vertexlist stparam endparam diffparam startpt endpt)
  (if (not ::CURVE->POLY-ACCURACY)
    (setq ::CURVE->POLY-ACCURACY 25.0)
  )
  (if (= 'ENAME (type en))
    (setq en (vlax-ename->vla-object en))
  )
  (setq lastent (entlast))
  (ff-deactivate-osmode)
  (if (vlax-property-available-p en 'Length)
    (setq len (vlax-get-property en 'Length))
    (setq len (vlax-curve-getDistAtPoint en (vlax-curve-getEndPoint en)))
  )
  (setq vertexnumber (fix (/ len ::CURVE->POLY-ACCURACY)))
  (if (= 0 vertexnumber)
    (setq vertexnumber 1)
  )
  (setq stparam   (vlax-curve-getstartparam en)
endparam  (vlax-curve-getendparam en)
diffparam (/ (- endparam stparam) (float vertexnumber))
startpt   (trans (vlax-curve-getStartPoint en) 0 1)
endpt   (trans (vlax-curve-getEndPoint en) 0 1)
  )
  (setq vertexlist (list startpt))
  (while (< (+ stparam diffparam) endparam)
    (setq stparam (+ stparam diffparam))
    (setq startpt (vlax-curve-getPointAtParam en stparam))
    (setq vertexlist (cons (trans startpt 0 1) vertexlist))
  )
  (reverse (cons (trans endpt 0 1) vertexlist))
)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2020 CAD.de | Impressum | Datenschutz