lisp自动生成中垂线_关于lps求问CAD自动生成面域的质心

这篇博客介绍了如何使用LISP语言在CAD中自动生成面域的质心和惯性矩信息。代码展示了如何获取和移动面域的质心,并计算相关惯性矩数据,包括面积、周长、主矩方向等。最后,将结果显示在CAD图形中。
部署运行你感兴趣的模型镜像

链接中二楼的代码是这样的(当然链接中也有其他代码,但是我尝试了发现不能选择这样的箱型面域或者结果是错误的):

;;; 截面特性=================

(defun c:tx (/ angel2 angle1 angle2 area arrowlen centroid circlerad jmobj momentofinertia1 perimeter principaldirections1

principalmoments1 productofinertia1 regionobj ss txthight txtpt txtstring uuuuu x

)

(defun v2l (x)

(vlax-safearray->list (vlax-variant-value x))

)

(defun jmcsfun (jmobj / area perimeter centroid momentofinertia1 principalmoments1 principaldirections1 productofinertia1 txthight

circlerad arrowlen angle1 angel2 txtpt txtstring

)

(setq area (vla-get-area jmobj)

perimeter (vla-get-perimeter jmobj)

centroid (v2l (vla-get-centroid jmobj)) ;         momentofinertia (v2l(vla-get-momentofinertia

; jmobj))

;         principalmoments(v2l(vla-get-principalmoments jmobj))

;         principaldirections(v2l(vla-get-principaldirections jmobj))

;         productofinertia (vla-get-productofinertia jmobj)

)

(vla-move jmobj (vlax-3d-point centroid) (vlax-3d-point (list 0 0 0)))

(setq momentofinertia1 (v2l (vla-get-momentofinertia jmobj))

principalmoments1 (v2l (vla-get-principalmoments jmobj))

principaldirections1 (v2l (vla-get-principaldirections jmobj))

productofinertia1 (vla-get-productofinertia jmobj)

)

(vla-move jmobj (vlax-3d-point (list 0 0 0)) (vlax-3d-point centroid))

(setq txthight (/ (getvar "viewsize") 90.0))

(setq circlerad (* txthight 1.5))

(setq arrowlen (* txthight 5))

(setq angle1 (angle (list 0 0 0) (list (car principaldirections1) (caddr principaldirections1))))

(setq angle2 (angle (list 0 0 0) (list (cadr principaldirections1) (cadddr principaldirections1))))

(setq txtpt (polar centroid angle1 arrowlen))

(entmake (list (cons 0 "line") (cons 10 centroid) (cons 11 txtpt) (cons 62 1)))

(entmake (list (cons 0 "text") (cons 1 "1") (cons 40 txthight) (cons 10 txtpt) (cons 11 txtpt) (cons 62 1)))

(setq txtpt (polar centroid angle2 arrowlen))

(entmake (list (cons 0 "line") (cons 10 centroid) (cons 11 txtpt) (cons 62 1)))

(entmake (list (cons 0 "text") (cons 1 "2") (cons 40 txthight) (cons 10 txtpt) (cons 11 txtpt) (cons 62 1)))

(setq txtstring (strcat "面积= " (rtos area 2 2) " mm2")

txtpt centroid

)

(entmake (list (cons 0 "text") (cons 1 txtstring) (cons 40 txthight) (cons 10 txtpt) (cons 11 txtpt)))

(setq txtstring (strcat "周长= " (rtos perimeter 2 2) " mm")

txtpt (list (car txtpt) (- (cadr txtpt) (* txthight 2)))

)

(entmake (list (cons 0 "text") (cons 1 txtstring) (cons 40 txthight) (cons 10 txtpt) (cons 11 txtpt)))

(setq txtstring (strcat "Ix= " (rtos (car momentofinertia1) 2 0) " mm4")

txtpt (list (car txtpt) (- (cadr txtpt) (* txthight 2)))

)

(entmake (list (cons 0 "text") (cons 1 txtstring) (cons 40 txthight) (cons 10 txtpt) (cons 11 txtpt)))

(setq txtstring (strcat "Iy= " (rtos (cadr momentofinertia1) 2 0) " mm4")

txtpt (list (car txtpt) (- (cadr txtpt) (* txthight 2)))

)

(entmake (list (cons 0 "text") (cons 1 txtstring) (cons 40 txthight) (cons 10 txtpt) (cons 11 txtpt)))

(setq txtstring (strcat "Ixy= " (rtos productofinertia1 2 0) " mm4")

txtpt (list (car txtpt) (- (cadr txtpt) (* txthight 2)))

)

(entmake (list (cons 0 "text") (cons 1 txtstring) (cons 40 txthight) (cons 10 txtpt) (cons 11 txtpt)))

(setq txtstring (strcat "I1= " (rtos (car principalmoments1) 2 0) " mm4")

txtpt (list (car txtpt) (- (cadr txtpt) (* txthight 2)))

)

(entmake (list (cons 0 "text") (cons 1 txtstring) (cons 40 txthight) (cons 10 txtpt) (cons 11 txtpt)))

(setq txtstring (strcat "I2= " (rtos (cadr principalmoments1) 2 0) " mm4")

txtpt (list (car txtpt) (- (cadr txtpt) (* txthight 2)))

)

(entmake (list (cons 0 "text") (cons 1 txtstring) (cons 40 txthight) (cons 10 txtpt) (cons 11 txtpt)))

)

(setvar "cmdecho" 0)                       ; 关闭命令响应

(command ".UNDO" "BE")

(princ "\n选择闭合区域。")

(setq ss (ssget))

(if ss

(progn

(command ".region" ss "")

(setq uuuuu (entlast))

(if (= (cdr (assoc 0 (entget uuuuu))) "REGION")

(progn

(vl-load-com)

(setq regionobj (vlax-ename->vla-object uuuuu))

(jmcsfun regionobj)

(princ "\n\n图中所表示的惯性矩意义如下:\n\n 两条直线代表主矩方向1和2\n I1为主矩方向1的质心主惯性矩\n I2为主矩方向2的质心主惯性矩\n Ix,Iy,Ixy均为质心惯性矩")

(command ".explode" uuuuu)

(princ)

)

(princ "\n图元不闭合,无法计算。")

)

)

(princ "\n没有选择对象。")

)

(command ".UNDO" "E")

(princ)

)

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值