乐筑天下

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

[编程交流] 弧到弦

[复制链接]

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 17:09:14 | 显示全部楼层 |阅读模式
有人用lisp或vba将圆弧转换为一系列和弦吗。用户将指定每个弧的和弦数。
 
只是急需
回复

使用道具 举报

1

主题

133

帖子

145

银币

初来乍到

Rank: 1

铜币
4
发表于 2022-7-6 17:26:24 | 显示全部楼层
这些事情你需要做多少?
 
如果情况紧急,是否可以使用“DIVIDE”或“MEASURE”沿弧生成比所需弦多一个节点,然后使用节点对象捕捉打开的线条连接节点?
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 17:39:39 | 显示全部楼层
需要做100个,因此只要找到所有的弧,并这样做,无论弧是否大小不同。
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 17:49:52 | 显示全部楼层
对于多个圆弧、圆、椭圆、多段线和样条曲线(任何AutoCAD曲线):
 
  1. (defun c:CurvesToSegments(/ cSet sLen cLen sDis ptLst oOsn
  2.                   eLst cAns vCnt lPt)
  3. (vl-load-com)
  4. (princ "<<< Select curves to transform >>>")
  5. (if
  6.    (setq cSet
  7.    (ssget
  8.           '((0 . "*POLYLINE,SPLINE,ARC,CIRCLE,ELLIPSE"))))
  9.    (if(setq sLen(getdist "\nSpecify segment lentgth: "))
  10.      (progn
  11. (setq oOsn(getvar "OSMODE"))
  12. (setvar "CMDECHO" 0)(setvar "OSMODE" 0)
  13.        (foreach itm(setq eLst(vl-remove-if 'listp
  14.                         (mapcar 'cadr(ssnamex cSet))))
  15. (setq sDis 0.0
  16.       cLen(-(vlax-curve-getDistAtParam itm
  17.               (vlax-curve-getEndParam itm))
  18.             (vlax-curve-getDistAtParam itm
  19.               (vlax-curve-getStartParam itm)))
  20.             ); end setq
  21. (if(= "LWPOLYLINE"(cdr(assoc 0(entget itm))))
  22. (progn
  23.   (setq vCnt 1
  24.         ptLst(list(vlax-curve-GetPointAtDist itm sDis)))
  25.    (while(and
  26.            (<= sDis cLen)
  27.            (vlax-curve-GetPointAtParam itm vCnt)
  28.            (setq cPt(vlax-curve-GetPointAtDist itm sDis))
  29.            ); end and
  30.       (if(= 0.0(vla-GetBulge(vlax-ename->vla-object itm)(1- vCnt)))
  31.         (setq ptLst(append ptLst
  32.                   (list(vlax-curve-GetPointAtParam itm vCnt)))
  33.               sDis(vlax-curve-GetDistAtParam itm vCnt)
  34.               ); end setq
  35.         (progn
  36.           (while(<= sDis(vlax-curve-GetDistAtParam itm vCnt))
  37.             (setq cPt(vlax-curve-GetPointAtDist itm sDis)
  38.                   ptLst(append ptLst(list cPt))
  39.                   sDis(+ sDis sLen))
  40.             ); end while
  41.           (setq ptLst(append ptLst
  42.                   (list(vlax-curve-GetPointAtParam itm vCnt))))
  43.           ); end progn
  44.         ); end if
  45.       (setq vCnt(1+ vCnt))
  46.      ); end while
  47.   ); end progn
  48.    (while(and
  49.            (<= sDis cLen)
  50.            (setq cPt(vlax-curve-GetPointAtDist itm sDis))
  51.            ); end and
  52.      (setq ptLst(append ptLst(list cPt))
  53.            sDis(+ sDis sLen))
  54.    ); end while
  55.   ); end if
  56.   (if(not(equal(setq lPt(vlax-curve-getEndPoint itm))(last ptLst)))
  57.     (setq ptLst(append ptLst(list lPt)))
  58.    ); end if
  59. (command "_.pline")(mapcar 'command ptLst)(command "")
  60. (setq ptLst nil)
  61.       ); end foreach
  62. (initget "Yes No")
  63. (setq cAns(getkword "\nRemove old curves [Yes/No] <Yes>: "))
  64. (if(or(null cAns)(= cAns "Yes"))
  65.   (mapcar 'entdel eLst)
  66.   ); end foreach
  67.       (setvar "CMDECHO" 1)(setvar "OSMODE" oOsn)
  68.      ); end progn
  69.     ); end if
  70.    ); end if
  71. (princ)
  72. ); end of c:CurvesToSegments
回复

使用道具 举报

4

主题

940

帖子

961

银币

初来乍到

Rank: 1

铜币
12
发表于 2022-7-6 18:08:51 | 显示全部楼层
非常感谢,我今天将测试它们。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 18:17:00 | 显示全部楼层
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 16:48 , Processed in 0.320100 second(s), 64 queries .

© 2020-2025 乐筑天下

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