
Tue, 08/18/2015 - 07:37
Forums:
Dear all,
I am working on scaling a curve only in x direction and the Y and Z value of the curve keep the same. The class used is BRepBuilderAPI_Transform which required a gp_Trsf as an iput. However, the SetScale() function in gp_Trsf only accept a scale center and a scale value. It can not do this job.
Does anyone know how to make this happen in OCCT? Thanks in advance!
Cheers,
Haiqiang
Tue, 08/18/2015 - 12:00
You need a gp_GTrsf to describe that "stretching" transformation.
We convert the curve to NURBS and transform its control points, but maybe there is a class which does it.
Mauro
Wed, 08/19/2015 - 04:58
Hi Mauro,
Thanks! Indeed it needs the gp_GTrsf.
Regards,
H
Tue, 08/18/2015 - 13:58
//you need to define a vector for the X direction, (it could be facing any direction):
gp_Vector dir(1,0,0);
//define a center of scaling, used the origin here, but use the center of gravity of the object
gp_Pnt center(0,0,0)
//create a gp_Ax2 using the center point of scaling and the X vector
gp_Ax2 xdir(center, dir);
//create a transform using the 2axis system and the scaling amount x
gp_GTrsf x_aff;
x_aff.SetAffinity(xdir,x);
// apply transform to shape
BRepBuilderAPI_GTransform aBRepGTrsf(theobj, x_aff,Standard_False);
//get the result
aBRepGTrsf.Shape();
Wed, 08/19/2015 - 04:57
Hi AP,
Thanks for the piece of codes. It works!
Cheers,
H