.dgn文件中的栅格参考元素功能

栅格参考元素 (OdDgReferenceAttachmentHeader) 实际上是一个非图形元素,没有图形元素属性,例如图层属性等。它不能像其他元素一样被选中。实际上,它存在显示和选择问题。

从 Bentley® MicroStation® V8 XM 格式开始,添加了一种新的元素类型:栅格帧元素 (OdDgRasterFrame)。它没有实际的图形数据,因此无法渲染。它与栅格参考元素配对,并且始终与它一起使用(从不作为单独的元素使用)。它为特定的栅格参考元素提供了图形元素属性,而这正是解决 OdDgReferenceAttachmentHeader 显示和选择问题的元素。

image1

OdDgReferenceAttachmentHeader 元素是类型 90,没有显示头,并与控制元素一起存储。OdDgRasterFrame 元素是类型 94,带有显示头,并与图形元素一起存储。

只有一个 OdDgRasterFrame 元素对应于 OdDgReferenceAttachmentHeader 元素。因此,一个 OdDgReferenceAttachmentHeader(类型 90)对应一个 OdDgRasterFrame(类型 94)。正是 OdDgRasterFrame 元素包含了描述栅格附件所需的所有数据。

当 OdDgReferenceAttachmentHeader 元素被修改时,Teigha 会更新并同步相应的 OdDgRasterFrame。

注意:您可以创建一个没有相应 OdDgRasterFrame 元素的 OdDgReferenceAttachmentHeader 元素,并且输出文件是有效的。但在这种情况下,应用程序必须解决栅格的“显示和选择问题”(例如,像 MicroStation 在这种情况下那样创建一个相应的 OdDgRasterFrame 元素)。

创建 OdDgReferenceAttachmentHeader 元素

创建一个包含栅格参考元素的 .dgn 文件(文件数据库和环境已存在):

  • 创建 OdDgRasterAttachmentHeader 对象。
  • 将栅格参考添加到数据库。
  • 填写基本属性(文件名、范围、方向等)。
  • 创建 OdDgRasterFrame 对象。
  • 将帧元素添加到数据库。
  • 为栅格参考设置参考ID。
  • 填写基本帧属性(栅格颜色模式等)。
// Add Raster Reference element
//
// EntityBoxes m_EntityBoxes;   //some table with number of rows and columns
// int boxRow;
// int boxColumn;
// OdDgModelPtr pModel3d;
{
// creates Raster Reference element
OdDgRasterAttachmentHeaderPtr raster = OdDgRasterAttachmentHeader::createObject();
double sx = m_EntityBoxes.getHeight() / 2.;    //some Height value
double rotation = .1;
double affinity = .03;  // some angles for demonstration

m_pModel3d->addElement(raster);  // add Raster Reference element to database

raster->setFilename(OdString( "attachUnkown.jpg"));
//some non-existent file name is set just for sample
raster->setExtent(OdGePoint2d(1., 1.));
raster->setOrientation(m_EntityBoxes.getBoxCenter(boxRow, boxColumn) - 
OdGeVector3d(sx / 3., 0., 0.),
OdGeVector3d(cos(rotation), sin(rotation), 0. ) * .01,
OdGeVector3d(-sin(rotation + affinity), cos(rotation + affinity), 0. ) * .01);

raster->setApplyRotationFlag(true);

// creates Raster Frame element
OdDgRasterFramePtr pRasterFrame = OdDgRasterFrame::createObject();

m_pModel3d->addElement(pRasterFrame);// add Raster Frame element to database

pRasterFrame->setRasterReferenceId(raster->id());
// binds Raster Reference element with the specific Raster Reference element

// sets graphic element properties…
pRasterFrame->setColorIndex(5);
pRasterFrame->setLineStyleEntryId(2);
pRasterFrame->setLineWeight(2);
pRasterFrame->setPrintableFlag(true);

pRasterFrame->setTintColorIndex(1536);
pRasterFrame->setForegroundColorIndex(1536);
pRasterFrame->setBackgroundColorIndex(2032);
pRasterFrame->setHighlightColorIndex(0);

// sets a valid file name. Raster Reference element data will be synchronized
pRasterFrame->setFileName(OdString("attach.jpg"));
OdString sFileNameRasteReferense = raster->getFilename();
OdString sFileNameRasterFrame = pRasterFrame->getFileName();
// you can compare sFileNameRasteReferense and sFileNameRasterFrame.
// They are obliged to be equal.

今天就开始行动

免费试用 ODA 软件 60 天。
无风险,无需信用卡。

免费试用