このページについて | ||||||||||||||||||||||||||
このページは、mura's home の AutoCAD掲示板 で、当方の発言(書込み)がある以下の掲示板の内容です。
タイトルおよび質問内容は上記より引用しています。 引用した質問内容は、バックカラーが となっています。 当方の発言は、バックカラーが となっています。 その他の著作権者の掲載許可を得ていない発言内容は削除(リンクを除く)しています。 また、当方では、削除部分の正当な著作権保持者を判断出来ませんので、 ご連絡を頂いても、復活させることは出来ません。ご了承下さい。
|
手持ち(2000i)のヘルプには、
『Normal プロパティ:図形の 3D
法線単位ベクトルを指定します。/読み書き可能』の他に、
OCS(オブジェクト座標系)以外に特別な記載はないのですが、
円弧の場合、"Normal"プロパティを変更をしても期待した結果となりません。
Normal=(0,0,1)は、3時の方向が角度計測(StartAngleなど)の基点で、
Normal<>(0,0,1)は、この基点が12時となっている為と推察しましたが、
何かオプション等の設定が必要なのでしょうか?
以下は確認用サンプルプログラムです。
Public Sub NormalPropertie_Test() Dim Arcobj As AcadArc Dim Copyobj1 As AcadArc Dim Copyobj2 As AcadArc Dim Copyobj3 As AcadArc Dim Copyobj4 As AcadArc Dim Center(0 To 2) As Double Dim Radius As Double Dim StartAngle As Double Dim EndAngle As Double Dim CopyobjNormal(0 To 2) As Double Dim Pi As Double Pi = 4 * Atn(1) 'π (180度 = pi = 4 * Atn(1)) MsgBox "円弧を作成します ", vbInformation, "NormalPropertie_Test" Center(0) = 0: Center(1) = 0: Center(2) = 0: Radius = 1 StartAngle = 0: EndAngle = Pi Set Arcobj = ActiveDocument.ModelSpace.AddArc(Center, Radius, StartAngle, EndAngle) 'ズームなど ActiveDocument.SendCommand "_zoom" & vbCr & "_e" & vbCr ActiveDocument.Regen acActiveViewport ' MsgBox "この円弧の Normal プロパティは" & vbCr & vbCr & _ " X = " & Arcobj.Normal(0) & vbCr & _ " Y = " & Arcobj.Normal(1) & vbCr & _ " Z = " & Arcobj.Normal(2) & vbCr & vbCr & _ "この円弧を4個コピーして、Normal プロパティを変更します" & vbCr & _ " ※ Y軸周りに回転させた状態となります" & vbCr & _ " (回転角 30,45,60,90度)", _ vbInformation, "NormalPropertie_Test" 'Pi/6 Set Copyobj1 = Arcobj.Copy() CopyobjNormal(0) = -0.5: CopyobjNormal(1) = 0: CopyobjNormal(2) = 0.8660254: Copyobj1.Normal = CopyobjNormal Copyobj1.Color = acRed Copyobj1.Update 'Pi/4 Set Copyobj2 = Arcobj.Copy() CopyobjNormal(0) = -0.70710678: CopyobjNormal(1) = 0: CopyobjNormal(2) = 0.70710678: Copyobj2.Normal = CopyobjNormal Copyobj2.Color = acCyan Copyobj2.Update '2Pi/6 Set Copyobj3 = Arcobj.Copy() CopyobjNormal(0) = -0.8660254: CopyobjNormal(1) = 0: CopyobjNormal(2) = 0.5: Copyobj3.Normal = CopyobjNormal Copyobj3.Color = acGreen Copyobj3.Update 'Pi/2 Set Copyobj4 = Arcobj.Copy() CopyobjNormal(0) = -1: CopyobjNormal(1) = 0: CopyobjNormal(2) = 0: Copyobj4.Normal = CopyobjNormal Copyobj4.Color = acMagenta Copyobj4.Update 'ズームなど ActiveDocument.SendCommand "_zoom" & vbCr & "_e" & vbCr ActiveDocument.Regen acActiveViewport MsgBox "[オブジェクト プロパティ管理] と" & vbCr & _ "[3D オービット] コマンドで確認してみてください", vbInformation, "NormalPropertie_Test" End Sub |
著作権者の許可を得ていないため削除
Joさん回答ありがとうございます。
ヘルプの、「任意の軸アルゴリズム」と
「オブジェクト座標系(OCS)」を見てみました。
図面データベース(および
DXF
ファイル)内のスペースを節約するためですか・・・
新規にオブジェクトを作成した場合ならともかく、
既存オブジェクトのプロパティを変更した場合なら、
XY軸とも確定できるはずですが、仕様なら仕方ありません。
オブジェクトを回転させることが目的でなく、
プログラム中で仮に作成するオブジェクトが、
予想外の表示となったためお伺い致しました。
任意の軸で目的が達成できますので、
これにて解決と致します。