//========================================================================
// Copyright 1999-2005 @Last Software
//========================================================================

// NOTE: This file is automatically generated from SketchUp_i.h

#ifndef SKETCHUP_INTERFACES_DEFINED
#define SKETCHUP_INTERFACES_DEFINED

#ifdef _WINDOWS
#include "SketchUp_i.h"
#else


/**
* @enum SkpLengthFormatType
* @brief This enum tells what kind of length formatting is being used
*/
typedef enum tagSkpLengthFormatType
{
    /**
     * Standard Decimal formatting
     * 
     * @par Example:
     * 3.5' 
     */
    Decimal         = 1,
    /**
     * Architectural formatting
     *
     * @par Example:
     * 3' 6 1/2"
     */
    Architectural   = 2,
    /**
     * Engineering formatting
     *
     * @par Example:
     * 5.123213'
     */
    Engineering     = 3,
    /**
     * Fractional formatting
     *
     * @par Example:
     * 5 11/16
     */
    Fractional      = 4
} SkpLengthFormatType;

/**
 * @enum SkpLengthUnitType
 * @brief This enum tells what kind of length units are being used
 */
typedef enum tagSkpLengthUnitType
{   
    /**
     * Inches units
     */
    Inches          = 1,
    /**
     * Feet units
     */
    Feet            = 2,
    /**
     * Millimeters units
     */
    Millimeter      = 3,
    /**
     * Centimeters units
     */
    Centimeter      = 4,
    /**
     * Meters units
     */
    Meter           = 5
} SkpLengthUnitType;

/**
 * This enum tells how dimension text should be positioned.
 */
typedef enum tagSkpDimensionTextPosition
{
    /**
     * Position the text above the line.
     */
    DimensionTextAbove      = 1,
    /**
     * Center the text
     */
    DimensionTextCenter     = 2,
    /**
     * Position the text below.
     */
    // DimensionTextBelow      = 3,
    /** 
     * Position the text outside the dimension as compared to the measure line
     */
    DimensionTextOutside    = 4,
    /**
     * Position the text inside 
     */
    // DimensionTextInside     = 5
} SkpDimensionTextPosition;

/**
 * This enum tells what kind of dimension arrow to use.
 */
typedef enum tagSkpDimensionArrow
{
    /**
     * Don't use an arrow
     */
    DimensionArrowNone     = 1,
    /**
     * Use a slash for an arrow.
     */
    DimensionArrowSlash    = 2,
    /**
     * Use a dot for an arrow.
     */
    DimensionArrowDot      = 3,
    /** 
     * Use a closed arrow.
     */
    DimensionArrowClosed   = 4,
    /** 
     * Use an open arrow.
     */
    DimensionArrowOpen     = 5
} SkpDimensionArrow;

/**
 * This enum tells what kind of radial dimension is being
 * used. One that measures the radius or the diameter.
 */
typedef enum tagSkpRadialDimensionType
{
    /**
     * The dimension is of the radius.
     */
    Radius   = 1,
    /**
     * The dimension is of the diameter.
     */
    Diameter = 2
} SkpRadialDimensionType;

/**
 * This enum describes the type of linear dimension.
 */
typedef enum tagSkpLinearDimensionType
{
    /**
     * A dimension aligned with the dimension line.
     */
    LinearAligned       = 1,
    /**
     * A horizontal dimension. 
     */ 
    LinearHorizontal    = 2,
    /**
     * A vertical dimension.
     */
    LinearVertical      = 3
} SkpLinearDimensionType;

/** 
 * @enum SkpTextJustification
 * @brief The ways in which text can be justified within a dimension.
 */
typedef enum tagSkpTextJustification
{
    /** Bottom Left justification */
    TextJustBottomLeft      = 1,
    /** Bottom Center justification */
    TextJustBottomCenter    = 2,
    /** Bottom Right justification */
    TextJustBottomRight     = 3,

    /** Middle Left justification */
    TextJustMiddleLeft      = 4,
    /** Middle Center justification */
    TextJustMiddleCenter    = 5,
    /** Middle Right justification */
    TextJustMiddleRight     = 6,

    /** Top Left justification */
    TextJustTopLeft         = 7,
     /** Top Center justification */
   TextJustTopCenter       = 8,
    /** Top Right justification */
    TextJustTopRight        = 9,

    // Following two are the mid point of the top
    // line of text on the left/right side.  This
    // is now the standard leader justification method.

    /** Mid point of the top line of text on the left side justification. */
    TextJustTopLineMiddleLeft  = 10,
    /** Mid point of the top line of text on the right side justification. */
    TextJustTopLineMiddleRight = 11
} SkpTextJustification;

/**
 * This enum describes the font types
 */
typedef enum tagSkpFontType
{
    /** A bitmap font. */
    BitmapFont     = 1,
    /** A pixmap font. */
    PixmapFont     = 2,
    /** A polygon font. */
    PolygonFont    = 3,
    /** A texture font. */
    TextureFont    = 4,
    /** A outline font. */
    OutlineFont    = 5,
    /** A extruded font. */
    ExtrudedFont   = 6,
    /** A image font. */
    ImageFont      = 7
} SkpFontType;


/** 
 * This enum describes the text alignment options.
 */
typedef enum tagSkpTextAlignment
{
    /** Align left. */
    TextAlignLeft   = 1,
    /** Align center. */
    TextAlignCenter = 2,
    /** Align right. */
    TextAlignRight  = 3
} SkpTextAlignment;

/**
 * This enum describes the text leader types.
 */
typedef enum tagSkpTextLeader
{
    ALeaderNone  = 1,      /**< No leader, text is positioned on the screen. */
    ALeaderView  = 2,      /**< Leader using view positioning. */
    ALeaderModel = 3       /**< Leader using model positioning. */
} SkpTextLeader;

/**
 * This enum describes the polygon mesh types.
 */
typedef enum tagSkpMeshType
{
    /** Just the x,y,z points of the mesh */
    PolygonMeshPoints      = 0,
    /** Compute the UVQ points for the front face.*/
    PolygonMeshUVQFront    = 1,
    /** Compute the UVQ points for the back face.*/
    PolygonMeshUVQBack     = 2,
    /** Compute the mesh normals at each vertex. */
    PolygonMeshNormals     = 4
} SkpMeshType;

// This enum tells what kind of relationships to get
typedef enum tagGetRelType
{
    GetRelLeft = 1,
    GetRelRight = 2,
    GetRelAll = 3
} GetRelType;

typedef enum tagComponentDefinitionType
{
    Normal = 1,
    Group = 2,
    Image = 3
} ComponentDefinitionType;

typedef enum StatisticsType
{
    statEdge = 0,
    statFace = 1,
    statComponentInstance = 2,
    statConstructionLine = 3,
    statConstructionPoint = 4,
    statGroup = 5,
    statImage = 6,
    statCurve = 7,
    statSection = 8,
    statDimension = 9,
    _statText = 10, // Note - underscore to workaround duplicate symbol with one in Dialog.h
    statComponentDefinition = 11,
} StatisticsType;

