乐筑天下

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

[编程交流] 群o的重心

[复制链接]

1

主题

1

帖子

0

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 19:48:54 | 显示全部楼层 |阅读模式
我是一名船设计师,经常需要计算多段线的总长度和重心(开放和闭合多段线)。
我在下面有一个片段来展示我当前使用的示例代码-这只适用于一组行-它不适用于多段线。
目前,每次我必须计算重心时,我必须复制多段线,分解它并选择线来计算重心。
 
逻辑如下-假设我们在多段线上有3段(A、B、C):
多段线的重心=(A的长度乘以A的质心+b的长度乘以b的质心+C的长度乘以C的质心)除以多段线的总长度
 
我对LISP不太熟悉&虽然我有一些其他编程语言的背景,但我发现编写代码相对困难,语法差别很大。
我发现了一个类似的代码(由AndreaAndreetti编写的TotalADD Total add&修改为下面的代码)。
 
如果我可以选择一组多段线(使用select Simular)并运行命令以在autocad中获得一个文本表,并为不同图层上的一组多段线计算CG和总长度,这将非常理想。
但我不确定如何实现这一点。你能帮忙吗?还是我要求的太多了?任何指导都将不胜感激。
 
 
  1.               (if (eq (vla-get-objectname n) "AcDbLine")
  2.        (progn
  3.                 (setq itemlinelength (+ itemlinelength (vla-get-length n)))
  4.                
  5.                 (setq StartPoint(vlax-safearray->list
  6.                                                         (vlax-variant-value (vla-get-startpoint n))))
  7.                 (setq x1 (car Startpoint))
  8.                 (setq y1 (cadr Startpoint))
  9.                
  10.                 (setq EndPoint(vlax-safearray->list
  11.                                                         (vlax-variant-value (vla-get-endpoint n))))
  12.                 (setq x2 (car endpoint))
  13.                 (setq y2 (cadr endpoint))
  14.                
  15.                 (setq xmid (* (+ x1 x2) 0.5))
  16.                 (setq ymid (* (+ y1 y2) 0.5))
  17.                 (setq xmom (* xmid (vla-get-length n)))
  18.                 (setq ymom (* ymid (vla-get-length n)))
  19.                 (setq itemxmoment (+ itemxmoment xmom))
  20.                 (setq itemymoment (+ itemymoment ymom))
  21.   
  22.         )
  23.   )
  24. (setq totxcg (/ itemxmoment itemlinelength))
  25. (setq totycg (/ itemymoment itemlinelength))
  26. (setq tlength (rtos itemlength 2 )
  27. (setq totxcg (rtos totxcg 2 )
  28. (setq totycg (rtos totycg 2 )
  29. (acet-ui-status (strcat "Length:     " tlength "\n"
  30.                                         "X CoG Pos:   " totxcg "\n" "Y CoG Pos:    " totycg "\n"
  31.                                         )
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-5 21:19:00 | 显示全部楼层
欢迎来到CADTutor。
 
从另一种编程语言到LISP可能是一个不同的世界,但它最终只是一个不同的对象模型,有自己的对象、属性、方法和事件——可以说是一个词汇表。
 
为了简化编程工作,您可以使用一些Visual LISP(ActiveX)函数,特别是vlax Curve*函数来处理原始多段线,以便剔除所述多段线顶点的必要坐标。可以评估该坐标列表以获得重心。
 
如果你想节省一些时间,而不必自己开发,你可以下载Gile的定制OSNAP应用程序(早在+/-2009年发布的C插件?),它实现了一个新的CTR(质心)OSNAP。如果你找不到他公开发布的源代码,也无法自己编译,他还会销售一款Autodesk Exchange应用程序,这两款应用程序都提供了远不止这一项的功能。
 
同样值得注意的是,AutoCAD 2016最终通过一个新的GCE(几何中心)OSNAP添加了这一新功能,我亲切地将其称为Gilles Chanteau Emulator,因为它很相似,但与原来的稍有差距。哈哈
 
干杯
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 13:26 , Processed in 0.634046 second(s), 56 queries .

© 2020-2025 乐筑天下

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