/* PRODRAWINGVIEW.H */



#ifndef PRODRAWINGVIEWDOTH
#define PRODRAWINGVIEWDOTH

#include <ProANSI.h>

PRO_BEGIN_C_DECLS

#include <ProUtil.h>
#include <ProDimension.h>
#include <ProObjects.h>
#include <ProSelection.h>
#include <ProToolkit.h>
#include <ProView.h>
#include <ProMdlUnits.h>
#include <ProModelitem.h>
#include <ProDtlitem.h>
#include <ProDrawing.h>
#include <ProXsec.h>


/*ENUMS*/


typedef enum 
{
PRO_VIEW_GENERAL = 0,
PRO_VIEW_PROJECTION = 1,
PRO_VIEW_AUXILIARY = 2,
PRO_VIEW_DETAIL = 3,
PRO_VIEW_REVOLVE = 4,
PRO_VIEW_COPY_AND_ALIGN = 6,
PRO_VIEW_OF_FLAT_TYPE = 8,
PRO_VIEW_COMPOSITE_PLY = 9,
PRO_VIEW_COMPOSITE_FLAT_PLY = 10
} ProViewType;

typedef enum 
{
PRO_VIEW_ORIENT_NAME = 1,
PRO_VIEW_ORIENT_GEOM_REF = 2,
PRO_VIEW_ORIENT_ANGLE = 3
} ProDrawingViewOrientationType;

typedef enum 
{
PRO_DETAIL_BOUNDARY_CIRCLE = 1,
PRO_DETAIL_BOUNDARY_ELLIPSE = 2,
PRO_DETAIL_BOUNDARY_HORZ_VER_ELLIPSE = 3,
PRO_DETAIL_BOUNDARY_SPLINE = 4,
PRO_DETAIL_BOUNDARY_ASME_CIRCLE = 5
} ProViewDetailBoundaryType;



typedef enum 
{
  PRO_VIEW_FULL_AREA = 0,
  PRO_VIEW_HALF_AREA = 1,
  PRO_VIEW_BROKEN_AREA = 2,
  PRO_VIEW_PARTIAL_AREA = 3
} ProDrawingViewVisibleareaType;

typedef enum 
{
PRO_VIEW_BROKEN_LINE_STRAIGHT = 0,
PRO_VIEW_BROKEN_LINE_SKETCH = 1,
PRO_VIEW_BROKEN_LINE_S_CURVE_OUTLINE = 2,
PRO_VIEW_BROKEN_LINE_S_CURVE_GEOMETRY = 3,
PRO_VIEW_BROKEN_LINE_HEART_BEAT_OUTLINE = 4,
PRO_VIEW_BROKEN_LINE_HEART_BEAT_GEOMETRY = 5
} ProViewBrokenLineStyle;

typedef enum 
{
PRO_VIEW_BROKEN_DIR_HORIZONTAL = 1,
PRO_VIEW_BROKEN_DIR_VERTICAL = 2
}ProViewBrokenDir;


typedef enum 
{
PRO_VIEW_ALIGN_HORIZONTAL = 1,
PRO_VIEW_ALIGN_VERTICAL = 2
}ProDrawingViewAlignStyle;


typedef enum 
{
PRO_VIEW_SECTION_AREA_FULL = 1,
PRO_VIEW_SECTION_AREA_HALF = 2,
PRO_VIEW_SECTION_AREA_LOCAL = 3,
PRO_VIEW_SECTION_AREA_UNFOLD = 4,
PRO_VIEW_SECTION_AREA_ALIGNED = 5
}ProDrawingViewSectionAreaType;

typedef enum
{
PRO_VIEW_MODEL_COLOR = 1,
PRO_VIEW_DRAWING_COLOR = 2
}ProDrawingViewColorSource;


typedef enum
{
PRO_VIEW_NO_SECTION = -1,
PRO_VIEW_TOTAL_SECTION = 0,
PRO_VIEW_AREA_SECTION = 1,
PRO_VIEW_PART_SURF_SECTION = 2,
PRO_VIEW_3D_SECTION = 3
}ProDrawingViewSectionType;

