找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1168|回复: 1

[LISP程序]: 截面几何参数列表

[复制链接]
发表于 2007-8-27 22:18:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
截面几何参数列表   
;mas 截面几何参数列表
(vl-load-com)
  (setq *Obj (vlax-get-acad-object)
*Doc (vla-get-activeDocument *Obj)
*MSp (vla-get-Modelspace *Doc)
  )

(defun mas (obj / Area Area1 Area2 Perimeter Centroid Centroid1 Centroid2 MomentOfInertia
           MomentOfInertia1 PrincipalDirections PrincipalMoments minpt maxpt Sx Sy
           ProductOfInertia ProductOfInertia1 RadiiOfGyration Wx1 Wx2 Wy1 Wy2 obj1
           obj2 recPt1 recPt2 reg1 reg2 CenX CenY)
  (if (= "AcDbRegion" (vla-get-objectname obj))                        ;如果是截面则计算
    (progn
      (setq Area (vla-get-area obj)                                    ;面积
            Perimeter (vla-get-Perimeter obj)                          ;周长
            Centroid (V2L (vla-get-Centroid obj))                      ;质心
     MomentOfInertia (V2L (vla-get-MomentOfInertia obj))        ;惯性矩
            PrincipalDirections (V2L (vla-get-PrincipalDirections obj));主矩方向
     PrincipalMoments (V2L (vla-get-PrincipalMoments obj))      ;主力矩与质心的X-Y方向
     ProductOfInertia (vla-get-ProductOfInertia obj)            ;惯性积
      )                                                                ;setq
      (vla-move obj (vlax-3d-point Centroid) (vlax-3d-point '(0 0)))   ;移动质心到原点
      (setq MomentOfInertia1 (V2L (vla-get-MomentOfInertia obj))       ;质心的惯性矩
     ProductOfInertia1 (vla-get-ProductOfInertia obj)           ;质心的惯性积
     RadiiOfGyration (V2L (vla-get-RadiiOfGyration obj))        ;回旋半径
      )                                                                ;setq
      (vla-getboundingbox obj 'minpt 'maxpt)                           ;边界框
      (setq minpt (vlax-safearray->list minpt)                         ;左下角点
            maxpt (vlax-safearray->list maxpt)                         ;右上角点
            Wx1 (/ (car MomentOfInertia1) (cadr minpt))                ;抵抗矩
     Wx2 (/ (car MomentOfInertia1) (cadr maxpt))
     Wy1 (/ (cadr MomentOfInertia1) (car minpt))
     Wy2 (/ (cadr MomentOfInertia1) (car maxpt))                                                  
      )                                                                ;setq
      (vla-move obj (vlax-3d-point '(0 0)) (vlax-3d-point Centroid))   ;移回原来位置
      (setq obj1 (vla-copy obj)                                        ;拷贝物体以用来算X面积矩
            obj2 (vla-copy obj)                                        ;拷贝物体以用来算Y面积矩
            CenX (car Centroid)
     CenY (cadr Centroid)
            recPt1 (list (+ CenX (car minpt) -1) CenY                  ;建立两个矩形面域的点表
                  (+ CenX (car maxpt) +1) CenY            
           (+ CenX (car maxpt) +1) (+ CenY (cadr minpt) -1)         
           (+ CenX (car minpt) -1) (+ CenY (cadr minpt) -1))                        
     recPt2 (list (+ CenX (car minpt) -1) (+ CenY (cadr minpt) -1)               
           (+ CenX (car minpt) -1) (+ CenY (cadr maxpt) +1)        
           CenX (+ CenY (cadr maxpt) +1)
           CenX (+ CenY (cadr minpt) -1))
            reg1 (draw-rectange recPt1)                                ;创建面域1
     reg2 (draw-rectange recPt2)                                ;创建面域2
      )
      (vla-boolean obj1 acSubtraction reg1)                            ;求obj1与面域1之差
      (vla-boolean obj2 acSubtraction reg2)                            ;求obj2与面域2之差
      (setq Area1 (vla-get-area obj1)                                  ;求obj1的面积
     Area2 (vla-get-area obj2)                                  ;求obj2的面积
     Centroid1 (V2L (vla-get-Centroid obj1))                    ;求obj1的质心
     Centroid2 (V2L (vla-get-Centroid obj2))                    ;求obj2的质心
            Sx (* Area1 (- (cadr Centroid1) (cadr Centroid)))          ;绕X轴面积矩(静矩)
     Sy (* Area2 (- (car  Centroid2) (car  Centroid)))          ;绕Y轴面积矩(静矩)
      )
      (vla-delete obj1)                                                ;删除面域1
      (vla-delete obj2)                                                ;删除面域2
      (list (cons "面积        " Area)                                 ;返回各种参数值
     (cons "周长        " Perimeter)
     (cons "质心        " Centroid)
     (cons "X 轴主惯性矩" (car PrincipalMoments))
     (cons "X 轴惯性矩  " (car MomentOfInertia1))
     (cons "Y 轴主惯性矩" (cadr PrincipalMoments))
     (cons "Y 轴惯性矩  " (cadr MomentOfInertia1))
     (cons "XY惯性积    " ProductOfInertia1)
     (cons "X 轴上抗弯距" Wx2)
     (cons "X 轴下抗弯距" Wx1)
     (cons "Y 轴左抗弯距" Wy1)
     (cons "Y 轴右抗弯距" Wy2)
     (cons "X 轴面积矩  " Sx )
     (cons "Y 轴面积矩  " Sy )
     (cons "回旋半径ix  " (car RadiiOfGyration))
     (cons "回旋半径iy  " (cadr RadiiOfGyration))
     (cons "主矩方向1   " (list (car PrincipalDirections) (caddr PrincipalDirections)))
     (cons "主矩方向2   " (list (cadr PrincipalDirections) (cadddr PrincipalDirections)))
     (cons "距左边距离  " (abs (car minpt)))
     (cons "距右边距离  " (abs (car maxpt)))
     (cons "距上边距离  " (abs (cadr maxpt)))
     (cons "距下边距离  " (abs (cadr minpt)))
      )
    )
  )
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 8121个

财富等级: 富甲天下

发表于 2007-9-1 10:16:52 | 显示全部楼层
楼主要转载的话也请完整转载啊!
下面是这个程序的出处:

http://www.xdcad.net/forum/showt ... 3186245#post3186245
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 06:01 , Processed in 0.257679 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表