找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2609|回复: 7

[LISP函数]: 获得一个*POLYLINE线上指定一点处的“段”的信息。

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-10-4 20:02:02 | 显示全部楼层 |阅读模式

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

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

×

  1. ;|
  2.    用法:(xdl-pl-getSegAt <多义线Object> <测试点>)
  3.    获得一个*POLYLINE线上指定一点处的“段”的信息。
  4.    对于直线段返回:("kLine" 前后顶点索引 起点 终点)
  5.    对于弧线段返回:("kArc" 前后顶点索引 圆心 起点 终点) [逆时针方向]
  6.    所有返回点在WCS下。
  7. |;
  8. (defun xdl-pl-GetSegAt (obj p / pn pa p1 p2 pcen v)
  9.   (setq        pn (vlax-curve-getclosestpointto obj (trans p 1 0))
  10.         pa (fix (vlax-curve-getparamatpoint obj pn))
  11.         p1 (vlax-curve-getpointatparam obj pa)
  12.         p2 (vlax-curve-getpointatparam obj (1+ pa))
  13.   )
  14.   (if (zerop (vla-getbulge obj pa))
  15.     (list "kLine" (list pa (1+ pa)) p1 p2)
  16.     (progn
  17.       (setq v         (vlax-curve-getsecondderiv obj pa)
  18.             pcen (mapcar '+ p1 v)
  19.       )
  20.       (if (equal (distance pcen p1) (distance pcen p2) 0.000001)
  21.         (list "kArc" (list pa (1+ pa)) pcen p1 p2)
  22.         (list "kArc" (list pa (1+ pa)) (mapcar '- p1 v) p2 p1)       
  23.       )
  24.     )
  25.   )
  26. )

测试

  1. (defun c:tt (/ e l)
  2.   (if (setq e (entsel "\nPick Pline: "))
  3.     (progn
  4.       (setq
  5.         l (xdl-pl-GetSegAt (vlax-ename->vla-object (car e)) (cadr e))
  6.       )
  7.       (command ".line" (nth 2 l) (nth 3 l) "")
  8.     )
  9.   )
  10.   (princ)
  11. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-10-5 08:06:55 | 显示全部楼层
个人认为,用bulge判断反弧更科学一点。

  1. (setq blg (vla-getbulge obj pa))
  2. (if (zerop  blg)
  3.    (list "kLine" (list pa (1+ pa)) p1 p2)
  4.     (progn
  5.       (setq v         (vlax-curve-getsecondderiv obj pa)
  6.             pcen (mapcar '+ p1 v)
  7.       )
  8.       (if (> blg 0)
  9.         (list "kArc" (list pa (1+ pa)) pcen p1 p2)
  10.         (list "kArc" (list pa (1+ pa)) (mapcar '- p1 v) p2 p1)       
  11.       )
  12.     )
  13.   )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-25 14:39:18 | 显示全部楼层
多谢斑竹了,POLYLINE线上指定一点处的“段”的信息这个函数正是我非常需要的,很实用,我的一些小程序可以大为“进化”。本想自已编一个类似函数,但现在不必了,再次感谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-25 21:37:00 | 显示全部楼层
我根据这个改进了一个我们单位经常用到的小程序,但很多人都在用R14,不知道可不可以用lisp实现同样功能?在R14下运行?非常期待!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-8-17 22:14:35 | 显示全部楼层
在AutoCAD2006中,有个“Pick Pline: ; 错误: no function definition: VLAX-ENAME->VLA-OBJECT”这样的错误提示,这是什么原因呢?!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-10-3 07:23:30 | 显示全部楼层
  1. (defun segdetail ()
  2.   (setq ent (entsel "\nPick Polyline:")
  3.           p (cadr ent)
  4.         ent (car ent))  
  5.   (setq pp (vlax-curve-getclosestpointto ent (trans p 1 0))
  6.          n (fix (vlax-curve-getparamatpoint ent pp)))
  7.   (setq ll (acet-pline-segment-list ent))
  8.   (list (nth n (car ll))(nth (1+ n)(car ll))(nth n (cadr ll))(nth n (caddr ll))(nth n (last ll)))
  9. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-12-17 15:14:26 | 显示全部楼层
eachy斑竹,有问题,
————当此多段线不是闭合多段线时,获得的此多段线的最后一段的信息有点表不全。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 828个

财富等级: 财运亨通

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 12:26 , Processed in 0.444931 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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