typedef enum
{
PRO_HVL_NONE = 1,
PRO_HVL_SOLID = 2,
PRO_HVL_SYMMETRY = 3,
PRO_HVL_SYMMETRY_ISO = 4,
PRO_HVL_SYMMETRY_ASME = 5
}ProDrawingLineStandardType;

/*APIs*/

extern ProError ProDrawingViewNameSet (ProDrawing drawing, ProView view, ProName name);
/*
    Purpose: Set the drawing view name

    Input Arguments:
        drawing - Drawing handle
        view - The view handle
        name - Name of the view to be set

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_E_FOUND - The view name could not set because another view has 
                         this name and allow_duplicate_view_names is no.
        PRO_TK_GENERAL_ERROR - The view name could not set

*/

extern ProError ProDrawingViewOrientationFromNameSet (ProDrawing drawing, ProView view, ProName mdl_view_name, ProName orientation_name, double  x_angle, double  y_angle);
/*
    Purpose: Set the view orientation of a general view from the view name

    Input Arguments:
        drawing - Drawing handle
        view - The view handle
        mdl_view_name - Name of the model view
        orientation_name - Name of the orientation
        x_angle - X angle for the user defined orientation
        y_angle - Y angle for the user defined orientation

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The orientation from names could not set

*/

extern ProError ProDrawingViewOrientationFromReferenceSet (ProDrawing drawing, ProView view, ProName ref_name_1, ProSelection ref_sel_1, ProName ref_name_2, ProSelection ref_sel_2);
/*
    Purpose: Set the view orientation of a general view from the reference 
             selection

    Input Arguments:
        drawing - Drawing handle
        view - The view handle
        ref_name_1 - Name of the first model orientation
        ref_sel_1 - Selection of the first reference selection
        ref_name_2 - Name of the second model orientation
        ref_sel_2 - Selection of the second reference selection

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The orientation from reference could not set

*/


extern ProError ProDrawingViewOrientationFromAngleSet (ProDrawing drawing, ProView view, ProName rot_ref_name, ProSelection sel, double  angle);
/*
    Purpose: Set the view orientation of a general view from the angle

    Input Arguments:
        drawing - Drawing handle
        view - The view handle
        rot_ref_name - Rotational angle reference name It can be "Normal" or 
                       "Horizontal" or "Vertical" or "Edge/Axis"
        sel - Selection of the axis or edge, can be NULL for other type
        angle - angle with the reference

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The orientation from angle could not set

*/

extern ProError ProDrawingViewProjectionSet (ProDrawing drawing,
	 ProView parent_view, ProView view);
/*
    Purpose: Set view as projection

    Input Arguments:
        drawing - Drawing handle
        parent_view - The view handle of the parent view
        view - view to be projected

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The view projection could not set

*/

extern ProError ProDrawingViewFlagSet (ProDrawing drawing, ProView view, ProBoolean flag);
/*
    Purpose: Set projection arrow flag for the projection and detail views.

    Input Arguments:
        drawing - Drawing handle
        view - The view handle
        flag - TRUE, if flag is set

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The view flag could not set

*/

extern ProError ProDrawingViewDetailReferenceSet (ProDrawing drawing, ProView view, ProSelection ref_sel);
/*
    Purpose: Set reference point of detail view

    Input Arguments:
        drawing - Drawing handle
        view - The view handle
        ref_sel - Reference selection of the detailed view

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The reference could not set

*/

extern ProError ProDrawingViewDetailCurvedataSet (ProDrawing drawing, ProView view, ProCurvedata* curve_data);
/*
    Purpose: Set spline for detail view parent

    Input Arguments:
        drawing - Drawing handle
        view - The view handle
        curve_data - Spline data (see Notes: below)

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The spline data could not set

*/

extern ProError ProDrawingViewAuxiliaryCreate (ProDrawing drawing, ProSelection selection, ProPoint3d point, ProView* view);
/*
    Purpose: Create a auxiliary view

    Input Arguments:
        drawing - Drawing handle
        selection - selection reference
        point - point location of the new view

    Output Arguments:
        view - The auxiliary view created

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The auxiliary view could not be created

*/

extern ProError ProDrawingViewAuxiliarySet (ProDrawing drawing, ProView view, ProSelection  selection);
/*
    Purpose: Set view as auxiliary

    Input Arguments:
        drawing - Drawing handle
        view - The view handle
        selection - selection

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The auxiliary view could not set

*/

