| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Ersatzteilwesen optimieren mit CIDEON Sparify, eine Pressemitteilung
|
Autor
|
Thema: Polylinien-Bögen in mehrere Polylinien-Linien umwandeln (4571 / mal gelesen)
|
BellaRosa Mitglied Werkstudentin
Beiträge: 10 Registriert: 17.05.2017 Autodesk AutoCAD 2016
|
erstellt am: 11. Aug. 2017 11:23 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich hoffe man kann mir helfen. Ich bearbeite CAD-Pläne, die in ein GIS-Programm geladen werden müssen. Das GIS-Programm kann keine Bögen erkennen und stellt es als gerade Linien dar. Ich bräuchte also eine Möglichkeit, Polylinien-Bögen in viele einzelne Segmente zu unterteilen um die Form zu behalten. Gefunden habe ich bereits diese Lösung: http://ww3.cad.de/foren/ubb/Forum145/HTML/000581.shtml Mein Problem: Ich habe absolut keine Ahnung von Codes und LISP und wie genau diese funktionieren. Außerdem sind in dem Topic zwei Lösungen geschrieben, welche davon ich jetzt brauche oder besser ist erschließt sich mir nicht... Außerdem: Funktioniert das auch noch genau so mit AutoCAD 2016 oder gibt es mittlerweile sogar eine integrierte Lösung? Es wäre sehr nett wenn mir einer von euch Experten bei der Sache weiterhelfen und mir eine exakte Schritt-für-Schritt Anleitung geben könnte, "for Dummies" sozusagen Vielen Dank! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jupa Ehrenmitglied V.I.P. h.c. Ruheständler
Beiträge: 6052 Registriert: 16.09.2004 Windows 10 64bit, ACAD Rel. 14 - ACAD 2023
|
erstellt am: 11. Aug. 2017 12:54 <-- editieren / zitieren --> Unities abgeben: Nur für BellaRosa
Hallo BellaRosa, In dem von Dir gefundenen und verlinkten Thread nimm den Code von Proxy (gleich in der ersten Antwort) und kopiere diesen in eine neue Textdatei. (Code markieren und mit Strg+C in die Zwischenablage kopieren. Notepad starten und neue Text-Datei anlegen. Inhalt der Zwischenablage mit Strg+V hineinkopieren). Die Datei abspeichern mit der Dateinamenserweiterung .lsp (z.B. b2pl.lsp). In AutoCAD mußt Du nun diese LISP-Datei laden. Eine Möglichkeit - Befehl appload starten und sich zur gespeicherten Date b2pl.lsp durchhangeln. Andere Möglichkeiten finden sich in der FAQ (suche ich jetzt nicht raus, solltest Du Dir aber mal zu Gemüte führen). Nun steht Dir in AutoCAD ein neuer Befehl kbla zur Verfügung. Diesen starten, den Aufforderungen in der Befehlszeile folgen und fertig. Funktioniert übrigens auch in ACAD 2016. Die anderen dort aufgeführten Varianten habe ich gar nicht erst getestet ... Jürgen
Anm: Der Bogen wird von dieser Routine nicht automatisch gelöscht - das müßtest Du also am Ende noch selbst tun. ------------------ Bildung kommt nicht vom Lesen, sondern vom Nachdenken über das Gelesene. (Carl Hilty) [Diese Nachricht wurde von jupa am 11. Aug. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BellaRosa Mitglied Werkstudentin
Beiträge: 10 Registriert: 17.05.2017 Autodesk AutoCAD 2016
|
erstellt am: 11. Aug. 2017 13:17 <-- editieren / zitieren --> Unities abgeben:
Vielen lieben Dank! Es klappt! Edit: ähm... doch nicht so ganz. meine Linie ist jetzt kürzer geworden, das soll natürlich nicht sein. Muss ich doch einen anderen code nehmen? [Diese Nachricht wurde von BellaRosa am 11. Aug. 2017 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kuschelfee Mitglied Bauzeichnerin
Beiträge: 221 Registriert: 07.05.2007 Windows 10 Pro AutoCAD 2024.1 Soficad 2024-1 Advance Steel 2023.1.1
|
erstellt am: 11. Aug. 2017 13:56 <-- editieren / zitieren --> Unities abgeben: Nur für BellaRosa
|
BellaRosa Mitglied Werkstudentin
Beiträge: 10 Registriert: 17.05.2017 Autodesk AutoCAD 2016
|
erstellt am: 11. Aug. 2017 14:23 <-- editieren / zitieren --> Unities abgeben:
also ich habe jetzt das hier verwendet, indem ich meine bestehende gespeicherte Datei damit ersetzt habe 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) )
AutoCAD gibt mir jetzt aber die Meldung raus, ich hätte keinen Bogen oder Kreis gewählt... ich wähle aber nach wie vor eine polylinie aus, die einen bogen darstellt. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 11. Aug. 2017 15:05 <-- editieren / zitieren --> Unities abgeben: Nur für BellaRosa
|
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2799 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2022 Bricscad V11-V23 pro Plateia, Canalis Visual Basic
|
erstellt am: 11. Aug. 2017 15:58 <-- editieren / zitieren --> Unities abgeben: Nur für BellaRosa
Zitat: Original erstellt von BellaRosa: Edit: ähm... doch nicht so ganz. meine Linie ist jetzt kürzer geworden, das soll natürlich nicht sein.
Was aber logisch ist da die Sekante immer kürzer ist als die Bogenlinie ... Um dies zu optimieren gibt es Programme die nicht von einer festen Anzahl von Bogenteilungen ausgehen sondern hierfür einen max. Sekantenabstand verwenden. Natürlich verkürzt sich auch hier die Gesamtlänge der Polylinie aber es wird ein Optimum zwischen Anzahl der neuen Segmente und erforderlicher Genauigkeit erzeugt. In der Vermessung verwende ich als Sekantenabstand i.A. 10 - 20 cm, für GIS-Anwendungen könnte man aber auch auf 0,5 bis 1,0 Meter gehen. Cadmium hatte mal so ein Programm (pl_convert.vlx), war als Testversion kostenfrei aber nur eine gewisse Zeit lauffähig. Grüße Klaus PS.: habe auch so ein Programm, dass 2D-Polylinien in 3D-Polylinien umwandelt. Allerdings eingebaut in ein größeres Projekt und in VBA programmiert. Sollte ich wirklich mal herausziehen und separat lauffähig machen ... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jupa Ehrenmitglied V.I.P. h.c. Ruheständler
Beiträge: 6052 Registriert: 16.09.2004 Windows 10 64bit, ACAD Rel. 14 - ACAD 2023
|
erstellt am: 12. Aug. 2017 08:22 <-- editieren / zitieren --> Unities abgeben: Nur für BellaRosa
Zitat: Original erstellt von KlaK:
Was aber logisch ist da die Sekante immer kürzer ist als die Bogenlinie ...
Ich befürchte, BellaRosa bezieht sich darauf, daß ein Segment fehlt (und deshalb "zu kurz"). Obwohl dieses Problem bereits in dem verlinkten Thread angesprochen wird, das hatte ich übersehen - sorry. Muß also doch eine andere Lösung her ... (Bin selbst aber bis nächste Woche nicht mehr online ). Jürgen
------------------ Bildung kommt nicht vom Lesen, sondern vom Nachdenken über das Gelesene. (Carl Hilty) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 12. Aug. 2017 18:13 <-- editieren / zitieren --> Unities abgeben: Nur für BellaRosa
|
BellaRosa Mitglied Werkstudentin
Beiträge: 10 Registriert: 17.05.2017 Autodesk AutoCAD 2016
|
erstellt am: 14. Aug. 2017 14:08 <-- editieren / zitieren --> Unities abgeben:
|
Bernd P Ehrenmitglied V.I.P. h.c. cook-general
Beiträge: 3424 Registriert: 07.06.2001 W10-64bit, AMD Ryzen 7 3700X,32GB RAM, Sapphire Pulse Radeon RX 570 8G G5, Canon TX-3000 MFP, Maus Cherry MW4500, Sub:Infrastructure Design Suite, Office 365
|
erstellt am: 11. Mai. 2021 09:37 <-- editieren / zitieren --> Unities abgeben: Nur für BellaRosa
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 11. Mai. 2021 09:54 <-- editieren / zitieren --> Unities abgeben: Nur für BellaRosa
Nein, elem bezieht sich dabei nicht mehr auf das gewählte Objekt, sondern auf die nachfolgend erzeugten Punkte. Schaue es dir mal so an: 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)) ) (setvar "PDMODE" 35) (setvar "pdsize" -5) (while (progn(getstring"Drücken Sie die EINGABETASTE, um fortzufahren: ")(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) )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd P Ehrenmitglied V.I.P. h.c. cook-general
Beiträge: 3424 Registriert: 07.06.2001 W10-64bit, AMD Ryzen 7 3700X,32GB RAM, Sapphire Pulse Radeon RX 570 8G G5, Canon TX-3000 MFP, Maus Cherry MW4500, Sub:Infrastructure Design Suite, Office 365
|
erstellt am: 11. Mai. 2021 10:13 <-- editieren / zitieren --> Unities abgeben: Nur für BellaRosa
|