找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 10434|回复: 44

[求助] 关于vlax-curve-getPointAtDist捕捉点问题

[复制链接]

已领礼包: 449个

财富等级: 日进斗金

发表于 2013-8-25 20:35:18 | 显示全部楼层 |阅读模式

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

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

×
我想等分平分圆弧。用vlax-curve-getPointAtDist函数来捕捉,首先得出每段距离,然后得出全部点。再与圆心得相角度,然后用来生成圆弧!可是有可能是得出每段距离时有着误差,最后一次捕捉点好像根本就不存在一样,请各位高手们指点一下,代码如下:
  1. (defun c:tt (/)
  2.   (vl-load-com)
  3.   (setq dqwgs (getint "\n请输入桥位的个数:"))
  4.   (setq cqw 4.
  5.         cqwgs dqwgs
  6.   )
  7.   (prompt "\n请选择:")
  8.   (setq zccqwss (ssget '((8 . "0") (-4 . "<or")
  9.                         (0 . "CIRCLE")
  10.                         (0 . "ARC")
  11.                         (0 . "LINE")
  12.                         (-4 . "or>")
  13.                        )
  14.                 )
  15.   )
  16.   (setq zccqwn 0)
  17.   (repeat (sslength zccqwss)
  18.     (setq ent (ssname zccqwss zccqwn))
  19.     (setq qwentget (entget ent))       ; 取得每一个选集中的图元名属性
  20.     (cond
  21.       ((= (cdr (assoc 0 qwentget)) "ARC")
  22.         (setq zhobj (vlax-ename->vla-object ent)) ; 转换为VLA对象
  23.         (setq cen1 (Vlax-Get zhobj 'Center)) ; 取得圆心
  24.         (setq rr1 (vlax-get zhobj 'Radius)) ; 取得半径
  25.         (setq arclen (vla-get-ArcLength zhobj))        ; 得到圆弧总长度
  26.         (setq arcdist (/ (- arclen (* cqw cqwgs)) (1+ cqwgs))) ; 得出每段距离
  27.         (setq arcstart (vlax-curve-getstartpoint zhobj)) ; 得出起点
  28.         (setq arcpt1 (vlax-curve-getPointAtDist zhobj arcdist))        ; 得出初始终点
  29.         (setq arccdist (+ arcdist cqw))        ; 初始距离
  30.         (repeat (1+ cqwgs)
  31.           (setq arc50 (angle cen1 arcstart)) ; 得出圆弧起点角度;注意是以圆心为起点测试角度
  32.           (setq arc51 (angle cen1 arcpt1)) ; 得出圆弧终点角度
  33.           (entmake (list (cons 0 "ARC") (cons 10 cen1) (cons 40 rr1) (cons 50 arc50) (cons 51 arc51)))
  34.           (setq arcstart (vlax-curve-getPointAtDist zhobj arccdist))
  35.           (setq arcpt1 (vlax-curve-getPointAtDist zhobj (+ arcdist arccdist)))
  36.           (setq arccdist (+ arccdist arccdist))        ; 是不是最后一次捕捉点不到?每一段的距离算多了么
  37.                                        ; 请指点
  38.         )
  39.         (entdel (vlax-vla-object->ename zhobj))        ; 这里就执行不了啦
  40.       )                                       ; ======
  41.     )
  42.     (setq zccqwn (1+ zccqwn))
  43.   )
  44. )
出现以下几种情况,不知道是为什么?

出现情况

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

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-31 14:38:03 | 显示全部楼层
xtdwynij 发表于 2013-8-31 14:24
cqw为间距  cqwgs 为分段个数  间距为4个MM,分为四段。分为五段测试一样也是不行的!返回值为NIL (分段 ...

你要是用点取判断的话,那么必须保证点在弧线上,如果用参数去判断的话,必须保证参数在曲线上,所以,每次你循环取点的时候,加个代码,如果是点,去下点到弧线的最近点,用最近点取操作,如果用参数,在终止的时候,判断下是否和弧线的终点参数一样,不一样,取弧线的终点参数,因为浮点数有误差。

点评

我也觉得是有误差造成的!但是取最近点的话用VLISP函数么?版主能不能给个简单的例子学习一下?  详情 回复 发表于 2013-8-31 14:54
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

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

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-8-25 20:57:22 | 显示全部楼层

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-8-25 21:32:11 来自手机 | 显示全部楼层
先判断同心,再判断孰长孰短,应该是找出夹角最小的两个端点吧来自: Android客户端

评分

参与人数 1D豆 +5 收起 理由
xtdwynij + 5 不大懂夹点,可否给个代码看一下呢?

查看全部评分

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-8-25 21:51:28 | 显示全部楼层
eachy 发表于 2013-8-25 21:49
是不是把弧均分为几段,中间留缺口?

是啊!可是得出来的每段值可以太多了,最后一个点得不到,也不知道为什么?总是出错!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-25 22:14:33 | 显示全部楼层
xtdwynij 发表于 2013-8-25 21:51
是啊!可是得出来的每段值可以太多了,最后一个点得不到,也不知道为什么?总是出错!

楼主,SSGET部分的,为什么要这样写:

  1. (ssget '((8 . "0")(-4 . "<or") (0 . "CIRCLE") (0 . "ARC") (0 . "LINE") (-4 . "or>")))


而不是

  1. (ssget '((8 . "0")(0 . "line,circle,arc")))

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

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-8-25 22:25:16 | 显示全部楼层
newer 发表于 2013-8-25 22:14
楼主,SSGET部分的,为什么要这样写:

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-25 22:41:55 | 显示全部楼层
xtdwynij 发表于 2013-8-25 22:25
经验不足,不知道还可以这样写的!!都是有空的时候才写的!谢谢指点!

那以后就能记住了吧。

你这个问题,你想等分圆弧,然后在等分点位置再断开一段?

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

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-8-25 22:45:11 | 显示全部楼层
newer 发表于 2013-8-25 22:41
那以后就能记住了吧。

你这个问题,你想等分圆弧,然后在等分点位置再断开一段?

记得了,教一点就学一点!呵呵!用多段线或者圆在等分点上画。然后再统一删除。不过这样很麻烦!如果这样来生成程序的话也会慢一点!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-25 22:54:27 | 显示全部楼层
xtdwynij 发表于 2013-8-25 22:45
记得了,教一点就学一点!呵呵!用多段线或者圆在等分点上画。然后再统一删除。不过这样很麻烦!如果这样 ...

这是一种思路,也是一种编程方法,能让CAD做的让他做,免去你很多计算。能解决你这问题的方法有多种,效率都应该一样。

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

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

 楼主| 发表于 2013-8-25 22:55:31 | 显示全部楼层
Free-Lancer 发表于 2013-8-25 22:50
前几天刚有过讨论等分圆弧的,也留一个缺口

各个圆弧上的点我都能够得出来,但总得觉得太慢了,还是生成较快!这个就是用来生成的,但终点我就得不到了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 449个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-26 11:12:53 | 显示全部楼层
xtdwynij 发表于 2013-8-26 10:46
假如用生成来完成的话要怎么搞呢?

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 06:23 , Processed in 0.233156 second(s), 65 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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