我需要通過C#插件將外部DWG插入到AutoCAD繪圖中。 我需要向用戶「詢問」插入點的插入點和旋轉。 到目前爲止,我總是使用一個lisp函數來調用命令「._- insert」,該命令給出了鼠標下方塊的縮略圖,允許用戶點擊圖形來設置插入點,並從該點開始用戶再次點擊一次來設置旋轉。 現在我想避免使用Lisp或使用AutoCAD的低級別API,因爲我需要一個可以在各種CAD環境下運行的解決方案。 我發現什麼是這樣的:鼠標下帶縮略圖的CAD插入塊
public static void InsertDwg(string dwgName)
{
CADAPI.ApplicationServices.Document doc = CADAPI.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
CADDB.Database db = doc.Database;
CADAPI.EditorInput.Editor ed = doc.Editor;
CADDB.ObjectId ObjId;
using (CADDB.Transaction trx = db.TransactionManager.StartTransaction())
{
CADDB.BlockTable bt = db.BlockTableId.GetObject(CADDB.OpenMode.ForRead) as CADDB.BlockTable;
CADDB.BlockTableRecord btrMs = bt[CADDB.BlockTableRecord.ModelSpace].GetObject(CADDB.OpenMode.ForWrite) as CADDB.BlockTableRecord;
using (CADDB.Database dbInsert = new CADDB.Database(false, true))
{
dbInsert.ReadDwgFile(dwgName, CADDB.FileOpenMode.OpenForReadAndAllShare, true, string.Empty);
ObjId = db.Insert(Path.GetFileNameWithoutExtension(dwgName), dbInsert, true);
}
CADAPI.EditorInput.PromptPointOptions ppo = new CADAPI.EditorInput.PromptPointOptions("\nInsertion Point");
CADAPI.EditorInput.PromptAngleOptions ppa = new CADAPI.EditorInput.PromptAngleOptions("\nInsert Rotation");
CADAPI.EditorInput.PromptPointResult ppr;
ppr = ed.GetPoint(ppo);
CADAPI.EditorInput.PromptDoubleResult ppd = ed.GetAngle(ppa);
if (ppr.Status == CADAPI.EditorInput.PromptStatus.OK)
{
CADGEOM.Point3d insertPt = ppr.Value;
CADDB.BlockReference bref = new CADDB.BlockReference(insertPt, ObjId);
btrMs.AppendEntity(bref);
trx.AddNewlyCreatedDBObject(bref, true);
trx.Commit();
}
}
}
但在這裏我有兩個問題: 最主要的一條是,有老鼠在任何預覽。 第二個是用戶需要點擊3次而不是2來設置插入點和旋轉。
是否有任何方式不使用某種SendCommand
並且做所有這些東西? TIA
請標記C#而不是在標題中使用它 – 2012-02-27 16:01:26