乐筑天下

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

[编程交流] autolisp多段线计算

[复制链接]

41

主题

120

帖子

84

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
200
发表于 2022-7-5 16:57:50 | 显示全部楼层 |阅读模式
你好
我想创建一个列表,如下图所示
使用AutoLISP时如何计算长度和角度

                               
登录/注册后可看大图

我将非常感谢您的建议。
我认为我最大的问题是坐标变换。
175759mi1fwd1byrmrdneb.png
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:21:17 | 显示全部楼层
一个简单的方法可能很有用,制作一个pline的副本,将所有半径设置为零,然后你可以很容易地得到坐标并计算出所有值。
 
  1. ; copy object using entmake where is it put it here
  2. (command "_.fillet" "_r" 0.0 "_.fillet" "_polyline" (entlast))

 
 
  1. ; pline co-ords example
  2. ; By Alan H
  3. (defun getcoords (ent)
  4. (vlax-safearray->list
  5.    (vlax-variant-value
  6.      (vlax-get-property
  7.    (vlax-ename->vla-object ent)
  8.    "Coordinates"
  9.      )
  10.    )
  11. )
  12. )
  13. (defun co-ords2xy ()
  14. ; convert now to a list of xy as co-ords are x y x y x y if 3d x y z x y z
  15. (setq len (length co-ords))
  16. (setq numb (/ len 2)) ; even and odd check required
  17. (setq I 0)
  18. (repeat numb
  19. (setq xy (list (nth i co-ords)(nth (+ I 1) co-ords) ))
  20. ; odd (setq xy (list (nth i co-ords)(nth (+ I 1) co-ords)(nth (+ I 2) co-ords) ))
  21. (setq co-ordsxy (cons xy co-ordsxy))
  22. (setq I (+ I 2))
  23. )
  24. )
  25. ; program starts here
  26. (setq obj (entmake (entget (car (entsel))))) ; makes a copy of the entity
  27. (command "_.fillet" "_r" 0.0 "_.fillet" "_polyline" (entlast))
  28. ;(setq co-ords (getcoords (car (entsel "\nplease pick pline"))))
  29. (setq co-ords (getcoords (car (entlast)))) ;changed for this post
  30. (co-ords2xy) ; list of 2d points making pline
  31. ; do your thing here re measurements
  32. (command "_.Erase" "" obj)
回复

使用道具 举报

41

主题

120

帖子

84

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
200
发表于 2022-7-5 17:32:35 | 显示全部楼层
你好
非常酷的想法:(命令“_.fillet”“\u r”*0.0“\u.fillet”“\u polyline”(entlast))
 
然而,我不会更改图纸中的任何内容。
我想用“inters”写一个函数
回复

使用道具 举报

46

主题

161

帖子

