找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1185|回复: 13

[已解决] 有获取多段线上的非顶点的任意一点位于哪两个顶点之间的api函数吗?

[复制链接]

已领礼包: 202个

财富等级: 日进斗金

发表于 2020-8-18 17:21:59 | 显示全部楼层 |阅读模式
悬赏20D豆已解决

最佳答案

查看完整内容

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

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-8-18 17:22:00 | 显示全部楼层
dyjwyqz5221 发表于 2020-8-18 17:53
(defun get::on:Vertices(pt e / seg pts)       
        (setq seg (xdrx-getpropertyvalue e "segat" (trans pt 1 0) ...

(xdrx-getpropertyvalue (entlast) "onsegat" (getpoint))
(2 2.36792)

点评

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

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2020-8-18 17:53:08 | 显示全部楼层
(defun get::on:Vertices(pt e / seg pts)       
        (setq seg (xdrx-getpropertyvalue e "segat" (trans pt 1 0))
                pts (xdrx-getpropertyvalue seg "get")
        );;;setq
        (mapcar
                '(lambda(x)
                        (xdrx-polyline-nearindex e x)
                );;;lambda
                pts
        );;;mapcar
)

这样可以找到是位于哪两个顶点之间

点评

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

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2020-8-19 08:15:35 | 显示全部楼层
newer 发表于 2020-8-18 18:27
(xdrx-getpropertyvalue (entlast) "onsegat" (getpoint))
(2 2.36792)

返回结果中,两个数值分别代表什么?

点评

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

使用道具 举报

已领礼包: 511个

财富等级: 财运亨通

发表于 2020-8-19 08:53:24 | 显示全部楼层
(defun par-coo(ent pt / par coo)
   (setq par (vlax-curve-getParamAtPoint ent (vlax-curve-getclosestpointto ent pt))
         coo (vlax-get (vlax-ename->vla-object ent) 'Coordinates))
   (cond ((= (vlax-get (vlax-ename->vla-object ent) 'ObjectName) "AcDbPolyline")
          (list (mapcar '(lambda(x) (nth (+ x (* 2 (fix par))) coo)) '(0 1))
                (mapcar '(lambda(x) (nth (+ x (* 2 (fix par))) coo)) '(2 3))))
         ((= (vlax-get (vlax-ename->vla-object ent) 'ObjectName) "AcDb3dPolyline")
          (list (mapcar '(lambda(x) (nth (+ x (* 3 (fix par))) coo)) '(0 1 2))
                (mapcar '(lambda(x) (nth (+ x (* 3 (fix par))) coo)) '(3 4 5))))))
;参数 ent-对象名 pt-对象上的点
;返回 pt前后两端点组成的表
;lwpolyline返回((27278.4 12377.8) (28993.2 14707.0))
;3dPolyline返回((24363.3 10185.5 0.0) (26078.1 10802.1 0.0))

(defun c:tt  ();测试
   (setq e  (entsel "选择polyline")
         pt (cadr e)
         e  (car e)
         pt (vlax-curve-getclosestpointto e pt))
   (print (par-coo e pt))
   (princ))

点评

谢谢了,看来方法还是很多的。  详情 回复 发表于 2020-8-19 09:25

评分

参与人数 1D豆 +20 收起 理由
XDSoft + 20 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2020-8-19 09:25:46 | 显示全部楼层
pxr201419 发表于 2020-8-19 08:53
(defun par-coo(ent pt / par coo)
   (setq par (vlax-curve-getParamAtPoint ent (vlax-curve-getcloses ...

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

使用道具 举报

已领礼包: 8612个

财富等级: 富甲天下

发表于 2020-8-19 10:28:56 | 显示全部楼层
从各位大师那里总结的,你测试一下,我用方法5,挺好的。1、(xdrx-getpropertyvalue e "divide" 1 t)
2、(xdrx-entity-getproperty (xdrx-getpropertyvalue e "allsegs") "get")
3、(xdrx-entity-getproperty (xdrx-getpropertyvalue e "allsegs") "startpoint" "endpoint")
4、(xd::list:snakepair (xdrx-getpropertyvalue e "vertices"))
5、(setq seg (xdrx-getpropertyvalue e "segat" (trans pt 1 0)))
     (xdrx-getpropertyvalue seg "get")
6、(setq inx   (XD::Polyline:OnSegAt e pt)
         inx1  (XD::PolyLine:-Index+ e inx)
         ps    (xdrx_getpropertyvalue e "PointAt" inx)
         pe    (xdrx_getpropertyvalue e "PointAt" (last inx1))
     )


点评

(setq inx (XD::Polyline:OnSegAt e pt) inx1 (XD::PolyLine:-Index+ e inx) ps (xdrx_getpropertyvalue e "PointAt" inx) pe (xdrx_getpropertyvalue e "PointAt" (last in  详情 回复 发表于 2020-8-19 13:19
这几种方法里面也就只有5、6能求出位于哪两点或索引点之间,其他都求不出来,没有pt点。  详情 回复 发表于 2020-8-19 12:00

评分

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

查看全部评分

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

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2020-8-19 12:00:59 | 显示全部楼层
liuyj 发表于 2020-8-19 10:28
从各位大师那里总结的,你测试一下,我用方法5,挺好的。1、(xdrx-getpropertyvalue e "divide" 1 t)
2、( ...

这几种方法里面也就只有5、6能求出位于哪两点或索引点之间,其他都求不出来,没有pt点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 8612个

财富等级: 富甲天下

发表于 2020-8-19 13:00:30 | 显示全部楼层
求出每段的两个端点,列个表,判断一下选的点在那个点对中间不就行了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 202个

财富等级: 日进斗金

 楼主| 发表于 2020-8-19 13:03:22 | 显示全部楼层
(xdrx-getpropertyvalue (entlast) "onsegat" (getpoint))最便捷
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-8-19 13:19:54 | 显示全部楼层
liuyj 发表于 2020-8-19 10:28
从各位大师那里总结的,你测试一下,我用方法5,挺好的。1、(xdrx-getpropertyvalue e "divide" 1 t)
2、( ...

(setq inx   (XD::Polyline:OnSegAt e pt)
         inx1  (XD::PolyLine:-Index+ e inx)
         ps    (xdrx_getpropertyvalue e "PointAt" inx)
         pe    (xdrx_getpropertyvalue e "PointAt" (last inx1))
     )
上面这些,用:

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2020-8-19 13:21:28 | 显示全部楼层
dyjwyqz5221 发表于 2020-8-19 08:15
返回结果中,两个数值分别代表什么?

第一参数是所在段的起始顶点, 第二个参数是 点所在位置的参数值

评分

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

查看全部评分

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

使用道具 举报

已领礼包: 226个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 3904个

财富等级: 富可敌国

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 20:17 , Processed in 0.617231 second(s), 55 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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