Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  punkte bereits auf linienverbindung ?

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  punkte bereits auf linienverbindung ? (929 mal gelesen)
tappenbeck
Mitglied
Vermessungsingenieur


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

Beiträge: 1213
Registriert: 30.05.2002

AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net

erstellt am: 06. Mai. 2003 13:11    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

kleine denksportaufgabe.

ziel ist es festzustellen, ob zwei punkte bereits durch ein linienhaftes element miteinander verbunden sind. dabei kann dieses durch eine direkte linie oder ein polyliniensegment gegeben sein oder aber das eine linie bzw. ein liniensegment durch beide punkte gleichzeitig verläuft.

hat jemand von euch hierfür schon einen ansatz:

meiner sieht bisher so aus:

auswahlsatz als zaun durch die beiden punkte mit dem elementfilter (line, polylinie, lwpolylinie)
durchtesten aller gefundenen elemente auf die oben genannten eigenschaten.

das ganze sieht nach viel arbeit aus - oder gibt es einen viel einfacheren trick ????

gruß Jan :-)

------------------
jan :-)

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

gmk
Mitglied
Dipl.-Ing.(FH) Vermessung


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

Beiträge: 667
Registriert: 23.10.2002

Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM

erstellt am: 06. Mai. 2003 14:34    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 tappenbeck 10 Unities + Antwort hilfreich

nur ein gedanke (für linien) und nicht getestet:

bilde 2 auswahlsätze mit den koordinaten der punkte die die verbindung bilden sollen.

vergleiche die AS: linien über beide punkte müssten dann in jedem AS einmal drin sein.

zum testen: zeichne eine strecke von 0,0, nach irgendwo. jetzt eine funktion ausrufen die einen AS verlangt und 0,0 eingeben. acad müßte die linie finden (bei mir funkt.)

ciao georg

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

andi2050
Mitglied



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

Beiträge: 107
Registriert: 11.03.2003

erstellt am: 06. Mai. 2003 14:55    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 tappenbeck 10 Unities + Antwort hilfreich

Hi

Wenn ich's richtig verstanden habe, möchtest Du überprüfen, ob die beiden Punkte auf irgend einer Line ode Polylinie liegen.

Folgende vorgehensweise wäre möglich:
- Auswahsatz erstellen, wie von Dir beschieben.
- Jedes Element im Auswahsatz abklappern.
  Dabei mit der Funktion (vlax-curve-getDistAtPoint curve-obj point) überprüfen, ob beide Punkte auf dem Element liegen.

Einziger Nachteil bei Polylinien ist, daß hierbei nicht so einfach festgestellt werden kann, ob die beiden Punkte tatsächlich auf EINEM Polyliniensegment liegen.

Ist aber vielleicht ein Ansatz...

Grüße
Andi

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

mapcar
Mitglied
CADmin



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

Beiträge: 1250
Registriert: 20.05.2002

Time flies like an arrow, fruit flies like a banana (Groucho Marx)

erstellt am: 06. Mai. 2003 19:36    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 tappenbeck 10 Unities + Antwort hilfreich

Ein typisches Beispiel dafür, dass mit einer präzisen Fragestellung die Aufgabe meist schon halb gelöst ist - so besehen ist nämlich noch keine Lösung in Sicht.

Da müssten die Bedingungen schon genauer spezifiziert werden - z.B. ob es nur gerade Polyliniensegmente sein sollen oder auch bogenförmige, und was mit Polylinien ist, die die Punkte zwar verbinden, aber keine Gerade dazwischen bilden. Und letztlich sogar, was mit 3D-Polylinien ist.

Für alles, was gerade ist, würde ich folgenden Ansatz empfehlen:

Code:

(=
  (abs
    (-
      (vlax-curve-getDistAtPoint curveObject P1)
      (vlax-curve-getDistAtPoint curveObject P2)
    )
  )
  (distance P1 P2)
)
  => T     es besteht eine gerade Verbindung
  => nil   keine gerade Verbindung

Hinweis: das ist Pseudocode, um den Ansatz zu klären, kein
lauffähiges Lisp-Programm. Ein lauffähiges Lisp-Programm wäre aber auch nicht viel länger, aber in der Praxis kann man da nicht mit = arbeiten, sondern müsste (equal ... *epsilon*) nehmen usw.

Jedenfalls müsste das mit allen Curve-Objects laufen, wobei Kreis, Bogen, Ellipse gleich ausscheiden, da sie keine gerade Verbindung sein können. Bleiben Line, Polyline, LwPolyline, Spline, Ray, Xline, da funktionierts.

Hier noch der lauffähige Code:

Code:

(defun ss-foreach(ss expr / i)
  (if ss
    (repeat(setq i(sslength ss))
      ((eval expr)(ssname ss(setq i(1- i))))
    )
  )
)

(setq *epsilon* 1e-8)

(defun straight-conn(p1 p2 / dist rl)
  (setq dist(distance p1 p2))
  (ss-foreach(ssget"_f"(list p1 p2))
    (function
      (lambda(ent / )
        (if(member(cdr(assoc 0(entget ent)))'("LINE" "LWPOLYLINE" "SPLINE" "RAY")) ; usw. .....!
          (if
            (equal dist
              (abs
                (-(vlax-curve-getDistAtPoint(vlax-ename->vla-object ent)p1)
                  (vlax-curve-getDistAtPoint(vlax-ename->vla-object ent)p2)
                )
              )
              *epsilon*
            )
            (setq rl(cons ent rl))
          )
        )
      )
    )
  )
  (reverse rl)
)

; Zum Austesten: löscht alle geraden Verbindungen!

(defun c:test-it( / )
  (mapcar'entdel(straight-conn(getpoint"\nErster Punkt: ")(getpoint"\nZweiter Punkt: ")))
)



Gruss, Axel

------------------
Meine AutoLisp-Seiten
Meine private Homepage
Mein Angriff auf dein Zwerchfell
Mein Lexikon der Fotografie
Mein gereimtes Gesülze
Meine Überzeugung...

[Diese Nachricht wurde von mapcar am 06. Mai 2003 editiert.]

[Diese Nachricht wurde von mapcar am 06. Mai 2003 editiert.]

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)2023 CAD.de | Impressum | Datenschutz