找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2773|回复: 5

[已解决] 已解决 修改判断顺时针逆时针的代码

[复制链接]
发表于 2013-9-22 16:57:17 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 cz7873559 于 2013-9-22 17:45 编辑

大家好,以前找了个判断多线段顺时针还是逆时针的的代码,现在想用,发现有些功能可以再优化。麻烦高手能否帮我改改:
1、支持框选多线和二维多线段。
2、把逆时针的多线段或二维多线段变成绿色。
代码如下:
  1. (defun C:tt (/ ss fd ang offsetObj plineObj)

  2.   (if (setq ss (ssget ":s" '((0 . "*POLYLINE"))))

  3.     (progn

  4.       (setq plineObj (vlax-ename->vla-object (ssname ss 0)))

  5.           ;(setq fd (vlax-curve-getFirstDeriv plineObj 0.5))

  6.           ;(setq ang (atan (/ (cadr fd) (car fd))))

  7.       (setq offsetplineObj
  8.        (car (vlax-safearray->list

  9.         (vlax-variant-value

  10.           (vla-OFFSET plineObj 0.0001)
  11.         )
  12.       )
  13.        )
  14.       )

  15.       (if (> (vlax-curve-getdistatparam

  16.          plineobj

  17.          (vlax-curve-getEndParam plineobj)

  18.        ) ;_ 结束vlax-curve-getdistatparam

  19.        (vlax-curve-getdistatparam

  20.          offsetplineObj

  21.          (vlax-curve-getEndParam offsetplineObj)

  22.        ) ;_ 结束vlax-curve-getdistatparam
  23.     )

  24.   (princ "\n顺时针.")
  25.   (princ "\n逆时针.")

  26.       )

  27.       (vla-delete offsetplineObj)

  28.     )          ;progn

  29.     (princ "\n没有选择多段线.")

  30.   )          ;end_if

  31.   (princ)

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

已领礼包: 10417个

财富等级: 富甲天下

发表于 2013-9-23 08:01:34 | 显示全部楼层
  1. ;判断顺逆时针
  2. (defun C:tt (/ ss fd ang offsetObj plineObj)
  3. (if (setq ss (ssget '((0 . "*POLYLINE")))) (progn
  4.   (setq i -1)
  5.   (repeat (sslength ss)
  6.    (setq plineObj (vlax-ename->vla-object (ssname ss (setq i (1+ i)))))
  7.           ;(setq fd (vlax-curve-getFirstDeriv plineObj 0.5))
  8.           ;(setq ang (atan (/ (cadr fd) (car fd))))
  9.    (setq offsetplineObj
  10.     (car (vlax-safearray->list
  11.      (vlax-variant-value (vla-OFFSET plineObj 0.0001))
  12.      )
  13.     )
  14.    )
  15.    (if (> (vlax-curve-getdistatparam plineobj (vlax-curve-getEndParam plineobj))
  16.      (vlax-curve-getdistatparam offsetplineObj
  17.       (vlax-curve-getEndParam offsetplineObj)
  18.      )
  19.     )
  20.    (princ); (princ "\n顺时针.")
  21.    (vla-put-color plineobj 3) ;(princ "\n逆时针.")
  22.   )
  23.   (vla-delete offsetplineObj)
  24. )          ;progn
  25.   (princ "\n没有选择多段线.")
  26. )          ;if
  27. (princ)
  28. )

评分

参与人数 1D豆 +5 收起 理由
cz7873559 + 5 热心帮忙奖!

查看全部评分

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

使用道具 举报

发表于 2013-9-22 17:24:56 | 显示全部楼层
XDRXAPI + XD-Lisp-Lib
  1. (defun c:tt (/ ss pts)
  2.   (if (setq ss (ssget '((0 . "*polyline"))))
  3.     (progn
  4.       (xdrx_setsstodb ss 0)
  5.       (while (setq e (xdrx_getentdata 0))
  6.     (setq pts (xdrx_getsamplept e))
  7.     (if (not (XD::Pnts:isClockWise pts))
  8.       (xdrx_setpropertyvalue e "color" 3)
  9.     )
  10.       )
  11.     )
  12.   )
  13.   (princ)
  14. )


评分

参与人数 1D豆 +5 收起 理由
cz7873559 + 5 热心帮忙奖!

查看全部评分

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

使用道具 举报

 楼主| 发表于 2013-9-22 17:43:52 | 显示全部楼层
很好的代码!!!真不愧是高手。非常感谢~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-24 16:56:07 | 显示全部楼层
也非常感谢zxq0220,非常不好意思,刚才我点快了点到反对去了。。。
你的代码一样能达到检查逆时针多线段的效果。
但是在遇到多线段有回头线的时候 就会报错:; 错误: Automation 错误。未提供说明。
我附上了样图。
麻烦你看看,能否判别出来含有回头线的多线段,并且也把颜色变了么?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-9-24 16:56:44 | 显示全部楼层
也非常感谢zxq0220,非常不好意思,刚才我点快了点到反对去了。。。
你的代码一样能达到检查的效果。
但是在遇到多线段有回头线的时候 就会报错:; 错误: Automation 错误。未提供说明。
我附上了样图。
麻烦你看看,能否判别出来含有回头线的多线段,并且也把颜色变了么?

有回头线的情况.rar

7.35 KB, 下载次数: 13, 下载积分: D豆 -1 , 活跃度 1

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 10:24 , Processed in 0.228445 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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