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