1、Teigha中DWG数据库结构:
经常用到的有TextStyleTable、LayerTable、LinetypeTable、BlockTable及其对应的TextStyleTableRecord、LayerTableRecord、LinetypeTableRecord、BlockTableRecord及Entity。
textstyle2、具体使用
2.1添加引用
使用前应该添加TD_Mgd_3.03_9.dll或是其他版本类库,类库分为64位与32位,32位类库在64位系统上运行效果可能不太好。3.02版本及一下版本可能没有64位的类库。
命名空间有:
Teigha.DatabaseServices;
Teigha.Geometry;
Teigha.Colors;
Teigha.Export_Import;
Teigha.GraphicsInterface;
Teigha.GraphicsSystem;
Teigha.Runtime;
3.02及以下版本命名空间应将Teigha换为DWGdirect。
2.2打开、新建、保存数据库
使用之前应加上这个:
using (Services ser = new Services())//一个应用程序加上一个就行了,否则出错
1、打开数据库(dwg文件)
using (Database pDb = new Database(false, false))//不加参数会出错
{
pDb.ReadDwgFile(Application.StartupPath + "\\TABMENU.dwg", FileOpenMode.OpenForReadAndWriteNoShare, false, "");
}
2、新建数据库
using (Database pDb = new Database())//加参数出错
3、保存
(1)保存格式
SaveType pSavetype = SaveType.Save12; //Save12为.dwg Save13为dxf
默认保存为dwg,可以不用指定。
(2)保存版本类型
DwgVersion dwgver = DwgVersion.vAC18; //ACAD2010为vAC24;ACAD2007为vAC21;ACAD2004为vAC18;
很重要,保存时要用,版本过高时低版本AutoCAD不能打开。
(3)保存
pDb.SaveAs(filename, dwgver);
pDb为数据库(Database),filename为dwg文件名,dwgver为版本。
2.3写数据
2.3.1添加文本样式
ObjectId styleId = ObjectId.Null;
using (TextStyleTable pStyles = (TextStyleTable)pDb.TextStyleTableId.GetObject(OpenMode.ForWrite))
{
//文本样式记录
using (TextStyleTableRecord pStyle = new TextStyleTableRecord())
{
// 表对象(记录)添加到表之前必须命名
// isShapeFile flag must also be set (if true) before adding the object
// to the database.
pStyle.Name = styleName;//必须设定
pStyle.IsShapeFile = isShapeFile;//添加(记录)到数据库之前必须设定(如果为true)
// Add the object to the table.添加对象(记录)到表
styleId = pStyles.Add(pStyle);
// 设置剩下的属性。(可以添加后设置也可以添加之前设置)
pStyle.TextSize = textSize;
pStyle.XScale = xScale;
pStyle.PriorSize = priorSize;
pStyle.ObliquingAngle = obliquing;
pStyle.FileName = fileName;
if (isShapeFile)
pStyle.PriorSize = 22.45;
if (!string.IsNullOrEmpty(ttFaceName))
pStyle.Font = new FontDescriptor(ttFaceName, bold, italic, charset, pitchAndFamily);
return styleId;
}
}
注:pDb为Database
2.3.2添加线型
using (LinetypeTable pLinetypes = (LinetypeTable)pDb.LinetypeTableId.GetObject(OpenMode.ForWrite))
{
//线表记录
using (LinetypeTableRecord pLinetype = new LinetypeTableRecord())
{
pLinetype.Name = name;//必须命名
ObjectId linetypeId = pLinetypes.Add(pLinetype);//添加记录
return linetypeId;
}
}
注:线型要有相应的线型文件,且不一定能够加成功,线型可以在使用之前手动加在dwg模板中,从其他文件向dwg文件复制线型,可能不成功。
2.3.3添加块
例:
using (BlockTable blockTable = (BlockTable)pDb.BlockTableId.GetObject(OpenMode.ForWrite))
{
ObjectId annoBlockId;
using (BlockTableRecord btr = new BlockTableRecord())
{
btr.Name = "AnnoBlock";
annoBlockId = blockTable.Add(btr);
using (Circle pCircle = new Circle())
{
pCircle.SetDatabaseDefaults(pDb);
btr.AppendEntity(pCircle);
Point3d center = new Point3d(0, 0, 0);
pCircle.Center = center;
pCircle.Radius = 0.5;
}
}
}
向块表中加入块之前,块一定要有名字。同时可以从其他文件中提取块,加入到目标数据库中
例:
using (Database db = new Database(false, false))
{
if (!File.Exists(Application.StartupPath + "\\BLOCKS\\" + blockname + ".dwg"))
{
MessageBox.Show("没到CASS块文件");
return ObjectId.Null;
}
db.ReadDwgFile(Application.StartupPath + "\\BLOCKS\\" + blockname + ".dwg", FileOpenMode.OpenForReadAndAllShare, false, "");
using (BlockTable pTable = (BlockTable)db.BlockTableId.Open(OpenMode.ForRead))
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论