nicolas 发表于 2022-7-6 08:18:15

惯性矩LISP

你好
 
确定惯性矩Ixx和Iyy:
 
将对象转换为并集后,我通常运行MASSPROP来确定质心位置,使用UCS>原点将UCS移动到质心,然后重新运行MASSPROP来查找Ixx和Iyy。在这个过程中,我必须说不,写入文件两次,将给定的Ixx和Iyy除以10x10x10或10000,使单位为cm^4,并添加cm^4,最后进行叠加。
 
因此,我搜索了一个lisp,它可以自动执行上述操作,并将Ixx和Iyy结果从mm4转换为cm4,并在结果末尾添加cm4(带堆栈),甚至将结果着色为给定颜色以进行强调。
 
我还发现了一个称为模的lisp。计算截面模量的vlx。然而,结果是mm3,但程序将cm3添加到数字中。我想要真正的cm3结果,尽管我已经在阿卡迪索绘制了一切。dwt和毫米单位。
 
提前感谢您,
 
当做
 
尼古拉斯。

pBe 发表于 2022-7-6 08:24:30

我本以为当UCS位于固体物体的质心上时,它会给我提供与MASSPOP相同的惯性矩值。
奇怪的是,它仍然给了我和我搬到UCS之前一样的价值,有什么想法吗?
 
(defun c:mprop ()
(setq Sol (vlax-ename->vla-object      
(cadar (ssnamex (ssget "_+.:E:S")))))

(command "UCS" "_Origin"(vlax-safearray->List
                              (variant-value
                                    (vlax-get-property
                                          sol
                                          'centroid))))
      (vlax-safearray->List
         (variant-value
               (vlax-get-property
                     (vlax-ename->vla-object
                           (ssname (ssget "_P") 0))
                     'MomentOfInertia)))
         )
 
UCS世界的惯性矩和质心
质心:X:-4.17387
Y: 11.60698
Z: 1.86385
惯性矩:X:10324.71866
Y: 1739.80075
Z: 11385.86527
将第一个数据的质心用于UCS原点
UCS原点后的惯性矩和质心
质心:X:-2.25548
Y: -2.17830
Z: 1.86385
惯性矩:X:802.80898
Y: 836.23187
Z: 960.38671
 
选择上一个对象
调用惯性矩的属性
但直到在UCS world上获得相同的价值形式
 
如果我能想出该怎么做。共变很容易。
我承认,数学是我在学校最不喜欢的科目之一

nicolas 发表于 2022-7-6 08:26:03

随附的dwg中包含惯性矩计算,使用第一个massprop查找质心,在ucs原点设置为对象质心后,使用第二个massprop查找质心。我曾尝试应用mprop lisp,但没有成功。每次选择统一区域对象时,我都会出现以下错误:
 
 
001 ACAD惯性矩计算.dwg
 
当做
 
尼古拉斯。

Lee Mac 发表于 2022-7-6 08:30:41

 
阅读以下内容:
http://www.cadtutor.net/forum/showthread.php?1390-如何在此存档中使用LISP例程&p=339645&viewfull=1#post339645

Lee Mac 发表于 2022-7-6 08:32:56

按照您描述的方法,尝试以下操作:
 
(defun c:test ( / *error* cmd m o s )

   (defun *error* ( msg )
       (if cmd (setvar 'CMDECHO cmd))
       (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
         (princ (strcat "\nError: " msg))
       )
       (princ)
   )

   (setq cmd (getvar 'CMDECHO))
   (setvar 'CMDECHO 0)

   (if (setq s (ssget "_+.:E:S" '((0 . "REGION,3DSOLID"))))
       (progn
         (setq o (vlax-ename->vla-object (ssname s 0)))
         (command "_.ucs" "_origin" (vlax-get o 'centroid))
         (setq m (vlax-get o 'momentofinertia))
         (command "_.ucs" "_p")
         (print (mapcar '(lambda ( x ) (/ x 10000.0)) m))
       )
   )
   (setvar 'CMDECHO cmd)
   (princ)      
)
(vl-load-com) (princ)

nicolas 发表于 2022-7-6 08:36:40

你好
 
我刚刚测试了lisp,它与统一区域对象完美配合,结果设置为cm^3。非常感谢你。我希望您继续使用这种lisp,并将其添加到您广泛的应用程序列表中。如果您可以添加massprop中显示的其他信息,如面积、周长等,那将非常棒。。。和偶数惯性模量,即取Ixx并将其除以和取Iyy并将其除以。这次lisp工作正常,我将文本直接复制到vlide中,并将文件保存在“lisp源文件”下,在“在编辑器中加载文本”后,它工作得很好。我真的很喜欢mm4到cm4的自动转换。这很节省时间。
 
继续做好工作,非常感谢。
 
当做
 
尼古拉斯。

Lee Mac 发表于 2022-7-6 08:39:31

不客气,尼古拉斯,我很高兴这个项目能为你节省工作时间。如果我将来有机会,我可能会进一步开发该程序,但目前我不打算将其添加到我的网站。
 

pBe 发表于 2022-7-6 08:41:35

李,
即使不移动UCS原点。您的代码仍然给出相同的结果。
将其与手动操作相比较,惯性矩值将从不同UCS原点得出不同的结果。
 
这是我以前的困境。由于我对固体和惯性的知识有限。(就说物理吧)我找不到与#2后的值有任何关联。我认为,在移动UCS原点后,需要进行数学计算以获得新的惯性值。

Lee Mac 发表于 2022-7-6 08:46:19

 
由于质心特性和momentofinertia特性的值是相对于当前UCS表达的,因此这些值将在UCS更改时更改。我猜想,通过将这些值转换为WCS,然后转换为所需的坐标系,也可以实现正确的结果,但由于我不经常在这一领域工作,所以我只是在这一方面遵循OP。

pBe 发表于 2022-7-6 08:47:08

很公平
 
谢谢李
页: [1] 2
查看完整版本: 惯性矩LISP