#ifndef  TYPE_SDAIINSPECTED_ELEMENT_SELECT_H
#define  TYPE_SDAIINSPECTED_ELEMENT_SELECT_H

// This file was generated by exp2cxx,
// 0.8.1.
// You probably don't want to edit it since your modifications
// will be lost if exp2cxx is used to regenerate it.


//////////  SELECT TYPE SdaiInspected_element_select
class SC_SCHEMA_EXPORT SdaiInspected_element_select  :  public SDAI_Select {
  protected:
    //  types in SELECT 
    //   ASSEMBLY_COMPONENT_USAGE    --  sdaiINSTANCE
    //   AXIS2_PLACEMENT_3D    --  sdaiINSTANCE
    //   B_SPLINE_OR_COMPOSITE_CURVE_SELECT    --  sdaiSELECT
    //   B_SPLINE_OR_RECTANGULAR_COMPOSITE_SURFACE_SELECT    --  sdaiSELECT
    //   CARTESIAN_TRANSFORMATION_OPERATOR_3D    --  sdaiINSTANCE
    //   CLOSED_OR_OPEN_SHELL_SELECT    --  sdaiSELECT
    //   CONNECTED_FACE_SET    --  sdaiINSTANCE
    //   CURVE    --  sdaiINSTANCE
    //   DIRECTION    --  sdaiINSTANCE
    //   EDGE_CURVE    --  sdaiINSTANCE
    //   EDGE_LOOP    --  sdaiINSTANCE
    //   FACE_SURFACE    --  sdaiINSTANCE
    //   GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT    --  sdaiINSTANCE
    //   GLOBAL_UNIT_ASSIGNED_CONTEXT    --  sdaiINSTANCE
    //   GROUP    --  sdaiINSTANCE
    //   MANIFOLD_SOLID_BREP    --  sdaiINSTANCE
    //   PLACEMENT    --  sdaiINSTANCE
    //   POINT    --  sdaiINSTANCE
    //   PRESENTATION_LAYER_ASSIGNMENT    --  sdaiINSTANCE
    //   REPRESENTATION_ITEM    --  sdaiINSTANCE
    //   STYLED_ITEM    --  sdaiINSTANCE
    //   SURFACE    --  sdaiINSTANCE
    //   VERTEX_POINT    --  sdaiINSTANCE
       SDAI_Application_instance_ptr _app_inst;
       SdaiB_spline_or_composite_curve_select _sdaib_spline_or_composite_curve_select;
       SdaiB_spline_or_rectangular_composite_surface_select _sdaib_spline_or_rectangular_composite_surface_select;
       SdaiClosed_or_open_shell_select _sdaiclosed_or_open_shell_select;

  public:
    virtual const TypeDescriptor * AssignEntity (SDAI_Application_instance * se);
    virtual SDAI_Select * NewSelect ();

