'VISUALIB global declarations for Visual Basic

'Constants, types, and Macros

Type POINT2D
    x As Single
    y As Single
End Type

Type POINT2H
    x As Single
    y As Single
    w As Single
End Type

Type POINT3D
    x As Single
    y As Single
    z As Single
End Type

Type POINT3H
    x As Single
    y As Single
    z As Single
    w As Single
End Type

Type rect
    left As Integer
    top As Integer
    right As Integer
    bottom As Integer
End Type

Type Box2D
    xmin As Single
    xmax As Single
    ymin As Single
    ymax As Single
End Type

Type Box3D
    xmin As Single
    xmax As Single
    ymin As Single
    ymax As Single
    zmin As Single
    zmax As Single
End Type


'coordinate type
Global Const VL_2D = 4096   '0x1000
Global Const VL_3D = 8192   '0x2000
Global Const VL_2H = 1024   '0x0400
Global Const VL_3H = 2048   '0x0800

'viewer status flag
Global Const VL_TWOD = 8
Global Const VL_THREED = 16
Global Const VL_CURRENT = 128

'light coordinate mode
Global Const VL_WORLDLIGHT = 1
Global Const VL_CAMERALIGHT = 2
Global Const VL_OBJECTLIGHT = 4

'light type
Global Const VL_POINTLIGHT = 256     '0x0100
Global Const VL_DISTLIGHT = 512      '0x0200
Global Const VL_SPOTLIGHT = 1024     '0x0400
Global Const VL_AREALIGHT = 2048     '0x0800

'color type
Global Const VL_MATERIALAMBIENT = 1
Global Const VL_MATERIALDIFFUSE = 2
Global Const VL_MATERIALSPECULAR = 3
Global Const VL_MATERIALEMISSION = 4
Global Const VL_AMBIENTREFLECT = 5
Global Const VL_DIFFUSEREFLECT = 6
Global Const VL_SPECULARREFLECT = 7
Global Const VL_EMISSIONSTRENGTH = 8
Global Const VL_SHININESS = 9

Global Const VL_LIGHTCOLOR = 16           '0x0010
Global Const VL_AMBIENTCONTRIB = 32       '0x0020
Global Const VL_LIGHTLOCATION = 48        '0x0030
Global Const VL_LIGHTDIRECTION = 64       '0x0040
Global Const VL_LIGHTINTENSITY = 80       '0x0050
Global Const VL_SPOTLIGHTANGLE = 96       '0x0060
Global Const VL_SPOTLIGHTSPREAD = 112     '0x0070

Global Const VL_ATTENUATION = 256         '0x0100
Global Const VL_GLOBALAMBIENT = 512       '0x0200
Global Const VL_BACKGROUNDCOLOR = 768     '0x0300
Global Const VL_SHADINGMETHOD = 1024      '0x0400
Global Const VL_SHADINGMODEL = 1280       '0x0500
Global Const VL_LOCALVIEWER = 1536        '0x0600
Global Const VL_COUNTCLOCKWISE = 1792     '0x0700
Global Const VL_TWOSIDESHADE = 2048       '0x0800
Global Const VL_DEPTHBUFFER = 2304        '0x0900
Global Const VL_BACKFACEREMOVAL = 2560    '0x0A00
Global Const VL_PERTURBMATERIAL = 2816    '0x0B00
Global Const VL_PERTURBNORMAL = 3072      '0x0C00
Global Const VL_PERTURBPIXEL = 3328       '0x0D00
Global Const VL_PERTURBFACET = 3584       '0x0E00
Global Const VL_ENVIRONMENT = 3840        '0x0F00

Global Const VL_INQUIRE = -1

'projection mode
Global Const VL_PROJECTIONMODE = 3
Global Const VL_PERSPECTIVE = 1
Global Const VL_ORTHOGONAL = 2

'standard pen and brush color
Global Const VL_NONE = 0
Global Const VL_RED = 1
Global Const VL_GREEN = 2
Global Const VL_BLUE = 3
Global Const VL_BROWN = 4
Global Const VL_MAGENTA = 5
Global Const VL_CYAN = 6
Global Const VL_WHITE = 7
Global Const VL_GRAY = 8
Global Const VL_LIGHTRED = 9
Global Const VL_LIGHTGREEN = 10
Global Const VL_LIGHTBLUE = 11
Global Const VL_YELLOW = 12
Global Const VL_LIGHTMAGENTA = 13
Global Const VL_LIGHTCYAN = 14
Global Const VL_LIGHTGRAY = 15
Global Const VL_BLACK = 16

'shading method
Global Const VL_WIREFRAME = 1
Global Const VL_SOLIDFILL = 2
Global Const VL_CONTOURSHADE = 4
Global Const VL_GOURAUDSHADE = 8
Global Const VL_PHONGSHADE = 16
Global Const VL_FLATSHADE = 32

