乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 117|回复: 7

无法获取图案填充循环

[复制链接]

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2011-6-16 08:26:58 | 显示全部楼层 |阅读模式
大家好,
我使用C++的ARX步骤来创建一个块影线。(见下文)
图案填充按预期创建。
  1. Acad::ErrorStatus CadDrawing::AddHatch(const AcGePoint2dArray& Points, const AcGeDoubleArray& bulges)
  2. {
  3. Acad::ErrorStatus es = Acad::eNullHandle;
  4.          
  5. if (NULL != m_pCurDb)
  6. {
  7. AcDbObjectPointer hatch;
  8. AcDbObjectIdArray dbObjIds;
  9. hatch.create();
  10.                  
  11. hatch->setNormal(AcGeVector3d::kZAxis;
  12.   
  13. hatch->setElevation(0.0);
  14.                  
  15. hatch->setPattern(AcDbHatch::kPreDefined, _T("SOLID"));
  16.                  
  17. hatch->setHatchStyle(AcDbHatch::kNormal);
  18.                  
  19. hatch->setAssociative(true);
  20.          
  21. hatch->appendLoop(AcDbHatch::kExternal, Points, bulges);
  22. m_CurSpace->appendAcDbEntity(hatch));
  23.        
  24. hatch->getAssocObjIds(dbObjIds);
  25. LogString(L"The Hatch has (%i) AssocObjIds\n", dbObjIds.length());
  26.   }
  27.   }

接下来,我使用C#来获取hatch的外循环。
  1. namespace HatchLoops
  2. {
  3.   class Program
  4.   {
  5.     static void Main(string[] args)
  6.     {
  7.       AcadApplication BricscadApp = (AcadApplication)Marshal.GetActiveObject("BricscadApp.AcadApplication.11.0");
  8.       AcadDocument    BricscadDoc = BricscadApp.ActiveDocument;
  9.       object loop;
  10.       foreach (AcadEntity entity in BricscadDoc.ModelSpace) // search MS for the hatch
  11.       {
  12.         if (entity is AcadHatch)
  13.         {
  14.           AcadHatch hatch = entity as AcadHatch;
  15.           if (hatch.NumberOfLoops > 0)
  16.           {
  17.             hatch.GetLoopAt(0, out loop);
  18.             object[] loopObjects = (object[])loop;
  19.             foreach (object loopObject in loopObjects)
  20.             {
  21.               Console.WriteLine(((AcadEntity)loopObject).EntityName);
  22.             }
  23.           }
  24.         }
  25.         else
  26.         {
  27.           Console.WriteLine(entity.EntityName + " is not a hatch..");
  28.         }
  29.       }
  30.       Console.WriteLine("Press enter key");
  31.       Console.ReadLine();
  32.     }
  33.   }
  34. }

对于ARX创建的影线,NumberOfLoops属性返回“1”,
GetLoopAt(0,out loop)方法不返回任何对象....
ARX例程末尾的检查也没有显示任何关联的对象。
当我在手动创建的影线上使用C#代码时,循环被返回。
我是不是忘记了什么,或者混淆了ARX这边的步骤顺序?阿诺·范·尤文

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2011-6-16 11:28:59 | 显示全部楼层
你好,Arno
,您可以尝试在将其添加到数据库之前添加
  1. hatch->evaluateHatch();

回复

使用道具 举报

27

主题

193

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2011-6-17 03:25:47 | 显示全部楼层
嗨丹尼尔!
感谢您的建议,但它似乎没有解决问题。
仍然没有来自GetLoopAt和ARX日志记录的对象也显示0个附加对象。
还有其他建议吗?
阿诺
回复

使用道具 举报

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2011-6-17 13:27:03 | 显示全部楼层
检查Acad::ErrorStatus代码返回的每个函数。可能无法从appendLoop、appendAcDbEntity或getAssocObjIds获取eOk。如果是这样的话,那么解决方法就很容易了。
回复

