在BIMBase中,填充区域是由边界线封闭起来的、内部用某个样式填充的区域。填充区域用类BPHatch表示,BIMBase API中还提供了接口访问和修改填充样式,主要接口如表7-3所示。
表7-3 填充对象接口
| 方法 | 描述 |
|---|---|
| create(PStringCR patName, GeCurveArrayCP pLoopVector, PStringR errPrompt,double scale, double rotAng, HatchStyle hStyle) | 创建填充对象,patName:填充图案名,pLoopVector:填充边界,errPrompt:错误时输出,scale:比例,rotAng:角度,hStyle:填充样式 |
| setHatchLoops(GeCurveArrayCP pLoopVector) | 设置填充边界 |
| addPathLinks(int numPath, BPHatchPathLink*) | 增加填充路径 |
| GePoint3dCR getOriginPt() | 获取填充原点 |
| setOriginPt(GePoint3dCR) | 设置填充原点 |
| PStringCR getPatternName() | 获取填充图案名称 |
| setPattern(int16_t, PStringCR) | 设置填充图案名称 |
| double getAngle() | 获取填充角度 |
| setAngle(double) | 设置填充角度 |
| double getSpace() | 获取填充间隙 |
| setSpace(double) | 设置填充间隙 |
| double getScale | 获取填充比例 |
| setScale(double) | 设置填充比例 |
| int16_t getPatType() | 获取填充图案类型 |
| setPatType(int16_t) | 设置填充图案类型 |
| int16_t getStyle() | 获取填充样式 |
| setStyle(int16_t) | 设置填充样式 |
| bool isSolidFill() | 判断是否solid填充 |
| setIsSolidFill(bool) | 设置solid填充 |
填充对象的创建首先需创建填充区域,此处需注意的是作为填充区域的CurveArray对象必须为GeCurveArray::BOUNDARY_TYPE_ParityRegion类型,参见示例代码7-2。
//获取所有填充类型
BIMBase::Data::BPHatchPatternManager::getInstance().loadPatterns();
pmap<PString, pvector<BPPat>> mapPat =BIMBase::Data::BPHatchPatternManager::getInstance().getPatterns();
if (mapPat.size() == 0)
return;
//创建填充区域
pvector<GePoint3d> vctPoints;
vctPoints.push_back(GePoint3d::create(0, 0, 0));
vctPoints.push_back(GePoint3d::create(3000, 0, 0));
vctPoints.push_back(GePoint3d::create(3000, 3000, 0));
vctPoints.push_back(GePoint3d::create(0, 3000, 0));
GeCurveArrayPtr ptrCurveArray = GeCurveArray::createLinestringArray(vctPoints, GeCurveArray::BOUNDARY_TYPE_Outer);
GeCurveArrayPtr ptrCurveRegion = GeCurveArray::create(GeCurveArray::BOUNDARY_TYPE_ParityRegion);
ptrCurveRegion->add(ptrCurveArray);
//创建填充对象
PString sError;
BPHatchPtr ptrHatch = BPHatch::create(mapPat.begin()->first, ptrCurveRegion.get(), sError);
if (ptrHatch.isNull())
return;
//将对象绘制到相应model
BIMBase::Core::BPProjectP pProject = BPApplication::getInstance().getProjectManager()->getMainProject();
if (pProject == NULL)
return;
BPModelBaseP pModel = pProject->getActiveModel();
ptrHatch->addToProject(*pProject, pModel->getModelId());
代码7-2:创建填充对象
填充效果如图所示:

图7-1 填充范例效果图