| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: Bögen in POLYLINIEN -> X Geraden (14228 mal gelesen)
|
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: .. ACAD14 und 2005; MAP4; GeoCAD; PARIS; ( Vermessung )
|
erstellt am: 16. Mai. 2004 21:18 <-- editieren / zitieren --> Unities abgeben:
Hallo alle zusammen, ich brauch mal eure Unterstützung. Mit PEDIT ist es doch möglich, Polylinien mit Bögen, in Polylinien ohne Kurven zu konvertieren. Nun wäre es aber für mich interessant, die Bögen in einer Polylinie nicht nur durch eine Gerade, sondern durch eine belibige Anzahl (frei definierbar) von Geraden/Sehnen zu ersetzen. Grund, ich will demnächst meine PL aus dwg in eine dgn exportieren, und diese in MicroStation hochladen, und sie in ein GIS (PARIS) übernehmen, welches aber keine Bögen in einem Linienzug versteht. Wäre schön wenn Ihr mir da helfen könntet. sicher gibts da was mit vlax.... wovon ich keine Ahnung habe. Servus, Mario ------------------ Servus, Mario Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proxy Ehrenmitglied Stateless-DHCP v6-Paketfragmentierer
Beiträge: 1629 Registriert: 13.11.2003 Tastaturen, Mäuse, Pladden, ..., AutoCADs 200X, SWX 2kX
|
erstellt am: 16. Mai. 2004 21:30 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
Gesucht und gefunden. Code:
(defun c:kbla (/ elem selem pts) (vl-load-com) (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)) ) ) ) (princ"\nCADlon - Lisp over night!") (princ"\nhttp://www.CADlon.de") (princ"\nAufteilung von Kreisen/Bögen in LWPolyliniensegmente...Start mit: kbla")
------------------ "Lisp?!?! Why the Hell did you pick the most arcane, obscure, and hopelessly-rooted-in-the-computer-science-department language in the world for an AutoCAD programming language?" Read the whole story: The Autodesk File ca. 890 Seiten | 7500 KB PDF Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 16. Mai. 2004 21:42 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
|
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: .. ACAD14 und 2005; MAP4; GeoCAD; PARIS; ( Vermessung )
|
erstellt am: 17. Mai. 2004 17:41 <-- editieren / zitieren --> Unities abgeben:
erstmal vielen Dank euch Beiden, ja, sowas ähnliches suche ich. Jedoch teilt das lsp die komplette PL in eine Anzahl von Geraden auf, es sollen aber lediglich die Bogensegmente innerhalb einer PL durch eine Anzahl von Geraden ersetzt werden. Das Tool soll also die PL entlang rennen, und wenn es merkt das ein Bogen kommt, so soll dieser durch eine Anzahl von Geraden ersetzt werden (Kontrollpunkte innerhalb des Bogensegmentes hinzufügen). Nun weiterrennen bis zum nächsten Bogen. Gibts eigentlich eine dt. vlax Doku? Servus, Mario ------------------ Servus, Mario [Diese Nachricht wurde von m-troeger am 17. Mai. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
scj Mitglied
Beiträge: 555 Registriert: 09.08.2001
|
erstellt am: 18. Mai. 2004 17:55 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
Sieh Dir mal mein PEDIT3D an (www.black-cad.de). Wenn da eine kleine Modifikation dran vorgenommen wird (_3DPOLY durch _PLINE ersetzen), müsste es eigentlich schon funktionieren. Beste Grüße aus der Rhön Jochen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: .. ACAD14 und 2005; MAP4; GeoCAD; PARIS; ( Vermessung )
|
erstellt am: 18. Mai. 2004 20:07 <-- editieren / zitieren --> Unities abgeben:
Hi, die Tools können alle etwas von dem wie ich es benötige. Das LSP von Proxy (Autor: Brischke) zeichnet zwar eine gewünschte Anzahl von Geraden, jedoch funktioniert es nicht bei eine PL mit mehreren Segmenten. Siehe Bild "links" Das Tool pedit3d ersetzt einen Bogen wiederum nur durch eine Gerade. Also pedit/kurve LÖschen macht ja das selbe. Siehe Bild "mitte" @Jochen Wie editiert man eine *.fas ??? Ziel ist, das alle Bögen innerhalb einer PL durch eine definierbare Anzahl von Geraden/Sehnen (z.B. 3) ersetzt werden soll. Siehe Bild "rechts" Wär euch echt dankbar wenn Ihr da was hinbekommt. Ich muß sonnst tausende PL in PARIS/MicroStation nachzeichnen. ------------------ Servus, Mario [Diese Nachricht wurde von m-troeger am 18. Mai. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
scj Mitglied
Beiträge: 555 Registriert: 09.08.2001
|
erstellt am: 18. Mai. 2004 21:43 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
|
gmk Mitglied Dipl.-Ing.(FH) Vermessung
Beiträge: 669 Registriert: 23.10.2002 Autocad 2004, WS CadCompass, Normica V2000, WinXP Prof., AMD Athlon 64 X2, 2GB, NVIDIA GeForce 7600GS, HP1055CM
|
erstellt am: 18. Mai. 2004 21:54 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
hi mario! ich könnte dir ein lisp anbieten das bögen in abhängigkeit von der pfeilhöhe in linien aufteilt (bogen wird anschließend gelöscht). jetzt mit _pedit noch drüber und die pl aus linien wäre fertig. ich nehme aber mal schwer an du brauchst das für höhenlinien, dann ist mein vorschlag bestimmt nicht der angenehmste, aber es wäre ein anfang bis einer der hiesigen experten :-) was anderes anbietet. ciao georg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Theodor Schoenwald Ehrenmitglied
Beiträge: 1672 Registriert: 16.04.2002
|
erstellt am: 18. Mai. 2004 22:53 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
Hallo Mario, ich hätte einen ausgefallenen Vorschlag. Im HPGL-Format werden Bögen in kurze "Linien" zerlegt. - Als Plotter HP7475 einrichten, - in Datei Plotten, - mit "HPGLIN.LSP" diese Plotdatei einfügen. Wenn Du diesen Weg gehen willst und kein Programm findest das HPGL einlesen kann, melde Dich einfach. Gruß Theodor Schönwald Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 19. Mai. 2004 10:23 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
Mal zum testen : (vl-load-com) (defun DT:PL-ARG->LINES ( OBJEKT SEGMENTE ERSETZEN? / OBJEKTDATEN PKTANZ PKT1 PKT2 PKTLIST I1 I2) (if (and(=(type OBJEKT) 'ENAME) (member (cdr(assoc 0 (setq OBJEKTDATEN(entget OBJEKT)))) '("LWPOLYLINE" "POLYLINE")) ) (progn (setq OBJEKT(vlax-ename->vla-object OBJEKT)) (setq PKTANZ(/(length (vlax-safearray->list (vlax-variant-value (vlax-get-property OBJEKT 'coordinates) ) ) ) (cond ((=(cdr(assoc 0 OBJEKTDATEN)) "LWPOLYLINE") 2) ((=(cdr(assoc 0 OBJEKTDATEN)) "POLYLINE") 3) ) ) ) (setq I1 0) (repeat PKTANZ (if(=(length(setq PKT1 (vlax-safearray->list (vlax-variant-value (vlax-get-property OBJEKT 'coordinate I1) ) ) ) ) 2 ) (setq PKT1 (append PKT1 '(0.0))) ) (setq PKTLIST (cons PKT1 PKTLIST)) (if(and(not(equal (vlax-invoke-method OBJEKT 'GetBulge I1) 0.0 0.000001 ) ) (/= I1 (- PKTANZ 1)) ) (progn (if(=(length(setq PKT2 (vlax-safearray->list (vlax-variant-value (vlax-get-property OBJEKT 'coordinate (1+ I1)) ) ) ) ) 2 ) (setq PKT2 (append PKT2 '(0.0))) ) (setq DIST(/(-(vlax-curve-getDistAtPoint OBJEKT (vlax-curve-getclosestpointto OBJEKT PKT2)) (vlax-curve-getDistAtPoint OBJEKT (vlax-curve-getclosestpointto OBJEKT PKT1)) ) SEGMENTE ) ) (setq I2 0) (repeat (- SEGMENTE 1) (setq PKTLIST (cons (vlax-curve-getclosestpointto OBJEKT (vlax-curve-getPointAtDist OBJEKT (+(vlax-curve-getDistAtPoint OBJEKT (vlax-curve-getclosestpointto OBJEKT PKT1)) (* DIST (setq I2 (1+ I2))) ) ) ) PKTLIST ) ) ) (if ERSETZEN? (vlax-invoke-method OBJEKT 'SetBulge I1 0.0)) ) ) (setq I1 (1+ I1)) ) (setq PKTLIST(reverse PKTLIST)) (if(=(cdr(assoc 0 OBJEKTDATEN)) "LWPOLYLINE") (setq PKTLIST(mapcar '(lambda(x) (list (car x)(cadr x))) PKTLIST)) ) (if ERSETZEN? (progn (setq PKTLIST (apply 'append (reverse PKTLIST))) (vlax-put-property OBJEKT 'coordinates (vlax-safearray-fill (vlax-make-safearray vlax-vbdouble (cons 0 (- (length PKTLIST) 1)) ) PKTLIST ) ) ) (progn (command "_pline") (repeat (length PKTLIST) (command (car PKTLIST)) (setq PKTLIST(cdr PKTLIST)) ) (command "") ) ) ) ) ) (defun C:PL-ARG->LINES ( / OBJEKT SEGMENTE ERSETZEN? Mod) (if (and(setq OBJEKT (ssget "_:S" '((0 . "POLYLINE,LWPOLYLINE")))) (setq OBJEKT (ssname OBJEKT 0)) (setq SEGMENTE (getint "\nANZAHL SEGMENTE : ")) ) (progn (initget "J N") (if (not(setq MOD(getkword "\nPolylinie Ersetzen? [J]a/[N]ein:<J> "))) (setq MOD "J") ) (if (= MOD "J") (DT:PL-ARG->LINES OBJEKT SEGMENTE 'T) (DT:PL-ARG->LINES OBJEKT SEGMENTE nil) ) ) ) )
.. und zum verbessern ...... ( command ersetzen usw. ) ------------------ - Thomas - [Diese Nachricht wurde von CADmium am 19. Mai. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 19. Mai. 2004 12:48 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
Hallo, ich habe mal ein paar Zeilen zusammengeschrieben, die die Bogensegmente in LWPOLYLINEs in eine zu bestimmende Anzahl von Liniensegmente zerlegt. Schaut es euch an, testet und bei Fragen ... Code:
(defun c:lwboa (/ selem velem bptli nptli bsp bep abst anzbos dist tmp) (vl-load-com) (setq selem (ssget "_:S" '((0 . "LWPOLYLINE")))) (if selem (progn (setq selem (ssname selem 0) anzbos (getint "\nAnzahl der Segmente je Bogensegment:") velem (vlax-ename->vla-object selem) tmp (mapcar '(lambda (GRC) (mapcar 'cdr (vl-remove-if-not '(lambda (E) (= (car E) GRC) ) (entget selem) ) ) ) '(10 42) ) bptli (vl-remove-if '(lambda (E) (equal 0.0 (cadr E) 0.000001) ) (mapcar 'list (car tmp) (cadr tmp) ) ) ) (foreach BPT (if (= :vlax-true (vlax-get-property velem 'closed)) bptli (reverse(cdr(reverse bptli))) ) (setq nptli nil bsp (vlax-curve-getparamAtPoint velem (car BPT)) bep (1+ bsp) abst (/(- (vlax-curve-getDistAtParam velem bep) (setq dist(vlax-curve-getDistAtParam velem bsp)) ) anzbos ) ) (repeat (1- anzbos) (setq npt (vlax-curve-getPointAtDist velem (setq dist (+ dist abst))) nptli (cons npt nptli)) ) (vlax-invoke-method velem 'SetBulge bsp 0.0 ) (foreach PT (reverse nptli) (vla-AddVertex velem (setq bsp (1+ bsp)) (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble '(0 . 1)) (list (car PT)(cadr PT)) ) ) ) ) ) ) ) (princ"\n(defun - Lisp over night!") (princ"\nhttp://www.defun.de") (princ"\nAufteilung von Bögen in LWPolyliniensegmente...Start mit: lwboa")
Grüße Holger ------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Treffen Sie (defun auf dem Autodesk Anwendertreffen am 15.06. in Steyr/Österreich! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: .. ACAD14 und 2005; MAP4; GeoCAD; PARIS; ( Vermessung )
|
erstellt am: 19. Mai. 2004 17:37 <-- editieren / zitieren --> Unities abgeben:
Danke Euch allen, für diese vielen guten Tips und den den interessanten Codes. @CADmium Die Routine ist vom Prinzip richtig und erzeugt auch weitestgehend die gewünschte PL. Nur manchmal bastelt sie einen Bogen mit ein, woran das aber liegt hab ich noch nicht herausgefunden. Werde mich mal näher damit beschäftigen. @Brischke Dein Code erzeugt genau die gewünschte PL. Respekt. Wenn ich mir den Code ansehe , bin ich sprachlos. Da ist bestimmt Hexerei mit im Spiel. Vielen Dank! Ich würd euch ja glatt einen ausgeben, na dann gibts wenigsten U's Besten Dank nochmal
------------------ Servus, Mario Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4187 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 19. Mai. 2004 17:44 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
Zitat: Original erstellt von m-troeger: Da ist bestimmt Hexerei mit im Spiel. <schnipp> Ich würd euch ja glatt einen ausgeben, na dann gibts wenigsten U's
Hex Hex ;-) Aufgeschoben ist nicht aufgehoben. Vielleicht schaffst du es ja auf ein Adesk, oder CAD.de Anwendertreffen. Grüße Holger
------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Da weiß man, wann man's hat! Treffen Sie (defun auf dem Autodesk Anwendertreffen am 15.06. in Steyr/Österreich! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: .. ACAD14 und 2005; MAP4; GeoCAD; PARIS; ( Vermessung )
|
erstellt am: 19. Mai. 2004 17:48 <-- editieren / zitieren --> Unities abgeben:
|
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: .. ACAD14 und 2005; MAP4; GeoCAD; PARIS; ( Vermessung )
|
erstellt am: 19. Okt. 2004 19:21 <-- editieren / zitieren --> Unities abgeben:
|
m-troeger Mitglied gel. Bauzeichner; Vermessungszeichner, Vermesser im Außendienst, GIS-Erfassung in PARIS
Beiträge: 295 Registriert: .. ACAD14 und 2005; MAP4; GeoCAD; PARIS; ( Vermessung )
|
erstellt am: 21. Okt. 2004 22:41 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich schon wieder ich will ja nicht nerven, aber wie kann ich PL's mit Bögen filtern, die nach den obigen Progs übrig blieben? So kann man denen zB eine andere Farbe verpasen um sie kenntlich zu machen, und sie dann manuel bearbeiten.
------------------ Servus, Mario www.the-skier.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Artschie Mitglied
Beiträge: 33 Registriert: 19.02.2008 WinXP | AutoCAD LT 2008 | Adobe Acrobat 8.0
|
erstellt am: 01. Mai. 2008 10:54 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
schönen tag der arbeit erstmal... ...und da ich selbiges auch heute mache bin ich auf diesen beitrag hier gestossen! das hier gepostete lisp von brischke würde genau mein problem lösen! nur... bin ich absoluter lisp-anfänger. musste mich erstmal schlau machen, wie das ding überhaupt zum laufen bekommt. hat dann aber doch geklappt... hab einen bogen mit pe zur poly gemacht, lwboa ausgeführt, eben die poly gewählt, segmente eingegeben... ...nur am ende wirft mir acad "nil" aus und zerstückelt den polylinisierten bogen leider doch nicht. (arbeite derzeit schon mit acad 2009) mache ich da was falsch? wäre SEHR dankbar über ein skript das auch mit der aktuellsten version funktioniert! ...dann würde das meine planungsarbeiten viel leichter machen! edit: hab nun "kbla" probiert, funktioniert !!!!!!!!!
wäre aber sehr fein, wenn "lwboa" auch laufen würde. wenn ich das richtig verstanden hab,läuft das eine polylinie entlang und zerlegt jeden bogen der sich auf ihr befindet. würde meine arbeit wiederum beschleunigen. will standard-vorlagenblöcke erstellen! ginge ja auch mit kbla, aber ich finde lwboa irgendwie eleganter! ------------------ pure vernunft darf niemals siegen !!!
[Diese Nachricht wurde von Artschie am 01. Mai. 2008 editiert.] [Diese Nachricht wurde von Artschie am 01. Mai. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 03. Mai. 2008 19:13 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
|
mazur-ch Mitglied
Beiträge: 74 Registriert: 31.10.2008 ACAD 2020, Win 10 64Bit
|
erstellt am: 25. Jun. 2019 17:27 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
Hallo zusammen Ich muss ebenfalls aus diverse Polylinien die Bögen eliminieren. Die App (lwboa) von Brischke scheint mir sehr sinnvoll zu sein. Jedoch bemerkte auch ich, dass jeweils ein Bogen (es ist immer der letzte) nicht in gerade Linien umgewandelt wird. Da ich leider nicht ganz so versiert in Lisp bin, die Frage: an welcher Stelle (vermutlich eine Schlaufe) wird die Schlaufe 1x zu wenig durchlaufen und wie kann ich dies anpassen? Weitere Frage: wenn ich die Anzahl Segmente fest programmieren möchte, was mach ich falsch, wenn ich:
Code: (setq anzbos 5)
Statt Code: anzbos (getint "\nAnzahl der Segmente je Bogensegment:")
verwende? Weiter möchte ich alle Polylinien in der Zeichnung durcharbeiten. Dafür müssten vorgängig alle Polylinien ausgewählt werden und dann einzeln verarbeitet werden. Kann ich bei der Stelle
Code: (setq selem (ssget "_:S" '((0 . "LWPOLYLINE"))))
"selem" jeweils die nächste Polylinie übergeben statt eine nächste von Hand auszuwählen? Somit wäre das Programm ab der Zeile 3 in weiterem Code eingebettet. Zitat: Original erstellt von Brischke: Hallo,ich habe mal ein paar Zeilen zusammengeschrieben, die die Bogensegmente in LWPOLYLINEs in eine zu bestimmende Anzahl von Liniensegmente zerlegt. Schaut es euch an, testet und bei Fragen ... <BLOCKQUOTE><font size="2" face="Courier New">Code:<HR> (defun c:lwboa (/ selem velem bptli nptli bsp bep abst anzbos dist tmp) (vl-load-com) (setq selem (ssget "_:S" '((0 . "LWPOLYLINE")))) (if selem (progn (setq selem (ssname selem 0) anzbos (getint "\nAnzahl der Segmente je Bogensegment:") velem (vlax-ename->vla-object selem) tmp (mapcar '(lambda (GRC) (mapcar 'cdr (vl-remove-if-not '(lambda (E) (= (car E) GRC) ) (entget selem) ) ) ) '(10 42) ) bptli (vl-remove-if '(lambda (E) (equal 0.0 (cadr E) 0.000001) ) (mapcar 'list (car tmp) (cadr tmp) ) ) ) (foreach BPT (if (= :vlax-true (vlax-get-property velem 'closed)) bptli (reverse(cdr(reverse bptli))) ) (setq nptli nil bsp (vlax-curve-getparamAtPoint velem (car BPT)) bep (1+ bsp) abst (/(- (vlax-curve-getDistAtParam velem bep) (setq dist(vlax-curve-getDistAtParam velem bsp)) ) anzbos ) ) (repeat (1- anzbos) (setq npt (vlax-curve-getPointAtDist velem (setq dist (+ dist abst))) nptli (cons npt nptli)) ) (vlax-invoke-method velem 'SetBulge bsp 0.0 ) (foreach PT (reverse nptli) (vla-AddVertex velem (setq bsp (1+ bsp)) (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble '(0 . 1)) (list (car PT)(cadr PT)) ) ) ) ) ) ) ) (princ"\n(defun - Lisp over night!") (princ"\nhttp://www.defun.de") (princ"\nAufteilung von Bögen in LWPolyliniensegmente...Start mit: lwboa") <HR></font></BLOCKQUOTE> Grüße Holger
------------------ ----------- Auch wenn ich noch so viel Bier trinke, Goethe war dichter... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mazur-ch Mitglied
Beiträge: 74 Registriert: 31.10.2008 ACAD 2020, Win 10 64Bit
|
erstellt am: 25. Jun. 2019 17:32 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
|
mazur-ch Mitglied
Beiträge: 74 Registriert: 31.10.2008 ACAD 2020, Win 10 64Bit
|
erstellt am: 25. Jun. 2019 17:34 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
|
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 02. Jul. 2019 15:43 <-- editieren / zitieren --> Unities abgeben: Nur für m-troeger
ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist!
Zitat: Original erstellt von m-troeger: Hallo alle zusammen,ich brauch mal eure Unterstützung. Mit PEDIT ist es doch möglich, Polylinien mit Bögen, in Polylinien ohne Kurven zu konvertieren. Nun wäre es aber für mich interessant, die Bögen in einer Polylinie nicht nur durch eine Gerade, sondern durch eine belibige Anzahl (frei definierbar) von Geraden/Sehnen zu ersetzen.
Hier ist was, mit dem kannst Du die meisten Entities einschließlich Ellipsen und Splines in Polylinien mit geraden Linienstückchen definierter Auflösung umwandeln: Code:
(defun curve->poly (en / ACCURACY el closedflag lastent len vertexnumber stparam endparam diffparam startpt endpt) (if (not AT:CURVE->POLY-ACCURACY) (setq AT:CURVE->POLY-ACCURACY 0.01) ) (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) (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) ) (deactivate-osmode) (command "._pline" startpt) (while (< (+ stparam diffparam) endparam) (setq stparam (+ stparam diffparam)) (setq startpt (vlax-curve-getPointAtParam en stparam)) (command (trans startpt 0 1)) ) (if (= 1 closedflag) (command "_cl") (command endpt "") ) (restore-osmode) (if (not (eq (entlast) lastent)) (entlast) ) )(defun c:curve->poly () (if (not AT:CURVE->POLY-ACCURACY) (setq AT:CURVE->POLY-ACCURACY 0.01) ) (prompt (strcat "\nCURVE->POLY Auflösung: " (vl-prin1-to-string AT:CURVE->POLY-ACCURACY))) (if (setq en (car (entsel))) (if (member (cdr (assoc 0 (entget en))) '("LINE" "POLYLINE" "LWPOLYLINE" "ARC" "CIRCLE" "ELLIPSE" "SPLINE")) (curve->poly en) (alert "Fehler: für AT-CURVE->POLY nur zulässig:\n\nLINE, POLYLINE, LWPOLYLINE, ARC, CIRCLE, ELLIPSE, SPLINE") ) ) (prin1) ) (defun 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 restore-osmode () (if AT:OLDOSMODE (setvar "osmode" AT:OLDOSMODE) ) )
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |