#ifndef  TYPE_SDAICSG_PRIMITIVE_H
#define  TYPE_SDAICSG_PRIMITIVE_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 SdaiCsg_primitive
class SC_SCHEMA_EXPORT SdaiCsg_primitive  :  public SDAI_Select {
  protected:
    //  types in SELECT 
    //   BLOCK    --  sdaiINSTANCE
    //   BOUNDED_PRIMITIVE_2D    --  sdaiSELECT
    //   CYCLIDE_SEGMENT_SOLID    --  sdaiINSTANCE
    //   ECCENTRIC_CONE    --  sdaiINSTANCE
    //   ELLIPSOID    --  sdaiINSTANCE
    //   FACETED_PRIMITIVE    --  sdaiINSTANCE
    //   RECTANGULAR_PYRAMID    --  sdaiINSTANCE
    //   RIGHT_ANGULAR_WEDGE    --  sdaiINSTANCE
    //   RIGHT_CIRCULAR_CONE    --  sdaiINSTANCE
    //   RIGHT_CIRCULAR_CYLINDER    --  sdaiINSTANCE
    //   SPHERE    --  sdaiINSTANCE
    //   TORUS    --  sdaiINSTANCE
       SDAI_Application_instance_ptr _app_inst;
       SdaiBounded_primitive_2d _sdaibounded_primitive_2d;

  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
    SdaiCsg_primitive( const SelectTypeDescriptor * =ap209_multidisciplinary_analysis_and_design_mim_lf::t_csg_primitive );
    //  part 1
    SdaiCsg_primitive( const SdaiBlock_ptr&,
                       const SelectTypeDescriptor * =ap209_multidisciplinary_analysis_and_design_mim_lf::t_csg_primitive );
    SdaiCsg_primitive( const SdaiBounded_primitive_2d_ptr&,
                       const SelectTypeDescriptor * =ap209_multidisciplinary_analysis_and_design_mim_lf::t_csg_primitive );
    SdaiCsg_primitive( const SdaiCyclide_segment_solid_ptr&,
                       const SelectTypeDescriptor * =ap209_multidisciplinary_analysis_and_design_mim_lf::t_csg_primitive );
    SdaiCsg_primitive( const SdaiEccentric_cone_ptr&,
                       const SelectTypeDescriptor * =ap209_multidisciplinary_analysis_and_design_mim_lf::t_csg_primitive );
    SdaiCsg_primitive( const SdaiEllipsoid_ptr&,
                       const SelectTypeDescriptor * =ap209_multidisciplinary_analysis_and_design_mim_lf::t_csg_primitive );
    SdaiCsg_primitive( const SdaiFaceted_primitive_ptr&,
                       const SelectTypeDescriptor * =ap209_multidisciplinary_analysis_and_design_mim_lf::t_csg_primitive );
    SdaiCsg_primitive( const SdaiRectangular_pyramid_ptr&,
                       const SelectTypeDescriptor * =ap209_multidisciplinary_analysis_and_design_mim_lf::t_csg_primitive );
    SdaiCsg_primitive( const SdaiRight_angular_wedge_ptr&,
                       const SelectTypeDescriptor * =ap209_multidisciplinary_analysis_and_design_mim_lf::t_csg_primitive );
    SdaiCsg_primitive( const SdaiRight_circular_cone_ptr&,
                       const SelectTypeDescriptor * =ap209_multidisciplinary_analysis_and_design_mim_lf::t_csg_primitive );
    SdaiCsg_primitive( const SdaiRight_circular_cylinder_ptr&,
                       const SelectTypeDescriptor * =ap209_multidisciplinary_analysis_and_design_mim_lf::t_csg_primitive );
    SdaiCsg_primitive( const SdaiSphere_ptr&,
                       const SelectTypeDescriptor * =ap209_multidisciplinary_analysis_and_design_mim_lf::t_csg_primitive );
    SdaiCsg_primitive( const SdaiTorus_ptr&,
                       const SelectTypeDescriptor * =ap209_multidisciplinary_analysis_and_design_mim_lf::t_csg_primitive );
    virtual ~SdaiCsg_primitive();

    //  part 2
    operator SdaiBlock_ptr();
    operator SdaiBounded_primitive_2d_ptr();
    operator SdaiCyclide_segment_solid_ptr();
    operator SdaiEccentric_cone_ptr();
    operator SdaiEllipsoid_ptr();
    operator SdaiFaceted_primitive_ptr();
    operator SdaiRectangular_pyramid_ptr();
    operator SdaiRight_angular_wedge_ptr();
    operator SdaiRight_circular_cone_ptr();
    operator SdaiRight_circular_cylinder_ptr();
    operator SdaiSphere_ptr();
    operator SdaiTorus_ptr();

    //  part 3
        SdaiPositive_length_measure   minor_radius_() const;
        void minor_radius_( const SdaiPositive_length_measure x );

        SdaiPositive_length_measure   major_radius_() const;
        void major_radius_( const SdaiPositive_length_measure x );

        SdaiPoint_ptr_c centre_() const;
        SdaiPoint_ptr   centre_();
        void centre_( const SdaiPoint_ptr x );

