| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Polylinienstützpunkt einfügen (5169 mal gelesen)
|
Proxy Ehrenmitglied Stateless-DHCP v6-Paketfragmentierer
Beiträge: 1629 Registriert: 13.11.2003 Tastaturen, Mäuse, Pladden, ..., AutoCADs 200X, SWX 2kX
|
erstellt am: 18. Mrz. 2004 17:25 <-- editieren / zitieren --> Unities abgeben:
Hab da mal aus dem Forrum advert.lsp, Marc Scherer hat da bereits ein paar Modifikationen vorgenommen, getestet und habe dass kleine Problem, dass die Linien geteilt werden am neuen Punkt. Wollte fragen ob das bei euch auch so ist und ob dieser Fehler wegprogrammierbar wäre ? Code:
;;; ADVERT.LSP Add a Vertex (c)1995, Steve Houghton ;;;revised 3/23/95 to ensure new vertex is at crosshairs ;;;thanks to Patrick Wheatley ;;;Inserts a vertex in a polyline. If a line is selected, it offers to convert ;;;it to a polyline and then insert the vertex. ;;;Will report: At least one break point must be on polyline. if the end of ;;;a polyline is chosen;;; Modifiziert und übersetzt für den ZVO ;;; am 30.05.2002 by Marc Scherer ;;;*************************************************************************** (defun C:ADVERT (/ OB OC OO OH POLYLINE POLYNAME PICKPOINT POLYDXF ENTTYPE LASTENT NEWVERT OLDERR ANSWER ) (princ "\nKontrollpunkt in Polylinie einfügen und neu positionieren..." ) ;_ end princ (defun MC_ERR (MSG) (princ (strcat "\nFehler, Acad meldet: \"" MSG "\" als Ursache!") ) ;_ end princ (setvar "OSMODE" OO) (setvar "BLIPMODE" OB) (setvar "HIGHLIGHT" OH) (setvar "CMDECHO" OC) (setq *ERROR* OLDERR MC_ERR NIL OLDERR NIL ) ;_ end setq (princ) ) ;_ end defun ;_ *set all env variables, ;_ *osmode to avoid conflicts with the osnap ;_ *blipmode to make her pretty (setq OO (getvar "OSMODE") OB (getvar "BLIPMODE") OH (getvar "HIGHLIGHT") OC (getvar "CMDECHO") OLDERR *ERROR* *ERROR* MC_ERR ) ;_ end setq ;_ *vertext insert routine (setvar "OSMODE" 0) (setvar "BLIPMODE" 0) (setvar "HIGHLIGHT" 0) (setvar "CMDECHO" 0) (while (setq POLYLINE (entsel "\nPolylinie anklicken wo ein Kontrollpunkt erzeugt werden soll: (R.klick=Ende)" ) ;_ end entsel ) ;_ end setq (setq POLYNAME (car POLYLINE) PICKPOINT (osnap (cadr POLYLINE) "_nea") POLYDXF (entget POLYNAME) ENTTYPE (cdr (assoc 0 POLYDXF)) ) ;_ end setq (if (wcmatch ENTTYPE "*POLYLINE") (INSERTVERT) (if (= ENTTYPE "LINE") (progn (initget "Ja Nein") (setq ANSWER (getkword (strcat "\n>>>>>>>>>>>>>>>>>> Linie gewählt! <<<<<<<<<<<<<<<<<<<<<<<<<<<<" "\nSoll diese Linie zur Polylinie gemacht werden? [Ja/Nein] <Ja> " ) ;_ end strcat ) ;_ end getkword ) ;_ end setq (if (not ANSWER) (setq ANSWER "Ja") ) ;_ end if (cond ((= ANSWER "Nein") (princ "\nLinie nicht in Polylinie konvertiert!") ) (t ;_ *turn current line into a polyline (command "_.pedit" POLYNAME "_y" "") (INSERTVERT) ) ) ;_ end cond ) ;_ progn (princ "\nDas gewählte Objekt war keine Polyline oder Linie." ) ;_ end princ ) ;_ if ) ;_ if ) ;_ while (setvar "OSMODE" OO) (setvar "BLIPMODE" OB) (setvar "HIGHLIGHT" OH) (setvar "CMDECHO" OC) (setq *ERROR* OLDERR) (princ) ) ;_ end advert.lsp (defun INSERTVERT () ;_ *ensure that last entity is not a compound entity ;_ *by creating a simple temporary entity as the last entity in the ;_ *database this way we can be sure that the next two entities ;_ *will be the two new polylines created by breaking the current ;_ *polyline (entmake (list '(0 . "POINT") (cons 10 (getvar "VSMIN")))) (setq LASTENT (entlast)) ;_ *breaks polyline at pickpoint (command "_.break" POLYNAME PICKPOINT PICKPOINT)
;_ *(entnext lastent) will be the next polyline created after lastent ;_ *(entlast) will be the other polyline created ;_ *so now join the two and we have a polyline with the new vertex ;_ *inserted (command "_.PEDIT" (entnext LASTENT) "_join" (entlast) "" "_exit" ) ;_ end command ;_ *get rid of temporary point (entdel LASTENT) (princ "\nBitte den neuen Kontrollpunkt positionieren: ") (setq NEWVERT (osnap PICKPOINT "_int,_near")) (command "_.STRETCH" "_C" NEWVERT NEWVERT "" PICKPOINT PAUSE) ;_ end command ;_ end command ;_ end COMMAND ) ;_ end defun (princ)
------------------ "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 |
Bernd P Ehrenmitglied V.I.P. h.c. cook-general
Beiträge: 3358 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: 19. Mrz. 2004 07:46 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
|
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2490 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 19. Mrz. 2004 09:32 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
|
Proxy Ehrenmitglied Stateless-DHCP v6-Paketfragmentierer
Beiträge: 1629 Registriert: 13.11.2003 Tastaturen, Mäuse, Pladden, ..., AutoCADs 200X, SWX 2kX
|
erstellt am: 19. Mrz. 2004 13:44 <-- editieren / zitieren --> Unities abgeben:
Bögen sind eigentlich sehr sehr sehr selten da. Kannst du bitte die Routine posten oder via PM schicken ? ------------------ "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 |
vevi61 Mitglied techn. Zeichner
Beiträge: 59 Registriert: 08.10.2003
|
erstellt am: 20. Mrz. 2004 09:22 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
@marc.scherer wäre sehr gespannt auf deine Problemlösung. ------- Gruß Eva Zitat: Original erstellt von marc.scherer: Hi, habt's Ihr Bögen in Euren Plines? Wenn nicht, habe ich 'ne funktionierende Routine zum Einfügen und löschen von Kontrollpunkten...
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Helmut Schepers Mitglied
Beiträge: 35 Registriert: 01.11.2001 AutoCad 2000, AutoCAd 2002, Windows XP-pro Treppenbau-Software
|
erstellt am: 21. Mrz. 2004 10:35 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
Hallo Proxy, ich habe das Programm einmal abgeändert, sodaß es auch mit LWPOLYLINE's zurechtkommt. Mit den alten POLYLINE's funktionierte es vorher schon. Ich hoffe es hilft dir weiter. Gruß Helmut ;;;Inserts a vertex in a polyline. If a line is selected, it offers to convert ;;;it to a polyline and then insert the vertex. ;;;Will report: At least one break point must be on polyline. if the end of ;;;a polyline is chosen ;;; Modifiziert und übersetzt für den ZVO ;;; am 30.05.2002 by Marc Scherer ;;;*************************************************************************** (defun C:ADVERT (/ OB OC OO OH POLYLINE POLYNAME PICKPOINT POLYDXF ENTTYPE LASTENT NEWVERT OLDERR ANSWER ) (princ "\nKontrollpunkt in Polylinie einfügen und neu positionieren..." ) ;_ end princ (defun MC_ERR (MSG) (princ (strcat "\nFehler, Acad meldet: \"" MSG "\" als Ursache!") ) ;_ end princ (setvar "OSMODE" OO) (setvar "BLIPMODE" OB) (setvar "HIGHLIGHT" OH) (setvar "CMDECHO" OC) (setq *ERROR* OLDERR MC_ERR NIL OLDERR NIL ) ;_ end setq (princ) ) ;_ end defun ;_ *set all env variables, ;_ *osmode to avoid conflicts with the osnap ;_ *blipmode to make her pretty (setq OO (getvar "OSMODE") OB (getvar "BLIPMODE") OH (getvar "HIGHLIGHT") OC (getvar "CMDECHO") OLDERR *ERROR* *ERROR* MC_ERR ) ;_ end setq ;_ *vertext insert routine (setvar "OSMODE" 0) (setvar "BLIPMODE" 0) (setvar "HIGHLIGHT" 0) (setvar "CMDECHO" 0) (while (setq POLYLINE (entsel "\nPolylinie anklicken wo ein Kontrollpunkt erzeugt werden soll: (R.klick=Ende)" ) ;_ end entsel ) ;_ end setq (setq POLYNAME (car POLYLINE) PICKPOINT (osnap (cadr POLYLINE) "_nea") POLYDXF (entget POLYNAME) ENTTYPE (cdr (assoc 0 POLYDXF)) ) ;_ end setq (if (wcmatch ENTTYPE "*POLYLINE") (INSERTVERT) (if (= ENTTYPE "LINE") (progn (initget "Ja Nein") (setq ANSWER (getkword (strcat "\n>>>>>>>>>>>>>>>>>> Linie gewählt! <<<<<<<<<<<<<<<<<<<<<<<<<<<<" "\nSoll diese Linie zur Polylinie gemacht werden? [Ja/Nein] <Ja> " ) ;_ end strcat ) ;_ end getkword ) ;_ end setq (if (not ANSWER) (setq ANSWER "Ja") ) ;_ end if (cond ((= ANSWER "Nein") (princ "\nLinie nicht in Polylinie konvertiert!") ) (t ;_ *turn current line into a polyline (command "_.pedit" POLYNAME "_y" "") (INSERTVERT) ) ) ;_ end cond ) ;_ progn (princ "\nDas gewählte Objekt war keine Polyline oder Linie." ) ;_ end princ ) ;_ if ) ;_ if ) ;_ while (setvar "OSMODE" OO) (setvar "BLIPMODE" OB) (setvar "HIGHLIGHT" OH) (setvar "CMDECHO" OC) (setq *ERROR* OLDERR) (princ) ) ;_ end advert.lsp (defun INSERTVERT ()
;_ *ensure that last entity is not a compound entity ;_ *by creating a simple temporary entity as the last entity in the ;_ *database this way we can be sure that the next two entities ;_ *will be the two new polylines created by breaking the current ;_ *polyline (entmake (list '(0 . "POINT") (cons 10 (getvar "VSMIN")))) (setq LASTENT (entlast)) ;_ *breaks polyline at pickpoint (command "_.break" POLYNAME PICKPOINT PICKPOINT) ;_ *(entnext lastent) will be the next polyline created after lastent ;_ *(entlast) will be the other polyline created ;_ *so now join the two and we have a polyline with the new vertex ;_ *inserted (cond ((equal ENTTYPE "POLYLINE") (command "_.PEDIT"(entnext LASTENT)"_join"(entlast)"""_exit") ;_ end command ;_ *get rid of temporary point (entdel LASTENT) ) ((equal ENTTYPE "LWPOLYLINE") (command "_.PEDIT" POLYNAME "_join"(entlast)"""_exit") ;_ end command ;_ *get rid of temporary point (entdel LASTENT) ) );cond (princ "\nBitte den neuen Kontrollpunkt positionieren: ") (setq NEWVERT (osnap PICKPOINT "_int,_near")) (command "_.STRETCH" "_C" NEWVERT NEWVERT "" PICKPOINT PAUSE) ;_ end command ;_ end command ;_ end COMMAND ) ;_ end defun (princ)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2490 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 22. Mrz. 2004 12:08 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
|
Proxy Ehrenmitglied Stateless-DHCP v6-Paketfragmentierer
Beiträge: 1629 Registriert: 13.11.2003 Tastaturen, Mäuse, Pladden, ..., AutoCADs 200X, SWX 2kX
|
erstellt am: 22. Mrz. 2004 12:52 <-- editieren / zitieren --> Unities abgeben:
Schönen Urlaub und 10 Untis für die abgeänderte Version. ------------------ "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 |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2490 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 29. Mrz. 2004 08:31 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
|
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2490 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 01. Apr. 2004 09:39 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
|
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1143 Registriert: 20.12.2002
|
erstellt am: 01. Apr. 2004 09:55 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
hallo marc wollte es testen kommt folgende Meldung Befehl: advert ; Fehler: Es ist ein Fehler innerhalb der *error*-Funktion aufgetreten.Einstellung für AutoCAD-Variable zurückgewiesen: "osmode" nil
------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2490 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 01. Apr. 2004 10:17 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
|
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1143 Registriert: 20.12.2002
|
erstellt am: 01. Apr. 2004 10:56 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
|
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2490 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 01. Apr. 2004 11:19 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
|
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1143 Registriert: 20.12.2002
|
erstellt am: 01. Apr. 2004 11:32 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
|
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1143 Registriert: 20.12.2002 Autocad 2021/64B Win10 WORKSTATION Intel(R) CPU E5-1620 3.60GHz 32 GB Ram 64 Bit-Betriebssystem HP Designjet T7200 Grafik NVIDIA Quadro P4000 ZWCAD2021
|
erstellt am: 01. Apr. 2004 11:41 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
|
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2490 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 01. Apr. 2004 12:07 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
|
Dober Heinz Mitglied Technischer Zeichner
Beiträge: 1143 Registriert: 20.12.2002
|
erstellt am: 01. Apr. 2004 12:26 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
|
bs328s Mitglied
Beiträge: 19 Registriert: 15.10.2004
|
erstellt am: 16. Okt. 2004 11:21 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
|
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2490 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 16. Okt. 2004 12:25 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
Hi, ja... das Problem mit den Bögen... CADmium und ich haben auf der CAT.Pro beschlossen das mal in einem Gemeinschaftsprojekt einzubauen. Also, da kommt noch mal was. Aber wann genau weiß ich noch nicht. Stay tuned :-) ------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 16. Okt. 2004 17:19 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
Ich möchte zum Einfügen von Stützpunkten mal einen etwas anderen Vorschlag machen: Der Befehl KNICKEN fügt interaktiv Stützpunkte in eine Linie oder LWPolylinie ein (für alte Polylinien ist er nicht implementiert). Beim Anwenden auf eine Linie entstehen 2 Linien, aber keine Polylinie. Beim Anwenden auf eine LWPolylinie wird ein neuer Stützpunkt eingefügt. Das funktioniert auch bei Bogensegmenten prima, aber nicht alles, was funktioniert, macht Sinn! Die Anwendung auf Bögen ist einfach ziemlich sinnlos. Wie immer ohne Errorhandling (wo der Handler eingebaut werden muss, ist kommentiert). Zum Ausprobieren sollte der Ofang abgeschaltet und nur von Fall zu Fall benutzt werden. Vielleicht hat ja jemand Lust, den Teil für die HeavyWeight-PLs noch zu ergänzen und ein richtiges Tool draus zu machen. Richtig getestet ist das Ganze übrigens auch nicht. Der Code ist reichlich lang, da ich vollständig darauf verzichtet habe, irgendwelche allgemeinen Bibliotheksfunktionen zu verwenden. Gruß, Axel Strube-Zettler Code:
(defun c:knicken( / selected ent edata pp xordraw get-pt line lwpolyline addvtx lwgetvtcs getdist lwgetsegno) (defun xordraw(p1 p2 p3 / ) (grdraw p1 p3 -1) (grdraw p2 p3 -1) ) (defun get-pt(p1 p2 / p pp) (setq pp(grread'T 1)) (xordraw p1 p2(cadr pp)) (while(= 5(car(setq p(grread 'T 1)))) (xordraw p1 p2(cadr pp)) (xordraw p1 p2(cadr p)) (setq pp p) ) (xordraw p1 p2(cadr pp)) (if(= 3(car p))p) ) (defun line( / p3 p10 p11) (if(setq p3(cadr(get-pt(setq p10(cdr(assoc 10 edata)))(setq p11(cdr(assoc 11 edata)))))) (progn (entmake(subst(cons 10 p3)(assoc 10 edata)edata)) (entmod(subst(cons 11 p3)(assoc 11 edata)edata)) ) ) ) (defun lwpolyline( / vtcs seg p3 p10 p11 n) (setq seg(lwgetsegno edata(setq vtcs(lwgetvtcs edata))pp)) (setq n 0) (repeat 4 (setq vtcs(append vtcs(list(nth n vtcs)))) (setq n(1+ n)) ) (setq p3 (cadr (get-pt (setq p10(cdr(nth(* 4 seg)vtcs))) (setq p11(cdr(nth(* 4(1+ seg))vtcs))) ) ) ) (addvtx edata vtcs p3 seg) ) (defun addvtx(edata vtcs p10 nr / result) (while(/=(caar edata)10) (setq result(cons(car edata)result)edata(cdr edata)) ) (repeat(* 4(1+ seg)) (setq result(cons(car edata)result)) (setq edata(cdr edata)) ) (setq result (append(reverse result) (list (cons 10 p10) (nth(+ 1(* 4(1+ seg)))vtcs) (nth(+ 2(* 4(1+ seg)))vtcs) (nth(+ 3(* 4(1+ seg)))vtcs) ) ) ) (setq edata(append result edata)) (setq edata (subst (cons 90(1+(cdr(assoc 90 edata)))) (assoc 90 edata) edata ) ) (entmod edata) ) (defun lwgetvtcs(edata / ) (vl-remove-if-not (function(lambda(v / )(member(car v)'(10 40 41 42)))) edata ) ) (defun getdist(ent pt / ) (vlax-curve-getDistAtPoint(vlax-ename->vla-object ent)pt) ) (defun lwgetsegno(edata vtcs pp / result count dist) (setq count -1) (setq dist(getdist ent pp)) (while(not result) (if(or(null vtcs)(>(getdist ent(cdar vtcs))dist)) (setq result count) (setq count(1+ count)vtcs(cddddr vtcs)) ) ) result ) ;; Hauptprogramm
;(StartErrorHandler ...) (setq selected(entsel)) (setq ent(car selected)) (setq edata(entget ent)) (setq pp(vlax-curve-getClosestPointTo ent(cadr selected))) (if(member(cdr(assoc 0 edata))'("LINE""LWPOLYLINE")) ((eval(read(cdr(assoc 0 edata))))) ) ;(EndErrorHandler ...) (princ) )
------------------ (defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze [Diese Nachricht wurde von mapcar am 16. Okt. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2490 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 21. Jan. 2005 14:12 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
Hi Ho Axel (mapcar), aufgrund einer Anfrage in einem anderen Forum habe ich noch mal Deinen Abschluß-Code probiert. Du verwendest 'ne geschützte (weil interne) Funktion "getdist". Ich hab' das mal ausgetauscht... Hier also noch mal mapcars Code, jedoch OHNE Überschreibung einer Funktion: Code:
(defun c:knicken( / SEG SELECTED) (defun xordraw(p1 p2 p3 / ) (grdraw p1 p3 -1) (grdraw p2 p3 -1) ) (defun get-pt(p1 p2 / p pp) (setq pp(grread'T 1)) (xordraw p1 p2(cadr pp)) (while(= 5(car(setq p(grread 'T 1)))) (xordraw p1 p2(cadr pp)) (xordraw p1 p2(cadr p)) (setq pp p) ) (xordraw p1 p2(cadr pp)) (if(= 3(car p))p) ) (defun line( / p3 p10 p11) (if(setq p3(cadr(get-pt(setq p10(cdr(assoc 10 edata)))(setq p11(cdr(assoc 11 edata)))))) (progn (entmake(subst(cons 10 p3)(assoc 10 edata)edata)) (entmod(subst(cons 11 p3)(assoc 11 edata)edata)) ) ) ) (defun lwpolyline( / vtcs seg p3 p10 p11 n) (setq seg(lwgetsegno edata(setq vtcs(lwgetvtcs edata))pp)) (setq n 0) (repeat 4 (setq vtcs(append vtcs(list(nth n vtcs)))) (setq n(1+ n)) ) (setq p3 (cadr (get-pt (setq p10(cdr(nth(* 4 seg)vtcs))) (setq p11(cdr(nth(* 4(1+ seg))vtcs))) ) ) ) (addvtx edata vtcs p3 seg) ) (defun addvtx(edata vtcs p10 nr / result) (while(/=(caar edata)10) (setq result(cons(car edata)result)edata(cdr edata)) ) (repeat(* 4(1+ seg)) (setq result(cons(car edata)result)) (setq edata(cdr edata)) ) (setq result (append(reverse result) (list (cons 10 p10) (nth(+ 1(* 4(1+ seg)))vtcs) (nth(+ 2(* 4(1+ seg)))vtcs) (nth(+ 3(* 4(1+ seg)))vtcs) ) ) ) (setq edata(append result edata)) (setq edata (subst (cons 90(1+(cdr(assoc 90 edata)))) (assoc 90 edata) edata ) ) (entmod edata) ) (defun lwgetvtcs(edata / ) (vl-remove-if-not (function(lambda(v / )(member(car v)'(10 40 41 42)))) edata ) ) (defun getdistance (ent pt / ) (vlax-curve-getDistAtPoint(vlax-ename->vla-object ent)pt) ) (defun lwgetsegno(edata vtcs pp / result count dist) (setq count -1) (setq dist(getdistance ent pp)) (while(not result) (if(or(null vtcs)(>(getdistance ent(cdar vtcs))dist)) (setq result count) (setq count(1+ count)vtcs(cddddr vtcs)) ) ) result ) ;; Hauptprogramm
;(StartErrorHandler ...) (setq selected(entsel)) (setq ent(car selected)) (setq edata(entget ent)) (setq pp(vlax-curve-getClosestPointTo ent(cadr selected))) (if(member(cdr(assoc 0 edata))'("LINE""LWPOLYLINE")) ((eval(read(cdr(assoc 0 edata))))) ) ;(EndErrorHandler ...) (princ) )
... ------------------ Ciao, Marc Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 05. Aug. 2011 10:40 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
|
Cadzia Ehrenmitglied V.I.P. h.c. CAD/Grafik-Dienstleister
Beiträge: 2912 Registriert: 02.07.2004 AutoCAD 2019 + MAP AccuRender nXt, Bricscad V18 SketchUp2015 pro,
|
erstellt am: 05. Aug. 2011 11:13 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 05. Aug. 2011 11:24 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
|
s.wickel Mitglied Bauingenieur Wasserwirtschaft
Beiträge: 422 Registriert: 17.12.2001 Bricscad V7 - V11
|
erstellt am: 13. Jan. 2021 16:32 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist! Für alle die diese Routine noch benutzen (wie ich). Ich habe nach vielen Jahren herausgefunden, warum sie bei LWPolylines mit Erhebung nicht funktioniert. In der Subroutine "lwgetsegno" muss die Zeile Code: (if(or(null vtcs)(>(getdistance ent(cdar vtcs))dist))
so lauten: Code: if(or(null vertcs)(>(getdistance ent(append (cdar vertcs) (list (nth 2 pp))))dist))
Dadurch bekommt der Punkt Code: (cdar vertcs)
eine Höhe. Sonst ergibt Code: getdistance
immer NIL. Mann, da hab' ich über Jahre immer wieder dran überlegt. War aber nie wichtig genug. Viele Grüße, Stefan
[Diese Nachricht wurde von s.wickel am 13. Jan. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
patex Mitglied Zeichner
Beiträge: 28 Registriert: 07.08.2017 ADT 2006 BricsCAD 2022
|
erstellt am: 24. Jun. 2022 10:05 <-- editieren / zitieren --> Unities abgeben: Nur für Proxy
|