//========================================================================
typedef struct ISkpRenderer ISkpRenderer;
typedef struct ISkpHLRView ISkpHLRView;
typedef struct ISkpCoordinateSystem ISkpCoordinateSystem;
typedef struct ISkpPoint3d ISkpPoint3d;
typedef struct ISkpVector3d ISkpVector3d;
typedef struct ISkpVertex ISkpVertex;
typedef struct ISkpNamedValue ISkpNamedValue;
typedef struct ISkpNamedValues ISkpNamedValues;
typedef struct ISkpNamedValuesM ISkpNamedValuesM;
typedef struct ISkpPlane ISkpPlane;
typedef struct ISkpApplication ISkpApplication;
typedef struct ISkpFileReader ISkpFileReader;
typedef struct ISkpFileWriter ISkpFileWriter;
typedef struct ISkpViewProvider ISkpViewProvider;
typedef struct ISkpEntityProvider ISkpEntityProvider;
typedef struct ISkpDocument ISkpDocument;
typedef struct ISkpThumbnailProvider ISkpThumbnailProvider;
typedef struct ISkpHLRGeneration ISkpHLRGeneration;
typedef struct ISkpHLRWriter ISkpHLRWriter;
typedef struct ISkpView ISkpView;
typedef struct ISkpDimensions ISkpDimensions;
typedef struct ISkpDimension ISkpDimension;
typedef struct ISkpDimensionLinear ISkpDimensionLinear;
typedef struct ISkpDimensionRadial ISkpDimensionRadial;
typedef struct ISkpDimensionStyle ISkpDimensionStyle;
typedef struct ISkpFont ISkpFont;
typedef struct ISkpFonts ISkpFonts;
typedef struct ISkpText ISkpText;
typedef struct ISkpTexts ISkpTexts;
typedef struct ISkpOptionsManager ISkpOptionsManager;
typedef struct ISkpOptionsProvider ISkpOptionsProvider;
typedef struct ISkpAttributes ISkpAttributes;
typedef struct ISkpAttribute ISkpAttribute;
typedef struct ISkpFaceTextureCoordsAttribute ISkpFaceTextureCoordsAttribute;
typedef struct ISkpAttributeDictionary ISkpAttributeDictionary;
typedef struct ISkpCurve ISkpCurve;
typedef struct ISkpArcCurve ISkpArcCurve;
typedef struct ISkpLineCurve ISkpLineCurve;
typedef struct ISkpBoundingBox3d ISkpBoundingBox3d;
typedef struct ISkpEntities ISkpEntities;
typedef struct ISkpEdges ISkpEdges;
typedef struct ISkpEdge ISkpEdge;
typedef struct ISkpEntity ISkpEntity;
typedef struct ISkpAttributeProvider ISkpAttributeProvider;
typedef struct ISkpDrawingElement ISkpDrawingElement;
typedef struct ISkpPolygonMesh ISkpPolygonMesh;
typedef struct ISkpFace ISkpFace;
typedef struct ISkpFaces ISkpFaces;
typedef struct ISkpCorrectPerspective ISkpCorrectPerspective;
typedef struct ISkpUVHelper ISkpUVHelper;
typedef struct ISkpTextureWriter ISkpTextureWriter;
typedef struct ISkpTextureWriter2 ISkpTextureWriter2;
typedef struct ISkpVertices ISkpVertices;
typedef struct ISkpLayer ISkpLayer;
typedef struct ISkpLayers ISkpLayers;
typedef struct ISkpMaterial ISkpMaterial;
typedef struct ISkpMaterials ISkpMaterials;
typedef struct ISkpTexture ISkpTexture;
typedef struct ISkpTextures ISkpTextures;
typedef struct ISkpTransform ISkpTransform;
typedef struct ISkpComponentDefinition ISkpComponentDefinition;
typedef struct ISkpComponentDefinitions ISkpComponentDefinitions;
typedef struct ISkpComponentInstance ISkpComponentInstance;
typedef struct ISkpComponentInstances ISkpComponentInstances;
typedef struct ISkpEdgeUse ISkpEdgeUse;
typedef struct ISkpEdgeUses ISkpEdgeUses;
typedef struct ISkpLoop ISkpLoop;
typedef struct ISkpLoops ISkpLoops;
typedef struct ISkpPolyline3d ISkpPolyline3d;
typedef struct ISkpPolyline3ds ISkpPolyline3ds;
typedef struct ISkpConstructionLine ISkpConstructionLine;
typedef struct ISkpConstructionLines ISkpConstructionLines;
typedef struct ISkpConstructionPoint ISkpConstructionPoint;
typedef struct ISkpConstructionPoints ISkpConstructionPoints;
typedef struct ISkpGroup ISkpGroup;
typedef struct ISkpGroups ISkpGroups;
typedef struct ISkpImage ISkpImage;
typedef struct ISkpImages ISkpImages;
typedef struct ISkpCamera ISkpCamera;
typedef struct ISkpCameraM ISkpCameraM;
typedef struct ISkpPage ISkpPage;
typedef struct ISkpPageM ISkpPageM;
typedef struct ISkpPages ISkpPages;
typedef struct ISkpPagesM ISkpPagesM;
typedef struct ISkpEntityTransformPair ISkpEntityTransformPair;
typedef struct ISkpEntityTransformPairs ISkpEntityTransformPairs;
typedef struct ISkpOpening ISkpOpening;
typedef struct ISkpOpenings ISkpOpenings;
typedef struct ISkpSelectionSet ISkpSelectionSet;
typedef struct ISkpSectionPlane ISkpSectionPlane;
typedef struct ISkpSectionPlanes ISkpSectionPlanes;
typedef struct ISkpEntityProviderStatistics ISkpEntityProviderStatistics;
typedef struct ISkpStyleManager ISkpStyleManager;
typedef struct ISkpStyleManagerM ISkpStyleManagerM;
typedef struct ISkpStyle ISkpStyle;
typedef struct ISkpStyleM ISkpStyleM;
typedef struct ISkpStyles ISkpStyles;
typedef struct ISkpPoint3d ISkpPoint3d;
typedef struct ISkpVector3d ISkpVector3d;
typedef struct ISkpApplication ISkpApplication;
typedef struct ISkpViewProvider ISkpViewProvider;
typedef struct ISkpDocument ISkpDocument;
typedef struct ISkpPlane ISkpPlane;
typedef struct ISkpView ISkpView;
typedef struct ISkpSelectionSet ISkpSelectionSet;
typedef struct ISkpHLRWriter ISkpHLRWriter;
typedef struct ISkpHLRGeneration ISkpHLRGeneration;
typedef struct ISkpOptionsManager ISkpOptionsManager;
typedef struct ISkpOptionsProvider ISkpOptionsProvider;
typedef struct ISkpAttributes ISkpAttributes;
typedef struct ISkpAttribute ISkpAttribute;
typedef struct ISkpFaceTextureCoordsAttribute ISkpFaceTextureCoordsAttribute;
typedef struct ISkpAttributeDictionary ISkpAttributeDictionary;
typedef struct ISkpCurve ISkpCurve;
typedef struct ISkpArcCurve ISkpArcCurve;
typedef struct ISkpLineCurve ISkpLineCurve;
typedef struct ISkpBoundingBox3d ISkpBoundingBox3d;
typedef struct ISkpDrawingElement ISkpDrawingElement;
typedef struct ISkpNamedValue ISkpNamedValue;
typedef struct ISkpNamedValues ISkpNamedValues;
typedef struct ISkpPolygonMesh ISkpPolygonMesh;
typedef struct ISkpTextureWriter ISkpTextureWriter;
typedef struct ISkpEntity ISkpEntity;
typedef struct ISkpEntities ISkpEntities;
typedef struct ISkpEntityTransformPairs ISkpEntityTransformPairs;
typedef struct ISkpEdge ISkpEdge;
typedef struct ISkpEdges ISkpEdges;
typedef struct ISkpVertex ISkpVertex;
typedef struct ISkpVertices ISkpVertices;
typedef struct ISkpLayer ISkpLayer;
typedef struct ISkpLayers ISkpLayers;
typedef struct ISkpMaterial ISkpMaterial;
typedef struct ISkpMaterials ISkpMaterials;
typedef struct ISkpTexture ISkpTexture;
typedef struct ISkpTextures ISkpTextures;
typedef struct ISkpFace ISkpFace;
typedef struct ISkpFaces ISkpFaces;
typedef struct ISkpFont ISkpFont;
typedef struct ISkpFonts ISkpFonts;
typedef struct ISkpText ISkpText;
typedef struct ISkpTexts ISkpTexts;
typedef struct ISkpSectionPlane ISkpSectionPlane;
typedef struct ISkpSectionPlanes ISkpSectionPlanes;
typedef struct ISkpDimension ISkpDimension;
typedef struct ISkpDimensionLinear ISkpDimensionLinear;
typedef struct ISkpDimensionRadial ISkpDimensionRadial;
typedef struct ISkpDimensionStyle ISkpDimensionStyle;
typedef struct ISkpDimensions ISkpDimensions;
typedef struct ISkpTransform ISkpTransform;
typedef struct ISkpCamera ISkpCamera;
typedef struct ISkpPage ISkpPage;
typedef struct ISkpPages ISkpPages;
typedef struct ISkpComponentDefinition ISkpComponentDefinition;
typedef struct ISkpComponentDefinitions ISkpComponentDefinitions;
typedef struct ISkpComponentInstance ISkpComponentInstance;
typedef struct ISkpComponentInstances ISkpComponentInstances;
typedef struct ISkpEdgeUse ISkpEdgeUse;
typedef struct ISkpEdgeUses ISkpEdgeUses;
typedef struct ISkpLoop ISkpLoop;
typedef struct ISkpLoops ISkpLoops;
typedef struct ISkpGroup ISkpGroup;
typedef struct ISkpGroups ISkpGroups;
typedef struct ISkpConstructionLine ISkpConstructionLine;
typedef struct ISkpConstructionLines ISkpConstructionLines;
typedef struct ISkpConstructionPoint ISkpConstructionPoint;
typedef struct ISkpConstructionPoints ISkpConstructionPoints;
typedef struct ISkpPolyline3d ISkpPolyline3d;
typedef struct ISkpPolyline3ds ISkpPolyline3ds;
typedef struct ISkpImage ISkpImage;
typedef struct ISkpImages ISkpImages;
typedef struct ISkpOpening ISkpOpening;
typedef struct ISkpOpenings ISkpOpenings;
typedef struct ISkpEntityProvider ISkpEntityProvider;
typedef struct ISkpCorrectPerspective ISkpCorrectPerspective;
typedef struct ISkpUVHelper ISkpUVHelper;
typedef struct ISkpFileReader ISkpFileReader;
typedef struct ISkpCoordinateSystem ISkpCoordinateSystem;
typedef struct ISkpRenderer ISkpRenderer;
typedef struct ISkpStyleManager ISkpStyleManager;
typedef struct ISkpStyleManagerM ISkpStyleManagerM;
typedef struct ISkpStyle ISkpStyle;
typedef struct ISkpStyleM ISkpStyleM;
typedef struct ISkpStyles ISkpStyles;
typedef struct ISkpHLRView ISkpHLRView;
typedef struct ISkpCameraM ISkpCameraM;
typedef struct ISkpNamedValuesM ISkpNamedValuesM;
#define MUST_DEFINE_SKETCHUP_ERROR_CODES 1
#ifdef MUST_DEFINE_SKETCHUP_ERROR_CODES
#ifndef MAKE_HRESULT
#define MAKE_HRESULT(sev,fac,code) ((HRESULT)(((unsigned long)(sev)<<31)|((unsigned long)(fac)<<16)|((unsigned long)(code))))
#endif
#ifndef FACILITY_ITF
#define FACILITY_ITF 4
#endif
#define E_SKP_SKETCHUP_MODEL_MORE_RECENT      MAKE_HRESULT(1, FACILITY_ITF, 1)
#define E_SKP_SKETCHUP_MODEL_INVALID          MAKE_HRESULT(1, FACILITY_ITF, 2)
#define E_SKP_FILE_NOT_FOUND                  MAKE_HRESULT(1, FACILITY_ITF, 3)
#define E_SKP_FILE_SERIALIZATION_ERROR        MAKE_HRESULT(1, FACILITY_ITF, 4)
#define E_SKP_IMAGE_FILE_FORMAT_NOT_SUPPORTED MAKE_HRESULT(1, FACILITY_ITF, 5)
#endif // MUST_DEFINE_SKETCHUP_ERROR_CODES

//----------------------------------------------------
extern const IID IID_ISkpRenderer;

struct ISkpRenderer : public IUnknown
{
public:
    virtual HRESULT GetPage( 
        /* [out] */ ISkpPage **ppPage) = 0;
    
    virtual HRESULT RenderToBitmap( 
        /* [in] */ unsigned long width,
        /* [in] */ unsigned long height,
        /* [in] */ unsigned long bytesPerPixel,
        /* [in] */ unsigned long bytesPerRow,
        /* [in] */ unsigned long backgroundMode,
        /* [in] */ unsigned long format,
        /* [in] */ unsigned long type,
        /* [in] */ BOOL topToBottom,
        /* [in] */ BOOL nprSpeedMatters,
        /* [in] */ float outputDPI,
        /* [in] */ float linewidth,
        /* [out][in] */ unsigned char *bitmapBytes) = 0;
    
    virtual HRESULT _GuessTarget( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT SetTileSize( 
        /* [in] */ int width,
        /* [in] */ int height) = 0;
    
    virtual HRESULT get_View( 
        /* [out] */ ISkpView **ppView) = 0;
    
    virtual HRESULT RenderToFile( 
        /* [in] */ unsigned long width,
        /* [in] */ unsigned long height,
        /* [in] */ unsigned long bytesPerPixel,
        /* [in] */ unsigned long bytesPerRow,
        /* [in] */ unsigned long backgroundMode,
        /* [in] */ unsigned long format,
        /* [in] */ unsigned long type,
        /* [in] */ BOOL topToBottom,
        /* [in] */ BOOL nprSpeedMatters,
        /* [in] */ float outputDPI,
        /* [in] */ float linewidth,
        /* [in] */ BSTR filename) = 0;
    
    virtual ~ISkpRenderer() {}
};

//----------------------------------------------------
extern const IID IID_ISkpHLRView;

struct ISkpHLRView : public IUnknown
{
public:
    virtual HRESULT GetPage( 
        /* [out] */ ISkpPage **ppPage) = 0;
    
    virtual HRESULT get_View( 
        /* [out] */ ISkpView **ppView) = 0;
    
    virtual HRESULT InitializeView( 
        /* [in] */ unsigned long width,
        /* [in] */ unsigned long height,
        /* [in] */ float outputDPI,
        /* [in] */ float linewidth) = 0;
    
    virtual HRESULT _GuessTarget( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual ~ISkpHLRView() {}
};

//----------------------------------------------------
extern const IID IID_ISkpCoordinateSystem;

struct ISkpCoordinateSystem : public IUnknown
{
public:
    virtual HRESULT get_Origin( 
        /* [out] */ ISkpPoint3d **ppOrigin) = 0;
    
