leven50 发表于 2024-10-16 17:26:58

【初级教程一】文档操作

本帖最后由 天工开发者团队 于 2024-10-17 14:09 编辑

一、新建文档
天工中有多种文档类型,通过根接口Application可获得Documents接口,使用Documents接口中的Add方法可以创建所有这些不同类型的文档。void CreaateDoc()
{
    TGFramework::DocumentsPtr pDocs = SEAPP->GetDocuments();
    // 要创造的文档接口的progId,
    // 可选值 SolidEdge.PartDocumentSolidEdge.AssemblyDocument
    // SolidEdge.DraftDocument SolidEdge.SheetMetalDocument
    // SolidEdge.weldmentDocument
    _variant_t progId = "SolidEdge.PartDocument";
    // 使用的模板文档,创建零件文件时可选值(GB公制零件 ANSI Inch...)
    _variant_t templateDoc = vtMissing; //使用默认模板
    TGPart::PartDocumentPtr pPartDoc=pDocs->Add(progId, templateDoc);
}         如上述代码所示,使用Add方法需要传入两个参数,第一个参数为一个字符串表示要创建的文档的progID,不同类型的文档有对应固定的progid,第二项为创建文档时使用的模板名,也可以不传参,则此时使用的是默认模板(国标公制)。

二、打开文档
      使用Documents接口中的Open、OpenWithFileOpenDialog、OpenWithTemplate方法可以打开文档。
void OpenDoc()
{
    TGFramework::DocumentsPtr pDocs = SEAPP->GetDocuments();
    // 直接打开一个天工类型文件
    TGAssembly::AssemblyDocumentPtr pAsmDoc = pDocs->Open(L"E:\\excercise\\asm.asm");

    // 交互式打开一个天工类型文件
    _variant_t optionFlags = TGConstants::GetFileOpenOptions::DisableReadOnly;
    TGPart::PartDocumentPtr pPartDoc = pDocs->OpenWithFileOpenDialog(L"E:\\excercise\\cube.par",
      L"请打开一个零件", optionFlags);

    // 将一个第三方Cad文件以指定的模板方式打开
    TGPart::PartDocumentPtr pPartDocScd = pDocs->OpenWithTemplate(L"E:\\1.stl", L"E:\\iso1.par");
}2.1 Open
      如上述代码所示,Open是最常用的方法,直接输入一个路径即可。对于这三个方法中涉及到路径的部分,均推荐使用宽字符进行描述。
2.2 OpenWithFileOpenDialog
      OpenWithFileOpenDialog可以交互式打开一个天工类型文件,其中第一个参数暗示了交互式对话框显示时路径,第二个参数指定标题,第三个参数指定对话框的选项,上述代码中OpenWithFileOpenDialog部分运行效果如下。

2.3 OpenWithTemplate
      OpenWithTemplate则用于打开一个第三方文档,第一个参数为三方文档的路径,第二个参数则为作为模板的路径。需要注意的是,如模板文档内容非空,则模板文档的内容也将作为最终打开文档的内容部分。

三、 保存文档
3.1 原位保存
      各类文档接口均有Save()方法,可直接保存。对于装配文档,如需要更改子装配实例后进行保存,前提是子装配实例可写。
void AddPropertyToPartDoc(TGPart::PartDocumentPtr partDoc)
{
    TGFramework::PropertySetsPtr pPropertieSets = partDoc->GetProperties();
    TGFramework::PropertiesPtr pCProperties = pPropertieSets->Item("Custom");
    if (nullptr == pCProperties) return;
    int cout = pCProperties->GetCount();
    _variant_t keyStr{ "20240607" };
    _variant_t valueStr{ "20241111" };
    pCProperties->Add(keyStr, valueStr);
}

