明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: ysq101

[已解答] 程序卡壳了。。求思路。。高手指点一二

[复制链接]
发表于 2014-12-17 22:45 | 显示全部楼层
不用计较那是直线起点还是终点,只管曲线起止点分别到选出来的线的最近点中距离小的那个点就是对的,再加上曲线本身的中点
发表于 2014-12-17 22:49 | 显示全部楼层
ysq101 发表于 2014-12-17 19:35
这个方法确实可以。。。。谢谢大师指点。。
其实我最后还是用了osnap来捕捉END点
因为测试时将视图方大 ...

视图大小限制确实存在,不过在需要手工选择那条曲线的情况下,至少曲线本身在视图范围内,大不了选好曲线后略微缩小视图。。。
 楼主| 发表于 2014-12-18 22:33 | 显示全部楼层
llsheng_73 发表于 2014-12-17 22:45
不用计较那是直线起点还是终点,只管曲线起止点分别到选出来的线的最近点中距离小的那个点就是对的,再加上 ...

话说VLX系列函数有直接得出曲线  中点  的吗??求指教
VLX函数还没学会几个呢
发表于 2014-12-19 08:42 | 显示全部楼层
ysq101 发表于 2014-12-18 22:33
话说VLX系列函数有直接得出曲线  中点  的吗??求指教
VLX函数还没学会几个呢

  1. (vlax-curve-getPointAtDist curve-obj(*(vlax-curve-getDistAtParam curve-obj(vlax-curve-getEndParam curve-obj))0.5));;中点
  2. (vlax-curve-getStartPoint curve-obj);;起点
  3. (vlax-curve-getEndPoint curve-obj);止点
 楼主| 发表于 2014-12-19 23:09 | 显示全部楼层
llsheng_73 发表于 2014-12-19 08:42

谢谢大师指点...
 楼主| 发表于 2014-12-25 12:33 | 显示全部楼层
llsheng_73 发表于 2014-12-19 08:42

谢谢大师指点。。
我的程序已经完成了。。
唯一的不好的就是用COMMAND  ARC来完成
我想知道一下用MAKE能生成3点圆弧吗??
 楼主| 发表于 2014-12-25 12:35 | 显示全部楼层
llsheng_73 发表于 2014-12-19 08:42

谢谢大师指点。。
我的程序已经完成了。。
唯一的不好的就是用COMMAND  ARC来完成
我想知道一下用MAKE能生成3点圆弧吗??
发表于 2014-12-25 20:41 | 显示全部楼层
本帖最后由 llsheng_73 于 2014-12-25 20:42 编辑
ysq101 发表于 2014-12-25 12:35
谢谢大师指点。。
我的程序已经完成了。。
唯一的不好的就是用COMMAND  ARC来完成

可以根据3点计算出圆心,进而求出半径,起始角度,终止角度
最后
(entmakex(list '(0 . "ARC")'(100 . "AcDbCircle")(cons 10 p)(cons 40 R)(cons 50 ang1)(cons 51 ang2)))

具体100组是否必须或者还需要'(100 . "AcDbArc")可自己测试

根据3点计算圆心很多人都写过,我也写过,估计你自己也有,如果没有,下边这个我写的可供参考
三点计算圆心(没考虑Z坐标)
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=108427&fromuid=202795
 楼主| 发表于 2014-12-25 21:18 | 显示全部楼层
llsheng_73 发表于 2014-12-25 20:41
可以根据3点计算出圆心,进而求出半径,起始角度,终止角度
最后
(entmakex(list '(0 . "ARC")'(100 .  ...

我明白大师你的意思了。。谢谢指点
当选到条样线的时候你不知道哪个起点哪个终点呀
像下图(其实不管什么图)都需要IF起角和终角

这个有难度呀

本帖子中包含更多资源

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

x
发表于 2014-12-26 15:01 | 显示全部楼层
本帖最后由 llsheng_73 于 2014-12-26 16:11 编辑
ysq101 发表于 2014-12-25 21:18
我明白大师你的意思了。。谢谢指点
当选到条样线的时候你不知道哪个起点哪个终点呀
像下图(其实不管什 ...

一个最简单的办法是如果中间那个点不在生成出来的ARC上,说明三个点的顺序需要反过来也就是起止角要反过来,当然,实际上是需要事先判断三个点的顺时针方向还是逆时针方向。。。这样经过事先判断后就可以确定起点、止点应该是哪一个。。。
  1. (defun Pldir(pts)
  2.   (<(apply'+(mapcar'(lambda(x y)(-(*(car x)(cadr y))(*(car y)(cadr x))))(cons(last pts)pts)pts))0))
  3. (defun 3pcen(p1 p2 p3);;根据给定3点求圆心,如果三点共直线返回nil,否则返回一个二维点
  4.   (setq p1(list(/(+(car p1)(car p2))2)(/(+(cadr p1)(cadr p2))2))
  5. p3(list(/(+(car p2)(car p3))2)(/(+(cadr p2)(cadr p3))2))
  6. p3(inters p1(polar p1(+(/ pi 2)(angle p1 p2))1)
  7.     p3(polar p3(+(/ pi 2)(angle p3 p2))1)nil))
  8.    )
  9. (defun 3parc(p1 p2 p3 / p f);;根据不共直线的三个点绘制ARC返回图元名,如果p1 p2 p3共直线返回nil
  10.   (if(setq f(pldir(list p1 p2 p3))p(3pcen p1 p2 p3))
  11.     (entmakex(list'(0 . "ARC")(cons 10 p)(cons 40(distance p p1))(cons 50 (angle p(if f p3 p1)))(cons 51 (angle p(if f p1 p3)))))
  12.     )
  13.   )
  14. (defun c:tt()
  15.   (3parc(getpoint)(getpoint)(getpoint)))

上边的3parc里边就根据了p1 p2 p3这三个点的方向来决定应该用哪一个点计算起始角度,相应的用另一个点计算终止角

评分

参与人数 1明经币 +1 收起 理由
ysq101 + 1 赞一个!

查看全部评分

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-3 12:49 , Processed in 0.542327 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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