CAD вставка блока с миниатюрой под мышью - PullRequest
4 голосов
/ 27 февраля 2012

Мне нужно вставить внешний файл DWG в чертеж AutoCAD через плагин C #.Мне нужно «спросить» у пользователя точку вставки и поворот вставленного блока.До сих пор я всегда использовал функцию lisp, которая вызывает команду «._- insert», которая дает миниатюру блока под мышью, позволяет пользователю щелкнуть на чертеже, чтобы установить точку вставки, и с этой точкипользователь нажимает еще раз, чтобы установить вращение.Теперь я хочу избежать использования Lisp или низкоуровневого API AutoCAD, потому что мне нужно решение, которое работает в различных средах САПР.Я обнаружил что-то вроде этого:

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 и делает все этоматериал?ТИА

Ответы [ 2 ]

2 голосов
/ 29 февраля 2012

Кажется, Jigging - это способ сделать предпросмотр.У меня есть три ссылки для вас.

Первый пример - создание простого контура с полилиниями - вы можете расширить эток блоку.

Вторая ссылка похожа, но применяет вращение к миксу.Это применяется к прямоугольнику, но снова может быть изменено для размещения блока.

Третья ссылка описывает другой метод - переходный графический интерфейс AutoCADs.Вы должны использовать AutoCAD 2009 или более позднюю версию, чтобы использовать этот метод.

Последние две ссылки взяты из блога Через интерфейс , где вы можете найти еще несколько примеров и очень хороший стартуказать, если у вас есть проблемы, особенно для кодирования C #.

0 голосов
/ 28 февраля 2012

Вы захотите использовать класс AcEdJig. Это обеспечивает предварительный просмотр. Вам нужно будет написать код для сбора точки вставки и поворота, а также для соответствующего преобразования блока.

Здесь - это первая ссылка из моего поиска в Google, например, код использования.

...