'shading model
Global Const VL_PHONGMODEL = 256        '      0x0100
Global Const VL_SPECULARMODEL = 512        '        0x0200

'mark type
Global Const VL_NULLMARK = 0
Global Const VL_CIRCLEMARK = 1
Global Const VL_CROSSMARK = 2
Global Const VL_XMARK = 4
Global Const VL_TRIANGLEMARK = 8
Global Const VL_BOXMARK = 16
Global Const VL_DIAMONDMARK = 32
Global Const VL_HEXAGONMARK = 64
Global Const VL_OCTAGONMARK = 128       '   0x0080

'arrow head type
Global Const VL_NULLARROW = 0
Global Const VL_OPENARROW = 256         '   0X0100
Global Const VL_CLOSEDARROW = 512           '0X0200

'position mark type
Global Const VL_CROSSHAIR = 1
Global Const VL_ORIGIN = 2

'solid texture flag
Global Const VL_MARBLE = 1
Global Const VL_WOODGRAIN = 2
Global Const VL_GRANITE = 4
Global Const VL_BUMPY = 8


'Function Prototypes


'Basic Functions

Declare Function InitializeVisualib Lib "visualib.dll" () As Integer
Declare Sub ExitVisualib Lib "visualib.dll" ()
Declare Sub AboutVisualib Lib "visualib.dll" ()
Declare Sub LicenseInfo Lib "visualib.dll" ()

'utility functions
Declare Function MessageOn Lib "visualib.dll" (ByVal flag%) As Integer
Declare Sub ErrorMessage Lib "visualib.dll" (ByVal msg$)
Declare Sub Message Lib "visualib.dll" (ByVal msg$)
Declare Function SelectColor Lib "visualib.dll" (ByVal color&) As Long

Declare Sub SetPoint2D Lib "visualib.dll" (pt As POINT2D, ByVal x!, ByVal y!)
Declare Sub SetPoint3D Lib "visualib.dll" (pt As POINT3D, ByVal x!, ByVal y!, ByVal z!)
Declare Sub SetPoint2H Lib "visualib.dll" (pt As POINT2H, ByVal x!, ByVal y!, ByVal w!)
Declare Sub SetPoint3H Lib "visualib.dll" (pt As POINT3H, ByVal x!, ByVal y!, ByVal z!, ByVal w!)
Declare Sub SetBox2D Lib "visualib.dll" (box As Box2D, ByVal xmin!, ByVal xmax!, ByVal ymin!, ByVal ymax!)
Declare Sub SetBox3D Lib "visualib.dll" (box As Box3D, ByVal xmin!, ByVal xmax!, ByVal ymin!, ByVal ymax!, ByVal zmin!, ByVal zmax!)

Declare Sub PenColor Lib "visualib.dll" (ByVal hdc%, ByVal color_index%)
Declare Sub BrushColor Lib "visualib.dll" (ByVal hdc%, ByVal color_index%)
Declare Sub TextColor Lib "visualib.dll" (ByVal hdc%, ByVal tcolor%, ByVal bcolor%, ByVal mode%)
Declare Sub PaintColor Lib "visualib.dll" (ByVal hdc%, ByVal pen%, ByVal brush%, ByVal mode%)

Declare Function CreateViewer Lib "visualib.dll" (ByVal vname$, ByVal bot%, ByVal r%, ByVal top%, ByVal l%, ByVal vtype%, ByVal mode%) As Integer
Declare Function DeleteViewer Lib "visualib.dll" (ByVal vid%) As Integer

Declare Function ViewerMappingMode Lib "visualib.dll" (ByVal vid%, ByVal mode%) As Integer
Declare Function CopyViewer Lib "visualib.dll" (ByVal vid1%, ByVal vid2%) As Integer
Declare Function ResetViewer Lib "visualib.dll" (ByVal vid%) As Integer
Declare Function SelectViewer Lib "visualib.dll" (ByVal vid%) As Integer
Declare Function SetViewerName Lib "visualib.dll" (ByVal vid%, ByVal vname$) As Integer
Declare Function GetViewerName Lib "visualib.dll" (ByVal vid%, ByVal vname$) As Integer
Declare Function SetViewport Lib "visualib.dll" (ByVal vid%, ByVal bot%, ByVal r%, ByVal top%, ByVal l%) As Integer
Declare Function GetViewport Lib "visualib.dll" (ByVal vid%, port As rect) As Integer

