C# 플러그인을 통해 AutoCAD 도면에 외부 DWG를 삽입해야합니다. 삽입 된 블록의 삽입 지점과 회전을 사용자에게 "묻는"것이 필요합니다. 지금까지 필자는 항상 마우스 아래에 블록의 축소판을 제공하는 "._- insert"명령을 호출하는 lisp 함수를 사용하여 사용자가 그림을 클릭하여 삽입 포인터를 설정하고 그 지점에서 사용자가 한 번 더 클릭하여 회전을 설정합니다. 이제 다양한 CAD 환경에서 실행되는 솔루션이 필요하기 때문에 Lisp을 사용하거나 AutoCAD의 저급 API를 사용하지 않으려합니다. 내가 찾은 무엇 이 같은 것입니다 :마우스 아래에 축소판 그림이있는 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();
}
}
}
그러나 여기에서 나는 두 가지 문제가 있습니다 주요 한 마우스에서 미리보기가 없다는 것입니다. 두 번째는 삽입 지점과 회전을 모두 설정하기 위해 사용자가 2 번 대신 3 번 클릭해야한다는 것입니다.
어떤 종류의 SendCommand
을 사용하지 않는 방법이 있으며이 모든 것들을 수행합니까? TIA
제목에 C# 대신 태그를 사용하십시오. –