在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 填充范例效果图