Declare Function ClearViewer Lib "visualib.dll" (ByVal hdc%, ByVal vid%, ByVal color%) As Integer
Declare Function displayviewerframe Lib "visualib.dll" (ByVal hdc%, ByVal vid%) As Integer
Declare Function DisplayViewerName Lib "visualib.dll" (ByVal hdc%, ByVal vid%, ByVal top%) As Integer

Declare Function BeginDoubleBuffer Lib "visualib.dll" (hdc%, ByVal viewid%) As Integer
Declare Function EndDoubleBuffer Lib "visualib.dll" (hdc%, ByVal viewid%) As Integer
Declare Function UpdateDoubleBuffer Lib "visualib.dll" (ByVal hdc%, ByVal viewid%) As Integer


'2D Functions

Declare Sub Translate2D Lib "visualib.dll" (ByVal x!, ByVal y!)
Declare Sub TranslateTo2D Lib "visualib.dll" (ByVal x!, ByVal y!)
Declare Sub Scale2D Lib "visualib.dll" (ByVal x!, ByVal y!)
Declare Sub PointScale2D Lib "visualib.dll" (ByVal x!, ByVal y!, ByVal sx!, ByVal sy!)
Declare Sub TranScale2D Lib "visualib.dll" (ByVal x!, ByVal y!, ByVal sx!, ByVal sy!)
Declare Sub Shear2D Lib "visualib.dll" (ByVal x!, ByVal y!, ByVal a!, ByVal u!, ByVal v!)
Declare Sub Stretch2D Lib "visualib.dll" (ByVal x!, ByVal y!, ByVal a!, ByVal f!)
Declare Sub Mirror2D Lib "visualib.dll" (ByVal x!, ByVal y!, ByVal a!)
Declare Sub Rotate2D Lib "visualib.dll" (ByVal angle!)
Declare Sub PointRotate2D Lib "visualib.dll" (ByVal x!, ByVal y!, ByVal a!)
 
Declare Function ViewerField2D Lib "visualib.dll" (ByVal vid, l!, bottom!, r!, top!) As Integer

Declare Function Pushtransformation2d Lib "visualib.dll" (m As Any) As Integer
Declare Function PopTransformation2d Lib "visualib.dll" (m As Any) As Integer
Declare Sub ConcatTransformation2D Lib "visualib.dll" (m As Any, ByVal post%)
Declare Sub LoadTransformation2D Lib "visualib.dll" (m As Any)

Declare Function SetProjection2D Lib "visualib.dll" (ByVal vid%, ByVal l!, ByVal bottom!, ByVal r!, ByVal top!) As Integer
Declare Function SetView2D Lib "visualib.dll" (ByVal vid%, ByVal x!, ByVal y!, ByVal a!) As Integer
Declare Function SetWindow2D Lib "visualib.dll" (ByVal vid%, ByVal l!, ByVal b!, ByVal r!, ByVal t!) As Integer

Declare Function MoveViewer2D Lib "visualib.dll" (ByVal vid%, ByVal h!, ByVal v!, ByVal localv%) As Integer
Declare Function RotateViewer2D Lib "visualib.dll" (ByVal vid%, ByVal a!, ByVal localv%) As Integer
Declare Function ZoomViewer2D Lib "visualib.dll" (ByVal vid%, ByVal z!) As Integer

Declare Sub MoveTo2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!)
Declare Sub RMoveTo2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!)
Declare Sub LineTo2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!)
Declare Sub RLineTo2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!)
Declare Sub Line2D Lib "visualib.dll" (ByVal hdc%, ByVal x1!, ByVal y1!, ByVal x2!, ByVal y2!)
Declare Sub RLine2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal dx!, ByVal dy!)
Declare Sub Label2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal label$)
Declare Sub MoveTo2H Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal w!)
Declare Sub LineTo2H Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal w!)
Declare Sub Line2H Lib "visualib.dll" (ByVal hdc%, ByVal x1!, ByVal y1!, ByVal w1!, ByVal x2!, ByVal y2!, ByVal w2!)

Declare Sub Polygon2D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, vertex As Any, ByVal count%)
Declare Sub PolyPolygon2D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, vertex As Any, polycount As Any, ByVal count%)
Declare Sub Polyline2D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, pts As Any, ByVal count%)
Declare Sub ClosedPolyline2D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, pts As Any, ByVal count%)
Declare Sub Mark2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal hsize%, ByVal vsize%, ByVal head%)
Declare Sub PolyMark2D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, pts As Any, ByVal n%, ByVal hsize%, ByVal vsize%, ByVal head%)
Declare Sub Pointer2D Lib "visualib.dll" (ByVal hdc%, ByVal x1!, ByVal y1!, ByVal x2!, ByVal y2!, ByVal l!, ByVal w!, ByVal typ%)
Declare Sub Arrow2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal u!, ByVal v!, ByVal r!, ByVal l!, ByVal w!, ByVal typ%)
Declare Sub Net2D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, pts As Any, ByVal m%, ByVal n%)
Declare Sub MarkPosition2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal size!, ByVal typ%)


