明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1817|回复: 7

[讨论] 关于lps求问CAD自动生成面域的质心

[复制链接]
发表于 2019-8-3 17:31:49 | 显示全部楼层 |阅读模式
我发现http://bbs.mjtd.com/thread-92028-1-1.html的二楼是有用的,但是我只想要点出质心去除其他的信息,能够批量选择更好。(面域是那种掏空的箱型面域)
 楼主| 发表于 2019-8-3 17:35:53 | 显示全部楼层

像这样的箱型面域,massprop命令的结果是这样的


希望可以把这个坐标点出来
谢谢大佬们!

本帖子中包含更多资源

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

x
 楼主| 发表于 2019-8-3 17:37:40 | 显示全部楼层
链接中二楼的代码是这样的(当然链接中也有其他代码,但是我尝试了发现不能选择这样的箱型面域或者结果是错误的):
;;; 截面特性=================
(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)
)
发表于 2019-8-3 19:01:23 来自手机 | 显示全部楼层
面域转换为vla对象直接可以直接获取形心
发表于 2019-8-3 19:15:19 来自手机 | 显示全部楼层
(vla-get-centroid (vlax-ename->vla-object (car(entsel))))点选面域就是获取的重心,你再看一下ssget筛选面域就能批处理了
 楼主| 发表于 2019-8-5 10:00:46 | 显示全部楼层
t18-13nil 发表于 2019-8-3 19:15
(vla-get-centroid (vlax-ename->vla-object (car(entsel))))点选面域就是获取的重心,你再看一下ssget筛选 ...

发现对箱型面域没用可能是我操作有问题一直让选择减去的面域
发表于 2019-10-18 23:06:32 来自手机 | 显示全部楼层
学习学习~~
发表于 2019-10-19 08:53:05 | 显示全部楼层
学习了,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-24 00:30 , Processed in 0.180189 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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