乐筑天下

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

[编程交流] 多段线-凸出

[复制链接]

41

主题

120

帖子

84

银币

后起之秀

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

铜币
200
发表于 2022-7-5 19:38:35 | 显示全部楼层 |阅读模式
你好
我希望不使用命令创建多段线,将数据点(1,2,3,4,5)作为附件草图和直径弯曲。
如何计算圆弧的起点和终点,而不考虑方向和正确的凸出值
203840sbb242b2wcrfdl1t.jpg
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:45:26 | 显示全部楼层
首先计算圆弧端点和中心的位置(基于相邻多段线线段和所需的圆弧半径),然后圆弧段的凸出量等于四分之一夹角的切线。
 
有关更多信息,请参阅我的凸出转换函数。
回复

使用道具 举报

41

主题

120

帖子

84

银币

后起之秀

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

铜币
200
发表于 2022-7-5 19:56:21 | 显示全部楼层
嗨,谢谢你有趣的阅读。事实证明,我克服的第一个计算问题是坐标系中的坐标。我希望很快就想训练。
回复

使用道具 举报

VVA

1

主题

308

帖子

308

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-5 20:02:27 | 显示全部楼层
ElpanoveGeniy网站的另一个有趣链接是:将多段线的直线段替换为圆弧段
 
 
回复

使用道具 举报

41

主题

120

帖子

84

银币

后起之秀

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

铜币
200
发表于 2022-7-5 20:07:33 | 显示全部楼层
我首先编写了一个计算向量之间角度的函数。不幸的是,在我看来,我的推理有些地方是错误的。你能看看下面的函数吗。
  1. (defun wek (Pk1 Pk2 Pk3 / W1 W2 CosAlfa)
  2. (setq W1 (list (- (car Pk2) (car Pk1)) (- (cadr Pk2) (cadr Pk1)))) ;wsp1
  3. (setq W2 (list (- (car Pk3) (car Pk2)) (- (cadr Pk3) (cadr Pk2)))) ;wsp2
  4. (setq CosAlfa (/ (+ (* (car W1)(car W2)) (* (cadr W1)(cadr W2)))
  5.                 (*(sqrt (+ (* (car W1) (car W1)) (*(car W2) (car W2) )))
  6.                 (sqrt (+ (* (cadr W1) (cadr W1)) (*(cadr W2) (cadr W2) )))))
  7. )
  8. (RtD (atan (sqrt (- 1 (* CosAlfa CosAlfa))) CosAlfa))
  9. )
  10. ; converts radians to degrees
  11. (defun RtD (r) (* 180.0 (/ r pi)))
  12. ; converts degrees to radians
  13. (defun DtR (d) (* pi (/ d 180.0)))
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 20:10:52 | 显示全部楼层
第一个问题,你想一个半径为所有如果是这样,那么在这里搜索的代码已经完成。此外,最好以弧度重新调整角度,因为这是autocad的默认值,但请注意,零位于东方,并且它们是按时钟测量的。
 
您可以将pline的co ORD作为一个列表,因此您只需使用pt1 pt2、pt2 pt3在lisp中获取角度(角度pt1 pt2)
 
下面是一个co ord lisp示例
 
  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 co-ords (getcoords (car (entsel "\nplease pick pline"))))
  27. (co-ords2xy) ; list of 2d points making pline
  28. (princ co-ordsxy)

 
像这样的选择是两分
 
203842c01ub7b3ai3b1i72.jpg
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 20:18:15 | 显示全部楼层
 
简,
 
只需使用角度函数。
 
  1. (defun ang3p (p1 p2 p3 / a)
  2.   (or 2pi (setq 2pi (* 2 pi)))
  3.   (abs (- (setq a (- (angle p2 p1)(angle p2 p3))) (* (fix (/ a pi)) 2pi)))
  4. )

 
ymg公司
回复

使用道具 举报

VVA

1

主题

308

帖子

308

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-5 20:23:20 | 显示全部楼层
也许这个话题会有用
挑战-查找闭合多段线的内角
 
将几何函数转换为LISP
 
3d_库。拉链
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 20:30:20 | 显示全部楼层
看,Jan,如果您试图在多段线的顶点处用圆对其进行圆角,请尝试以下代码:
 
否则,如果您只需要常规圆角,只需使用带有[P]olyline选项和指定半径的命令fillet。。。
 
HTH,M.R。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:36:43 | 显示全部楼层
考虑以下代码:
[code](defun c:fpoly(/idx rad sel)(initget 6)(if(and(setq rad(getdist“\n指定圆角半径:))(setq sel(ssget“_:L”'((0。“LWPOLYLINE”))))(repeat(setq idx(sslength sel))(LM:filletpoly(ssname sel(setq idx(1-idx)))rad))))(princ));;圆角多段线-Lee Mac;;尝试将给定半径的圆角应用于给定多段线的所有顶点;;ent-[ent]LWPolyline实体;;rad-[num]圆角半径(defun LM:filletpoly(ent rad/enx hed lst)(setq enx(entget ent)hed(reverse(member(assoc 39 enx)(reverse enx)))lst(mapcar“cdr(vl remove if not)”(lambda(x)(=10(car x)))enx)lst(apply“append”(apply“mapcar(cons)”(lambda(v1 v2 v3/a1 a2 a3 di)(if(和v1 v2 v3(setq a1(角度v2 v1)a2(角度v2 v3)a3(rem(+pi pi(-a1 a2))(+pi pi pi))a3(-pi(最小a3(-pi pi)a3)))tn(tan(/a3 2.0))(非)(等于a3 0.0 1e-8))(setq di(*rad tn))(
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 14:00 , Processed in 0.649789 second(s), 75 queries .

© 2020-2025 乐筑天下

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