| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Linien in 3dPolys umwandeln (1897 mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 17. Okt. 2013 12:17 <-- editieren / zitieren --> Unities abgeben:
Hi! Bei meinem code werden die Linien zwar eingesammelt und daraus eine 3dPoly erzeugt. Nur habe ich ein Problem, wenn die Start-und Enpunkte gegenläufig zueinander verlaufen. Wie könnte ich das geschickterweise anstellen. Eine Idee? Code: (defun c:lineTo3dPolyline (/ RemDup ent entList lista *error*) (defun *error* (msg) (foreach N entList (if (/= N nil) (entmake N) ) ) ) (defun RemDup (lst / z) (while (setq x (car lst)) (setq z (cons x z) lst (vl-remove x (cdr lst))) (mapcar '(lambda (y) (if (equal (list (nth 0 x) (nth 5 x)) (list (nth 0 y) (nth 5 y))) (setq lst (vl-remove y lst)))) lst)) (setq nlst (reverse z)) ) (while (if (or (setq ent (entsel "\nSelect Line" )) (if (= "" (getstring "\n weitere Linien einsammeln? <N>/J")) (progn (setq lista (RemDup lista)) (setq mspace (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))) (vlax-invoke mspace 'Add3dPoly (apply 'append (reverse lista))) ) ) ) (if (= "LINE" (cdr (assoc 0 (entget (car ent))))) (progn (setq lista (append lista (list (cdr (assoc 10 (entget (car ent))))) (list (cdr (assoc 11 (entget (car ent))))))) (setq entList (cons (entget (car ent)) entList)) (entdel (car ent)) ) ) ) ) (princ) ) (defun c:l3 () (c:lineTo3dPolyline))
------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 17. Okt. 2013 12:36 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 17. Okt. 2013 13:15 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Ich denke das der Code noch nicht soweit ist wie du denkst (das kann aber nur der Künstler prüfen dem bekannt ist was genau geschehen soll) (= "" (getstring "\n weitere Linien einsammeln? <N>/J")) Das ist hoffentlich nur zum testen so, denn N,Nein wird so ignoriert und zudem J,Ja ebenfalls, zudem wäre es immer chic den AutoDesk Syntax zu nutzen (wenn die sich schon selbst nicht immer daran halten) Im fertigen Code sollte das dann so aussehen: (getstring "\nblahbla [Ja/Nein] <N>:") oder besser gleich mit initget und getkword, aber darum ging es ja in deiner Frage auch nicht. Du löscht zunächst die Linien und erstellst sie danach wieder, ist das extra ? zum testen ? Wenn man ein Objekt /= LINE klickt springt das Prog raus, ohne die Arbeit zu erledigen oder fort zu fahren. Zum Problem mit den Richtungen: Da mußt du wissen was du vorfindest und was daraus werden soll. Aneinanderhängende Linien: Siehe CADmium, das könnte dann auch das Programm selbst machen. Wilde Linien: Du könntest immer näher an dem Linienende klicken an dem es weitergehen soll und dann die Enfernung zu gc10 und gc11 prüfen und je nach dem zuerst die eine oder die andere Koordinate speicheren. Und noch vieles mehr, aber dafür mußte man eben wissen was dir bekannt ist.. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD [Diese Nachricht wurde von cadffm am 17. Okt. 2013 editiert.] [Diese Nachricht wurde von cadffm am 17. Okt. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 17. Okt. 2013 15:19 <-- editieren / zitieren --> Unities abgeben:
Soweit bin ich gekommen, dass ich die Koordinatenpaare auslese - nur die Sortiermethode erschliesst sich mir nicht ganz: da ja GC 10 bekanntlich auf dem End- oder Startpunkt in Laufrichtung der Polylinie liegen kann (selbiges mit GC 11), also wie dann sortieren Den Vorschlag, immer auf das Linieende zu klicken finde ich zwar gut, aber unpraktisch. Wenn also bspw. ein Linienzug so gezeichnet ist L1-2,L3-2,L3-4 und ich aber haben möchte L1-2,L2-3,L3-4, wie könnte ich das machen? ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 17. Okt. 2013 16:15 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 17. Okt. 2013 16:17 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 17. Okt. 2013 18:50 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
"die Linien sich berühren" aha, danke für die Info soll das Programm automatisch nach der 1. Linie weitermachen oder wählst du jede Linie einzeln wie im Beispielcode ? Du mußt irgendwie bestimmen wo es anfängt, angenommen der Anfang ist geschafft: (P1 P2 P3 ...) ((0 0 0)(0 5 0)(2 7 0)) Die nächste Linien: automatik: Sucht ein Linienobjekt im kleinen Umkreis von (2 7 0), der jeweils andere gc ist deine neue Koordinate. ((0 0 0)(0 5 0)(2 7 0)(10 11 0)) Die nächste Linien: automatik: Sucht ein Linienobjekt im kleinen Umkreis von (10 11 0), der jeweils andere gc ist deine neue Koordinate. ((0 0 0)(0 5 0)(2 7 0)(10 11 0)(3 10 0)) usw. Wenn du händisch neue Objekte wählst gehst du genauso vor: letzter Punkt = (3 10 0) neues Objekt: Hat gc10 oder gc11 die Koordinate (3 10 0) ? Wenn ja ist der andere gc dein neuer Punkt in der Liste.. ((0 0 0)(0 5 0)(2 7 0)(10 11 0)(3 10 0)(20 5 0)) Noch Fragen
------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9732 Registriert: 01.12.2003 One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11
|
erstellt am: 17. Okt. 2013 19:03 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 18. Okt. 2013 13:02 <-- editieren / zitieren --> Unities abgeben:
Hi Sebastian, dein Vorschlag klingt sehr interessant für mich und könnte funktionieren. Mein 1. Versuch ist es, mit einfachen 2D Linien mal zu probieren, ob die Linien nacheinander gefangen werden. Ich stehe jetzt nur vor dem Problem, bei dem Suchfenster welches ich immer am Endpunkt der einzelnen Linie aufziehe, möchte ich gern abfragen, ob da Endpunkt von L1 mit L2 fortlaufend übereinstimmt, um dann die Endkoordinate in die Liste zu schreiben. Mein Auswahlsatz soll immer die folgende Linie auslesen, das läuft nur nicht so. Vllt stell ich mich auch zu kompliziert an. Ich bräuchte nur mal ein kurzes feedback, ob ich auf dem richtigen Weg bin Code: (defun c:foo ( / z ent ; gewälte Linie elist1 ;Elist von jeweils vorhergender Linie elist2 ;Elist von jeweils folgender Linie liste ;Koordinatenliste aller Linienpunkte ) (while (= z nil) (if (setq ent (entsel "\nWähle eine Linie" )) (if (= "LINE" (cdr (assoc 0 (setq elist1 (entget (car ent)))))) (progn (redraw (cdr (assoc -1 elist1)) 3) (setq liste (append liste (cdr (assoc 10 elist1)))) (setq z 0) (while (if (and (setq ss (ssget "C" (mapcar '(lambda (x) (- x 1)) (list (car (cdr (assoc 11 elist1)))(cadr (cdr (assoc 11 elist1))))) (mapcar '(lambda (x) (+ x 1)) (list (car (cdr (assoc 11 elist1)))(cadr (cdr (assoc 11 elist1))))))) (= "LINE" (cdr (assoc 0 (setq elist2 (entget (ssname ss 0)))))) ) (if (equal (cdr (assoc 11 elist1)) (cdr (assoc 10 elist2)) 0.001) (progn (setq elist1 elist2) (setq liste (append liste (cdr (assoc 11 elist2)))) (redraw (cdr (assoc -1 elist2)) 3) ) ) ) ) ) (princ "\n keine Anschluss Linie gefunden! ") ) (princ "\n kein Linie gewählt! ") ) ) )
------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 18. Okt. 2013 15:13 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Als Erstes: Es wäre nett wenn du deinen Code international gestaltest damit auch andere den Code 1:1 ausführen können, danke. Zum Code: "grob die Richtung" könnte man bejahen, aber im Grunde ist noch keine einzige Zeile fertig. Für den ersten Punkt nimmst du automatisch den gc10, das würde ich noch einmal überdenken, aber das ist ja jetzt nicht Thema. Entweder der Endpunkt an dem man näher ist beim anklicken, oder das Programm soll sowieso in beide Richtungen suchen ? Aber dann müßte das Programm ja noch etwas weiter aufgebohrt werden. Du suchst mit ssget neue Objekte (bitte nutze int.Schreibweise in deinem Code, also "_C") 1. Kannst du die Suche direkt auf Linien einschränken (0 . "LINE") 2. Solltest du dafür Sorgen das nicht deine letzte Linie wieder gefangen wird 3. du gehst pauschal davon aus das etwas gefangen wird 4. offensichtlich gehst du nicht auf den Fall ein das es auch mehrere Treffer geben kann. 5. woher ist dir denn bekannt das du den gc11 der neuen Linie benötigst ? usw.
Also ich programmiere ja nicht(s), sowas machen nur meine Kollegen, aber evtl. sollte ich auch mal anfangen
------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 19. Okt. 2013 18:20 <-- editieren / zitieren --> Unities abgeben:
Mein Gedanke ist folgender, die Erstgewählte Linie ist massgebend für die Verknüpfungsrichtung. Demnach liegt die folgende Linie am GC11 und soll verknüpft werden. Jetzt macht die Funktion nach der Aussage Code: (/= (cdr (assoc 11 elist1)) (cdr (assoc 10 elist2)))
aber gegenteiliges, sie verknüpft, wenn die Koord. unterschiedlich sind. Der Fall, dass die Koord. gleich sind tritt nicht auf, weshalb ich gegenläufige Linienpaare nicht finden kann. Weiss einer, das zu lösen? Code: (defun c:foo ( / z ent ; gewälte Linie ss elist1 ;Elist von jeweils vorhergender Linie elist2 ;Elist von jeweils folgender Linie liste ;Koordinatenliste aller Linienpunkte anz ; Anzahl Linien verknüpft EntPairs; alle verknüpften Linien lista; Koordinaten der 3dPoly ) (while (and (= z nil) (setq anz 1)) (if (setq ent (entsel "\nWähle eine Linie" )) (if (= "LINE" (cdr (assoc 0 (setq elist1 (entget (car ent)))))) (progn (redraw (cdr (assoc -1 elist1)) 3) (setq liste (append liste (list (cdr (assoc 10 elist1))))) (setq z 0) (while (/= z nil) (setq ss (ssget "_C" (mapcar '(lambda (x) (- x 1)) (list (car (cdr (assoc 11 elist1)))(cadr (cdr (assoc 11 elist1))))) (mapcar '(lambda (x) (+ x 1)) (list (car (cdr (assoc 11 elist1)))(cadr (cdr (assoc 11 elist1))))) '((0 . "LINE")) ) ) (repeat (setq i (sslength ss)) (if (setq elist2 (entget (ssname ss (setq i (1- i))))) (if (/= (cdr (assoc 11 elist1)) (cdr (assoc 10 elist2))) (progn (if (= 1 (sslength ss)) (setq z nil) ) (setq EntPairs (append EntPairs (list (cdr (assoc -1 elist1))) (list (cdr (assoc -1 elist2))))) (redraw (cdr (assoc -1 elist1)) 3) (setq elist1 elist2) ) ) ) ) ) ; Bereinigung von duplicates in Listen (if (setq EntPairs (apply '(lambda (lst / foo index ) (defun foo (x) (cond ((vl-position x index)) ((null (setq index (cons x index)))) ) ) (vl-remove-if 'foo lst) ) (list EntPairs) ) ) (progn (setq lista (list (cdr (assoc 10 (entget (car EntPairs)))))) (foreach N EntPairs (setq lista (append lista (list (cdr (assoc 11 (entget N)))))) ) (setq mspace (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))) (vlax-invoke mspace 'Add3dPoly (apply 'append (reverse lista))) (foreach N EntPairs (entdel N) ) ) ) (princ (strcat "\n "(itoa (length EntPairs)) " Linien verbunden")) ) (princ "\n keine Anschluss Linie gefunden! ") ) (princ "\n kein Linie gewählt! ") ) ) (princ) )
------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 19. Okt. 2013 21:29 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Den Code schaue ich mir nicht mehr an, aber: Zitat: Der Fall, dass die Koord. gleich sind tritt nicht auf, weshalb ich gegenläufige Linienpaare nicht finden kann. Weiss einer, das zu lösen?
Wenn das eine Ende nicht gleich ist, dann ist das andere Ende vielleicht gleich ?
Code: (setq nextpoint (cond ((equal lastpoint (cdr(assoc 10 elist)) 0.0000001) (cdr(assoc 11 elist)) ) ((equal lastpoint (cdr(assoc 11 elist)) 0.0000001) (cdr(assoc 10 elist)) ) ) )
------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 22. Okt. 2013 13:43 <-- editieren / zitieren --> Unities abgeben:
Sorry meld mich erst jetzt, weil ich irgendwie noch im Wald stehe und kein Licht sehe. Das Problem ist, ich erhalte zwar den NEXTPOINT, wenn die Linien in gleicher Richtung verlaufen, aber nicht, wenn sie gegeneinander laufen. Das wolltest du sicherlich ausdrücken, krieg es aber nicht zum Laufen. Einmal steckt mir der code in der while schleife fest, weil immer die gleiche Linie gewählt wird. Zu anderen bricht der code einfach vor der gegenläufigen Linie ab. Ich glaube, ich glaube ich verbringe die Zeit noch ein wenig mit testen ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 22. Okt. 2013 14:01 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Einmal steckt mir der code in der while schleife fest, weil immer die gleiche Linie gewählt wird. Da habe ich ja vorab bereits drauf hingewiesen, damit du da nicht lang herumdoktern mußt, also schließe das letzt Objekt als neues aus - egal wie.Zu anderen bricht der code einfach vor der gegenläufigen Linie ab. Es gibt zwei Möglichkeiten - Start(10) und Endpunkt(11), der Punkt der deiner letzten Koordinate entspricht ist es nicht, sondern der andere. Ich glaube, ich glaube ich verbringe die Zeit noch ein wenig mit testen Vergiß das testen, du mußt denken - also Bleistift und Papier statt Monitor ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD [Diese Nachricht wurde von cadffm am 22. Okt. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 22. Okt. 2013 15:26 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 22. Okt. 2013 15:51 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
Meldin Mitglied
Beiträge: 381 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 24. Okt. 2013 16:56 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo, ich schmeiß mal einfach einen Begriff hier in die Runde und das ohne mich hier groß eingelesen zu haben. "IntersectWith" ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 24. Okt. 2013 21:29 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 02. Nov. 2013 12:45 <-- editieren / zitieren --> Unities abgeben:
Hi! Sehr guter Einwurf Henning, das macht die Sache unkomplizierter. Da es bei (command "_JOIN" ...) keine Rolle spielt, wo Anfangs- und Endpunkt der Linien liegt. Hat jemand schon den Versuch gemacht hat, gleich mehrere Linien auf einmal zu verbinden ? Ich beiss mir hier grad die Zähne aus Ich habe eine Liste aller eingesammelten Linien Code: (setq EntPairs (<Entity name: 7e251478> <Entity name: 7e251480> <Entity name: 7e251488> <Entity name: 7e251490>:nozwinker
und will jetzt eins nach dem anderen verbinden, mache ich hier etwas falsch ?
Code: (mapcar (function (lambda (j) (setq enm j) (command "_join" enm j "") enm ) ) EntPairs )
------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 .
|
erstellt am: 02. Nov. 2013 13:08 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
(defun c:PLJOIN(/ AWS OLDCMD PLSSET) (vl-load-com) (if(and(or(setq AWS (ssget "_I" '((0 . "LINE,LWPOLYLINE,POLYLINE,ARC")))) (setq AWS (ssget '((0 . "LINE,LWPOLYLINE,POLYLINE,ARC")))) (prompt "\nKeine Linien,Bögen, oder Polylinien gewählt") ) ) (progn (setq OLDCMD (getvar "CMDECHO")) (setvar "CMDECHO" 0) (vla-endundomark (vla-get-activedocument(vlax-get-acad-object))) (vla-startundomark(vla-get-activedocument(vlax-get-acad-object))) (setq INDEX -1) (repeat(sslength AWS) (if (not PLSSET) (if(and(setq OBJ(ssname AWS (setq INDEX(1+ INDEX)))) (wcmatch (strcase(cdr(assoc 0(entget OBJ)))) "*POLYLINE") ) (setq PLSSET OBJ) ) ) ) (if(and(not(vl-catch-all-error-p (vl-catch-all-apply 'vl-cmdf (cond ((>(sslength AWS)1)(list "_pedit" "_m" AWS "" "_j" 0.5 "")) ('T(list "_pedit" AWS "")) ) ) ) ) (setq AWS(if PLSSET (ssadd PLSSET)(ssadd(entlast)))) ) (progn (sssetfirst AWS AWS) (prompt "\nPolylinie erzeugt") ) (prompt "\nFehler bei Polylinienerzeugung") ) (vla-endundomark (vla-get-activedocument(vlax-get-acad-object))) (setvar "CMDECHO" OLDCMD) ) ) (princ) ) ist aber für 2D ... ------------------ Also ich finde Unities gut ... und andere sicher auch --------------------------------------- - 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 |
Meldin Mitglied
Beiträge: 381 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 02. Nov. 2013 13:15 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
Meldin Mitglied
Beiträge: 381 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 02. Nov. 2013 13:22 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hallo Dirk, warum alle nacheinander wenn du ein selctionset erstellst kannst du es doch an join übergeben. Und fertig. Der Fehler bei mapcar ist der dass das vorherige Element nicht mehr kennt da es ein neues Objekt wird. ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 02. Nov. 2013 15:08 <-- editieren / zitieren --> Unities abgeben:
Danke Wolfgang! Selectionset ist klar. übergabe ss an join ist unklar? Ich bin so vorgegangen, falsch oder richtig?
Code: (if (setq ss (ssadd)) (foreach n Entpairs (ssadd n ss) ) ) (if (/= ss nil) (command "_join" ss "") (princ "\n keine Linien gefunden") )
------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 02. Nov. 2013 15:38 <-- editieren / zitieren --> Unities abgeben:
|
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 03. Nov. 2013 14:32 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: Hat jemand schon den Versuch gemacht hat, gleich mehrere Linien auf einmal zu verbinden?
Da Du ja 2013 verwendest, laß das Lisp einfach weg, und nimm den normalen Befehl "_Join". Damit kannst Du auch auf einem Schlag soviele 3D-Polylinien aus Linien erzeugen, wie Du willst. [Nachtrag] Wenn Du _Join unbedingt aus Lisp heraus aufrufen, und dabei die "neueste Version" des Autocadbefehls verwenden willst, mußt Du vor den Befehl (initcommandversion) aufrufen. Also in etwa so: Code: ... (setq ss (ssget '((0 . "LINE")))) (initcommandversion) (command "_join" ss "")
[/Nachtrag] Grüsse, Henning ------------------ Henning Jesse VoxelManufaktur Computer-Dienstleistungen für Architekten und Ingenieure http://www.voxelman.de [Diese Nachricht wurde von wronzky am 03. Nov. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1832 Registriert: 28.04.2009
|
erstellt am: 04. Nov. 2013 11:51 <-- editieren / zitieren --> Unities abgeben:
Hi Henning! (initcommandversion) Du zauberst Funktionen her, die bei mir zwar laufen, aber mir völlig unbekannt sind Besten Dank! ------------------ Gruss Dirk http://cadplayerlounge.blogspot.se Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer
Beiträge: 9732 Registriert: 01.12.2003 One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11
|
erstellt am: 04. Nov. 2013 12:25 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|