| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Schnittpunkt zweier Linien (305 mal gelesen)
|
AB Mitglied
Beiträge: 255 Registriert: 24.05.2002 Mechanical Desktop 6 AutoCAD 2002
|
erstellt am: 11. Sep. 2002 13:26 <-- editieren / zitieren --> Unities abgeben:
Hallo, folgendes habe ich geschrieben, was so auch funktioniert: (defun c:SP () (setq Linie_a (entsel)) ; 1. Linie (setq data_a (entget (car Linie_a))) ; speichert Objektdaten (setq a1 (cdr (assoc 10 data_a))) ; speichert Anfangspunkt (setq a2 (cdr (assoc 11 data_a))) ; speichert Endpunkt (setq Linie_b (entsel)) ; 2. Linie (setq data_b (entget (car Linie_b))) ; speichert Objektdaten (setq b1 (cdr (assoc 10 data_b))) ; speichert Anfangspunkt (setq b2 (cdr (assoc 11 data_b))) ; speichert Endpunkt (setq SP (inters a1 a2 b1 b2)) (command "punkt" SP) ; zeichnet Schnittpunkt ) Jetzt möchte ich aber, dass die zwei Linien nicht manuell ausgewählt werden, sondern automatisch. Mit "ssget" (setq Linie_a (ssget"X" '((8 . "GEWEBELÄNGE")))) (setq Linie_b (ssget"X" '((8 . "HILFSLINIEN")(-4 . "*,*,<=")(10 0 0 0.1)(-4 . "*,*,<=")(11 0 0 0.1)))) geht das aber nicht. Wie bekomme ich trotzdem den SP der in den beiden Variablen Linie_a und Linie_b gespeicherten Linien. Gruß Andrea
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StephanJP Mitglied CAD-Admin
Beiträge: 830 Registriert: 09.11.2000
|
erstellt am: 11. Sep. 2002 15:24 <-- editieren / zitieren --> Unities abgeben: Nur für AB
Zitat: Original erstellt von StephanJP: Hallo Andrea,so ganz verstehe ich nicht: (setq Linie_a (ssget"X" '((8 . "GEWEBELÄNGE")))) (setq Linie_b (ssget"X" '((8 . "HILFSLINIEN")(-4 . "*,*,<=")(10 0 0 0.1)(-4 . "*,*,<=")(11 0 0 0.1)))) erstellt immer Auswahlsätze. Da ist dann immer nur eine Linie drin? (ssget "X" ...: heisst ja: alle Elemente der Zeichnung werden nach Deinem Filterkriterium durchsucht! Wenn dann da immer nur eine drin ist musst Du diese mit: (setq data_a<b> (entget (ssname Linie_a<Linie_b> 0))) übernehmen! Aber, wie gesagt: Sinnvoll erscheint mir das so nicht????
------------------
gruß stephan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4185 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 11. Sep. 2002 15:28 <-- editieren / zitieren --> Unities abgeben: Nur für AB
Hallo Andrea, (ssname...) ist das Geheimnis, mit welchem man aus einem Auswahlsatz, der ja mit (ssget...) erstellt wird, den Objektnamen ermitteln kann. Ohne Prüfung der (ssget...) Anweisungen sollte es dann wie folgt funktionieren. (defun c:SP () (setq as_Linie_a (ssget"X" '((8 . "GEWEBELÄNGE"))) as_Linie_b (ssget"X" '( (8 . "HILFSLINIEN") (-4 . "*,*,<=") (10 0 0 0.1) (-4 . "*,*,<=") (11 0 0 0.1) ) ) Linie_a (ssname as_Linie_a 0) ; 1. Linie data_a (entget Linie_a) ; speichert Objektdaten a1 (cdr (assoc 10 data_a)) ; speichert Anfangspunkt a2 (cdr (assoc 11 data_a)) ; speichert Endpunkt Linie_b (ssname as_Linie_b 0) data_b (entget Linie_b) ; speichert Objektdaten b1 (cdr (assoc 10 data_b)) ; speichert Anfangspunkt b2 (cdr (assoc 11 data_b)) ; speichert Endpunkt SP (inters a1 a2 b1 b2) );setq (command "punkt" SP) ; zeichnet Schnittpunkt ) Bei Fragen... Grüße Holger Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 12. Sep. 2002 09:02 <-- editieren / zitieren --> Unities abgeben: Nur für AB
Hi Andrea, was die Programmstruktur angeht, da haben Stephan und Holger Recht. Ich möchte dich nur auf einen kleinen Denkfehler hinweisen: (-4 . "*,*,<=")(10 0 0 0.1)(-4 . "*,*,<=")(11 0 0 0.1) Mit diesem ssget-Filter kriegst du nicht(!) die Linien, die in der XY-Ebene liegen. Beim GC -4 gibts leider keine (abs)-Funktion. Es geht ja darum zu testen, ob die Abweichung von 0 im Rahmen der Toleranz liegt. So filterst du aber auch alle Linien, deren Z-Werte bei -5 oder -1000 liegen! Wenn schon, musst du also in beide Richtungen testen: (-4 . "<and") (-4 . "*,*,<=")(10 0 0 +0.1)(-4 . "*,*,<=")(11 0 0 +0.1) (-4 . "*,*,>=")(10 0 0 -0.1)(-4 . "*,*,>=")(11 0 0 -0.1) (-4 . "and>") Das "and" kannst du allerdings wahrscheinlich weglassen, es gilt ja bei ssget immer ein implizites "and". Nur falls es innerhalb von anderen Verknüpfungen vorkommen soll, muss man es hinschreiben. Gruss, Axel ------------------ http://www.tutorial.autolisp.info
http://www.advanced.autolisp.info
http://www.activex.autolisp.info Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sparky Mitglied Techniker / Fertigungstechnik
Beiträge: 366 Registriert: 27.11.2000
|
erstellt am: 12. Sep. 2002 11:16 <-- editieren / zitieren --> Unities abgeben: Nur für AB
Hallo zusammen, das ist ein interessanter Beitrag. Ich bin zwar was das AutoLisp betrifft total unbedarft, aber es ist ein Thema was ich als nächstes angehen möchte. Und mit den Links kann man doch schon eine Menge lernen. Danke dafür Sparky Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|