Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Lotrechte Linie durch alle Scheitelpunkte einer 3d-Polylinie

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:  Lotrechte Linie durch alle Scheitelpunkte einer 3d-Polylinie (1712 mal gelesen)
Kloburg
Mitglied
Bauzeichner

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

Beiträge: 4
Registriert: 02.06.2015

erstellt am: 02. Jun. 2015 14:10    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


Beispiel.jpg

 
Hallo,

ich bin Neuling im AutoLisp, möchte mich aber mehr damit befassen und habe da schon gleich ein Problem. Da ich dieses Forum schon länger kenne denke ich das mir hier geholfen werden kann. Also...

Ich möchte automatisch von jedem Scheitelpunkt einer 3d-Polylinie eine Lotrechte auf eine andere 3d-Polylinie ziehen lassen.

Aber irgendwie finde ich nicht die richtigen Ausdrücke um die Scheitelpunkte auszuwählen.
Ich habe hier im Forum eine Lösung gefunden, wo man allerdings die Punkte alle selber auswählen muss um eine Linie zu zeichnen, das ist noch nicht ganz das was ich will. Kann mir einer helfen (super wäre es, wenn es mit Erklärung ist, damit ich auch nachvollziehen kann, was ich da machen soll)?

Hier mein bisheriger (falscher) Code:

(setq PL1(car(entsel "/nPolylinie 1 wählen: ")))
(setq PL2(car(entsel "/nPolylinie 2 wählen: ")))


(setq LotAbst
    (vlax-curve-getClosestPointTo
      (vlax-ename->vla-object PL1)
        PL2
    )
)
(foreach n (vox-get-pl-points PL2)
    (entmake
    (list'(0 . "LINE")
      (cons 10 LotAbst)
      (cons 11 n)
    '(62 . 1)
    )
  )
  )
)
(defun vox-get-pl-points (ele / vx ret)
  (while (= (cdr (assoc 0 (setq vx (entget (setq ele (entnext ele)))))) "VERTEX")
    (setq ret (cons (cdr (assoc 10 vx)) ret))
  )
  (reverse ret)
)

Liebe Grüße Kloburg

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: 4171
Registriert: 17.05.2001

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

erstellt am: 02. Jun. 2015 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 Kloburg 10 Unities + Antwort hilfreich

beim ersten Drüberschauen ist mir sofort aufgefallen, dass die Parameter zu vlax-curve-getClosestPointTo nicht stimmen können. Du übergibst beide Elemente, was nicht stimmen kann, denn die Hilfe schreibt dazu:
Zitat:
Original aus der AutoCAD-Lisp-Hilfe
(vlax-curve-getClosestPointTo curve-obj givenPnt [extend])
Arguments

curve-obj
The VLA-object to be measured.

givenPnt
A point (in WCS) for which to find the nearest point on the curve.

extend
If specified and not nil, vlax-curve-getClosestPointTo extends the curve when searching for the nearest point.

Return Values

A 3D point list representing a point on the curve, if successful; otherwise nil.



Ob noch andere Dinge nicht stimmen .. habe ich nicht weiter nachgesehen.

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

Kloburg
Mitglied
Bauzeichner

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

Beiträge: 4
Registriert: 02.06.2015

erstellt am: 02. Jun. 2015 15:43    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

Danke für die schnelle Antwort!

Ich habe mir schon gedacht, dass es u.a. daran liegt.
Komme aber einfach nicht auf den richtigen Weg!

Gruß Kloburg

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: 4171
Registriert: 17.05.2001

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

erstellt am: 02. Jun. 2015 19:15    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 Kloburg 10 Unities + Antwort hilfreich

Hallo Kloburg,

