明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: lemonbox

如何对一组闭合pline进行集体向外偏移??

  [复制链接]
发表于 2006-4-17 22:25:00 | 显示全部楼层

错!我没有说是向内偏移后。。。。。而是说“偏移后”

本帖子中包含更多资源

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

x
发表于 2006-4-18 07:42:00 | 显示全部楼层
呵呵,受教了,不过呢,还是可以用长度来比较,只要将偏移后的产生的一个或是多个新物体的总长之和比较一下还是可以的。
发表于 2006-4-18 14:07:00 | 显示全部楼层
一个判断顺时针\逆时针的程序,,,没有进行理论论证,也没有经过大量的实践证明,只是根据自己的想法,进行过少量奇特图形的测试,,,欢迎找出问题,或提供判断错误的图形
如果是一个凸多边形,可以将step设小一些以增加速度,,,如果是一些复杂的图形,可以将step设置大些以保证正确,,,
  1. (defun GEO_CCW (p0 p1 p2 / dx1 dx2 dy1 dy2)
  2.   (setq dx1 (- (car p1) (car p0))
  3. dy1 (- (cadr p1) (cadr p0))
  4. dx2 (- (car p2) (car p0))
  5. dy2 (- (cadr p2) (cadr p0))
  6.   )
  7.   (cond
  8.     ((> (* dx1 dy2) (* dy1 dx2)) 1)
  9.     ((< (* dx1 dy2) (* dy1 dx2)) -1)
  10.     (t
  11.      (cond
  12.        ((or (minusp (* dx1 dx2))
  13.      (minusp (* dy1 dy2))
  14. ) -1)
  15.        ;; explicit distance
  16.        ((>= (+ (* dx1 dx1) (* dy1 dy1)) (+ (* dx2 dx2) (* dy2 dy2))) 0)
  17.        (t 1)
  18.      );COND
  19.     );T
  20.   );COND
  21. );DEFUN
  22. (defun c:PlineCCW (/ pline step param nParam pt pt1 pt2 i  CCWLST)
  23.   (setq pline (car (entsel "Select lwpline")))
  24.   (setq step 10)
  25.   (setq param (/ (vlax-curve-getEndParam pline) step))
  26.   (setq i 0)
  27.    (repeat (1- step)
  28.     (setq nParam (* i param))
  29.     (setq pt (vlax-curve-getPointAtParam pline nParam))
  30.     (setq pt1 (vlax-curve-getPointAtParam pline (+ (* (+ 1 (/ 0.5 step)) param) nParam)))
  31.     (setq pt2 (vlax-curve-getPointAtParam pline (+ (* (+ 1 (/ 1.0 step)) param) nParam)))
  32.     (setq CCWLST (append CCWLST (list (GEO_CCW pt pt1 pt2))))
  33.     (setq i (1+ i))
  34.   )
  35.   (setq CCWLST (vl-remove 0 CCWLST))
  36.   (if (> (length (vl-remove 1 CCWLST)) (length (vl-remove -1 CCWLST)))
  37.     (princ "\nPline is clockwise")
  38.     (princ "\nPline is counterclockwise")
  39.   )
  40.   (princ)
  41. ) ;end defun

发表于 2006-4-18 23:39:00 | 显示全部楼层

试试这个

本帖子中包含更多资源

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

x
发表于 2006-4-19 17:37:00 | 显示全部楼层

测试了没有问题,,,

虽然这个图形只有两个点,单从顶点上无法确定是顺时针还是逆时针,不过从对象信息中的凸度可以很明显判断是顺时针还是逆时针,,,我用程序判断过了,两种情况都正确...

如果你有不正确的,可以提供DWG文件

发表于 2006-4-19 23:15:00 | 显示全部楼层

上图,多义线设闭合后测试没有返回结果.

不设闭合有返回结果

 楼主| 发表于 2006-4-20 10:10:00 | 显示全部楼层

不能用面积判断吗?

发表于 2006-4-20 11:39:00 | 显示全部楼层
正确的方法应该是用面积判断,

本帖子中包含更多资源

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

x
发表于 2006-4-21 12:14:00 | 显示全部楼层

还是建议用长度计算。原因同上。

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-6-22 00:14 , Processed in 0.170736 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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