'       3D Functions

Declare Function ProjectionMode Lib "visualib.dll" (ByVal vid%, ByVal mode%) As Integer

Declare Sub Translate3D Lib "visualib.dll" (ByVal x!, ByVal y!, ByVal z!)
Declare Sub TranslateTo3D Lib "visualib.dll" (ByVal x!, ByVal y!, ByVal z!)
Declare Sub Scale3D Lib "visualib.dll" (ByVal sx!, ByVal sy!, ByVal sz!)
Declare Sub PointScale3D Lib "visualib.dll" (ByVal x!, ByVal y!, ByVal z!, ByVal sx!, ByVal sy!, ByVal sz!)
Declare Sub Rotate3D Lib "visualib.dll" (ByVal a!, ByVal axis%)
Declare Sub AxleRotate3D Lib "visualib.dll" (ref As Any, dire As Any, ByVal a!)
Declare Sub Stretch3D Lib "visualib.dll" (ref As Any, dire As Any, ByVal f!)
Declare Sub Shear3D Lib "visualib.dll" (ref As Any, dire As Any, ByVal u!, ByVal v!)
Declare Sub Mirror3D Lib "visualib.dll" (ref As Any, dire As Any)

Declare Function PushTransformation3D Lib "visualib.dll" (m As Any) As Integer
Declare Function PopTransformation3D Lib "visualib.dll" (m As Any) As Integer
Declare Sub ConcatTransformation3D Lib "visualib.dll" (m As Any, ByVal post%)
Declare Sub LoadTransformation3D Lib "visualib.dll" (m As Any)

Declare Function ResetProjection3D Lib "visualib.dll" (ByVal vid%) As Integer
Declare Function SetProjection3D Lib "visualib.dll" (ByVal vid%, ByVal l!, ByVal b!, ByVal r!, ByVal t!, ByVal f%, ByVal b!, ByVal mode%) As Integer
Declare Function SetPerspective Lib "visualib.dll" (ByVal vid%, ByVal fovy!, ByVal asp!, ByVal zmin!, ByVal zmax!) As Integer
Declare Function SetView3D Lib "visualib.dll" (ByVal vid%, ByVal ex!, ByVal ey!, ByVal ez!, ByVal ax!, ByVal ay!, ByVal az!, ByVal twist!) As Integer
Declare Function SetPolarView Lib "visualib.dll" (ByVal vid%, ByVal ax!, ByVal ay!, ByVal az!, ByVal dist!, ByVal azim!, ByVal inc!, ByVal twist!) As Integer

Declare Function ViewerLocation Lib "visualib.dll" (ByVal vid%, x!, y!, z!) As Integer
Declare Function ViewerDirection Lib "visualib.dll" (ByVal vid%, x!, y!, z!) As Integer
Declare Function ViewerField3D Lib "visualib.dll" (ByVal vid%, l!, b!, r!, t!, f!, b!) As Integer

Declare Function MoveViewer3D Lib "visualib.dll" (ByVal vid%, ByVal h!, ByVal v!, ByVal b!, ByVal localv%) As Integer
Declare Function RotateViewer3D Lib "visualib.dll" (ByVal vid%, ByVal a!, ByVal axis%, ByVal localv%) As Integer
Declare Function ZoomViewer3D Lib "visualib.dll" (ByVal vid%, ByVal z!) As Integer

Declare Sub MoveTo3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal z!)
Declare Sub LineTo3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal z!)
Declare Sub RMoveTo3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal z!)
Declare Sub RLineTo3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal z!)
Declare Sub MoveTo3H Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal z!, ByVal w!)
Declare Sub LineTo3H Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal z!, ByVal w!)

Declare Sub Line3D Lib "visualib.dll" (ByVal hdc%, ByVal x1!, ByVal y1!, ByVal z1!, ByVal x2!, ByVal y2!, ByVal z2!)
Declare Sub RLine3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal z!, ByVal dx!, ByVal dy!, ByVal dz!)

Declare Sub PolyArrow3D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, dire As Any, ByVal n%, ByVal r!, ByVal l!, ByVal w!, ByVal htype%)
Declare Sub Label3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal z!, ByVal label$)
Declare Function Mark3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal z!, ByVal hsize%, ByVal vsize%, ByVal typ%) As Integer
Declare Sub PolyMark3D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, pts As Any, ByVal n%, ByVal hsize%, ByVal vsize%, ByVal htype%)

