Autodesk Community Tipsではちょっとしたコツ、やり方、ショートカット、アドバイスやヒントを共有しています。
Issue
AutoCAD .NET API で SURFEXTEND[延長サーフェス] コマンド と同じような処理は出来ますか?
Solution
サーフェス エッジの延長は、Surface.ExtendEdges メソッド で実装することが出来ます。
次の C# コードは、選択した1つのサーフェス エッジを 100 ポイント延長するものです。 SURFEXTEND[延長サーフェス] コマンド と同様に、エッジの延長でサーフェスに自己交差すると延長に失敗する場合があります。
var doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
var db = doc.Database;
var ed = doc.Editor;
try
{
PromptSelectionOptions pso = new PromptSelectionOptions();
pso.MessageForAdding = "\n延長するサーフェス エッジを選択:";
pso.SingleOnly = true;
pso.SinglePickInSpace = true;
pso.ForceSubSelections = true;
PromptSelectionResult psr = ed.GetSelection(pso);
if (psr.Status != PromptStatus.OK)
return;
SelectionSet ss = psr.Value;
SelectedObject surfedge = ss[0];
ObjectId surfId = ss.GetObjectIds()[0];
if (!surfId.ObjectClass.IsDerivedFrom(RXClass.GetClass(typeof(Autodesk.AutoCAD.DatabaseServices.Surface))))
{
ed.WriteMessage("\nサーフェス エッジを選択を選択してください ...");
return;
}
using (var tr = db.TransactionManager.StartTransaction())
{
var surf = tr.GetObject(surfId, OpenMode.ForWrite) as Autodesk.AutoCAD.DatabaseServices.Surface;
if (surf != null)
{
if (surfedge.GetSubentities()[0].FullSubentityPath.SubentId.Type != SubentityType.Edge)
{
ed.WriteMessage("\n{0} が選択されました ...\nサーフェス エッジを選択を選択してください ...",
surfedge.GetSubentities()[0].FullSubentityPath.SubentId.Type);
tr.Abort();
return;
}
FullSubentityPath[] edges = { surfedge.GetSubentities()[0].FullSubentityPath };
surf.ExtendEdges(edges, 100.0, Autodesk.AutoCAD.DatabaseServices.Surface.EdgeExtensionType.ExtendEdge, true);
}
tr.Commit();
}
}
catch (Autodesk.AutoCAD.BoundaryRepresentation.Exception ex)
{
ed.WriteMessage("\nエラー: {0}\r\n at {1}", ex.Message, ex.StackTrace);
}
なお、SURFEXTEND[延長サーフェス] コマンド によるサーフェス延長とは異なり、Surface.ExtendEdges メソッド による延長では、延長されたサーフェス部分は、無条件に元のサーフェスに結合された状態になります。 SURFEXTEND[延長サーフェス] コマンド では、延長されたサーフェスを元のサーフェスと結合(合成)するか、別のサーフェスとして追加するか(既定値)をコマンド プションで指定することが出来ます。