乐筑天下

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

[转帖]求教,在ObjectARX中如何进行充填编程?

[复制链接]

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2002-2-4 15:31:00 | 显示全部楼层 |阅读模式
//我用两种方法都行不通,请高手指教
void CDocData:rawLine()
{
acutPrintf("\nBegin drawing!\n");
--AcGePoint3d startPt;
--AcGePoint3d endPt;
--AcDbBlockTable* pBlockTable;
--acdbCurDwg()->getBlockTable(pBlockTable,AcDb::kForRead);
--AcDbBlockTableRecord* pBlockTableRecord;
--pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);
--pBlockTable->close();
--//Create hatch
AcDbObjectIdArray objIds;
--ads_name objName[4];
--AcDbObjectId plid;
--AcDbPolyline *pPl = new AcDbPolyline();
--pPl->addVertexAt( 0,AcGePoint2d(0,10) );
--pPl->addVertexAt( 1,AcGePoint2d(2,30) );
--pPl->addVertexAt( 2,AcGePoint2d(7,68) );
--pPl->addVertexAt( 3,AcGePoint2d(10,100) );
--pBlockTableRecord->appendAcDbEntity(plid,pPl);
--pPl->close();
--if( acdbGetAdsName(objName[0],plid) != Acad::eOk )
--{
----ads_printf("Changing to AdsName error!");
--}
--objIds.append( plid );
--pPl = new AcDbPolyline();
--pPl->addVertexAt( 0,AcGePoint2d(0,98) );
--pPl->addVertexAt( 1,AcGePoint2d(200,130) );
--pBlockTableRecord->appendAcDbEntity(plid,pPl);
--pPl->close();
--acdbGetAdsName(objName[1],plid);
--objIds.append( plid );
--pPl = new AcDbPolyline();
--pPl->addVertexAt( 0,AcGePoint2d(180,150) );
--pPl->addVertexAt( 1,AcGePoint2d(180,-10) );
--pBlockTableRecord->appendAcDbEntity(plid,pPl);
--pPl->close();
--acdbGetAdsName(objName[2],plid);
--objIds.append( plid );
--pPl = new AcDbPolyline();
--pPl->addVertexAt( 0,AcGePoint2d(188,0) );
--pPl->addVertexAt( 1,AcGePoint2d(0,10) );
--pBlockTableRecord->appendAcDbEntity(plid,pPl);
--pPl->close();
--if( acdbGetAdsName(objName[3],plid) != Acad::eOk )
--{
----ads_printf("Changing to AdsName error!");
--}
--objIds.append( plid );
--
--ads_point p;
--p[X] = 30; p[Y] = 30; p[Z] = 0;
--//问题1:acedCommand()函数老是出现访问错,请指教!!!(Test.pat为自定义充填文件)
--acedCommand(RTSTR,"-BHatch",RTSTR,&quot",
RTSTR,"Test",RTSTR,"1",RTSTR,"0",
----RTSTR,"a",RTSTR,"b",RTSTR,"n",
----RTENAME,objName[0],RTENAME,objName[1],
RTENAME,objName[2],RTENAME,objName[3],
----RTSTR,"",RTSTR,"",RTPOINT, p,RTSTR,"",0);
--//问题2:本想用AcDbHatch创建一个充填,但有问题
--//add hatch
--AcDbHatch* pHatch = new AcDbHatch();
--pHatch->setPatternAngle(0);
--pHatch->setPatternSpace(1);
--pHatch->setPatternDouble(Adesk::kFalse);
--pHatch->setAssociative( Adesk::kTrue );
--pHatch->setHatchStyle(AcDbHatch::kNormal );
--if( pHatch->setPattern(AcDbHatch::kCustomDefined, "Test") != Acad::eOk)
--{
----ads_printf("Create hatch pattern error!");
----delete pHatch;
--}
--else
--{
----Acad::ErrorStatus es;
----//此处出错
----if ( ( es = pHatch->appendLoop(AcDbHatch::kDefault, objIds)) != Acad::eOk )
    {
      ads_printf("hatch appendLoop error!");
      delete pHatch;
    }
    else
      if( pHatch->evaluateHatch() != Acad::eOk )
      {
        ads_printf("EvaluateHatch hatch pattern error!");
        delete pHatch;
      }
      else
      {
        pBlockTableRecord->appendAcDbEntity(pHatch);
        pHatch->close();
      }
  }
  pBlockTableRecord->close();
acutPrintf("\nEnd drawing!\n");
}
回复

使用道具 举报

158

主题

2315

帖子

10

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2951
发表于 2002-2-4 15:32:00 | 显示全部楼层
解答(由老何解答)...
1,在调用acedCommand:-BHatch这前应该将将AcDbBlockTableRecord关闭
pBlockTableRecord->close();
因为此时其打开为写,而-BHATCH会创建新实体,ACAD也会去打开AcDbBlockTableRecord为写,当然会出错了。
2,appendLoop既然是loop当然是首尾相接的,所以...
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2024-11-22 01:18 , Processed in 0.197367 second(s), 67 queries .

© 2020-2024 乐筑天下

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