extern ProError ProDrawingViewFullVisibleAreaSet (ProDrawing drawing, ProView view);
/*
    Purpose: Set the full visible area for a view

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The visible area could not set

*/

extern ProError ProDrawingViewBrokenVisibleAreaSet (ProDrawing drawing, 
	ProView parent_view, ProViewBrokenDir dir, ProSelection first_sel,
	ProSelection second_sel, ProViewBrokenLineStyle line_style, 
	ProCurvedata* curve_data);
/*
    Purpose: Set the partial visible area for a drawing view

    Input Arguments:
        drawing - Drawing handle
        parent_view - Parent view
        dir - direction of the broken line
        first_sel - First selection point
        second_sel - Second selection point
        line_style - Broken line style
        curve_data - spline curve data, valid for the line style 
                     PRO_VIEW_BROKEN_LINE_S_CURVE_GEOMETRY

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The visible area of the broken view could not 
                               set

*/

extern ProError ProDrawingView3DSectionSet (ProDrawing drawing, ProView view, ProName sec_name, ProBoolean show_x_hatch);
/*
    Purpose: Set the 3D section for a view

    Input Arguments:
        drawing - Drawing handle
        view - The view handle
        sec_name - Name of the 3D section
        show_x_hatch - PRO_B_TRUE, is X-hatching is to be shown

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed

*/

extern ProError ProDrawingViewSinglepartSectionSet (ProDrawing drawing, ProView view, ProSelection ref_sel);
/*
    Purpose: Set the single part section for a view.

    Input Arguments:
        drawing - Drawing handle
        view - The view handle
        ref_sel - Selection reference of part surface

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed

*/

extern ProError ProDrawingViewSimplifiedSet (ProDrawing drawing, ProView view, ProSimprep* simplified_ref);
/*
    Purpose: Set view simplified rep

    Input Arguments:
        drawing - Drawing handle
        view - The view handle
        simplified_ref - Simplified representation

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed

*/

extern ProError ProDrawingViewExplodedSet (ProDrawing drawing, ProView view, ProBoolean exploded_state);
/*
    Purpose: Set the exploded state of the view

    Input Arguments:
        drawing - Drawing handle
        view - The view handle
        exploded_state - The exploded state

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The exploded state could not set

*/

extern ProError ProDrawingViewOriginSet (ProDrawing drawing, ProView view, ProPoint3d location, ProSelection sel_ref);
/*
    Purpose: Set the view origin

    Input Arguments:
        drawing - Drawing handle
        view - The view handle
        location - The location of the view origin
        sel_ref - selection reference

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The view origin could not be set

*/

extern ProError ProDrawingViewAlignmentSet (ProDrawing drawing, ProView view_reference, ProView view, ProDrawingViewAlignStyle align_style, ProSelection align_ref_1, ProSelection align_ref_2);
/*
    Purpose: Set view alignment to view

    Input Arguments:
        drawing - Drawing handle
        view_reference - The reference view
        view - The view to be aligned
        align_style - Horizontal or vetrical style
        align_ref_1 - Alignment reference of the reference view, NULL if view 
                      origin
        align_ref_2 - Alignment reference of the aligned view, NULL if view 
                      origin

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The view alignment could not set

*/

extern ProError ProDrawingViewErase (ProDrawing drawing, ProView view);
/*
    Purpose: Erase the view

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The view could not be erased

*/

extern ProError ProDrawingViewResume (ProDrawing drawing, ProView view);
/*
    Purpose: Resume the view

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The view could not be resumed

*/



extern ProError ProDrawingViewTypeGet (ProDrawing drawing, ProView view, ProViewType* type);
/*
    Purpose: Get view type

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        type - view type (General, projection, detailed, auxiliary, revolved, 
               copy and align, of flat ply)

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The drawing view type could not get

*/

extern ProError ProDrawingViewFlagGet (ProDrawing drawing, ProView view, ProBoolean* flag);
/*
    Purpose: Get projection arrow flag for the projection and detail views.

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        flag - TRUE, if flag is set

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The view flag could not get

*/

extern ProError ProDrawingViewAuxiliaryInfoGet (ProDrawing drawing, ProView view, 
			ProSelection* selection, ProPoint3d view_location);
