;******************************************************************************************************** ;AutoLisp-Modul 3dpc - Verbindet 3DPolylinie mit Linie, LWPolylinie, Polylinie (2D / 3D) ;Autor: (C) S. Rosinus, 66015 Saarbrücken - Stand 07-2008 ;******************************************************************************************************** (defun c:_3dpc (/) (setvar "cmdecho" 0) (setq meliste (entget (car (entsel "\nMaster-3DPolylinie wählen: "))) mename (cdr (assoc -1 meliste)) metyp (cdr (assoc 0 meliste)) m3d (cdr (assoc 70 meliste)) os (getvar "osmode") ) (if (and (= metyp "POLYLINE") (= m3d 8)) (progn (princ " -> ok") (setq melay (cdr (assoc 8 meliste)) ;bisherige Eigenschaften des Masterobjekts meltyp (cdr (assoc 6 meliste)) mefar (cdr (assoc 62 meliste)) ) (setq veliste (entget (entnext mename)) vename (cdr (assoc -1 veliste)) mpkta (cdr (assoc 10 veliste)) veliste (entget (entnext vename)) vename (cdr (assoc -1 veliste)) mpkte (cdr (assoc 10 veliste)) veliste (entget (entnext vename)) vename (cdr (assoc -1 veliste)) vetyp (cdr (assoc 0 veliste)) mekoli (list mpkte mpkta) ) (while (= vetyp "VERTEX") ;weitere Scheitelpunkte vorhanden (setq vpkt (cdr (assoc 10 veliste)) mekoli (cons vpkt mekoli) veliste (entget (entnext vename)) vename (cdr (assoc -1 veliste)) vetyp (cdr (assoc 0 veliste)) ) ) (if (= meltyp nil) (setq meltyp "VONLAYER") ) (if (= mefar nil) (setq mefar 256) ) (setvar "osmode" 1) (initget 0) (setq manspkt (getpoint "\nAnschlusspunkt der Master-3DPolylinie wählen: ") ) (if (member manspkt mekoli) (progn (if (> (distance manspkt (car mekoli)) 0.0001) (setq mekoli (reverse mekoli)) ) (setq seliste (entget (car (entsel "\nanzuschliessendes Objekt wählen: "))) sename (cdr (assoc -1 seliste)) setyp (cdr (assoc 0 seliste)) s3d (cdr (assoc 70 seliste)) ) (cond ((= setyp "POLYLINE") (progn (setvar "osmode" 1) (setq sanspkt (getpoint "\nAnschlusspunkt an der Polylinie wählen: ") veliste (entget (entnext sename)) vename (cdr (assoc -1 veliste)) spkta (cdr (assoc 10 veliste)) veliste (entget (entnext vename)) vename (cdr (assoc -1 veliste)) spkte (cdr (assoc 10 veliste)) veliste (entget (entnext vename)) vename (cdr (assoc -1 veliste)) vetyp (cdr (assoc 0 veliste)) sekoli (list spkte spkta) ) (while (= vetyp "VERTEX") ;weitere Scheitelpunkte vorhanden (setq vpkt (cdr (assoc 10 veliste)) sekoli (cons vpkt sekoli) veliste (entget (entnext vename)) vename (cdr (assoc -1 veliste)) vetyp (cdr (assoc 0 veliste)) ) ) (if (> (distance sanspkt (car sekoli)) 0.0001) (setq sekoli (reverse sekoli)) ) (setq zae 0) (repeat (length sekoli) (setq mekoli (cons (nth zae sekoli) mekoli)) (setq zae (+ zae 1)) );repeat );progn );cond Polyline ((= setyp "LWPOLYLINE") (progn (setvar "osmode" 1) (setq sanspkt (getpoint "\nAnschlusspunkt an der LWPolylinie wählen: ")) (setq zae 0 sekoli nil) (repeat (length seliste) (if (= (car (nth zae seliste)) 10) (setq p3 (list (cadr (nth zae seliste)) (caddr (nth zae seliste)) 0.0) sekoli (cons p3 sekoli) ) );if (setq zae (+ zae 1)) );repeat (if (> (distance sanspkt (car sekoli)) 0.0001) (setq sekoli (reverse sekoli)) ) (setq zae 0) (repeat (length sekoli) (setq mekoli (cons (nth zae sekoli) mekoli)) (setq zae (+ zae 1)) );repeat );progn );cond LWPolyline ((= setyp "LINE") (progn (setvar "osmode" 1) (setq p1 (cdr (assoc 10 seliste)) p2 (cdr (assoc 11 seliste)) sanspkt (getpoint "\nAnschlusspunkt an der Linie wählen: ") ) (cond ((< (distance sanspkt p1) 0.0001) (setq mekoli (cons p1 mekoli) mekoli (cons p2 mekoli)) ) ((< (distance sanspkt p2) 0.0001) (setq mekoli (cons p2 mekoli) mekoli (cons p1 mekoli)) ) (T (alert "Anschlusspunkt ungültig!") ) );cond );progn );cond Line (T (alert (strcat "Es sind nur LINIE LWPOLYLINIE oder (3D)POLYLINIE zugelassen! Das gewähltes Objekt ist: " setyp)) ) );cond ;ab hier Zusammenbau der neuen Polylinie (entmake (list '(0 . "POLYLINE") '(66 . 1) '(70 . 8) (cons 8 melay) (cons 6 meltyp) (cons 62 mefar) )) (setq zae 0 mekoli (reverse mekoli) ) (repeat (length mekoli) (entmake (list '(0 . "VERTEX") '(70 . 32) (cons 10 (nth zae mekoli)) )) (setq zae (+ zae 1)) );repeat (entmake '((0 . "SEQEND"))) (entdel mename) (entdel sename) );progn (alert "Gewählter Punkt ist kein gültiger Scheitelpunkt der Master-3DPolylinie!") );if );progn (alert (strcat "Für die Bearbeitung ist eine 3DPolylinie erforderlich! Das gewähltes Objekt ist: " metyp)) );if (setvar "osmode" os) (princ) );enddefun ;///////////////////////////////////////////////////////////////////////////////////////////////////////// (princ "\n3DPolyConnect Modul ") (princ (chr 169)) (princ " S. Rosinus 2008") (princ "\n...erfolgreich geladen!") (princ "\nStart mit <_3dpc>") (princ)