    virtual BASE_TYPE ValueType() const;


// STEP Part 21
    virtual void STEPwrite_content (ostream& out =std::cout,
                    const char *currSch =0) const;
    virtual void STEPwrite_verbose (ostream& out =std::cout,
                    const char *currSch =0) const;
    virtual Severity STEPread_content (istream& in =cin,
        InstMgrBase * instances =0, const char *utype =0,
        int addFileId =0, const char *currSch =0);
    virtual Severity StrToVal_content (const char *,
        InstMgrBase * instances =0);

// STEP Part 22:  SDAI

// constructors
    SdaiInspected_element_select( const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    //  part 1
    SdaiInspected_element_select( const SdaiAssembly_component_usage_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiAxis2_placement_3d_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiB_spline_or_composite_curve_select_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiB_spline_or_rectangular_composite_surface_select_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiCartesian_transformation_operator_3d_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiClosed_or_open_shell_select_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiConnected_face_set_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiCurve_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiDirection_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiEdge_curve_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiEdge_loop_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiFace_surface_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiGlobal_uncertainty_assigned_context_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiGlobal_unit_assigned_context_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiGroup_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiManifold_solid_brep_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiPlacement_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiPoint_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiPresentation_layer_assignment_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiRepresentation_item_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiStyled_item_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiSurface_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    SdaiInspected_element_select( const SdaiVertex_point_ptr&,
                                  const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    virtual ~SdaiInspected_element_select();

    //  part 2
    operator SdaiAssembly_component_usage_ptr();
    operator SdaiAxis2_placement_3d_ptr();
    operator SdaiB_spline_or_composite_curve_select_ptr();
    operator SdaiB_spline_or_rectangular_composite_surface_select_ptr();
    operator SdaiCartesian_transformation_operator_3d_ptr();
    operator SdaiClosed_or_open_shell_select_ptr();
    operator SdaiConnected_face_set_ptr();
    operator SdaiCurve_ptr();
    operator SdaiDirection_ptr();
    operator SdaiEdge_curve_ptr();
    operator SdaiEdge_loop_ptr();
    operator SdaiFace_surface_ptr();
    operator SdaiGlobal_uncertainty_assigned_context_ptr();
    operator SdaiGlobal_unit_assigned_context_ptr();
    operator SdaiGroup_ptr();
    operator SdaiManifold_solid_brep_ptr();
    operator SdaiPlacement_ptr();
    operator SdaiPoint_ptr();
    operator SdaiPresentation_layer_assignment_ptr();
    operator SdaiRepresentation_item_ptr();
    operator SdaiStyled_item_ptr();
    operator SdaiSurface_ptr();
    operator SdaiVertex_point_ptr();

    //  part 3
        SdaiPoint_ptr_c vertex_geometry_() const;
        SdaiPoint_ptr   vertex_geometry_();
        void vertex_geometry_( const SdaiPoint_ptr x );

        SdaiStyled_item_target_ptr_c item_() const;
        SdaiStyled_item_target_ptr   item_();
        void item_( const SdaiStyled_item_target_ptr x );

        EntityAggregate_ptr_c styles_() const;
        EntityAggregate_ptr   styles_();
        void styles_( const EntityAggregate_ptr x );

        SdaiLayered_item_agg_ptr_c assigned_items_() const;
        SdaiLayered_item_agg_ptr   assigned_items_();
        void assigned_items_( const SdaiLayered_item_agg_ptr x );

        SdaiClosed_shell_ptr_c outer_() const;
        SdaiClosed_shell_ptr   outer_();
        void outer_( const SdaiClosed_shell_ptr x );

        SdaiUnit_agg_ptr_c units_() const;
        SdaiUnit_agg_ptr   units_();
        void units_( const SdaiUnit_agg_ptr x );

        EntityAggregate_ptr_c uncertainty_() const;
        EntityAggregate_ptr   uncertainty_();
        void uncertainty_( const EntityAggregate_ptr x );

        EntityAggregate_ptr_c representations_in_context_() const;
        EntityAggregate_ptr   representations_in_context_();
        void representations_in_context_( const EntityAggregate_ptr x );

  const SdaiText   context_type_() const;
        SdaiText   context_type_();
        void context_type_( const SdaiText x );

  const SdaiIdentifier   context_identifier_() const;
        SdaiIdentifier   context_identifier_();
        void context_identifier_( const SdaiIdentifier x );

        SdaiSurface_ptr_c face_geometry_() const;
        SdaiSurface_ptr   face_geometry_();
        void face_geometry_( const SdaiSurface_ptr x );

        EntityAggregate_ptr_c bounds_() const;
        EntityAggregate_ptr   bounds_();
        void bounds_( const EntityAggregate_ptr x );

        EntityAggregate_ptr_c edge_list_() const;
        EntityAggregate_ptr   edge_list_();
        void edge_list_( const EntityAggregate_ptr x );

        Boolean   same_sense_() const;
        void same_sense_( const Boolean x );

        SdaiCurve_ptr_c edge_geometry_() const;
        SdaiCurve_ptr   edge_geometry_();
        void edge_geometry_( const SdaiCurve_ptr x );

        SdaiVertex_ptr_c edge_end_() const;
        SdaiVertex_ptr   edge_end_();
        void edge_end_( const SdaiVertex_ptr x );

        SdaiVertex_ptr_c edge_start_() const;
        SdaiVertex_ptr   edge_start_();
        void edge_start_( const SdaiVertex_ptr x );

        RealAggregate_ptr_c direction_ratios_() const;
        RealAggregate_ptr   direction_ratios_();
        void direction_ratios_( const RealAggregate_ptr x );

        EntityAggregate_ptr_c cfs_faces_() const;
        EntityAggregate_ptr   cfs_faces_();
        void cfs_faces_( const EntityAggregate_ptr x );

        SdaiDirection_ptr_c axis3_() const;
        SdaiDirection_ptr   axis3_();
        void axis3_( const SdaiDirection_ptr x );

        SDAI_Real   scale_() const;
        void scale_( const SDAI_Real x );

        SdaiCartesian_point_ptr_c local_origin_() const;
        SdaiCartesian_point_ptr   local_origin_();
        void local_origin_( const SdaiCartesian_point_ptr x );

        SdaiDirection_ptr_c axis2_() const;
        SdaiDirection_ptr   axis2_();
        void axis2_( const SdaiDirection_ptr x );

        SdaiDirection_ptr_c axis1_() const;
        SdaiDirection_ptr   axis1_();
        void axis1_( const SdaiDirection_ptr x );

        SdaiDirection_ptr_c ref_direction_() const;
        SdaiDirection_ptr   ref_direction_();
        void ref_direction_( const SdaiDirection_ptr x );

        SdaiDirection_ptr_c axis_() const;
        SdaiDirection_ptr   axis_();
        void axis_( const SdaiDirection_ptr x );

        SdaiCartesian_point_ptr_c location_() const;
        SdaiCartesian_point_ptr   location_();
        void location_( const SdaiCartesian_point_ptr x );

  const SdaiIdentifier   reference_designator_() const;
        SdaiIdentifier   reference_designator_();
        void reference_designator_( const SdaiIdentifier x );

        SdaiProduct_definition_or_reference_ptr_c related_product_definition_() const;
        SdaiProduct_definition_or_reference_ptr   related_product_definition_();
        void related_product_definition_( const SdaiProduct_definition_or_reference_ptr x );

        SdaiProduct_definition_or_reference_ptr_c relating_product_definition_() const;
        SdaiProduct_definition_or_reference_ptr   relating_product_definition_();
        void relating_product_definition_( const SdaiProduct_definition_or_reference_ptr x );

  const SdaiText   description_() const;
        SdaiText   description_();
        void description_( const SdaiText x );

  const SdaiLabel   name_() const;
        SdaiLabel   name_();
        void name_( const SdaiLabel x );

  const SdaiIdentifier   id_() const;
        SdaiIdentifier   id_();
        void id_( const SdaiIdentifier x );


    //  part 4
    SdaiInspected_element_select& operator =( const SdaiAssembly_component_usage_ptr& );
    SdaiInspected_element_select& operator =( const SdaiAxis2_placement_3d_ptr& );
    SdaiInspected_element_select& operator =( const SdaiB_spline_or_composite_curve_select_ptr& );
    SdaiInspected_element_select& operator =( const SdaiB_spline_or_rectangular_composite_surface_select_ptr& );
    SdaiInspected_element_select& operator =( const SdaiCartesian_transformation_operator_3d_ptr& );
    SdaiInspected_element_select& operator =( const SdaiClosed_or_open_shell_select_ptr& );
    SdaiInspected_element_select& operator =( const SdaiConnected_face_set_ptr& );
    SdaiInspected_element_select& operator =( const SdaiCurve_ptr& );
    SdaiInspected_element_select& operator =( const SdaiDirection_ptr& );
    SdaiInspected_element_select& operator =( const SdaiEdge_curve_ptr& );
    SdaiInspected_element_select& operator =( const SdaiEdge_loop_ptr& );
    SdaiInspected_element_select& operator =( const SdaiFace_surface_ptr& );
    SdaiInspected_element_select& operator =( const SdaiGlobal_uncertainty_assigned_context_ptr& );
    SdaiInspected_element_select& operator =( const SdaiGlobal_unit_assigned_context_ptr& );
    SdaiInspected_element_select& operator =( const SdaiGroup_ptr& );
    SdaiInspected_element_select& operator =( const SdaiManifold_solid_brep_ptr& );
    SdaiInspected_element_select& operator =( const SdaiPlacement_ptr& );
    SdaiInspected_element_select& operator =( const SdaiPoint_ptr& );
    SdaiInspected_element_select& operator =( const SdaiPresentation_layer_assignment_ptr& );
    SdaiInspected_element_select& operator =( const SdaiRepresentation_item_ptr& );
    SdaiInspected_element_select& operator =( const SdaiStyled_item_ptr& );
    SdaiInspected_element_select& operator =( const SdaiSurface_ptr& );
    SdaiInspected_element_select& operator =( const SdaiVertex_point_ptr& );
    // not in SDAI
    SdaiInspected_element_select& ShallowCopy ( const SdaiInspected_element_select& );

#ifdef COMPILER_DEFINES_OPERATOR_EQ
#else
    SdaiInspected_element_select& operator =( SdaiInspected_element_select * const & );
    SDAI_Select& operator =( const SDAI_Select& );
#endif

    //  part 5
    Logical IsAssembly_component_usage() const;
    Logical IsAxis2_placement_3d() const;
    Logical IsB_spline_or_composite_curve_select() const;
    Logical IsB_spline_or_rectangular_composite_surface_select() const;
    Logical IsCartesian_transformation_operator_3d() const;
    Logical IsClosed_or_open_shell_select() const;
    Logical IsConnected_face_set() const;
    Logical IsCurve() const;
    Logical IsDirection() const;
    Logical IsEdge_curve() const;
    Logical IsEdge_loop() const;
    Logical IsFace_surface() const;
    Logical IsGlobal_uncertainty_assigned_context() const;
    Logical IsGlobal_unit_assigned_context() const;
    Logical IsGroup() const;
    Logical IsManifold_solid_brep() const;
    Logical IsPlacement() const;
    Logical IsPoint() const;
    Logical IsPresentation_layer_assignment() const;
    Logical IsRepresentation_item() const;
    Logical IsStyled_item() const;
    Logical IsSurface() const;
    Logical IsVertex_point() const;

    //  part 6 ... UnderlyingTypeName () implemented in SDAI_Select class ...

    //  part 7 ... NONE    only for complex selects...
};

inline SDAI_Select * create_SdaiInspected_element_select () { return new SdaiInspected_element_select; }
typedef SdaiInspected_element_select * SdaiInspected_element_selectH;
typedef SdaiInspected_element_select_ptr SdaiInspected_element_select_var;


class SdaiInspected_element_select_agg : public SelectAggregate {
  protected:
    SelectTypeDescriptor *sel_type;

  public:
    SdaiInspected_element_select_agg( SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_inspected_element_select );
    ~SdaiInspected_element_select_agg();
    virtual SingleLinkNode * NewNode()
     { return new SelectNode (new SdaiInspected_element_select( sel_type )); }
};
inline STEPaggregate * create_SdaiInspected_element_select_agg () { return new SdaiInspected_element_select_agg; }
typedef SdaiInspected_element_select_agg_ptr SdaiInspected_element_select_agg_var;

/////  END SELECT TYPE inspected_element_select

void init_SdaiInspected_element_select(Registry& reg);

#endif
