使用 AcGi 的示例
以下示例说明了如何使用 AcGi。首先,它保存颜色、线型和图层的当前实体属性值。然后,它将子实体特征颜色值更改为蓝色,并绘制一条三点折线。接下来,它将子实体特征颜色值更改为当前图层颜色,将线型值更改为 ,并绘制一条 xline。DASHDOT 示例代码包括两个函数 和 ,它们允许您从字符串中获取线型或图层的 ID。getLinetypeFromString()getLayerIdFromString() 注意:在实践中,这些函数可能太慢而无法在 中使用,应直接存储和使用对象 ID。worldDraw()
static Acad::ErrorStatus getLinetypeIdFromString(const TCHAR* str, AcDbObjectId& id); static Acad::ErrorStatus getLayerIdFromString(const TCHAR* str, AcDbObjectId& id); Adesk::Boolean AsdkTraitsSamp::subWorldDraw(AcGiWorldDraw* pW) { // At this point, the current property traits are // the entity's property traits. If the current // property traits are changed and you want to // reapply the entity's property traits, this is // the place to save them. // Adesk::UInt16 entity_color = pW->subEntityTraits().color(); AcDbObjectId entity_linetype = pW->subEntityTraits().lineTypeId(); AcDbObjectId entity_layer = pW->subEntityTraits().layerId(); // Override the current color and make it blue. // pW->subEntityTraits().setColor(kBlue); // Draw a blue 3-point polyline. // int num_pts = 3; AcGePoint3d *pVerts = new AcGePoint3d[num_pts]; pVerts[0] = AcGePoint3d(0.0, 0.0, 0); pVerts[1] = AcGePoint3d(1.0, 0.0, 0); pVerts[2] = AcGePoint3d(1.0, 1.0, 0); pW->geometry().polyline(num_pts, pVerts); // Force the current color to use current layer's color. // pW->subEntityTraits().setColor(kColorByLayer); // Force current line type to "DASHDOT". If // "DASHDOT" is not loaded, the current line // type will still be in effect. // AcDbObjectId dashdotId; if (getLinetypeIdFromString(_T("DASHDOT"), dashdotId) == Acad::eOk) { pW->subEntityTraits().setLineType(dashdotId); } // Force current layer to "MY_LAYER". If // "MY_LAYER" is not loaded, the current layer // will still be in effect. // AcDbObjectId layerId; if (getLayerIdFromString(_T("MY_LAYER"), layerId) == Acad::eOk) { pW->subEntityTraits().setLayer(layerId); } // Draw a dashdot'd xline in "MY_LAYER"'s color. // pW->geometry().xline(pVerts[0], pVerts[2]); delete [] pVerts; return Adesk::kTrue; } // A useful function that gets the linetype ID from the // linetype's name -- must be in upper case. // static Acad::ErrorStatus getLinetypeIdFromString(const TCHAR* str, AcDbObjectId& id) { Acad::ErrorStatus err; // Get the table of currently loaded linetypes. // AcDbLinetypeTable *pLinetypeTable; err = acdbHostApplicationServices()->workingDatabase() ->getSymbolTable(pLinetypeTable, AcDb::kForRead); if (err != Acad::eOk) return err; // Get the id of the linetype with the name that // 'str' contains. // err = pLinetypeTable->getAt(str, id, Adesk::kTrue); pLinetypeTable->close(); return err; } // A useful function that gets the layer ID from the // layer's name -- must be in upper case. // static Acad::ErrorStatus getLayerIdFromString(const TCHAR* str, AcDbObjectId& id) { Acad::ErrorStatus err; // Get the table of currently loaded layers. // AcDbLayerTable *pLayerTable; err = acdbHostApplicationServices()->workingDatabase() ->getSymbolTable(pLayerTable, AcDb::kForRead); if (err != Acad::eOk) return err; // Get the ID of the layer with the name that 'str' // contains. // err = pLayerTable->getAt(str, id, Adesk::kTrue); pLayerTable->close(); return err; } 父主题: |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2024-12-15 12:46
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.