找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1480|回复: 2

[研讨] 动态收缩Pline边

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-10-21 07:07:27 | 显示全部楼层 |阅读模式

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

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

×
以下程序尚未完成,贴上来供大家研讨
问题:1 去点部分还有问题;2 未考虑弧段部分;3 只能收缩恢复部分没有写
  1. (defun XD::Polylie:NearIndex (e pnt / pam num)
  2.   (setq    pam (xdrx_curve_getparamatpoint e pnt)
  3.     num (xdrx_polyline_numverts e)
  4.     pam (fix (+ pam 0.5))
  5.   )
  6.   (if (= pam num)
  7.     0
  8.     pam
  9.   )
  10. )
  11. (defun *error*_New (msg)
  12.   (setq *error* *error*_Old)
  13.   (if (wcmatch (strcase msg t) "*break,*cancel*,*exit*,*取消*")
  14.     (if    (= (getvar "LOCALE") "CHS")
  15.       (princ "\n用户按了<Esc>强制退出")
  16.       (princ "\nYou cancelled The operation!")
  17.     )
  18.     (princ (strcat "\n" msg))
  19.   )
  20.   (if pt
  21.     (xdrx_entity_delete pt)
  22.   )
  23.   (if color
  24.     (xdrx_entity_setproperty e "color" color)
  25.   )
  26.   (xdrx_PointMonitor)
  27.   (xdrx_end)
  28.   (princ)
  29. )
  30. (defun c:tt (/        callback      e     index    p0     e      pt
  31.          color  ne       v      p1     p2    pn     orindex
  32.          index1 index2
  33.         )

  34.   (defun callback (dynpt / ResetPntAt pts ptsindex)
  35.     (defun ResetPntAt (e lst index pt / il)
  36.       (if (< (car lst) index (cadr lst))
  37.     (progn
  38.       (xdrx_polyline_setpointat ne index pt)
  39.       (setq il lst)
  40.     )
  41.     (progn
  42.       ;;以下有问题!
  43.       (xdrx_polyline_removevertexat ne index)
  44.       (xdrx_polyline_compress ne)
  45.       ;;(xdrx_polyline_reset ne)
  46.       (setq    il (XD::PolyLine:-Index+
  47.              ne
  48.              (XD::Polylie:NearIndex ne pt)
  49.            )
  50.       )
  51.     )
  52.       )
  53.       il
  54.     )
  55.     ;;main dyn
  56.     (if
  57.       (and (setq pts (xdrx_curve_getinters
  58.                (list dynpt (mapcar '+ dynpt v))
  59.                ne
  60.                1
  61.              )
  62.        )
  63.        (= (length pts) 2)
  64.        (setq
  65.          ptsIndex (mapcar '(lambda (x) (XD::Polylie:NearIndex ne x))
  66.                   pts
  67.               )
  68.        )
  69.        (not (apply 'equal ptsindex))
  70.       )
  71.        (progn
  72.      (setq index1 (ResetPntAt ne index1 (car ptsIndex) (car pts)))
  73.      (setq index2 (ResetPntAt ne index2 (cadr ptsIndex) (cadr pts)))
  74.        )
  75.     )
  76.   )
  77.   ;;main program
  78.   (setq *error*_Old *error*)        ;save the *error* handle
  79.   (setq *error* *error*_New)        ;set a new *error* handle
  80.   (xdrx_begin)
  81.   (if (setq e (xdrx_entsel "\nPick pline: " '((0 . "lwpolyline"))))
  82.     (progn
  83.       (xdrx_polyline_compress e)
  84.       (setq index (fix (apply 'xdrx_curve_getparamatpoint e))
  85.         p0      (cadr e)
  86.         e      (car e)
  87.         pt      (xdrx_point_make (xdrx_curve_getpointatparam e p0))
  88.         color (xdrx_getpropertyvalue e "color")
  89.         ne      (ssname
  90.             (xdrx_entity_transformedcopy e (xdrx_matrix_identity 3))
  91.             0
  92.           )
  93.       )
  94.       (xdrx_setpropertyvalue e "color" '(0 0 0))
  95.       (mapcar 'set '(p1 p2) (xdrx_polyline_getlinesegat e index))
  96.       (setq v       (mapcar '- p2 p1)
  97.         index1 (XD::PolyLine:-Index+
  98.              e
  99.              (fix (xdrx_curve_getparamatpoint e p1))
  100.            )
  101.         index2 (XD::PolyLine:-Index+
  102.              e
  103.              (fix (xdrx_curve_getparamatpoint e p2))
  104.            )
  105.       )
  106.       (setq ret (xdrx_pointmonitor "Callback" pt))
  107.       (setq pn (getpoint p0 "\nNext point: "))
  108.       (xdrx_pointmonitor)
  109.       (xdrx_entity_delete pt)
  110.       (xdrx_entity_setproperty e "color" color)
  111.     )
  112.   )
  113.   (xdrx_end)
  114.   (princ)
  115. )


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

使用道具 举报

已领礼包: 8612个

财富等级: 富甲天下

发表于 2013-10-21 14:18:08 | 显示全部楼层
捕捉功能好像没有多大意义,因为始终在自己身上。关了捕捉就和grread效果一样了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 01:50 , Processed in 0.184559 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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