    virtual HRESULT _GetOrigin( 
        /* [out] */ double origin[ 3 ]) = 0;
    
    virtual HRESULT get_XAxis( 
        /* [out] */ ISkpVector3d **ppXAxis) = 0;
    
    virtual HRESULT _GetXAxis( 
        /* [out] */ double XAxis[ 3 ]) = 0;
    
    virtual HRESULT get_YAxis( 
        /* [out] */ ISkpVector3d **ppYAxis) = 0;
    
    virtual HRESULT _GetYAxis( 
        /* [out] */ double YAxis[ 3 ]) = 0;
    
    virtual HRESULT get_ZAxis( 
        /* [out] */ ISkpVector3d **ppZAxis) = 0;
    
    virtual HRESULT _GetZAxis( 
        /* [out] */ double ZAxis[ 3 ]) = 0;
    
    virtual HRESULT get_Plane( 
        /* [out] */ ISkpPlane **ppPlane) = 0;
    
    virtual ~ISkpCoordinateSystem() {}
};

//----------------------------------------------------
extern const IID IID_ISkpPoint3d;

struct ISkpPoint3d : public IUnknown
{
public:
    virtual HRESULT Get( 
        /* [out] */ double *x,
        /* [out] */ double *y,
        /* [out] */ double *z) = 0;
    
