找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4134|回复: 14

[求助] 怎样得到多义线内一点

[复制链接]
发表于 2013-5-9 11:24:35 | 显示全部楼层 |阅读模式

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

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

×
在使用boundary是,遇到一个问题,就是要选择多义线内部一点。据此产生一个想法,就是有没有一个点,这个点一定在闭合多义线内(跟多义线形状无关),如有,该怎样求出来。请各位大侠、版主,高人各显神通,不吝赐教。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 7333个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

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

使用道具 举报

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-5-9 12:39:06 | 显示全部楼层
newer 发表于 2013-5-9 12:28
直接求多义线型心不就得了?

型心也不一定在内部的,看下面图形。

[pcode=lisp,true]
;;;-----------------------------------------------------------;;
;;; 向量乘标量(系数)                                              ;;
;;; Vector x Scalar - Lee Mac                                      ;;
;;; Args: v - vector in R^n, s - real scalar                      ;;
;;;-----------------------------------------------------------;;
(defun MAT:vxs ( v s )
  (mapcar (function (lambda ( n ) (* n s))) v)
)
(defun GEO:Centroid (Pts / )
  (MAT:vxs (apply 'mapcar (cons '+ pts)) (/ 1.0 (length pts)))
)
[/pcode]

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-5-9 12:41:13 | 显示全部楼层
GTJ116600 发表于 2013-5-9 12:36
多义线型心一定在多义线内部么

呵呵,楼主,用一个笨方法试试,你用第一个顶点和其他所有点循环求中点,判断下这个中点是否在多边形内部,找到一个就终止循环。这算法不复杂,但肯定应该有一个中点在内部。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-5-9 12:43:34 | 显示全部楼层
本帖最后由 牢固 于 2013-5-9 12:45 编辑

可采用vla-ofset偏移的方法进行迭代运算,当偏移后的多段线面积接近0时,该多段线的中心点就是封闭曲线最大区域的中心位置点!代码写起来也会很简单!尝试按这个思路写一个吧!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-9 13:31:36 | 显示全部楼层
牢固 发表于 2013-5-9 12:43
可采用vla-ofset偏移的方法进行迭代运算,当偏移后的多段线面积接近0时,该多段线的中心点就是封闭曲线最大 ...

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-5-9 13:47:26 | 显示全部楼层
GTJ116600 发表于 2013-5-9 13:31
谢谢固版主,这个方法非常好。暨简单,又容易

求 Pline 的BOX , 然后画一个对角线,这个对角线和 Pline 求  Intersectwith , 自己找一个规律, 取其中两个点的中点就肯定在 Pline 内部了(比如第一个和第二个)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-5-9 13:58:21 | 显示全部楼层
GTJ116600 发表于 2013-5-9 13:31
谢谢固版主,这个方法非常好。暨简单,又容易

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

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2013-5-9 16:54:31 | 显示全部楼层
本帖最后由 GTJ116600 于 2013-5-9 17:00 编辑

呵呵,感谢各位大侠,感谢各位版主。问题得到解决。利用
(vla-offset obj dist)函数,只要dist 是正值就向多义线内部偏移,负值就向多义线外部偏移。通过偏移后的实体就容易得到偏移后的多义线内部点了。对任何类型的多义线都适用。:lol:lol:lol

具体内容参看
(vla-Offset myline dist)

  • Object : Arc, Circle, Ellipse, Line, LightweightPolyline, Polyline, Spline, XLine
    The object or objects this method applies to.
  • Distance : Double; input-only
    The distance to offset the object. The offset can be a positive or negative number, but it cannot equal zero. If the offset is negative, this is interpreted as being an offset to make a "smaller" curve (that is, for an arc it would offset to a radius that is "Distance less" than the starting curve's radius). If "smaller" has no meaning, then it would offset in the direction of smaller X, Y, and Z WCS coordinates.
  • RetVal : Variant (array of objects)
    An array of the newly created objects resulting from the offset

具体程序,随后附上

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

使用道具 举报

 楼主| 发表于 2013-5-9 17:08:09 | 显示全部楼层
GTJ116600 发表于 2013-5-9 16:54
呵呵,感谢各位大侠,感谢各位版主。问题得到解决。利用
(vla-offset obj dist)函数,只要dist 是正值就向 ...

[pcode=lisp,true](defun get-pl-ptlist(entname)
        (setq entlist (entget entname))
        (setq n 0 ptlists nil ent_list t)
        (while ent_list
             (setq en (nth n entlist))
             (if (= (car en) 10)
                 (setq ptlist (cdr en))
             )
             (setq n (1+ n) ent_list (nth n entlist))
       )
       (princ ptlist)
)         
(defun c:getinpt()
       (vl-load-com)
       (setq ent (car (entsel "\n请选择要偏移的实体")))
       (setq obj (vlax-ename->vla-object ent))
       (setq dist 10)
       (setq obj1 (vla-offset obj dist))
       (princ obj1)      
       (get-pl-ptlist (entlast))
       (princ)
)[/pcode]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2013-5-13 00:21:29 | 显示全部楼层
GTJ116600 发表于 2013-5-9 17:08
(defun get-pl-ptlist(entname)
        (setq entlist (entget entname))
        (setq n 0 ptlists ...

如果不够向里面偏移时,程式会出错:请选择要偏移的实体ERROR ==> Automation 错误。未提供说明。.layer

评分

参与人数 1D豆 +2 收起 理由
XDSoft + 2 技术引导讨论和指点奖!

查看全部评分

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-5-13 01:00:17 | 显示全部楼层
GTJ116600 发表于 2013-5-9 17:08
(defun get-pl-ptlist(entname)
        (setq entlist (entget entname))
        (setq n 0 ptlists ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 12:15 , Processed in 0.556258 second(s), 68 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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