找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3366|回复: 10

[编程申请] 最小锐角+线自相交+面相交检查+调整多线段方向

[复制链接]
发表于 2014-7-7 15:29:02 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 cz7873559 于 2014-7-7 15:31 编辑

由于工作需要,我整理了几个需要实现的功能,见附件说明。麻烦各位高手帮我看看。
主要实现的是4个功能:1.最小锐角+2.线自相交+3.面相交检查+4.调整多线段方向
如果哪位高手能全部做出来的,可以私聊。qq:369147191
请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:最小锐角 线自相交 面相交检查 调整多线段方向.rar 
下载次数:30  文件大小:8.5 KB 
下载权限: 不限 以上  [免费赚D豆]




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

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-7-8 08:25:43 来自手机 | 显示全部楼层
1 xdrx_vector_angle求夹角
2 xdrx_polyline_isselfintersect判断自相交,交点规则在Net论坛有个帖子有论述
3 面相交用xdrx_entity_intersectwith判断
4 (xdrx_curve_reverse (ssget))就是反向,任意指定起点的程序论坛有

点评

这几天都没来。谢谢大家给我提供的思路。  详情 回复 发表于 2014-7-11 17:43
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-7-8 20:34:27 | 显示全部楼层
xd-lisp-lib.vlx 问题太多,很严重!
最小夹角
  1. (defun c:tt (/ ss an)
  2.   (if (and (setq an (getangle "\n最小角度: "))
  3.            (setq ss (ssget '((0 . "*polyline"))))
  4.       )
  5.     (progn
  6.       (mapcar
  7.         '(lambda (x / pts ptl vl anl i)
  8.            (setq pts (xdrx_getpropertyvalue x "Vertices"))
  9.            (if (vlax-curve-isclosed x)
  10.              (setq pts (reverse (cons (car pts) (reverse pts))))
  11.            )
  12.            (mapcar '(lambda (a b c / v1 v2)
  13.                       (setq v1 (mapcar '- a b)
  14.                             v2 (mapcar '- c b)
  15.                       )
  16.                       (if (< (xdrx_vector_angle v1 v2) an)
  17.                         (entmake (list '(0 . "circle")
  18.                                        (cons 10 b)
  19.                                        '(40 . 1.0)
  20.                                        '(8 . "最小锐角")
  21.                                        '(62 . 3)
  22.                                  )
  23.                         )
  24.                       )
  25.                     )
  26.                    pts
  27.                    (cdr pts)
  28.                    (cddr pts)
  29.            )
  30.          )
  31.         (xdrx_pickset->ents ss)
  32.       )
  33.     )
  34.   )
  35.   (princ)
  36. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-7-8 20:35:17 | 显示全部楼层
相交
  1. (defun c:tt (/ ss lst e1 lst1 s tf)
  2.   (if (setq ss (ssget '((0 . "*polyline") (-4 . "&=") (70 . 0))))
  3.     (progn
  4.       (setq lst (xdrx_pickset->ents ss))
  5.       (while lst
  6.         (setq e1   (car lst)
  7.               lst  (cdr lst)
  8.               lst1 lst
  9.               tf   t
  10.         )
  11.         (while (and tf lst1) ;_仅判断两两相交
  12.           (if (setq s (xdrx_curve_intersect e1 (car lst1) 0.))
  13.             (progn
  14.               (if (not (tblsearch "layer" "多段线相交"))
  15.                 (xdrx_layer_make "多段线相交" 3)
  16.               )
  17.               (xdrx_entity_setlayer s "多段线相交")
  18.               (setq tf nil)
  19.             )
  20.           )
  21.           (setq lst1 (cdr lst1))
  22.         )
  23.       )
  24.     )
  25.   )
  26.   (princ)
  27. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-7-8 20:57:40 | 显示全部楼层
标示自相交点
  1. (defun c:tt (/ ss GetIntersPnt)
  2.   (defun GetIntersPnt (e / pts ep pams iPams dPams num n i)
  3.     (if        (xdrx_polyline_isselfintersect e)
  4.       (progn
  5.         (setq pts   (xdrx_entity_intersectwith e e 0)
  6.               ep    (vlax-curve-getendpoint e)
  7.               pams  (mapcar '(lambda (x) (vlax-curve-getparamatpoint e x))
  8.                             pts
  9.                     )
  10.               iPams (mapcar 'fix
  11.                             (vl-remove-if '(lambda (x) (/= x (fix x))) pams)
  12.                     )
  13.               dPams (vl-remove-if '(lambda (x) (= x (fix x))) pams)
  14.               num   (xdrx_polyline_numverts e)
  15.               n            (- num 2)
  16.               i            1
  17.         )
  18.         (while (<= i n)

  19.           (if (not (vl-position i iPams))
  20.             (setq dPams (cons i dPams))
  21.           )
  22.           (if (equal ep (vlax-curve-getpointatparam e i) 1e-3)
  23.             (setq dPams (cons (1- num) dPams))
  24.           )
  25.           (setq i (1+ i))
  26.         )
  27.         (setq dPams (vl-sort dPams '<))
  28.         (mapcar
  29.           '(lambda (x)
  30.              (entmake (list '(0 . "CIRCLE")
  31.                             (cons 10 (vlax-curve-getpointatparam e x))
  32.                             '(40 . 1.0)
  33.                             '(8 . "线自相交")
  34.                             '(62 . 3)
  35.                       )
  36.              )
  37.            )
  38.           dPams
  39.         )
  40.       )
  41.     )
  42.   )
  43.   (if (setq ss (ssget '((0 . "*polyline"))))
  44.     (mapcar '(lambda (x)
  45.                (GetIntersPnt x)
  46.              )
  47.             (xdrx_pickset->ents ss)
  48.     )
  49.   )
  50.   (princ)
  51. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-7-8 21:19:39 来自手机 | 显示全部楼层
(XD:: Polyline:ResetStartpoint)任意指定闭合多段线起点

点评

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

使用道具 举报

发表于 2014-7-8 21:37:28 | 显示全部楼层
st788796 发表于 2014-7-8 21:19
(XD:: Polyline:ResetStartpoint)任意指定闭合多段线起点

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-7-9 11:44:40 | 显示全部楼层
这个西北角不好定,最上最左或者最右最上都不一定是西北角
  1. (defun c:tt (/ ss)
  2.   (if (setq ss (ssget '((0 . "*polyline"))))
  3.     (progn
  4.       (mapcar '(lambda (x / pts tf p)
  5.                  (setq pts (xdrx_getpropertyvalue x "Vertices")
  6.                        tf  (apply 'xdrx_points_area pts)
  7.                  )
  8.                  (if (> tf 0)
  9.                    (progn
  10.                      (xdrx_curve_reverse x)
  11.                      (setq pts (reverse pts))
  12.                    )
  13.                  )
  14.                  (setq p
  15.                         (car (vl-sort pts
  16.                                       '(lambda (x1 x2)
  17.                                          (if (equal (cadr x1) (cadr x2) 1e-6)
  18.                                            (< (car x1) (car x2))
  19.                                            (> (cadr x1) (cadr x2))
  20.                                          )
  21.                                        )
  22.                              )
  23.                         )
  24.                  )
  25.                  (if (not (equal (vlax-curve-getstartpoint x) p 1e-3))
  26.                    (XD::Polyline:ResetStartPoint x p)
  27.                  )
  28.                )
  29.               (xdrx_pickset->ents ss)
  30.       )
  31.     )
  32.   )
  33.   (princ)
  34. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-7-9 14:37:22 | 显示全部楼层
这样求西北角点可能更好
  1. (defun LeftUpPnt (pts / box v bp vl)
  2.   (setq        box (apply 'xdrx_points_box pts)
  3.         v   (mapcar '- (last box) (caddr box))
  4.         bp  (last box)
  5.         pts (vl-remove bp pts)
  6.         vl  (mapcar '(lambda (x / vv d)
  7.                        (setq vv        (trans (mapcar '- x bp) 0 v)
  8.                              d        (+ (* (car vv) (car vv))
  9.                                    (* (cadr vv) (cadr vv))
  10.                                    (* (caddr vv) (caddr vv))
  11.                                 )
  12.                        )
  13.                        (list d (caddr vv) x)
  14.                      )
  15.                     pts
  16.             )
  17.   )
  18.   (caddar (vl-sort vl
  19.                   '(lambda (x1 x2)
  20.                      (if (equal (car x1) (car x2) 1e-3)
  21.                        (< (cadr x1) (cadr x2))
  22.                        (< (car x1) (car x2))
  23.                      )
  24.                    )
  25.          )
  26.   )
  27. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-7-11 17:43:16 | 显示全部楼层
st788796 发表于 2014-7-8 08:25
1 xdrx_vector_angle求夹角
2 xdrx_polyline_isselfintersect判断自相交,交点规则在Net论坛有个帖子有论 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-19 09:53 , Processed in 0.186440 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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