//////////////////////////////////////////////////////////////////////////////
//
//  Copyright 2025 by Autodesk, Inc.  All rights reserved.
//
// This computer source code and related instructions and comments 
// are the unpublished confidential and proprietary information of 
// Autodesk, Inc. and are protected under applicable copyright and 
// trade secret law.  They may not be disclosed to, copied or used 
// by any third party without the prior written consent of Autodesk, Inc.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef __STDCSN_H
#define __STDCSN_H
#ifndef __STDISO_H
#error include 'stdISO.h' before including this file
#endif

///<summary>This is class AcmStandardCSN.</summary>
class STDIMP_DLLSHARE AcmStandardCSN : public AcmStandardISO
{
public:
  ACRX_DECLARE_MEMBERS(AcmStandardCSN);
  AcmStandardCSN();
  virtual ~AcmStandardCSN();
  ///<summary>Gets the original name of the standard.</summary>
  virtual LPCTSTR originalName() const;   
  ///<summary>This function initializes the internal structure of the standard.</summary>
  virtual Adesk::Boolean acmInit();      
  virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* filer) const;             
  };                      

///<summary>This is class AcmSurfTextStdCSN.</summary>
class STDIMP_DLLSHARE AcmSurfTextStdCSN : public AcmSurfTextStdISO
{
public:
  ACRX_DECLARE_MEMBERS(AcmSurfTextStdCSN);
  AcmSurfTextStdCSN();
  virtual ~AcmSurfTextStdCSN();
  ///<summary>Sets the initial status of variables.</summary>
  Acm::ErrorStatus initFields(AcmCSurfText* pData) const override;
  ///<summary>Sets the visibility status for all values in the surface texture sub-symbol.</summary>
  Acm::ErrorStatus checkVisibility(AcmCSurfText* pData) const override;
  ///<summary>Gets the information about the standard name and revision.</summary>
  Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const override;
  ///<summary>Provides the basic interface for the AcmStandardManager and hence determines whether AcmSymbolSTD
  ///can be used for a particular standard.</summary>
  Adesk::Boolean   isCompatibleTo(const AcmStandard* pStd) const override;
  ///<summary>Returns true if the symbol standard is created for a particular draft standard.</summary>
  ///<param name="pStd">The draft standard.</param>
  Adesk::Boolean   isCreatedFor(const AcmStandard* pStd) const override;
  void initToEditOriginal() const override;
  void initToEdit() const override;

  Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* filer) const override;
  ///<summary>Returns the variable of the Surface Texture symbol standard that will hold the input value at
  ///the positional index (as shown in the diagram below).</summary>
  ///<param name="dlgIndex">Positional index (See diagram). DO_IMAGE images/surface_texture_requirement.png</param>
  ///<param name="var">Variable in Surface Texture symbol standard.</param>
  ///<returns>Acad::eOk = If the variable is valid in the Surface Texture symbol standard. Acad::eInvalidInput = If
  ///the index is not valid in the Surface Texture symbol standard.</returns>
  Acad::ErrorStatus getVarFromDlgIndex(Adesk::UInt8 dlgIndex, Acm::Variable& var) const override;
  ///<summary>Returns the editability and other information of the drop-down list (Combo box) in Surface Texture 
  ///symbol standard dialog.</summary>
  ///<param name="var">Variable in Surface Texture symbol standard.</param>
  ///<param name="varDlgInfo">Information of the drop-down list.</param>
  AcmSurfTextStd::ConfigListState checkConfigListState(Acm::Variable var, CVarDlgInfo& varDlgInfo) const override;
};                      

