#ifndef __STDISOEDGE_H
#define __STDISOEDGE_H
//
//  (C) Copyright 2007-2008 by Autodesk, Inc.  All rights reserved.
//
// Permission to use, copy, modify, and distribute this software in
// object code form for any purpose and without fee is hereby granted, 
// provided that the above copyright notice appears in all copies and 
// that both that copyright notice and the limited warranty and
// restricted rights notice below appear in all supporting 
// documentation.
//
// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS. 
// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE.  AUTODESK, INC. 
// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
// UNINTERRUPTED OR ERROR FREE.
//
// Use, duplication, or disclosure by the U.S. Government is subject to 
// restrictions set forth in FAR 52.227-19 (Commercial Computer
// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
// (Rights in Technical Data and Computer Software), as applicable.
//

class STDIMP_DLLSHARE AmdtEdgeStdISO : public AmdtEdgeStd
{
public:
  ACRX_DECLARE_MEMBERS(AmdtEdgeStdISO);

  AmdtEdgeStdISO();
  virtual ~AmdtEdgeStdISO();

  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;
  virtual Adesk::Boolean   isCompatibleTo(const AcmStandard* pStd) const;

  virtual void initToEdit();
  virtual void initToEditOriginal();
  virtual Adesk::Boolean setFactoryDefaults();

  virtual Acm::ErrorStatus checkVisibility(AmdtCEdge* pData) const;
  virtual Acm::ErrorStatus initFields(AmdtCEdge* pData) const;
  virtual Acm::ErrorStatus validityFields(AmdtCEdge *pData,
    bool setBoundary = false,
    int dlgIndex = -1);

  virtual void getSubEnts(const AmdtCEdge* pSubSym,
                          AcmCAuxEntArray& subents,
                          bool corrSymbOnRightSide = false) const;
  virtual Acm::ErrorStatus setSuggested(AmdtCEdge* pData) const;

  // get the suggested list
  virtual Acm::ErrorStatus getSuggestedList(CStringList& strList)const;

protected:
  virtual void getHeights(const AmdtCEdge*, AcGeDoubleArray&) const;
  void setTextOrigin(AcmCAuxText* pText,
                     AcmCAuxEntArray& subEntsText,
                     const AcGePoint3d& basePoint,
                     const CString& str, Acm::Direction dir= Acm::kToBottom) const;
};

class STDIMP_DLLSHARE AmdtEdgeStdISO13715 : public AmdtEdgeStdISO
{
public:
  ACRX_DECLARE_MEMBERS(AmdtEdgeStdISO13715);

  AmdtEdgeStdISO13715();
  virtual ~AmdtEdgeStdISO13715();

  virtual Acm::ErrorStatus getRevision(CString& rev, Adesk::UInt16& year) const;
  virtual Adesk::Boolean setFactoryDefaults();  
  virtual void getSubEnts(const AmdtCEdge* pSymb, 
                          AcmCAuxEntArray& subents,
                          bool corrSymbOnRightSide = false) const;
  virtual Acad::ErrorStatus dwgInFields(AcDbDwgFiler* filer);

  //get standard number
  virtual void getStandardNum(CString& rev) const;
  //draw the standard number
  void drawStandardNum(const AmdtCEdge* pSymb, 
                       AcmCAuxEntArray& subents,
                       const AcGeMatrix3d& cnvMat,
                       bool corrSymbOnRightSide) const; 
};

#endif // __STDISOEDGE_H