找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1462|回复: 5

[编程申请]:老问题,样条曲线转化

[复制链接]
发表于 2006-7-8 14:50:57 | 显示全部楼层 |阅读模式

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

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

×
论坛上很多转换样条的程序都不够完美。那位高手帮帮忙写一个
要求:转换后炸开必须为弧线,而且要圆滑,不能是每段都一样长,像ET工具中那个“flatten”命令那样,根据样条的曲度大小转换的弧大小也不一样,尽量减少线段的数量。
能否拿flatten改一下??
先谢了

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

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-7-8 15:41:04 | 显示全部楼层
既然Flatten能满足为什么还要再写呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-9 13:45:50 | 显示全部楼层
Flatten就是还不够完美,线段还是很多
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-7-9 23:48:56 | 显示全部楼层
仅靠Lisp很难达到理想的效果,下面是网上搜索到的,你可以试着自己改进

  1. ;;;CADALYST 01/06  Tip 2082: Spline2Pline2.lsp         Spline to Polyline Conversion - Update         (c) 2006 Cadalyst and Lloyd Beachy + narrator

  2. ;; Spline2Pline2.lsp (c) 2005 Lloyd Beachy + narrator
  3. ;; Routine to convert splines to plines

  4. (Defun C:S2P2 (/ ss pt#        cmdecho        osmode clayer count ent        lay lng        pt-list
  5.                cnt)
  6.   (vl-load-com)
  7.   (setq        ss        (ssget '((0 . "spline")))
  8.         multi#        (getint
  9.                   "Please specify number of polyline points by a multiplicator of spline's control points, leave default for the same number <1>:"
  10.                 )
  11.         cmdecho        (getvar "cmdecho")
  12.         osmode        (getvar "osmode")
  13.         clayer        (getvar "clayer")
  14.         count        0                        ;spline counter
  15.   )                                        ;end setq
  16.   (if (null multi#)
  17.     (setq multi# 1)
  18.   )
  19.   (setvar "cmdecho" 0)
  20.   (command ".undo" "begin")                ;begin undo group
  21.   (setvar "osmode" 0)
  22.   (repeat (sslength ss)                        ;repeat for each spline
  23.     (setq ent          (vlax-ename->vla-object (ssname ss count))
  24.                                         ;change spline to vla-object
  25.           lay          (vlax-get-property ent "layer") ;spline's layer
  26.           cp#          (vlax-get-property ent "numberofcontrolpoints")
  27.                                         ;spline's control points number
  28.           lng          (vlax-curve-getDistAtPoint ent (vlax-curve-getEndPoint ent))
  29.                                         ;length of spline
  30.           pt-list (list (vlax-curve-getStartPoint ent))
  31.                                         ;coords for start of spline
  32.           cnt          1.0                        ;segment counter
  33.           pt#          (* cp# multi#)
  34.     )                                        ;end setq
  35.     (repeat pt#                                ;repeat for each segment
  36.       (setq pt-list
  37.              (cons (vlax-curve-getPointAtDist ent (* lng (/ cnt pt#)))
  38.                    pt-list
  39.              )
  40.       )                                        ;add segment's point to pt-list
  41.       (setq cnt (1+ cnt))                ;counter to next segment
  42.     )                                        ;end segment repeat
  43.     (setq cnt 0)                        ;pline counter
  44.     (setvar "clayer" lay)                ;match spline's layer
  45.     (command ".pline"                        ;start "pline" command
  46.              (repeat (length pt-list)        ;repeat for each point
  47.                (command (nth cnt pt-list)) ;enter current point
  48.                (setq cnt (1+ cnt))        ;counter to next point
  49.                ""                        ;return value to close "pline" command
  50.              )                                ;end point repeat
  51.     )                                        ;end command
  52.     (setq count (1+ count))                ;counter to next spline
  53.   )                                        ;end spline repeat
  54.   (command ".erase" ss "")
  55.   (setvar "osmode" osmode)
  56.   (setvar "clayer" clayer)
  57.   (command ".undo" "end")                ;end of undo group
  58.   (setvar "cmdecho" cmdecho)
  59.   (princ)                                ;exit quietly
  60. )                                        ;end C:S2P
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-11 02:22:41 | 显示全部楼层
能力有限啊!!有没什么别的办法呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-8 20:18 , Processed in 0.396593 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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