#ifndef PROFLXMDLOPTS_H
#define PROFLXMDLOPTS_H



#include <ProToolkit.h>

PRO_BEGIN_C_DECLS

/*===========================================================================
  Generic Flexible Modeling options branch. 

  The branch exists in: PRO_FEAT_FLEXMOVE
                        PRO_FEAT_FLX_OGF
                        PRO_FEAT_ANALYT_GEOM
                        PRO_FEAT_FLXATTACH
                        PRO_FEAT_FLEXSUBST
=============================================================================*/

/*===============================================================================================

(1) Element tree

   PRO_E_FLEX_OPTS_CMPND
      |
      |-- PRO_E_FLEX_TRF_SEL_ATT_GEOM
      |
      |-- PRO_E_FLEX_ATTACH_GEOM
      |
      |-- PRO_E_FLEX_CR_RND_GEOM
      |
      |-- PRO_E_FLEX_KEEP_ORIG_GEOM
      |
      |-- PRO_E_FLEX_PROPAGATE_TANGENCY
      |
      |-- PRO_E_FLEX_DFLT_CONDITIONS
      |
      |-- PRO_E_FLEX_BOUND_EDGES_CMP
      |      |
      |      |-- PRO_E_STD_CURVE_COLLECTION_APPL
      |
      |-- PRO_E_FLEX_SOL_INDEX
      |
      |-- PRO_E_FLEX_MAINTAIN_TOPO
      |
      |-- PRO_E_FLEX_PULL_OPTION
      |
      |-- PRO_E_FLEX_ATT_CHNS_CMP
      |      |
      |      |-- PRO_E_FLEX_SIDE_SRFS_CMP
      |      |      |
      |      |      |-- PRO_E_STD_CURVE_COLLECTION_APPL
      |      |
      |      |-- PRO_E_FLEX_EXT_INT_CMP
      |             |
      |             |-- PRO_E_STD_CURVE_COLLECTION_APPL
      |
      |-- PRO_E_FLEX_SPLIT_EXT_SURFS_CMP
             |
             |-- PRO_E_FLEX_EXT_SRFS_CMP
             |      |
             |      |-- PRO_E_STD_SURF_COLLECTION_APPL
             |
             |-- PRO_E_FLEX_SPT_SRFS_CMP
             |      |
             |      |-- PRO_E_FLEX_SPLIT_SURFS
             |
             |-- PRO_E_FLEX_FLIP_SPLIT_DIR

=================================================================================================

(2) Elements table

-------------------------------------------------------------------------------------------------
 Element Id                       Element Name               Data Type                Valid Values
-------------------------------------------------------------------------------------------------
 PRO_E_FLEX_OPTS_CMPND            FLX-MDL Options            Compound
 PRO_E_FLEX_TRF_SEL_ATT_GEOM      Transform Sel. Att. Geoms  PRO_VALUE_TYPE_INTEGER   Note-15
 PRO_E_FLEX_ATTACH_GEOM           Attach geometry            PRO_VALUE_TYPE_INTEGER   Note-1
 PRO_E_FLEX_CR_RND_GEOM           Create round geometry      PRO_VALUE_TYPE_INTEGER   Note-2
                               OR Store attachment properties PRO_VALUE_TYPE_INTEGER  Note-2
 PRO_E_FLEX_KEEP_ORIG_GEOM        Keep original geometry     PRO_VALUE_TYPE_INTEGER   Note-3
 PRO_E_FLEX_PROPAGATE_TANGENCY    Propagate tangency         PRO_VALUE_TYPE_INTEGER   Note-4
 PRO_E_FLEX_DFLT_CONDITIONS       Create default conditions  PRO_VALUE_TYPE_INTEGER   Note-14
 PRO_E_FLEX_BOUND_EDGES_CMP       Bounding Edges             Compound                
 PRO_E_STD_CURVE_COLLECTION_APPL  Bounding Edges Chain       Chain                    Note-5
 PRO_E_FLEX_SOL_INDEX             Solution info              Application              Note-6
 PRO_E_FLEX_MAINTAIN_TOPO         Maintain solution topology PRO_VALUE_TYPE_INTEGER   Note-16
 PRO_E_FLEX_PULL_OPTION           Pull option                PRO_VALUE_TYPE_INTEGER   Note-13
 PRO_E_FLEX_ATT_CHNS_CMP          Non default edge handling  Compound
 PRO_E_FLEX_SIDE_SRFS_CMP         Side surfaces              Compound
 PRO_E_STD_CURVE_COLLECTION_APPL  Side Surfaces Chain        Chain Collection         Note-7
 PRO_E_FLEX_EXT_INT_CMP           Extend and intersect       Compound
 PRO_E_STD_CURVE_COLLECTION_APPL  Extend Intersect Chain     Chain Collection         Note-8
 PRO_E_FLEX_SPLIT_EXT_SURFS_CMP   Split extending surfaces   Compound                 Note-9
 PRO_E_FLEX_EXT_SRFS_CMP          Extending surfaces         Compound               
 PRO_E_STD_SURF_COLLECTION_APPL   Extending surfaces set     Surface Collection       Note-10
 PRO_E_FLEX_SPT_SRFS_CMP          Splitting surfaces         Compound                
 PRO_E_FLEX_SPLIT_SURFS           Splitting surfaces set     PRO_VALUE_TYPE_SELECTION Note-11
 PRO_E_FLEX_FLIP_SPLIT_DIR        Flip split direction       PRO_VALUE_TYPE_INT       Note-12
 

=================================================================================================

(3) Notes

   Note-1  : Mandatory.
             Relevant in: PRO_FEAT_FLEXMOVE, PRO_FEAT_FLX_OGF, PRO_FEAT_ANALYT_GEOM.
             Values     : [PRO_FLEXMODEL_OPT_YES, PRO_FLEXMODEL_OPT_NO]

   Note-2  : Mandatory.

             When PRO_E_FLEX_ATTACH_GEOM is set to PRO_FLEXMODEL_OPT_YES, the option controls 
             creation of round geometry.

             When PRO_E_FLEX_ATTACH_GEOM is set to PRO_FLEXMODEL_OPT_NO, the option controls
             storing of attachment properties.

             Relevant in: PRO_FEAT_FLEXMOVE, PRO_FEAT_FLX_OGF, PRO_FEAT_ANALYT_GEOM,
                          PRO_FEAT_FLEXSUBST.
             Values     : [PRO_FLEXMODEL_OPT_YES, PRO_FLEXMODEL_OPT_NO]

   Note-3  : Mandatory.
             Relevant in: PRO_FEAT_FLEXMOVE, PRO_FEAT_FLEXSUBST.
             Values     : [PRO_FLEXMODEL_OPT_YES, PRO_FLEXMODEL_OPT_NO]

   Note-4  : Mandatory.
             Relevant in: PRO_FEAT_FLEXMOVE, PRO_FEAT_ANALYT_GEOM, PRO_FEAT_FLX_OGF.
             Values     : [PRO_FLEXMODEL_OPT_YES, PRO_FLEXMODEL_OPT_NO]

   Note-5  : Optional.
             Relevant in: PRO_FEAT_FLEXMOVE, PRO_FEAT_FLX_OGF, PRO_FEAT_ANALYT_GEOM,
                          PRO_FEAT_FLEXSUBST, PRO_FEAT_FLEXATTACH. 
             Values     : Edges and Intent Edges which belong to the same geomery
                          list as the primary feature references, but do not belong
                          to the references themselves.

   Note-6  : Mandatory.
             Relevant in: PRO_FEAT_FLEXMOVE, PRO_FEAT_FLX_OGF, PRO_FEAT_ANALYT_GEOM,
                          PRO_FEAT_FLEXSUBST, PRO_FEAT_FLEXATTACH. 
             Inaccessible by Creo Parametric TOOLKIT.

   Note-7  : Optional.
             Relevant in: PRO_FEAT_FLEXMOVE, PRO_FEAT_FLX_OGF, PRO_FEAT_ANALYT_GEOM. 
             Values     : Edges and Intent Edges which belong to the feature's
                          referenced geometry

   Note-8  : Optional.
             Relevant in: PRO_FEAT_FLEXMOVE, PRO_FEAT_FLX_OGF, PRO_FEAT_ANALYT_GEOM. 
             Values     : Edges and Intent Edges which belong to the feature's
                          referenced geometry, and do not belong to
                          "Side Surfaces Chain"

   Note-9  : The "Split extending surfaces" compound.
             Relevant in: PRO_FEAT_FLEXMOVE, PRO_FEAT_FLX_OGF, PRO_FEAT_ANALYT_GEOM.

   Note-10 : Optional* (Used with "Splitting" surfaces set & "Flip Split" option)
             Relevant in: PRO_FEAT_FLEXMOVE, PRO_FEAT_FLX_OGF.
             Please note: Ignored in PRO_FEAT_ANALYT_GEOM, in which the reference
                          surface is the only possible extending surface.
             Values     : Surfaces which belong to the Flexible Modeling feature's
                          references surface set.

   Note-11 : Optional* (Used with "Extending" surfaces set).
             Relevant in: PRO_FEAT_FLEXMOVE, PRO_FEAT_FLX_OGF, PRO_FEAT_ANALYT_GEOM.
             Values     : Surfces which belong to the same geom list (solid/quilt) as
                          the Flexible Modeling feature's reference surfaces.
                          
   Note-12 : Optional* (Used with "Extending" & "Splitting" surfaces sets)
             Relevant in: PRO_FEAT_FLEXMOVE, PRO_FEAT_FLX_OGF, PRO_FEAT_ANALYT_GEOM.
             Values     : [PRO_FLEXMODEL_OPT_YES, PRO_FLEXMODEL_OPT_NO]

   Note-13 : Mandatory.
             Relevant in: PRO_FEAT_FLEXMOVE
             Values     : PRO_FLEXMODEL_PULL_NONE - 
                             Normal feature. "create side surfaces" & "extend and intersect"
                             chain collections will be used.

                          PRO_FLEXMODEL_PULL_CREATE_SURFS - 
                             Treat all reference geometry boundary edges as though they
                             were all selected in the "create side surfaces" chain 
                             collection.

                          PRO_FLEXMODEL_PULL_EXTEND_SURFS - 
                             Treat all reference geometry boundary edges as though they
                             were all selected in the "extend & intersect" chain 
                             collection.

   Note-14 : Mandatory.
             Relevant in: PRO_FEAT_FLEXMOVE, PRO_FEAT_FLX_OGF, PRO_FEAT_ANALYT_GEOM.
             Values     : [PRO_FLEXMODEL_OPT_YES, PRO_FLEXMODEL_OPT_NO]

   Note-15 : Mandatory.
             Relevant in: Creo 3 and above in PRO_FEAT_FLEXMOVE, PRO_FEAT_FLX_OGF, 
                          PRO_FEAT_FLEXSUBST,FlexMirror & FlexPattern.
             Values     : [PRO_FLEXMODEL_OPT_YES, PRO_FLEXMODEL_OPT_NO]
                        
             PRO_FLXMDL_OPT_YES - Round and chamfer surfaces selected as primary raferences, 
                                  and were identified as attachment (neighboring) geometries 
                                  will be treated like normal selected references.

             PRO_FLXMDL_OPT_NO  - Round and chamfer surfaces selected as primary raferences, 
                                  and were identified as attachment (neighboring) geometries 
                                  will be treated like neighboring surfaces: they will be
                                  removed and optionally recreated after the transformation
                                  of the other primary references. (i.e. these round/chamfer
                                  surfaces will be treated as if they were not selected as
                                  primary references at all).
   Note-16 : Mandatory.
             Relevant in: PRO_FEAT_FLEXMOVE, PRO_FEAT_FLX_OGF, PRO_FEAT_ANALYT_GEOM,
                          PRO_FEAT_FLEXSUBST, PRO_FEAT_FLEXATTACH. 
             Values     : [PRO_FLEXMODEL_OPT_YES, PRO_FLEXMODEL_OPT_NO]
                        
             PRO_FLXMDL_OPT_YES - The system will always attempt to generate feature geometry 
                                  that is topologically similar to the solution selected by the 
                                  user (The solution stored in PRO_E_FLEX_SOL_INDEX, and set
                                  using "Next/Previous" buttons in the feature UI). If
                                  such a solution cannot be created - the feature will fail.

             PRO_FLXMDL_OPT_NO  - The system will attempt to generate geometry that is
                                  topologically similar to the solution selected by the user,
                                  however if such a solution cannot be created - the system 
                                  will attempt to generate ANY successful solution. If no
                                  successful solution can be generated - the feature will 
                                  fail.

             Please note:         At the moment, solution selection itself is not supported 
                                  in Pro/TK.
    
==============================================================================*/

#define PRO_FLEXMODEL_OPT_YES 1
#define PRO_FLEXMODEL_OPT_NO  0

#define PRO_FLEXMODEL_PULL_NONE         0
#define PRO_FLEXMODEL_PULL_CREATE_SURFS 1
#define PRO_FLEXMODEL_PULL_EXTEND_SURFS 2

PRO_END_C_DECLS

#endif