/*
Copyright (c) 2019 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved.
*/
#include <ProToolkit.h>
#include <ProDrawing.h>
#include <ProFaminstance.h>
#include <PTApplsUnicodeUtils.h>
/*==================================================================*\
FUNCTION: UserDrawingSolidReplace()
PURPOSE: Replaces all instance solid models in a drawing with their
generic. Similar to the Pro/ENGINEER behavior, the function
will not replace models if the target generic model is already
present in the drawing.
\*==================================================================*/
int UsrDrawingSolidReplace()
{
ProError err;
ProDrawing drawing;
ProMdlType mdl_type;
ProSolid* solid_array;
int array_size, i;
ProSolid generic;
/*------------------------------------------------------------------*\
Use the current model to create the drawing.
\*------------------------------------------------------------------*/
err = ProMdlCurrentGet ((ProMdl*)&drawing);
if (err != PRO_TK_NO_ERROR)
return (err);
err = ProMdlTypeGet ((ProMdl)drawing, &mdl_type);
if (err != PRO_TK_NO_ERROR ||
(mdl_type != PRO_MDL_DRAWING))
return PRO_TK_INVALID_TYPE;
/*------------------------------------------------------------------*\
Visit the drawing models.
\*------------------------------------------------------------------*/
err = ProDrawingSolidsCollect (drawing, &solid_array);
if (err != PRO_TK_NO_ERROR)
return (err);
ProArraySizeGet (solid_array, &array_size);
/*------------------------------------------------------------------*\
Loop on all of the drawing models.
\*------------------------------------------------------------------*/
for (i = 0; i < array_size; i++)
{
/*------------------------------------------------------------------*\
If the generic is not an instance, continue.
\*------------------------------------------------------------------*/
err = ProFaminstanceGenericGet ((ProMdl)solid_array[i],
PRO_B_TRUE,
(ProMdl*)&generic);
if (err != PRO_TK_NO_ERROR)
continue;
/*------------------------------------------------------------------*\
Replace all instances with their (top-level) generic.
\*------------------------------------------------------------------*/
err = ProDrawingSolidReplace (drawing, solid_array[i], generic,
PRO_B_TRUE);
if (err == PRO_TK_E_FOUND)
{
ProTKPrintf ("Model was not replaced because");
ProTKPrintf (" the target model is already in the drawing.\n");
}
}
return (PRO_TK_NO_ERROR);
}