mit welchem Editor arbeitest du? Falls du mit dem VL-Editor arbeitest (bringt Acad mit) dann kannst du debuggen und dir die einzelnen Variablenwerte zur Laufzeit anzeigen lassen.
Damit solltest du dich auseinander setzen, das erleichtert die Fehlersuche sehr.
Ansonsten ist deine Feststellung "Komme aber einfach nicht auf den richtigen Weg!" eben nur eine Feststellung und für die Leser hier bietet das kaum einen Angriffspunkt für eine Unterstützung.
Sag wo es klemmt .. welche Fehler werden ausgegeben -- versuche den Punkt, an dem du nicht weiter kommst detailliert zu beschreiben. Dann ist die Hilfe leichter. So weiß man nicht, wie dir geholfen werden kann, ohne dir den ganzen Code zu schreiben.

Grüße1
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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2020
Plateia, Canalis
Visual Basic

erstellt am: 02. Jun. 2015 20:05    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 Kloburg 10 Unities + Antwort hilfreich


Lotabstand.jpg

 
Nur mal so zum Nachdenken:
Willst Du den kürzesten Abstand oder wirklich das Lot?

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

neurosis
Mitglied
dipl.ing.


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

Beiträge: 222
Registriert: 22.08.2006

erstellt am: 03. Jun. 2015 08: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 Nur für Kloburg 10 Unities + Antwort hilfreich

hallo kloburg,
mal auf die schnelle

vorgehensweise, wenn du wirklich die lotrechten berechnen willst:
- alle scheitelpunkte von 3dpolylinie1 sammeln (vox-get-pl-points)
- alle scheitelpunkte von 3dpolylinie2 sammeln (vox-get-pl-points)
- fuer jeden punkt von 3dpolylinie1 die lotrechte auf die liniensegmente von 3dpolylinie2 mit folgender funktion:

Code:

; Lot von p3 auf Linie p1-p2
; p1, p2, p3 muessen 3dpunkte sein
; wenn 'u' kleiner 0 oder groesser 1, dann virtueller punkt
; wenn 'u' gleich 0 oder gleich 1, dann rueckgabe identisch mit p1 oder p2
; wenn 'u' zwischen 0 und 1, dann punkt irgendwo auf linie p1-p2
(defun perpendicular ( p1 p2 p3 / x1 x2 x3 y1 y2 y3 z1 z2 z3 x y z n d u)
  (setq x1 (car p1) y1 (cadr p1) z1 (caddr p1)
        x2 (car p2) y2 (cadr p2) z2 (caddr p2)
        x3 (car p3) y3 (cadr p3) z3 (caddr p3))

  (setq n (+ (* (- x3 x1) (- x2 x1))
            (* (- y3 y1) (- y2 y1))
            (* (- z3 z1) (- z2 z1)))
        d (* (sqrt (+ (* (- x2 x1) (- x2 x1))
                      (* (- y2 y1) (- y2 y1))
                      (* (- z2 z1) (- z2 z1))))
            (sqrt (+ (* (- x2 x1) (- x2 x1))
                      (* (- y2 y1) (- y2 y1))
                      (* (- z2 z1) (- z2 z1)))))
        u (/ n d)
        x (+ x1 (* u (- x2 x1)))
        y (+ y1 (* u (- y2 y1)))
        z (+ z1 (* u (- z2 z1))))

  (list u (list x y z))
)



- an hand von 'u' kannst du unterscheiden, ob die lotrechte wirklich auf das liniensegment faellt

gruss
marco

------------------
Marco Heuer
www.arc-aachen.de
Airport Office

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

Kloburg
Mitglied
Bauzeichner

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

Beiträge: 4
Registriert: 02.06.2015

erstellt am: 04. Jun. 2015 16: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

Hallo KlaK,

ich meinte wirklich Lotrechter Abstand.
Aber ich glaube mit kürzester Abstand (wie in dem Bild) würde ich auch weiterkommen!

Gruß Kloburg

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

Kloburg
Mitglied
Bauzeichner

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

Beiträge: 4
Registriert: 02.06.2015

erstellt am: 04. Jun. 2015 16:18    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 neurosis!

Danke für deine Unterstützung.
Ich werde mich damit beschäftigen und dann Rückmeldung geben!

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