/*
    Purpose: Get the auxiliary view information

    Input Arguments:
        drawing - Drawing handle
        view - the view

    Output Arguments:
        selection - selection reference
        view_location - point location of the new view

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - Could not get auxiliary view information.

*/

extern ProError ProDrawingViewParentGet (ProDrawing drawing, ProView view, ProView* parent_view);
/*
    Purpose: Get the parent view of a view

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        parent_view - Parent view

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed
        PRO_TK_E_NOT_FOUND - Parent view was not found

*/

extern ProError ProDrawingViewChildrenGet (ProDrawing drawing, ProView view, ProView** view_children, int* no_children);
/*
    Purpose: Get the children of a view

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        view_children - Children of views
        no_children - number of children

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed
        PRO_TK_E_NOT_FOUND - No children found

*/

extern ProError ProDrawingViewSimplifiedGet (ProDrawing drawing, ProView view, ProSimprep* simplified_ref);
/*
    Purpose: Get the simplified rep

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        simplified_ref - Simplified representation

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed
        PRO_TK_INVALID_TYPE - The top model for the view is not a solid.

*/

extern ProError ProDrawingViewDetailReferenceGet (ProDrawing drawing, ProView view, ProSelection* ref_sel);
/*
    Purpose: Get reference point of detail view

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        ref_sel - Reference selection of the detailed view

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The reference could not set
        PRO_TK_E_NOT_FOUND - Could not found reference selection.

*/

extern ProError ProDrawingViewDetailCurvedataGet (ProDrawing drawing, ProView view, ProCurvedata* curve_data);
/*
    Purpose: Get spline for detail view parent

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        curve_data - Spline data (see Notes: below) Notes: The curve_data 
                     spline is in the space defined by 0,0,0 mapping to the 
                     view's reference point in world space, directions of X/Y/Z 
                     matching the X/Y/Z of world space, and the unit length 
                     being 'one inch in the top model of the view.' To map this 
                     to world space, first 1) scale the spline by 'inch to top 
                     model unit', then 2) scale the spline by 'top model unit 
                     to world unit', which is the scale of the transform from 
                     ProDrawingViewTransformGet(view_to_drawing = TRUE), then 
                     3) translate the curve to place 0,0 at the reference 
                     point, To map a spline in world space for use here, do the 
                     inverse: translate it by the reference point to place that 
                     point at 0,0, then scale by world-to-model (inverse of the 
                     scale of the view's transformation matrix), and scale by 
                     top-model-unit-to-inch.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The spline data could not get

*/

extern ProError ProDrawingViewDetailBoundaryGet (ProDrawing drawing, ProView view, ProViewDetailBoundaryType* type, ProBoolean* show);
/*
    Purpose: Get boundary for detail view

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        type - supported boundary type
        show - geometry data

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The boundary could not set for the detail view

*/

extern ProError ProDrawingViewVisibleareaTypeGet (ProDrawing drawing, ProView view, ProDrawingViewVisibleareaType* visible_area);
/*
    Purpose: Get the visible area type

    Input Arguments:
        drawing - drawing handle
        view - view handle
        visible_area - Visible area type

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed

*/

extern ProError ProDrawingViewPartialVisibleAreaGet (ProDrawing drawing, ProView parent_view, ProSelection* ref_point, ProCurvedata* curve_data, ProBoolean* show_boundary);
/*
    Purpose: Get the partial visible area for a drawing view

    Input Arguments:
        drawing - Drawing handle
        parent_view - Parent view

    Output Arguments:
        ref_point - reference selection point on the view
        curve_data - spline curve data
        show_boundary - PRO_B_TRUE, to show the boundary Notes: The curve_data 
                        spline is in the space defined by 0,0,0 mapping to the 
                        view's reference point in world space, directions of 
                        X/Y/Z matching the X/Y/Z of world space, and the unit 
                        length being 'one inch in the top model of the view.' 
                        To map this to world space, first 1) scale the spline 
                        by 'inch to top model unit', then 2) scale the spline 
                        by 'top model unit to world unit', which is the scale 
                        of the transform from 
                        ProDrawingViewTransformGet(view_to_drawing = TRUE), 
                        then 3) translate the curve to place 0,0 at the 
                        reference point, To map a spline in world space for use 
                        here, do the inverse: translate it by the reference 
                        point to place that point at 0,0, then scale by 
                        world-to-model (inverse of the scale of the view's 
                        transformation matrix), and scale by 
                        top-model-unit-to-inch.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed

*/