void AddPropertyToAsmDoc(TGAssembly::AssemblyDocumentPtr assemblyDocument)
{
    TGAssembly::OccurrencesPtr occurrences = assemblyDocument->GetOccurrences();
    for (long idx = 1; idx <= occurrences->GetCount(); idx++)
    {
      TGAssembly::OccurrencePtr occurrence = occurrences->Item(idx);
      if (occurrence->GetType() == TGFramework::ObjectType::igPart)
      {
            occurrence->MakeWritable();// 关键句,使子装配实例可写
            TGPart::PartDocumentPtr partDoc = occurrence->GetOccurrenceDocument();
            AddPropertyToPartDoc(partDoc);// 添加零件的自定义属性
            if (partDoc->GetDirty())      // 如零件有修改,保存
            {
                partDoc->Save();
            }
      }
      else if (occurrence->GetType() == TGFramework::ObjectType::igSubAssembly) {
            TGAssembly::AssemblyDocumentPtr asmDoc = occurrence->GetOccurrenceDocument();
            AddPropertyToAsmDoc(asmDoc);
      }
    }
}
      上述代码演示了如何在装配环境下遍历子零件并给每个子零件添加自定义属性后并保存。
3.2 另存为
      各类文档接口均为SaveAs()方法,且它们的原型一致。一般只需要传入第一个参数,指示另存为路径。如想要让用户交互地选择另存为路径,则可先调用Application接口的GetSaveAsFileName方法。
void SaveDoc()
{
    TGFramework::DocumentsPtr pDocs = SEAPP->GetDocuments();
    TGAssembly::AssemblyDocumentPtr pAsmDoc = pDocs->Open(L"E:\\excercise\\asm.asm");
    // 获得另存为路径
    intlinkOption = TGFramework::LinksUpdateOption::igNoLinksUpdate;
    long selectedFilter = -1;
    _variant_t filterIndex(1l);
    _variant_t isTempltate(false);
    _variant_t savePath = SEAPP->GetSaveAsFileName(&linkOption, &selectedFilter,
      L"E:\\excercise\\111.asm", L"default_asm", filterIndex, L"请选择路径", isTempltate);
    if (savePath.bstrVal == NULL) {
      return;
    }
    _bstr_t savePathStr = savePath.bstrVal;
    pAsmDoc->SaveAs(savePathStr);
}      上述代码,首先使用GetSaveAsFileName请用户选择一个路径进行保存。如用户未取消,则获得了保存路径。调用SaveAs()将此文档另存到指定位置S,且函数结束时,天工CAD的当前文档路径已经是S。
3.2.1 GetSaveAsFileName
      此函数共有7个参数,其中后5个参数是可选的,最简单的形式是只传入两个nullptr。它的原型如下:
_variant_t GetSaveAsFileName(int* LinkSaveOption,long* SelectedFilter,const _variant_t& InitialFilename = vtMissing,const _variant_t& FileFilter = vtMissing,const _variant_t& FilterIndex = vtMissing,const _variant_t& Title = vtMissing,const _variant_t& IsTemplate = vtMissing);      LinkSaveOption:表示在保存后要如何更新与原文件有关联的文件,如一零件文件有装配文件与之关联,
      在零件文件另存为后,装配文件要如何更新。
      SelectedFilter FileFilter FilterIndex都与显示对话框时的筛选器有关,更具体的筛选器的写法可以查看SDK文档。
      Title表示打开的对话框的标题。
      IsTemplate 表示此文件是否保存为模板。
      InitialFilename 则指示了另存对话框初始显示位置和文件另存为时初始意向名。

四、关闭文档
      各类文档接口均有Close()方法,可以关闭文档,且它们的原型一致。
HRESULT Close(const _variant_t& SaveChanges = vtMissing,const _variant_t& FileName = vtMissing,const _variant_t& RouteWorkbook = vtMissing);      三个参数均为可选,前两个参数较为常用。
      SaveChanges 指示关闭文档时是否保存。如文档有变更,则默认值提示用户保存;输入为false时,直接关闭
      不保存;输入为true时,则按第二个参数保存。
      FileName 指定保存路径。对于已存档文件,它的默认保存位置就是存档位置。对于新建的文件,如此值未
      设定,则会弹出对话框提示用户选取保存路径。

页: [1]
查看完整版本: 【初级教程一】文档操作