NXopen 二次开发 利用PatternFeatureBuilder构造器 进行线性阵列

NXOpen::Features::Feature* MyClass::CreateCylinderFeature(double CylinderDiameter, double CylinderHeight, double OriginPoint[3], double Direction[3], NXOpen::Part* workPart)
{
	char Diameterchar[256];
	sprintf(Diameterchar, "%f", CylinderDiameter);

	char Heightchar[256];
	sprintf(Heightchar, "%f", CylinderHeight);

	NXOpen::Features::Feature* nullNXOpen_Features_Feature(NULL);
	NXOpen::Features::CylinderBuilder* cylinderBuilder1;
	cylinderBuilder1 = workPart->Features()->CreateCylinderBuilder(nullNXOpen_Features_Feature);
	cylinderBuilder1->BooleanOption()->SetType(NXOpen::GeometricUtilities::BooleanOperation::BooleanTypeCreate);

	cylinderBuilder1->SetType(NXOpen::Features::CylinderBuilder::Types::TypesAxisDiameterAndHeight);
	NXOpen::Point3d AxisOriginPoint(OriginPoint[0], OriginPoint[1], OriginPoint[2]);
	NXOpen::Vector3d AxisDirection(Direction[0], Direction[1], Direction[2]);
	NXOpen::Axis* axis1;
	axis1 = workPart->Axes()->CreateAxis(AxisOriginPoint, AxisDirection, NXOpen::SmartObject::UpdateOptionWithinModeling);
	cylinderBuilder1->SetAxis(axis1);

	cylinderBuilder1->Diameter()->SetFormula(Diameterchar);
	cylinderBuilder1->Height()->SetFormula(Heightchar);
	NXOpen::Features::Feature* cyfeature;
	cyfeature = cylinderBuilder1->CommitFeature();
	cylinderBuilder1->Destroy();
	return cyfeature;
}
NXOpen::NXObject* MyClass::CreatRectangularPattern(std::vector<NXOpen::Features::Feature*> objects1,NXOpen::Part* workPart, NXOpen::Direction* directionx, double number_in_x, double distance_x,NXOpen::Direction* directiony, double number_in_y,double distance_y)
{
	NXOpen::Features::Feature* nullNXOpen_Features_Feature(NULL);
	NXOpen::Features::PatternFeatureBuilder* patternFeatureBuilder1;
	patternFeatureBuilder1 = workPart->Features()->CreatePatternFeatureBuilder(nullNXOpen_Features_Feature);
	patternFeatureBuilder1->SetPatternMethod(NXOpen::Features::PatternFeatureBuilder::PatternMethodOptionsSimple);
	patternFeatureBuilder1->PatternService()->SetPatternType(NXOpen::GeometricUtilities::PatternDefinition::PatternEnumLinear);

	bool added1;
	added1 = patternFeatureBuilder1->FeatureList()->Add(objects1);

	char numberx[256]; 
	sprintf(numberx, "%f", number_in_x);
	char xdistance[256];
	sprintf(xdistance, "%f", distance_x);
	char numbery[256];
	sprintf(numbery, "%f", number_in_y);
	char ydistance[256];
	sprintf(ydistance, "%f", distance_y);

	patternFeatureBuilder1->PatternService()->RectangularDefinition()->SetXDirection(directionx);
	patternFeatureBuilder1->PatternService()->RectangularDefinition()->XSpacing()->NCopies()->SetFormula(numberx);
	patternFeatureBuilder1->PatternService()->RectangularDefinition()->XSpacing()->PitchDistance()->SetFormula(xdistance);
	
	patternFeatureBuilder1->PatternService()->RectangularDefinition()->SetUseYDirectionToggle(true);

	patternFeatureBuilder1->PatternService()->RectangularDefinition()->SetYDirection(directiony);
	patternFeatureBuilder1->PatternService()->RectangularDefinition()->YSpacing()->NCopies()->SetFormula(numbery);
	patternFeatureBuilder1->PatternService()->RectangularDefinition()->YSpacing()->PitchDistance()->SetFormula(ydistance);
	

	NXOpen::NXObject* nXObject1;
	nXObject1 = patternFeatureBuilder1->Commit();
	std::vector<NXOpen::NXObject*> objects2;
	objects2 = patternFeatureBuilder1->GetCommittedObjects();

	return nXObject1;
}
	NXOpen::Session* theSession = NXOpen::Session::GetSession();
	NXOpen::Part* workPart(theSession->Parts()->Work());
	NXOpen::Part* displayPart(theSession->Parts()->Display());

	double CylinderDiameter = 10.0;
	double CylinderHeight = 50.0;
	double OriginPoint[3] = { 0.0,0.0,0.0 };
	double Direction[3] = { 0.0,0.0,1.0 };
	NXOpen::Features::Feature* cyfeature;
	cyfeature = CreateCylinderFeature(CylinderDiameter, CylinderHeight, OriginPoint, Direction, workPart);
	NXOpen::Body* CYbody(dynamic_cast<NXOpen::Body*>(workPart->Bodies()->FindObject(cyfeature->JournalIdentifier())));

	NXOpen::Point3d originx(0.0, 0.0, 0.0);
	NXOpen::Vector3d vectorx(1.0, 0.0, 0.0);
	NXOpen::Direction* directionx;
	directionx = workPart->Directions()->CreateDirection(originx, vectorx, NXOpen::SmartObject::UpdateOptionWithinModeling);

	NXOpen::Point3d originy(0.0, 0.0, 0.0);
	NXOpen::Vector3d vectory(0.0, 1.0, 0.0);
	NXOpen::Direction* directiony;
	directiony = workPart->Directions()->CreateDirection(originy, vectory, NXOpen::SmartObject::UpdateOptionWithinModeling);

	std::vector<NXOpen::Features::Feature*> objects1(1);
	objects1[0] = cyfeature;

	double number_in_x = 20;
	double distance_x = 40;
	double number_in_y = 20;
	double distance_y = 40;
	NXOpen::NXObject* nXObject1;
	nXObject1 = CreatRectangularPattern(objects1,workPart, directionx, number_in_x, distance_x, directiony, number_in_y, distance_y);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值