cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
Showing results for 
Search instead for 
Did you mean: 

Community Tip - Stay updated on what is happening on the PTC Community by subscribing to PTC Community Announcements. X

I can set model view name to drawing view with ProDrawingViewOrientationFromNameSet but there is no Get API for same. Is there workaround to get it ?

syalagudri
12-Amethyst

I can set model view name to drawing view with ProDrawingViewOrientationFromNameSet but there is no Get API for same. Is there workaround to get it ?

can set model view name to drawing view with ProDrawingViewOrientationFromNameSet but there is not Get API for same.

Is there workaround to get it ?

Following code sets model view name

  //Get current drawing
  ProDrawing model;
  result = ProMdlCurrentGet((ProMdl*)&model);
  if(result != PRO_TK_NO_ERROR)
  {
   ProEngineerEnd();
   return false;
  }

  ProMdlName name;
  result =  ProMdlNameGet(model, name);

  ProMdldata data;
  result = ProMdlDataGet(model, &data);


  ProView view;
  result = ProDrawingViewInit(model, 1, &view);

  ProName name1;
  result=ProDrawingViewNameGet(model, view, name1);

  ProMatrix metrix;
  result = ProDrawingViewTransformGet(model, view, PRO_B_TRUE, metrix);
  if(result==PRO_TK_NO_ERROR)
  {
   result = ProDrawingViewOrientationFromNameSet(model, view, L"ABC", L"Isometric", 0.0, 0.0);
  }

  result = ProDrawingViewRegenerate(model, view);

  ProDrawingCurrentSheetSet(model, 1);
  int iWin;
  ProWindowCurrentGet(&iWin);
  ProDrawingtreeRefresh(model,iWin);

  //Window Refit
  ProWindowRefit(iWin);

But how to get Model View name

1 ACCEPTED SOLUTION

Accepted Solutions
FV
17-Peridot
17-Peridot
(To:syalagudri)

Here is a snippet from Toolkit User Guide:

proview-user-guide.png

View solution in original post

5 REPLIES 5
FV
17-Peridot
17-Peridot
(To:syalagudri)

Hello all,

Suresh,

One of possible workarounds:

get drawing view model with ProDrawingViewSolidGet,

get named views from ProSolid with ProViewNamesGet,

loop through array of view names,

for each view - use ProViewNameToView and ProViewMatrixGet to get model view matrix,

get rid of shift and scale, normalize matrix and compare it to the drawing view matrix.

HIH.

Feliks.

syalagudri
12-Amethyst
(To:FV)

I am able to that but facing issue in comparing model view matrix with drawing view matrix.

Can you please suggets me how on "get rid of shift and scale, normalize model view matrix"

Thanks,

Suresh

FV
17-Peridot
17-Peridot
(To:syalagudri)

Here is a snippet from Toolkit User Guide:

proview-user-guide.png

syalagudri
12-Amethyst
(To:FV)

Following method worked for me,

void GetViewOrientationMatrix(ProMatrix viewMatrix, ProMatrix viewOrientMatrix)

 

   ProError status = PRO_TK_NO_ERROR;

 

   ProVector vector1 = {viewMatrix[0][0], viewMatrix[0][1], viewMatrix[0][2]};

   ProVector vector2 = {viewMatrix[1][0], viewMatrix[1][1], viewMatrix[1][2]};

   ProVector vector3 = {viewMatrix[2][0], viewMatrix[2][1], viewMatrix[2][2]};

   

   viewOrientMatrix[0][0] = vector1[0];

   viewOrientMatrix[0][1] = vector1[1];

   viewOrientMatrix[0][2] = vector1[2];

   viewOrientMatrix[0][3] = 0.0;

   viewOrientMatrix[1][0] = vector2[0];

   viewOrientMatrix[1][1] = vector2[1];

   viewOrientMatrix[1][2] = vector2[2];

   viewOrientMatrix[1][3] = 0.0;

   viewOrientMatrix[2][0] = vector3[0];

   viewOrientMatrix[2][1] = vector3[1];

   viewOrientMatrix[2][2] = vector3[2];

   viewOrientMatrix[2][3] = 0.0;

   viewOrientMatrix[3][0] = 0.0;

   viewOrientMatrix[3][1] = 0.0;

   viewOrientMatrix[3][2] = 0.0;

   viewOrientMatrix[3][3] = 1.0;

  

double * NormalizeVector(double input[3], double output[3])

 

   double len;

  len = VectorLength(input);

   if (len < PRO_UTIL_ALMOST_ZERO)

 

   output[0] = input[0];

   output[1] = input[1];

   output[2] = input[2];

   return output;

 

   else

   return(VectorScale(1.0/len, input, output));

  

double VectorLength(double v[3])

 

   return(sqrt(v[0] * v[0] +

v[1] * v[1] +

v[2] * v[2]));

 

double * VectorScale(double scalar, double vector[3], double result[3])

 

   result[0] = scalar * vector[0];

   result[1] = scalar * vector[1];

   result[2] = scalar * vector[2];

   return(result);

 

Some limitations in this workaround:

 

  • ProViewNamesGet() doesn’t return Standard Orientation, so we cannot get the name of Standard Orientation.
  • If 2 orientations have the same matrix (i.e. the orientation is the same), we cannot determine which one is actually used. For example, “ABC” and “FRONT” can have same orinetation but with dofferent name.
  • It cannot distingush “Isometric” and “Trimetric”.

  

Top Tags