找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1228|回复: 10

[转贴]:Spline to Pline

[复制链接]
发表于 2003-8-6 06:08:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
;;CADALYST 12/03 AutoLISP Solutions  SPLINE-TO-PLINE.LSP
;;(c) 2003 Tony Hotchkiss
(defun c:test ()
;(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
  (setq spline-list (get-spline))
  (setq i (- 1))
  (if spline-list
    (progn
      (setq msg "\nNumber of segments <100>: ")
      (initget 6)
      (setq num (getint msg))
      (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 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
    (prompt "\nSelect splines: ")
    (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
  (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
    (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
  ) ;_ 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
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-8-8 06:45:12 | 显示全部楼层
能否讲解一下其用途?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-8-11 07:26:10 | 显示全部楼层
我的图中有一个面,其中含有一段椭圆曲线。因为椭圆曲线是SPLINE,就不能用PEDIT封闭,也就不能拉成立体图。
LSJJM解决了这个问题,太好了。就是太麻烦了。
我又发现用BONDARY可以将SPLINE和多线段封闭成一个面,就不用LSJJM的程序了,所以我也不知道这个程序还有何用?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-23 18:01:58 | 显示全部楼层
这个程序执行无效啊,没有转换我的spline,也没有报错。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-23 19:58:15 | 显示全部楼层
SPLINE2POLYLINE可以直接使用CAD的WMFOUT和WMFIN命令组合后就可以了
而且还可以多版本兼容!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-23 20:23:23 | 显示全部楼层
我也试了,是不起作用,根变不成PLINE线
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-5-24 07:47:20 | 显示全部楼层
重新贴了一个, 大家试试!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-5-24 22:09:18 | 显示全部楼层
用的vlax-curve-getPointAtParam,等分数要自己设定.

没我们以前讨论过的好.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-10 09:11:31 | 显示全部楼层

变小了。

最初由 心梦相随 发布
[B]SPLINE2POLYLINE可以直接使用CAD的WMFOUT和WMFIN命令组合后就可以了
而且还可以多版本兼容! [/B]







可是,变小了呢。怎么能够让变成pline后的图形与spline的图一样大?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-11 20:47:10 | 显示全部楼层
恩,是否可以同时将PLINE曲线变成多段直线呢?或者也可以将PLINE反编辑成SPLINE?请指教,谢谢楼主!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-14 16:49:32 | 显示全部楼层
我在2004里转化了,
能用!
唯一的遗憾是:能直接转化为pline的弧线就好了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-27 05:27 , Processed in 0.198989 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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