///<summary>This is class AcmFCFStdCSN.</summary>
class STDIMP_DLLSHARE AcmFCFStdCSN : public AcmFCFStdISO
{
public:
  ACRX_DECLARE_MEMBERS(AcmFCFStdCSN);
  AcmFCFStdCSN();
  virtual ~AcmFCFStdCSN();
  ///<summary>Gets the information about the standard name and revision.</summary>
  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;
  ///<summary>Provides the basic interface for the AcmStandardManager and hence determines whether AcmSymbolSTD can
  ///be used for a particular standard.</summary>
  virtual Adesk::Boolean   isCompatibleTo(const AcmStandard* pStd) const;
  ///<summary>Returns true if the symbol standard is created for a particular draft standard.</summary>
  ///<param name="pStd">The draft standard.</param>
  virtual Adesk::Boolean   isCreatedFor(const AcmStandard* pStd) const;
  virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* filer) const;
  ///<summary>Returns the list of available material removal characteristics.</summary>
  virtual Adesk::Boolean getMat(AcmCObjArray<AcmCGDTSymbolDesc>& list) const;
  ///<summary>Returns true if this leader line will attach to the center of frame. 
  ///Otherwise, returns false.</summary>
  virtual Adesk::Boolean leaderPos() const;
  ///<summary>Creates a list of all sub-entities, which represents the symbol according the content of sub-symbol.</summary>
  ///<param name="secondLeaderPoint">If specified, this function will be filled with the second point to attach 
  ///leader to.</param>
  ///<param name="pTopBoundingLine">If specified, this function will be filled with the top line of the boundary 
  ///<param name="pBottomBoundingLine">If specified, this function will be filled with the bottom line of the boundary 
  virtual void getSubEnts(const AcmCFCF* pSymb, AcmCAuxEntArray& subents, AcGePoint3d* pSecondLeaderPnt = NULL, 
                          AcGeLineSeg3d* pTopBoundingLine = NULL, AcGeLineSeg3d* pBottomBoundingLine = NULL) const;
};                      

///<summary>This is class AcmFCFStdCSN2013.</summary>
class STDIMP_DLLSHARE AcmFCFStdCSN2013 : public AcmFCFStdCSN
{
public:
  ACRX_DECLARE_MEMBERS(AcmFCFStdCSN2013);
  AcmFCFStdCSN2013();
  virtual ~AcmFCFStdCSN2013();
  ///<summary>Gets the information about the standard name and revision.</summary>
  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;
  ///<summary>Sets the factory default values.</summary>
  virtual Adesk::Boolean setFactoryDefaults();
  ///<summary>Returns the list of available material removal characteristics.</summary>
  virtual Adesk::Boolean getMat(AcmCObjArray<AcmCGDTSymbolDesc>& list) const;
};

///<summary>This is class AcmWeldingStdCSN.</summary>
class STDIMP_DLLSHARE AcmWeldingStdCSN : public AcmWeldingStdISO
{
public:
  ACRX_DECLARE_MEMBERS(AcmWeldingStdCSN);
  AcmWeldingStdCSN();
  virtual ~AcmWeldingStdCSN();

  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;
  ///<summary>This class implementation doesn't do anything and returns eNotImplemented if it is not overloaded 
  ///in the child class.</summary>
  virtual Acm::ErrorStatus cInit();
  virtual Adesk::Boolean   isCompatibleTo(const AcmStandard* pStd) const;
  ///<summary>Returns true if the symbol standard is created for a particular draft standard.</summary>
  ///<param name="pStd">The draft standard.</param>
  virtual Adesk::Boolean   isCreatedFor(const AcmStandard* pStd) const;

  virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* filer) const;
protected:
   virtual void getSideSubEnts(AcmCWeld* pWeld,
                              AcmCWeld* pWeldS,
                              AcmCAuxEntArray& entitySet,
                              Acm::AlignmentType& align,
                              double& moveX) const;

};                      

