#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 
    //   SPHERE    --  sdaiINSTANCE
    //   BLOCK    --  sdaiINSTANCE
    //   RIGHT_ANGULAR_WEDGE    --  sdaiINSTANCE
    //   TORUS    --  sdaiINSTANCE
    //   RIGHT_CIRCULAR_CONE    --  sdaiINSTANCE
    //   RIGHT_CIRCULAR_CYLINDER    --  sdaiINSTANCE
    //   PRIMITIVE_2D    --  sdaiINSTANCE
       SDAI_Application_instance_ptr _app_inst;

  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 * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_csg_primitive );
    //  part 1
    SdaiCsg_primitive( const SdaiSphere_ptr&,
                       const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_csg_primitive );
    SdaiCsg_primitive( const SdaiBlock_ptr&,
                       const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_csg_primitive );
    SdaiCsg_primitive( const SdaiRight_angular_wedge_ptr&,
                       const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_csg_primitive );
    SdaiCsg_primitive( const SdaiTorus_ptr&,
                       const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_csg_primitive );
    SdaiCsg_primitive( const SdaiRight_circular_cone_ptr&,
                       const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_csg_primitive );
    SdaiCsg_primitive( const SdaiRight_circular_cylinder_ptr&,
                       const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_csg_primitive );
    SdaiCsg_primitive( const SdaiPrimitive_2d_ptr&,
                       const SelectTypeDescriptor * =ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf::t_csg_primitive );
    virtual ~SdaiCsg_primitive();

    //  part 2
    operator SdaiSphere_ptr();
    operator SdaiBlock_ptr();
    operator SdaiRight_angular_wedge_ptr();
    operator SdaiTorus_ptr();
    operator SdaiRight_circular_cone_ptr();
    operator SdaiRight_circular_cylinder_ptr();
    operator SdaiPrimitive_2d_ptr();

    //  part 3
        SdaiPlane_angle_measure   semi_angle_() const;
        void semi_angle_( const SdaiPlane_angle_measure x );

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

        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 );

        SdaiLength_measure   ltx_() const;
        void ltx_( const SdaiLength_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 );

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

        SdaiPositive_length_measure   radius_() const;
        void radius_( const SdaiPositive_length_measure x );

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


    //  part 4
    SdaiCsg_primitive& operator =( const SdaiSphere_ptr& );
    SdaiCsg_primitive& operator =( const SdaiBlock_ptr& );
    SdaiCsg_primitive& operator =( const SdaiRight_angular_wedge_ptr& );
    SdaiCsg_primitive& operator =( const SdaiTorus_ptr& );
    SdaiCsg_primitive& operator =( const SdaiRight_circular_cone_ptr& );
    SdaiCsg_primitive& operator =( const SdaiRight_circular_cylinder_ptr& );
    SdaiCsg_primitive& operator =( const SdaiPrimitive_2d_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 IsSphere() const;
    Logical IsBlock() const;
    Logical IsRight_angular_wedge() const;
    Logical IsTorus() const;
    Logical IsRight_circular_cone() const;
    Logical IsRight_circular_cylinder() const;
    Logical IsPrimitive_2d() 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 * =ap210_electronic_assembly_interconnect_and_packaging_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
