创建AutoCAD图元
var doc = Application.DocumentManager.MdiActiveDocument;
var ed = doc.Editor;
var db = doc.Database;
using (var docLock = doc.LockDocument())
{
using (var tr = db.TransactionManager.StartTransaction())
{
var bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
var btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
var txt = new DBText { TextString = "Hello World" };
btr.AppendEntity(txt); // 添加图元对象到数据库 + BlockTableRecord
tr.AddNewlyCreatedDBObject(txt, true);
// 如果没有这行,或者 add是false
// 如果后面有tr.commit() ,那么图元依然会添加进数据库, 但是有问题,不能选择t
// // 如果漏了 tr.AddNewlyCreatedDBObject(txt, true); 可以修复
//foreach (var id in btr)
//{
// var ent = tr.GetObject(id, OpenMode.ForWrite);
// tr.AddNewlyCreatedDBObject(ent, true); // make avaiable
// //ent.Erase(); // delete
// Console.WriteLine($"{ent}");
//}
// 如果用 tr.abort 那么数据会丢弃
tr.Commit();
}
}
创建Plant3D 图元
public static void CreatePipeInlineAsset()
{
var doc = Application.DocumentManager.MdiActiveDocument;
var ed = doc.Editor;
var db = doc.Database;
// var dlm = DataLinksManager.GetManager(db); // 不要用这个,会导致模型中的Plant3d属性丢失
// var dlm = PlantApplication.CurrentProject.ProjectParts["Piping"].DataLinksManager
using (var docLock = doc.LockDocument())
{
// 从等级中找到需要的模型 块
var specPart =
SpecManager.GetSpecManager().SelectParts("CustomParts Metric", "Elbow").ToList()
.Where(p => p.NominalDiameter.Equals(new NominalDiameter("mm", 50))).FirstOrDefault();
if (specPart == null) return;
// 在内存中创建Part,引用等级中找到的模型 块
var pipeInlineAsset = new PipeInlineAsset
{
SymbolId = ContentManager.GetContentManager().GetSymbol(specPart, db, Units.Mm)
};
// 进行矩阵变化
pipeInlineAsset.TransformBy(Matrix3d.Displacement(new Vector3d(1000, 200, 222)));
// 添加到DWG图元和Plant3D数据库,如果不调用这个方法,DWG中只有一个不可见的块,通过 insert或者 bedit 可以看到
using (var pipeObjAdder = new PipingObjectAdder(DataLinksManager3d.Get3dManager(PlantApplication.CurrentProject.ProjectParts["Piping"].DataLinksManager), db))
{
// pipeObjAdder.LineGroupId =
pipeObjAdder.Add(specPart, pipeInlineAsset);
}
// 添加到DWG图元
using (var tr = db.TransactionManager.StartOpenCloseTransaction())
{
tr.AddNewlyCreatedDBObject(pipeInlineAsset, true);
tr.Commit();
}
}
}