extern ProError ProDrawingViewBrokenNumberGet (ProDrawing drawing, ProView broken_view, int* number);
/*
    Purpose: Get the number of settings for a broken view

    Input Arguments:
        drawing - Drawing handle
        broken_view - Broken view handle

    Output Arguments:
        number - Number of setting for the broken view

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed

*/

extern ProError ProDrawingViewBrokenVisibleAreaGet (ProDrawing drawing, 
	ProView parent_view, int index, ProViewBrokenDir* dir, 
	ProSelection* first_sel, ProSelection* second_sel, 
	ProViewBrokenLineStyle* line_style, ProCurvedata* curve_data);
/*
    Purpose: Get the partial visible area setting for the broken view

    Input Arguments:
        drawing - Drawing handle
        parent_view - Parent view
        index - Index of the broken view. Here index starts with 1.

    Output Arguments:
        dir - direction of the broken line
        first_sel - First selection point
        second_sel - Second selection point
        line_style - Broken line style
        curve_data - spline curve data, valid for the line style 
                     PRO_VIEW_BROKEN_LINE_S_CURVE_GEOMETRY Notes: The 
                     curve_data spline is in the space defined by 0,0,0 mapping 
                     to the view's reference point in world space, directions 
                     of X/Y/Z matching the X/Y/Z of world space, and the unit 
                     length being 'one inch in the top model of the view.' To 
                     map this to world space, first 1) scale the spline by 
                     'inch to top model unit', then 2) scale the spline by 'top 
                     model unit to world unit', which is the scale of the 
                     transform from ProDrawingViewTransformGet(view_to_drawing 
                     = TRUE), then 3) translate the curve to place 0,0 at the 
                     reference point, To map a spline in world space for use 
                     here, do the inverse: translate it by the reference point 
                     to place that point at 0,0, then scale by world-to-model 
                     (inverse of the scale of the view's transformation 
                     matrix), and scale by top-model-unit-to-inch.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The visible area of the broken view could not 
                               set

*/

extern ProError ProDrawingViewSectionTypeGet (ProDrawing drawing, ProView view, ProDrawingViewSectionType* section_type);
/*
    Purpose: Get section type for a view

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        section_type - section type

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed

*/


extern ProError ProDrawingView2DSectionNumberGet (ProDrawing drawing, ProView view, int* number);
/*
    Purpose: Get the number of setting for the 2D section view

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        number - Number of setting for the 2D section

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed

*/


extern ProError ProDrawingView2DSectionGet (ProDrawing drawing, ProView view, int index, ProName sec_name, ProDrawingViewSectionAreaType *sec_area_type, ProSelection *ref_sel, ProCurvedata *curve_data, ProView *arrow_display_view);
/*
    Purpose: Get the 2D section for a view

    Input Arguments:
        drawing - Drawing handle
        view - The view handle
        index - Index of the setting

    Output Arguments:
        sec_name - Name of the section
        sec_area_type - Type of section area
        ref_sel - Reference selection
        curve_data - The spline curve data
        arrow_display_view - The view, where section arrow to be displayed 
                             Notes: The curve_data spline is in the space 
                             defined by 0,0,0 mapping to the local xsec's 
                             reference point in world space, directions of 
                             X/Y/Z matching the X/Y/Z of world space, and the 
                             unit length being 'one inch in the top model of 
                             the view.' To map this to world space, first 1) 
                             scale the spline by 'inch to top model unit', then 
                             2) scale the spline by 'top model unit to world 
                             unit', which is the scale of the transform from 
                             ProDrawingViewTransformGet(view_to_drawing = 
                             TRUE), then 3) translate the curve to place 0,0 at 
                             the reference point, To map a spline in world 
                             space for use here, do the inverse: translate it 
                             by the reference point to place that point at 0,0, 
                             then scale by world-to-model (inverse of the scale 
                             of the view's transformation matrix), and scale by 
                             top-model-unit-to-inch.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed

*/


