惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog
A
About on SuperTechFans
Microsoft Security Blog
Microsoft Security Blog
Y
Y Combinator Blog
罗磊的独立博客
J
Java Code Geeks
人人都是产品经理
人人都是产品经理
MongoDB | Blog
MongoDB | Blog
The GitHub Blog
The GitHub Blog
G
Google Developers Blog
U
Unit 42
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - Franky
Jina AI
Jina AI
F
Fortinet All Blogs
H
Help Net Security
B
Blog RSS Feed
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Last Week in AI
Last Week in AI
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
C
Check Point Blog
GbyAI
GbyAI

博客园 - sunwaywei

被MM当成电脑白痴了 用Delphi编写的一个上网助手 Excel 2007的日期格式设置 使用C++绘制算法弥补.net图形绘制缺陷 使用UpdatePanel控件要注意的一个问题 Chuck Jazdzewski 对新手程序员的建议 打赢了一场效率仗 一个极有可能引发ExecutionEngineException的情况 竟然是灰鸽子? They're Back!!! Turbo系列产品的回归! 不小心染上了Bloodhound.NsAnti .net 2.0 的 Bug?--与 COM 交互时发生奇怪的 InvalidCastException 第三届虚拟现实峰会 忙碌的这几天 ASP.NET 2.0 中使用自定义缓存依赖 在 .net 2.0 中使用自定义事务操作 郁闷的端午节 奇怪的C++问题 为了一个 const 折腾了半天
CAD二次开发中遇到一个无法解决的问题
sunwaywei · 2006-05-11 · via 博客园 - sunwaywei

  最近要做一个CAD的插件,因为以前没有做过,十分费劲。这不,遇上了一个很奇怪的问题,折腾了一下午,到现在也没解决。

  想法是这样的:我在一个dwg文件里定义了一个块,并且已经在模型空间里被引用了一次以上。我想通过程序找到每一个引用,输出它们的位置和缩放比率。相关程序如下:

 1if ((es = acdbCurDwg()->getBlockTable(pBlockTable, AcDb::kForRead)) == Acad::eOk)
 2{
 3    if ((es = pBlockTable->getAt(blockname, pBlockRecord, AcDb::kForRead)) == Acad::eOk)
 4    {
 5        ads_printf("pBlockTable->getAt()成功。\n");    //for test
 6
 7        AcDbBlockReferenceIdIterator* pIter;
 8        if (pBlockRecord->newBlockReferenceIdIterator(pIter) == Acad::eOk)
 9        {
10            ads_printf("pBlockRecord->newBlockReferenceIdIterator()成功。\n");    //for test
11            for (pIter->start(); !pIter->done(); pIter->step())
12            {
13                ads_printf("迭代中。\n");    //for test
14                AcDbBlockReference* pBlockRef = NULL;
15                if (pIter->getBlockReference(pBlockRef, AcDb::kForRead) == Acad::eOk)
16                {
17                    i++;
18                    ads_printf("第%d个图:", i);
19                    AcGePoint3d pos = pBlockRef->position();
20                    ads_printf("位置(%f,%f),", pos[0], pos[1]);
21                    AcGeScale3d scale = pBlockRef->scaleFactors();
22                    ads_printf("缩放因子(%f,%f)\n", scale[0], scale[1]);
23                }

24            }

25            delete pIter;
26        }

27        pBlockRecord->close();
28    }

29    pBlockTable->close();
30}

31


  从程序的执行结果来看,一直到 newBlockReferenceIdIterator 都是成功的。然而迭代过程却总是无法开始,实在是非常奇怪。而从作为源文件的dwg文件来看,应当是可以取到数据的。以下是dwg文件信息截图:


  可以看到块定义和块引用都是正确的。但是程序中却无法通过 AcDbBlockReferenceIdIterator 取到任何引用信息?这是为什么呢?