seashell2day
03.04.2009, 01:23
I have a 3Dpolyline & want to convert it to a normal polyline without exploding & getting a million lines. Can anyone help?
msplcdykee69
03.04.2009, 04:08
if you have Civil 3D autoCAD you can go to Surface>Utilities>Convert 3D poly to 2D poly. If you do not.. Here is a lisp program you can use to convert it. Also if your 3D poly has "Z" elevations you need to get rid of I have a lisp to Flatten the "Z" value to 0. It is below as well
Convert 3D to 2D Poly
;;CADALYST 09/03 AutoLISP Solutions;;; PLINE-3D-2D.LSP - a program to convert;;; 3D polylines to 2D;;; Program by Tony Hotchkiss
(defun pline-3d-2d () (vl-load-com) (setq *thisdrawing* (vla-get-activedocument (vlax-get-acad-object) ) ;_ end of vla-get-activedocument *modelspace* (vla-get-ModelSpace *thisdrawing*) ) ;_ end of setq (setq 3d-pl-list (get-3D-pline) ) ;_ end of setq (if 3d-pl-list (progn (setq vert-array-list (make-list 3d-pl-list)) (setq n (- 1)) (repeat (length vert-array-list) (setq vert-array (nth (setq n (1+ n)) vert-array-list)) (setq lyr (vlax-get-property (nth n 3d-pl-list) 'Layer)) (setq obj (vla-AddPolyline *modelspace* vert-array)) (vlax-put-property obj 'Layer lyr) ) ;_ end of repeat (foreach obj 3d-pl-list (vla-delete obj)) ) ;_ end of progn ) ;_ end of if) ;_ end of pline-3d-2d
(defun get-3D-pline () (setq pl3dobj-list nil obj nil 3d "AcDb3dPolyline" ) ;_ end of setq (setq selsets (vla-get-selectionsets *thisdrawing*)) (setq ss1 (vlax-make-variant "ss1")) (if (= (vla-get-count selsets) 0) (setq ssobj (vla-add selsets ss1)) ) ;_ end of if (vla-clear ssobj) (setq Filterdata (vlax-make-variant "POLYLINE")) (setq no-ent 1) (while no-ent (vla-Selectonscreen ssobj) (if (> (vla-get-count ssobj) 0) (progn (setq no-ent nil) (setq i (- 1)) (repeat (vla-get-count ssobj) (setq obj (vla-item ssobj (vlax-make-variant (setq i (1+ i))) ) ;_ end of vla-item ) ;_ end of setq (cond ((= (vlax-get-property obj "ObjectName") 3d) (setq pl3dobj-list (append pl3dobj-list (list obj)) ) ;_ end of setq ) ) ;_ end-of cond ) ;_ end of repeat ) ;_ end of progn (prompt "\nNo entities selected, try again.") ) ;_ end of if (if (and (= nil no-ent) (= nil pl3dobj-list)) (progn (setq no-ent 1) (prompt "\nNo 3D-polylines selected.") (quit) ) ;_ end of progn ) ;_ end of if ) ;_ end of while (vla-delete (vla-item selsets 0)) pl3dobj-list) ;_ end of get-3D-pline
(defun get-3D-pline-old () (setq no-ent 1) (setq filter '((-4 . "<AND") (0 . "POLYLINE") (70 . 8) (-4 . "AND>") ) ) ;_ end of setq (while no-ent (setq ss (ssget filter) k (- 1) pl3dobj-list nil obj nil 3d "AcDb3dPolyline" ) ;_ end-of setq (if ss (progn (setq no-ent nil) (repeat (sslength ss) (setq ent (ssname ss (setq k (1+ k))) obj (vlax-ename->vla-object ent) ) ;_ end-of setq (cond ((= (vlax-get-property obj "ObjectName") 3d) (setq pl3dobj-list (append pl3dobj-list (list obj)) ) ;_ end of setq ) ) ;_ end-of cond ) ;_ end-of repeat ) ;_ end-of progn (prompt "\nNo 3D-polylines selected, try again.") ) ;_ end-of if ) ;_ end-of while pl3dobj-list) ;_ end of get-3D-pline-old
(defun make-list (p-list) (setq i (- 1) vlist nil calist nil ) ;_ end of setq (repeat (length p-list) (setq obj (nth (setq i (1+ i)) p-list) coords (vlax-get-property obj "coordinates") ca (vlax-variant-value coords) ) ;_ end-of setq (setq calist (append calist (list ca))) ) ;_ end-of repeat) ;_ end-of make-list
(defun c:pl32 () (pline-3d-2d) (princ)) ;_ end of pl32
(prompt "Enter PL32 to start: ")
Flatten "Z" Coordinates
;;;; Flatten.lsp - Converts 3d geometry to 2d geometry.;;;; Copyright © 1999 by Autodesk, Inc.;;;; Your use of this software is governed by the terms and conditions;; of the License Agreement you accepted prior to installation of this;; software. Please note that pursuant to the License Agreement for this;; software, "[c]opying of this computer program or its documentation;; except as permitted by this License is copyright infringement under;; the laws of your country. If you copy this computer program without;; permission of Autodesk, you are violating the law.";;;; AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.;; AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF;; MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.;; DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE;; UNINTERRUPTED OR ERROR FREE.;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(defun c:flatten ( / ss ans ) (acet-error-init (list nil 1)) (princ "\nSelect objects to convert to 2d...") (if (not acet:flatn-hide) (setq acet:flatn-hide "No") );if (if (and (setq ss (ssget "_:l" '((-4 . "<NOT") (0 . "VIEWPORT") (-4 . "NOT>"))));setq (setq ss (car (acet-ss-filter (list ss nil T)))) );and (progn (initget "Yes No") (setq ans (getkword (acet-str-format "\nRemove hidden lines? <%1>: " acet:flatn-hide ) );getkword );setq (if (not ans) (setq ans acet:flatn-hide) (setq acet:flatn-hide ans) );if (if (equal ans "No") (acet-flatn ss nil) (acet-flatn ss T) );if );progn then );if (acet-error-restore));defun c:flatten
(acet-autoload2 '("FLATTENSUP.LSP" (acet-flatn ss hide)))(princ)
I hope these Help.....
seashell2day
03.04.2009, 04:58
Thanks, i got it from
http://cadtips.cadalyst.com