- 积分
- 949
- 明经币
- 个
- 注册时间
- 2014-12-1
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
class Test
{
[CommandMethod("blk")]
public void createBlkRef()
{
//获取块的插入点
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
PromptPointOptions ptOps = new PromptPointOptions("选择块的插入点");
PromptPointResult ptRes;
ptRes = ed.GetPoint(ptOps);
Point3d ptInsert;
if (ptRes.Status == PromptStatus.OK)
{
ptInsert = ptRes.Value;
}
else
{
ptInsert = new Point3d(0, 0, 0);
}
Database db = HostApplicationServices.WorkingDatabase;
// 使用 "using"关键字指定事务的边界
using (Transaction trans = db.TransactionManager.StartTransaction())
{
//获取块表和模型空间
BlockTable bt = (BlockTable)(trans.GetObject(db.BlockTableId, OpenMode.ForWrite));
BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
//创建块引用
BlockReference blkRef = new BlockReference(ptInsert, createBlkDef());// 指定插入点和所引用的块表记录
// blkRef.Rotation = 1.57;//指定旋转角,按弧度
//保存新创建的块引用到模型空间
btr.AppendEntity(blkRef);
trans.AddNewlyCreatedDBObject(blkRef, true); // 通知事务新创建了对象
trans.Commit(); //提交事务
}
}
public static ObjectId createBlkDef()
{
Document doc = openDoc("C:\\图例列表.dwg");
// DocumentLock docLock = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.LockDocument();
// docLock.Dispose();
Database db = doc.Database;
//Database db = HostApplicationServices.WorkingDatabase;
//定义函数的返回值ObjectId
ObjectId blkObjId = new ObjectId();
// 使用 "using"关键字指定事务的边界
using (Transaction trans = db.TransactionManager.StartTransaction())
{
//获取块表
BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
//通过块名myBlkName判断块表中是否包含块表记录
if ((bt.Has("DET_001")))
blkObjId = bt["DET_001"];//如果已经存在,通过块名获取块对应的ObjectId
trans.Commit(); //提交事务
}
return blkObjId;
}
//打开“图例列表.dwg”文件,但我做的是在cad中看到了,如果不看到,怎么做呢???
public static Document openDoc(string fileName)
{
Document doc = null;
DocumentCollection docMar = Application.DocumentManager;
if (System.IO.File.Exists(fileName))
{
doc = docMar.Open(fileName, false);
//docMar.MdiActiveDocument = doc;
}
else
docMar.MdiActiveDocument.Editor.WriteMessage("\n 文件" + fileName + "不存在");
return doc;
}
}
我是想把“图例列表.dwg”文件中块名为“DET_001”的块加入到一个.dwg的文件中,各位大神,我哪里出错了,整个cad崩溃了,还有就是我打开“图例列表.dwg”文件不在cad中显示怎么实现,我这里是在当前的cad中打开了,但不是当前Document。
|
|