using Application = Autodesk.AutoCAD.ApplicationServices.Core.Application;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Geometry;
using AGThsDrw;
using System;
using System.IO;
using System.Resources;
using Exception = System.Exception;
#if AUTOCAD
using DbS = Autodesk.AutoCAD.DatabaseServices;
using EdI = Autodesk.AutoCAD.EditorInput;
using Rt = Autodesk.AutoCAD.Runtime;
#endif
namespace AGThsDrw
{
public class AcInsBlock
{
[Rt.CommandMethod("AGInsBlock", "AGInsBlock", Rt.CommandFlags.Modal)]
public void InsBlockRef()
{
// Активный документ в редакторе AutoCAD
var doc = Application.DocumentManager.MdiActiveDocument;
// База данных чертежа (в данном случае - активного документа)
var db = doc.Database;
// Редактор базы данных чертежа
EdI.Editor ed = doc.Editor;
EdI.PromptPointOptions pPtOpts;
pPtOpts = new EdI.PromptPointOptions("\nУкажите точку вставки блока: ");
// Выбор точки пользователем
var pPtRes = doc.Editor.GetPoint(pPtOpts);
if (pPtRes.Status != EdI.PromptStatus.OK)
return;
var ptStart = pPtRes.Value;
// Запускаем транзакцию
using (DbS.Transaction tr = db.TransactionManager.StartTransaction())
{
DbS.BlockTable bt = tr.GetObject(db.BlockTableId, DbS.OpenMode.ForRead) as DbS.BlockTable;
DbS.BlockTableRecord model =
tr.GetObject(bt[DbS.BlockTableRecord.ModelSpace], DbS.OpenMode.ForWrite) as DbS.BlockTableRecord;
// Путь к файлу чертежа
string BlockPath;
// BlockPath = "H:\\ACAD+\\blocks\\схемы\\КШ.dwg";
BlockPath = "C:\\test.dwg";
// Создаем новую базу
using (DbS.Database db1 = new DbS.Database(false, false))
{
// Получаем базу чертежа-донора
db1.ReadDwgFile(BlockPath, System.IO.FileShare.Read, true, null);
// Получаем ID нового блока
DbS.ObjectId BlkId = db.Insert(BlockPath, db1, false);
DbS.BlockReference bref = new DbS.BlockReference(ptStart, BlkId);
// Дефолтные свойства блока (слой, цвет и пр.)
bref.SetDatabaseDefaults();
// Добавляем блок в модель
model.AppendEntity(bref);
// Добавляем блок в транзакцию
tr.AddNewlyCreatedDBObject(bref, true);
// Расчленяем блок
//bref.ExplodeToOwnerSpace();
//bref.Erase();
// Закрываем транзакцию
tr.Commit();
}
}
}
}
}