Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Linien in 3dPolys umwandeln

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
Autor Thema:  Linien in 3dPolys umwandeln (1897 mal gelesen)
cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 17. Okt. 2013 12:17    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

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




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

.

erstellt am: 17. Okt. 2013 12:36    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 cadplayer 10 Unities + Antwort hilfreich

1.immer einen Auswahlsatz um einen Endpunkt erstellen und damit weitermachen
oder
2. Linien einsammeln ... Koordinatenpaare aus Start und Endpunkt bilden und dann sortieren ....

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

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: 21533
Registriert: 03.06.2002

Alles

erstellt am: 17. Okt. 2013 13: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 cadplayer 10 Unities + Antwort hilfreich

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


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 17. Okt. 2013 15:19    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

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




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

.

erstellt am: 17. Okt. 2013 16: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 cadplayer 10 Unities + Antwort hilfreich

die Startlinie hat ein Koordinatenpaar aus End und Startpunkt, das ist meine Startliste .... alle anderen Koordinatenpaare durchsuchen, ob ein Punkt des Paares dem Start oder Endpunkt entspricht .... wenn ja ... die 2. Koordinate zur Startliste hinzu... entweder vorne oder hinten .. usw ... das alles rekursiv .. und du betrachtest bloß immer 1 und letzten Punkt der Startliste .... die gefundene Linie natürlich aus der Suchliste löschen ....

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 17. Okt. 2013 16:17    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

Verstehen wir uns gerade falsch, die einzelnen Linien sind aneinander gereiht

------------------
Gruss Dirk

http://cadplayerlounge.blogspot.se

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: 21533
Registriert: 03.06.2002

Alles

erstellt am: 17. Okt. 2013 18: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 cadplayer 10 Unities + Antwort hilfreich

"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



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 17. Okt. 2013 19:03    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 cadplayer 10 Unities + Antwort hilfreich

Hier ist etwas Fertiges:
http://www.black-cad.homepage.t-online.de/pedit.htm

------------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 18. Okt. 2013 13:02    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

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
良い精神




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: 21533
Registriert: 03.06.2002

Alles

erstellt am: 18. Okt. 2013 15: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 cadplayer 10 Unities + Antwort hilfreich

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


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 19. Okt. 2013 18: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

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
良い精神




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: 21533
Registriert: 03.06.2002

Alles

erstellt am: 19. Okt. 2013 21:29    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 cadplayer 10 Unities + Antwort hilfreich

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


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 22. Okt. 2013 13:43    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

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
良い精神




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: 21533
Registriert: 03.06.2002

Alles

erstellt am: 22. Okt. 2013 14:01    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 cadplayer 10 Unities + Antwort hilfreich

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


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 22. Okt. 2013 15:26    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

Netter Hinweis - testen schliesst im regelfall denken mit ein

------------------
Gruss Dirk

http://cadplayerlounge.blogspot.se

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: 21533
Registriert: 03.06.2002

Alles

erstellt am: 22. Okt. 2013 15:51    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 cadplayer 10 Unities + Antwort hilfreich

Sorry, war nur ein Versuch zuu helfen das "lasse den Monitor weg"

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

Meldin
Mitglied



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

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 24. Okt. 2013 16:56    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 cadplayer 10 Unities + Antwort hilfreich

Hallo,
ich schmeiß mal einfach einen Begriff hier in die Runde und das ohne mich hier groß eingelesen zu haben.   "IntersectW​ith"

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



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

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 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 cadplayer 10 Unities + Antwort hilfreich

Hallo Dirk,
warum eigentlich das Rad neu erfinden? Probier doch mal den Befehl VERBINDEN/_JOIN aus.

Grüsse, Henning

------------------
Henning Jesse
VoxelManufaktur
Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

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

cadplayer
Ehrenmitglied
CADniker


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 02. Nov. 2013 12:45    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


TEST.dwg.txt

 
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




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

.

erstellt am: 02. Nov. 2013 13: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 cadplayer 10 Unities + Antwort hilfreich

(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



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

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 02. Nov. 2013 13: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 cadplayer 10 Unities + Antwort hilfreich

@CADmium mal probiert mit der DWG bei mir klappt es nicht.

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

Meldin
Mitglied



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

Beiträge: 381
Registriert: 15.07.2011

ACA2020
Windows10

erstellt am: 02. Nov. 2013 13:22    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 cadplayer 10 Unities + Antwort hilfreich

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


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 02. Nov. 2013 15: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

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


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

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

Als Hinweis
gebe ich in die Textzeile ein:

join <enter>

!ss <enter>

dann funktioniert es!

Ich habe hier zwar etwas gefunden, aber zu einer Lösung ist man hier nicht gekommen
http://www.theswamp.org/index.php?topic=15295.0;all

------------------
Gruss Dirk

http://cadplayerlounge.blogspot.se

[Diese Nachricht wurde von cadplayer am 02. Nov. 2013 editiert.]

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

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



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

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 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 cadplayer 10 Unities + Antwort hilfreich

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


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

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 04. Nov. 2013 11:51    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

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



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

Beiträge: 9732
Registriert: 01.12.2003

One AutoCAD 2.5 - 2023, Civil 3D, Win10/win11

erstellt am: 04. Nov. 2013 12:25    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 cadplayer 10 Unities + Antwort hilfreich

Ja, man muss immer am Ball bleiben - vor allen Dingen die Neuerungen der letzten Jahre dazulernen, aber auch nicht bewährte Oldies aus den Augen verlieren.
initcommandversion

------------------
Mit freundlichem Gruß

Udo Hübner
www.CAD-Huebner.de

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