Declare Sub Polygon3D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, vertex As Any, ByVal count%)
Declare Sub PolyPolygon3D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, vertex As Any, polycount As Any, ByVal count%)
Declare Sub Polyline3D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, pts As Any, ByVal count%)
Declare Sub ClosedPolyline3D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, pts As Any, ByVal count%)
Declare Sub MarkPosition3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal z!, ByVal size!, ByVal typ%)
Declare Sub Pointer3D Lib "visualib.dll" (ByVal hdc%, ByVal x1!, ByVal y1!, ByVal z1!, ByVal x2!, ByVal y2!, ByVal z2!, ByVal l!, ByVal w!, ByVal typ%)
Declare Sub Arrow3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal z!, ByVal u!, ByVal v!, ByVal w!, ByVal r!, ByVal l!, ByVal t!, ByVal typ%)
Declare Sub Net3D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, pts As Any, ByVal m%, ByVal n%)


'Shading Functions

Declare Sub ResetShader Lib "visualib.dll" ()

'depth buffer functions
Declare Function SetDepthBuffer Lib "visualib.dll" (ByVal hview%) As Integer
Declare Function SelectDepthBuffer Lib "visualib.dll" (ByVal hview%) As Integer
Declare Function FreeDepthBuffer Lib "visualib.dll" (ByVal hview%) As Integer
Declare Sub ClearDepthBuffer Lib "visualib.dll" (ByVal v%)

' light functions
Declare Function CopyLight Lib "visualib.dll" (ByVal lid1%, ByVal lid2%) As Integer
Declare Function ResetLight Lib "visualib.dll" (ByVal lid%) As Integer
Declare Function CreateLight Lib "visualib.dll" (ByVal lname$, ByVal typ%) As Integer
Declare Sub DeleteLight Lib "visualib.dll" (ByVal lid%)
Declare Function SelectLight Lib "visualib.dll" (ByVal lid%) As Integer
Declare Function CopyLModel Lib "visualib.dll" (ByVal lmid1%, ByVal lmid2%) As Integer
Declare Function CreateLModel Lib "visualib.dll" (ByVal lmname$) As Integer
Declare Sub DeleteLModel Lib "visualib.dll" (ByVal lmid%)
Declare Function SelectLModel Lib "visualib.dll" (ByVal lmid%) As Integer
Declare Function GetLightType Lib "visualib.dll" (ByVal lid%) As Integer
Declare Function SwitchLight Lib "visualib.dll" (ByVal lid%, ByVal status%) As Integer
Declare Function SetLightCoordinateType Lib "visualib.dll" (ByVal lid%, ByVal typ%) As Integer

'material functions
Declare Function CreateMaterial Lib "visualib.dll" (ByVal mname$) As Integer
Declare Sub DeleteMaterial Lib "visualib.dll" (ByVal maid%)
Declare Function SelectMaterial Lib "visualib.dll" (ByVal maid%) As Integer
Declare Function CopyMaterial Lib "visualib.dll" (ByVal mid1%, ByVal mid2%) As Integer
Declare Function ResetMaterial Lib "visualib.dll" (ByVal maid%) As Integer

' shading parameter functions
Declare Function ShadingOption Lib "visualib.dll" (ByVal id%, ByVal opt%, ByVal status%) As Integer
Declare Function ShadingColor Lib "visualib.dll" Alias "_ShadingColor" (ByVal id%, ByVal typ%, ByVal colo&) As Long

Declare Function ShadingFactor Lib "visualib.dll" (ByVal id%, ByVal typ%, ByVal f!) As Integer
Declare Function ShadingParameter Lib "visualib.dll" (ByVal id%, ByVal typ%, ByVal inquire%, param As Any) As Integer

Declare Function SetRGBPalette Lib "visualib.dll" () As Integer

'shading primitive functions
Declare Function ShadeFacet Lib "visualib.dll" Alias "_ShadeFacet" (ByVal hdc%, normal As Any, ByVal typ%, vertex As Any, ByVal count%, param As Any) As Integer

Declare Function ShadePolygon Lib "visualib.dll" Alias "_ShadePolygon" (ByVal hdc%, normal As Any, ByVal typ%, pts As Any, ByVal count%) As Integer

Declare Function ShadePolyPolygon Lib "visualib.dll" Alias "_ShadePolyPolygon" (ByVal hdc%, normal As Any, ByVal typ%, vertex As Any, pcount As Any, ByVal count%) As Integer

Declare Function ShadePolyFacet Lib "visualib.dll" (ByVal hdc%, polyfacet As Any) As Integer
Declare Function ShadingPreview Lib "visualib.dll" (ByVal hdc%, rect As Any, ByVal r!, ByVal d!) As Integer

