[返回博客](/cn/blog) # .dgn文件中的栅格参考元素功能

Michael Kuzinets 六月 27, 2017 [\#dgn](/cn/blog/tag/dgn)

<a class="a2a_button_facebook"></a><a class="a2a_button_twitter"></a><a class="a2a_button_linkedin"></a>

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

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

![image1](/files/inline-images/image001_edited.jpg)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 天。  
无风险，无需信用卡。**

[免费试用](https://www.opendesign.com/cn/free-trial)