extern ProError ProDrawingView3DSectionGet (ProDrawing drawing, ProView view, ProName sec_name, ProBoolean* show_x_hatch);
/*
    Purpose: Get the 3D section for a view

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        sec_name - Name of the 3D section
        show_x_hatch - PRO_B_TRUE, is X-hatching is to be shown

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed

*/

extern ProError ProDrawingViewSinglepartSectionGet (ProDrawing drawing, ProView view, ProSelection* ref_sel);
/*
    Purpose: Get the single part section for a view.

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        ref_sel - Selection reference of part surface

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed

*/

extern ProError ProDrawingViewExplodedGet (ProDrawing drawing, ProView view, ProBoolean* exploded_state);
/*
    Purpose: Get the exploded state of the view

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        exploded_state - The exploded state

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The exploded state could not get

*/

extern ProError ProDrawingViewOriginGet (ProDrawing drawing, ProView view, ProPoint3d location, ProSelection* sel_ref);
/*
    Purpose: Get the view origin

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        location - The location of the view origin
        sel_ref - selection reference

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The view origin could not be get

*/

extern ProError ProDrawingViewAlignmentGet (ProDrawing drawing, ProView view, ProDrawingViewAlignStyle* align_style, ProView* view_reference, ProSelection* align_ref_1, ProSelection* align_ref_2);
/*
    Purpose: Get view alignment to view

    Input Arguments:
        drawing - Drawing handle
        view - The aligned view

    Output Arguments:
        align_style - Horizontal or vetrical style
        view_reference - The reference view
        align_ref_1 - Alignment reference of the reference view, NULL if view 
                      origin
        align_ref_2 - Alignment reference of the aligned view, NULL if view 
                      origin

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The view alignment could not get

*/


extern ProError ProDrawingViewColorSourceGet (ProDrawing drawing, ProView view, ProDrawingViewColorSource* color_source);
/*
    Purpose: Get the color source of the view representation

    Input Arguments:
        drawing - drawing handle
        view - view handle

    Output Arguments:
        color_source - The color source of the drawing

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed

*/

extern ProError ProDrawingViewPerspectiveScaleGet (ProDrawing drawing, ProView view, double* eye_dist, double* view_dia);
/*
    Purpose: Get the perspective scale

    Input Arguments:
        drawing - drawing handle
        view - view handle

    Output Arguments:
        eye_dist - Eye point distance
        view_dia - View Diameter

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed
        PRO_TK_E_NOT_FOUND - The current scale is not in the perspective scale

*/

extern ProError ProDrawingViewIsErased (ProDrawing drawing, ProView view, ProBoolean* is_erased);
/*
    Purpose: Find the view is erased or not

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        is_erased - Pro_B_TRUE, is view erased

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed

*/
extern ProError ProDrawingViewRevolveInfoGet (ProDrawing drawing, ProView view, ProXsec *x_sec, ProSelection* selection, ProPoint3d view_location);
/*
    Purpose: Get the revolved view information

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        x_sec - Cross section
        selection - selection
        view_location - point location of new revolved view

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The revolve view could not be created

*/
extern ProError ProDrawingViewRevolveCreate (ProDrawing drawing,ProXsec* x_sec, ProSelection selection, ProPoint3d view_location, ProView* view);
/*
    Purpose: Create revolved view

    Input Arguments:
        drawing - Drawing handle
        x_sec - Cross section
        selection - selection
        view_location - point location of new revolved view

    Output Arguments:
        view - New revolved view

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The revolve view could not be created

*/

extern ProError ProDrawingViewDetailCreate( ProDrawing drawing, ProView parent_view, ProSelection ref_point, ProCurvedata* curve_data, ProPoint3d location, ProView* view);
/*
    Purpose: Create a detailed view

    Input Arguments:
        drawing - Drawing handle
        parent_view - Parent view
        ref_point - reference point on the parent view
        curve_data - spline curve data (see Notes: below)
        location - location of the new view

    Output Arguments:
        view - New detailed view Notes: The curve_data spline is in world 
               space, and must enclose the reference point (in world space, on 
               the parent view). In particular, if you have a spline from 
               another detail view retrieved by 
               ProDrawingViewDetailCurvedataGet, and wish to make this detail 
               view with 'the same spline shape', driven by a different 
               reference point in the same parent view, you would scale that 
               spline by inches-to-top-model-units, and scale it by 
               model-to-world, and translate it by the new reference point (in 
               world space, on the parent view).

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The detail view could not be created

*/
extern ProError ProDrawingViewHalfVisibleAreaSet(
                                      ProDrawing drawing, ProView view, 
                                      ProSelection plane_ref,
				      ProBoolean keep_side,
                                      ProDrawingLineStandardType line_standard);
