明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2410|回复: 6

高分求助填充问题

[复制链接]
发表于 2010-12-13 23:14:43 | 显示全部楼层 |阅读模式
AcDbHatch* pHatch = new AcDbHatch();
     AcGeVector3d normal(0.0, 0.0, 1.0);
    pHatch->setNormal(normal);
    pHatch->setElevation(0.0);

   // pHatch->setAssociative(Adesk::kFalse);

    pHatch->setPattern(AcDbHatch::kPreDefined, "SOLID");

   // pHatch->setStyle(AcDbHatch::kNormal);

      AcGePoint3d start022(120,100,0);
   AcGePoint3d end022(180,100,0);
   AcDbLine*a1Line=new AcDbLine(start022,end022);
   //水沟右深度
   AcGePoint3d start032(180,100,0);
   AcGePoint3d end032(180,160,0);
   AcDbLine*b1Line=new AcDbLine(start032,end032);
   //水沟下宽度
   AcGePoint3d start042(180,160,0);
   AcGePoint3d end042(120,160,0);
   AcDbLine*c1Line=new AcDbLine(start042,end042);
   //水沟左直边
   AcGePoint3d start052(120,160,0);
   AcGePoint3d end052(120,100,0);
   AcDbLine*d1Line=new AcDbLine(start052,end052);
   postToModel(a1Line);
   postToModel(b1Line);
   postToModel(c1Line);
   postToModel(d1Line);

   a1Line->close();
   b1Line->close();
   c1Line->close();
   d1Line->close();
   AcDbObjectIdArray objIds;
   //objIds.append(idpSemiCircle);
   //objIds.append(idp1SemiCircle);
   objIds.append(ida1Line);
   objIds.append(idb1Line);
   objIds.append(idc1Line);
   objIds.append(idd1Line);
   pHatch->appendLoop(AcDbHatch::kExternal, objIds);
   // Construct a circle
  
   // Elaborate solid fill
  
   pHatch->evaluateHatch();
   // Post hatch entity to database

postToModel(pHatch);
   
   pHatch->close();
没有错误,但是不能实现填充,不知错在哪里,请指教,谢谢!
发表于 2010-12-15 13:51:48 | 显示全部楼层
稍微改了一下代码,没发现什么太大的错误。
我测试了一下,可以实现填充。
由于没有办法发图片,所以就不给你截图了。
  1.         static void Test(void)
  2.         {
  3.                 // Add your code for command TestReadDWG.test3 here
  4.                 AcDbHatch* pHatch = new AcDbHatch();
  5.                 AcGeVector3d normal(0.0, 0.0, 1.0);
  6.                 pHatch->setNormal(normal);
  7.                 pHatch->setElevation(0.0);

  8.                 // pHatch->setAssociative(Adesk::kFalse);

  9.                 pHatch->setPattern(AcDbHatch::kPreDefined, _T("SOLID"));

  10.                 // pHatch->setStyle(AcDbHatch::kNormal);

  11.                 AcGePoint3d start022(120,100,0);
  12.                 AcGePoint3d end022(180,100,0);
  13.                 AcDbLine*a1Line=new AcDbLine(start022,end022);
  14.                 AcDbObjectId ida1Line = AcDbObjectId::kNull;
  15.                 postToModel(ida1Line,a1Line);
  16.                 //水沟右深度
  17.                 AcGePoint3d start032(180,100,0);
  18.                 AcGePoint3d end032(180,160,0);
  19.                 AcDbLine*b1Line=new AcDbLine(start032,end032);
  20.                 AcDbObjectId idb1Line = AcDbObjectId::kNull;
  21.                 postToModel(idb1Line,b1Line);
  22.                 //水沟下宽度
  23.                 AcGePoint3d start042(180,160,0);
  24.                 AcGePoint3d end042(120,160,0);
  25.                 AcDbLine*c1Line=new AcDbLine(start042,end042);
  26.                 AcDbObjectId idc1Line = AcDbObjectId::kNull;
  27.                 postToModel(idc1Line,c1Line);
  28.                 //水沟左直边
  29.                 AcGePoint3d start052(120,160,0);
  30.                 AcGePoint3d end052(120,100,0);
  31.                 AcDbLine*d1Line=new AcDbLine(start052,end052);
  32.                 AcDbObjectId idd1Line = AcDbObjectId::kNull;
  33.                 postToModel(idd1Line,d1Line);

  34.                
  35.                 AcDbObjectIdArray objIds;
  36.                 objIds.append(ida1Line);
  37.                 objIds.append(idb1Line);
  38.                 objIds.append(idc1Line);
  39.                 objIds.append(idd1Line);
  40.                 pHatch->appendLoop(AcDbHatch::kExternal, objIds);
  41.                 // Construct a circle

  42.                 // Elaborate solid fill

  43.                 pHatch->evaluateHatch();
  44.                 // Post hatch entity to database

  45.                 AcDbObjectId objId = AcDbObjectId::kNull;
  46.                 postToModel(objId,pHatch);
  47.                
  48.         }
  49. } ;

  50. Acad::ErrorStatus postToModel(AcDbObjectId& objId, AcDbEntity* pEnt)
  51. {
  52.         Acad::ErrorStatus es = Acad::eOk;
  53.         AcDbBlockTable *pBlockTable;
  54.         acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable, AcDb::kForRead);
  55.         AcDbBlockTableRecord *pBlockTableRecord;
  56.         pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
  57.         pBlockTable->close();
  58.         AcDbObjectId objectId = AcDbObjectId::kNull;
  59.         es = pBlockTableRecord->appendAcDbEntity(objectId, pEnt);
  60.         objId = objectId;
  61.         pBlockTableRecord->close();
  62.         pEnt->close();

  63.         return es;
  64. }
复制代码
发表于 2010-12-15 13:53:19 | 显示全部楼层
用list命令查看了一下实体信息,以此证明我绘制出来了。
  1. LIST 找到 1 个

  2.                   HATCH     图层: 0
  3.                             空间: 模型空间
  4.                    句柄 = 2b6
  5.                  填充图案 SOLID
  6.                  非关联
  7.                  面积      3600.0000
  8.                  原点    X=   0.0000  Y=   0.0000  Z=   0.0000
复制代码
 楼主| 发表于 2010-12-15 15:07:09 | 显示全部楼层
谢谢解答,但是在我这里不能运行,有错误
发表于 2010-12-15 15:54:55 | 显示全部楼层
把下面这句代码,写到最上面
  1. Acad::ErrorStatus postToModel(AcDbObjectId& objId, AcDbEntity* pEnt);
复制代码
 楼主| 发表于 2010-12-15 21:36:29 | 显示全部楼层
回复 th_gsb 的帖子

谢谢!!!
发表于 2010-12-27 20:31:20 | 显示全部楼层
晕,开了这么多贴。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 11:30 , Processed in 0.162675 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表