    virtual HRESULT get_X( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_Y( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_Z( 
        /* [out] */ double *pVal) = 0;
    
    virtual ~ISkpPoint3d() {}
};

//----------------------------------------------------
extern const IID IID_ISkpVector3d;

struct ISkpVector3d : public IUnknown
{
public:
    virtual HRESULT Get( 
        /* [out] */ double *x,
        /* [out] */ double *y,
        /* [out] */ double *z) = 0;
    
    virtual HRESULT get_X( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_Y( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_Z( 
        /* [out] */ double *pVal) = 0;
    
    virtual ~ISkpVector3d() {}
};

//----------------------------------------------------
extern const IID IID_ISkpVertex;

struct ISkpVertex : public IUnknown
{
public:
    virtual HRESULT _GetPosition( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT get_Position( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT put_Position( 
        /* [in] */ ISkpPoint3d *pPoint3d) = 0;
    
    virtual HRESULT get_Edges( 
        /* [out] */ ISkpEdges **pVal) = 0;
    
    virtual HRESULT get_Faces( 
        /* [out] */ ISkpFaces **pVal) = 0;
    
    virtual HRESULT get_Loops( 
        /* [out] */ ISkpLoops **pVal) = 0;
    
    virtual ~ISkpVertex() {}
};

//----------------------------------------------------
extern const IID IID_ISkpNamedValue;

struct ISkpNamedValue : public IUnknown
{
public:
    virtual HRESULT get_Name( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_Value( 
        /* [out] */ VARIANT *pVal) = 0;
    
    virtual ~ISkpNamedValue() {}
};

//----------------------------------------------------
extern const IID IID_ISkpNamedValues;

struct ISkpNamedValues : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long nIndex,
        /* [out] */ ISkpNamedValue **pVal) = 0;
    
    virtual HRESULT get_Value( 
        /* [in] */ BSTR valueName,
        /* [out] */ VARIANT *pVal) = 0;
    
    virtual ~ISkpNamedValues() {}
};

//----------------------------------------------------
extern const IID IID_ISkpNamedValuesM;

struct ISkpNamedValuesM : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long nIndex,
        /* [out] */ ISkpNamedValue **pVal) = 0;
    
    virtual HRESULT get_Value( 
        /* [in] */ BSTR valueName,
        /* [out] */ VARIANT *pVal) = 0;
    
    virtual HRESULT Set( 
        /* [in] */ BSTR valueName,
        /* [in] */ VARIANT value) = 0;
    
    virtual ~ISkpNamedValuesM() {}
};

//----------------------------------------------------
extern const IID IID_ISkpPlane;

struct ISkpPlane : public IUnknown
{
public:
    virtual HRESULT _GetPosition( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT get_Position( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT _GetNormal( 
        /* [out] */ double pVector3d[ 3 ]) = 0;
    
    virtual HRESULT get_Normal( 
        /* [out] */ ISkpVector3d **pVector3d) = 0;
    
    virtual HRESULT Get( 
        /* [out] */ double *a,
        /* [out] */ double *b,
        /* [out] */ double *c,
        /* [out] */ double *d) = 0;
    
    virtual ~ISkpPlane() {}
};

//----------------------------------------------------
extern const IID IID_ISkpApplication;

struct ISkpApplication : public IUnknown
{
public:
    virtual HRESULT get_Name( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_Fullname( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_Version( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_ActiveDocument( 
        /* [out] */ ISkpDocument **pVal) = 0;
    
    virtual HRESULT put_StatusText( 
        /* [in] */ BSTR str) = 0;
    
    virtual HRESULT get_TypeName( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT CreateTextureWriter( 
        /* [out] */ ISkpTextureWriter **pWriter) = 0;
    
    virtual ~ISkpApplication() {}
};

//----------------------------------------------------
extern const IID IID_ISkpFileReader;

struct ISkpFileReader : public IUnknown
{
public:
    virtual HRESULT OpenFile( 
        /* [in] */ BSTR filePath,
        /* [out] */ ISkpDocument **ppDoc) = 0;
    
    virtual HRESULT OpenFromStream( 
        /* [in] */ IStream *pStream,
        /* [out] */ ISkpDocument **ppDoc) = 0;
    
    virtual HRESULT OpenFromClipboard( 
        /* [out] */ ISkpDocument **ppDoc) = 0;
    
    virtual ~ISkpFileReader() {}
};

//----------------------------------------------------
extern const IID IID_ISkpFileWriter;

struct ISkpFileWriter : public IUnknown
{
public:
    virtual HRESULT SaveToFile( 
        /* [in] */ BSTR filePath) = 0;
    
    virtual HRESULT SaveToStream( 
        /* [in] */ IStream *pStream) = 0;
    
    virtual HRESULT SetSaveVersion( 
        /* [in] */ long version) = 0;
    
    virtual ~ISkpFileWriter() {}
};

//----------------------------------------------------
extern const IID IID_ISkpViewProvider;

struct ISkpViewProvider : public IUnknown
{
public:
    virtual HRESULT get_CurrentView( 
        /* [out] */ ISkpView **ppView) = 0;
    
    virtual ~ISkpViewProvider() {}
};

//----------------------------------------------------
extern const IID IID_ISkpEntityProvider;

struct ISkpEntityProvider : public IUnknown
{
public:
    virtual HRESULT get_Edges( 
        /* [out] */ ISkpEdges **pEdges) = 0;
    
    virtual HRESULT get_EdgeUses( 
        /* [out] */ ISkpEdgeUses **pEdgeUses) = 0;
    
    virtual HRESULT get_Faces( 
        /* [out] */ ISkpFaces **pFaces) = 0;
    
    virtual HRESULT get_Vertices( 
        /* [out] */ ISkpVertices **pVertices) = 0;
    
    virtual HRESULT get_Polyline3ds( 
        /* [out] */ ISkpPolyline3ds **pPolylines) = 0;
    
    virtual HRESULT get_Loops( 
        /* [out] */ ISkpLoops **pLoops) = 0;
    
    virtual HRESULT get_Images( 
        /* [out] */ ISkpImages **pImages) = 0;
    
    virtual HRESULT get_Texts( 
        /* [out] */ ISkpTexts **pTexts) = 0;
    
    virtual HRESULT get_Groups( 
        /* [out] */ ISkpGroups **pGroups) = 0;
    
    virtual HRESULT get_ConstructionLines( 
        /* [out] */ ISkpConstructionLines **pConstructionLines) = 0;
    
    virtual HRESULT get_ConstructionPoints( 
        /* [out] */ ISkpConstructionPoints **pConstructionPoints) = 0;
    
    virtual HRESULT get_Dimensions( 
        /* [out] */ ISkpDimensions **pDimensions) = 0;
    
    virtual HRESULT get_ComponentInstances( 
        /* [out] */ ISkpComponentInstances **pInstances) = 0;
    
    virtual HRESULT get_Entities( 
        /* [out] */ ISkpEntities **pVal) = 0;
    
    virtual HRESULT get_SectionPlanes( 
        /* [out] */ ISkpSectionPlanes **pVal) = 0;
    
    virtual HRESULT HasSectionCuts( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT GetStatistics( 
        /* [out] */ ISkpEntityProviderStatistics **ppStats) = 0;
    
    virtual ~ISkpEntityProvider() {}
};

//----------------------------------------------------
extern const IID IID_ISkpDocument;

struct ISkpDocument : public IUnknown
{
public:
    virtual HRESULT get_Application( 
        /* [out] */ ISkpApplication **pVal) = 0;
    
    virtual HRESULT get_ModelExtents( 
        /* [out] */ ISkpBoundingBox3d **pVal) = 0;
    
    virtual HRESULT get_Fonts( 
        /* [out] */ ISkpFonts **pVal) = 0;
    
    virtual HRESULT get_Materials( 
        /* [out] */ ISkpMaterials **pVal) = 0;
    
    virtual HRESULT get_Layers( 
        /* [out] */ ISkpLayers **pLayers) = 0;
    
    virtual HRESULT get_OptionsManager( 
        /* [out] */ ISkpOptionsManager **pVal) = 0;
    
    virtual HRESULT get_ComponentDefinitions( 
        /* [out] */ ISkpComponentDefinitions **pDefinitions) = 0;
    
    virtual HRESULT get_CurrentCamera( 
        /* [out] */ ISkpCamera **pVal) = 0;
    
    virtual HRESULT get_Pages( 
        /* [out] */ ISkpPages **pVal) = 0;
    
    virtual HRESULT get_SelectionSet( 
        /* [out] */ ISkpSelectionSet **pVal) = 0;
    
    virtual HRESULT get_Description( 
        /* [out] */ BSTR *pDesc) = 0;
    
    virtual HRESULT get_Renderer( 
        /* [out] */ ISkpRenderer **pVal) = 0;
    
    virtual HRESULT get_ShadowOptions( 
        /* [out] */ ISkpOptionsProvider **ppShadowOptions) = 0;
    
    virtual HRESULT get_StyleManager( 
        /* [out] */ ISkpStyleManager **pVal) = 0;
    
    virtual HRESULT get_ModelExtentsLLA( 
        /* [out] */ ISkpBoundingBox3d **pVal) = 0;
    
    virtual HRESULT get_HLRView( 
        /* [out] */ ISkpHLRView **pVal) = 0;
    
    virtual HRESULT get_CurrentCameraM( 
        /* [out] */ ISkpCameraM **pVal) = 0;
    
    virtual ~ISkpDocument() {}
};

//----------------------------------------------------
extern const IID IID_ISkpThumbnailProvider;

struct ISkpThumbnailProvider : public IUnknown
{
public:
    virtual HRESULT GetThumbnailSize( 
        /* [out] */ long *nWidth,
        /* [out] */ long *nHeight) = 0;
    
    virtual HRESULT GetThumbnail( 
        /* [in] */ long nWidth,
        /* [in] */ long nHeight,
        /* [size_is][out] */ BYTE pBytes[  ]) = 0;
    
    virtual HRESULT SaveThumbnail( 
        /* [in] */ BSTR bstrFilePath) = 0;
    
    virtual ~ISkpThumbnailProvider() {}
};

//----------------------------------------------------
extern const IID IID_ISkpHLRGeneration;

struct ISkpHLRGeneration : public IUnknown
{
public:
    virtual HRESULT get_Options( 
        /* [out] */ ISkpNamedValues **pVal) = 0;
    
    virtual HRESULT get_Option( 
        /* [in] */ BSTR optionName,
        /* [out] */ VARIANT *pVal) = 0;
    
    virtual HRESULT put_Option( 
        /* [in] */ BSTR optionName,
        /* [in] */ VARIANT value) = 0;
    
    virtual HRESULT DoHLR( 
        /* [in] */ ISkpView *pView,
        /* [in] */ ISkpHLRWriter *pWriter) = 0;
    
    virtual HRESULT GetHLRClipWindow( 
        /* [in] */ ISkpView *pView,
        /* [in] */ BOOL computeTightClipWindow,
        /* [out] */ double *minX,
        /* [out] */ double *minY,
        /* [out] */ double *maxX,
        /* [out] */ double *maxY,
        /* [out] */ double *nearDist,
        /* [out] */ double *farDist) = 0;
    
    virtual ~ISkpHLRGeneration() {}
};

//----------------------------------------------------
extern const IID IID_ISkpHLRWriter;

struct ISkpHLRWriter : public IUnknown
{
public:
    virtual HRESULT StoreSegment( 
        /* [in] */ OLE_COLOR color,
        /* [in] */ BOOL bSilhouette,
        /* [in] */ double *pFromPoint3d,
        /* [in] */ double *pToPoint3d) = 0;
    
    virtual HRESULT StoreSliceSegment( 
        /* [in] */ OLE_COLOR color,
        /* [in] */ double *pFromPoint3d,
        /* [in] */ double *pToPoint3d) = 0;
    
    virtual HRESULT StoreFace( 
        /* [in] */ OLE_COLOR color,
        /* [in] */ ISkpFace *pOutputFace) = 0;
    
    virtual HRESULT StoreText( 
        /* [in] */ double *originPoint3d,
        /* [in] */ double *xAxisPoint3d,
        /* [in] */ double *yAxisPoint3d,
        /* [in] */ double width,
        /* [in] */ double height,
        /* [in] */ BOOL bItalic,
        /* [in] */ BOOL bBold,
        /* [in] */ BSTR fontFace,
        /* [in] */ BSTR line,
        /* [in] */ OLE_COLOR color) = 0;
    
    virtual HRESULT StoreTextWithFont( 
        /* [in] */ double *originPoint3d,
        /* [in] */ double *xAxisPoint3d,
        /* [in] */ double *yAxisPoint3d,
        /* [in] */ double width,
        /* [in] */ double height,
        /* [in] */ ISkpFont *font,
        /* [in] */ BSTR line,
        /* [in] */ OLE_COLOR color) = 0;
    
    virtual ~ISkpHLRWriter() {}
};

//----------------------------------------------------
extern const IID IID_ISkpView;

struct ISkpView : public IUnknown
{
public:
    virtual HRESULT PixelToModel( 
        /* [in] */ long pixels,
        /* [in] */ double *pPoint3d,
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT GetPixelsPerInch( 
        /* [out] */ long *x,
        /* [out] */ long *y) = 0;
    
    virtual HRESULT get_Direction( 
        /* [out] */ ISkpVector3d **pVector3d) = 0;
    
    virtual HRESULT _GetDirection( 
        /* [out] */ double pVector3d[ 3 ]) = 0;
    
    virtual HRESULT _GetXVec( 
        /* [out] */ double pVector3d[ 3 ]) = 0;
    
    virtual HRESULT _GetYVec( 
        /* [out] */ double pVector3d[ 3 ]) = 0;
    
    virtual HRESULT get_XVec( 
        /* [out] */ ISkpVector3d **pVector3d) = 0;
    
    virtual HRESULT get_YVec( 
        /* [out] */ ISkpVector3d **pVector3d) = 0;
    
    virtual HRESULT MapToViewport( 
        /* [in] */ double *pModelSpacePoint3d,
        /* [out] */ double *pViewportPoint3d,
        /* [out] */ BOOL *pSuccess) = 0;
    
    virtual HRESULT GetScreenDimensions( 
        /* [out] */ long *x,
        /* [out] */ long *y) = 0;
    
    virtual ~ISkpView() {}
};

//----------------------------------------------------
extern const IID IID_ISkpDimensions;

struct ISkpDimensions : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpDimension **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpDimensions() {}
};

//----------------------------------------------------
extern const IID IID_ISkpDimension;

struct ISkpDimension : public IUnknown
{
public:
    virtual HRESULT get_Style( 
        /* [out] */ ISkpDimensionStyle **ppVal) = 0;
    
    virtual HRESULT get_Text( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_Plane( 
        /* [out] */ ISkpPlane **pVal) = 0;
    
    virtual HRESULT GetFormattedText( 
        /* [in] */ ISkpView *pView,
        /* [in] */ BOOL bNotToScale,
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT _GetTextPosition( 
        /* [in] */ ISkpView *pView,
        /* [out] */ double textPositionPoint3d[ 3 ],
        /* [out] */ SkpTextJustification *just,
        /* [out] */ SkpTextAlignment *align) = 0;
    
    virtual HRESULT TextPosition( 
        /* [in] */ ISkpView *pView,
        /* [out] */ ISkpPoint3d **textPositionPoint3d,
        /* [out] */ SkpTextJustification *just,
        /* [out] */ SkpTextAlignment *align) = 0;
    
    virtual HRESULT get_Font( 
        /* [out] */ ISkpFont **pVal) = 0;
    
    virtual HRESULT get_Has3DText( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_ArrowType( 
        /* [out] */ SkpDimensionArrow *pVal) = 0;
    
    virtual ~ISkpDimension() {}
};

//----------------------------------------------------
extern const IID IID_ISkpDimensionLinear;

struct ISkpDimensionLinear : public IUnknown
{
public:
    virtual HRESULT _GetStartPoint( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT get_StartPoint( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT _GetEndPoint( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT get_EndPoint( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT _GetNormal( 
        /* [out] */ double pVector3d[ 3 ]) = 0;
    
    virtual HRESULT get_Normal( 
        /* [out] */ ISkpVector3d **pVector3d) = 0;
    
    virtual HRESULT _GetXAxis( 
        /* [out] */ double pVector3d[ 3 ]) = 0;
    
    virtual HRESULT get_XAxis( 
        /* [out] */ ISkpVector3d **pVector3d) = 0;
    
    virtual HRESULT get_XPosition( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_YPosition( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_Type( 
        /* [out] */ SkpLinearDimensionType *pVal) = 0;
    
    virtual HRESULT get_TextPosition( 
        /* [out] */ SkpDimensionTextPosition *pVal) = 0;
    
    virtual ~ISkpDimensionLinear() {}
};

//----------------------------------------------------
extern const IID IID_ISkpDimensionRadial;

struct ISkpDimensionRadial : public IUnknown
{
public:
    virtual HRESULT get_RadialType( 
        /* [out] */ SkpRadialDimensionType *pVal) = 0;
    
    virtual HRESULT _GetCenter( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT get_Center( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT get_Ratio( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_T( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT _GetLeaderPoints( 
        /* [out] */ double p1Point3d[ 3 ],
        /* [out] */ double p2Point3d[ 3 ],
        /* [out] */ double p3Point3d[ 3 ]) = 0;
    
    virtual HRESULT LeaderPoints( 
        /* [out] */ ISkpPoint3d **p1Point3d,
        /* [out] */ ISkpPoint3d **p2Point3d,
        /* [out] */ ISkpPoint3d **p3Point3d) = 0;
    
    virtual HRESULT _GetTextInfo( 
        /* [in] */ ISkpView *pView,
        /* [in] */ double p1Point3d[ 3 ],
        /* [in] */ double p2Point3d[ 3 ],
        /* [in] */ ISkpPlane *plane,
        /* [out] */ double pTextPositionPoint3d[ 3 ],
        /* [out] */ SkpTextJustification *just,
        /* [out] */ SkpTextAlignment *align,
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT TextInfo( 
        /* [in] */ ISkpView *pView,
        /* [in] */ ISkpPoint3d **p1Point3d,
        /* [in] */ ISkpPoint3d **p2Point3d,
        /* [in] */ ISkpPlane *plane,
        /* [out] */ ISkpPoint3d **pTextPositionPoint3d,
        /* [out] */ SkpTextJustification *just,
        /* [out] */ SkpTextAlignment *align,
        /* [out] */ BOOL *pVal) = 0;
    
    virtual ~ISkpDimensionRadial() {}
};

//----------------------------------------------------
extern const IID IID_ISkpDimensionStyle;

struct ISkpDimensionStyle : public IUnknown
{
public:
    virtual HRESULT get_Font( 
        /* [out] */ ISkpFont **pVal) = 0;
    
    virtual HRESULT get_Has3DText( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_TextPosition( 
        /* [out] */ SkpDimensionTextPosition *pVal) = 0;
    
    virtual HRESULT get_ArrowType( 
        /* [out] */ SkpDimensionArrow *pVal) = 0;
    
    virtual HRESULT get_ArrowSize( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Color( 
        /* [out] */ OLE_COLOR *pColor) = 0;
    
    virtual HRESULT get_TextColor( 
        /* [out] */ OLE_COLOR *pColor) = 0;
    
    virtual HRESULT get_AlwaysReadable( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_ExtensionLineOffset( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_ExtensionLineOvershoot( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_LineWeight( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_HighlightNonAssociativeDimensions( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_HighlightNonAssociativeDimensionsColor( 
        /* [out] */ OLE_COLOR *pVal) = 0;
    
    virtual HRESULT get_ShowRadialDiamPrefix( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_HideOutOfPlane( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_HideOutOfPlaneValue( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_HideSmall( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_HideSmallValue( 
        /* [out] */ double *pVal) = 0;
    
    virtual ~ISkpDimensionStyle() {}
};

//----------------------------------------------------
extern const IID IID_ISkpFont;

struct ISkpFont : public IUnknown
{
public:
    virtual HRESULT get_PointSize( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_FontFace( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_Bold( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_Italic( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT GetBoundsMultiLine( 
        /* [in] */ ISkpView *pView,
        /* [in] */ BSTR text,
        /* [out] */ ISkpBoundingBox3d **ppBox) = 0;
    
    virtual HRESULT get_WorldSize( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_UseWorldSize( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual ~ISkpFont() {}
};

//----------------------------------------------------
extern const IID IID_ISkpFonts;

struct ISkpFonts : public IUnknown
{
public:
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpFont **pVal) = 0;
    
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpFonts() {}
};

//----------------------------------------------------
extern const IID IID_ISkpText;

struct ISkpText : public IUnknown
{
public:
    virtual HRESULT get_Text( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_DrawingFont( 
        /* [out] */ ISkpFont **pVal) = 0;
    
    virtual HRESULT get_LeaderType( 
        /* [out] */ SkpTextLeader *pVal) = 0;
    
    virtual HRESULT get_DisplayLeader( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_ArrowType( 
        /* [out] */ SkpDimensionArrow *pVal) = 0;
    
    virtual HRESULT _GetLeaderPoints( 
        /* [in] */ ISkpView *pView,
        /* [out] */ double *pLeaderStartPoint3d,
        /* [out] */ double *pLeaderEndPoint3d,
        /* [out] */ double *pExtensionEndPoint3d,
        /* [out] */ double *pTextOffsetPoint3d,
        /* [out] */ SkpTextJustification *just,
        /* [out] */ SkpTextAlignment *align) = 0;
    
    virtual HRESULT LeaderPoints( 
        /* [in] */ ISkpView *pView,
        /* [out] */ ISkpPoint3d **pLeaderStartPoint3d,
        /* [out] */ ISkpPoint3d **pLeaderEndPoint3d,
        /* [out] */ ISkpPoint3d **pExtensionEndPoint3d,
        /* [out] */ ISkpPoint3d **pTextOffsetPoint3d,
        /* [out] */ SkpTextJustification *just,
        /* [out] */ SkpTextAlignment *align) = 0;
    
    virtual ~ISkpText() {}
};

//----------------------------------------------------
extern const IID IID_ISkpTexts;

struct ISkpTexts : public IUnknown
{
public:
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpText **pVal) = 0;
    
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpTexts() {}
};

//----------------------------------------------------
extern const IID IID_ISkpOptionsManager;

struct ISkpOptionsManager : public IUnknown
{
public:
    virtual HRESULT get_Item( 
        /* [in] */ VARIANT IndexOrName,
        /* [out] */ ISkpOptionsProvider **pVal) = 0;
    
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpOptionsManager() {}
};

//----------------------------------------------------
extern const IID IID_ISkpOptionsProvider;

struct ISkpOptionsProvider : public IUnknown
{
public:
    virtual HRESULT get_Options( 
        /* [out] */ ISkpNamedValues **pVal) = 0;
    
    virtual HRESULT get_Name( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_Option( 
        /* [in] */ BSTR optionName,
        /* [out] */ VARIANT *pVal) = 0;
    
    virtual ~ISkpOptionsProvider() {}
};

//----------------------------------------------------
extern const IID IID_ISkpAttributes;

struct ISkpAttributes : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpAttribute **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpAttributes() {}
};

//----------------------------------------------------
extern const IID IID_ISkpAttribute;

struct ISkpAttribute : public IUnknown
{
public:
    virtual ~ISkpAttribute() {}
};

//----------------------------------------------------
extern const IID IID_ISkpFaceTextureCoordsAttribute;

struct ISkpFaceTextureCoordsAttribute : public IUnknown
{
public:
    virtual ~ISkpFaceTextureCoordsAttribute() {}
};

//----------------------------------------------------
extern const IID IID_ISkpAttributeDictionary;

struct ISkpAttributeDictionary : public IUnknown
{
public:
    virtual HRESULT get_Name( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ BSTR bstrName,
        /* [out] */ VARIANT *pVal) = 0;
    
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpAttributeDictionary() {}
};

//----------------------------------------------------
extern const IID IID_ISkpCurve;

struct ISkpCurve : public IUnknown
{
public:
    virtual HRESULT get_Edges( 
        /* [out] */ ISkpEdges **pVal) = 0;
    
    virtual HRESULT get_FirstEdge( 
        /* [out] */ ISkpEdge **pVal) = 0;
    
    virtual HRESULT get_LastEdge( 
        /* [out] */ ISkpEdge **pVal) = 0;
    
    virtual ~ISkpCurve() {}
};

//----------------------------------------------------
extern const IID IID_ISkpArcCurve;

struct ISkpArcCurve : public IUnknown
{
public:
    virtual HRESULT get_Radius( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT _GetStartPoint( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT _GetEndPoint( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT _GetXAxis( 
        /* [out] */ double pVector3d[ 3 ]) = 0;
    
    virtual HRESULT _GetYAxis( 
        /* [out] */ double pVector3d[ 3 ]) = 0;
    
    virtual HRESULT _GetCenter( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT _GetNormal( 
        /* [out] */ double pVector3d[ 3 ]) = 0;
    
    virtual HRESULT get_StartPoint( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT get_EndPoint( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT get_XAxis( 
        /* [out] */ ISkpVector3d **pVector3d) = 0;
    
    virtual HRESULT get_YAxis( 
        /* [out] */ ISkpVector3d **pVector3d) = 0;
    
    virtual HRESULT get_Center( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT get_Normal( 
        /* [out] */ ISkpVector3d **pVector3d) = 0;
    
    virtual HRESULT get_StartAngle( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_EndAngle( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_IsFullCircle( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual ~ISkpArcCurve() {}
};

//----------------------------------------------------
extern const IID IID_ISkpLineCurve;

struct ISkpLineCurve : public IUnknown
{
public:
    virtual HRESULT _GetStartPoint( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT _GetEndPoint( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT get_StartPoint( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT get_EndPoint( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT get_StartVertex( 
        /* [out] */ ISkpVertex **pStartVertex) = 0;
    
    virtual HRESULT get_EndVertex( 
        /* [out] */ ISkpVertex **pEndVertex) = 0;
    
    virtual ~ISkpLineCurve() {}
};

//----------------------------------------------------
extern const IID IID_ISkpBoundingBox3d;

struct ISkpBoundingBox3d : public IUnknown
{
public:
    virtual HRESULT _GetMinPoint( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT _GetMaxPoint( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT _GetMidPoint( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT get_MinPoint( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT get_MaxPoint( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT get_MidPoint( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual ~ISkpBoundingBox3d() {}
};

//----------------------------------------------------
extern const IID IID_ISkpEntities;

struct ISkpEntities : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpEntity **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpEntities() {}
};

//----------------------------------------------------
extern const IID IID_ISkpEdges;

struct ISkpEdges : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpEdge **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpEdges() {}
};

//----------------------------------------------------
extern const IID IID_ISkpEdge;

struct ISkpEdge : public IUnknown
{
public:
    virtual HRESULT get_IsSmooth( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_IsSoft( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_Curve( 
        /* [out] */ ISkpCurve **pVal) = 0;
    
    virtual HRESULT get_StartVertex( 
        /* [out] */ ISkpVertex **pStartVertex) = 0;
    
    virtual HRESULT get_EndVertex( 
        /* [out] */ ISkpVertex **pEndVertex) = 0;
    
    virtual HRESULT _GetStartPoint( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT _GetEndPoint( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT get_StartPoint( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT get_EndPoint( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT get_Faces( 
        /* [out] */ ISkpFaces **pVal) = 0;
    
    virtual ~ISkpEdge() {}
};

//----------------------------------------------------
extern const IID IID_ISkpEntity;

struct ISkpEntity : public IUnknown
{
public:
    virtual HRESULT get_IsVirtual( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_Id( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_TypeName( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual ~ISkpEntity() {}
};

//----------------------------------------------------
extern const IID IID_ISkpAttributeProvider;

struct ISkpAttributeProvider : public IUnknown
{
public:
    virtual HRESULT get_Attributes( 
        /* [out] */ ISkpAttributes **pVal) = 0;
    
    virtual ~ISkpAttributeProvider() {}
};

//----------------------------------------------------
extern const IID IID_ISkpDrawingElement;

struct ISkpDrawingElement : public IUnknown
{
public:
    virtual HRESULT get_IsVisible( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_IsHighlighted( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_HasMaterial( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_Material( 
        /* [out] */ ISkpMaterial **pVal) = 0;
    
    virtual HRESULT get_Layer( 
        /* [out] */ ISkpLayer **pVal) = 0;
    
    virtual HRESULT get_BoundingBox( 
        /* [out] */ ISkpBoundingBox3d **ppBBox) = 0;
    
    virtual HRESULT get_CastsShadows( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_ReceivesShadows( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual ~ISkpDrawingElement() {}
};

//----------------------------------------------------
extern const IID IID_ISkpPolygonMesh;

struct ISkpPolygonMesh : public IUnknown
{
public:
    virtual HRESULT get_NumPolygons( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_NumPoints( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT _GetPoint( 
        /* [in] */ long nIndex,
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT _GetPolygonPoint( 
        /* [in] */ long nPoly,
        /* [in] */ long nPoint,
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT _GetFrontUVPoint( 
        /* [in] */ long nIndex,
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT _GetBackUVPoint( 
        /* [in] */ long nIndex,
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT _GetVertexNormal( 
        /* [in] */ long nIndex,
        /* [out] */ double pVector3d[ 3 ]) = 0;
    
    virtual HRESULT get_Point( 
        /* [in] */ long nIndex,
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT CountPolygonPoints( 
        /* [in] */ long nPoly,
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT GetPolygonPointIndex( 
        /* [in] */ long nPoly,
        /* [in] */ long nPoint,
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_PolygonPoint( 
        /* [in] */ long nPoly,
        /* [in] */ long nPoint,
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT get_FrontUVPoint( 
        /* [in] */ long nIndex,
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT get_BackUVPoint( 
        /* [in] */ long nIndex,
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT get_VertexNormal( 
        /* [in] */ long nIndex,
        /* [out] */ ISkpVector3d **pVector3d) = 0;
    
    virtual ~ISkpPolygonMesh() {}
};

//----------------------------------------------------
extern const IID IID_ISkpFace;

struct ISkpFace : public IUnknown
{
public:
    virtual HRESULT get_EdgeUses( 
        /* [out] */ ISkpEdgeUses **pVal) = 0;
    
    virtual HRESULT get_Loops( 
        /* [out] */ ISkpLoops **pVal) = 0;
    
    virtual HRESULT get_OuterLoop( 
        /* [out] */ ISkpLoop **pVal) = 0;
    
    virtual HRESULT get_Openings( 
        /* [out] */ ISkpOpenings **pVal) = 0;
    
    virtual HRESULT get_Edges( 
        /* [out] */ ISkpEdges **pVal) = 0;
    
    virtual HRESULT get_Vertices( 
        /* [out] */ ISkpVertices **pVal) = 0;
    
    virtual HRESULT get_Area( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_Plane( 
        /* [out] */ ISkpPlane **pVal) = 0;
    
    virtual HRESULT CreateMesh( 
        /* [in] */ unsigned long type,
        /* [in] */ ISkpCorrectPerspective *pPerspective,
        /* [out] */ ISkpPolygonMesh **pVal) = 0;
    
    virtual HRESULT get_BackMaterial( 
        /* [out] */ ISkpMaterial **pVal) = 0;
    
    virtual HRESULT get_FrontMaterial( 
        /* [out] */ ISkpMaterial **pVal) = 0;
    
    virtual HRESULT GetAttachedComponentInstances( 
        /* [out] */ ISkpComponentInstances **pVal) = 0;
    
    virtual HRESULT GetUVHelper( 
        /* [in] */ BOOL front,
        /* [in] */ BOOL back,
        /* [in] */ ISkpCorrectPerspective *pPerspective,
        /* [out] */ ISkpUVHelper **pHelper) = 0;
    
    virtual HRESULT GetUVHelperWithTextureHandle( 
        /* [in] */ BOOL front,
        /* [in] */ BOOL back,
        /* [in] */ ISkpCorrectPerspective *pPerspective,
        /* [in] */ long textureHandle,
        /* [out] */ ISkpUVHelper **pHelper) = 0;
    
    virtual HRESULT CreateMeshWithUVHelper( 
        /* [in] */ unsigned long type,
        /* [in] */ ISkpUVHelper *pUVHelper,
        /* [out] */ ISkpPolygonMesh **pVal) = 0;
    
    virtual HRESULT GetFrontPushPins( 
        /* [out] */ unsigned short *length,
        /* [out] */ double pushpins[ 16 ],
        /* [out] */ double projection_vector[ 3 ]) = 0;
    
    virtual HRESULT GetBackPushPins( 
        /* [out] */ unsigned short *length,
        /* [out] */ double pushpins[ 16 ],
        /* [out] */ double projection_vector[ 3 ]) = 0;
    
    virtual ~ISkpFace() {}
};

//----------------------------------------------------
extern const IID IID_ISkpFaces;

struct ISkpFaces : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpFace **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpFaces() {}
};

//----------------------------------------------------
extern const IID IID_ISkpCorrectPerspective;

struct ISkpCorrectPerspective : public IUnknown
{
public:
    virtual ~ISkpCorrectPerspective() {}
};

//----------------------------------------------------
extern const IID IID_ISkpUVHelper;

struct ISkpUVHelper : public IUnknown
{
public:
    virtual HRESULT GetFrontUVQ( 
        /* [in] */ double x,
        /* [in] */ double y,
        /* [in] */ double z,
        /* [out] */ double *u,
        /* [out] */ double *v,
        /* [out] */ double *q) = 0;
    
    virtual HRESULT GetBackUVQ( 
        /* [in] */ double x,
        /* [in] */ double y,
        /* [in] */ double z,
        /* [out] */ double *u,
        /* [out] */ double *v,
        /* [out] */ double *q) = 0;
    
    virtual ~ISkpUVHelper() {}
};

//----------------------------------------------------
extern const IID IID_ISkpTextureWriter;

struct ISkpTextureWriter : public IUnknown
{
public:
    virtual HRESULT LoadFace( 
        /* [in] */ ISkpFace *pFace,
        /* [in] */ BOOL bFront,
        /* [out] */ long *pHandle) = 0;
    
    virtual HRESULT LoadImage( 
        /* [in] */ ISkpImage *pImage,
        /* [out] */ long *pHandle) = 0;
    
    virtual HRESULT LoadComponentInstance( 
        /* [in] */ ISkpComponentInstance *pComponentInstance,
        /* [out] */ long *pHandle) = 0;
    
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT GetTextureHandleFromFace( 
        /* [in] */ ISkpFace *pFace,
        /* [in] */ BOOL bFront,
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT GetTextureHandleFromComponentInstance( 
        /* [in] */ ISkpComponentInstance *pInst,
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT GetTextureHandleFromImage( 
        /* [in] */ ISkpImage *pInst,
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT GetTextureFile( 
        /* [in] */ long textureHandle,
        /* [out] */ BSTR *pFileName) = 0;
    
    virtual HRESULT WriteAllTextures( 
        /* [in] */ BSTR directoryName,
        /* [in] */ BOOL use83) = 0;
    
    virtual HRESULT WriteTextureFileFromFace( 
        /* [in] */ ISkpFace *pFace,
        /* [in] */ BOOL bFront,
        /* [in] */ BSTR fileName) = 0;
    
    virtual HRESULT WriteTextureFileFromComponentInstance( 
        /* [in] */ ISkpComponentInstance *pComponentInstance,
        /* [in] */ BSTR fileName) = 0;
    
    virtual HRESULT WriteTextureFileFromImage( 
        /* [in] */ ISkpImage *pImage,
        /* [in] */ BSTR fileName) = 0;
    
    virtual HRESULT WriteTextureFileFromHandle( 
        /* [in] */ long textureHandle,
        /* [in] */ BSTR fileName) = 0;
    
    virtual HRESULT WriteTextureFileFromHandleOptimize( 
        /* [in] */ long textureHandle,
        /* [in] */ BSTR fileName,
        /* [in] */ long optimize) = 0;
    
    virtual ~ISkpTextureWriter() {}
};

//----------------------------------------------------
extern const IID IID_ISkpTextureWriter2;

struct ISkpTextureWriter2 : public ISkpTextureWriter
{
public:
    virtual HRESULT LoadGroup( 
        /* [in] */ ISkpGroup *pGroup,
        /* [out] */ long *pHandle) = 0;
    
    virtual HRESULT WriteTextureFileFromGroup( 
        /* [in] */ ISkpGroup *pGroup,
        /* [in] */ BSTR fileName) = 0;
    
    virtual HRESULT GetTextureHandleFromGroup( 
        /* [in] */ ISkpGroup *pGroup,
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT LoadLayer( 
        /* [in] */ ISkpLayer *pLayer,
        /* [out] */ long *pHandle) = 0;
    
    virtual HRESULT WriteTextureFileFromLayer( 
        /* [in] */ ISkpLayer *pLayer,
        /* [in] */ BSTR fileName) = 0;
    
    virtual HRESULT GetTextureHandleFromLayer( 
        /* [in] */ ISkpLayer *pLayer,
        /* [out] */ long *pVal) = 0;
    
    virtual ~ISkpTextureWriter2() {}
};

//----------------------------------------------------
extern const IID IID_ISkpVertices;

struct ISkpVertices : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpVertex **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpVertices() {}
};

//----------------------------------------------------
extern const IID IID_ISkpLayer;

struct ISkpLayer : public IUnknown
{
public:
    virtual HRESULT get_Name( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_IsVisible( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_Color( 
        /* [out] */ OLE_COLOR *pVal) = 0;
    
    virtual HRESULT get_Material( 
        /* [out] */ ISkpMaterial **ppMat) = 0;
    
    virtual ~ISkpLayer() {}
};

//----------------------------------------------------
extern const IID IID_ISkpLayers;

struct ISkpLayers : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpLayer **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpLayers() {}
};

//----------------------------------------------------
extern const IID IID_ISkpMaterial;

struct ISkpMaterial : public IUnknown
{
public:
    virtual HRESULT get_Name( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_IsColor( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_IsTexture( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_Color( 
        /* [out] */ OLE_COLOR *pVal) = 0;
    
    virtual HRESULT get_Texture( 
        /* [out] */ ISkpTexture **pVal) = 0;
    
    virtual HRESULT get_Alpha( 
        /* [out] */ double *pAlpha) = 0;
    
    virtual HRESULT get_UsesAlpha( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual ~ISkpMaterial() {}
};

//----------------------------------------------------
extern const IID IID_ISkpMaterials;

struct ISkpMaterials : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpMaterial **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpMaterials() {}
};

//----------------------------------------------------
extern const IID IID_ISkpTexture;

struct ISkpTexture : public IUnknown
{
public:
    virtual HRESULT get_Color( 
        /* [out] */ OLE_COLOR *pVal) = 0;
    
    virtual HRESULT get_Filename( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_Fullname( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_XScale( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_YScale( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT WriteToFile( 
        /* [in] */ BSTR filename) = 0;
    
    virtual ~ISkpTexture() {}
};

//----------------------------------------------------
extern const IID IID_ISkpTextures;

struct ISkpTextures : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpTexture **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpTextures() {}
};

//----------------------------------------------------
extern const IID IID_ISkpTransform;

struct ISkpTransform : public IUnknown
{
public:
    virtual HRESULT GetData( 
        /* [out] */ double data[ 16 ]) = 0;
    
    virtual HRESULT get_IsIdentity( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual ~ISkpTransform() {}
};

//----------------------------------------------------
extern const IID IID_ISkpComponentDefinition;

struct ISkpComponentDefinition : public IUnknown
{
public:
    virtual HRESULT get_Name( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_Description( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_Guid( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_IsInternal( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_Path( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_LoadTime( 
        /* [out] */ DATE *pVal) = 0;
    
    virtual HRESULT get_Behaviors( 
        /* [out] */ ISkpNamedValues **pVal) = 0;
    
    virtual HRESULT get_Openings( 
        /* [out] */ ISkpOpenings **pVal) = 0;
    
    virtual HRESULT _GetInsertionPoint( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT get_InsertionPoint( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT get_Type( 
        /* [out] */ ComponentDefinitionType *pType) = 0;
    
    virtual ~ISkpComponentDefinition() {}
};

//----------------------------------------------------
extern const IID IID_ISkpComponentDefinitions;

struct ISkpComponentDefinitions : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpComponentDefinition **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpComponentDefinitions() {}
};

//----------------------------------------------------
extern const IID IID_ISkpComponentInstance;

struct ISkpComponentInstance : public IUnknown
{
public:
    virtual HRESULT get_ComponentDefinition( 
        /* [out] */ ISkpComponentDefinition **pVal) = 0;
    
    virtual HRESULT get_Transform( 
        /* [out] */ ISkpTransform **pVal) = 0;
    
    virtual HRESULT GetObjectsAttachedTo( 
        /* [out] */ ISkpEntities **pVal) = 0;
    
    virtual HRESULT GetAttachedComponentInstances( 
        /* [out] */ ISkpComponentInstances **pVal) = 0;
    
    virtual HRESULT SaveAs( 
        /* [in] */ BSTR fileName) = 0;
    
    virtual HRESULT get_Name( 
        /* [out] */ BSTR *pName) = 0;
    
    virtual ~ISkpComponentInstance() {}
};

//----------------------------------------------------
extern const IID IID_ISkpComponentInstances;

struct ISkpComponentInstances : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpComponentInstance **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpComponentInstances() {}
};

//----------------------------------------------------
extern const IID IID_ISkpEdgeUse;

struct ISkpEdgeUse : public IUnknown
{
public:
    virtual HRESULT get_Edge( 
        /* [out] */ ISkpEdge **pVal) = 0;
    
    virtual HRESULT get_Loop( 
        /* [out] */ ISkpLoop **pVal) = 0;
    
    virtual HRESULT get_Face( 
        /* [out] */ ISkpFace **pVal) = 0;
    
    virtual HRESULT get_Partners( 
        /* [out] */ ISkpEdgeUses **pVal) = 0;
    
    virtual HRESULT get_IsReversed( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_Previous( 
        /* [out] */ ISkpEdgeUse **pVal) = 0;
    
    virtual HRESULT get_Next( 
        /* [out] */ ISkpEdgeUse **pVal) = 0;
    
    virtual HRESULT get_StartVertex( 
        /* [out] */ ISkpVertex **pStartVertex) = 0;
    
    virtual HRESULT get_EndVertex( 
        /* [out] */ ISkpVertex **pEndVertex) = 0;
    
    virtual HRESULT _GetStartPoint( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT _GetEndPoint( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT get_StartPoint( 
        /* [out] */ ISkpPoint3d **pVal) = 0;
    
    virtual HRESULT get_EndPoint( 
        /* [out] */ ISkpPoint3d **pVal) = 0;
    
    virtual HRESULT get_StartVertexNormal( 
        /* [out] */ ISkpVector3d **pVal) = 0;
    
    virtual HRESULT get_EndVertexNormal( 
        /* [out] */ ISkpVector3d **pVal) = 0;
    
    virtual ~ISkpEdgeUse() {}
};

//----------------------------------------------------
extern const IID IID_ISkpEdgeUses;

struct ISkpEdgeUses : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpEdgeUse **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpEdgeUses() {}
};

//----------------------------------------------------
extern const IID IID_ISkpLoop;

struct ISkpLoop : public IUnknown
{
public:
    virtual HRESULT get_Edges( 
        /* [out] */ ISkpEdges **pVal) = 0;
    
    virtual HRESULT get_EdgeUses( 
        /* [out] */ ISkpEdgeUses **pVal) = 0;
    
    virtual HRESULT get_Vertices( 
        /* [out] */ ISkpVertices **pVal) = 0;
    
    virtual HRESULT get_Face( 
        /* [out] */ ISkpFace **pVal) = 0;
    
    virtual HRESULT get_IsOuterLoop( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_IsConvex( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual ~ISkpLoop() {}
};

//----------------------------------------------------
extern const IID IID_ISkpLoops;

struct ISkpLoops : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpLoop **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpLoops() {}
};

//----------------------------------------------------
extern const IID IID_ISkpPolyline3d;

struct ISkpPolyline3d : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT _GetPosition( 
        /* [in] */ long nIndex,
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT get_Position( 
        /* [in] */ long nIndex,
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual ~ISkpPolyline3d() {}
};

//----------------------------------------------------
extern const IID IID_ISkpPolyline3ds;

struct ISkpPolyline3ds : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpPolyline3d **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpPolyline3ds() {}
};

//----------------------------------------------------
extern const IID IID_ISkpConstructionLine;

struct ISkpConstructionLine : public IUnknown
{
public:
    virtual HRESULT _GetPosition( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT _GetDirection( 
        /* [out] */ double pVector3d[ 3 ]) = 0;
    
    virtual HRESULT get_Position( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT get_Direction( 
        /* [out] */ ISkpVector3d **pVector3d) = 0;
    
    virtual ~ISkpConstructionLine() {}
};

//----------------------------------------------------
extern const IID IID_ISkpConstructionLines;

struct ISkpConstructionLines : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpConstructionLine **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpConstructionLines() {}
};

//----------------------------------------------------
extern const IID IID_ISkpConstructionPoint;

struct ISkpConstructionPoint : public IUnknown
{
public:
    virtual HRESULT _GetPosition( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT get_Position( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT get_DisplayAsLine( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT _GetFromPosition( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT get_FromPosition( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual ~ISkpConstructionPoint() {}
};

//----------------------------------------------------
extern const IID IID_ISkpConstructionPoints;

struct ISkpConstructionPoints : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpConstructionPoint **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpConstructionPoints() {}
};

//----------------------------------------------------
extern const IID IID_ISkpGroup;

struct ISkpGroup : public IUnknown
{
public:
    virtual HRESULT get_Name( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_Description( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_Transform( 
        /* [out] */ ISkpTransform **pVal) = 0;
    
    virtual HRESULT SaveAs( 
        /* [in] */ BSTR fileName) = 0;
    
    virtual ~ISkpGroup() {}
};

//----------------------------------------------------
extern const IID IID_ISkpGroups;

struct ISkpGroups : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpGroup **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpGroups() {}
};

//----------------------------------------------------
extern const IID IID_ISkpImage;

struct ISkpImage : public IUnknown
{
public:
    virtual HRESULT get_Transform( 
        /* [out] */ ISkpTransform **pVal) = 0;
    
    virtual HRESULT get_Path( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_Width( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_Height( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_PixelWidth( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_PixelHeight( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_ZRotation( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_Origin( 
        /* [out] */ ISkpPoint3d **pVal) = 0;
    
    virtual HRESULT get_Normal( 
        /* [out] */ ISkpVector3d **pVal) = 0;
    
    virtual HRESULT get_Name( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual ~ISkpImage() {}
};

//----------------------------------------------------
extern const IID IID_ISkpImages;

struct ISkpImages : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpImage **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpImages() {}
};

//----------------------------------------------------
extern const IID IID_ISkpCamera;

struct ISkpCamera : public IUnknown
{
public:
    virtual HRESULT _GetEye( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT _GetDirection( 
        /* [out] */ double pVector3d[ 3 ]) = 0;
    
    virtual HRESULT _GetUp( 
        /* [out] */ double pVector3d[ 3 ]) = 0;
    
    virtual HRESULT _GetCenter( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT _GetTarget( 
        /* [out] */ double pPoint3d[ 3 ]) = 0;
    
    virtual HRESULT get_Eye( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT get_Direction( 
        /* [out] */ ISkpVector3d **pVector3d) = 0;
    
    virtual HRESULT get_Up( 
        /* [out] */ ISkpVector3d **pVector3d) = 0;
    
    virtual HRESULT get_Center( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT get_Target( 
        /* [out] */ ISkpPoint3d **pPoint3d) = 0;
    
    virtual HRESULT get_Projection( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_NearClip( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_FarClip( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_FieldOfView( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_Height( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_AspectRatio( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_Description( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_FieldOfViewIsHeight( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_ImageWidth( 
        /* [out] */ double *pVal) = 0;
    
    virtual HRESULT get_Center2D( 
        /* [out] */ double *x,
        /* [out] */ double *y) = 0;
    
    virtual HRESULT get_Scale2D( 
        /* [out] */ double *scale) = 0;
    
    virtual HRESULT get_Camera2D( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual ~ISkpCamera() {}
};

//----------------------------------------------------
extern const IID IID_ISkpCameraM;

struct ISkpCameraM : public IUnknown
{
public:
    virtual HRESULT _SetOrientation( 
        /* [in] */ double eye[ 3 ],
        /* [in] */ double target[ 3 ],
        /* [in] */ double up[ 3 ]) = 0;
    
    virtual HRESULT SetOrientation( 
        /* [in] */ ISkpPoint3d *eye,
        /* [in] */ ISkpPoint3d *target,
        /* [in] */ ISkpVector3d *up) = 0;
    
    virtual HRESULT SetCenter( 
        /* [in] */ ISkpPoint3d *pCenter) = 0;
    
    virtual HRESULT _SetCenter( 
        /* [in] */ double center[ 3 ]) = 0;
    
    virtual HRESULT put_Projection( 
        /* [in] */ long val) = 0;
    
    virtual HRESULT put_NearClip( 
        /* [in] */ double val) = 0;
    
    virtual HRESULT put_FarClip( 
        /* [in] */ double val) = 0;
    
    virtual HRESULT put_FieldOfView( 
        /* [in] */ double val) = 0;
    
    virtual HRESULT put_Height( 
        /* [in] */ double val) = 0;
    
    virtual HRESULT put_AspectRatio( 
        /* [in] */ double val) = 0;
    
    virtual HRESULT put_Description( 
        /* [in] */ BSTR val) = 0;
    
    virtual HRESULT put_FieldOfViewIsHeight( 
        /* [in] */ BOOL val) = 0;
    
    virtual HRESULT put_ImageWidth( 
        /* [in] */ double val) = 0;
    
    virtual HRESULT put_Center2D( 
        /* [in] */ double x,
        /* [in] */ double y) = 0;
    
    virtual HRESULT put_Scale2D( 
        /* [in] */ double scale) = 0;
    
    virtual HRESULT put_Camera2D( 
        /* [in] */ BOOL pVal) = 0;
    
    virtual ~ISkpCameraM() {}
};

//----------------------------------------------------
extern const IID IID_ISkpPage;

struct ISkpPage : public IUnknown
{
public:
    virtual HRESULT get_Name( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_Camera( 
        /* [out] */ ISkpCamera **pVal) = 0;
    
    virtual HRESULT get_UseCamera( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_UseRenderingOptions( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_UseShadowInfo( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_UseSketchCS( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_UseHidden( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_UseHiddenLayers( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_RenderingOptions( 
        /* [out] */ ISkpOptionsProvider **ppRenderingOptions) = 0;
    
    virtual HRESULT get_ShadowOptions( 
        /* [out] */ ISkpOptionsProvider **ppShadowOptions) = 0;
    
    virtual HRESULT get_CoordinateSystem( 
        /* [out] */ ISkpCoordinateSystem **ppCS) = 0;
    
    virtual HRESULT get_Layers( 
        /* [out] */ ISkpLayers **pLayers) = 0;
    
    virtual HRESULT get_HiddenEntities( 
        /* [out] */ ISkpEntities **pEntities) = 0;
    
    virtual HRESULT get_Flags( 
        /* [out] */ unsigned long *pVal) = 0;
    
    virtual HRESULT get_SketchAxesDisplayed( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get_Style( 
        /* [out] */ ISkpStyle **pVal) = 0;
    
    virtual HRESULT get_PhotoMatchImageDisplayed( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual ~ISkpPage() {}
};

//----------------------------------------------------
extern const IID IID_ISkpPageM;

struct ISkpPageM : public IUnknown
{
public:
    virtual HRESULT AssignFrom( 
        /* [in] */ ISkpPage *page) = 0;
    
    virtual HRESULT put_Name( 
        /* [in] */ BSTR newVal) = 0;
    
    virtual HRESULT put_Flags( 
        /* [in] */ unsigned long val) = 0;
    
    virtual HRESULT put_SketchAxesDisplayed( 
        /* [in] */ BOOL val) = 0;
    
    virtual HRESULT ClearLayers( void) = 0;
    
    virtual HRESULT AddLayer( 
        /* [in] */ ISkpLayer *pLayer) = 0;
    
    virtual HRESULT ClearPhotoMatchImage( void) = 0;
    
    virtual ~ISkpPageM() {}
};

//----------------------------------------------------
extern const IID IID_ISkpPages;

struct ISkpPages : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpPage **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual HRESULT GetPageWithName( 
        /* [in] */ BSTR name,
        /* [out] */ ISkpPage **pVal) = 0;
    
    virtual HRESULT get_SelectedPage( 
        /* [out] */ ISkpPage **pVal) = 0;
    
    virtual ~ISkpPages() {}
};

//----------------------------------------------------
extern const IID IID_ISkpPagesM;

struct ISkpPagesM : public IUnknown
{
public:
    virtual HRESULT AddPage( 
        /* [in] */ BSTR newPageName,
        /* [in] */ unsigned long flags,
        /* [in] */ long index) = 0;
    
    virtual ~ISkpPagesM() {}
};

//----------------------------------------------------
extern const IID IID_ISkpEntityTransformPair;

struct ISkpEntityTransformPair : public IUnknown
{
public:
    virtual HRESULT get_Entity( 
        /* [out] */ ISkpEntity **pVal) = 0;
    
    virtual HRESULT get_Transform( 
        /* [out] */ ISkpTransform **pVal) = 0;
    
    virtual ~ISkpEntityTransformPair() {}
};

//----------------------------------------------------
extern const IID IID_ISkpEntityTransformPairs;

struct ISkpEntityTransformPairs : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpEntityTransformPair **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpEntityTransformPairs() {}
};

//----------------------------------------------------
extern const IID IID_ISkpOpening;

struct ISkpOpening : public IUnknown
{
public:
    virtual HRESULT get_PointCount( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT _GetPoints( 
        /* [in] */ long pointCount,
        /* [size_is][out] */ double pPoints[  ]) = 0;
    
    virtual HRESULT get_Point( 
        /* [in] */ long nIndex,
        /* [out] */ ISkpPoint3d **pPoint) = 0;
    
    virtual HRESULT get_VertexNormal( 
        /* [in] */ long nIndex,
        /* [out] */ ISkpVector3d **pNormal) = 0;
    
    virtual HRESULT get_ComponentInstance( 
        /* [out] */ ISkpComponentInstance **pVal) = 0;
    
    virtual ~ISkpOpening() {}
};

//----------------------------------------------------
extern const IID IID_ISkpOpenings;

struct ISkpOpenings : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpOpening **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpOpenings() {}
};

//----------------------------------------------------
extern const IID IID_ISkpSelectionSet;

struct ISkpSelectionSet : public IUnknown
{
public:
    virtual HRESULT get_Item( 
        /* [in] */ long nIndex,
        /* [out] */ ISkpEntity **pVal) = 0;
    
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT Contains( 
        /* [in] */ ISkpEntity *pEntity,
        /* [out] */ BOOL *pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpSelectionSet() {}
};

//----------------------------------------------------
extern const IID IID_ISkpSectionPlane;

struct ISkpSectionPlane : public IUnknown
{
public:
    virtual HRESULT get_Plane( 
        /* [out] */ ISkpPlane **pVal) = 0;
    
    virtual ~ISkpSectionPlane() {}
};

//----------------------------------------------------
extern const IID IID_ISkpSectionPlanes;

struct ISkpSectionPlanes : public IUnknown
{
public:
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpSectionPlane **pVal) = 0;
    
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpSectionPlanes() {}
};

//----------------------------------------------------
extern const IID IID_ISkpEntityProviderStatistics;

struct ISkpEntityProviderStatistics : public IUnknown
{
public:
    virtual HRESULT get_NumberOfTypes( 
        /* [out] */ long *pNumTypes) = 0;
    
    virtual HRESULT GetTypeName( 
        /* [in] */ StatisticsType typeIndex,
        /* [out] */ BSTR *pTypeName) = 0;
    
    virtual HRESULT GetCount( 
        /* [in] */ StatisticsType typeIndex,
        /* [in] */ BOOL bIncludeInstances,
        /* [out] */ long *pCount) = 0;
    
    virtual ~ISkpEntityProviderStatistics() {}
};

//----------------------------------------------------
extern const IID IID_ISkpStyleManager;

struct ISkpStyleManager : public IUnknown
{
public:
    virtual HRESULT get_Styles( 
        /* [out] */ ISkpStyles **ppStyles) = 0;
    
    virtual HRESULT get_ActiveStyle( 
        /* [out] */ ISkpStyle **ppStyle) = 0;
    
    virtual HRESULT get_SelectedStyle( 
        /* [out] */ ISkpStyle **ppStyle) = 0;
    
    virtual HRESULT get_StyleByGuid( 
        /* [in] */ BSTR guid,
        /* [out] */ ISkpStyle **ppStyle) = 0;
    
    virtual HRESULT get_StyleByPath( 
        /* [in] */ BSTR path,
        /* [out] */ ISkpStyle **ppStyle) = 0;
    
    virtual HRESULT SaveStyle( 
        /* [in] */ BSTR path,
        /* [in] */ ISkpStyle *pStyle) = 0;
    
    virtual HRESULT get_ActiveStyleChanged( 
        /* [out] */ BOOL *pChanged) = 0;
    
    virtual ~ISkpStyleManager() {}
};

//----------------------------------------------------
extern const IID IID_ISkpStyleManagerM;

struct ISkpStyleManagerM : public IUnknown
{
public:
    virtual HRESULT AddStyle( 
        /* [in] */ ISkpStyle *pStyle) = 0;
    
    virtual HRESULT ApplyStyleToPage( 
        /* [in] */ ISkpStyle *pStyle,
        /* [in] */ ISkpPage *pSkpPage) = 0;
    
    virtual ~ISkpStyleManagerM() {}
};

//----------------------------------------------------
extern const IID IID_ISkpStyle;

struct ISkpStyle : public IUnknown
{
public:
    virtual HRESULT get_Name( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_DisplayName( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_Description( 
        /* [out] */ BSTR *pDesc) = 0;
    
    virtual HRESULT get_Path( 
        /* [out] */ BSTR *pPath) = 0;
    
    virtual HRESULT get_Guid( 
        /* [out] */ BSTR *pVal) = 0;
    
    virtual HRESULT get_DisplaysWatermark( 
        /* [out] */ BOOL *pVal) = 0;
    
    virtual ~ISkpStyle() {}
};

//----------------------------------------------------
extern const IID IID_ISkpStyleM;

struct ISkpStyleM : public IUnknown
{
public:
    virtual HRESULT put_Name( 
        /* [in] */ BSTR str) = 0;
    
    virtual HRESULT put_Guid( 
        /* [in] */ BSTR str) = 0;
    
    virtual ~ISkpStyleM() {}
};

//----------------------------------------------------
extern const IID IID_ISkpStyles;

struct ISkpStyles : public IUnknown
{
public:
    virtual HRESULT get_Count( 
        /* [out] */ long *pVal) = 0;
    
    virtual HRESULT get_Item( 
        /* [in] */ long Index,
        /* [out] */ ISkpStyle **pVal) = 0;
    
    virtual HRESULT get__NewEnum( 
        /* [out] */ IUnknown **enumeration) = 0;
    
    virtual ~ISkpStyles() {}
};

//================================================

extern const IID LIBID_SketchUp;
extern const CLSID CLSID_SkpCurve;
extern const CLSID CLSID_SkpArcCurve;
extern const CLSID CLSID_SkpLineCurve;
extern const CLSID CLSID_SkpBoundingBox3d;
extern const CLSID CLSID_SkpDimensions;
extern const CLSID CLSID_SkpDimensionStyle;
extern const CLSID CLSID_SkpDimensionRadial;
extern const CLSID CLSID_SkpDimensionLinear;
extern const CLSID CLSID_SkpFont;
extern const CLSID CLSID_SkpFonts;
extern const CLSID CLSID_SkpView;
extern const CLSID CLSID_SkpText;
extern const CLSID CLSID_SkpTexts;
extern const CLSID CLSID_SkpOptionsManager;
extern const CLSID CLSID_SkpOptionsProvider;
extern const CLSID CLSID_SkpFaceTextureCoordsAttribute;
extern const CLSID CLSID_SkpAttributeDictionary;
extern const CLSID CLSID_SkpAttribute;
extern const CLSID CLSID_SkpAttributes;
extern const CLSID CLSID_SkpPlane;
extern const CLSID CLSID_SkpNamedValue;
extern const CLSID CLSID_SkpEntities;
extern const CLSID CLSID_SkpPolygonMesh;
extern const CLSID CLSID_SkpFace;
extern const CLSID CLSID_SkpFaces;
extern const CLSID CLSID_SkpTextureWriter;
extern const CLSID CLSID_SkpApplication;
extern const CLSID CLSID_SkpDocument;
extern const CLSID CLSID_SkpEdge;
extern const CLSID CLSID_SkpEdges;
extern const CLSID CLSID_SkpNamedValues;
extern const CLSID CLSID_SkpVertex;
extern const CLSID CLSID_SkpVertices;
extern const CLSID CLSID_SkpLayer;
extern const CLSID CLSID_SkpLayers;
extern const CLSID CLSID_SkpMaterial;
extern const CLSID CLSID_SkpMaterials;
extern const CLSID CLSID_SkpTexture;
extern const CLSID CLSID_SkpTextures;
extern const CLSID CLSID_SkpTransform;
extern const CLSID CLSID_SkpComponentDefinition;
extern const CLSID CLSID_SkpComponentDefinitions;
extern const CLSID CLSID_SkpComponentInstance;
extern const CLSID CLSID_SkpComponentInstances;
extern const CLSID CLSID_SkpEdgeUse;
extern const CLSID CLSID_SkpEdgeUses;
extern const CLSID CLSID_SkpLoop;
extern const CLSID CLSID_SkpLoops;
extern const CLSID CLSID_SkpPolyline3d;
extern const CLSID CLSID_SkpPolyline3ds;
extern const CLSID CLSID_SkpConstructionLine;
extern const CLSID CLSID_SkpConstructionLines;
extern const CLSID CLSID_SkpConstructionPoint;
extern const CLSID CLSID_SkpConstructionPoints;
extern const CLSID CLSID_SkpGroup;
extern const CLSID CLSID_SkpGroups;
extern const CLSID CLSID_SkpImage;
extern const CLSID CLSID_SkpImages;
extern const CLSID CLSID_SkpCamera;
extern const CLSID CLSID_SkpPage;
extern const CLSID CLSID_SkpPages;
extern const CLSID CLSID_SkpEntityTransformPair;
extern const CLSID CLSID_SkpEntityTransformPairs;
extern const CLSID CLSID_SkpOpening;
extern const CLSID CLSID_SkpOpenings;
extern const CLSID CLSID_SkpPoint3d;
extern const CLSID CLSID_SkpVector3d;
extern const CLSID CLSID_SkpSelectionSet;
extern const CLSID CLSID_SkpSectionPlane;
extern const CLSID CLSID_SkpSectionPlanes;
extern const CLSID CLSID_SkpUVHelper;
extern const CLSID CLSID_SkpCoordinateSystem;
extern const CLSID CLSID_SkpEntityProviderStatistics;
extern const CLSID CLSID_SkpRenderer;
extern const CLSID CLSID_SkpStyleManager;
extern const CLSID CLSID_SkpStyle;
extern const CLSID CLSID_SkpStyles;
extern const CLSID CLSID_SkpCameraM;
extern const CLSID CLSID_SkpNamedValuesM;

#endif // if  not _WINDOWS//========================================================================
#endif // SKETCHUP_INTERFACES_DEFINED