使用道具 举报

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2011-6-20 04:16:00 | 显示全部楼层
嗨,Pkohut,
我放在这个线程顶部的代码有点简化,以显示我正在遵循的步骤。
实际上,我正在检查每个步骤的返回代码,并在出现问题时记录消息。
但是日志记录根本没有显示错误消息,表明一切顺利。
只有最后一个LogString()报告“0”关联对象。(意味着日志记录确实有效)
所以,仍然不明白这应该如何真正工作。
我真的可以使用一个提示(或两个)
Arno
见下文:
  1. Acad::ErrorStatus CadDrawing::AddHatch(const AcGePoint2dArray& Points, const AcGeDoubleArray& bulges)
  2. {
  3.     Acad::ErrorStatus es = Acad::eNullHandle;
  4.          
  5.    if (NULL != m_pCurDb)
  6.    {
  7.      AcDbObjectPointer hatch;
  8.      AcDbObjectIdArray dbObjIds;
  9.      if ((es = hatch.create()) != Acad::eOk)
  10.      {
  11.        LogString(L"Failed to create hatch\n");
  12.        return es;
  13.       }
  14.                  
  15.       if ((es = hatch->setNormal(AcGeVector3d::kZAxis)) != Acad::eOk)
  16.       {
  17.         LogString(L"Failed to set hatch Normal vector\n");
  18.         return es;
  19.        }
  20.                  
  21.        if ((es = hatch->setElevation(0.0)) != Acad::eOk)
  22.        {
  23.           LogString(L"Failed to set hatch Elevation vector\n");
  24.           return es;
  25.         }
  26.                  
  27.         if ((es = hatch->setPattern(AcDbHatch::kPreDefined, _T("SOLID"))) != Acad::eOk)
  28.         {
  29.            LogString(L"Failed to set hatch Pattern to SOLID\n");
  30.            return es;
  31.          }
  32.                  
  33.          if ((es = hatch->setHatchStyle(AcDbHatch::kNormal)) != Acad::eOk)
  34.          {
  35.              LogString(L"Failed to set hatch style\n");
  36.          return es;
  37.           }
  38.                  
  39.            if ((es = hatch->setAssociative(true)) != Acad::eOk)
  40.            {
  41.               LogString(L"Failed to set hatch assiciative\n");
  42.               return es;
  43.             }
  44.        
  45.             if ((es = hatch->appendLoop(AcDbHatch::kExternal, Points, bulges)) != Acad::eOk)
  46.             {
  47.            LogString(L"Failed to appendloop to hatch. Error (%i)\n", es);
  48.            return es;
  49.          }
  50.        
  51.               //setting current layer, color etc....          
  52.          if ((es = setEntityCurProperties(hatch.object())) != Acad::eOk)
  53.          {
  54.                 LogString(L"Failed to set hatch properties\n");
  55.             return es;
  56.           }
  57.                if ((es = hatch->evaluateHatch()) != Acad::eOk)  
  58.                {
  59.                   LogString(L"Failed to evaluate hatch\n");
  60.              return es;
  61.                 }
  62.                 if ((es = m_CurSpace->appendAcDbEntity(hatch)) != Acad::eOk)
  63.            {
  64.                LogString(L"Failed to append hatch to block (%s)\n", LPCTSTR(m_CurSpaceName));
  65.                return es;
  66.                  }
  67.        
  68.                  if ((es = hatch->getAssocObjIds(dbObjIds)) != Acad::eOk)
  69.                  {
  70.                     LogString(L"Failed to get hatch AssocObjIds\n");
  71.                return es;
  72.                   }
  73.                   LogString(L"The Hatch has %i AssocObjIds\n", dbObjIds.length());
  74.               return es;
  75.          }
  76.          
  77.          return es;
  78. }

回复

使用道具 举报

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2011-6-20 08:58:13 | 显示全部楼层

好的,在一次小小的网络搜索后发现以下内容:
用以下代码替换:
hatch->appendLoop(AcDbHatch::kExternal,Points,bulges)
:首先创建一条多段线,
-将其添加到图案填充中
-然后使用appendLoop方法将多段线ID添加到图案轮廓中。
  1. AcDbObjectPointer polyline;
  2.      
  3. if ((es = polyline.create()) != Acad::eOk)
  4. {
  5.    LogString(L"Failed to create polyline\n");
  6.    return es;
  7. }
  8. polyline->setElevation(0.0);
  9. for (int i = 0; i addVertexAt(i, Points[i]);
  10. }
  11. for (int i = 0; i setBulgeAt(i, bulges[i]);
  12. }
  13.    
  14. AcDbObjectId polyId;
  15.    
  16. if ((es = m_CurSpace->appendAcDbEntity(polyId, polyline)) != Acad::eOk)
  17. {
  18.   LogString(L"Failed to append polyline to block (%s)\n", LPCTSTR(m_CurSpaceName));
  19.   return es;
  20. }
  21.      
  22. AcDbObjectIdArray loops;     
  23. loops.insertAt(0, polyId);
  24.   
  25. LogString(L"Hatch-loops has %i objects\n", loops.length());
  26. if ((es = hatch->appendLoop(AcDbHatch::kExternal, loops)) != Acad::eOk)
  27. {
  28.   LogString(L"Failed to appendloop to hatch. Error (%i)\n", es);
  29.   return es;
  30. }

回复

使用道具 举报

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2011-6-20 19:04:33 | 显示全部楼层
太棒了!很高兴你想通了
回复

使用道具 举报

6

主题

39

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
63
发表于 2011-6-21 03:39:34 | 显示全部楼层
我发现的例子(Autodesk 2009 arxref.chm,它有多难? ) 使用方法 ->postToDb(someObject,id) 来获取 id.
在 Bricscad 的 BRX 中,我找不到该方法,所以我将折线添加到块中。
现在唯一要解决的问题是,折线(因为它是在舱口之前添加的)位于舱口下方。
我想给它一个不同的颜色来突出轮廓。
我是否必须深入研究字典才能使绘制顺序?
任何人都可以在这里开一个洞吗?
阿诺
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 16:46 , Processed in 0.213298 second(s), 79 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表