/*
    Purpose: Set view half visible area for a drawing view

    Input Arguments:
        drawing - Drawing handle
        view - The view handle
        plane_ref - Selection reference for the half visible area
        keep_side - The side of view to display. PRO_B_TRUE: Left half of the 
                    view will be displayed PRO_B_FALSE: Right half of the view 
                    will be displayed.
        line_standard - Type of line

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The visible area could not set

*/

extern ProError ProDrawingView2DSectionSet (ProDrawing drawing, ProView view, ProName sec_name, 
		ProDrawingViewSectionAreaType sec_area_type, ProSelection ref_sel, 
		ProCurvedata *curve_data, ProView arrow_display_view);
/*
    Purpose: Set the 2D section for a view

    Input Arguments:
        drawing - Drawing handle
        view - The view handle
        sec_name - Name of the section
        sec_area_type - Type of section area
        ref_sel - Reference selection. NULL can be passed only if sec_area_type 
                  is PRO_VIEW_SECTION_AREA_FULL or 
                  PRO_VIEW_SECTION_AREA_UNFOLD.
        curve_data - The spline curve data. NULL can be passed in all types of 
                     sec_area_type other than PRO_VIEW_SECTION_AREA_LOCAL.
        arrow_display_view - The view, where section arrow to be displayed.This 
                             can be NULL.

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed

*/

extern ProError ProDrawingViewHalfVisibleAreaGet (ProDrawing drawing, ProView view,
                                           ProSelection* plane_ref,
					   ProBoolean* keep_side,
					   ProDrawingLineStandardType* line_standard);
/*
    Purpose: Get view half visible area for a drawing view

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        plane_ref - Selection reference for the half visible area
        keep_side - The side of the view displayed PRO_B_TRUE: Left half of the 
                    view is displayed. PRO_B_FALSE: Right half of the view is 
                    displayed.
        line_standard - Type of line

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The visible area could not set

*/

extern ProError ProDrawingViewPartialVisibleAreaSet (ProDrawing drawing,
                                              ProView view,
					      ProSelection ref_point,
					      ProCurvedata* curve_data,
					      ProBoolean show_boundary);
/*
    Purpose: Set the partial visible area for a drawing view

    Input Arguments:
        drawing - Drawing handle
        view - Parent view
        ref_point - Reference selection point on the view
        curve_data - Spline curve data
        show_boundary - PRO_B_TRUE, to show the boundary

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed

*/

extern ProError ProDrawingViewDetailBoundarySet (ProDrawing drawing, ProView view,
                                           ProViewDetailBoundaryType type,
					   ProBoolean show);
/*
    Purpose: Set boundary for detail view

    Input Arguments:
        drawing - Drawing handle
        view - The view handle
        type - Supported boundary type
        show - Geometry data

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The boundary could not set for the detail view

*/

extern ProError ProDrawingView2DSectionTotalSet (ProDrawing drawing, ProView view);
/*
    Purpose: Set the model edge visibility to Total for a 2D section in a view.

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_NO_CHANGE - Visibility is already set to Total.
        PRO_TK_CANT_MODIFY - Total Visibility cannot be set because there may 
                             be multiple section or section is not a full 
                             section.
        PRO_TK_GENERAL_ERROR - The function failed

*/

extern ProError ProDrawingView2DSectionAreaSet  (ProDrawing drawing, ProView view);
/*
    Purpose: Set the model edge visibility to Area for a 2D section in a view.

    Input Arguments:
        drawing - Drawing handle
        view - The view handle

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_NO_CHANGE - Visibility is already set to Area.
        PRO_TK_CANT_MODIFY - Total Visibility cannot be set because there may 
                             be multiple section or section is not a full 
                             section.
        PRO_TK_GENERAL_ERROR - The function failed

*/


