|
更新 2004年11月10日
オブジェクト座標系を求める方法 2004年11月10日
あるブロックにおいて、ブロック セクションにグループ コード (210, 220, 230) があらわれ、なおかつ、エンティティ セクションの項目「INSERT」にもグループ コード (210, 220, 230) があらわれる場合、次の方法でオブジェクト座標系を求めます。
最初に、ブロック セクションにあらわれるグループ コード (210, 220, 230) のデータからオブジェクト座標系のZ軸を得ます。 次に、「任意の軸のアルゴリズム」を使いX軸とY軸を求めます。
以上よりブロック セクションにおけるオブジェクト座標系のX軸、Y軸、Z軸が求まります。 ここで、ブロックセクションにおけるオブジェクト座標系のX軸、Y軸、Z軸を、それぞれ BlockXaxis, BlockYaxis, BlockZaxisとします。
BlockXaxis = (BXx, BXy, BXz)
BlockYaxis = (BYx, BYy, BYz)
BlockZaxis = (BZx, BZy, BZz)
BlockXaxis, BlockYaxis, BLockZaxis は単位ベクトル
次に、エンティティ セクションの項目「INSERT」にあらわれるグループ コード (210, 220, 230) のデータからオブジェクト座標系のZ軸を得ます。 次に、「任意の軸のアルゴリズム」を使いX軸とY軸を求めます。
以上よりエンティティ セクションの項目「INSERT」におけるオブジェクト座標系のX軸、Y軸、Z軸が求まります。 ここで、エンティティ セクションの項目「INSERT」におけるオブジェクト座標系のX軸、Y軸、Z軸を、それぞれ InsertXaxis, InsertYaxis, InsertZaxis とします。
InsertXaxis = (IXx, IXy, IXz)
InsertYaxis = (IYx, IYy, IYz)
InsertZaxis = (IZx, IZy, IZz)
InsertXaxis, InsertYaxis, InsertZaxis は単位ベクトル
図形を再現するための新しいオブジェクト座標系のX軸、Y軸、Z軸を、それぞれ NewXaxis, NewYaxis, NewZaxisとすると、次の関係が成り立ちます。
NewXaxis, NewYaxis, NewZaxis は単位ベクトル
以上から得た新しいオブジェクト座標系のX軸、Y軸、Z軸を基準として、ブロック セクションのデータから図形を再現します。
ただし、ブロック セクションにグループ コード (210, 220, 230) があらわれ、なおかつ、エンティティ セクションの項目「INSERT」にもグループ コード (210, 220, 230) があらわれ、なおかつ、項目「INSERT」にグループ コード「50」があらわれる場合、次のようになります。
NewXaxis, NewYaxis, NewZaxis は単位ベクトル
以上がオブジェクト座標系を求める方法です。
具体例 その1 2004年11月10日
具体例を使いオブジェクト座標系を求めます。
ブロック セクションに図のようなデータがあるとします。
![]()
![]()
0
BLOCK
5
F5
330
F4
100
AcDbEntity
8
0
100
AcDbBlockBegin
2
block1
70
0
10
0.0
20
0.0
30
0.0
3
block1
1
0
LWPOLYLINE
5
F7
330
F4
100
AcDbEntity
8
0
100
AcDbPolyline
90
3
70
1
43
0.010
0.0
20
0.0
10
100.0
20
0.0
10
0.0
20
200.0
210
-1.0
220
0.0
230
0.0
そして、エンティティ セクションの項目「INSERT」に、図のようなデータがあるとします。
![]()
0
INSERT
5
FE
330
1F
100
AcDbEntity
8
layer1
100
AcDbBlockReference
2
block1
10
0.0
20
0.0
30
0.0
210
0.0
220
0.0
230
-1.0
0
INSERT
5
FF
330
1F
100
AcDbEntity
8
layer2
100
AcDbBlockReference
2
block1
10
0.0
20
0.0
30
0.0
210
0.0
220
1.0
230
0.0
この例では、どちらの項目「INSERT」にもグループ コード「50」は、あらわれませんので、次の式により新しいオブジェクト座標系を得ます。
以上の式に、上記のデータを適用して計算します。
水色の場合、次のようになります。
![]()
赤紫色の場合、次のようになります。
以上の方法で、あたらしいオブジェクト座標系が求まりました。 このオブジェクト座標系を使い、図形を再現します。
具体例 その2 2004年11月10日
別の具体例を使いオブジェクト座標系を求めます。
ブロック セクションに図のようなデータがあるとします。
0
BLOCK
5
F5
330
F4
100
AcDbEntity
8
0
100
AcDbBlockBegin
2
block1
70
0
10
0.0
20
0.0
30
0.0
3
block1
1
0
LWPOLYLINE
5
F7
330
F4
100
AcDbEntity
8
0
100
AcDbPolyline
90
3
70
1
43
0.010
0.0
20
0.0
10
100.0
20
0.0
10
0.0
20
200.0
210
0.0
220
-0.7071067811865476
230
0.7071067811865475
そして、エンティティ セクションの項目「INSERT」に、図のようなデータがあるとします。
0
INSERT
5
F8
330
1F
100
AcDbEntity
8
layer1
100
AcDbBlockReference
2
block1
10
0.0
20
0.0
30
0.0
50
180.0
210
0.0
220
0.7071067811865478
230
0.7071067811865474
この例では、項目「INSERT」にグループ コード「50」が、あらわれるので、次の式により新しいオブジェクト座標系を得ます。
以上の式に、上記のデータを適用して計算します。
以上の方法で、あたらしいオブジェクト座標系が求まりました。 このオブジェクト座標系を使い、図形を再現します。 そして、グループ コード「50」があらわれていますので、図形を回転させます。