3Dオブジェクトに加えて、ODA Publish SDKを使用して、.dwg、.dgn、およびBIMファイルから公開された2D CADオブジェクトを含むインタラクティブなドキュメントを作成できます。この記事では、2D CADオブジェクトを含む図面を公開するために使用されるPublish SDKクラスを要約します。
OdCADDefinitionクラス
OdCADDefinitionクラスは、.pdfにエクスポートされたCADオブジェクトのリポジトリです。オブジェクトはsetDatabase関数によって指定されます。オブジェクトは(その範囲を使用して)公開され、setMediaSize関数によって指定された出力キャンバスサイズに従ってスケーリングされます。このクラスの残りの関数は、PdfExportの設定に似ています。
void setDatabase(OdDbBaseDatabase *database);
void setLayoutName(const OdString& name);
//The whole drawing will be published (using its extents) and scaled to fit the specified output media size
void setMediaSize(const Page::PaperUnits units, const double width, const double height);
void setEmbededTrueTypeFonts(bool state);
void setTrueTypeFontAsGeometry(bool state);
void setSHXTextAsGeometry(bool state);
void setTextSearchable(bool state);
void setExportHyperlinks(bool state);
void setGeomDPI(OdUInt32 dpi);
void setBWImagesDPI(OdUInt32 dpi);
void setColorImagesDPI(OdUInt32 dpi);
OdCADReferenceクラス
OdCADReferenceクラスは、OdCADDefinitionに格納されているオブジェクトであるCADドキュメントのPDFページ表示です。CADオブジェクト(OdCADDefinition)の各表現に対して、複数の異なるマップが存在する可能性があります。
void setCADDefinition(OdCADDefinitionPtr cad_definition);
void setBorder(bool state);
void setBorderColor(ODCOLORREF color);
void setBorderWidth(const OdUInt16 width);
void setRotation(double rotation); /*in radians*/
void setClipBoundary(const Page::PaperUnits units, const OdGePoint2dArray& clipBoundary);
void setTransform(const OdGeMatrix2d& xfm);
void setScale(double scale);
void setTranslation(const OdGeVector2d& vec);
例
ドキュメントのPDFページに2D CADオブジェクトを追加するには、OdPageクラスに2つの関数があります。
void addCADReference(const OdCADReferencePtr& CADreference, const OdRect& location);
この関数は、2D CADオブジェクトをページに追加します。オブジェクトのサイズと位置は、locationパラメータで指定された長方形の領域によって決定されます。この場合、回転(setRotation)という1種類の変換のみを指定できます。オブジェクトを回転させると、その寸法が指定された領域の制限を超えないように自動的にスケーリングされます。この方法でオブジェクトをページに追加する場合、他の変換関数(setTransform、setScale、setTranslation)は効果がありません。
void addCADReference(const OdCADReferencePtr& CADreference);
この関数も2D CADオブジェクトをページに追加します。オブジェクトのサイズと位置は、OdCADReferenceオブジェクト自体で指定された変換行列によって決定されます。変換行列は、setTransform関数、またはsetScale、setRotation、setTranslation関数の組み合わせによって指定できます。
以下は、さまざまな2D CADオブジェクト(.prc; .dwg; BIM)の例です。
以下は、PDFドキュメントページに2D CADオブジェクトを追加するためのサンプルコードです。この例では、CADオブジェクトがページに追加され、45度回転されます。
OdCADDefinitionPtr pCADDef = OdCADDefinition::createObject();
pCADDef->setDatabase(pDatabase);
pCADDef->setMediaSize(Page::kMillimeters, 840., 594.);
OdCADReferencePtr pCADRef2 = OdCADReference::createObject();
pCADRef2->setCADDefinition(pCADDef);
pCADRef2->setRotation(OdaPI4);
pCADRef2->setBorder(true);
pPage1->addCADReference(pCADRef2, OdRect(5, 1180, 10, 800));
このコードの結果を次に示します。
図面の一部のみをページに表示するには、OdCADReferenceオブジェクトのsetClipBoundary関数を使用します。この関数は、CADオブジェクトのキャンバス(MediaSize)上に多角形の領域を設定します。以下に例を示します。
OdCADReferencePtr pCADRef3 = OdCADReference::createObject();
pCADRef3->setCADDefinition(pCADDef);
OdGePoint2dArray clip_box;
clip_box.append(OdGePoint2d(360, 100));
clip_box.append(OdGePoint2d(360, 350));
clip_box.append(OdGePoint2d(550, 350));
clip_box.append(OdGePoint2d(550, 100));
pCADRef3->setClipBoundary(Page::kMillimeters, clip_box);
pPage3->addCADReference(pCADRef3, OdRect(600, 1180, 50, 800));
このコードの結果を以下に示します。左側はOdTableオブジェクトの使用例を示しています。
次のコードは、変換行列を使用してCADオブジェクトを追加する方法を示しています。
OdCADReferencePtr pCADRef4 = OdCADReference::createObject();
pCADRef4->setCADDefinition(pCADDef);
OdGeMatrix2d transform;
transform.setCoordSystem(OdGePoint2d(350, 50), OdGeVector2d::kXAxis, OdGeVector2d::kYAxis);
transform *= OdGeMatrix2d::scaling(0.035);
transform *= OdGeMatrix2d::rotation(OdaPI/6.0);
pCADRef4->setTransform(transform);
pPage4->addCADReference(pCADRef4);
このコードの結果を次に示します。
行列変換のサンプル