Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Schnittpunkt ermitteln

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:  Schnittpunkt ermitteln (2870 mal gelesen)
cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 23. Jan. 2012 11:38    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

Ich habe hier eine Funktion gechrieben, die ermittel ob zwei Linien parallel verlaufen. Ich hätte gern noch den Abstand der Linien, falls sie parallel sind, in var di ausgegeben.
Ich bräuchte also die Distance vom Anfangspunkt der Linie 1 lotrecht auf die Linie 2.
Wie könnte man das in di einbauen?
Code:

(defun c:Demo ( / l1 l2 w1 w2 di)
(while
  (not
    (and
      (setq l1 (car (entsel "\nSelect line 1: ")))
      (wcmatch (cdr (assoc 0 (entget l1))) "LINE")))
  (princ "\nNo line select")
  )
(while
  (not
    (and
      (setq l2 (car (entsel "\nSelect line 2: ")))
      (wcmatch (cdr (assoc 0 (entget l2))) "LINE")))
  (princ "\nNo line select")
  )
  (progn
    (cond
      ((=
(setq erg
(- (setq win1 (angle (cdr (assoc 10 (entget l1))) (cdr (assoc 11 (entget l1)))))
  (setq win2 (angle (cdr (assoc 10 (entget l2))) (cdr (assoc 11 (entget l2)))))
  )
      )
0)
      (setq di (distance (cdr (assoc 10 (entget l1))) (cdr (assoc 10 (entget l2)))))
      (alert (strcat "Lines parallel\nDistance: " (rtos di 2 2)))
      )
      ((/= erg 0)
      (alert "Lines no parallel")
      )
      )
    )
  )

   


------------------
Gruss Dirk

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 23. Jan. 2012 11:56    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 cadplayer 10 Unities + Antwort hilfreich

