乐筑天下

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

[编程交流] 如何连接直线和圆弧Int

[复制链接]

180

主题

639

帖子

463

银币

中流砥柱

Rank: 25

铜币
897
发表于 2022-7-5 17:50:34 | 显示全部楼层 |阅读模式
我有一个相当简单的任务,我取得了良好的进展,直到。。。
 
任务是提出一个lisp例程,该例程将绘制各种角钢的剖面图。这并不太难,但现在我需要将所有的直线和圆弧连接成一个实体,这样我就可以复制、镜像、移动等等。。。轻松自如。
 
现在,你们所有知道我的“全自动”程序的人都记得,这正是那个。完全自动化。不允许用户输入。也就是说,我已经走了多远:
  1. (defun DrawAngleSection ( pt l1 l2 angThk)
  2. (command-s "._CLAYER" "Angles")
  3. (setq a90 (dtr 90.) a270 (dtr 270.))
  4. (command-s "._LINE"
  5.    (polar pt a270 (- angThk (- angThk 0.0625))) pt (polar pt 0 l1) (polar (polar pt 0 l1) a270 l2) (polar (polar pt 0 (- l2 (- angThk (- angThk 0.0625)))) a270 l1) "")
  6. (command-s "._LINE"
  7.    (polar (polar pt 0 (- angThk 0.0625)) a270 angThk) (polar (polar pt 0 (- l1 (* angThk 2))) a270 angThk) "")
  8. (command-s "._LINE"   
  9.    (polar (polar pt 0 (- l1 angThk)) a270 (* angThk 2)) (polar (polar pt 0 (- l1 angThk)) a270 (- l2 (- angThk 0.0625))) "")
  10. (Arc
  11.    (polar (polar pt 0 (- angThk 0.0625)) a270 (- angThk (- angThk 0.0625)))
  12.    (- angThk 0.0625)
  13.    pi
  14.    a270
  15.    )
  16. (Arc
  17.    (polar (polar pt 0 (- l2 (- angThk (- angThk 0.0625)))) a270 (- l1 (- angThk 0.0625)))
  18.    (- angThk 0.0625)
  19.    pi
  20.    a270
  21.    )
  22. (Arc
  23.    (polar (polar pt 0 (- l1 (* angThk 2))) a270 (* angThk 2))
  24.    angThk
  25.    0
  26.    a90
  27.    )
  28. (setq x (sssetfirst nil (ssget "X" (list (cons 8 (getvar "clayer"))))))
  29. [color=red] ;;; HERE'S WHERE I GET LOST. HOW DO I GATHER ALL THIS UP AND
  30. ;;; CREATE A SINGLE POLYLINE, OR EVEN SHOVE IT INTO A BLOCK
  31. ;;; ANY WAY SO I CAN DO THINGS WITH IT AS A SINGLE OBJECT....  [/color]
  32. (princ)
  33. ); end DrawAngleSection
  34. (defun Arc (cen rad sAng eAng)
  35. (entmakex (list (cons 0 "ARC")
  36.                  (cons 10  cen)
  37.                  (cons 40  rad)
  38.                  (cons 50 sAng)
  39.                  (cons 51 eAng))))
  40. (defun dtr ( deg ) (* pi (/ deg 180.0)))

 
顺便提一下我仍然有工作要做,因为它不适合不等边的角度。
回复

使用道具 举报

0

主题

375

帖子

385

银币

限制会员