        SdaiPlane_angle_measure   semi_angle_() const;
        void semi_angle_( const SdaiPlane_angle_measure x );

        SdaiLength_measure   radius_() const;
        void radius_( const SdaiLength_measure x );

        SdaiLength_measure   ltx_() const;
        void ltx_( const SdaiLength_measure x );

        SdaiPositive_length_measure   ylength_() const;
        void ylength_( const SdaiPositive_length_measure x );

        SdaiPositive_length_measure   xlength_() const;
        void xlength_( const SdaiPositive_length_measure x );

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

        SdaiPositive_length_measure   semi_axis_3_() const;
        void semi_axis_3_( const SdaiPositive_length_measure x );

        SDAI_Real   ratio_() const;
        void ratio_( const SDAI_Real x );

        SdaiLength_measure   y_offset_() const;
        void y_offset_( const SdaiLength_measure x );

        SdaiLength_measure   x_offset_() const;
        void x_offset_( const SdaiLength_measure x );

        SdaiPositive_length_measure   height_() const;
        void height_( const SdaiPositive_length_measure x );

        SdaiPositive_length_measure   semi_axis_2_() const;
        void semi_axis_2_( const SdaiPositive_length_measure x );

        SdaiPositive_length_measure   semi_axis_1_() const;
        void semi_axis_1_( const SdaiPositive_length_measure x );

        SdaiPlane_angle_measure   turn_angle_() const;
        void turn_angle_( const SdaiPlane_angle_measure x );

        SdaiPlane_angle_measure   cone_angle2_() const;
        void cone_angle2_( const SdaiPlane_angle_measure x );

        SdaiPlane_angle_measure   cone_angle1_() const;
        void cone_angle1_( const SdaiPlane_angle_measure x );

        SdaiPositive_length_measure   radius2_() const;
        void radius2_( const SdaiPositive_length_measure x );

        SdaiPositive_length_measure   radius1_() const;
        void radius1_( const SdaiPositive_length_measure x );

        SdaiPositive_length_measure   z_() const;
        void z_( const SdaiPositive_length_measure x );

        SdaiPositive_length_measure   y_() const;
        void y_( const SdaiPositive_length_measure x );

        SdaiPositive_length_measure   x_() const;
        void x_( const SdaiPositive_length_measure x );

        SdaiAxis2_placement_3d_ptr_c position_() const;
        SdaiAxis2_placement_3d_ptr   position_();
        void position_( const SdaiAxis2_placement_3d_ptr x );

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


    //  part 4
    SdaiCsg_primitive& operator =( const SdaiBlock_ptr& );
    SdaiCsg_primitive& operator =( const SdaiBounded_primitive_2d_ptr& );
    SdaiCsg_primitive& operator =( const SdaiCyclide_segment_solid_ptr& );
    SdaiCsg_primitive& operator =( const SdaiEccentric_cone_ptr& );
    SdaiCsg_primitive& operator =( const SdaiEllipsoid_ptr& );
    SdaiCsg_primitive& operator =( const SdaiFaceted_primitive_ptr& );
    SdaiCsg_primitive& operator =( const SdaiRectangular_pyramid_ptr& );
    SdaiCsg_primitive& operator =( const SdaiRight_angular_wedge_ptr& );
    SdaiCsg_primitive& operator =( const SdaiRight_circular_cone_ptr& );
    SdaiCsg_primitive& operator =( const SdaiRight_circular_cylinder_ptr& );
    SdaiCsg_primitive& operator =( const SdaiSphere_ptr& );
    SdaiCsg_primitive& operator =( const SdaiTorus_ptr& );
    // not in SDAI
    SdaiCsg_primitive& ShallowCopy ( const SdaiCsg_primitive& );

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

    //  part 5
    Logical IsBlock() const;
    Logical IsBounded_primitive_2d() const;
    Logical IsCyclide_segment_solid() const;
    Logical IsEccentric_cone() const;
    Logical IsEllipsoid() const;
    Logical IsFaceted_primitive() const;
    Logical IsRectangular_pyramid() const;
    Logical IsRight_angular_wedge() const;
    Logical IsRight_circular_cone() const;
    Logical IsRight_circular_cylinder() const;
    Logical IsSphere() const;
    Logical IsTorus() const;

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

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

inline SDAI_Select * create_SdaiCsg_primitive () { return new SdaiCsg_primitive; }
typedef SdaiCsg_primitive * SdaiCsg_primitiveH;
typedef SdaiCsg_primitive_ptr SdaiCsg_primitive_var;


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

  public:
    SdaiCsg_primitive_agg( SelectTypeDescriptor * =ap209_multidisciplinary_analysis_and_design_mim_lf::t_csg_primitive );
    ~SdaiCsg_primitive_agg();
    virtual SingleLinkNode * NewNode()
     { return new SelectNode (new SdaiCsg_primitive( sel_type )); }
};
inline STEPaggregate * create_SdaiCsg_primitive_agg () { return new SdaiCsg_primitive_agg; }
typedef SdaiCsg_primitive_agg_ptr SdaiCsg_primitive_agg_var;

/////  END SELECT TYPE csg_primitive

void init_SdaiCsg_primitive(Registry& reg);

#endif
