明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: gsteven

如何加入dwg参照。成功!

  [复制链接]
 楼主| 发表于 2009-9-27 01:40 | 显示全部楼层

BlockTableRecord btr = (BlockTableRecord)operTrans.GetObject(operBlk[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                        Circle acCirc = new Circle();
                        acCirc.SetDatabaseDefaults();
                        acCirc.Center = new Point3d(2, 3, 0);
                        acCirc.Radius = 400;
                        btr.AppendEntity(acCirc);
                        operTrans.AddNewlyCreatedDBObject(acCirc, true);
                        //复制块定义
                        //frameDb.WblockCloneObjects(frameIDCol,operBlk.ObjectId,acIdMap,DuplicateRecordCloning.Ignore,false);
                        //插入外部参照
                        operDb.AttachXref(framePath,"图框");
                        //提交事务
                        operTrans.Commit();
                    }
                    //保存数据库到硬盘
                    operDb.SaveAs(operFilePath, null);

试了好久了,一直没用,复制块定义,画圆都成功了,operDb.AttachXref(framePath,"图框");没任何作用。同时一到operDb.SaveAs(operFilePath, null);就弹出消息框报错,说保存错误,然后程序继续运行。不知何故啊?

要像VBA中ModelSpace.AddExternalReference的这种插入外部参照的效果,也就是插入一个链接。

发表于 2009-9-27 07:17 | 显示全部楼层
  1.         [CommandMethod("ts2")]
  2.         public static void tt2()
  3.         {
  4.             Database db = new Database(false, true);
  5.             db.DxfIn("D:\\1.dxf", null);
  6.             using (Transaction tr = db.TransactionManager.StartTransaction())
  7.             {
  8.                 BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  9.                 DBPoint dptest = new DBPoint(Point3d.Origin);
  10.                 btr.AppendEntity(dptest);
  11.                 tr.AddNewlyCreatedDBObject(dptest, true);
  12.                 ObjectId id = db.AttachXref("d:\\2.dwg", "2");
  13.                 BlockReference blkref = new BlockReference(Point3d.Origin, id);
  14.                 btr.AppendEntity(blkref);
  15.                 tr.AddNewlyCreatedDBObject(blkref, true);
  16.                 tr.Commit();
  17.             }
  18.             db.SaveAs("d:\\1.dwg", null);
  19.         }
 楼主| 发表于 2009-9-27 22:22 | 显示全部楼层
斑竹你在运行到db.SaveAs("d:\\1.dwg", null);没有报错吗?我一直报错:警告,保存时出错,建议您对图形进行RECOVER.
发表于 2009-9-27 22:26 | 显示全部楼层

我在Cad2008测试没有问题的,你的版本?

 楼主| 发表于 2009-9-27 23:45 | 显示全部楼层
本帖最后由 作者 于 2009-9-28 8:45:40 编辑

我是2009的,我用导入dxf导出dxf成功了,不报错。

读入dxf,保存成dwg也可以的,不报错。

读入dwg,导出dxf也可以,不报错。

但是导入dwg,保存dwg就出现保存错误,运行完成后还是可以打开的,外部参照也添加了,可以一旦全选就出错,直接退出cad!

全部成功了!operDb.ReadDwgFile(operFilePath, FileOpenMode.OpenForReadAndWriteNoShare, true, "");
改成              operDb.ReadDwgFile(operFilePath, FileOpenMode.OpenForReadAndAllShare, true, "");

还有一个问题就是我插入的是绝对路径,后来我吧ObjectId id = operDb.AttachXref(framePath, "图框");
改成ObjectId id = operDb.AttachXref(@".\图框.dwg", "图框");还是绝对路径,不知道怎么插入相对路径?

operDb = new Database(false, true);//新建操作数据库
                    if (fileType == "DWG")//分为DWG,DXF分类打开图形数据库
                    {
                        operDb.ReadDwgFile(operFilePath, FileOpenMode.OpenForReadAndWriteNoShare, true, "");
                    }
                    else
                    {
                        operDb.DxfIn(operFilePath, null);
                    }
                    using (Transaction operTrans = operDb.TransactionManager.StartTransaction())
                    {

                        BlockTable operBlk;
                        operBlk = (BlockTable)operTrans.GetObject(operDb.BlockTableId, OpenMode.ForWrite);
                        BlockTableRecord btr = (BlockTableRecord)operTrans.GetObject(operBlk[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                        //插入外部参照
                        ObjectId id = operDb.AttachXref(framePath, "图框");
                        BlockReference blkref = new BlockReference(Point3d.Origin, id);
                        btr.AppendEntity(blkref);
                        operTrans.AddNewlyCreatedDBObject(blkref, true);

operTrans.Commit();

if (fileType == "DWG")//分为DWG,DXF分类保存图形数据库
                    {
                        operDb.SaveAs(operFilePath, null);
                        //operDb.SaveAs("D:\\23.dwg", null);
                    }
                    else
                    {
                        operDb.DxfOut(operFilePath, 14,DwgVersion.AC1015);
                    }

发表于 2009-9-28 09:15 | 显示全部楼层
                ObjectId id = db.AttachXref(".\\2.dwg", "2");

指定完整(绝对)路径

完整路径是确定文件参照位置的文件夹的完整指定的层次结构。完整路径包括本地硬盘驱动器号、网站的 URL 或网络服务器驱动器号。这是最明确的选项,但缺乏灵活性。

指定“无路径”

相对路径是使用当前驱动器号或宿主图形文件夹的部分指定的文件夹路径。这是灵活性最大的选项,可以使您将图形集从当前驱动器移动到使用相同文件夹结构的其他驱动器中。

如果所参照的文件位于其他本地硬盘驱动器上或网络服务器上,则相对路径选项不可用。

指定相对文件夹路径的规则如下:

\

查看宿主图形驱动器的根文件夹

路径

从宿主图形的文件夹中,按照指定的路径

\ 路径

从根文件夹中,按照指定的路径

.\ 路径

从宿主图形的文件夹中,按照指定的路径

..\ 路径

从宿主图形的文件夹中,向上移动一层文件夹并按照指定的路径

..\..\ 路径

从宿主图形的文件夹中,向上移动两层文件夹并按照指定的路径

注意如果包含参照文件的图形被移动或保存到另一个路径、另一个本地硬盘驱动器或另一个网络服务器,则必须编辑所有相对路径,使其适应宿主图形的新位置,或者必须重新定位参照文件。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-22 21:48 , Processed in 0.286248 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表