' programmable shader functions
Declare Sub GetPixelPosition Lib "visualib.dll" (x%, y%)
Declare Sub GetPixelViewNormal Lib "visualib.dll" (normal As Any)
Declare Sub GetPixelWorldNormal Lib "visualib.dll" (normal As Any)
Declare Sub GetPixelObjectNormal Lib "visualib.dll" (normal As Any)
Declare Sub GetPixelViewCoordinate Lib "visualib.dll" (coord As Any)
Declare Sub GetPixelWorldCoordinate Lib "visualib.dll" (coord As Any)
Declare Sub GetPixelObjectCoordinate Lib "visualib.dll" (coord As Any)
Declare Sub GetPixelViewCameraAxis Lib "visualib.dll" (vaxis As Any)
Declare Sub GetPixelWorldCameraAxis Lib "visualib.dll" (vaxis As Any)
Declare Sub GetPixelObjectCameraAxis Lib "visualib.dll" (vaxis As Any)

Declare Function SolidTexture Lib "visualib.dll" (ByVal typ%) As Integer



'Image Mapping and Printing Functions


Global Const VL_FLUSHTOP = 1
Global Const VL_FLUSHBOTTOM = 2
Global Const VL_FLUSHLEFT = 4
Global Const VL_FLUSHRIGHT = 8

Global Const VL_HORZFIT = &H10
Global Const VL_VERTFIT = &H20
Global Const VL_ALLFIT = &H30
Global Const VL_HORZCENTER = &H40
Global Const VL_VERTCENTER = &H80

Global Const VL_HORZSCALED = &H100
Global Const VL_VERTSCALED = &H200
Global Const VL_BESTFIT = &H400
Global Const VL_USE31APIS = &H800

Global Const VL_MILLIMETER = &H1000
Global Const VL_CENTIMETER = &H2000
Global Const VL_MARKCORNER = &H4000
Global Const VL_MARKPAGE = &H8000

Declare Function ReadDIBFile Lib "visualib.dll" (ByVal fname$, hdib As Any) As Integer
Declare Function ScreenToDIB Lib "visualib.dll" (rect As Any) As Integer
Declare Function WriteDIBFile Lib "visualib.dll" (ByVal fname$, ByVal hdib%) As Integer
Declare Function SetPrintRect Lib "visualib.dll" (ByVal hdc%, rect As Any, ByVal mode%, ByVal x!, ByVal y!, ByVal w!, ByVal h!, ByVal bw%, ByVal bh%) As Integer
Declare Sub GetScreenRect Lib "visualib.dll" (ByVal hwnd%, ByVal withframe%, rect As Any)
Declare Function PrintImage Lib "visualib.dll" (ByVal hdib%, ByVal mode%, ByVal x!, ByVal y!, ByVal w!, ByVal h!) As Integer
Declare Function PrintDrawing Lib "visualib.dll" (draw As Any, ByVal mode%, ByVal x!, ByVal y!, ByVal w!, ByVal h!) As Integer
Declare Function ImageMap2D Lib "visualib.dll" (ByVal hdc%, ByVal hdib%, ByVal typ%, vertex As Any) As Integer
Declare Function ImageMap3D Lib "visualib.dll" (ByVal hdc%, ByVal hdib%, ByVal typ%, vertex As Any) As Integer


' text parameters
Global Const VL_TEXT_HEIGHT = 1
Global Const VL_TEXT_ASPECT = 2
Global Const VL_TEXT_THICKNESS = 4

Declare Function TextParameter Lib "visualib.dll" (ByVal typ%, ByVal param!) As Integer
Declare Function SelectFont Lib "visualib.dll" () As Integer
Declare Function setfont Lib "visualib.dll" (lplf As Any) As Integer
Declare Function Text2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal a!, ByVal text$) As Integer
Declare Function Text3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal a!, ByVal text$) As Integer
Declare Function SolidText Lib "visualib.dll" (ByVal hdc%, ByVal text$) As Integer


' 2D Curve Functions

Declare Sub QBezierCurve2D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any)
Declare Sub QBSplineCurve2D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal n%)
Declare Sub QNURBSCurve2D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal n%, knot As Any)

Declare Sub BezierCurve2D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any)
Declare Sub HermitCurve2D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any)
Declare Sub BSplineCurve2D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal n%)
Declare Sub NURBSCurve2D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal n%, knot As Any)
Declare Sub SplineInterp2D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal n%)

Declare Sub BSplineCurveClosed2D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal n%)
Declare Sub NURBSCurveClosed2D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal n%, knot As Any)

Declare Sub CatmullRomSpline2D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal n%)



'3D Curve Functions

