#ifndef PROSRFCOLLECTION_H #define PROSRFCOLLECTION_H #include <ProToolkit.h> #include <ProCollect.h> #include <ProReference.h> PRO_BEGIN_C_DECLS typedef void* ProSrfcollection; /* ========================================================================= */ /* ======================= Instruction Types =============================== */ /* ========================================================================= */ typedef enum pro_coll_instr_type ProSrfcollinstrType; /* Defined in ProCollect.h */ /* ========================================================================= */ /* ======================= Reference Type ================================== */ /* ========================================================================= */ typedef enum pro_coll_ref_type ProSrfcollrefType; /* Defined in ProCollect.h */ /* ========================================================================= */ /* ======================= Surface Collection Instruction ================== */ /* ========================================================================= */ typedef void* ProSrfcollinstr; /* ========================================================================= */ /* ======================= Surface Collection Reference ================== */ /* ========================================================================= */ typedef void* ProSrfcollref; /* ========================================================================= */ /* ======================= Surface Collection Reference API ============== */ /* ========================================================================= */ extern ProError ProSrfcollrefAlloc (ProSrfcollrefType type, ProReference item, ProSrfcollref* ref); /* Purpose: Allocates a surface collection reference handle Input Arguments: type - The reference type. item - The reference item. Output Arguments: ref - Pointer to the reference handle. Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more arguments was invalid. PRO_TK_OUT_OF_MEMORY - Memory allocation failure. */ extern ProError ProSrfcollrefFree (ProSrfcollref ref); /* Purpose: Frees a surface collection reference handle Input Arguments: ref - Pointer to the reference handle. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more arguments was invalid. */ extern ProError ProSrfcollrefArrayFree (ProSrfcollref* ref); /* Purpose: Frees a ProArray of surface collection reference handles Input Arguments: ref - ProArray of reference handles. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more arguments was invalid. */ extern ProError ProSrfcollrefItemGet (ProSrfcollref ref, ProReference* item); /* Purpose: Returns the geometry item contained in a surface collection reference. Input Arguments: ref - Pointer to the reference handle. Output Arguments: item - The reference item. Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more arguments was invalid. */ extern ProError ProSrfcollrefTypeGet (ProSrfcollref ref, ProSrfcollrefType* type); /* Purpose: Returns the type of reference contained in a surface collection reference. Input Arguments: ref - Pointer to the reference handle. Output Arguments: type - The reference type. Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more arguments was invalid. */ /* ========================================================================= */ /* ======================= Surface Collection Instruction API ============== */ /* ========================================================================= */ extern ProError ProSrfcollinstrAlloc( ProSrfcollinstrType type, ProBoolean include, ProSrfcollinstr* r_instr ); /* Purpose: Allocates a surface collection instruction. <p><b>Note: </b>For excludeinstructions (those with PRO_B_FALSE include input argument), only one-by-one (that is,those with PRO_SURFCOLL_SINGLE_SURF type input argument) are currently supported. Input Arguments: type - The instruction type. include - PRO_B_TRUE to add surfaces generated by this instruction to the surface set, PRO_B_FALSE to exclude surfaces generated by this instruction from the set. Output Arguments: r_instr - Pointer to surface collection instruction Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more arguments was invalid. PRO_TK_NOT_IMPLEMENTED - This case is not supported. PRO_TK_OUT_OF_MEMORY - Memory allocation failure. */ extern ProError ProSrfcollinstrFree ( ProSrfcollinstr instr ); /* Purpose: Releases surface collection instruction Input Arguments: instr - Pointer to surface collection instruction Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - The argument was invalid. */ extern ProError ProSrfcollinstrArrayFree ( ProSrfcollinstr* instrs ); /* Purpose: Releases a ProArray of surface collection instructions Input Arguments: instrs - The surface collection instruction array Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - The argument was invalid. */ extern ProError ProSrfcollinstrTypeGet (ProSrfcollinstr instr, ProSrfcollinstrType* type); /* Purpose: Gets the surface collection instruction type Input Arguments: instr - Surface collection instruction Output Arguments: type - The instruction type. Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more arguments was invalid. */ extern ProError ProSrfcollinstrReferenceAdd( ProSrfcollinstr instr, ProSrfcollref reference ); /* Purpose: Adds a reference to surface collection instruction references Input Arguments: instr - Surface collection instruction reference - The object reference Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more arguments was invalid. PRO_TK_INVALID_ITEM - Invalid item for this type of instruction. */ extern ProError ProSrfcollinstrReferenceRemove( ProSrfcollinstr instr, int index ); /* Purpose: Removes a reference from surface collection instruction references Input Arguments: instr - Surface collection instruction index - The index of the selection to remove Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more arguments was invalid. PRO_TK_E_NOT_FOUND - Invalid index for the instruction. See Also: ProSrfcollinstrReferencesGet() */ extern ProError ProSrfcollinstrReferencesGet( ProSrfcollinstr instr, ProSrfcollref** reference_array ); /* Purpose: Returns the references contained in a surface collection instruction Input Arguments: instr - Surface collection instruction Output Arguments: reference_array - ProArray of references. Free this array using ProSrfcollrefArrayFree(). Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more arguments was invalid. PRO_TK_INVALID_ITEM - Invalid item for this type of instruction. */ extern ProError ProSrfcollinstrIncludeSet ( ProSrfcollinstr instr, ProBoolean include ); /* Purpose: Sets the include flag for a surface collection instruction. <p><b>Note:</b>Only one-by-one (that is, those of PRO_SURFCOLL_SINGLE_SURF type) instructions cancurrently be excluded. Input Arguments: instr - Surface collection instruction include - PRO_B_TRUE to include the surfaces generated by this instruction in the set, PRO_B_FALSE to exclude the surfaces from the set. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more arguments was invalid. PRO_TK_NOT_IMPLEMENTED - This case is not supported. */ extern ProError ProSrfcollinstrIncludeGet ( ProSrfcollinstr instr, ProBoolean* include ); /* Purpose: Checks that attribute of surface collection instruction is set Input Arguments: instr - Surface collection instruction Output Arguments: include - PRO_B_TRUE to include the surfaces generated by this instruction in the overall set, PRO_B_FALSE to exclude the surfaces generated by this instruction in the overall set Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more arguments was invalid. */ /* ========================================================================= */ /* ========== Surface Collection instruction information defines =========== */ /* ========================================================================= */ /* Bit flag specific to PRO_SURFCOLL_GEOM_RULE */ #define PRO_SURFCOLL_ALL_GEOM_RULE ( 1 << 3 )/*If included with other rules ALL rules will be applied otherwise any applicable geometry rule will be applied*/ #define PRO_SURFCOLL_CO_PLANNAR_GEOM_RULE ( 1 << 4 )/*Coplanar planes will be considered for the set */ #define PRO_SURFCOLL_PARALLEL_GEOM_RULE ( 1 << 5 )/*Parallel planes will be considered for the set */ #define PRO_SURFCOLL_CO_AXIAL_GEOM_RULE ( 1 << 6 )/*Coaxial surfaces will be considered for the set */ #define PRO_SURFCOLL_EQ_RADIUS_GEOM_RULE ( 1 << 7 )/*Surfaces with equal radius will be considered for the set */ #define PRO_SURFCOLL_SAME_CONVEXITY_GEOM_RULE ( 1 << 8 )/*Surfaces with same convexity will be considered for the set */ /* Bit flag specific to PRO_SURFCOLL_SHAPE_BASED */ #define PRO_SURFCOLL_SHAPE_CHAMFER ( 1 << 9 )/*If used alone Primary chamfer shapes will be added to set*/ #define PRO_SURFCOLL_SHAPE_ROUND ( 1 << 10 )/*If used alone Primary round shapes will be added to set*/ #define PRO_SURFCOLL_SHAPE_PROTR_BOSS ( 1 << 11 )/*Protrusion with secondary shapes will be added to set*/ #define PRO_SURFCOLL_SHAPE_PROTR_RIB ( 1 << 12 )/*Protrusion without secondary shapes will be added to set*/ #define PRO_SURFCOLL_SHAPE_CUT_POCKET ( 1 << 13 )/*Cut with secondary shapes will be added to set*/ #define PRO_SURFCOLL_SHAPE_CUT_SLOT ( 1 << 14 )/*Cut without secondary shapes will be added to set*/ #define PRO_SURFCOLL_SHAPE_MORE_SHAPES ( 1 << 16 )/*Only to be used with PRO_SURFCOLL_SHAPE_ROUND to add secondary round shapes*/ /* Bit flag specific to PRO_SURFCOLL_TANG_SRF */ #define PRO_SURFCOLL_TANGENT_NEIGBOURS_ONLY ( 1 << 15 ) /* Bit flag specific to PRO_SURFCOLL_SEED_N_BND and PRO_SURFCOLL_SEED_N_BND_INC_BND */ #define PRO_SURFCOLL_SEEDNBOUND_STRONG_REFS ( 1 << 18 )/*Bound surfaces considered to be strong references, fail when missing.*/ extern ProError ProSrfCollinstrInfoSet ( ProSrfcollinstr instruction, int info ); /* Purpose: This function sets the collection instruction specific bit flags information in the surface collection instruction. For example, using this API, the geometry rule based attributes can be set. <B>Note:</B> Before calling this API set the include flag (true/false) for this surface collection instruction using ProSrfcollinstrIncludeSet() Input Arguments: instruction - The instruction object info - The information bit flags. Pass as bitmask containing one or more of the bit flags PRO_SURFCOLL_* defined ProSrfcollection.h Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more arguments was invalid. */ extern ProError ProSrfCollinstrInfoGet ( ProSrfcollinstr instruction, int *r_info ); /* Purpose: This function gets the collection instruction specific bit flags information from the surface collection instruction. Input Arguments: instruction - The instruction object Output Arguments: r_info - The information bit flags Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more arguments was invalid. */ /* ========================================================================= */ /* ======================= Surface Collection API ========================== */ /* ========================================================================= */ extern ProError ProSrfcollectionAlloc( ProCollection* r_collection ); /* Purpose: Allocates a surface collection Input Arguments: none Output Arguments: r_collection - Pointer to surface collection Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more arguments was invalid. PRO_TK_OUT_OF_MEMORY - Memory allocation failure. See Also: ProCollectionFree() */ extern ProError ProSrfcollectionCopy( ProCollection source, ProCollection* target); /* Purpose: Copies a surface collection. Input Arguments: source - Surface collection Output Arguments: target - The copy of the surface collection. This will be a newly allocated collection that should be freed by ProCollectionFree(). Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more arguments was invalid. PRO_TK_OUT_OF_MEMORY - Memory allocation failure. PRO_TK_INVALID_TYPE - The collection contains instructions for curves. See Also: ProCollectionFree() */ extern ProError ProSrfcollectionInstructionAdd( ProCollection collection, ProSrfcollinstr instr ); /* Purpose: Adds instruction to surface collection Input Arguments: collection - Surface collection instr - Instruction to add Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more arguments was invalid. PRO_TK_INVALID_TYPE - The collection contains instructions for curves. */ extern ProError ProSrfcollectionInstructionRemove ( ProCollection collection, int index ); /* Purpose: Removes an instruction from the surface collection Input Arguments: collection - Surface collection index - Index of the instruction to remove. Output Arguments: none Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more arguments was invalid. PRO_TK_E_NOT_FOUND - Invalid index for the instruction. PRO_TK_INVALID_TYPE - The collection contains instructions for curves. */ extern ProError ProSrfcollectionInstructionsGet ( ProCollection collection, ProSrfcollinstr** instrs_array ); /* Purpose: Returns an array of instructions assigned to the surface collection Input Arguments: collection - Surface collection Output Arguments: instrs_array - ProArray of instructions. Free this array using ProSrfcollinstrArrayFree(). Return Values: PRO_TK_NO_ERROR - The function succeeded. PRO_TK_BAD_INPUTS - One or more arguments was invalid. PRO_TK_E_NOT_FOUND - Invalid index for the instruction. PRO_TK_INVALID_TYPE - The collection contains instructions for curves. */ extern ProError ProSrfcollectionRegenerate (ProCollection collection, ProSelection **r_result_sellist, int *r_result_sel_num); /* Purpose: Generate the selection based on the instructions set in the surface collection. <p><b>Note: </b>This function will not be able to extract geometry, if some or all of the resulting geometry is inactive due to material removal features occuring in the model. In order to extract the reference geometry for such a collection, use ProFeatureInsertModeActivate() to roll back the model before the material remove feature. Input Arguments: collection - The surface collection. Output Arguments: r_result_sellist - ProArray of selections allocated by the function. Use <B>ProSelectionarrayFree()</B> to free the memory. r_result_sel_num - Number of selections made. Return Values: PRO_TK_NO_ERROR - The function successfully generated the collection. PRO_TK_OUT_OF_MEMORY - There was a memory error. PRO_TK_BAD_INPUTS - The input argument is invalid. PRO_TK_GENERAL_ERROR - There was a general error. PRO_TK_MULTIBODY_UNSUPPORTED - input surface collection is not supported in multi-body models. */ PRO_END_C_DECLS #endif /* PROSRFCOLLECTION_H */