明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3500|回复: 2

一段转splineline换成lwpolyline的程序,颜色设置问题!

[复制链接]
发表于 2003-12-31 17:16:00 | 显示全部楼层 |阅读模式
一段转splineline换成lwpolyline的程序,我想把转换后的lwpolyline和原来的spline颜色一样。请问如何实现(请高手补充代码)。
源程序:------------------------------------------------------------------------------------------------------------
;;CADALYST 12/03 AutoLISP Solutions  SPLINE-TO-PLINE.LSP
;;(c) 2003 Tony Hotchkiss

(defun spline-to-pline (/ i)
  (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

  ;----------------------------------------------------------选取spline
  (setq spline-list (get-spline))
  (setq i (- 1))
  (if spline-list
    (progn
      ;(setq msg "\nNumber of segments <100>: ")
      ;(initget 6)
      (setq num 1000)
      (if (or (= num 100) (= num nil))
        (setq num 100)
      ) ;_ end of if
      (repeat (length spline-list)
        (setq splobj (nth (setq i (1+ i)) spline-list))

        ;---------------------------------------------Convert Spline的处理部分
        (convert-spline splobj num)
      ) ;_ end of repeat
    ) ;_ end of progn
  ) ;_ end of if
) ;_ end of spline-to-pline

(defun get-spline (/ spl-list obj spline no-ent i)
  (setq        spl-list nil
        obj         nil
        spline         "AcDbSpline"
        selsets         (vla-get-selectionsets *thisdrawing*)
        ss1         (vlax-make-variant "ss1")
  ) ;_ end of setq
  (if (= (vla-get-count selsets) 0)
    (setq ssobj (vla-add selsets ss1))
  ) ;_ end of if
  (vla-clear ssobj)
  (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") spline)
             (setq spl-list
                    (append spl-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 spl-list))
      (progn
        (setq no-ent 1)
        (prompt "\nNo splines selected.")
        (quit)
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of while  
  (vla-delete (vla-item selsets 0))
  spl-list
) ;_ end of get-spline

(defun convert-spline (splobj n / i)
  (setq        point-list   nil
        2Dpoint-list nil
        z-list             nil
        spl-lyr             (vlax-get-property splobj 'Layer)
        startSpline  (vlax-curve-getStartParam splobj)
        endSpline    (vlax-curve-getEndParam splobj)
        i             (- 1)
  ) ;_ end of setq
   ;-------------------------------添加得到当前Spline的颜色码
    ;(setq c2 cons 62 col)
    (setq col (assoc 62 spobj) )
    ;-------------------------------颜色读取部分结束
  (repeat (+ n 1)
    (setq i (1+ i))
    (setq p (vlax-curve-getPointAtParam
              splobj
              (* i
                 (/ (- endspline startspline) n)
              ) ;_ end of *
            ) ;_ end of vlax-curve-getPointAtParam
    ) ;_ end of setq
    (setq 2Dp               (list (car p) (cadr p))
          2Dpoint-list (append 2Dpoint-list 2Dp)
          point-list   (append point-list p)
          z               (caddr p)
          z-list       (append z-list (list z))
    ) ;_ end of setq
  ) ;_ end of repeat
  (setq summ (apply '+ z-list))
  (setq        arraySpace
         (vlax-make-safearray
           vlax-vbdouble ; element type
           (cons 0
                 (- (length point-list) 1)
           ) ; array dimension
         ) ;_ end of vlax-make-safearray
  ) ;_ end of setq
  (setq vert-array (vlax-safearray-fill arraySpace point-list))
  (vlax-make-variant vert-array)
  (if (and (= :vlax-true (vlax-get-property splobj 'IsPLanar))
           (= summ 0.0)
      ) ;_ end of and

  
    ;---------------------------------------------------------------添加polyline
    (setq plobj        (add-polyline
                  2Dpoint-list
                  vla-AddLightweightPolyline
                ) ;_ end of add-polyline
    ) ;_ end of setq
    (setq plobj        (add-polyline
                  point-list
                  vla-Add3DPoly
                ) ;_ end of add-polyline
    ) ;_ end of setq
    ;-------------------------------------------------------------更新polyline色
  
  ) ;_ end of if
  (vlax-put-property plobj 'Layer spl-lyr)
  (vla-delete splobj)
  (vlax-release-object splobj)
) ;_ end of convert-spline

(defun add-polyline (pt-list poly-func)
  (setq        arraySpace
         (vlax-make-safearray
           vlax-vbdouble
           (cons 0
                 (- (length pt-list) 1)
           ) ; array dimension
         ) ;_ end of vlax-make-safearray
  ) ;_ end of setq
  (setq        vertex-array
         (vlax-safearray-fill arraySpace pt-list)
  ) ;_ end of setq
  (vlax-make-variant vertex-array)
  (setq        plobj (poly-func
                *modelspace*
                vertex-array
              ) ;_ end of poly-func
  ) ;_ end of setq
) ;_ end of add-polyline

(defun c:s2p ()
  (spline-to-pline)
  (princ)
) ;_ end of c:s2p


(prompt
  "这是从网上下载的代码,作者:Tony Hotchkiss,本人改动一些,输入:S2P 开始转换\r\n      线段分段数目为1000,可以根据需要更改。\r\n     选择对象输入all,回车,回车OK!"
) ;_ end of prompt
发表于 2004-1-2 12:49:00 | 显示全部楼层
(SETQ COL (VLA-GET-COLOR SPLOBJ));;BY LUCAS
  ;;-------------------------------添加得到當前Spline的顏色碼
;;(setq c2 cons 62 col)
  ;;(setq COL (assoc 62 SPOBJ))
  ;;-------------------------------顏色讀取部分結束



    ;;-------------------------------------------------------------更新polyline色

  ) ;_ end of if
  (vlax-put-property PLOBJ 'LAYER SPL-LYR)
  (vla-put-color PLOBJ COL);;;;;by LUCAS
发表于 2011-8-18 10:39:21 | 显示全部楼层
谢谢了 学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-8-12 06:51 , Processed in 0.158230 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表