Community Tip - Did you get an answer that solved your problem? Please mark it as an Accepted Solution so others with the same problem can find the answer easily. X
Hello
We would like to rotate model by 90 degree with respect to Y axis. I am using below code :
ProError status = PRO_TK_GENERAL_ERROR;
//Get assembly
ProMdl objTopAssembly;
status = ProMdlCurrentGet(&objTopAssembly);
//get current assembly's window
int intWindowID;
status = ProMdlWindowGet(objTopAssembly, &intWindowID);
//Matrix to rotate 90 degree about Y axis
ProMatrix objMatrixAboutY;
objMatrixAboutY[0][0] = cos(1.5707);
objMatrixAboutY[0][1] = 0;
objMatrixAboutY[0][2] = -sin(1.5707);
objMatrixAboutY[0][3] = 0;
objMatrixAboutY[1][0] = 0;
objMatrixAboutY[1][1] = 1;
objMatrixAboutY[1][2] = 0;
objMatrixAboutY[1][3] = 0;
objMatrixAboutY[2][0] = sin(1.5707);
objMatrixAboutY[2][1] = 0;
objMatrixAboutY[2][2] = cos(1.5707);
objMatrixAboutY[2][3] = 0;
objMatrixAboutY[3][0] = 0;
objMatrixAboutY[3][1] = 0;
objMatrixAboutY[3][2] = 0;
objMatrixAboutY[3][3] = 1;
// set new matrix
status = ProWindowPanZoomMatrixSet(intWindowID, objMatrixAboutY);
//Repaint the window
status = ProWindowRepaint(intWindowID);
This code just rotate the default csys orientation in to creo window. Model is not rotated at all. Am i missing some information? What should be done to rotate model as well?
Thanks and Regards
Ketan
Solved! Go to Solution.
status = ProViewRotate( objTopAssembly, NULL, PRO_Y_ROTATION, 90);
@Ketan_Lalcheta wrote:
Hello
We would like to rotate model by 90 degree with respect to Y axis. I am using below code :
ProError status = PRO_TK_GENERAL_ERROR;
//Get assembly
ProMdl objTopAssembly;
status = ProMdlCurrentGet(&objTopAssembly);
//get current assembly's window
int intWindowID;
status = ProMdlWindowGet(objTopAssembly, &intWindowID);
//Matrix to rotate 90 degree about Y axis
ProMatrix objMatrixAboutY;
objMatrixAboutY[0][0] = cos(1.5707);
objMatrixAboutY[0][1] = 0;
objMatrixAboutY[0][2] = -sin(1.5707);
objMatrixAboutY[0][3] = 0;objMatrixAboutY[1][0] = 0;
objMatrixAboutY[1][1] = 1;
objMatrixAboutY[1][2] = 0;
objMatrixAboutY[1][3] = 0;objMatrixAboutY[2][0] = sin(1.5707);
objMatrixAboutY[2][1] = 0;
objMatrixAboutY[2][2] = cos(1.5707);
objMatrixAboutY[2][3] = 0;objMatrixAboutY[3][0] = 0;
objMatrixAboutY[3][1] = 0;
objMatrixAboutY[3][2] = 0;
objMatrixAboutY[3][3] = 1;
// set new matrix
status = ProWindowPanZoomMatrixSet(intWindowID, objMatrixAboutY);
//Repaint the window
status = ProWindowRepaint(intWindowID);
This code just rotate the default csys orientation in to creo window. Model is not rotated at all. Am i missing some information? What should be done to rotate model as well?
Thanks and Regards
Ketan
You should get model transformation matrix and update it than set it.
Yes, but I thought it is required for panning only.
If you refer example given with API, it seems only last row related to panning is required to get transferred with respect to different matrix. Could you please help me with what should be done to give it a try?
I know we need to get matrix and got it using ProViewMatrixGet() API. what next? I don't have point to transfer with respect to this matrix. I have 4*4 matrix for rotation about X axis.
I tried below code:
ProError status = PRO_TK_GENERAL_ERROR;
//Get assembly
ProMdl objTopAssembly;
status = ProMdlCurrentGet(&objTopAssembly);
//get current assembly's window
int intWindowID;
status = ProMdlWindowGet(objTopAssembly, &intWindowID);
ProMatrix objBaseMatrix;
status = ProViewMatrixGet(objTopAssembly,NULL,objBaseMatrix);
ProPoint3d objLine1 = { cos(1.5707) ,0,-sin(1.5707) };
ProPoint3d objLine2 = { 0 ,1,0 };
ProPoint3d objLine3 = { sin(1.5707) ,0,cos(1.5707) };
status = ProPntTrfEval(objLine1, objBaseMatrix, objLine1);
status = ProPntTrfEval(objLine2, objBaseMatrix, objLine2);
status = ProPntTrfEval(objLine3, objBaseMatrix, objLine3);
//Matrix to rotate 90 degree about Y axis
ProMatrix objMatrixAboutY;
objMatrixAboutY[0][0] = objLine1[0];
objMatrixAboutY[0][1] = objLine1[1];
objMatrixAboutY[0][2] = objLine1[2];
objMatrixAboutY[0][3] = 0;
objMatrixAboutY[1][0] = objLine2[0];
objMatrixAboutY[1][1] = objLine2[1];
objMatrixAboutY[1][2] = objLine2[2];
objMatrixAboutY[1][3] = 0;
objMatrixAboutY[2][0] = objLine3[0];
objMatrixAboutY[2][1] = objLine3[1];
objMatrixAboutY[2][2] = objLine3[2];
objMatrixAboutY[2][3] = 0;
objMatrixAboutY[3][0] = 0;
objMatrixAboutY[3][1] = 0;
objMatrixAboutY[3][2] = 0;
objMatrixAboutY[3][3] = 1;
// set new matrix
status = ProWindowPanZoomMatrixSet(intWindowID, objMatrixAboutY);
//Repaint the window
status = ProWindowRepaint(intWindowID);
This at least makes some changes and assembly (not even a single portion) is not visible at all in window. But I was expecting assembly to be rotated by 90 degree w.r.t. Axis.
Any idea would be of great help.
Change only Angle values
set matrix using API ProViewMatrixSet
Following is the calculation for Angle
xR, yR and zR are angles.
To rotate model 90 degree with respect to Y position , pass following values.
xR = 0.0;
yR = 9.0;
zR = 0.0;
//Manupilate to Radian
double xAngle = degreetoRadian(xR);
double yAngle = degreetoRadian(yR);
double zAngle = degreetoRadian(zR);
//Build matrix here..
ProMatrix matrix;
matrix[0][0] = cos(yAngle) * cos(zAngle);
matrix[0][1] = -cos(yAngle) * sin(zAngle);
matrix[0][2] = sin(yAngle);
matrix[0][3] = 0;
matrix[1][0] = cos(xAngle) * sin(zAngle) + cos(zAngle) * sin(xAngle) * sin(yAngle);
matrix[1][1] = cos(xAngle) * cos(zAngle) - sin(xAngle) * sin(yAngle) * sin(zAngle);
matrix[1][2] = -cos(yAngle) * sin(xAngle);
matrix[1][3] = 0;
matrix[2][0] = sin(xAngle) * sin(zAngle) - cos(xAngle) * cos(zAngle) * sin(yAngle);
matrix[2][1] = cos(zAngle) * sin(xAngle) + cos(xAngle) * sin(yAngle) * sin(zAngle);
matrix[2][2] = cos(xAngle) * cos(yAngle);
matrix[2][3] = 0;
// Do not use this code if you do not want to set Distance
matrix[3][0] = xDist;
matrix[3][1] = yDist;
matrix[3][2] = zDist;
matrix[3][3] = 1;
double degreetoRadian(double degree)
{
return degree * PI / 180;
}
status = ProViewRotate( objTopAssembly, NULL, PRO_Y_ROTATION, 90);
@Ketan_Lalcheta wrote:
Hello
We would like to rotate model by 90 degree with respect to Y axis. I am using below code :
ProError status = PRO_TK_GENERAL_ERROR;
//Get assembly
ProMdl objTopAssembly;
status = ProMdlCurrentGet(&objTopAssembly);
//get current assembly's window
int intWindowID;
status = ProMdlWindowGet(objTopAssembly, &intWindowID);
//Matrix to rotate 90 degree about Y axis
ProMatrix objMatrixAboutY;
objMatrixAboutY[0][0] = cos(1.5707);
objMatrixAboutY[0][1] = 0;
objMatrixAboutY[0][2] = -sin(1.5707);
objMatrixAboutY[0][3] = 0;objMatrixAboutY[1][0] = 0;
objMatrixAboutY[1][1] = 1;
objMatrixAboutY[1][2] = 0;
objMatrixAboutY[1][3] = 0;objMatrixAboutY[2][0] = sin(1.5707);
objMatrixAboutY[2][1] = 0;
objMatrixAboutY[2][2] = cos(1.5707);
objMatrixAboutY[2][3] = 0;objMatrixAboutY[3][0] = 0;
objMatrixAboutY[3][1] = 0;
objMatrixAboutY[3][2] = 0;
objMatrixAboutY[3][3] = 1;
// set new matrix
status = ProWindowPanZoomMatrixSet(intWindowID, objMatrixAboutY);
//Repaint the window
status = ProWindowRepaint(intWindowID);
This code just rotate the default csys orientation in to creo window. Model is not rotated at all. Am i missing some information? What should be done to rotate model as well?
Thanks and Regards
Ketan