乐筑天下

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

环形填充,非常实用

[复制链接]

3

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
17
发表于 2010-12-15 23:30:00 | 显示全部楼层 |阅读模式
Acad::ErrorStatus postToModel(AcDbObjectId& objId, AcDbEntity* pEnt);
               // Add your code for command TestReadDWG.test3 here
                AcDbHatch* pHatch = new AcDbHatch();
                AcGeVector3d normal(0.0, 0.0, 1.0);
                pHatch->setNormal(normal);
                pHatch->setElevation(0.0);
                 pHatch->setAssociative(Adesk::kTrue);
                pHatch->setPattern(AcDbHatch::kPreDefined, _T("SOLID"));
                // pHatch->setStyle(AcDbHatch::kNormal);
int a=1000;int b=1000;
//左墙高
AcGePoint3d start1(a,b,0);
AcGePoint3d end1(a,b+(m_fHight_L_HD),0);
AcDbLine*q2Line=new AcDbLine(start1,end1);
    AcDbObjectId idq2Line = AcDbObjectId::kNull;
    postToModel(idq2Line,q2Line);
//右墙高
AcGePoint3d start2(a+(m_fWidth_HD),b,0);
AcGePoint3d end2(a+(m_fWidth_HD),b+(m_fHight_R_HD),0);
AcDbLine*r2Line=new AcDbLine(start2,end2);
    AcDbObjectId idr2Line = AcDbObjectId::kNull;
    postToModel(idr2Line,r2Line);
int m_thinckness=100;
//左高
  AcGePoint3d start21(a+m_thinckness,b,0);
  AcGePoint3d end21(a+m_thinckness,b+m_fHight_L_HD,0);
  AcDbLine*qLine=new AcDbLine(start21,end21);
    AcDbObjectId idqLine = AcDbObjectId::kNull;
    postToModel(idqLine,qLine);
//右高
  AcGePoint3d start22(a+m_fWidth_HD-m_thinckness,b,0);
  AcGePoint3d end22(a+m_fWidth_HD-m_thinckness,b+(m_fHight_R_HD),0);
  AcDbLine*rLine=new AcDbLine(start22,end22);
    AcDbObjectId idrLine = AcDbObjectId::kNull;
    postToModel(idrLine,rLine);
///////////////////////////////
//半圆拱底部连线1
     AcGePoint3d start8(a,b+m_fHight_L_HD,0);
  AcGePoint3d end8(a+m_thinckness,b+m_fHight_L_HD,0);
  AcDbLine*dLine=new AcDbLine(start8,end8);
    AcDbObjectId iddLine = AcDbObjectId::kNull;
    postToModel(iddLine,dLine);
//半圆拱底部连线2
  AcGePoint3d start9(a+m_fWidth_HD-m_thinckness,b+m_fHight_R_HD,0);
  AcGePoint3d end9(a+m_fWidth_HD,b+(m_fHight_R_HD),0);
  AcDbLine*cLine=new AcDbLine(start9,end9);
    AcDbObjectId idcLine = AcDbObjectId::kNull;
    postToModel(idcLine,cLine);
/////////////////////////////////////
//半圆拱外圆
AcDbArc*pSemiCircle=new AcDbArc(AcGePoint3d ((a+(m_fWidth_HD)/2), (b+(m_fHight_L_HD)/2+(m_fHight_R_HD)/2), 0), (m_fWidth_HD)/2, 0, PI );
   
AcDbObjectId idpSemiCircle = AcDbObjectId::kNull;
    postToModel(idpSemiCircle,pSemiCircle);
//半圆拱内圆
AcDbArc*p1SemiCircle=new AcDbArc(AcGePoint3d ((a+(m_fWidth_HD)/2), b+(m_fHight_L_HD)/2+(m_fHight_R_HD)/2, 0),
                (m_fWidth_HD-m_thinckness*2)/2, 0, PI );
AcDbObjectId idp1SemiCircle = AcDbObjectId::kNull;
    postToModel(idp1SemiCircle,p1SemiCircle);
  
//直墙厚度左连线
  AcGePoint3d start23(a,b,0);
  AcGePoint3d end23(a+m_thinckness,b,0);
  AcDbLine*q1Line=new AcDbLine(start23,end23);
AcDbObjectId idq1Line = AcDbObjectId::kNull;
    postToModel(idq1Line,q1Line);
//直墙厚度右连线
  AcGePoint3d start24(a+m_fWidth_HD-m_thinckness,b,0);
  AcGePoint3d end24(a+m_fWidth_HD,b,0);
  AcDbLine*r1Line=new AcDbLine(start24,end24);
AcDbObjectId idr1Line = AcDbObjectId::kNull;
    postToModel(idr1Line,r1Line);
               
                AcDbObjectIdArray objIds;
                objIds.append(idq2Line);
                objIds.append(idr2Line);
                objIds.append(idqLine);
                objIds.append(idrLine);
                objIds.append(idq1Line);
                objIds.append(idr1Line);
               objIds.append(iddLine);
                objIds.append(idcLine);
                objIds.append(idpSemiCircle);
                objIds.append(idp1SemiCircle);
                pHatch->appendLoop(AcDbHatch::kExternal, objIds);
                // Construct a circle
                // Elaborate solid fill
                pHatch->evaluateHatch();
                // Post hatch entity to database
                AcDbObjectId objId = AcDbObjectId::kNull;
                postToModel(objId,pHatch);
Acad::ErrorStatus postToModel(AcDbObjectId& objId, AcDbEntity* pEnt)
{
        Acad::ErrorStatus es = Acad::eOk;
        AcDbBlockTable *pBlockTable;
        acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable, AcDb::kForRead);
        AcDbBlockTableRecord *pBlockTableRecord;
        pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
        pBlockTable->close();
        AcDbObjectId objectId = AcDbObjectId::kNull;
        es = pBlockTableRecord->appendAcDbEntity(objectId, pEnt);
        objId = objectId;
        pBlockTableRecord->close();
        pEnt->close();
        return es;
}
找好心人帮助,解决了部分问题,图形绘出了,但是没有填充效果,就是没有填上,不知为何?
回复

使用道具 举报

7

主题

43

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
71
发表于 2010-12-16 16:19:00 | 显示全部楼层
你写的程序真成问题了,我认为你应该去看看帮助文档(关于AcDbHatch类的那部分)
回复

使用道具 举报

7

主题

43

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
71
发表于 2010-12-16 16:35:00 | 显示全部楼层
还有就是你的填充图形已经绘制出来了,你可以用LIST命令去查看一下当前图纸。
只不过它绘制的位置在原点,并且没有大小。
我认为造成这种问题的原因在于你设置的AcDbObjectIdArray
回复

使用道具 举报

1

主题

14

帖子

1

银币

初来乍到

Rank: 1

铜币
18
发表于 2014-12-3 16:11:00 | 显示全部楼层
不错,值得一看
回复

使用道具 举报

2

主题

13

帖子

4

银币

初来乍到

Rank: 1

铜币
21
发表于 2014-12-23 08:49:00 | 显示全部楼层
刚路过,见一回顶一回
回复

使用道具 举报

1

主题

4

帖子

1

银币

初来乍到

Rank: 1

铜币
8
发表于 2015-3-8 11:20:00 | 显示全部楼层
水一帖。。我顶。。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-5 04:03 , Processed in 0.305467 second(s), 64 queries .

© 2020-2025 乐筑天下

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