///<summary>This is class AcmDatumStdCSN.</summary>
class STDIMP_DLLSHARE AcmDatumStdCSN : public AcmDatumStdISO
{
public:
  ACRX_DECLARE_MEMBERS(AcmDatumStdCSN);
  AcmDatumStdCSN();
  virtual ~AcmDatumStdCSN();
  ///<summary>Gets the information about the standard name and revision.</summary>
  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;
  ///<summary>Provides the basic interface for the AcmStandardManager and hence determines whether AcmSymbolSTD 
  ///can be used for a particular standard.</summary>
  virtual Adesk::Boolean   isCompatibleTo(const AcmStandard* pStd) const;
  ///<summary>Returns true if the symbol standard is created for a particular draft standard.</summary>
  ///<param name="pStd">The draft standard.</param>
  virtual Adesk::Boolean   isCreatedFor(const AcmStandard* pStd) const;
  virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* filer) const;
};                      

///<summary>This is class AcmDatumStdCSN.</summary>
class STDIMP_DLLSHARE AcmDatumStdCSN2013 : public AcmDatumStdCSN
{
public:
  ACRX_DECLARE_MEMBERS(AcmDatumStdCSN2013);
  AcmDatumStdCSN2013();
  virtual ~AcmDatumStdCSN2013();
  ///<summary>Gets the information about the standard name and revision.</summary>
  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;
  ///<summary>Sets the factory default values.</summary>
  virtual Adesk::Boolean setFactoryDefaults();
};                      

///<summary>This is class AcmIdStdCSN.</summary>
class STDIMP_DLLSHARE AcmIdStdCSN : public AcmIdStdISO
{
public:
  ACRX_DECLARE_MEMBERS(AcmIdStdCSN);
  AcmIdStdCSN();
  virtual ~AcmIdStdCSN();
///<summary>Gets the information about the standard name and revision.</summary>
  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;
  ///<summary>Provides the basic interface for the AcmStandardManager and hence determines whether AcmSymbolSTD
  ///can be used for a particular standard.</summary>
  virtual Adesk::Boolean   isCompatibleTo(const AcmStandard* pStd) const;
  ///<summary>Returns true if the symbol standard is created for a particular draft standard.</summary>
  ///<param name="pStd">The draft standard.</param>
  virtual Adesk::Boolean   isCreatedFor(const AcmStandard* pStd) const;
  virtual Acad::ErrorStatus dxfOutFields(AcDbDxfFiler* filer) const;
};

///<summary>This is class AcmIdStdCSN2013.</summary>
class STDIMP_DLLSHARE AcmIdStdCSN2013 : public AcmIdStdCSN
{
public:
  ACRX_DECLARE_MEMBERS(AcmIdStdCSN2013);
  AcmIdStdCSN2013();
  virtual ~AcmIdStdCSN2013();
  ///<summary>Gets the information about the standard name and revision.</summary>
  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;
  ///<summary>Since the Datum Id uses a different arrowheads than other symbols, this member function specifies
  ///which one.</summary>
  virtual Acm::ArrowType defaultArrowType() const;
};

///<summary>The AcmBOMStdCSN class is a derived class of the AcmBOMStd class. The usage of AcmBOMStdCSN class is
///the same as that of AcmBOMStd class.</summary>
class STDIMP_DLLSHARE AcmBOMStdCSN : public AcmBOMStdISO
{
public:
  ACRX_DECLARE_MEMBERS(AcmBOMStdCSN);
  ///<summary>the construct function.</summary>
  AcmBOMStdCSN();
  ///<summary>the destruct function.</summary>
  virtual ~AcmBOMStdCSN();
  ///<summary>This member function is implemented for the AcmSymbolStd interface. It is necessary to be able to
  ///properly edit the standard.</summary>
  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;
  ///<summary>Provides the basic interface for the AcmStandardManager and hence determines whether AcmSymbolSTD
  ///can be used for a particular standard.</summary>
  virtual Adesk::Boolean   isCompatibleTo(const AcmStandard* pStd) const;
  ///<summary>Returns true if the symbol standard is created for a particular draft standard.</summary>
  ///<param name="pStd">The draft standard.</param>
  virtual Adesk::Boolean   isCreatedFor(const AcmStandard* pStd) const;
};

#endif // STDCSN


