Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  Rund um AutoCAD
  Kreis/Bogen in Liniesegmente

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
  
Von Digital Twins bis Hochleistungs-Computing: PNY präsentiert seine Zukunftstechnologien für die Industrie von morgen, eine Pressemitteilung
Autor Thema:  Kreis/Bogen in Liniesegmente (13016 mal gelesen)
invhp
Ehrenmitglied V.I.P. h.c.
MB Techniker, AE, WKZmacher



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

Beiträge: 5552
Registriert: 16.05.2002

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

Hallo Zusammen!

hat einer von euch ein Tool oder Trick, wie ein Kreis oder Bogen in Liniensegmente aufgeteilt werden kann ähnlich der Darstellungen wie wenn AUFLÖS auf z.B. 10 gesetzt wird nur eben das tatsächlich Linie daraus werden?

Danke für eure Hilfe!

------------------
Grüsse
Jürgen

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

benwisch
Mitglied
Bautechniker, CAD-Konstrukteur


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

Beiträge: 375
Registriert: 01.02.2001

Autocad 2005-2010
Microstation V8
Photoshop CS4 + Camera Raw
Nikon Capture NX2
Nikon D90

erstellt am: 26. Mai. 2003 12: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 invhp 10 Unities + Antwort hilfreich


bogeninlinien.lsp.txt

 
bitteschön...
ist aber nicht von mir...
manuell .txt entfernen, im autocad laden und mit arclin starten

"Suchet ihr, so suchet!"
augustinuszitat

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

Brischke
Ehrenmitglied V.I.P. h.c.
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: 4191
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 26. Mai. 2003 13: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 Nur für invhp 10 Unities + Antwort hilfreich

Hallo Jürgen,

folgende Zeilen erledigen das für dich. Einfach das Objekt wählen und dann die Anzahl der Segment eingeben. Programm erstellt dann eine LWPolylinie.

Code:

