几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量

几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 (http://www.dimcax.com/hust/index.php)
-   数据库ObjectDBX (http://www.dimcax.com/hust/forumdisplay.php?f=177)
-   -   求一个能把样条曲线和多段线相互转化的lisp源程序 (http://www.dimcax.com/hust/showthread.php?t=13724)

yang686526 2009-04-28 02:52 PM

求一个能把样条曲线和多段线相互转化的lisp源程序
 
求一个能把样条曲线和多段线相互转化的lisp源程序
www.dimcax.com
求一个能把样条曲线和多段线相互转化的lisp源程序
如题。谢谢各位!!!

用wnfout的方法来写
勤能补拙

用wnfout的方法来写

不能明白啊

(defun c:sp2arc (/ ename ent i
j old_clayer old_cmdecho old_dimzin
old_osmode ss old_cecolor
)
;;funcation sparc
(defun sparc (ename / a arcss b i idlst j k len new p1 p2 p3 per
vlaobj)
(vl-load-com)
(command "area" "o" ename)
(if (< (setq per (getvar "perimeter")) 1.0)
(setq a (/ per 10))
(if (>= per 500)
(setq a (/ per 2000))
(setq a (/ per (+ (* (fix (/ (/ per 0.25) 4)) 4) 2)))
)
)
(setq idlst nil
i 0
b 0
vlaobj (vlax-ename->vla-object ename)
)
(while (< b per)
(setq b (* a i)
i (1+ i)
idlst (append idlst (list (vlax-curve-getpointatdist vlaobj b)))
)
)
(entdel (vlax-vla-object->ename vlaobj))
(setq i 0
j 1
k 2
len (length idlst)
arcss (ssadd)
)
(while (<= k len)
(setq p1 (nth i idlst)
p2 (nth j idlst)
p3 (nth k idlst)
)
(setq i (+ i 2)
j (+ j 2)
k (+ k 2)
)
(command "arc" p1 p2 p3)
(setq new (entlast))
(setq arcss (ssadd new arcss))
)
(command "pedit" new "y" "j" arcss "" "")
)
;;funcation get_color
(defun get_color (ename / ent col)
(setq ent (entget ename))
(or
(setq col (cdr (assoc 62 ent)))
(setq
col (cdr (assoc 62 (tblsearch "layer" (cdr (assoc 8 ent)))))
)
)
(rtos col 2 0)
)
;;main
(setq old_cmdecho (getvar "cmdecho")
old_osmode (getvar "osmode")
old_clayer (getvar "clayer")
old_dimzin (getvar "dimzin")
old_cecolor (getvar "cecolor")
)
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(setvar "dimzin" 0)
(setq ss (ssget)
i 0
j 0
)
(repeat (sslength ss)
(setq ename (ssname ss i))
(setq ent (entget ename))
(if (= (cdr (assoc 0 ent)) "spline")
(progn
(setvar "clayer" (cdr (assoc 8 ent)))
(setvar "cecolor" (get_color ename))
(sparc ename)
(setq j (1+ j))
)
)
(setq i (1+ i))
)
(alert (strcat "\n共 " (rtos j 2 0) " 条spline转换成arc"))
(setvar "cmdecho" old_cmdecho)
(setvar "osmode" old_osmode)
(setvar "clayer" old_clayer)
(setvar "dimzin" old_dimzin)
(setvar "cecolor" old_cecolor)
(princ)
)

多段线有一个属性就是变成样条曲线
拟合

用cad的et扩展工具箱有个命令可以解决

样条曲线转多段线程序:
明经cad社区 → 工程篇 → 机械工程 → [原创]任意曲线转换成多段线程序

前面那么仁兄写的程序,我试了一下不能转啊
勤能补拙

:
(defun c:sp2arc (/ ename ent i
j old_clayer old_cmdecho old_dimzin
old_osmode ss old_cecolor
)
;;funcation sparc
.......
这个有点问题,弧形部分可以,直线部分好行不行,希望大师改一下


所有的时间均为北京时间。 现在的时间是 01:20 AM.