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

推荐订阅源

I
InfoQ
S
SegmentFault 最新的问题
N
Netflix TechBlog - Medium
B
Blog
Jina AI
Jina AI
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 聂微东
Last Week in AI
Last Week in AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
V
V2EX
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
大猫的无限游戏
大猫的无限游戏
U
Unit 42
J
Java Code Geeks
IT之家
IT之家
aimingoo的专栏
aimingoo的专栏
博客园 - 叶小钗
T
The Blog of Author Tim Ferriss
博客园 - 【当耐特】
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
腾讯CDC

博客园 - 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 取到任何引用信息?这是为什么呢?