Ermittelt den Abstand von PKT3 zu der von PKT1, PKT2 beschriebenen Gerade ..... ganz allgemein gehalten

  (defun DT:IS-POINT? ( PKT )
    (if(=(type PKT)'VARIANT)  (setq PKT (vlax-variant-value   PKT)))
    (if(=(type PKT)'SAFEARRAY)(setq PKT (vlax-safearray->list PKT))) 
    (if(and(=(type PKT)'LIST)(vl-every 'numberp PKT))        
      (cond
        ((= 2 (vl-list-length PKT)) (list(car PKT)(cadr PKT) 0.0))
        ((= 3 (vl-list-length PKT)) PKT)
      )
    ) 
  )


(defun DT:ABSTAND-GERADE-PUNKT (PKT1 PKT2 PKT3 / V1 V2 VP) 
  (if(and(setq PKT1(DT:IS-POINT? PKT1))        
         (setq PKT2(DT:IS-POINT? PKT2))
         (setq PKT3(DT:IS-POINT? PKT3))         
         (setq V1 (mapcar '- PKT3 PKT1))
         (setq V2 (mapcar '- PKT2 PKT1))        
         (setq VP (list                         
                  (-(*(cadr  V1)(caddr V2)) (*(caddr V1)(cadr  V2)))
                  (-(*(caddr V1)(car   V2)) (*(car   V1)(caddr V2)))
                  (-(*(car   V1)(cadr  V2)) (*(cadr  V1)(car   V2)))
               )
         )
         (>(distance '(0.0 0.0 0.0) V2))   
     )
    (/(distance '(0.0 0.0 0.0) VP)(distance '(0.0 0.0 0.0) V2))
  ) 
)


------------------
      - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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: 823
Registriert: 09.10.2004

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

erstellt am: 23. Jan. 2012 12:45    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 cadplayer 10 Unities + Antwort hilfreich

Zitat:

[code]

      ((=
(setq erg
(- (setq win1 (angle (cdr (assoc 10 (entget l1))) (cdr (assoc 11 (entget l1)))))
   (setq win2 (angle (cdr (assoc 10 (entget l2))) (cdr (assoc 11 (entget l2)))))
   )
       )
0)


Vorsicht: bei parallelen Linien kann da nicht nur 0 herauskommen, sondern auch Pi.

Sinnvoll ist es, sich eine Bibliothek von passenden mathematischen Funktionen zu basteln, mit deren Hilfe Du dann schnell die jeweilige Frage klären kannst, ohne das Rad jedesmal neu erfinden zu müssen. Das Schöne ist, dass AutoCAD schon mit einer Bibliothek sehr nützlicher Funktionen daherkommt. Im konkreten Fall verstecken sich diese in der Programmdatei GEOMCAL.ARX, über die Handhabung erfährst Du in der Onlinehilfe unter Stichwort "KAL" bzw "CAL". Da gibt's auch schon fertige Funktionen für den Abstand zwischen Punkt und Gerade, der Dir natürlich auch den Abstand zweier Geraden gibt (cal "DPL(p1,p2,p3)"), wenn ich mich richtig erinnere

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 23. Jan. 2012 13:57    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

Mit cal muss ich mich etwas näher beschäftigen, hab auf die Schnelle nicht den Durchblick erhalten.
Für var di hab ich jetzt folgendes eingesetzt und funktioniert soweit

(setq di (distance (setq p1 (cdr (assoc 10 (entget l1))))
  (inters p1
  (polar p1 (+ win1 (/ pi 2)) 1)
  (cdr (assoc 10 (entget l2)))
  (cdr (assoc 11 (entget l2)))
  nil)
  )
    )

------------------
Gruss Dirk

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: 23. Jan. 2012 15:42    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 cadplayer 10 Unities + Antwort hilfreich

Servus DD!

Zitat:
Original erstellt von cadplayer:

    (cond
      ((=
(setq erg
(- (setq win1 (angle (cdr (assoc 10 (entget l1))) (cdr (assoc 11 (entget l1)))))
   (setq win2 (angle (cdr (assoc 10 (entget l2))) (cdr (assoc 11 (entget l2)))))
   )
       )
0)



Da würde ich lieber mit EQUAL vergleichen als mit =

Ciao Georg

------------------
http://www.xxx-tausend.info

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 24. Jan. 2012 12: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

Code:

(defun c p ( / l1 l2 w1 w2 erg di)
(while
  (not
    (and
      (setq l1 (car (entsel "\nSelect line 1: ")))
      (wcmatch (cdr (assoc 0 (entget l1))) "LINE")))
  (princ "\nNo line select")
  )
(while
  (not
    (and
      (setq l2 (car (entsel "\nSelect line 2: ")))
      (wcmatch (cdr (assoc 0 (entget l2))) "LINE")))
  (princ "\nNo line select")
  )
  (progn
    (cond
      ((equal
(setq win1 (angle (cdr (assoc 10 (entget l1))) (cdr (assoc 11 (entget l1)))))
(setq win2 (angle (cdr (assoc 10 (entget l2))) (cdr (assoc 11 (entget l2)))))
0)
      (setq di (distance (setq p1 (cdr (assoc 10 (entget l1))))
  (inters p1
  (polar p1 (+ win1 (/ pi 2)) 1)
          (cdr (assoc 10 (entget l2)))
          (cdr (assoc 11 (entget l2)))
          nil)
  )
    )
      (alert (strcat "Lines parallel\nDistance: " (rtos di 2 2)))
      )
      ((/= erg 0)
      (alert "Lines no parallel")
      )
      )
    )
  )


   


phanominal, das hatte ich auch noch nicht: obwohl die var "erg" nicht klar definiert ist, erfüllt sie den Zweck (bloss ungleich 0 von was)

------------------
Gruss Dirk

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 24. Jan. 2012 13:07    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 cadplayer 10 Unities + Antwort hilfreich

@cadplayer .. dein Code schon mal mit Linien im Raum probiert?    guck mal , auf was sich die Funktionen angle und polar beziehen ...

IMHO fähst du besser , wenn du ne allgemeingültige Lösung wie CAL oder halt ordentliche Vektorrechnung nimmst

------------------
  - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 24. Jan. 2012 13:22    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 cadplayer 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadplayer:

phanominal, das hatte ich auch noch nicht: obwohl die var "erg" nicht klar definiert ist, erfüllt sie den Zweck (bloss ungleich 0 von was)

erg = nil wenn nicht deklariert
(/= erg 0) --> T  somit ist die Bedingung immer erfüllt

erg deklariert (alles außer 0)
(/= erg 0) --> T
erg deklariert mit 0
(/= erg 0) --> NIL

und dann schau dir nochmal cond in der Hilfe an!
oder teste unter cond mal als erstes auf
((/= erg 0)(alert "Lines no parallel")) ... klar?

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."
-Lots of irritating superfluous parentheses!-

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 22. Feb. 2012 10:00    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

Mein Versuch mit cal eine Berechnung durchzuführen funktioniert soweit

Code:

(defun c p ( / l1 l2 l1a l1e l2a l2e l1wi l2wi di)
(while
  (not
    (and
      (setq l1 (car (entsel "\nSelect line 1: ")))
      (wcmatch (cdr (assoc 0 (entget l1))) "LINE")))
  (princ "\nNo line select")
  )
(while
  (not
    (and
      (setq l2 (car (entsel "\nSelect line 2: ")))
      (wcmatch (cdr (assoc 0 (entget l2))) "LINE")))
  (princ "\nNo line select")
  )
(if (not c:cal)(arxload "geomcal"))
(setq l1a (cdr (assoc 10 (entget l1)))
      l1e (cdr (assoc 11 (entget l1)))
      l2a (cdr (assoc 10 (entget l2)))
      l2e (cdr (assoc 11 (entget l2)))
      )
(progn
  (cond
    ((= (setq l1wi (cal "ang (l1a,l1e)")) (setq l2wi (cal "ang (l2a,l2e)")))
    (setq di (distance l1a (inters l1a
    (polar l1a (+ (* l1wi (/ pi 180)) (/ pi 2)) 1)
    l2a
    l2e
    nil); inters
))
    (alert (strcat "Lines parallel\nDistance: " (rtos di 2 2)))
    )
    ((/= l1wi l2wi T)
    (alert "Lines not parallel ")
    )
    )
  )
  )



------------------
Gruss Dirk

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

Windows 10
64bit system
Autocad Civil3d 2020 ENGLISH
Visual Studio 2019
OpenDCL.Runtime.9<P>

erstellt am: 23. Feb. 2012 13: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

((/= l1wi l2wi T)
    (alert "Lines not parallel ")
    (if (= (- (* l1wi (/ pi 180)) (* l2wi (/ pi 180))) (- (* 90 (/ pi 180))))
      (alert "Lines right angled")
      )
      )

Wenn ich gern prüfen möchte ob die Linien rechtwinklig zueinander stehen, tritt der Fall auf das 90Grad entweder 1.5708rad oder -1.5708rad
entspricht. Kann mir einer sagen wie ich das richtig einbauen muss?
Eigentlich dürfte es ja keine Rolle spielen ob die Einheiten auf Grad oder Gon in der Zeichnung liegen.

------------------
Gruss Dirk

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 23. Feb. 2012 13:51    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 cadplayer 10 Unities + Antwort hilfreich

Wie ist es mit den Funktionen  abs  und  equal mit Fuzzy?

------------------
  - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

Beiträge: 2154
Registriert: 02.05.2005

CAD:
AutoCAD 2.6 bis 2014
ADT 2005 - 2014
Arcibem
System:
Windows 2000, XP, NO VISTA
Internet-Startseite:
http://www.archi.de

erstellt am: 23. Feb. 2012 13:57    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 cadplayer 10 Unities + Antwort hilfreich

Hallo Dirk,
ich würde Dir einen anderen Ansatz empfehlen: bei zueinander senkrechten Linien ist das Skalarprodukt der Richtungsvektoren 0. Z.B. so:
Code:
; Skalarprodukt von Vektoren (ist 0, wenn v1 senkrecht zu v2)
(defun v_scal (v1 v2 / n m)
  (setq m 0)
  (foreach n (mapcar '* v1 v2) (setq m (+ m n)))
)


Grüsse, Henning

------------------
Henning Jesse
VoxelManufaktur
Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 23. Feb. 2012 15:58    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

@cadmium
Ja mein Ansatz ist nicht so umsetzbar, wie ich schrieb - da nicht immer der Fall eintritt dass 2 aufeinander stossende Linien 1.5708rad sind, was ich nicht verstehe - ich akzeptiere es halt

@Henning
Elegant, wenn ich in die formel (v_scal l1wi l2wi) einsetze kommt
; error: bad argument type: listp 0.0
Was bedeutet das?

------------------
Gruss Dirk

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

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

Beiträge: 2154
Registriert: 02.05.2005

CAD:
AutoCAD 2.6 bis 2014
ADT 2005 - 2014
Arcibem
System:
Windows 2000, XP, NO VISTA
Internet-Startseite:
http://www.archi.de

erstellt am: 23. Feb. 2012 17:00    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 cadplayer 10 Unities + Antwort hilfreich

Zitat:
Was bedeutet das?
Du übergibst ZAHLEN, die Funktion erwartet aber VEKTOREN. Um den Richtungsvektor einer Linie zu bekommen subtrahierst Du (vereinfacht dargestellt) den Anfangs- vom Endpunkt:
Code:
; Subtraktion von Vektoren
(defun v_sub (v1 v2 / )
  (mapcar '- v1 v2)
)
Grüsse, Henning

------------------
Henning Jesse
VoxelManufaktur
Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 24. Feb. 2012 09:07    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

Zum einen habe ich jetzt festgestellt, das Linien parallel sein können, aber gegenläufig zueinander gezeichnet ein können. Dann ergibt die Formel
((equal (setq l1wi (cal "ang (l1a,l1e)")) (setq l2wi (cal "ang (l2a,l2e)")))
=> nil (Lines not parallel)

Diesen Fall muss ich noch mit einbauen, sicherlich ist das über Vektorenrechnung zu lösen. Nur habe ich keine Erfahrung damit

Wenn ich die Punkte l1a und l1e in die Formel (setq v1 (v_sub l1a l1e)) einsetze erhalte ich z.b. (-5.02524 0.0 0.0)
Was stellt diese Liste dar ?

Das gleiche mache ich mit den Punkten l2a und l2e und gebe die var v1 v2 an (v_scal v1 v2) und erhalte z.b -23.4573
Was stellt dieser Wert dar?

Sorry, dass hier vllt. Mathegrundlagen angesprochen werden - war nicht Thema in meiner Ausbild.


------------------
Gruss Dirk

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: 24. Feb. 2012 10:33    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 cadplayer 10 Unities + Antwort hilfreich

hallo dirk,
siehe fuers skalarprodukt
http://de.wikipedia.org/wiki/Skalarprodukt

damit kannst du natuerlich auch parallele linien herausfinden (ueber berechnung des winkels zweier vektoren - ergebnis waere entweder 0 oder pi).

Zitat:
Wenn ich die Punkte l1a und l1e in die Formel (setq v1 (v_sub l1a l1e)) einsetze erhalte ich z.b. (-5.02524 0.0 0.0)
Was stellt diese Liste dar ?
das ist der richtungsvektor der linie.


Zitat:
Das gleiche mache ich mit den Punkten l2a und l2e und gebe die var v1 v2 an (v_scal v1 v2) und erhalte z.b -23.4573
Was stellt dieser Wert dar?
negativer wert: stumpfer winkel
positiver wert: spitzer winkel
winkel = 0: rechtwinklig

gruss
marco

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

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

Windows 10
64bit system
Autocad Civil3d 2020 ENGLISH
Visual Studio 2019
OpenDCL.Runtime.9<P>

erstellt am: 24. Feb. 2012 12:57    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 Marco für den Hinweis, der sehr hilfreich ist.

Wenn die Vektoren v1 v2 parallel sind, dann ergibt v1xv2= positiver Wert oder v1xv2= negativer Wert

Bedingung1) v1xv2 = v1v2 (Ergebnis positiv) oder v1xv2 = -v1v2 (Ergebnis negativ) ; Linien parallel

Bedingung2) v1xv2 = 0 ; Linien senkrecht


Gleichzeitig gilt wenn der Wert negativ ist = stumpfer Winkel und wenn der Wert postiv ist = spitzer Winkel
Das wiederspricht aber Bedingung1
Ich glaube ich verstehe es nicht richtig?

------------------
Gruss Dirk

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

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

Beiträge: 2154
Registriert: 02.05.2005

CAD:
AutoCAD 2.6 bis 2014
ADT 2005 - 2014
Arcibem
System:
Windows 2000, XP, NO VISTA
Internet-Startseite:
http://www.archi.de

erstellt am: 24. Feb. 2012 13:41    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 cadplayer 10 Unities + Antwort hilfreich

Eigenschaften...
Betrachte 0° als extremen Sonderfall des spitzen Winkels und 180° als extremen Sonderfall des stumpfen Winkels

Grüsse, Henning

------------------
Henning Jesse
VoxelManufaktur
Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

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: 24. Feb. 2012 13: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 cadplayer 10 Unities + Antwort hilfreich

skalarprodukt:
va*vb=|va|*|vb|*cos(va,vb)=a*b*cos(alpha)
mit
va,vb ... vektoren
|va|,|vb|,a,b laenge des jeweiligen vektors
alpha ... winkel zwischen a und b

wenn va*vb=0 stehen beide vektoren senkrecht zueinander.

wenn va*vb<>0 habe ich einen spitzen bzw. stumpfen winkel.
"spezialfall" fuer spitzen winkel ist ein 0-winkel.
"spezialfall" fuer stumpfen winkel ist gestreckter winkel.
durch umformen der obrigen gleichung kann ich den cosinus der winkels alpha bzw (va,vb) ermitteln
cos(va,vb)=(va*vb)/|va|*|vb|
wenn dieser wert 0 oder pi ist, sind beide linien parallel.

gruss
marco

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

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

Windows 10
64bit system
Autocad Civil3d 2020 ENGLISH
Visual Studio 2019
OpenDCL.Runtime.9<P>

erstellt am: 24. Feb. 2012 15:03    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

Skalar sehe ich wie eine x-beliebige Konstante für 2 Vektoren

Wie bekomme ich alpha raus, wenn
cos(va,vb)=(va*vb)/|va|*|vb|
cos (länge a,länge b) = (vektor a * vektor b) / (länge a * länge b)

Muss ich etwa die Linienlängen noch ermitteln

Mir ist klar dass bei parallelen Linien alpha 0 ist.

Bsp
va = (1 1 0)
vb = (2 2 0)
|va| ist damit die Linienlänge a gemeint ?
|vb| ist damit die Linienlänge b gemeint ?
alpha ?


Mein Ansatz ist jetzt folgender

Code:

(setq l1a (cdr (assoc 10 (entget l1))) ; Linie 1 Anfang
      l1e (cdr (assoc 11 (entget l1))) ; Linie 1 Ende
      l2a (cdr (assoc 10 (entget l2))) ; Linie 2 Anfang
      l2e (cdr (assoc 11 (entget l2))) ; Linie 2 Ende
      ll1 (distance l1a l1e) ; Länge Linie 1
      ll2 (distance l2a l2e) ; Länge Linie 2
      v1 (v_sub l1a l1e) ; Vektor Linie 1
      v2 (v_sub l2a l2e) ; Vektor Linie 2
      erg (v_scal v1 v2) ; Skalar der Vektoren v1 v2

Komme nicht weiter?

------------------
Gruss Dirk

[Diese Nachricht wurde von cadplayer am 24. Feb. 2012 editiert.]

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 24. Feb. 2012 15:30    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

Jetzt habe ich irgendwie Schmarren zusammengeschrieben, ich muss noch etwas nachdenken...

------------------
Gruss Dirk

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: 24. Feb. 2012 15:45    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 cadplayer 10 Unities + Antwort hilfreich

fortfuehrender code (nicht getestet)
Code:
(setq epsilon 0.0000000001)
(cond
  ((equal erg 0.0 epsilon)
    ; linien senkrecht zueinander
  )
  ((equal (abs (/ erg (* ll1 ll2))) 1.0 epsilon)
    ; linien parallel zueinander
  ('T
    ; liegen irgendwie zueinander
  )
)

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

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

Windows 10
64bit system
Autocad Civil3d 2020 ENGLISH
Visual Studio 2019
OpenDCL.Runtime.9<P>

erstellt am: 27. Feb. 2012 08:23    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

Jetzt ist die Funktion perfekt - ich habe die Aussage parallel oder senkrecht und die Winkeldifferenz der Linien falls sie irgendwie zueinander liegen. Das war eine gigantische Hilfestellung, am liebsten würde ich hier gleich doppelt 10units vergeben. Vielen Dank für die unermüdliche Hilfe und Marco H für den Endschliff (mir schien es absolut kompliziert aber interessant mal mehr zu erfahren) u.a. mit Skalarprodukt.

------------------
Gruss Dirk

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 18. Apr. 2012 10:27    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

Jetzt habe ich gesehen, dass Acad eigens eine Funktion hat die prüft ob Objekte parallel zueinander sind bzw. den Winkel anzeigt. Mein Gedanke ist nun, es wäre doch gut wenn der Auswurf "Lines are parallel" gleich noch die Distance angezeigt wird. Könnte man das in die Ausführung command einbauen ?

Bei var p2 muss ich mir noch überlegen, wie ich den lotrechten punkt p2 vom punkt p1 auf das zuletzt gewählte Objekt erzeuge.

Code:

(defun c pa ()
  (princ "\nMesse Winkel zwischen Lines Polylines! \n\n")
  (command "_measuregeom" "_angle"
  (setq p1 (cadr (entsel "\nWähle 1. Objekt! ")))
  (cadr (entsel "\nWähle 2. Objekt! "))
  )
  (princ)
  (setq p2 '(0 0))
  (princ "\nStrecke beträgt: ")
  (princ (distance p1 p2))
  )

------------------
Gruss Dirk

[Diese Nachricht wurde von cadplayer am 18. Apr. 2012 editiert.]

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: 18. Apr. 2012 11:00    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 cadplayer 10 Unities + Antwort hilfreich

hallo dirk,
wozu willst du denn jetzt den acad-befehl verwenden, wenn hier schon alles, was du haben willst, als lispfunktionen beschrieben wurde?

gruss
marco

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

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

Windows 10
64bit system
Autocad Civil3d 2020 ENGLISH
Visual Studio 2019
OpenDCL.Runtime.9<P>

erstellt am: 18. Apr. 2012 11:25    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

U.a. weil (command "_measuregeom" "_angle"
auch Polylinien auswertet und die Winkelauswertung unabhängig davon auswertet wie Linien und Polylinien zueinander gezeichnet sind.

------------------
Gruss Dirk

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 18. Apr. 2012 17:24    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

Wie muss ich vorgehen, wenn ich Anfang und Ende vom gewählten Segment an der Polylinie abfragen möchte.
Weil dann könnte ich zur Ermittlung des Abstandes so vorgehen

Code:

;Rechnet den Abstand zwischen zwei gewählten Linien

(if (not c:cal)(arxload "geomcal"))
(setq obj (entget (car (entsel "\nWähle Linie1"))))
(setq p1 (cdr (assoc 10 obj)))
(setq p2 (cdr (assoc 11 obj)))
(setq p3 (cadr (entsel "\nWähle Linie2")))

;Rechnet den Winkel der 1. Linie und addiert 90grad dazu für die Lotrechte

(setq lwi (+ (* (cal "ang (p1,p2)") (/ pi 180)) (/ pi 2)))

;Ermittelt den Punkt 4 aus der Lotrechte durch p3 zur Basis p1-p2

(setq p4 (polar p3 lwi 1))
(setq di (distance (cal "ill (p1,p2,p3,p4)") p3))


------------------
Gruss Dirk

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: 18. Apr. 2012 19:30    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 cadplayer 10 Unities + Antwort hilfreich

ungetestet so in der art (ohne fehlerabfangroutinen):
Code:
(mapcar 'set '(en pt) (entsel))
(setq vtx-lst (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget en)) ; aus deinem anderen beitrag, antwort von wronzky
      obj (vlax-ename->vla-object en)
      pt (vlax-curve-getClosestPointTo obj pt)
      first-seg (fix (vlax-curve-getParamAtPoint obj pt)) ; hier muss ueberprueft werden, ob es sich um den letzten vertex handelt
      pt1 (nth first-seg vtx-lst)
      pt2 (nth (1+ first-seg) vtx-lst))

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

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

Windows 10
64bit system
Autocad Civil3d 2020 ENGLISH
Visual Studio 2019
OpenDCL.Runtime.9<P>

erstellt am: 19. Apr. 2012 08:30    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

Find ich klasse, insbesondere dass man immer wieder neue Kombinationen entdeckt. Beispielsweise (mapcar 'set '(en pt) (entsel)): smartset um schnell variablen zu definieren. Ich frage mich immer nur, wie ihr solche ausgeklügelte Konstruktionen herkriegt... Danke

------------------
Gruss Dirk

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 27. Apr. 2012 14: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

Betrifft zwar nicht das Thema, aber kann ich auch das gewählte Segment einer Polylinie rauslöschen ohne die Linie aufbrechen zu müssen?
Mein Ansatz wäre jetzt die gesamte Polylinie mittels entdel zu löschen und anschliessend anhand der gesammelten Vertexe neuzuzeichnen.

------------------
Gruss Dirk

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 27. Apr. 2012 20:03    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 cadplayer 10 Unities + Antwort hilfreich

Meldin
Mitglied



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

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 28. Apr. 2012 15:01    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 cadplayer 10 Unities + Antwort hilfreich

Hallo
könnte man das mit den Parellel nicht auch so lösen. Wobei ich denke der resultierende fuzz
kommt daher wenn Linien nich gleich lang sind (eine Ungenauigkeit). Wenn man die länge noch berücksichtigt sollte es auch gehen.
Code:
(defun c aral (/ li1 Xlist)
  (setq Xlist nil)
  (repeat 2
    (setq li1 (entget (car (entsel))))
    (command "_xline" (cdr (assoc 10 li1))(cdr (assoc 11 li1))"")
    (setq Xlist (cons (mapcar 'abs (assoc 11 (entget (entlast)))) Xlist))
    (entdel (entlast))
  )
  (if (equal (nth 2(car Xlist))(nth 2(cadr Xlist)) 0.0000000000000002)
    (princ "\nParallel")
    (princ "\nnicht Parallel")
  )
  (princ)
)

------------------
Gruß Wolfgang

Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. 

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 03. Mai. 2012 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

@cadmium: Ja ist mir klar, Stützpunkte kann ich einfach löschen. Aber geht das auch gleich, dass ich ganze Liniensegmente aus der Polylinie rauslösche

@Wolfgang: Ich hab deinen Code nicht ganz zum laufen gekriegt. Vielleicht kannst du nochmal kurz einwerfen, wie du dir das vorgestellt hast mit xline/entdel - kommt mir irgendwie merkwürdig vor.

Zu meinem zusammengekritzelten: Ich würde gern einen sauberen Abschluss des progn am Ende finden. Gedacht war eigentlich abzufragen ob die Variablen für das 1. Objekt o1en und das 2. o2en vorhanden sind, um dann zu progn.

Code:

(if (not c:cal)(arxload "geomcal"))
(while
  (not
    (and
      (mapcar 'set '(o1en o1pt) (entsel "\nWähle 1. Objekt! "))
      (cond
((= "LWPOLYLINE" (cdr (assoc 0 (entget o1en))))
(setq o1vtx
    (vl-remove-if-not
      '(lambda (x) (= (car x) 10))
      (entget o1en)
      )                   
    o1obj (vlax-ename->vla-object o1en)
            o1pt (vlax-curve-getClosestPointTo o1obj o1pt)
            o1seg (fix (vlax-curve-getParamAtPoint o1obj o1pt))
            o1pt1 (cdr (nth o1seg o1vtx))
            o1pt2 (cdr (nth (1+ o1seg) o1vtx))
            )
)
((= "LINE" (cdr (assoc 0 (entget o1en))))
(setq o1pt1 (cdr (assoc 10 (entget o1en)))
      o1pt2 (cdr (assoc 11 (entget o1en)))
      )
)
)
      (mapcar 'set '(o2en o2pt) (entsel "\nWähle 2. Objekt! "))
      (cond
((= "LWPOLYLINE" (cdr (assoc 0 (entget o2en))))
  (setq o2vtx
    (vl-remove-if-not
      '(lambda (x) (= (car x) 10))
      (entget o2en)
      )                   
      o2obj (vlax-ename->vla-object o2en)
              o2pt (vlax-curve-getClosestPointTo o2obj o2pt)
              o2seg (fix (vlax-curve-getParamAtPoint o2obj o2pt))
              o2pt1 (cdr (nth o2seg o2vtx))
              o2pt2 (cdr (nth (1+ o2seg) o2vtx))
              )
  )
((= "LINE" (cdr (assoc 0 (entget o1en))))
(setq o2pt1 (cdr (assoc 10 (entget o1en)))
      o2pt2 (cdr (assoc 11 (entget o1en)))
      )
)
)
      )
    )
  )
(progn
  (setq o1wi (+ (* (cal "ang (o1pt1,o1pt2)") (/ pi 180)) (/ pi 2))
        o2pt3 (polar o2pt o1wi 1)
        di (distance (cal "ill (o1pt1,o1pt2,o2pt,o2pt3)") o2pt)
  )
  (command "_measuregeom" "_angle" o1pt o2pt)
  (princ "\nStrecke beträgt: ")
  (princ di)
  )

------------------
Gruss Dirk

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 03. Mai. 2012 14: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 Nur für cadplayer 10 Unities + Antwort hilfreich

Ganze Segmente löschen? Also das du danach 2 Polylinien hast ? Wie ist es mit dem BREAK Befehl ?

------------------
  - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

Meldin
Mitglied



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

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 03. Mai. 2012 14:53    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 cadplayer 10 Unities + Antwort hilfreich

Ich denke du bekommst es nicht zum laufen weil du den smilie mit kopiert hast.
Code:
(defun c:Paral (/ li1 Xlist)
  (repeat 2
    (setq li1 (entget (car (entsel))))
    (command "_xline" (cdr (assoc 10 li1))(cdr (assoc 11 li1))"")
    (setq Xlist (cons (mapcar 'abs (assoc 11 (entget (entlast)))) Xlist))
    (entdel (entlast))
  )
  (if (equal (nth 2(car Xlist))(nth 2(cadr Xlist)) 0.0000000000000002)
    (princ "\nParallel")
    (princ "\nnicht Parallel")
  )
  (princ)
)

------------------
Gruß Wolfgang 

Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden.  

[Diese Nachricht wurde von Meldin am 03. Mai. 2012 editiert.]

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 03. Mai. 2012 15: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

@wolfgang: Nein hab ich nicht, mir löscht es bei der Funktion die Polylinien, die ich auswähle

@Thomas: Klar wusste nicht mehr, das _break auch 2 Punkte zulässt

Bei der Funktion sollte es eigentlich das Segment rauslöschen. Ich hab nur ein Problem wie bekomme ich ein vla-objekt wieder in ein normales Lisp-objekt

Code:

(defun C:www (/

    )
  (while
    (mapcar 'set '(en pt)
    (entsel "Breakobjekt wählen! "))
    (if en
      (progn
((= "*POLYLINE" (cdr (assoc 0 (entget obj))))
  (setq vtx
(vl-remove-if-not
  '(lambda (x) (= (car x) 10))
  (entget en)
  )
obj (vlax-ename->vla-object en)
                pt (vlax-curve-getClosestPointTo obj pt)
                seg (fix (vlax-curve-getParamAtPoint obj pt))
                pt1 (cdr (nth seg vtx))
                pt2 (cdr (nth (1+ seg) vtx))
)
  (command "_BREAK" obj "_F" pt1 pt2)
  )
)
      )
    )
  (princ)
  )


------------------
Gruss Dirk

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

Meldin
Mitglied



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

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 03. Mai. 2012 15:25    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 cadplayer 10 Unities + Antwort hilfreich

Ich bin dabei auch von linien ausgegangen nicht aber von polylinien.
Daher rührt der Fehler.

------------------
Gruß Wolfgang

Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. 

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 03. Mai. 2012 15:35    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 cadplayer 10 Unities + Antwort hilfreich

 
Zitat:
Original erstellt von cadplayer:
wie bekomme ich ein vla-objekt wieder in ein normales Lisp-objekt

vlax-vla-object->ename   ?

------------------
      - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 04. Mai. 2012 08:21    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

Ich bekomme nachwievor die Fehlermeldung
error: bad argument value: AutoCAD command: #<VLA-OBJECT IAcadLWPolyline2 0000000033164b88>

In obj steht #<VLA-OBJECT IAcadLWPolyline2 0000000033164b88>
Oder verstehe ich hier etwas falsch.
vlax-vla-object->ename erstellt doch ein vla-objekt nicht ein Lisp-objekt

------------------
Gruss Dirk

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

Meldin
Mitglied



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

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 04. Mai. 2012 08:27    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 cadplayer 10 Unities + Antwort hilfreich

Nein erstellt wird damit auch nichts du kannst das Objekt nur übergeben von Lisp nach AX und wieder zurück.

------------------
Gruß Wolfgang

Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. 

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: 04. Mai. 2012 08:42    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 cadplayer 10 Unities + Antwort hilfreich

deine funktion muesste in etwa so ausschauen (ungetestet):
Code:
(defun C:www ( / en pt vtx obj pt pt1 pt2 seg )
  (while
    (mapcar 'set '(en pt) (entsel "Breakobjekt wählen! "))
    (if en
      (progn
        ((= "*POLYLINE" (cdr (assoc 0 (entget en))))
          (setq vtx (vl-remove-if-not
                      '(lambda (x) (= (car x) 10))(entget en))
                obj (vlax-ename->vla-object en)
                pt (vlax-curve-getClosestPointTo obj pt)
                seg (fix (vlax-curve-getParamAtPoint obj pt))
                pt1 (cdr (nth seg vtx))
                pt2 (cdr (nth (1+ seg) vtx))
          )
          (command "_BREAK" en "_F" pt1 pt2)
        )
      )
    )
  )
  (princ)
)

gruss
marco

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

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 04. Mai. 2012 08:42    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 cadplayer 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadplayer:
vlax-vla-object->ename erstellt doch ein vla-objekt nicht ein Lisp-objekt 


Bemühe bei sowas doch einfach mal die HILFE  im VLIDE !

---------

Zu deinem Code (davon abgesehen, dass ich ihn gruselig finde  .... )

nimm doch einfach ne neue Variable .. also statt
VLobj (vlax-ename->vla-object en)
pt  vlax-curve-getClosestPointTo VLobj pt)
seg (fix (vlax-curve-getParamAtPoint VLobj pt))

------------------
  - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 08. Mai. 2012 13: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


DelSegment.LSP


PruftParallelV2.LSP

 
Zwei Routinen, die vielleicht das Leben erleichtern.

No1)

Löschen von Segmenten in Polylinien

No2)

Prüfe Polylinien und Linien auf Parallel und gebe den Abstand aus

Damit ist der ewige Thread wohl zu Ende und ich danke allen Helferlein mit deren Einwürfen. Ich hoffe, ich habe niemanden vergessen, beim Punkte vergeben.
------------------
Gruss Dirk

[Diese Nachricht wurde von cadplayer am 08. Mai. 2012 editiert.]

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 08. Mai. 2012 14:31    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 cadplayer 10 Unities + Antwort hilfreich

zu No1 ) würd ich noch testen, ob es sich bei einer 2D-Polylinie nicht um eine angegleichene handelt (und die ausschließen) ... da klappts mit dem ganzzahligen Parameter nämlich nicht .. und das Segmentweise Löschen würde auch keinen Sinn machen  ... nur mal als ergänzender Hinweis

------------------
  - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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