//////////////////////////////////////////////////////////////////////////////
//
//  Copyright 2025 Autodesk, Inc.  All rights reserved.
//
//  Use of this software is subject to the terms of the Autodesk license 
//  agreement provided at the time of installation or download, or which 
//  otherwise accompanies this software in either electronic or hard copy form.   
//
//////////////////////////////////////////////////////////////////////////////
#ifndef __WELDSTD_H
#define __WELDSTD_H
/////////////////////////////////////////////////////////////////////
// standard support for of welding symboogy
/////////////////////////////////////////////////////////////////////
class TestWeldingStd : public AcmWeldingStdISO
{
public:
  ACDB_DECLARE_MEMBERS(TestWeldingStd);

  TestWeldingStd();
  virtual ~TestWeldingStd();

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

  virtual Acm::ErrorStatus cInit();
  virtual Adesk::Boolean setFactoryDefaults();

  virtual void getSubEnts(const AcmCSubWelding* pSubSym,
                          AcmCAuxEntArray& subents,
                          AcGePoint3d& ptRefEnd) const;

};                      

/////////////////////////////////////////////////////////////////////
//Empty Field weld symbol
/////////////////////////////////////////////////////////////////////
class TestFieldWeldEmpty : public AcmCWeldService
{
public:
  TestFieldWeldEmpty();
  virtual void getSubEnts(AcmCWeld* pWeld, AcmCAuxEntArray& entArray);

protected:
  virtual double symbolWidth() const;
  virtual HINSTANCE serviceResourceHandle() const;
  virtual void getBasicSymbol(AcmCWeld* pWeld,
                              double txtH,
                              double gap, 
                              Adesk::UInt16 symColor,
                              AcmCAuxEntArray& entArray);
};                      

/////////////////////////////////////////////////////////////////////
//SINGLE J GROOVE
/////////////////////////////////////////////////////////////////////
class TestJGrooveWeld : public AcmCWeldBaseService
{
public:
  TestJGrooveWeld();
  virtual void getSubEnts(AcmCWeld* pWeld, AcmCAuxEntArray& entArray);

protected:
  virtual double symbolHeight(const AcmCWeld *pWeld) const;
  virtual double symbolWidth() const;
  virtual void getBasicSymbol(AcmCWeld* pWeld,
                              double txtH,
                              double gap, 
                              Adesk::UInt16 symColor,
                              AcmCAuxEntArray& entArray);
  virtual HINSTANCE serviceResourceHandle() const;
};                      

/////////////////////////////////////////////////////////////////////
// All around symbol
/////////////////////////////////////////////////////////////////////
class TestAllAroundSquare : public AcmCWeldService
{
public:
  TestAllAroundSquare();
  virtual void getSubEnts(AcmCWeld* pWeld, AcmCAuxEntArray& entArray);
  virtual HBITMAP loadBitmap(Adesk::Boolean mask = Adesk::kFalse) const;

protected:
  virtual HINSTANCE serviceResourceHandle() const;
  virtual void getBasicSymbol(AcmCWeld* pWeld,
                              double txtH,
                              double gap, 
                              Adesk::UInt16 symColor,
                              AcmCAuxEntArray& entArray);
};                      


#endif // STD