gskelly 发表于 2011-10-30 09:44:43

用Bricscad推翻样品

只是一个用Bricscad和Drx 3.05(后来改名为Tx)快速否决样本。
display cords图层上的点被否决以显示它们的坐标。
请参阅代码、图片和附件
appload DrxOverrule.tx以运行
bool OverRuleSample::onFilteredLayer(const OdDbPoint *point) const
{
    if(point)
    {
      OdDbLayerTableRecordPtr pLayer = point->layerId().safeOpenObject();
      return _tcsicmp(pLayer->getName(),_T("DisplayCords")) == 0;
    }
    return false;
}
double OverRuleSample::getTextHeight(const OdDbPoint *point) const
{
    if(point)
    {
      const OdDbDatabase * pDatabase = point->database();
      OdDbTextStyleTableRecordPtr pStyle = pDatabase->getTextStyleStandardId().safeOpenObject();
      return pStyle->textSize();
    }
    return 0.0;
}
bool OverRuleSample::worldDraw( const OdGiDrawable *drawable, OdGiWorldDraw *wd )
{
    OdDbPoint *point = OdDbPoint::cast(drawable);
    if(point && onFilteredLayer(point))
    {
      const double tsize = getTextHeight(point);
      const OdGePoint3d pnt = point->position();
      m_text.format(_T("X=%f Y=%f Z=%f"),pnt.x,pnt.y,pnt.z);
      wd->geometry().text(pnt,point->normal(),point->normal().perpVector(),tsize,tsize*m_text.getLength(),0.0,m_text);
    }
    return OdGiDrawableOverrule::worldDraw(drawable,wd);
}
bool OverRuleSample::isApplicable( const OdRxObject* pOverruledSubject ) const
{
    return true;
}



**** Hidden Message *****

frtfff 发表于 2011-10-31 19:37:51

酷!看起来对我来说几乎很容易理解。你玩过这些覆盖吗,足以知道是否有很大的性能提升?
我真的不明白isApplication...我必须玩它,看看我是否能弄清楚。
谢谢丹尼尔...

frtfff 发表于 2011-11-2 09:01:01

嗨,Greg,
我没有做过任何基准测试,但我敢打赌否决本身真的很快。我的示例可能不会太快,因为我打开了几个记录来获取图层和文本高度。这些当然可以被缓存。丹

frtfff 发表于 2011-11-4 23:36:06

好的
页: [1]
查看完整版本: 用Bricscad推翻样品