铜币
-7
发表于 2022-7-5 17:56:17 | 显示全部楼层
在(setq x(ssgetfirst…)之后添加此行。。。。
要固定不相等的角度,第二行中的最后一点应为
  1. (polar (polar (polar pt 0 l1) a270 l2) 0.0 -0.0625)
,第二条弧的中心点应为
当然,你总是可以走entmake路线
  1. (defun DrawAngleSection ( pt l1 l2 angThk)
  2. (entmakex
  3.    (list
  4.      '(  0 . "LWPOLYLINE")
  5.      '(  8 . "Angles")
  6.      '(100 . "AcDbEntity")
  7.      '(100 . "AcDbPolyline")
  8.      '( 90 . 9)
  9.      '( 70 . 1)
  10.      (list 10 0.0 0.0)
  11.      (list 10 0.0 (* -0.4 angThk))
  12.      (cons 42 (- (sqrt 2.0) 1))
  13.      (list 10 (* 0.6 angThk) (- angThk))
  14.      (list 10 (- l1 (* 2.2 angThk)) (- angThk))
  15.      (cons 42 (- 1 (sqrt 2.0)))
  16.      (list 10 (- l1 angThk) (* -2.2 angThk))
  17.      (list 10 (- l1 angThk) (- (* 0.6 angThk) l2))
  18.      (cons 42 (- (sqrt 2.0) 1))
  19.      (list 10 (- l1 (* 0.4 angThk)) (- l2))
  20.      (list 10 l1 (- l2))
  21.      (list 10 l1 0.0)
  22.      )
  23.    )
  24. (command-s "_move" (entlast) "" "_non" '(0 0 0) "_non" pt)
  25. (sssetfirst nil (ssadd (entlast) (ssadd)))
  26. )
回复

使用道具 举报

180

主题

639

帖子

463

银币

中流砥柱

Rank: 25

铜币
897
发表于 2022-7-5 17:58:22 | 显示全部楼层
谢谢Stefan,实际上我解决了腿不等长的问题。但当我试用entmakex函数时,我到家了。这是千载难逢的需要。我们通常使用一个真正的钢形LISP来做这个东西,但由于是全自动的,我没有那个奢侈。entmakex例程工作正常。
回复

使用道具 举报

0

主题

375

帖子

385

银币

限制会员

铜币
-7
发表于 2022-7-5 18:01:22 | 显示全部楼层
听到这个我很高兴。无论如何,我的Pedit样本是错误的。。。我将更新我的firs replay。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:06:00 | 显示全部楼层
也许有一种不同的方法可以使第一个对象成为pline,然后当你添加直线和圆弧时,使用这个(setq objs(cons(entlast)objs))来创建一个对象名称列表,你可以使用Pedit将它们连接起来。
回复

使用道具 举报

180

主题

639

帖子

463

银币

中流砥柱

Rank: 25

铜币
897
发表于 2022-7-5 18:08:27 | 显示全部楼层
嘿,比格尔,谢谢你的来电。这是AutoCAD最酷的地方之一,它总是有多种方式。但在这里,我想快速解释一下Stefan BMR发布的entmakex方法。我一次只看一行,大部分都懂了。但我唯一能理解的是突起部分。。。明天早上我会详细阅读这些内容。或者在你的星球上,夜晚。。。!
回复

使用道具 举报

180

主题

639

帖子

463

银币

中流砥柱

Rank: 25

铜币
897
发表于 2022-7-5 18:12:40 | 显示全部楼层
好的,现在我看了更多,我看到在一个列表中有一些顶点,可以很容易地绘制另一个适合轮廓的对象。我想要的是顶点#3、#4、#5和#6。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:14:04 | 显示全部楼层
一些pline代码
 
  1. ; 90 mm 25 arc's with straights
  2. (command "pLINE"  p2 "w" 0.0 0.0)
  3. (setq m 0)
  4. (while (< m N)
  5. (setq p3 (polar p2 ang1 d2))
  6. (setq p4 (polar p3 ang1 d2))
  7. (setq p5 (polar (polar p3 ang1 20)(+ ang1 4.71239) d3))
  8. (setq p6 (polar p5 ang1 d2 ))
  9. (setq p7 (polar p6 ang1 d2))
  10. (setq p8 (polar p4  ang1 d4))
  11. (command "a" "ce" p3 "a" "-180" "l" p5 "a" "ce" p6 p7 "l" p8)
  12. ; parallel lines now drawn
  13. (setq m (+ 1 m))
  14. (setq p2 p8)
  15. )
  16. (command "")   
  17. ; ends pline
回复

使用道具 举报

0

主题

375

帖子

385

银币

限制会员

铜币
-7
发表于 2022-7-5 18:17:15 | 显示全部楼层
嗨,比尔。
来自autocad参考
在你的例子中,角度是a=90度,a/4=22.5,tan(22.5)=sqrt(2)-1。对于顺时针圆弧,凸出值为负值,因此-(sqrt(2)-1)=1-sqrt(2)。
回复

使用道具 举报

180

主题

639

帖子

463

银币

中流砥柱

Rank: 25

铜币
897
发表于 2022-7-5 18:21:21 | 显示全部楼层
我最终捕获了我需要的点,如下所示:
  1. (setq temp (vlax-get (vlax-ename->vla-object (entlast)) 'Coordinates)
  2.    sp1 (list (nth 8 temp) (nth 9 temp))
  3.    sp2 (list (nth 6 temp) (nth 7 temp))
  4.    )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 23:42 , Processed in 0.708780 second(s), 72 queries .

© 2020-2025 乐筑天下

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