// 
// (C) Copyright 1993-2009 by Autodesk, Inc. 
//
// 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.
//

#ifndef __AcGiLineAttributes_H_Defined__
#define __AcGiLineAttributes_H_Defined__

#include "acdb.h"
#include "AcGiLineAttrUtils.h"

typedef enum {
	// Heidi Predefined linetypes
	kLineTypeSolid							= 0x00,
	kDashed									= 0x01,
	kDotted									= 0x02,
	kDash_Dot								= 0x03,
	kShort_Dash								= 0x04,
	kMedium_Dash							= 0x05,
	kLong_Dash								= 0x06,
	kShort_Dash_X2							= 0x07,
	kMedium_Dash_X2							= 0x08,
	kLong_Dash_X2							= 0x09,
	kMedium_Long_Dash						= 0x0A,
	kMedium_Dash_Short_Dash_Short_Dash		= 0x0B,
	kLong_Dash_Short_Dash					= 0x0C,
	kLong_Dash_Dot_Dot						= 0x0D,
	kLong_Dash_Dot							= 0x0E,
	kMedium_Dash_Dot_Short_Dash_Dot			= 0x0F,
	kSparse_Dot								= 0x10,
	kISO_Dash								= 0x11,
	kISO_Dash_Space							= 0x12,
	kISO_Long_Dash_Dot						= 0x13,
	kISO_Long_Dash_Double_Dot				= 0x14,
	kISO_Long_Dash_Triple_Dot				= 0x15,
	kISO_Dot								= 0x16,
	kISO_Long_Dash_Short_Dash				= 0x17,
	kISO_Long_Dash_Double_Short_Dash		= 0x18,
	kISO_Dash_Dot							= 0x19,
	kISO_Double_Dash_Dot					= 0x1A,
	kISO_Dash_Double_Dot					= 0x1B,
	kISO_Double_Dash_Double_Dot				= 0x1C,
	kISO_Dash_Triple_Dot					= 0x1D,
	kISO_Double_Dash_Triple_Dot				= 0x1E,
    kLineTypeNone                           = 0x1F,
    kSolid_6_Pixels_Blank_6_Pixels          = 0x20
}AcGiLineType;

typedef enum {
	kMiterJoin								= 0x00,
	kBevelJoin								= 0x01,
	kRoundJoin								= 0x02,
	kDiamondJoin							= 0x03,
} AcGiLineJoinStyle;

typedef enum {
	kButtCap								= 0x00,
	kSquareCap								= 0x01,                          
	kRoundCap								= 0x02,                           
	kDiamondCap								= 0x03,
} AcGiLineEndStyle;

typedef enum {
	kFillStyleSolid							= 0x00,
	kCheckerboard							= 0x01,    
	kCrosshatch								= 0x02,      
	kDiamonds								= 0x03,        
	kHorizontal_Bars						= 0x04, 
	kSlant_Left								= 0x05,      
	kSlant_Right							= 0x06,     
	kSquare_Dots							= 0x07,
	kVertical_Bars							= 0x08,   
	kUser_Defined							= 0x09
}AcGiLineFillStyle;


class ADESK_NO_VTABLE AcGiLineAttributes
{
public:

	// ctor/dtor/init
    virtual ~AcGiLineAttributes() { }
	
		// access methods
	virtual AcDb::LineWeight	getLineweight	() const						= 0;
	virtual void setLineweight					(AcDb::LineWeight lweight)		= 0;

	virtual AcGiLineJoinStyle	getJoinstyle	() const						= 0;
	virtual void setJoinstyle					(AcGiLineJoinStyle joinstyle)	= 0;
	
	virtual AcGiLineEndStyle	getEndstyle		() const						= 0;
	virtual void setEndstyle					(AcGiLineEndStyle endstyle)		= 0;

	virtual AcGiLineType		getLinetype		() const						= 0;
	virtual void setLinetype					(AcGiLineType linetype)			= 0;
	
	virtual AcGiLineFillStyle	getFillstyle	() const						= 0;
	virtual void setFillstyle					(AcGiLineFillStyle fillstyle)	= 0;

	// Flags

	virtual bool isLinetypeAdaptive				() const						= 0;
	virtual void setLinetypeAdaptive			(bool isAdaptive)				= 0;

	virtual bool isLineWeightByLayer			() const						= 0;
	virtual void setLineWeightByLayer			(bool isLineweightByLayer)		= 0;

	virtual bool hasCustomLineweight			() const						= 0;
	virtual void setCustomLineweight			(bool isCustomLineweight)		= 0;

    virtual bool isLineweightDefault            () const                        = 0;
    virtual void setLineweightDefault           ()                              = 0;

    // Cloning
    virtual AcGiLineAttributes* clone           () const                        = 0;

};	// class AcGiLineAttributes

#endif // __AcGiLineAttributes_H_Defined__