(defun c:kbla (/ elem selem pts)
  (setq elem (entlast))
  (command "_.DIVIDE" (setq selem(car (entsel)))(getint "\nAnzahl der Segmente:"))
  (setq selem (vlax-ename->vla-object selem)
pts (list (vlax-curve-getStartPoint selem))
)
  (while (setq elem(entnext elem))
    (setq pts(cons (cdr(assoc 10 (entget elem))) pts))
    (entdel elem)
    )
  (entmake(append(list
                  '(0 . "LWPOLYLINE")
  '(100 . "AcDbEntity")
  '(67 . 0)
  '(410 . "Model")
  (cons 8 (vlax-get-property selem "LAYER"))
  '(100 . "AcDbPolyline")
  (cons 90 (length pts))
  '(70 . 0)
  '(43 . 0.0)
  '(38 . 0.0)
  '(39 . 0.0))
(apply 'append (mapcar  '(lambda (x)
    (list (cons 10 x) '(40 . 0.0) '(41 . 0.0) '(42 . 0.0))
    )
pts
))
(list '(210 0.0 0.0 1.0))
)
  )
  )

Bei Fragen ...

Grüße Holger

------------------
Holger Brischke
CADlon - Lisp over night!
Neue Tool's im Free-&Download
Zugang zum Download schon gesichert?

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

invhp
Ehrenmitglied V.I.P. h.c.
MB Techniker, AE, WKZmacher



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

Beiträge: 5552
Registriert: 16.05.2002

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

Danke euch beiden! Prima Tools die genau das machen was ich brauche!

Thnx a lot!!

------------------
Grüsse
Jürgen

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

Christian Marx
Mitglied



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

Beiträge: 218
Registriert: 11.12.2002

AutoCad LT 200x
Athon 1600XP
GeForce II MX400
256 DDR RAM
60GB Drive
16xDVD
Aopen 24/10/40 Brenner
TV-Karte WinTV PVR 250

erstellt am: 27. Mai. 2003 10: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 invhp 10 Unities + Antwort hilfreich

kannst auch mit dem befehl _polygon in deinen kreis ein polygon einzeichnen. anzahl der flächen angeben, selber mittelpunkt wie der kreis, und nur noch angeben, ob inkreis oder umkreis - fertig :-)


gruß
chris

------------------
www.marx-softwaredevelop.de/
MarxCiCAD Architektur-/Schalungsmodul für AutoCad 2000 - 2002

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

kirschi
Mitglied



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

Beiträge: 38
Registriert: 13.02.2003

Windows XP Prof. Vers. 2002 SP 3; AutoCAD MAP 2007 und AutoCAD MAP 2011 installiert

erstellt am: 12. Feb. 2010 09: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 Nur für invhp 10 Unities + Antwort hilfreich

Habe bei meiner Suche nach der Umwandlung von Bögen in Segmente unter AutoCAD 2007 dieses tolle Tool gefunden!
Nur ein Problem: Das letzte Segment wird nicht gezeichnet! Ehe ich mich jetzt in den Quellcode reinarbeite (mache nicht so oft LISP)
meine erste Frage: Hat schon jemand die Lösung?
Zweite Frage: kann man auch die Bogenlänge ausgeben?

Schon mal schönen Dank
Kirschi

ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist!


Zitat:
Original erstellt von Brischke:
Hallo Jürgen,

folgende Zeilen erledigen das für dich. Einfach das Objekt wählen und dann die Anzahl der Segment eingeben. Programm erstellt dann eine LWPolylinie.

Code:

(defun c:kbla (/ elem selem pts)
  (setq elem (entlast))
  (command "_.DIVIDE" (setq selem(car (entsel)))(getint "\nAnzahl der Segmente:"))
  (setq selem (vlax-ename->vla-object selem)
pts (list (vlax-curve-getStartPoint selem))
)
  (while (setq elem(entnext elem))
    (setq pts(cons (cdr(assoc 10 (entget elem))) pts))
    (entdel elem)
    )
  (entmake(append(list
                   '(0 . "LWPOLYLINE")
   '(100 . "AcDbEntity")
   '(67 . 0)
   '(410 . "Model")
   (cons 8 (vlax-get-property selem "LAYER"))
   '(100 . "AcDbPolyline")
   (cons 90 (length pts))
   '(70 . 0)
   '(43 . 0.0)
   '(38 . 0.0)
   '(39 . 0.0))
(apply 'append (mapcar  '(lambda (x)
    (list (cons 10 x) '(40 . 0.0) '(41 . 0.0) '(42 . 0.0))
    )
pts
))
(list '(210 0.0 0.0 1.0))
)
  )
  )

Bei Fragen ...

Grüße Holger


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: 13530
Registriert: 30.11.2003

Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.

erstellt am: 12. Feb. 2010 09:50    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 invhp 10 Unities + Antwort hilfreich

.. geht alles .. brauchst du nun anstelle der Bögen nur Polylinien(die ja auch Bögen haben können) oder Polylinien, die aus geraden kleinen Segmenten zusammengesetzt sind? Die Länge soll die ursprüngliche Bogenlänge sein, oder die Länge der PL?
Liegen die Bögen immer in der xy-Ebene oder müssen alle möglichen Raumlagen berücksichtigt sein ?

------------------
      - 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

Brischke
Ehrenmitglied V.I.P. h.c.
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: 4191
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 12. Feb. 2010 09: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 Nur für invhp 10 Unities + Antwort hilfreich

... ich habe das mal angepasst, die Bogenlänge wird nun auch im Textfenster ausgegeben.
Ich möchte nur mal anmerken, dass das hier wirklich ein gaaanz kleiner Schnell-Schuss ist, der (wie CADmium es bereits anspricht) nicht in allen Situationen das korrekte Ergebnis liefern wird. Dafür bedarf es eben etwas mehr Aufwand.
Code:
(defun c:kbla (/ elem selem pts selemType ptst pte bogenL)
  (setq elem (entlast))
  (command "_.DIVIDE" (setq selem(car (entsel)))(getint "\nAnzahl der Segmente:"))
  (setq selemType (cdr(assoc 0 (entget selem))))
  (if (member selemType '("ARC" "CIRCLE"))
    (progn
      (setq selem (vlax-ename->vla-object selem)
    ptst (vlax-curve-getStartPoint selem)
    pts (list ptst)
    pte (vlax-curve-getEndPoint selem)
    bogenL (vlax-get-Property selem (if (= "ARC" selemType)'ArcLength 'Circumference))
    )
      (while (setq elem(entnext elem))
(setq pts(cons (cdr(assoc 10 (entget elem))) pts))
(entdel elem)
)
      (setq pts (cons (if (= "ARC" selemType)pte ptst)pts))
      (entmake(append(list
      '(0 . "LWPOLYLINE")
      '(100 . "AcDbEntity")
      '(67 . 0)
      '(410 . "Model")
      (cons 8 (vlax-get-property selem "LAYER"))
      '(100 . "AcDbPolyline")
      (cons 90 (length pts))
      '(70 . 0)
      '(43 . 0.0)
      '(38 . 0.0)
      '(39 . 0.0))
    (apply 'append (mapcar  '(lambda (x)
(list (cons 10 x) '(40 . 0.0) '(41 . 0.0) '(42 . 0.0))
)
    pts
    )
    )
    (list '(210 0.0 0.0 1.0))
    )
      )
      (terpri)
      (princ bogenL)
      )
    (alert "Keinen Kreis oder Bogen gewählt!")
    )
  (princ)
  )

Bei Fragen ...

Grüße Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.

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

kirschi
Mitglied



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

Beiträge: 38
Registriert: 13.02.2003

Windows XP Prof. Vers. 2002 SP 3; AutoCAD MAP 2007 und AutoCAD MAP 2011 installiert

erstellt am: 12. Feb. 2010 20:08    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 invhp 10 Unities + Antwort hilfreich

Hallo Holger,

vielen Dank für die schnelle Hilfe!!

Gruß und schönes Wochenende
Kirschi

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

kathi753
Mitglied
techn. angestellte

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

Beiträge: 3
Registriert: 31.10.2013

erstellt am: 20. Mrz. 2025 14:37    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 invhp 10 Unities + Antwort hilfreich

Hallo Holger, die letzte Linie zum Ende der PL hin fehlt bei den Segmenten.
Aber DANKE für das LISP!! 

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

cadffm
Moderator
良い精神




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

Beiträge: 22477
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 21. Mrz. 2025 08: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 invhp 10 Unities + Antwort hilfreich

Das sollte eher nicht vorkommen, Holger hatte dies aber dennoch als Warnung vorab beschrieben.
Wenn du wirklich den letzten Code von  09:58 nutzt, dann ist das abhängig von deinen Objektdaten:

1. teste einmal mit einem anderen frei hand erstellten Bogen
2. teile eine Beispiel (.dwg) bei dem man das Problem nachvollziehen kann

(Bei Kreisen hätte man eine geschlossene Polylinie mit einem Stützpunkt weniger machen können, aber das ist ein anderes Thema)

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



Anzeige:Infos zum Werbeplatz >>

AVC DXF Export CAD APP für 3D, Datenaustausch, Möbel

Plugin for AutoCAD and BricsCAD AVC_DXF. Lay details (solids 3d), obtaining contours for 2d milling and export of contours in dxf. Layers and blocks for import to BiesseWorks, BSolid, Homag WoodWop, Thermwood

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

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

erstellt am: 21. Mrz. 2025 10: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 Nur für invhp 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von invhp:
Hallo Zusammen!

hat einer von euch ein Tool oder Trick, wie ein Kreis oder Bogen in Liniensegmente aufgeteilt werden kann ähnlich der Darstellungen wie wenn AUFLÖS auf z.B. 10 gesetzt wird nur eben das tatsächlich Linie daraus werden?


Ich hab' hier mal eine sehr umfassende Lösung für Euch, die folgende Vorteile hat:

- sie erzeugt Polylinien aus geraden Linienstücken, die Auflösung ist durch globale Variablen steuerbar
- sie verarbeitet Polylinien (auch mit Bögen, kurvenangepasst usw), Kreise, Ellipsen, Kreisbögen, Ellipsenbögen und Splines
- geschlossene Elemente werden erkannt
- gerade Linienstücke innerhalb der Polylinien bleiben als gerade Streckenelemente erhalten
- Ecken bleiben erhalten
- Funktion ist als Befehl: AT-CURVE->POLY mit Elementwahl aufrufbar, oder als Lisp-Fuktion (at-curve->poly <ename>), oder als Lisp-Funktion mit Rückgabe der Punktliste (at-curve->lpt en)

Verbesserungsfähig wäre diese Funktion IMO durch eine relativ zu Bogenlänge und Radius gesetzte Auflösung der Bögen und Kreise. Innerhalb einer Polylinie können sehr enge Kreisbögen mit großem Einschlusswinkel vorkommen und sehr weite Bögen mit kleinem Winkel. Durch die feste Winkelauflösung sieht das dann ungleichmäßig aus.

Code:
;; Globale Variablen:
;; AT:CURVE->POLY-ACCURACY Genauigkeit der Auflösung bei Splines usw:
(setq AT:CURVE->POLY-ACCURACY 1.0)
;; AT:ARC-ACCURACY Winkel-Auflösung von Kreisen und Kreisbögen
(setq AT:ARC-ACCURACY 10.0)


(defun c:at-curve->poly (/ en)
(setvar "cmdecho" 0)
(if (setq en (car (entsel)))
(if (member (cdr (assoc 0 (entget en))) '( "LINE" "POLYLINE" "LWPOLYLINE" "ARC" "CIRCLE" "ELLIPSE" "SPLINE"))
  (at-curve->poly en)
(alert "Fehler: für AT-CURVE->POLY nur zulässig:\n\nLINE, POLYLINE, LWPOLYLINE, ARC, CIRCLE, ELLIPSE, SPLINE")
)
)
(prin1)
)


(defun at-curve->poly (en / el lst)
  (if (setq el (entget en))
    (if (setq lst (at-curve->lpt en))
      (progn
        (command "._pline")
        (mapcar '(lambda (pt) (command pt)) lst)
        (if (and (assoc 70 el) (= 1 (logand 1 (cdr (assoc 70 el)))))
          (command "_cl")
          (command "")
        )
      )
      (alert "Fehler: keine Punktliste für gewähltes Objekt gefunden!")
    )
  )
)


(defun at-curve->lpt (en / ACCURACY el closedflag lastent len vertexnumber stparam endparam
                        diffparam startpt endpt result
                    )

  (cond
    ((= "LWPOLYLINE" (cdr (assoc 0 (entget en))))
    (or AT:ARC-ACCURACY (setq AT:ARC-ACCURACY 10.0))
    (setq result (at-poly->segmentpts en))
    )
    ;;
    (T
      (or AT:CURVE->POLY-ACCURACY (setq AT:CURVE->POLY-ACCURACY 0.1))
(setq ACCURACY AT:CURVE->POLY-ACCURACY)
      (if (= 'ENAME (type en))
        (progn
          (setq el (entget en)
                en (vlax-ename->vla-object en)
          )
        )
        (progn
          (setq el (entget (vlax-vla-object->ename en)))
        )
      )
      (if (and (assoc 70 el) (= 1 (logand 1 (cdr (assoc 70 el)))))
        (setq closedflag T)
      )
      (setq lastent (entlast))
      (if (vlax-property-available-p en 'Length)
        (setq len (vlax-get-property en 'Length))
        (progn
          (setq len (vlax-curve-getDistAtPoint en (vlax-curve-getEndPoint en)))
          ;; Ellipsenbögen liefern vlax-curve-getDistAtParam = 0 aus:
          (if (= 0.0 len)
            (setq len (vlax-curve-getDistAtParam en 1.0))
          )
        )
      )
      (setq vertexnumber (fix (/ len ACCURACY)))
      (if (= 0 vertexnumber)
        (setq vertexnumber 1)
      )
      (setq stparam (vlax-curve-getstartparam en)
            endparam (vlax-curve-getendparam en)
            diffparam (/ (- endparam stparam) (float vertexnumber))
            startpt (trans (vlax-curve-getStartPoint en) 0 1)
            endpt (trans (vlax-curve-getEndPoint en) 0 1)
      )
      (at-deactivate-osmode)
      ;; (command "._pline" startpt)
      (setq result (list startpt))
      (while (< (+ stparam diffparam) endparam)
        (setq stparam (+ stparam diffparam))
        (setq startpt (vlax-curve-getPointAtParam en stparam))
        ;; (command (trans startpt 0 1))
        (setq result (append result (list startpt)))
      )
      (if (/= 1 closedflag)
        ;; (command "_cl")
        (setq result (append result (list endpt)))
        ;; (command endpt "")
      )
      (at-restore-osmode)
    )
  )
  ;; (setvar "osmode" HVP:OLDOSMODE)
  result
)

(defun at-poly->segmentpts (en / bliste ptliste)
  (if (and (not AT:ARC-ACCURACY)
          (not (setq AT:ARC-ACCURACY (at-getvar "AT:ARC-ACCURACY")))
      )
    (if (not AT:ARC-ACCURACY)
      (setq AT:ARC-ACCURACY 10.0)
    )
  )
  (setq bliste (at-get-pl-bulgevertices en))
  (setq ptliste
        (apply
          'append
          (mapcar (function (lambda (part / data)
                              (cond
                                ((= 0 (cdr (cadr part)))
                                (list (cdr (car part)))
                                )
                                ((< (cdr (cadr part)) 0)
                                    (setq data (at-pl-bulge->arcdata
                                                (cdr (car part))
                                                (cdr (cadr part))
                                                (cdr (caddr part))
                                              )
                                    )
                                  (at-arcdata->linesegments
                                    (nth 0 data)
                                    (nth 1 data)
                                    (nth 2 data)
                                    (nth 3 data)
                                    AT:ARC-ACCURACY
                                  )

                                )
                                ((< 0 (cdr (cadr part)))
                                    (setq data (at-pl-bulge->arcdata
                                                (cdr (car part))
                                                (cdr (cadr part))
                                                (cdr (caddr part))
                                              )
                                    )
                                  (reverse (at-arcdata->linesegments
                                              (nth 0 data)
                                              (nth 1 data)
                                              (nth 2 data)
                                              (nth 3 data)
                                              AT:ARC-ACCURACY
                                            )
                                  )
                                )
                              )
                            )
                  )
                  bliste
          )
        )
  )
  (setq ptliste
        (reverse
          (cons (vlax-curve-getEndPoint (vlax-ename->vla-object en))
                (reverse ptliste)
          )
        )
  )
)

(defun at-arcdata->linesegments (center radius startangle endangle precision /
                                        ea sa arcangle diffangle parts sp ep np result
                                )
  (setq sa startangle ea endangle)
  (while (< ea sa)
    (setq ea (+ (* 2.0 PI) ea))
  )
  (setq arcangle (- ea sa))
  (setq parts (fix (read (rtos (+ 0.5 (/ (* arcangle precision) (* 2.0 PI))) 2 0))))
  (setq diffangle (/ arcangle (float parts)))
  (setq sp (rot2r (pp+ center (list radius 0.0)) center startangle))
  (setq ep (rot2r (pp+ center (list radius 0.0)) center endangle))
  (setq result (list sp) np sp)
  (repeat parts
    (setq np (rot2r np center diffangle))
    (setq result (cons np result))
  )
  result
)

(defun at-pl-bulge->arcdata (sp bulge ep / lastent cotbce x1 x2 y1 y2 temp cen rad sa ea)
  (setq lastent (entlast))
  (setq x1 (car sp) x2 (car ep))
  (setq y1 (cadr sp) y2 (cadr ep))
  (setq cotbce (/ (- (/ 1.0 bulge) bulge) 2.0))

  ; Compute center point and radius

  (setq cen (list (/ (+ x1 x2 (- (* (- y2 y1) cotbce))) 2.0)
                  (/ (+ y1 y2 (* (- x2 x1) cotbce)) 2.0)
            )
  )
  (setq rad (distance cen sp))

  ; Compute start and end angles

  (setq sa (atan (- y1 (cadr cen)) (- x1 (car cen))))
  (setq ea (atan (- y2 (cadr cen)) (- x2 (car cen))))
  (if (< sa 0.0)    ; Eliminate negative angles
    (setq sa (+ sa (* 2.0 pi)))
  )
  (if (< ea 0.0)
    (setq ea (+ ea (* 2.0 pi)))
  )
  (if (< bulge 0.0)  ; Swap angles if clockwise
    (progn
      (setq temp sa)
      (setq sa ea)
      (setq ea temp)
    )
  )
  (list cen rad sa ea)
)

(defun rot2r (p Ursprung Winkel / UrsprungN pN p0 x0 y0 z0 cosW sinW x1 y1 p1 result)
  (setq UrsprungN (xyof Ursprung)
        pN (3dpoint p)
        p0 (pp- pN UrsprungN)
        x0 (nth 0 p0)
        y0 (nth 1 p0)
        z0 (nth 2 p0)
        cosW (cos Winkel)
        sinW (sin Winkel)
        x1 (- (* cosW x0) (* sinW y0))
        y1 (+ (* sinW x0) (* cosW y0))
        p1 (list x1 y1 z0)
        result (pp+ p1 UrsprungN)
  )
)
(defun xyof (p)
  (list (car p) (cadr p) 0.0)
)
(defun 3dpoint (p)
  (if (= (length p) 2)
    (list (car p) (cadr p) 0.0)
    p
  )
)

(defun pp+ (p1 p2 /)
  (setq p1 (3dpoint p1)
        p2 (3dpoint p2)
  )
  (list (+ (car p1) (car p2))
        (+ (cadr p1) (cadr p2))
        (+ (caddr p1) (caddr p2))
  )
)

(defun pp- (p1 p2 /)
  (setq p1 (3dpoint p1)
        p2 (3dpoint p2)
  )
  (list (- (car p1) (car p2))
        (- (cadr p1) (cadr p2))
        (- (caddr p1) (caddr p2))
  )
)

(defun at-get-pl-bulgevertices (pl / en el result dxf result2)
  (setq el (entget pl))
  (cond
    ((= "LWPOLYLINE" (cdr (assoc 0 el)))
      (foreach dxf el
        (if (or (= 10 (car dxf))
                (= 42 (car dxf))
            )
          (setq result (cons dxf result))
        )
      )
      (if (= 1 (cdr (assoc 70 el)))  ; geschlossen
        (setq result (cons (car (reverse result)) result))
      )
      (setq result (reverse result))
    )
    ((= "POLYLINE" (cdr (assoc 0 el)))
        (setq en pl)
      (while (= "VERTEX" (cdr (assoc 0 (setq el (entget (setq en (entnext en)))))))
        (setq result (cons (assoc 10 el) result))
        (setq result (cons (assoc 42 el) result))
      )
      (if (= 1 (cdr (assoc 70 el)))  ; geschlossen
        (setq result (cons (car (reverse result)) result))
      )
      (setq result (reverse result))
    )
  )
  (while (< 2 (length result))
    (setq result2 (cons (list (car result) (cadr result) (caddr result)) result2))
    (setq result (cddr result))
  )
  (reverse result2)
)

(defun at-deactivate-osmode ()
  (if (not AT:OLDOSMODE)
    (setq AT:OLDOSMODE (getvar "osmode"))
  )
  (if (not (or (= 0 AT:OLDOSMODE)
              (< 16384 AT:OLDOSMODE)
          )
      )
    (setvar "osmode" (+ 16384 AT:OLDOSMODE))
  )
)

(defun at-restore-osmode ()
  (if AT:OLDOSMODE
    (setvar "osmode" AT:OLDOSMODE)
  )
)


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