LE3 发表于 2010-4-22 00:01:01

AcDb块选项卡le记录:获取预览Wicon





LE3 发表于 2010-4-22 00:41:30


也许吧?使用那个类…在那里

Kerry 发表于 2010-4-22 01:00:04

我不知道,我正在尝试阅读已插入块的预览图标。不过,我将检查代码...谢谢

pkohut 发表于 2010-4-22 01:01:49

或者寻找我几个月前在这里发布的图书馆。
szDwg = pathForDwg+_ T(" \ \ "+strDwg;
如果(!acdbDisplayPreviewFromDwg(szDwg,(void *)m _ dwgpreview . m _ hWnd))
m _ folderPath。SetWindowText(_T("没有可用的预览图像。"));
或者...使用blockview示例中可用的控件,您可以传递一个块并获得视图(我做了一些事情来显示每个对象选择的预览,类似于MEP对象查看器中的预览,您可以将块传递为drawable——如果我没记错的话——明天将查看我的代码——是时候小睡4到7个小时了)

LE3 发表于 2010-4-22 01:05:53

这是我现在拥有的代码。注意 由于块已入,该文件可能不存在
logertruct BlockInfo
{
CString name;
AcArray preview;
};
typedef CArray BlockInfoArray;

Acad::ErrorStatus BlockWorker::getBlockInfoFromdDb( BlockInfoArray &blocks )
{
AcDbObjectId blkId, BtrId;
CString blkName = getBlockName();
Acad::ErrorStatus es = Acad::eOk;
if(blkName.IsEmpty())
    return Acad::eInvalidBlockName;
std::auto_ptr blkDb(new AcDbDatabase(Adesk::kFalse,Adesk::kTrue));
if( (es = blkDb->readDwgFile(m_path,_SH_DENYWR)) != Acad::eOk)
{
    acutPrintf(_T("\nError: Line %ld [%s]\nIn function %s"),
      __LINE__, acadErrorStatusText(es),_T(__FUNCTION__));
    return es;
}
AcDbBlockTablePointer pBlockTablePointer(blkDb->blockTableId(), AcDb::kForRead);
if( (es = pBlockTablePointer.openStatus()) != Acad::eOk)
{
    acutPrintf(_T("\nError: Line %ld [%s]\nIn function %s"),
      __LINE__, acadErrorStatusText(es),_T(__FUNCTION__));
    return es;
}
AcDbBlockTableIterator *pIter = NULL;
if ( (es = pBlockTablePointer->newIterator(pIter)) != Acad::eOk)
{
    acutPrintf(_T("\nError: Line %ld [%s]\nIn function %s"),
      __LINE__, acadErrorStatusText(es),_T(__FUNCTION__));
    return es;
}
for(pIter->start();!pIter->done(); pIter->step())
{
    if(pIter->getRecordId(BtrId) == Acad::eOk)
    {
      AcDbBlockTableRecordPointer pBtr ( BtrId, AcDb::kForRead);
      if(pBtr.openStatus() == Acad::eOk)
      {
      if(pBtr->isAnonymous() || pBtr->isLayout() ||
         pBtr->isFromExternalReference() || pBtr->isFromOverlayReference())
      {
          continue;
      }
      TCHAR *name = 0;
      if(pBtr->getName(name) == Acad::eOk)
      {
          BlockInfo info;
          info.name = name;
          pBtr->getPreviewIcon(info.preview);
          blocks.Add(info);
          acutDelString(name);
          //if(pBtr->hasPreviewIcon() && info.preview.length() == 0)
            //acutPrintf(_T("\nBooooo Yuk"));
      }
      }
    }
}
delete pIter;
return es;
}

LE3 发表于 2010-4-22 01:22:18

我以为我是唯一一个做这种事的人。

pkohut 发表于 2010-4-22 05:29:17



我以为我是唯一一个做这种事情的人。

这是我能做的,我不得不放弃使用NSFW方法名称

LE3 发表于 2010-4-22 07:43:24

请参阅BlockView SDK示例。它们呈现到AcGsView,然后获取快照。

Kerry 发表于 2010-4-22 08:48:40

很棒,谢谢你的小费!这是相当多的咀嚼

pkohut 发表于 2010-4-22 12:45:51

这将是一张票…你可以传递你的块ID并获得视图-这里是一个实现的动画图像。
页: [1] 2
查看完整版本: AcDb块选项卡le记录:获取预览Wicon