乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 83|回复: 3

[编程交流] 确定Poi之间的距离

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 16:07:02 | 显示全部楼层 |阅读模式
大家好,
 
附加的lisp由AlanThompson编写,然后由另一个开发人员修改。
 
该lisp计算沿对象(直线、圆、圆弧、多段线、样条曲线等)的两点之间的距离,并将距离写入第二个点。
 
但是,在同一个对象上使用此lisp 2次或以上时,需要花费太多时间。因为您必须重新启动每个点对的过程。
 
这个lisp可以这样升级吗;
首先,我们将选择一个对象的起点,
然后lisp将在第n点上写出起点和第n点之间的距离。
 
因此,我们将只选择一次起点,然后lisp将在单击对象的所有后续点上写入距离。
 
谢谢你的帮助,
 
点之间的距离2。rar公司
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 16:41:36 | 显示全部楼层
 
首选WHILE函数
  1. [color="red"][b]([/b][/color][color="blue"]while[/color]
  2.           (AT:DrawX (setq p2 (getpoint p1 "\nSpecify next point on curve: ")) 3)
  3. ...
  4. ...
  5. [color="red"][b])[/b][/color]
  6. (princ)
回复

使用道具 举报

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 17:03:46 | 显示全部楼层
亲爱的韩,谢谢你的帮助。
 
我修改了代码,但它没有工作。我想我把它改错了。
我已附上修改后的代码。
 
点之间的距离3。rar公司
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 17:26:49 | 显示全部楼层
 
没有担心失败,仍然很好,至少你迈出了第一步尝试:)
 
您可以将代码粘贴到代码标记中
  1. [/color][color=“darkgreen”]此处编码[/color][color=“red”]
(无空格斜杠)[code](定义c:DBP3(/AT:DrawX AT:CycleThroughSS p1 ent p2 d1 d2 dlst);;计算曲线对象上两个指定点之间的距离;;Alan J.Thompson,03.20.10/03.28.10/03.07.11/05.09.11(vl load com)(defun AT:DrawX(P C);;在指定点绘制和“X”向量;;P——“X”的放置点;;C-X的颜色(必须是整数b/w 1和255);;Alan J.Thompson,10.31.09(if(vl consp P)((lambda(d)(grvecs(cons C(mapcar(function(lambda(n)(polar P(*n pi)d)))'(0.25 1.25 0.75 1.75)))P)(*(getvar’viewsize)0.02))(defun AT:CycleThroughSS(ss/l i e);;循环选择一个选择集;;ss—选择集;;艾伦·J·汤普森,03.30.11(if(eq(type ss)'PICKSET)(if(eq(setq l(sslength ss))1)(ssname ss 0)(progn(princ“\n to cycle through entities:”)(redraw(setq e(ssname ss(setq i 0)))3)(while(eq(cadr(grread nil 10))9)(mapcar'redraw(list e(setq e(ssname ss(setq i(rem(1+i)l k))))'(4 3))(redraw e 4)e)))(重画)(if(and(AT:DrawX(setq p1(getpoint“\n指定曲线上的第一个点:”)3)(或(setq ent(AT:CycleThroughSS(ssget“\u C”(list(car p1)(cadr p1))(list(car p1)(cadr p1))'((0。“弧、圆、椭圆、线、*多段线、样条曲线”))))(progn(警告“点必须在曲线上!”)(redraw))(progn(redraw ent 3)T))(while(AT:DrawX(setq p2(getpoint p1“\n指定曲线上的下一个点:”)3)(或(and(ssget“_C”(list(car p2)(cadr p2))(list(car p2)(cadr p2))'((0。“弧,圆,椭圆,线,*多段线,样条曲线”))(setq d1(vlax curve getDistAtPoint ent(trans p1 1 0)))(setq d2(vlax curve getDistAtPoint ent(trans p2 1 0)))(progn(警报“点必须在曲线上!”)(重画))((lambda(dist/div)(while(<dist(-(cadr dlst)(setq div(/(cadr dlst)100)))(grdraw(trans(vlax curve getPointAtDist ent dist)0 1)(trans(vlax curve getPointAtDist ent(setq dist(+div dist)))0 1)1))(princ);;;(命令“_.text”p2“”(rtos(abs(-d1 d2)))(entmakex(list’(0。“text”)(cons 1(rtos(abs(-d1 d2))2))(cons 10(trans p2 1 0))(cons 40(getvar‘textsize)))(car(setq dlst(vl sort(list d1 d2)))(函数
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 19:41 , Processed in 0.517483 second(s), 60 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表