Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Bogen tangential an Linie zeichnen

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:  Bogen tangential an Linie zeichnen (1375 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

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

erstellt am: 05. Aug. 2013 15:52    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

Hat jemand von Euch eine Idee, wie ich ermitteln kann, ob ein gewählter Punkt links oder rechts von einer gewählten Linie liegt?

Ich brauche diese Angabe, um einen Bogen tagential entweder links oder rechts der Linie zeichnen zu können.

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

http://cadplayerlounge.blogspot.se

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

Geos
Mitglied
Vermessungstechniker i.R.


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

Beiträge: 1017
Registriert: 21.09.2001

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

erstellt am: 05. Aug. 2013 17: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 Nur für cadplayer 10 Unities + Antwort hilfreich

Ich glaube, das hatten wir schon mal - prüft, ob der Punkt #pkt3 links der Geraden #pkt1 - #pkt2 liegt:
Code:
(defun pktlinks? (#pkt1 #pkt2 #pkt3 / )
  (if (> (* (- (car #pkt2) (car #pkt1)) (- (cadr #pkt3) (cadr #pkt1)))
      (* (- (cadr #pkt2) (cadr #pkt1)) (- (car #pkt3) (car #pkt1)))
      )
    t ;Punkt links
    nil ;Punkt rechts
  )
)

------------------
Schöne Grüße
Ernst

www.geopaint.at

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: 06. Aug. 2013 10:12    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 Ernst, ich weiss zwar nicht genau wie du auf die Formel gekommen bist - es funktioniert jedenfalls einwandfrei.

Ich habe hier folgenden Code geschrieben, bin aber noch nicht glücklich damit, wie er läuft. Es soll ja der Bogen in die Richtung gezeichnet werden, die vorgegeben wird. Hier passiert nur, das ein Bogen tangential an die Linie gesetzt wird, aber nicht mit der korrekten Richtung.
Ich könnte zwar jetzt eine Abfrage machen, die den Bogen spiegelt, finde ich aber nicht optimal. Kennt einer einen Tip

Code:
; Funktion zeichnet einen Bogen tagential an eine gewählte Linie
(defun c:arct ( /  rad obj z werte)

        (while (not z)
            (if (not (setq rad (getreal "\nWähle einen Bogenradius ")))
                (princ " Gib ein Radius ein! ")
                (progn
                    (setq z 1)
                    rad
                    )
                )
            )
        (setq z nil)
        (if (= "LINE"
              (cdr (assoc 0 (setq rec (entget (car
                                                  (while (not z)
                                                      (if (not (setq obj (entsel "\nWähle eine Linie aus ")))
                                                          (princ "\n Nichts gewählt!")
                                                          (progn
                                                              (setq z 1)
                                                              obj
                                                              )
                                                          )
                                                      )
                                                )
                                        )
                              )
                      )
                )
            )
            (if (and (setq werte
                  (list
                      (cons "rad" rad)
                      (cons "pt1" (cdr (assoc 10 rec)))
                      (cons "pt2" (if (null i) (progn (setq ref (getvar "osmode")) (setvar "osmode" 513) (cdr (assoc 11 rec)))))
                      (cons "pt3" (getpoint "\nWähle einen Linienpunkt, wo der Bogen angetragen werden soll "))
                      (cons "pt4" (if (null i) (progn (setvar "osmode" ref) (getpoint "\nWähle einen Bogenendpunkt "))))
                      (cons "ang" (angle (cdr (assoc 10 rec)) (cdr (assoc 11 rec))))
                      )
                  )
              )
                (apply '(lambda (rad p1 p2 p3 p4 ang)
                           
                            ; Kontrollroutine von Ernst alias geos im cad.de forum
                            ; prüft ob der Endpunkt rechts oder links der Linie liegt
                            (if (> (* (- (car p2) (car p1)) (- (cadr p4) (cadr p1)))
                                  (* (- (cadr p2) (cadr p1)) (- (car p4) (car p1)))
                                  )
                                ; Punkt liegt links
                                  (progn
                                      (command "_arc" p3
                                              "_c" (polar p3 (+ (/ pi 2) ang) rad)
                                              "_l" (distance p3 p4)
                                              )
                                  )
                                ; Punkt liegt rechts
                                  (progn
                                      (setvar "ANGDIR" 1)
                                      (command "_arc" p3
                                              "_c" (polar p3 (- ang (/ pi 2)) rad)
                                              "_l" (distance p3 p4)
                                            )
                                     
                                  )
                               
                                )
                            )
                      (mapcar 'cdr werte)
                               
                )
            )
            (alert "keine Linie gewählt")
            )
    (princ)
    );|


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

http://cadplayerlounge.blogspot.se

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: 06. Aug. 2013 15: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

Ich hab das jetzt auf diese Weise gelöst, wenn der Punkt rechts von der Linie liegt. Damit werden alle Bögen in Laufrichtung der gew. Linie gezeichnet. Ist nicht toll, aber ich weiss mir nicht anders zu helfen. Vielleicht hat einer ja Vorschläge.

Code:
; Punkt liegt rechts
                                  (progn
                                      (setq pc (polar p3 (+ (/ pi 2) ang) (- rad))) ; Kreismittelpunkt

                                     
                                     
                                      (setq ang (- (apply '(lambda (c tg be) ; Winkel in pc zw. p3 p4
                                                            (- (angle c be) (angle c tg)))
                                                      (list pc p3 p4)
                                                      )
                                                  )
                                      )
                                     
                                      (command "_arc"
                                              (polar pc (+ (angle pc p4) (* ang 0.33)) rad)
                                              (polar pc (+ (angle pc p4) (* ang 0.66)) rad)
                                              p3
                                      )
                                     
                                  )


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

http://cadplayerlounge.blogspot.se

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

Geos
Mitglied
Vermessungstechniker i.R.


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

Beiträge: 1017
Registriert: 21.09.2001

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

erstellt am: 06. Aug. 2013 19: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

Will jetzt Deine Progs nicht ausprobieren - es ist viel zu heiß - noch immer 30+ ...

Aber Du könntest die Linie nochmals (fiktiv) zeichnen (und wieder löschen) und Dir sodann den ARC-Befehl mit Leereingabe (statt P1) zu Nutze machen ...?

------------------
Schöne Grüße
Ernst

www.geopaint.at

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. Aug. 2013 16:13    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

Zitat:
Dir sodann den ARC-Befehl mit Leereingabe (statt P1) zu Nutze machen ...

was meinst du genau mit Linie zeichnen, mir geht es doch um den Bogen, den ich durch Auswahl der Linie zeichnen lassen will. Vielleicht hast de ja mal Zeit bei Gelegenheit, meine Schnipsel zu testen

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

http://cadplayerlounge.blogspot.se

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

Geos
Mitglied
Vermessungstechniker i.R.


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

Beiträge: 1017
Registriert: 21.09.2001

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

erstellt am: 08. Aug. 2013 17:40    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:
was meinst du genau mit Linie zeichnen, mir geht es doch um den Bogen, den ich durch Auswahl der Linie zeichnen lassen will.

Befehl: l
LINIE Ersten Punkt angeben:
Nächsten Punkt angeben oder [Zurück]:
Nächsten Punkt angeben oder [Zurück]:  <ENTER>

Befehl: _arc
Startpunkt für Bogen angeben oder [Zentrum]:  <ENTER>
Endpunkt für Bogen angeben:

Anstelle von Startpunkt drücke EINGABE und schau, was passiert.

Zitat:
Vielleicht hast de ja mal Zeit bei Gelegenheit, meine Schnipsel zu testen 

Vielleicht am WE, da solls kühler werden - derzeit 38°!

------------------
Schöne Grüße
Ernst

www.geopaint.at

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: 08. Aug. 2013 17: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 cadplayer 10 Unities + Antwort hilfreich

Servus Dirk!

Über die beiden Bogenpunkte kannst doch die Laufrichtung (die zum Rechnen für Deinen speziellen Fall, nicht die tatsächliche) der Linie bestimmen. Dann noch die Differenz der Richtungswinkel der Linie und Bogenendpunkt senkrecht zur Linie berechnen. Ergibt entweder Pi/2 oder -Pi/2 - entspricht links oder rechts.

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: 09. Aug. 2013 13:04    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

Gute Idee Ernst, mit einem Anschlussbogen an eine Linie - hatte ich doch früher zum Zeichnen auch so angewandt.

Georg: Genau da lag mein Denkfehler, ich kam nicht drauf den Winkel gegen den Urzeigersinn zu rechen, baue ich noch ein, dann müsste es laufen.

Vielen Dank für eure Einwürfe, nice WE!

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

http://cadplayerlounge.blogspot.se

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: 09. Aug. 2013 19: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


Arctg.lsp

 
Hi!

Hier habe ich auf die Schnelle eure Eingaben eingebaut. Läuft, aber kann sicherlich noch nachgebessert werden.
Bspw. dass gleich erkannt wird, wo sich der neue Bogenendpunkt befindet, dass quasi die "gespiegelte" variante gar nicht erst abgefragt werden muss.

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

http://cadplayerlounge.blogspot.se

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

Geos
Mitglied
Vermessungstechniker i.R.


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

Beiträge: 1017
Registriert: 21.09.2001

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

erstellt am: 12. Aug. 2013 19:28    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

Hab ich bis jetzt übersehen (mein letzter Tipp war gedacht für einen beliebigen Radius)
aber da Du ja den Bogenradius angibst könntest Du:

*) Linie wählen -
   (der dem Pickpkt. nähere Endpkt ist Bogenanfang !?)

*) Radius eingeben

*) (temporären) Endpunkt angeben
  
   je nach links/rechts (s.o.) Bogenmittelpkt. berechnen
   (liegt ja im rechten Winkel zur Linie)
  
   Vom Mittelpkt. über (tmp.) Endpkt tatsächlichen Endpkt berechnen,
   somit hast Du alles was Du für den Bogen brauchst.

Ergänzung: Gehe davon aus, dass der anzugebende Endpkt. nur mehr für die Seite und die Bogenlänge verwendet wird (sonst Überbestimmung)
  


------------------
Schöne Grüße
Ernst

www.geopaint.at

[Diese Nachricht wurde von Geos am 12. Aug. 2013 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