104

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
242
发表于 2022-7-5 17:40:10 | 显示全部楼层
您的示例pline有10个顶点。
第一:
在顶点1-2和顶点3-4之间的第二条线之间绘制温度线,当你得到这个值时,用以下公式计算点2的坐标:
http://www.lee-mac.com/intersectionfunctions.html和实用程序扩展两者
当你得到点2时,你可以得到角度:
https://www.theswamp.org/index.php?topic=41621.msg467214#msg467214
然后对pline的其他段重复上述操作。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 17:48:22 | 显示全部楼层
一些人认为:
  1. [color=#8b4513]; eoh - entity / vla-object / handle [b][color=BLACK]([/color][/b] MultiSegment polyline [b][color=BLACK])[/color][/b][/color]
  2. [color=#8b4513]; mDeg - if T returns degrees else radians[/color]
  3. [color=#8b4513]; Returns: assoc list of dotted pairs, where each item is: [b][color=BLACK]([/color][/b]< Length > . < Angle >[b][color=BLACK])[/color][/b] ; for every segment of the curve[/color]
  4. [b][color=BLACK]([/color][/b]defun PlineInfo [color=#8b4513];| Written by: Grrr, credits to: Lee Mac, Tharwat |; [b][color=FUCHSIA]([/color][/b] eoh mDeg / handobj GetLength RTD eo objs Lst [b][color=FUCHSIA])[/color][/b][/color]
  5. [b][color=FUCHSIA]([/color][/b]defun handobj [b][color=NAVY]([/color][/b] hand [b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]vlax-ename->vla-object [b][color=MAROON]([/color][/b]handent hand[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  6. [b][color=FUCHSIA]([/color][/b]defun GetLength [b][color=NAVY]([/color][/b] eo / prm [b][color=NAVY])[/color][/b]
  7.         [b][color=NAVY]([/color][/b]if [b][color=MAROON]([/color][/b]not [b][color=GREEN]([/color][/b]vl-catch-all-error-p [b][color=BLUE]([/color][/b]setq prm [b][color=RED]([/color][/b]vl-catch-all-apply 'vlax-curve-GetEndParam [b][color=PURPLE]([/color][/b]list eo[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  8.                 [b][color=MAROON]([/color][/b]vlax-curve-getDistAtParam eo prm[b][color=MAROON])[/color][/b]
  9.         [b][color=NAVY])[/color][/b]
  10. [b][color=FUCHSIA])[/color][/b]
  11. [b][color=FUCHSIA]([/color][/b]defun RTD [b][color=NAVY]([/color][/b]a[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]/ [b][color=MAROON]([/color][/b]* a 180[b][color=MAROON])[/color][/b] PI[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  12. [b][color=FUCHSIA]([/color][/b]cond
  13.         [b][color=NAVY]([/color][/b][b][color=MAROON]([/color][/b]eq 'VLA-OBJECT [b][color=GREEN]([/color][/b]type eoh[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] eoh[b][color=NAVY])[/color][/b]
  14.         [b][color=NAVY]([/color][/b][b][color=MAROON]([/color][/b]eq 'ENAME [b][color=GREEN]([/color][/b]type eoh[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]setq eoh [b][color=GREEN]([/color][/b]vlax-ename->vla-object eoh[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  15.         [b][color=NAVY]([/color][/b][b][color=MAROON]([/color][/b]eq 'STR [b][color=GREEN]([/color][/b]type eoh[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]setq eoh [b][color=GREEN]([/color][/b]handobj eoh[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  16.         [b][color=NAVY]([/color][/b]T [b][color=MAROON]([/color][/b]setq eoh nil[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  17. [b][color=FUCHSIA])[/color][/b]
  18. [b][color=FUCHSIA]([/color][/b]if eoh
  19.         [b][color=NAVY]([/color][/b]progn
  20.                 [b][color=MAROON]([/color][/b]setq objs [b][color=GREEN]([/color][/b]vlax-invoke eoh 'Explode[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  21.                 [b][color=MAROON]([/color][/b]setq Lst
  22.                         [b][color=GREEN]([/color][/b]mapcar 'cons
  23.                                 [b][color=BLUE]([/color][/b]mapcar 'GetLength objs[b][color=BLUE])[/color][/b]
  24.                                 [b][color=BLUE]([/color][/b]mapcar '[b][color=RED]([/color][/b]lambda [b][color=PURPLE]([/color][/b]x / a[b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]setq a [b][color=TEAL]([/color][/b]angle [b][color=OLIVE]([/color][/b]vlax-get x 'EndPoint[b][color=OLIVE])[/color][/b] [b][color=OLIVE]([/color][/b]vlax-get x 'StartPoint[b][color=OLIVE])[/color][/b][b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] [b][color=PURPLE]([/color][/b]if mDeg [b][color=TEAL]([/color][/b]RTD a[b][color=TEAL])[/color][/b] a[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] objs[b][color=BLUE])[/color][/b]
  25.                         [b][color=GREEN])[/color][/b]
  26.                 [b][color=MAROON])[/color][/b]
  27.                 [b][color=MAROON]([/color][/b]mapcar 'vla-Delete objs[b][color=MAROON])[/color][/b]
  28.         [b][color=NAVY])[/color][/b]
  29. [b][color=FUCHSIA])[/color][/b]
  30. Lst
  31. [b][color=BLACK])[/color][/b][color=#8b4513];| defun PlineInfo |; [b][color=BLACK]([/color][/b]or vlax-get-acad-object [b][color=FUCHSIA]([/color][/b]vl-load-com[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b] [b][color=BLACK]([/color][/b]princ[b][color=BLACK])[/color][/b][/color]
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:59:22 | 显示全部楼层
Jan_ek制作一个临时对象不是问题,看看这个。
 
我编辑了之前的帖子,添加了entmake
 
  1. (setq tempobj (entlast))
  2. ... do your thing
  3. (command "erase" tempobj "")
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 14:01 , Processed in 0.492201 second(s), 67 queries .

© 2020-2025 乐筑天下

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