乐筑天下

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

实用的环形填充问题

[复制链接]

3

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
17
发表于 2010-12-15 23:28: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;
}
找好心人帮助,解决了部分问题,图形绘出了,但是没有填充效果,就是没有填上,不知为何?
回复

使用道具 举报

0

主题

64

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
64
发表于 2010-12-27 20:27:00 | 显示全部楼层
帮你看了一下,貌似是你的回路加的不对,你这里面看起来不止一个回路,你先加个简单的回路试一下,不要全加进去。我在本机试了,可以!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-5 17:57 , Processed in 0.143965 second(s), 56 queries .

© 2020-2025 乐筑天下

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