extern ProError ProDrawingView2DSectionFlip (ProDrawing drawing, ProView view, int index);
/*
    Purpose: Flips the drawing view 2D cross-section.

    Input Arguments:
        drawing - Drawing handle
        view - The view handle
        index - Index of the setting

    Output Arguments:
        none

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed.

*/

extern ProError ProDrawingView2DSectionFlipGet (ProDrawing drawing, ProView view, int index, ProBool *p_flip);
/*
    Purpose: Get flip state of 2D cross-section for a drawing view.

    Input Arguments:
        drawing - Drawing handle
        view - The view handle
        index - Index of the setting

    Output Arguments:
        p_flip - Flip state of the cross-section in view.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - The function failed.

*/

extern ProError ProDrawingDraftViewsCollect (ProDrawing drawing, ProView **views);
/*
    Purpose: Collects all draft views in the specified drawing. These views are 
             created from Sketch tab in drawing.

    Input Arguments:
        drawing - the drawing

    Output Arguments:
        views - a list of draft views. The function allocates the memory for 
                this argument. To free the memory, call <b>ProArrayFree()</b>.

    Return Values:
        PRO_TK_NO_ERROR - Success
        PRO_TK_BAD_INPUTS - One or more arguments was invalid
        PRO_TK_E_NOT_FOUND - No views were found

*/
                    
extern ProError ProDrawingViewIsDraft (ProDrawing drawing, ProView view, ProBoolean *is_draft);
/*
    Purpose: Determines if the view specified by view is draft view. These 
             views are created from Sketch tab in drawing.

    Input Arguments:
        drawing - The drawing
        view - The view identifier

    Output Arguments:
        is_draft - PRO_B_TRUE if the view specified by view is a draft view.

    Return Values:
        PRO_TK_NO_ERROR - Success
        PRO_TK_BAD_INPUTS - One or more arguments was invalid

*/

extern ProError ProDrawingDraftViewCreate (ProDrawing drawing, ProDtlentity* entities, ProView *view);
/*
    Purpose: Create draft view in drawing sheet. These views are created from 
             Sketch tab in drawing.

    Input Arguments:
        drawing - The drawing.
        entities - Must contain at least one draft entity. Entities might or 
                   might not be related to any view.

    Output Arguments:
        view - Pointer to the ProView.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_GENERAL_ERROR - The function failed.
        PRO_TK_BAD_INPUTS - The function was passed a NULL drawing pointer.

*/

extern ProError ProDrawingFlatPlyViewCreate(ProDrawing drawing, ProSolid composite, int sheet_number, ProPly ply, ProPoint3d position, double scale, ProView* view);
/*
    Purpose: Creates a flat ply view in specified drawing. Drawing must be 
             displayed.

    Input Arguments:
        drawing - The drawing.
        composite - The solid. Must be composite solid.
        sheet_number - sheet - Reserved for future use.
        ply - active ply
        position - The position of the view on the screen
        scale - If scale >0, the view has an associated scale. If scale<=0, the 
                view has the default scale.

    Output Arguments:
        view - The view.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - A miscellaneous error occurred, and the function 
                               failed.
        PRO_TK_BAD_CONTEXT - Drawing is not displayed.

*/

extern ProError ProDrawingPlyViewCreate(ProDrawing drawing, ProSolid composite, int sheet_number, ProPly ply, ProPoint3d position, double scale, ProView* view);
/*
    Purpose: Creates a ply view in specified drawing. Drawing must be 
             displayed.

    Input Arguments:
        drawing - The drawing.
        composite - The solid. Must be composite solid.
        sheet_number - The number of the sheet on which to place the view.
        ply - active ply.
        position - The position of the view on the screen.
        scale - If scale >0, the view has an associated scale. If scale<=0, the 
                view has the default scale.

    Output Arguments:
        view - The view.

    Return Values:
        PRO_TK_NO_ERROR - The function succeeded.
        PRO_TK_BAD_INPUTS - One or more input arguments was invalid.
        PRO_TK_GENERAL_ERROR - A miscellaneous error occurred, and the function 
                               failed.
        PRO_TK_BAD_CONTEXT - Drawing is not displayed.

*/

PRO_END_C_DECLS

#endif