QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
goto3d 说: 此次SW竞赛获奖名单公布如下,抱歉晚了,版主最近太忙:一等奖:塔山817;二等奖:a9041、飞鱼;三等奖:wx_dfA5IKla、xwj960414、bzlgl、hklecon;请以上各位和版主联系,领取奖金!!!
2022-03-11
系统
[系统通知] 平台第一个项目外包——项目拼多;正式上线,欢迎各单位个人有外包、设计、采购、加工需求的,在此寻找更牛的解决方案
2021-07-01
查看: 8674|回复: 3
收起左侧

[已答复] CAD 三维图形的“几何中心”和“质心”的疑问

[复制链接]
发表于 2011-6-29 19:47:58 | 显示全部楼层 |阅读模式

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

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

x
先说一下cad用的是2011版本
% f, r3 ]$ B# Q& q9 N( T我在cad里面做了3个实体,绿色那个是用union处理了的(图1),另外两个是对比测试的,请不要分心,呵呵
/ T! G% g& m- o# I7 |2 h% R我的目的是要找到绿色实体的“几何中心”,当用鼠标选中绿色实体的时候,可以看到移动小控件是位于绿色实体的“几何中心”的,但是我获取不了这个几何中心的坐标。(图2)
1 Z$ L3 K9 A; n5 z$ P6 d; N于是想到了 massprop 这个命令,它能提取"质心",给出质心的坐标。我把目测的那个“几何中心”和“质心”都标出来了。(图3)
3 s0 t6 q: K! h0 ?; d$ Z. d& f' X# h# v9 Y% e/ q7 c9 w% a
0 L& v/ G% Q- p& M) |/ J. b8 C
现在有一下几点让我迷惑:
3 Q( _1 G' W+ q) B" E1. 在cad的帮助里面,输入massprop 后看的的解释是:可以给出无论是二维还是三维物体的”形心“,注意,在帮助文件里面是 ”形心“,不是质心,但是在实际使用的时候却又显示的是”质心“,所以到底这个命令提取的是质心还是形心?
" j1 v) @  n. f0 @: q1 b! k$ S2.为什么 图3 中的几何中心和质心不重合呢? 既然cad里认为三维物体是均质的,那么我觉得 几何中心和质心应该重合才对,为何两者会有差别?+ o9 G( F, W/ ]) O) M, \
   我做过测试,如果实体形状规则,就像那两个方块,这两个就会重合,而不规则的就会不重合。
% V! o9 [# t# J0 _# g, {3.如果我想获得一个三维实体,尤其是不规则实体的 几何中心的坐标,就是移动小控件坐标原点的位置,我在cad里面应该怎么操作,用哪个命令呢?
7 D1 m/ {. w- R0 V+ a; W最后把cad原文件附上,大家可以自己试试看。是不是几何中心和 质心 不重和。) m$ T5 U7 L6 Z: G( }( ?, o$ R
另外大家有什么办法可以获得几何中心的坐标,请不吝赐教,谢谢!
2011-6-29 19-26-38.jpg
2011-6-29 19-30-02.jpg
2011-6-29 19-33-31.jpg

形心测试.dwg

133.22 KB, 下载次数: 1

评分

参与人数 1三维币 +5 收起 理由
★新手★ + 5 发帖讨论认真

查看全部评分

发表于 2011-6-29 22:56:26 | 显示全部楼层
本帖最后由 woaishuijia 于 2011-6-29 23:12 编辑
# X& h0 a- y; X/ c3 F: X; p, A6 s9 `' Q+ s5 C9 m  W, V' |, e* C
个人理解:在ACAD中,“形心”与“中心”是两个概念。“形心”就是均质实体的“质心”;而几何中心(就是三维小控件的位置)是所选择图形“范围”的中心。形象地说,假如有一个长(立)方体的盒子,其六个面都相应地与WCS坐标平面平行,尺寸和位置刚好能把你选择的一个或多个图元装在里面,这个盒子的形心就是所选择的图元的几何中心。对于单个长方体、球体、圆柱体来说,几何中心与形心是重合的,而对于不规则图形或多个图形的组合很可能就不重合。
& e" H" ]0 S, i  y) _- K1 K0 U: ACAD的图形界面并没有提供得到这个盒子(BoundingBox)的直接的命令,但在二次开发方法中提供了。这就是ActiveX的GetBoundingBox方法。当然,只要理解了上面的道理,在图形界面也是可以把它画出来的。

评分

参与人数 1三维币 +5 收起 理由
★新手★ + 5 技术讨论

查看全部评分

 楼主| 发表于 2011-6-30 23:44:22 | 显示全部楼层
多谢斑竹解答。你所说的“边界框”让我茅塞顿开啊!$ N/ q8 @+ N$ M/ ^( c. _+ m4 k1 H
massprop给出的信息里边就有边界框的信息,简单的坐标计算后,那个绿色的几何中心和计算的坐标惊人的一致啊!这个方法虽然不能一部到位,不过还是很好使的。非常感谢!0 S9 P* Y, r2 k& B9 J. F
同时,你说的边界框还让我想到了另外一件事:3dmax里面每次选中物体也会出现边界框,我就导入3dmax,哈哈,果然也找到了几何中心。看我附上的图:6 _; A  c/ O% F/ b# k5 i
我用的是“仅影响轴”和“对齐中心”的命令就能在3dmax里面把轴的原点放置在选中物体的几何中心上。而且这个坐标在世界坐标里面的数据和在cad得里面的很吻合!
" `" T/ l5 M# S0 x& h8 m以后看看能不能找到在cad里面编一个程序来实现这个功能。9 y1 X2 ]- L5 k! f& S  M
对了,还发现了一个命令 gtlocation 这个命令能把移动控件对齐到物体几何中心,也就是说cad里面其实隐含了这个几何中心的,可惜就是找不到一个直接的命令来提取。
+ w% i& k! k5 g. K$ O: e0 P不过斑竹所说“在图形界面也是可以把它画出来的。”这个是什么意思,我有点不理解。是通过作图的方式吗?
QQ截图未命名.png

评分

参与人数 1三维币 +5 收起 理由
★新手★ + 5 积极讨论

查看全部评分

发表于 2011-7-1 13:59:29 | 显示全部楼层
本帖最后由 woaishuijia 于 2011-7-1 14:00 编辑
( V) q( s3 e2 j3 p8 ^5 q
是通过作图的方式吗?

) X1 e: u; l5 a6 m5 f是的( z9 D& t# V+ y7 F
以后看看能不能找到在cad里面编一个程序来实现这个功能。
% q( }1 u0 Z5 K% q5 j4 t. G
试试下面的代码
  1.     Dim Space As AcadBlock, SS As AcadSelectionSet, E As AcadEntity, E_max As Variant, E_min As Variant, MaxP As Variant, MinP As Variant, _
    % G8 }, Z% o! e4 S0 ]) |
  2.         P1(2) As Double, P2(2) As Double, P3(2) As Double, P4(2) As Double, P5(2) As Double, P6(2) As Double, C(2) As Double, I As Integer
    7 e" r# B/ d+ Q
  3.     With ThisDrawing, F9 r) g# z! C. W0 ~3 t6 y
  4.         If .ActiveSpace = acModelSpace Then
    : r- J: o+ C. d+ L! p
  5.             Set Space = .ModelSpace
    ' T- ]  k5 t  v1 P
  6.         Else
    4 K2 \' X" U, A" B/ b  ?. R
  7.             Set Space = .PaperSpace. u7 Y! h/ y: |
  8.         End If
    2 Q, e4 E2 ]; w/ N/ }' P
  9.         Set SS = .SelectionSets.Add("SS" )( r7 H2 {+ E0 Z. w' J9 x7 r0 n
  10.         SS.SelectOnScreen3 i( W, F* B) ?6 I1 A( D
  11.         If SS.Count > 0 Then9 I; ?5 q1 L5 B4 I: q3 v
  12.             SS(0).GetBoundingBox MinP, MaxP3 L- ~9 ~' K! Z9 Y8 T
  13.             If SS.Count > 1 Then
      B  H8 g, W: U# c
  14.                 For I = 1 To SS.Count - 1) d* i6 Z$ g& C, H& y2 \
  15.                     SS(I).GetBoundingBox E_min, E_max+ i4 H2 P* I( i9 @
  16.                     If E_min(0) < MinP(0) Then MinP(0) = E_min(0)# v1 {5 A- E" e- u  v
  17.                     If E_min(1) < MinP(1) Then MinP(1) = E_min(1)
    1 w: H% f7 f3 S& `: X
  18.                     If E_min(2) < MinP(2) Then MinP(2) = E_min(2)
    2 x, P) h3 H6 g% a
  19.                     If E_max(0) > MaxP(0) Then MaxP(0) = E_max(0)6 M, }$ t- `8 Y6 A
  20.                     If E_max(1) > MaxP(1) Then MaxP(1) = E_max(1)0 s. a9 E; ^+ q1 m
  21.                     If E_max(2) > MaxP(2) Then MaxP(2) = E_max(2)
    ! I3 J$ I0 e5 \
  22.                 Next
    : ]: E1 i1 w, o) E
  23.             End If
    6 r# u4 f+ a/ q/ `% D
  24.             P1(0) = MaxP(0): P1(1) = MinP(1): P1(2) = MinP(2)+ `/ s+ O# r$ S$ a( i8 H/ K/ X" B1 q
  25.             P2(0) = MaxP(0): P2(1) = MaxP(1): P2(2) = MinP(2)
    : j5 x: f) r& W1 H0 W$ M2 [
  26.             P3(0) = MinP(0): P3(1) = MaxP(1): P3(2) = MinP(2)
    * s/ E! {: y0 x) e
  27.             P4(0) = MinP(0): P4(1) = MaxP(1): P4(2) = MaxP(2)
    1 g2 U. Y1 B- G7 C' E- y5 G: t
  28.             P5(0) = MinP(0): P5(1) = MinP(1): P5(2) = MaxP(2)
    4 {6 O+ E# |4 H; g, a: K2 a
  29.             P6(0) = MaxP(0): P6(1) = MinP(1): P6(2) = MaxP(2)
    3 i$ u4 b$ p; }7 N
  30.             C(0) = (MinP(0) + MaxP(0)) / 2: C(1) = (MinP(1) + MaxP(1)) / 2: C(2) = (MinP(2) + MaxP(2)) / 2
    # Z) L  S! s& q, ?" U- v8 N
  31.             With Space- Q# Z* B0 f$ N# D$ E
  32.                 .AddLine MinP, P1
    # N$ R6 c4 y/ ~- }
  33.                 .AddLine P1, P2
    0 ]2 ?- L0 s0 A0 @2 K7 Z
  34.                 .AddLine P2, P3
    # J3 \7 j& p/ ^; F# ]: Q, e1 @" j
  35.                 .AddLine P3, MinP
    $ M+ t  O8 x- n% E1 c" }' c; D
  36.                 .AddLine MinP, P58 B: f, [8 z8 X$ W
  37.                 .AddLine P1, P65 h% D5 n- o% r
  38.                 .AddLine P2, MaxP, g8 b( Q9 d$ R" w5 K
  39.                 .AddLine P3, P4
    & G0 G5 O9 l0 g/ r) O& ^& V
  40.                 .AddLine MaxP, P4. i! y7 u  Y6 @9 z
  41.                 .AddLine P4, P5
    6 \1 v& Q( ?0 e/ C! e+ O, }
  42.                 .AddLine P5, P6
    . k3 J8 Y- J, w1 h
  43.                 .AddLine P6, MaxP
    $ K: o9 ?0 `5 ]3 \7 }0 `, i6 @
  44.                 .AddPoint C
    4 }+ R# i2 {6 d/ n
  45.             End With
    - f" t2 |: l  V6 ~
  46.         End If) s4 |  K: F! v
  47.         SS.Delete7 M% m8 V; x; f# G
  48.     End With
复制代码

评分

参与人数 1三维币 +10 收起 理由
★新手★ + 10 应助

查看全部评分

发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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