Declare Sub QBezierCurve3D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any)
Declare Sub QBSplineCurve3D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal n%)
Declare Sub QNURBSCurve3D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal n%, knot As Any)
Declare Sub BezierCurve3D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any)
Declare Sub HermitCurve3D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any)
Declare Sub BSplineCurve3D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal n%)
Declare Sub NURBSCurve3D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal n%, knot As Any)
Declare Sub SplineInterp3D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal n%)
Declare Sub BSplineCurveClosed3D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal n%)
Declare Sub NURBSCurveClosed3D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal n%, knot As Any)
Declare Sub CatmullRomSpline3D Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal n%)
Declare Sub Spring Lib "visualib.dll" (ByVal hdc%, ByVal n%, ByVal r!, ByVal h!)


Declare Function CircleSide Lib "visualib.dll" (ByVal side%) As Integer
Declare Sub TransfVertex Lib "visualib.dll" (ByVal typ%, ByVal x!, ByVal y!, ByVal a!, ByVal sx!, ByVal sy!, vertex As Any, ByVal n%)
Declare Function RectangleVertex Lib "visualib.dll" (ByVal typ%, ByVal x1!, ByVal y1!, ByVal x2!, ByVal y2!, vertex As Any) As Integer
Declare Function BoxVertex Lib "visualib.dll" (ByVal typ%, ByVal x!, ByVal y!, ByVal t!, ByVal sx!, ByVal sy!, vertex As Any) As Integer
Declare Function NgonVertex Lib "visualib.dll" (ByVal typ%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal n%, vertex As Any) As Integer
Declare Function FlowerVertex Lib "visualib.dll" (ByVal typ%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal n%, ByVal r!, vertex As Any) As Integer
Declare Function StarVertex Lib "visualib.dll" (ByVal typ%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal n%, vertex As Any) As Integer
Declare Function ArcVertex Lib "visualib.dll" (ByVal typ%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal n%, ByVal a!, ByVal b!, vertex As Any) As Integer
Declare Function PieVertex Lib "visualib.dll" (ByVal typ%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal n%, ByVal a!, ByVal b!, vertex As Any) As Integer
Declare Function RingVertex Lib "visualib.dll" (ByVal typ%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal n%, ByVal a!, ByVal b!, ByVal w!, vertex As Any) As Integer
Declare Function RoseVertex Lib "visualib.dll" (ByVal typ%, ByVal x!, ByVal y!, ByVal a!, ByVal r!, ByVal m%, ByVal n%, vertex As Any) As Integer


'                               2D Primitive Functions

Declare Sub Rectangle2D Lib "visualib.dll" (ByVal hdc%, ByVal x1!, ByVal y1!, ByVal x2!, ByVal y2!)
Declare Sub Box2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal w!, ByVal h!)
Declare Sub Disk2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!)
Declare Sub Pie2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal a!, ByVal b!)
Declare Sub Ring2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal a!, ByVal b!, ByVal w!)
Declare Sub Chord2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal a!, ByVal b!)
Declare Sub Ngon2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal n%)
Declare Sub Flower2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal n%, ByVal ratio!)
Declare Sub Star2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal n%)
Declare Sub Arc2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal a!, ByVal b!)
Declare Sub Rose2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal r!, ByVal m%, ByVal n%)

Declare Sub Spiral2D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal a!, ByVal b!, ByVal r!, ByVal dr!)


'                               3D Primitive Functions

Declare Sub Rectangle3D Lib "visualib.dll" (ByVal hdc%, ByVal x1!, ByVal y1!, ByVal x2!, ByVal y2!)
Declare Sub Box3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal sx!, ByVal sy!)
Declare Sub Ring3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal a!, ByVal b!, ByVal w!)
Declare Sub Disk3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!)
Declare Sub Pie3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal a!, ByVal b!)
Declare Sub Chord3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal a!, ByVal b!)
Declare Sub Ngon3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal n%)
Declare Sub Flower3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal n%, ByVal r!)
Declare Sub Star3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal n%)

Declare Sub Arc3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal rx!, ByVal ry!, ByVal a!, ByVal b!)
Declare Sub Rose3D Lib "visualib.dll" (ByVal hdc%, ByVal x!, ByVal y!, ByVal t!, ByVal r!, ByVal m, ByVal n%)

Declare Sub Spiral3D Lib "visualib.dll" (ByVal hdc%, ByVal a!, ByVal b!, ByVal r!, ByVal dr!, ByVal h!)
Declare Sub Spring3D Lib "visualib.dll" (ByVal hdc%, ByVal a!, ByVal b!, ByVal r!, ByVal h!)



'                               3D Surface Functions

