質問
AutoCAD ObjectARX .net APIで3D上の中心点、半径、開始点、終了点、法線を指定して円弧を作成する方法はありますか?
回答
APIで3D上の中心点、半径、開始点、終了点、法線を指定して円弧を作成するメソッドは提供されていませんが、3D上の中心点、半径、開始点、終了点、法線が分っている場合、CircularArc3dを用いることで、開始点、終了点から開始角、終了角を求めることができます。 開始角、終了角を取得した後、以下の中心点、法線、半径、開始角、終了角を指定する、円弧のコンストラクタを用いることで円弧を作成することができます。
public Arc(Point3d center, Vector3d normal,
double radius, double startAngle, double endAngle);
以下は中心点、半径、開始点、終了点、法線から、開始角、終了角を取得し、円弧を作成するコードです。
Document doc = Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
Vector3d vNormal = new Vector3d(1, 1, 1); //法線
Point3d pStart = new Point3d(157.7345, 71.1328, 71.1328);//開始点
Point3d pEnd = new Point3d(71.1328, 157.7345, 71.1328);//終了点
Point3d pCenter = new Point3d(100, 100, 100);//中心点
double rad = 70.71;//半径
//中心点、法線、半径を指定して円を作成
CircularArc3d cCirc = new CircularArc3d(pCenter, vNormal, rad);
double parStart = cCirc.GetParameterOf(pStart);
double parEnd = cCirc.GetParameterOf(pEnd);
double parMid = (parStart + parEnd) * 0.5;
//作成した円を用いて、円弧中点、開始、終了点を取得
Point3d pMid = cCirc.EvaluatePoint(parMid);
pStart = cCirc.EvaluatePoint(parStart);
pEnd = cCirc.EvaluatePoint(parEnd);
cCirc.Dispose();
//取得した開始点、終了点、円弧中点を用いて円弧を作成
CircularArc3d cArc = new CircularArc3d(pStart, pMid, pEnd);
//作成した円弧のアングルを取得
double angle = cArc.ReferenceVector.AngleOnPlane(new Plane(cArc.Center, cArc.Normal));
//円弧を作成
Arc arc = new Arc(cArc.Center, cArc.Normal, cArc.Radius, cArc.StartAngle + angle, cArc.EndAngle + angle);
cArc.Dispose();
//作成したArcをデータベースに追加
using (Transaction tr = doc.TransactionManager.StartTransaction())
{
BlockTableRecord btr = tr.GetObject(doc.Database.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord;
btr.AppendEntity(arc);
tr.AddNewlyCreatedDBObject(arc, true);
tr.Commit();
}
記事全体を表示