Creating Sheets and Views in a CATDrawing Document-如何构建 CATDrawing 文档
摘要
本文论述CAADrwStructure用例,该用例阐述了如何在工程图文档中创建图纸与交互视图。
- 通过本用例您将掌握的内容
- CAADrwStructure 用例
- CAADrwStructure 实现功能
- CAADrwStructure 启动方法
- CAADrwStructure 代码位置
- 分步实现
- 小结
- 参考文献
通过本用例您将学到
在本用例中,您将学习如何处理工程图文档的结构,从而能够创建图纸与交互视图。
CAADrwStructure 用例
CAADrwStructure 是 CAADraftingInterfaces.edu 框架的一个用例,用于演示 DraftingInterfaces 框架的各项功能。
CAADrwStructure 实现了什么功能
图 1:该用例所创建的文档

这张图片展示了由该用例程序创建的一份 CATDrawing 工程图文档。程序首先创建一个基础工程图结构,包含一张工程图、一张图纸和两个视图(这些视图未在图中显示)。随后创建第二张图纸,并为其添加一个附加视图。
说明:
每张图纸始终包含:
- 主视图:用于存放直接在图纸中创建的各类元素
- 背景视图:专门用于绘制图框和标题栏
这两种视图均由图纸工厂自动创建,属于图纸的固有组成部分,因此无法删除,且未在图中显示。
如何运行 CAADrwStructure
要运行 CAADrwStructure,需先搭建编译环境,然后编译 CAADrwStructure 及其依赖项,配置运行环境,最后执行该用例 [1]。
启动该用例时,需将用于保存所创建文档的文件完整路径作为参数传入。
Windows 系统
e:> CAADrwStructure DrawingTest.CATDrawingUNIX 系统
$ CAADrwStructure /u/users/DrawingTest.CATDrawingCAADrwStructure 代码位置
CAADrwStructure 用例由单个源文件 CAADrwStructure.cpp 构成,该文件位于 CAADraftingInterfaces.edu 框架下的 CAADrwStructure.m 模块中:
Windows 系统
InstallRootDirectory\CAADraftingInterfaces.edu\CAADrwStructure.m\Unix 系统
InstallRootDirectory/CAADraftingInterfaces.edu/CAADrwStructure.m/其中
InstallRootDirectory 为 CAA 光盘的安装目录。分步实现
CAADrwStructure 包含五个步骤:
- 创建并初始化文档
- 访问文档中的工程图特征与工程图容器
- 在工程图文档中创建标准
- 为工程图文档中的当前图纸附加图纸格式
- 创建附加图纸并将其添加至工程图特征
- 创建视图并将其添加至刚创建的图纸中
- 在该视图中创建几何元素
- 保存文档并退出
创建并初始化文档
int main(int iArgc, // 参数个数 (1)
char** iArgv) // 新建 *.CATDrawing 文档的路径
{
// 校验参数
if(2 != iArgc) return 1;
const char *fileName = iArgv[1];
// 创建工程图文档
// =========================
// 创建会话
CATSession *pSampleSession = NULL;
HRESULT hr = ::Create_Session("SampleSession",pSampleSession);
if (FAILED(hr)) return 1;
CATDocument* pDoc = NULL;
hr = CATDocumentServices::New("CATDrawing", pDoc);
if (FAILED(hr)) return 2;
...
本部分展示了创建 CATIA 文档的标准流程。
访问文档中的工程图特征与工程图容器
...
// 获取工程图特征
CATIDftDrawing *piDftDrawing = NULL;
CATIDftDocumentServices *piDftDocServices = NULL;
CATIContainer_var spDrwCont;
if (SUCCEEDED(pDoc->QueryInterface(IID_CATIDftDocumentServices, (void **)&piDftDocServices)))
{
if (SUCCEEDED(piDftDocServices->GetDrawing(IID_CATIDftDrawing, (void **)&piDftDrawing)))
{
if (piDftDrawing)
{
// 获取工程图容器
CATISpecObject *piSpecObj=NULL;
if (SUCCEEDED(piDftDrawing->QueryInterface(IID_CATISpecObject,(void **)&piSpecObj)))
{
spDrwCont = piSpecObj->GetFeatContainer();
piSpecObj->Release();
piSpecObj=NULL;
}
}
}
piDftDocServices->Release();
piDftDocServices=NULL;
}
...
工程图文档的根特征是 Drawing(工程图对象),该特征实现了 CATIDrawing 接口。我们可以通过由文档实现的 CATIDftDocumentServices 接口获取指向 CATIDrawing 的指针。GetDrawing 方法的第一个参数即为你希望在工程图对象上获取的目标接口标识。
在工程图文档中创建绘图标准
...
// 从工程图容器获取标准管理器
CATIDftStandardManager *piStdmgr = NULL;
if (SUCCEEDED(spDrwCont->QueryInterface(IID_CATIDftStandardManager,(void**)&piStdmgr)))
{
// 在允许使用的标准列表中查找一种标准
//(即 resources/standard/drafting 目录下的所有 XML 文件列表)
CATIStringList *piListstd = NULL;
if ( SUCCEEDED(piStdmgr->GetAvailableStandards(&piListstd)) && piListstd )
{
unsigned int nbrstd = 0;
piListstd->Count(&nbrstd);
for (unsigned int indice = 0; indice < nbrstd; indice ++)
{
wchar_t *wstd = NULL;
if ( SUCCEEDED ( piListstd->Item ( indice, &wstd ) ) && wstd )
{
const CATUnicodeString ANSI_UncS = "ANSI";
CATUnicodeString stdname;
stdname.BuildFromWChar(wstd);
if ( stdname == ANSI_UncS )
{
// 在文档中导入 ANSI 标准
piStdmgr->ImportStandard (wstd);
break;
}
delete[] wstd; wstd = NULL;
}
}
piListstd->Release(); piListstd=NULL;
}
piStdmgr->Release (); piStdmgr=NULL;
}
...
CATIDftStandardManager 接口由工程图应用程序的应用容器实现。
GetAvailableStandards 方法用于返回可用标准列表。
ImportStandard 方法用于将指定标准应用到工程图文档。
创建附加图纸并将其添加到工程图特征中
...
CATIDftSheet *piDftNewSheet = NULL;
wchar_t *pSheetName= L"MyNewSheet";
if (SUCCEEDED(piDftDrawing->AddSheet(&piDftNewSheet,pSheetName)))
...
CATIDftDrawing 接口下的 AddSheet 方法用于创建图纸,并将其添加至工程图根节点。若在交互模式下调用该方法,图纸标签页将同步更新。
创建视图并将其添加到刚创建的图纸中
...
// 工程图工厂由工程图容器实现
CATIDrwFactory_var spDrwFact = spDrwCont;
// 创建带外观(MakeUp)的视图
CATIDftViewMakeUp *piNewViewMU = NULL;
if (NULL_var != spDrwFact && SUCCEEDED(spDrwFact -> CreateViewWithMakeUp(IID_CATIDftViewMakeUp, (void **)&piNewViewMU)))
{
if (piNewViewMU)
{
// 从外观对象中获取视图
CATIView *piNewView = NULL;
if (SUCCEEDED(piNewViewMU->GetView(&piNewView)))
{
if (piNewView)
{
// 必须为视图指定类型:交互视图使用主视图(FrontView)
piNewView->SetViewType(FrontView);
piNewViewMU->SetAxisData(100.0,50.0);
// 最后将视图添加到图纸中
if (piDftNewSheet) piDftNewSheet->AddView(piNewViewMU);
...
CATIDrwFactory由工程图容器实现。一个外观(MakeUp)对象会与视图相关联,因此我们通过CreateViewWithMakeUp方法同时创建这两个对象。必须为视图设置类型,并将其添加到图纸中。
在该视图中创建几何元素
...
// 在新图纸中激活这个新建视图
CATIDftView *piDftNewView=NULL;
if (SUCCEEDED(piNewView->QueryInterface(IID_CATIDftView,(void **)&piDftNewView)))
{
piDftNewSheet->SetDefaultActiveView(piDftNewView);
piDftNewView->Release();
piDftNewView=NULL;
}
// 获取线框工厂以创建几何元素
CATI2DWFFactory_var spGeomFactory(piNewView);
// 创建一个圆:
double center[2];
center[0]=50.0;
center[1]=60.0;
double radius = 50.0;
CATISpecObject_var spCercle;
if (NULL_var != spGeomFactory)
{
spCercle = spGeomFactory->CreateCircle(center,radius);
...
若要在视图中创建几何元素,必须先将该视图设为当前活动视图。线框工厂可从当前活动视图中获取。
保存文档并退出
...
// 保存结果
hr = CATDocumentServices::SaveAs(*pDoc, (char *)fileName);
if (FAILED(hr)) return 6;
// 结束会话并释放文档
CATDocumentServices::Remove (*pDoc);
::Delete_Session("SampleSession");
return 0;
}
这部分展示了保存新建的 CATIA 文档的标准流程。
小结
本用例展示了在 CATDrawing 工程图文档中创建图纸与视图时所用到的对象和接口。图纸通过
CATIDftDrawing 接口中定义的 AddSheet 方法创建,因此在交互环境下图纸标签页会相应更新。视图特征则通过由工程图容器实现的 CATIDrwFactory 接口中定义的 CreateViewWithMakeUp 方法创建。References
| [1] | Building and Lauching CAA V5 Samples |
| [2] | Creating a New Document |
希望和大家一起交流学习

浙公网安备 33010602011771号