Declare Function BezierSurface Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal ns%, ByVal nt%) As Integer
Declare Function HermitSurface Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal ns%, ByVal nt%) As Integer
Declare Function BSplineSurface Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal Sc%, ByVal Tc%, ByVal ns%, ByVal nt%) As Integer
Declare Function NURBSSurface Lib "visualib.dll" (ByVal hdc%, ByVal typ%, poly As Any, ByVal Sc%, ByVal Tc%, Skn As Any, Tkn As Any, ByVal ns%, ByVal nt%) As Integer

Declare Function CoonsPatch Lib "visualib.dll" (ByVal hdc%, ByVal typ%, pts As Any, ByVal nu%, ByVal nv%) As Integer


' Solid Primitive Functions

Declare Function Cube Lib "visualib.dll" (ByVal hdc%, ByVal w!, ByVal l!, ByVal h!) As Integer
Declare Function Cylinder Lib "visualib.dll" (ByVal hdc%, ByVal rx!, ByVal ry!, ByVal h!) As Integer
Declare Function Cone Lib "visualib.dll" (ByVal hdc%, ByVal rx!, ByVal ry!, ByVal h!) As Integer
Declare Function Ellipsoid Lib "visualib.dll" (ByVal hdc%, ByVal a!, ByVal b!, ByVal c!) As Integer
Declare Function Sphere Lib "visualib.dll" (ByVal hdc%, ByVal r!) As Integer
Declare Function HemiSphere Lib "visualib.dll" (ByVal hdc%, ByVal r!, ByVal h!) As Integer
Declare Function SolidStar Lib "visualib.dll" (ByVal hdc%, ByVal n%, ByVal rx!, ByVal ry!, ByVal h!) As Integer
Declare Function SolidFlower Lib "visualib.dll" (ByVal hdc%, ByVal n%, ByVal r!, ByVal rx!, ByVal ry!, ByVal h!) As Integer
Declare Function SolidPie Lib "visualib.dll" (ByVal hdc%, ByVal rx!, ByVal ry!, ByVal h!, ByVal a!, ByVal b!) As Integer
Declare Function Frustum Lib "visualib.dll" (ByVal hdc%, ByVal bw!, ByVal bl!, ByVal tw!, ByVal tl!, ByVal h!) As Integer
Declare Function Ridge Lib "visualib.dll" (ByVal hdc%, ByVal w!, ByVal l!, ByVal h!, ByVal r!) As Integer
Declare Function Prism Lib "visualib.dll" (ByVal hdc%, ByVal typ%, basev As Any, ByVal n%, ByVal h!) As Integer
Declare Function Pyramid Lib "visualib.dll" (ByVal hdc%, basev As Any, ByVal n%, tip As Any) As Integer
Declare Function WedgedCone Lib "visualib.dll" (ByVal hdc%, ByVal rx!, ByVal ry!, ByVal h!, ByVal a!, ByVal b!) As Integer
Declare Function WedgedCylinder Lib "visualib.dll" (ByVal hdc%, ByVal rx!, ByVal ry!, ByVal h!, ByVal tr!, ByVal a!, ByVal b!) As Integer
Declare Function WedgedSphere Lib "visualib.dll" (ByVal hdc%, ByVal rx!, ByVal ry!, ByVal rz!, ByVal a1!, ByVal a2!, ByVal b1!, ByVal b2!) As Integer
Declare Function WedgedTorus Lib "visualib.dll" (ByVal hdc%, ByVal r1!, ByVal r2!, ByVal a1!, ByVal a2!, ByVal b1!, ByVal b2!) As Integer

Declare Function Torus Lib "visualib.dll" (ByVal hdc%, ByVal r1!, ByVal r2!) As Integer

Declare Function SolidRing Lib "visualib.dll" (ByVal hdc%, ByVal rtop!, ByVal rbot!, ByVal t!, ByVal h!, ByVal a!, ByVal b!, ByVal ratio!) As Integer
Declare Function Tube Lib "visualib.dll" (ByVal hdc%, ByVal rtop!, ByVal rbot!, ByVal t!, ByVal h!) As Integer
Declare Function Sweep Lib "visualib.dll" (ByVal hdc%, transf As Any, ByVal nstep%, vertex As Any, normals As Any, ByVal npts%, ByVal mode%, snormal As Any) As Integer
Declare Function Revolution Lib "visualib.dll" (ByVal hdc%, vertex As Any, normal As Any, ByVal n%, ByVal a!, ByVal mode%, snormal As Any) As Integer
Declare Function Tetrahedron Lib "visualib.dll" (ByVal hdc%, ByVal r!) As Integer
Declare Function Octahedron Lib "visualib.dll" (ByVal hdc%, ByVal r!) As Integer
Declare Function Dodecahedron Lib "visualib.dll" (ByVal hdc%, ByVal r!) As Integer
Declare Function Icosahedron Lib "visualib.dll" (ByVal hdc%, ByVal r!) As Integer

