Continue to Site

Welcome to MCAD Central

Join our MCAD Central community forums, the largest resource for MCAD (Mechanical Computer-Aided Design) professionals, including files, forums, jobs, articles, calendar, and more.

Simp Rep Help

williaps

New member
<DIV =Section1>
All,<?:namespace prefix = o ns = "urn:schemas-microsoft-com:eek:ffice:eek:ffice" />
I have a part that has several instances. With toolkit I am opening one of those instances and retrieving a simp rep. Then I output an ACIS file and then I want to clear my memory of everything except the generic part that I started with. How do I do this? I am unable to successfully call ProFaminstanceErase I think because I have a simp rep of the instance open. However when I call ProMdlErase on the ProPart simp rep handle it crashes Pro. Can someone give me some advice on activating/retrieving a simp rep of an instance of a part and then erasing it? Here is my code to output the ACIS file. I am not trying to erase the instance in the function. I try and erase the instance in the calling function.

Code:
ProError Model3D::OutputACIS(ProMdl mdlInstance, wstring symbolValue, ProSimprep simpRep) {


char *szFuncName = "OutputACIS()";


ProError pro_error = PRO_TK_NO_ERROR;


ProPart pro_partSimpRep = NULL;


ProFamilyName pro_wszMdlName;


ProName pro_wszSimpRepName;


ProSimprepType pro_simpRepType;


ProIntf3DExportType pro_intf3DExportType = PRO_INTF_EXPORT_SAT;


ProOutputAssemblyConfiguration pro_outputAsmConfig = PRO_OUTPUT_ASSEMBLY_FLAT_FILE;


ProBoolean pro_bIsSupported = PRO_B_FALSE;


ProOutputBrepRepresentation pro_bRep;


ProOutputInclusion pro_outputInclusion;


ProOutputLayerOptions pro_outputLayerOptions;


ProSelection pro_sel;


ProPath pro_wszFileName;


ProGeomitem pro_geomItem;


ProCsys pro_csys;


ProSimprep pro_simpRepMaster;


//Get the name of the simp rep


pro_error = ProModelitemNameGet((ProModelitem*)&simpRep, pro_wszSimpRepName);


PROUTIL_CALL_REPORT("ProModelitemNameGet()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


//Activate the simp rep


if(m_pro_mdlType == PRO_MDL_PART) {





//Get the simp rep type


pro_error = ProSimprepTypeGet(&simpRep, &pro_simpRepType);


PROUTIL_CALL_REPORT("ProSimprepTypeGet()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


//Get the name of the instance


pro_error = ProMdlNameGet(mdlInstance, pro_wszMdlName);


PROUTIL_CALL_REPORT("ProMdlNameGet()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


//Retrieve the simp rep


pro_error = ProPartSimprepRetrieve(pro_wszMdlName, pro_simpRepType, pro_wszSimpRepName, &pro_partSimpRep);


PROUTIL_CALL_REPORT("ProPartSimprepRetrieve()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


}


else if(m_pro_mdlType == PRO_MDL_ASSEMBLY) {


//Activate the simp rep


pro_error = ProSimprepActivate((ProSolid)mdlInstance, &simpRep);


PROUTIL_CALL_REPORT("ProSimprepActivate()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


pro_partSimpRep = (ProPart)mdlInstance;


}


//Display the mdl


pro_error = ProMdlDisplay(pro_partSimpRep);


PROUTIL_CALL_REPORT("ProMdlDisplay()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


//Build the output filename


swprintf(pro_wszFileName, L"%s_%s_%s", symbolValue.c_str(), m_wstrLayerValue.c_str(), wcsstr(pro_wszSimpRepName, L"_") + 1);


//Verify that the assembly configuration is valid for exporting and IGES file


pro_error =  ProOutputAssemblyConfigurationIsSupported(pro_intf3DExportTy pe, pro_outputAsmConfig, &pro_bIsSupported);


PROUTIL_CALL_REPORT("ProOutputAssemblyConfigurationIsSupported()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


if(pro_bIsSupported == PRO_B_FALSE)


return PRO_TK_BAD_INPUTS;


//Allocate geometry flags structure


pro_error = ProOutputBrepRepresentationAlloc(&pro_bRep);


PROUTIL_CALL_REPORT("ProOutputBrepRepresentationAlloc()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


//Set the geometry flags structure


pro_error = ProOutputBrepRepresentationFlagsSet(pro_bRep, PRO_B_FALSE, PRO_B_FALSE, PRO_B_TRUE, PRO_B_FALSE);


PROUTIL_CALL_REPORT("ProOutputBrepRepresentationFlagsSet ()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


//Verify that these flags are supported


pro_error = ProOutputBrepRepresentationIsSupported(pro_intf3DExportType, pro_bRep, &pro_bIsSupported);


PROUTIL_CALL_REPORT("ProOutputBrepRepresentationIsSupported()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


if(pro_bIsSupported == PRO_B_FALSE)


return PRO_TK_BAD_INPUTS;


//Allocate inclusion flags structure


pro_error = ProOutputInclusionAlloc(&pro_outputInclusion);


PROUTIL_CALL_REPORT("ProOutputInclusionAlloc()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


//Set the inclusion flags


pro_error = ProOutputInclusionFlagsSet(pro_outputInclusion, PRO_B_FALSE, PRO_B_FALSE, PRO_B_FALSE);


PROUTIL_CALL_REPORT("ProOutputInclusionFlagsSet()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


//Allocate the layer options structure


pro_error = ProOutputLayerOptionsAlloc(&pro_outputLayerOptions);


PROUTIL_CALL_REPORT("ProOutputLayerOptionsAlloc()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


//Set the layer options


pro_error = ProOutputLayerOptionsAutoidSet(pro_outputLayerOptions, PRO_B_TRUE);


PROUTIL_CALL_REPORT("ProOutputLayerOptionsAutoidSet()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);





//Get the csys for this simp rep


pro_csys = GetCsys(pro_partSimpRep);


//Convert the cys to a geomitem


pro_error = ProCsysToGeomitem((ProSolid)pro_partSimpRep, pro_csys, &pro_geomItem);


PROUTIL_CALL_REPORT("ProCsysToGeomitem()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


//Allocate a selection object for the csys geomitem


pro_error = ProSelectionAlloc(NULL, (ProModelitem*)&pro_geomItem, &pro_sel);


PROUTIL_CALL_REPORT("ProSelectionAlloc()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


//Output the IGES file


pro_error = ProIntf3DFileWrite((ProSolid)pro_partSimpRep, pro_intf3DExportType, pro_wszFileName, pro_outputAsmConfig, pro_sel, pro_bRep, pro_outputInclusion, pro_outputLayerOptions);


PROUTIL_CALL_REPORT("ProIntf3DFileWrite()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


//Free the csys selection object


pro_error = ProSelectionFree(&pro_sel);


PROUTIL_CALL_REPORT("ProSelectionFree()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


//Free the layer options structure


pro_error = ProOutputLayerOptionsFree(pro_outputLayerOptions);


PROUTIL_CALL_REPORT("ProOutputLayerOptionsFree()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


//Free the inclusion flags structure


pro_error = ProOutputInclusionFree(pro_outputInclusion);


PROUTIL_CALL_REPORT("ProOutputInclusionFree()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


//Free the geometry flags structure


pro_error = ProOutputBrepRepresentationFree(pro_bRep);


PROUTIL_CALL_REPORT("ProOutputBrepRepresentationFree()", szFuncName, pro_error, pro_error!=PRO_TK_NO_ERROR);


return PRO_TK_NO_ERROR;


}





Patrick Williams
Application Engineer
Steelcase Inc.
</DIV>
 
Hi Patrick,
You have to check whether instance is open before you call ProFaminstanceErase. You can use corresponding Mdl handle to ProMdlWindowGet to check that.

I have related problem, where I could not get separate ProMdl handle for different simpreps of an assembly. I'm trying ProAssemblySimprepRetrieve(), but it always return same assembly handle.
PTK_CALL(err = ProAssemblySimprepRetrieve(asmname,simpname,NULL,model));
Here, I' giving different simpname,but the same model(ProAssembly) is returned.

Can you help on this?
 
There is a definite bug with this functionality. There will be an SPR filed for it but I don't know the number as of yet.
 
Hi Patrick,
When you say Bug, is it in ProAssemblySimprepRetrieve or ProFaminstanceErase. We are using ProFaminstanceErase and it does not crash. We make a check to see if it is not displayed in a window. Only models not present in a window can be erased from memory using ProMdlErase or ProFaminstanceErase.
 

Sponsor

Articles From 3DCAD World

Back
Top