diff --git a/.gitignore b/.gitignore index 2c5c832d..3742c35d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,201 +1,200 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. - -# User-specific files -*.suo -*.user -*.sln.docstates - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -build/ -bld/ -[Bb]in/ -[Oo]bj/ - -# Roslyn cache directories -*.ide/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -#NUNIT -*.VisualState.xml -TestResult.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -*_i.c -*_p.c -*_i.h -*.ilk -*.meta -*.obj -*.pch -*.pdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*.log -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opensdf -*.sdf -*.cachefile - -# Visual Studio profiler -*.psess -*.vsp -*.vspx - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# JustCode is a .NET coding addin-in -.JustCode - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# NCrunch -_NCrunch_* -.*crunch*.local.xml - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# TODO: Comment the next line if you want to checkin your web deploy settings -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# NuGet Packages -*.nupkg -# The packages folder can be ignored because of Package Restore -**/packages/* -# except build/, which is used as an MSBuild target. -!**/packages/build/ -# If using the old MSBuild-Integrated Package Restore, uncomment this: -#!**/packages/repositories.config - -# Windows Azure Build Output -csx/ -*.build.csdef - -# Windows Store app package directory -AppPackages/ - -# Others -sql/ -*.Cache -ClientBin/ -[Ss]tyle[Cc]op.* -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.pfx -*.publishsettings -node_modules/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm - -# SQL Server files -*.mdf -*.ldf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings - -# Microsoft Fakes -FakesAssemblies/ - -# ========================= -# Operating System Files -# ========================= - -# OSX -# ========================= - +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +build/ +bld/ +[Bb]in/ +[Oo]bj/ + +# Roslyn cache directories +*.ide/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +#NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding addin-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# If using the old MSBuild-Integrated Package Restore, uncomment this: +#!**/packages/repositories.config + +# Windows Azure Build Output +csx/ +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings +node_modules/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# ========================= +# Operating System Files +# ========================= + +# OSX +# ========================= + .DS_Store .AppleDouble .LSOverride # Icon must end with two \r -Icon - +Icon # Thumbnails ._* @@ -209,22 +208,22 @@ Icon Network Trash Folder Temporary Items .apdisk - -# Windows -# ========================= - -# Windows image file caches -Thumbs.db -ehthumbs.db - -# Folder config file -Desktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msm -*.msp + +# Windows +# ========================= + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp diff --git a/.nuget/NuGet.exe b/.nuget/NuGet.exe new file mode 100644 index 00000000..8dd7e45a Binary files /dev/null and b/.nuget/NuGet.exe differ diff --git a/.nuget/WindowsAPICodePack-Core.1.1.nuspec b/.nuget/WindowsAPICodePack-Core.1.1.nuspec new file mode 100644 index 00000000..74586836 --- /dev/null +++ b/.nuget/WindowsAPICodePack-Core.1.1.nuspec @@ -0,0 +1,22 @@ + + + + WindowsAPICodePack-Core + 1.1 + Windows API Code Pack - Core + Aybe + Microsoft + http://code.msdn.microsoft.com/WindowsAPICodePack/Project/License.aspx + http://archive.msdn.microsoft.com/WindowsAPICodePack + true + Core library for Windows API Code Pack + Windows® API Code Pack for Microsoft® .NET Framework provides a source code library that can be used to access some features of Windows 7 and Windows Vista from managed code. + Fixes TaskDialog.Icon bug that wasn't visible unless specified duringTaskDialog.Opened event. + en-US + WindowsAPICodePack + + + + + + \ No newline at end of file diff --git a/.nuget/WindowsAPICodePack-ExtendedLinguisticServices.1.1.nuspec b/.nuget/WindowsAPICodePack-ExtendedLinguisticServices.1.1.nuspec new file mode 100644 index 00000000..7e53e3e5 --- /dev/null +++ b/.nuget/WindowsAPICodePack-ExtendedLinguisticServices.1.1.nuspec @@ -0,0 +1,21 @@ + + + + WindowsAPICodePack-ExtendedLinguisticServices + 1.1 + Windows API Code Pack - Extended Linguistic Services + Aybe + Microsoft + http://code.msdn.microsoft.com/WindowsAPICodePack/Project/License.aspx + http://archive.msdn.microsoft.com/WindowsAPICodePack + true + Extended linguistic services for Windows API Code Pack + Windows® API Code Pack for Microsoft® .NET Framework provides a source code library that can be used to access some features of Windows 7 and Windows Vista from managed code. + en-US + WindowsAPICodePack + + + + + + \ No newline at end of file diff --git a/.nuget/WindowsAPICodePack-Sensors.1.1.nuspec b/.nuget/WindowsAPICodePack-Sensors.1.1.nuspec new file mode 100644 index 00000000..aef7e1b7 --- /dev/null +++ b/.nuget/WindowsAPICodePack-Sensors.1.1.nuspec @@ -0,0 +1,24 @@ + + + + WindowsAPICodePack-Sensors + 1.1 + Windows API Code Pack - Sensors + Aybe + Microsoft + http://code.msdn.microsoft.com/WindowsAPICodePack/Project/License.aspx + http://archive.msdn.microsoft.com/WindowsAPICodePack + true + Sensors library for Windows API Code Pack + Windows® API Code Pack for Microsoft® .NET Framework provides a source code library that can be used to access some features of Windows 7 and Windows Vista from managed code. + en-US + WindowsAPICodePack + + + + + + + + + \ No newline at end of file diff --git a/.nuget/WindowsAPICodePack-Shell.1.1.nuspec b/.nuget/WindowsAPICodePack-Shell.1.1.nuspec new file mode 100644 index 00000000..9be077b3 --- /dev/null +++ b/.nuget/WindowsAPICodePack-Shell.1.1.nuspec @@ -0,0 +1,24 @@ + + + + WindowsAPICodePack-Shell + 1.1 + Windows API Code Pack - Shell + Aybe + Microsoft + http://code.msdn.microsoft.com/WindowsAPICodePack/Project/License.aspx + http://archive.msdn.microsoft.com/WindowsAPICodePack + true + Shell library for Windows API Code Pack + Windows® API Code Pack for Microsoft® .NET Framework provides a source code library that can be used to access some features of Windows 7 and Windows Vista from managed code. + en-US + WindowsAPICodePack + + + + + + + + + \ No newline at end of file diff --git a/.nuget/WindowsAPICodePack-ShellExtensions.1.1.nuspec b/.nuget/WindowsAPICodePack-ShellExtensions.1.1.nuspec new file mode 100644 index 00000000..fb6cc177 --- /dev/null +++ b/.nuget/WindowsAPICodePack-ShellExtensions.1.1.nuspec @@ -0,0 +1,24 @@ + + + + WindowsAPICodePack-ShellExtensions + 1.1 + Windows API Code Pack - Shell Extensions + Aybe + Microsoft + http://code.msdn.microsoft.com/WindowsAPICodePack/Project/License.aspx + http://archive.msdn.microsoft.com/WindowsAPICodePack + true + Shell extensions library for Windows API Code Pack + Windows® API Code Pack for Microsoft® .NET Framework provides a source code library that can be used to access some features of Windows 7 and Windows Vista from managed code. + en-US + WindowsAPICodePack + + + + + + + + + \ No newline at end of file diff --git a/.nuget/build.bat b/.nuget/build.bat new file mode 100644 index 00000000..61fa51f2 --- /dev/null +++ b/.nuget/build.bat @@ -0,0 +1,9 @@ +@echo off +cls +call clean.bat +echo Building NuGet packages ... +nuget pack WindowsAPICodePack-Core.1.1.nuspec -NoPackageAnalysis +nuget pack WindowsAPICodePack-ExtendedLinguisticServices.1.1.nuspec -NoPackageAnalysis +nuget pack WindowsAPICodePack-Sensors.1.1.nuspec -NoPackageAnalysis +nuget pack WindowsAPICodePack-Shell.1.1.nuspec -NoPackageAnalysis +nuget pack WindowsAPICodePack-ShellExtensions.1.1.nuspec -NoPackageAnalysis \ No newline at end of file diff --git a/.nuget/clean.bat b/.nuget/clean.bat new file mode 100644 index 00000000..d9cdce9b --- /dev/null +++ b/.nuget/clean.bat @@ -0,0 +1,4 @@ +@echo off +cls +echo Cleaning NuGet packages ... +IF EXIST *.nupkg (del *.nupkg) diff --git a/binaries/Microsoft.WindowsAPICodePack.ExtendedLinguisticServices.dll b/binaries/Microsoft.WindowsAPICodePack.ExtendedLinguisticServices.dll new file mode 100644 index 00000000..eae314c8 Binary files /dev/null and b/binaries/Microsoft.WindowsAPICodePack.ExtendedLinguisticServices.dll differ diff --git a/binaries/Microsoft.WindowsAPICodePack.Sensors.dll b/binaries/Microsoft.WindowsAPICodePack.Sensors.dll new file mode 100644 index 00000000..bdd5632e Binary files /dev/null and b/binaries/Microsoft.WindowsAPICodePack.Sensors.dll differ diff --git a/binaries/Microsoft.WindowsAPICodePack.Shell.dll b/binaries/Microsoft.WindowsAPICodePack.Shell.dll new file mode 100644 index 00000000..4542663e Binary files /dev/null and b/binaries/Microsoft.WindowsAPICodePack.Shell.dll differ diff --git a/binaries/Microsoft.WindowsAPICodePack.ShellExtensions.dll b/binaries/Microsoft.WindowsAPICodePack.ShellExtensions.dll new file mode 100644 index 00000000..190b3215 Binary files /dev/null and b/binaries/Microsoft.WindowsAPICodePack.ShellExtensions.dll differ diff --git a/binaries/Microsoft.WindowsAPICodePack.dll b/binaries/Microsoft.WindowsAPICodePack.dll new file mode 100644 index 00000000..ac869492 Binary files /dev/null and b/binaries/Microsoft.WindowsAPICodePack.dll differ diff --git a/documentation/API Changes README.txt b/documentation/API Changes README.txt new file mode 100644 index 00000000..273b31fa --- /dev/null +++ b/documentation/API Changes README.txt @@ -0,0 +1 @@ +The changes listed in the two API-changes documents are the APIs that have been changed between v1.0.1 and v1.1 of the Windows API Code Pack. These documents do not include new features and are meant to document changes that may prevent existing applications from functioning as expected. \ No newline at end of file diff --git a/documentation/Windows API Code Pack API Changes.html b/documentation/Windows API Code Pack API Changes.html new file mode 100644 index 00000000..cf396064 --- /dev/null +++ b/documentation/Windows API Code Pack API Changes.html @@ -0,0 +1,455 @@ + + + + + Assembly Changes - + Project: "All" + + + + + Namespaces + +

Microsoft.WindowsAPICodePack

+

Namespace: Microsoft.WindowsAPICodePack.ApplicationServices

+ Added types: + ApplicationRecoveryException, PowerManagerException
+

Class: BatteryState

+

Property: ACOnline : System.Boolean

+ Read/write status changed to "ReadWrite"

Property: CurrentCharge : System.Int32

+ Read/write status changed to "ReadWrite"

Property: DischargeRate : System.Int32

+ Renamed to "ChargeRate"
+ Read/write status changed to "ReadWrite"
Method: get_DischargeRate() : System.Int32
+ Renamed to "get_ChargeRate"

Property: EstimatedTimeRemaining : System.TimeSpan

+ Read/write status changed to "ReadWrite"

Property: MaxCharge : System.Int32

+ Read/write status changed to "ReadWrite"

Property: SuggestedBatteryWarningCharge : System.Int32

+ Read/write status changed to "ReadWrite"

Property: SuggestedCriticalBatteryCharge : System.Int32

+ Read/write status changed to "ReadWrite"

Enum: ExecutionState

Accessibility changed to "public"
+ Renamed to "ExecutionStates"
Added fields: + AwayModeRequired, None

Class: PowerManager

Added methods: + SetThreadExecutionState(Microsoft.WindowsAPICodePack.ApplicationServices.ExecutionStates) : System.Void

Property: IsMonitorOn : System.Boolean

+ Read/write status changed to "ReadWrite"

Enum: PowerPersonality

Added fields: + Unknown

Namespace: Microsoft.WindowsAPICodePack.Dialogs

Class: DialogControl

Property: Id : System.Int32

+ Read/write status changed to "ReadWrite"

Class: TaskDialogButton

Property: ShowElevationIcon : System.Boolean

+ Renamed to "UseElevationIcon"
Method: get_ShowElevationIcon() : System.Boolean
+ Renamed to "get_UseElevationIcon"
Method: set_ShowElevationIcon(System.Boolean) : System.Void
+ Renamed to "set_UseElevationIcon"

Enum: TaskDialogProgressBarState

Added fields: + None

Enum: TaskDialogResult

Added fields: + None

Class: TaskDialogTickEventArgs

Property: Ticks : System.Int32

+ Read/write status changed to "ReadWrite"

Namespace: Microsoft.WindowsAPICodePack.Net

Enum: Connectivity

+ Renamed to "ConnectivityStates"

Field: Disconnected

+ Renamed to "None"

Class: Network

Property: Connectivity : Microsoft.WindowsAPICodePack.Net.Connectivity

Method: get_Connectivity() : Microsoft.WindowsAPICodePack.Net.Connectivity
+ Signature changed to "() : Microsoft.WindowsAPICodePack.Net.ConnectivityStates"

Class: NetworkConnection

Property: Connectivity : Microsoft.WindowsAPICodePack.Net.Connectivity

Method: get_Connectivity() : Microsoft.WindowsAPICodePack.Net.Connectivity
+ Signature changed to "() : Microsoft.WindowsAPICodePack.Net.ConnectivityStates"

Class: NetworkListManager

Property: Connectivity : Microsoft.WindowsAPICodePack.Net.Connectivity

Method: get_Connectivity() : Microsoft.WindowsAPICodePack.Net.Connectivity
+ Signature changed to "() : Microsoft.WindowsAPICodePack.Net.ConnectivityStates"

Namespace: MS.WindowsAPICodePack.Internal

Removed types: + CommonDllNames, POINT, RECT, SIZE

Class: CoreErrorHelper

Accessibility changed to "not public"
Removed fields: + IGNORED : System.Int32
Added methods: + Failed(System.Int32) : System.Boolean, Succeeded(MS.WindowsAPICodePack.Internal.HResult) : System.Boolean
Added fields: + Ignored : System.Int32

Method: Failed(MS.WindowsAPICodePack.Internal.HRESULT) : System.Boolean

+ Signature changed to "(MS.WindowsAPICodePack.Internal.HResult) : System.Boolean"

Class: CoreNativeMethods

Accessibility changed to "not public"
Added methods: + PostMessage(System.IntPtr, MS.WindowsAPICodePack.Internal.WindowMessage, System.IntPtr, System.IntPtr) : System.Void, SendMessage(System.IntPtr, MS.WindowsAPICodePack.Internal.WindowMessage, System.IntPtr, System.IntPtr) : System.IntPtr, SendMessage(System.IntPtr, System.UInt32, System.IntPtr, System.String) : System.IntPtr

Method: DestroyIcon(System.IntPtr) : System.Boolean

Accessibility changed to "not public"

Method: HIWORD(System.Int64, System.Int32) : System.Int32

+ Renamed to "GetHiWord"

Method: LOWORD(System.Int64) : System.Int32

+ Renamed to "GetLoWord"

Enum: HRESULT

+ Renamed to "HResult"
Added fields: + AccessDenied

Field: E_ELEMENTNOTFOUND

+ Renamed to "ElementNotFound"

Field: E_ERROR_CANCELLED

+ Renamed to "Canceled"

Field: E_FAIL

+ Renamed to "Fail"

Field: E_INVALIDARG

+ Renamed to "InvalidArguments"

Field: E_NOINTERFACE

+ Renamed to "NoInterface"

Field: E_OUTOFMEMORY

+ Renamed to "OutOfMemory"

Field: ERROR_CANCELLED

+ Renamed to "Win32ErrorCanceled"

Field: NO_OBJECT

+ Renamed to "NoObject"

Field: RESOURCE_IN_USE

+ Renamed to "ResourceInUse"

Field: S_FALSE

+ Renamed to "False"

Field: S_OK

+ Renamed to "Ok"

Field: TYPE_E_ELEMENTNOTFOUND

+ Renamed to "TypeElementNotFound"

Struct: PropVariant

+ Kind changed to "Class"
Removed methods: + Clear() : System.Void, SetBool(System.Boolean) : System.Void, SetBoolVector(System.Boolean[]) : System.Void, SetByte(System.Byte) : System.Void, SetDateTime(System.DateTime) : System.Void, SetDateTimeVector(System.DateTime[]) : System.Void, SetDecimal(System.Decimal) : System.Void, SetDouble(System.Double) : System.Void, SetDoubleVector(System.Double[]) : System.Void, SetEmptyValue() : System.Void, SetInt(System.Int32) : System.Void, SetIntVector(System.Int32[]) : System.Void, SetLong(System.Int64) : System.Void, SetLongVector(System.Int64[]) : System.Void, SetSByte(System.SByte) : System.Void, SetShort(System.Int16) : System.Void, SetShortVector(System.Int16[]) : System.Void, SetString(System.String) : System.Void, SetStringVector(System.String[]) : System.Void, SetUInt(System.UInt32) : System.Void, SetUIntVector(System.UInt32[]) : System.Void, SetULong(System.UInt64) : System.Void, SetULongVector(System.UInt64[]) : System.Void, SetUShort(System.UInt16) : System.Void, SetUShortVector(System.UInt16[]) : System.Void
Added methods: + .ctor() : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.Boolean) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.Boolean[]) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.Byte) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.DateTime) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.DateTime[]) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.Decimal) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.Decimal[]) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.Double) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.Double[]) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.Int16) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.Int16[]) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.Int32) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.Int32[]) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.Int64) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.Int64[]) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.SByte) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.Single) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.Single[]) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.String) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.String[]) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.UInt16) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.UInt16[]) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.UInt32) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.UInt32[]) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.UInt64) : MS.WindowsAPICodePack.Internal.PropVariant, .ctor(System.UInt64[]) : MS.WindowsAPICodePack.Internal.PropVariant, Dispose() : System.Void, ToString() : System.String

Method: SetIUnknown(System.Object) : System.Void

Accessibility changed to "not public"

Method: SetSafeArray(System.Array) : System.Void

Accessibility changed to "not public"

Reflection Errors: (no reflection errors reported)

Microsoft.WindowsAPICodePack.ExtendedLinguisticServices

Namespace: Microsoft.WindowsAPICodePack.ExtendedLinguisticServices

Class: MappingActionAsyncResult

Property: ActionId : System.String

+ Read/write status changed to "ReadWrite"

Property: RangeIndex : System.Int32

+ Read/write status changed to "ReadWrite"

Class: MappingAsyncResult

Added methods: + Dispose() : System.Void
Added properties: + AsyncState : System.Object, CompletedSynchronously : System.Boolean

Class: MappingRecognizeAsyncResult

Property: Index : System.Int32

+ Read/write status changed to "ReadWrite"

Property: Length : System.Int32

+ Read/write status changed to "ReadWrite"

Property: Options : Microsoft.WindowsAPICodePack.ExtendedLinguisticServices.MappingOptions

+ Read/write status changed to "ReadWrite"

Property: Text : System.String

+ Read/write status changed to "ReadWrite"

Reflection Errors: (no reflection errors reported)

Microsoft.WindowsAPICodePack.Sensors

Namespace: Microsoft.WindowsAPICodePack.Sensors

Enum: AccelerationAxis

Field: X

+ Renamed to "XAxis"

Field: Y

+ Renamed to "YAxis"

Field: Z

+ Renamed to "ZAxis"

Class: LuminousIntensity

Property: Intensity : System.Single

+ Read/write status changed to "ReadWrite"

Class: Sensor

Property: DataReport : Microsoft.WindowsAPICodePack.Sensors.SensorReport

+ Read/write status changed to "ReadWrite"

Class: SensorCategories

Field: BioMetric : System.Guid

+ Renamed to "Biometric"

Enum: SensorConnectionType

Field: Intergrated

+ Renamed to "Integrated"

Class: SensorDescriptionAttribute

Property: SensorType : System.String

+ Read/write status changed to "ReadOnly"
Removed methods: + set_SensorType(System.String) : System.Void

Property: SensorTypeGuid : System.Guid

Accessibility changed to "public"
Method: get_SensorTypeGuid() : System.Guid
Accessibility changed to "public"

Class: SensorList<S>

+ Renamed to "SensorList<TSensor>"

Method: .ctor() : Microsoft.WindowsAPICodePack.Sensors.SensorList<S>

+ Signature changed to "() : Microsoft.WindowsAPICodePack.Sensors.SensorList<TSensor>"

Method: Add(S) : System.Void

+ Signature changed to "(TSensor) : System.Void"

Method: Contains(S) : System.Boolean

+ Signature changed to "(TSensor) : System.Boolean"

Method: CopyTo(S[], System.Int32) : System.Void

+ Signature changed to "(TSensor[], System.Int32) : System.Void"

Method: GetEnumerator() : IEnumerator<S>

+ Signature changed to "() : IEnumerator<TSensor>"

Method: IndexOf(S) : System.Int32

+ Signature changed to "(TSensor) : System.Int32"

Method: Insert(System.Int32, S) : System.Void

+ Signature changed to "(System.Int32, TSensor) : System.Void"

Property: Item : S

Method: get_Item(System.Int32) : S
+ Signature changed to "(System.Int32) : TSensor"
Method: set_Item(System.Int32, S) : System.Void
+ Signature changed to "(System.Int32, TSensor) : System.Void"

Method: Remove(S) : System.Boolean

+ Signature changed to "(TSensor) : System.Boolean"

Class: SensorManager

Method: GetSensorBySensorId(System.Guid) : S

+ Signature changed to "(System.Guid) : T"

Method: GetSensorsByTypeId() : SensorList<S>

+ Signature changed to "() : SensorList<T>"

Class: SensorPropertyKeys

Field: SENSOR_DATA_TYPE_ACCELERATION_X_G : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeAccelerationXG"

Field: SENSOR_DATA_TYPE_ACCELERATION_Y_G : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeAccelerationYG"

Field: SENSOR_DATA_TYPE_ACCELERATION_Z_G : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeAccelerationZG"

Field: SENSOR_DATA_TYPE_ALTITUDE_ELLIPSOID_METERS : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeAltitudeEllipsoidMeters"

Field: SENSOR_DATA_TYPE_ALTITUDE_SEALEVEL_METERS : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeAltitudeSeaLevelMeters"

Field: SENSOR_DATA_TYPE_ANGLE_X_DEGREES : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeAngleXDegrees"

Field: SENSOR_DATA_TYPE_ANGLE_Y_DEGREES : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeAngleYDegrees"

Field: SENSOR_DATA_TYPE_ANGLE_Z_DEGREES : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeAngleZDegrees"

Field: SENSOR_DATA_TYPE_ANGULAR_ACCELERATION_X_DEGREES_PER_SECOND : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeAngularAccelerationXDegreesPerSecond"

Field: SENSOR_DATA_TYPE_ANGULAR_ACCELERATION_Y_DEGREES_PER_SECOND : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeAngularAccelerationYDegreesPerSecond"

Field: SENSOR_DATA_TYPE_ANGULAR_ACCELERATION_Z_DEGREES_PER_SECOND : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeAngularAccelerationZDegreesPerSecond"

Field: SENSOR_DATA_TYPE_BOOLEAN_SWITCH_ARRAY_STATE : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeBooleanSwitchArrayState"

Field: SENSOR_DATA_TYPE_BOOLEAN_SWITCH_STATE : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeBooleanSwitchState"

Field: SENSOR_DATA_TYPE_DISTANCE_X_METERS : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeDistanceXMeters"

Field: SENSOR_DATA_TYPE_DISTANCE_Y_METERS : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeDistanceYMeters"

Field: SENSOR_DATA_TYPE_DISTANCE_Z_METERS : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeDistanceZMeters"

Field: SENSOR_DATA_TYPE_FIX_QUALITY : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeFixQuality"

Field: SENSOR_DATA_TYPE_FIX_TYPE : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeFixType"

Field: SENSOR_DATA_TYPE_FORCE_NEWTONS : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeForceNewtons"

Field: SENSOR_DATA_TYPE_HORIZONAL_DILUTION_OF_PRECISION : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeHorizontalDilutionOfPrecision"

Field: SENSOR_DATA_TYPE_HUMAN_PRESENCE : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeHumanPresence"

Field: SENSOR_DATA_TYPE_HUMAN_PROXIMITY : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeHumanProximity"

Field: SENSOR_DATA_TYPE_LATITUDE_DEGREES : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeLatitudeDegrees"

Field: SENSOR_DATA_TYPE_LIGHT_LUX : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeLightLux"

Field: SENSOR_DATA_TYPE_LONGITUDE_DEGREES : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeLongitudeDegrees"

Field: SENSOR_DATA_TYPE_MAGNETIC_HEADING_DEGREES : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeMagneticHeadingDegrees"

Field: SENSOR_DATA_TYPE_MAGNETIC_HEADING_X_DEGREES : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeMagneticHeadingXDegrees"

Field: SENSOR_DATA_TYPE_MAGNETIC_HEADING_Y_DEGREES : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeMagneticHeadingYDegrees"

Field: SENSOR_DATA_TYPE_MAGNETIC_HEADING_Z_DEGREES : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeMagneticHeadingZDegrees"

Field: SENSOR_DATA_TYPE_MAGNETIC_VARIATION : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeMagneticVariation"

Field: SENSOR_DATA_TYPE_MULTIVALUE_SWITCH_STATE : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeMultivalueSwitchState"

Field: SENSOR_DATA_TYPE_POSITION_DILUTION_OF_PRECISION : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypePositionDilutionOfPrecision"

Field: SENSOR_DATA_TYPE_PRESSURE_PASCAL : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypePressurePascal"

Field: SENSOR_DATA_TYPE_RFID_TAG_40_BIT : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeRfidTag40Bit"

Field: SENSOR_DATA_TYPE_SATELLITES_IN_VIEW : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeSatellitesInView"

Field: SENSOR_DATA_TYPE_SATELLITES_IN_VIEW_AZIMUTH : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeSatellitesInViewAzimuth"

Field: SENSOR_DATA_TYPE_SATELLITES_IN_VIEW_ELEVATION : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeSatellitesInViewElevation"

Field: SENSOR_DATA_TYPE_SATELLITES_IN_VIEW_PRNS : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeSatellitesInViewPrns"

Field: SENSOR_DATA_TYPE_SATELLITES_IN_VIEW_STN_RATIO : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeSatellitesInViewStnRatio"

Field: SENSOR_DATA_TYPE_SATELLITES_USED_COUNT : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeSatellitesUsedCount"

Field: SENSOR_DATA_TYPE_SATELLITES_USED_PRNS : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeSatellitesUsedPrns"

Field: SENSOR_DATA_TYPE_SPEED_KNOTS : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeSpeedKnots"

Field: SENSOR_DATA_TYPE_STRAIN : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeStrain"

Field: SENSOR_DATA_TYPE_TEMPERATURE_CELSIUS : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeTemperatureCelsius"

Field: SENSOR_DATA_TYPE_TIMESTAMP : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeTimestamp"

Field: SENSOR_DATA_TYPE_TRUE_HEADING_DEGREES : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeTrueHeadingDegrees"

Field: SENSOR_DATA_TYPE_VERTICAL_DILUTION_OF_PRECISION : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeVerticalDilutionOfPrecision"

Field: SENSOR_DATA_TYPE_WEIGHT_KILOGRAMS : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorDataTypeWeightKilograms"

Field: SENSOR_PROPERTY_ACCURACY : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorPropertyAccuracy"

Field: SENSOR_PROPERTY_CHANGE_SENSITIVITY : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorPropertyChangeSensitivity"

Field: SENSOR_PROPERTY_COMMON_GUID : System.Guid

+ Renamed to "SensorPropertyCommonGuid"

Field: SENSOR_PROPERTY_CONNECTION_TYPE : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorPropertyConnectionType"

Field: SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorPropertyCurrentReportInterval"

Field: SENSOR_PROPERTY_DESCRIPTION : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorPropertyDescription"

Field: SENSOR_PROPERTY_DEVICE_ID : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorPropertyDeviceId"

Field: SENSOR_PROPERTY_FRIENDLY_NAME : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorPropertyFriendlyName"

Field: SENSOR_PROPERTY_LIGHT_RESPONSE_CURVE : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorPropertyLightResponseCurve"

Field: SENSOR_PROPERTY_MANUFACTURER : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorPropertyManufacturer"

Field: SENSOR_PROPERTY_MIN_REPORT_INTERVAL : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorPropertyMinReportInterval"

Field: SENSOR_PROPERTY_MODEL : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorPropertyModel"

Field: SENSOR_PROPERTY_PERSISTENT_UNIQUE_ID : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorPropertyPersistentUniqueId"

Field: SENSOR_PROPERTY_RESOLUTION : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorPropertyResolution"

Field: SENSOR_PROPERTY_SAMPLING_RATE : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorPropertySamplingRate"

Field: SENSOR_PROPERTY_SERIAL_NUMBER : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorPropertySerialNumber"

Field: SENSOR_PROPERTY_STATE : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorPropertyState"

Field: SENSOR_PROPERTY_TYPE : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SensorPropertyType"

Class: SensorTypes

Field: Accelerometer1d : System.Guid

+ Renamed to "Accelerometer1D"

Field: Accelerometer2d : System.Guid

+ Renamed to "Accelerometer2D"

Field: Accelerometer3d : System.Guid

+ Renamed to "Accelerometer3D"

Field: Compass1d : System.Guid

+ Renamed to "Compass1D"

Field: Compass2d : System.Guid

+ Renamed to "Compass2D"

Field: Compass3d : System.Guid

+ Renamed to "Compass3D"

Field: Distance1d : System.Guid

+ Renamed to "Distance1D"

Field: Distance2d : System.Guid

+ Renamed to "Distance2D"

Field: Distance3d : System.Guid

+ Renamed to "Distance3D"

Field: Gyrometer1d : System.Guid

+ Renamed to "Gyrometer1D"

Field: Gyrometer2d : System.Guid

+ Renamed to "Gyrometer2D"

Field: Gyrometer3d : System.Guid

+ Renamed to "Gyrometer3D"

Field: Inclinometer1d : System.Guid

+ Renamed to "Inclinometer1D"

Field: Inclinometer2d : System.Guid

+ Renamed to "Inclinometer2D"

Field: Inclinometer3d : System.Guid

+ Renamed to "Inclinometer3D"

Field: MultiValueSwitch : System.Guid

+ Renamed to "MultivalueSwitch"

Field: RFIDScanner : System.Guid

+ Renamed to "RfidScanner"

Reflection Errors: (no reflection errors reported)

Microsoft.WindowsAPICodePack.Shell

Added namespaces: + Microsoft.WindowsAPICodePack.Shell.Interop

Namespace: Microsoft.WindowsAPICodePack.Controls

Removed types: + ExplorerBrowserItemsChangedEventHandler, ExplorerBrowserNavigationCompleteEventHandler, ExplorerBrowserNavigationFailedEventHandler, ExplorerBrowserNavigationPendingEventHandler, ExplorerBrowserSelectionChangedEventHandler, ExplorerBrowserViewEnumerationCompleteHandler, ExplorerBrowserViewSelectedItemChangedHandler, NavigationLogChangedEventHandler
Added types: + CommonControlException

Enum: ExplorerBrowserContentFlags

+ Renamed to "ExplorerBrowserContentSectionOptions"
Added fields: + None

Class: ExplorerBrowserContentOptions

Property: Flags : Microsoft.WindowsAPICodePack.Controls.ExplorerBrowserContentFlags

Method: get_Flags() : Microsoft.WindowsAPICodePack.Controls.ExplorerBrowserContentFlags
+ Signature changed to "() : Microsoft.WindowsAPICodePack.Controls.ExplorerBrowserContentSectionOptions"
Method: set_Flags(Microsoft.WindowsAPICodePack.Controls.ExplorerBrowserContentFlags) : System.Void
+ Signature changed to "(Microsoft.WindowsAPICodePack.Controls.ExplorerBrowserContentSectionOptions) : System.Void"

Enum: ExplorerBrowserNavigationFlags

+ Renamed to "ExplorerBrowserNavigateOptions"

Class: ExplorerBrowserNavigationLog

Property: Locations : System.Collections.Generic.List<Microsoft.WindowsAPICodePack.Shell.ShellObject>

+ Read/write status changed to "ReadOnly"
Method: get_Locations() : System.Collections.Generic.List<Microsoft.WindowsAPICodePack.Shell.ShellObject>
+ Signature changed to "() : System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.Shell.ShellObject>"

Class: ExplorerBrowserNavigationOptions

Property: Flags : Microsoft.WindowsAPICodePack.Controls.ExplorerBrowserNavigationFlags

Method: get_Flags() : Microsoft.WindowsAPICodePack.Controls.ExplorerBrowserNavigationFlags
+ Signature changed to "() : Microsoft.WindowsAPICodePack.Controls.ExplorerBrowserNavigateOptions"
Method: set_Flags(Microsoft.WindowsAPICodePack.Controls.ExplorerBrowserNavigationFlags) : System.Void
+ Signature changed to "(Microsoft.WindowsAPICodePack.Controls.ExplorerBrowserNavigateOptions) : System.Void"

Enum: PaneVisibilityState

Field: DontCare

+ Renamed to "DoNotCare"

Namespace: Microsoft.WindowsAPICodePack.Controls.WindowsForms

Class: CommandLink

Property: ShieldIcon : System.Boolean

+ Renamed to "UseElevationIcon"
Method: get_ShieldIcon() : System.Boolean
+ Renamed to "get_UseElevationIcon"
Method: set_ShieldIcon(System.Boolean) : System.Void
+ Renamed to "set_UseElevationIcon"

Namespace: Microsoft.WindowsAPICodePack.Controls.WindowsPresentationFoundation

Class: ExplorerBrowser

Added methods: + Dispose() : System.Void

Field: NavigationTargetProperty : System.Windows.DependencyProperty

Accessibility changed to "public"

Namespace: Microsoft.WindowsAPICodePack.Dialogs

Class: CommonFileDialog

Added methods: + ApplyCollectionChanged() : System.Void, ApplyControlPropertyChange(System.String, Microsoft.WindowsAPICodePack.Dialogs.DialogControl) : System.Void, IsCollectionChangeAllowed() : System.Boolean, IsControlPropertyChangeAllowed(System.String, Microsoft.WindowsAPICodePack.Dialogs.DialogControl) : System.Boolean

Property: DefaultDirectory : System.String

+ Read/write status changed to "ReadWrite"
Added methods: + get_DefaultDirectory() : System.String

Property: DefaultDirectoryShellContainer : Microsoft.WindowsAPICodePack.Shell.ShellContainer

+ Read/write status changed to "ReadWrite"
Added methods: + get_DefaultDirectoryShellContainer() : Microsoft.WindowsAPICodePack.Shell.ShellContainer

Method: Dispose(System.Boolean) : System.Void

Accessibility changed to "not public"

Enum: CommonFileDialogResult

Added fields: + None

Field: OK

+ Renamed to "Ok"

Class: CommonOpenFileDialog

Property: FileNames : System.Collections.ObjectModel.Collection<System.String>

Method: get_FileNames() : System.Collections.ObjectModel.Collection<System.String>
+ Signature changed to "() : System.Collections.Generic.IEnumerable<System.String>"

Namespace: Microsoft.WindowsAPICodePack.Shell

Removed types: + AeroGlassCompositionChangedEvent, ShellObjectNode
Added types: + EventHandlerExtensionMethods, NativePoint, NativeRect, ShellException, ShellObjectChangedEventArgs, ShellObjectChangeTypes, ShellObjectNotificationEventArgs, ShellObjectRenamedEventArgs, ShellObjectWatcher, SystemImageUpdatedEventArgs, WindowMessageEventArgs

Class: AeroGlassCompositionChangedEvenArgs

+ Renamed to "AeroGlassCompositionChangedEventArgs"

Property: GlassAvailable : System.Boolean

+ Read/write status changed to "ReadWrite"

Class: FileSystemKnownFolder

Property: Redirection : Microsoft.WindowsAPICodePack.Shell.RedirectionCapabilities

Method: get_Redirection() : Microsoft.WindowsAPICodePack.Shell.RedirectionCapabilities
+ Signature changed to "() : Microsoft.WindowsAPICodePack.Shell.RedirectionCapability"

Enum: FolderLogicalViewMode

Added fields: + None

Class: GlassForm

Method: ResetAreoGlass() : System.Void

+ Renamed to "ResetAeroGlass"

Class: GlassWindow

Removed methods: + ResetAreoGlass() : System.Void
Added methods: + ResetAeroGlass() : System.Void

Struct: IconReference

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.Shell.IconReference, Microsoft.WindowsAPICodePack.Shell.IconReference) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.Shell.IconReference, Microsoft.WindowsAPICodePack.Shell.IconReference) : System.Boolean

Interface: IKnownFolder

Property: Redirection : Microsoft.WindowsAPICodePack.Shell.RedirectionCapabilities

Method: get_Redirection() : Microsoft.WindowsAPICodePack.Shell.RedirectionCapabilities
+ Signature changed to "() : Microsoft.WindowsAPICodePack.Shell.RedirectionCapability"

Class: KnownFolders

Removed properties: + CommonOEMLinks : Microsoft.WindowsAPICodePack.Shell.IKnownFolder
Added properties: + CommonOemLinks : Microsoft.WindowsAPICodePack.Shell.IKnownFolder

Class: NonFileSystemKnownFolder

Property: Redirection : Microsoft.WindowsAPICodePack.Shell.RedirectionCapabilities

Method: get_Redirection() : Microsoft.WindowsAPICodePack.Shell.RedirectionCapabilities
+ Signature changed to "() : Microsoft.WindowsAPICodePack.Shell.RedirectionCapability"

Enum: QueryParserManagerOption

Field: SchemaBiaryName

+ Renamed to "SchemaBinaryName"

Field: UnLocalizedSchemaBinaryPath

+ Renamed to "UnlocalizedSchemaBinaryPath"

Enum: RedirectionCapabilities

+ Renamed to "RedirectionCapability"

Class: SearchCondition

Property: ConditionOperation : Microsoft.WindowsAPICodePack.Shell.SearchConditionOperation

+ Read/write status changed to "ReadOnly"

Property: ConditionType : Microsoft.WindowsAPICodePack.Shell.SearchConditionType

+ Read/write status changed to "ReadOnly"

Method: Dispose(System.Boolean) : System.Void

Accessibility changed to "not public"

Property: PropertyCanonicalName : System.String

+ Read/write status changed to "ReadOnly"

Property: PropertyKey : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Read/write status changed to "ReadOnly"

Enum: SearchConditionOperation

Field: DOSWildcards

+ Renamed to "DosWildcards"

Class: ShellLink

Added properties: + Arguments : System.String, Comments : System.String

Class: ShellObject

Added methods: + Update(System.Runtime.InteropServices.ComTypes.IBindCtx) : System.Void

Class: ShellObjectCollection

Method: FromDataObject(System.Object) : Microsoft.WindowsAPICodePack.Shell.ShellObjectCollection

+ Signature changed to "(System.Runtime.InteropServices.ComTypes.IDataObject) : Microsoft.WindowsAPICodePack.Shell.ShellObjectCollection"

Class: ShellSearchFolder

Property: DisplayName : System.String

+ Renamed to "SetDisplayName"
+ Kind changed to "Method"
Removed methods: + set_DisplayName(System.String) : System.Void

Property: FolderTypeID : System.Guid

+ Renamed to "SetFolderTypeID"
+ Kind changed to "Method"
Removed methods: + set_FolderTypeID(System.Guid) : System.Void

Property: GroupColumn : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "SetGroupColumn"
+ Kind changed to "Method"
Removed methods: + set_GroupColumn(Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey) : System.Void

Property: IconSize : System.Int32

+ Renamed to "SetIconSize"
+ Kind changed to "Method"
Removed methods: + set_IconSize(System.Int32) : System.Void

Property: SearchScopePaths : System.String[]

Method: get_SearchScopePaths() : System.String[]
+ Signature changed to "() : System.Collections.Generic.IEnumerable<System.String>"

Property: SortColumns : Microsoft.WindowsAPICodePack.Shell.SortColumn[]

+ Kind changed to "Method"
Removed methods: + set_SortColumns(Microsoft.WindowsAPICodePack.Shell.SortColumn[]) : System.Void

Property: VisibleColumns : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey[]

+ Renamed to "SetVisibleColumns"
+ Kind changed to "Method"
Removed methods: + set_VisibleColumns(Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey[]) : System.Void

Class: ShellThumbnail

Property: FormatOption : Microsoft.WindowsAPICodePack.Shell.ShellThumbnailFormatOptions

Method: get_FormatOption() : Microsoft.WindowsAPICodePack.Shell.ShellThumbnailFormatOptions
+ Signature changed to "() : Microsoft.WindowsAPICodePack.Shell.ShellThumbnailFormatOption"
Method: set_FormatOption(Microsoft.WindowsAPICodePack.Shell.ShellThumbnailFormatOptions) : System.Void
+ Signature changed to "(Microsoft.WindowsAPICodePack.Shell.ShellThumbnailFormatOption) : System.Void"

Property: RetrievalOption : Microsoft.WindowsAPICodePack.Shell.ShellThumbnailRetrievalOptions

Method: get_RetrievalOption() : Microsoft.WindowsAPICodePack.Shell.ShellThumbnailRetrievalOptions
+ Signature changed to "() : Microsoft.WindowsAPICodePack.Shell.ShellThumbnailRetrievalOption"
Method: set_RetrievalOption(Microsoft.WindowsAPICodePack.Shell.ShellThumbnailRetrievalOptions) : System.Void
+ Signature changed to "(Microsoft.WindowsAPICodePack.Shell.ShellThumbnailRetrievalOption) : System.Void"

Enum: ShellThumbnailFormatOptions

+ Renamed to "ShellThumbnailFormatOption"

Enum: ShellThumbnailRetrievalOptions

+ Renamed to "ShellThumbnailRetrievalOption"

Struct: SortColumn

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.Shell.SortColumn, Microsoft.WindowsAPICodePack.Shell.SortColumn) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.Shell.SortColumn, Microsoft.WindowsAPICodePack.Shell.SortColumn) : System.Boolean

Field: Direction : Microsoft.WindowsAPICodePack.Shell.SortDirection

+ Kind changed to "Property"
Added methods: + get_Direction() : Microsoft.WindowsAPICodePack.Shell.SortDirection, set_Direction(Microsoft.WindowsAPICodePack.Shell.SortDirection) : System.Void

Field: PropertyKey : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Kind changed to "Property"
Added methods: + get_PropertyKey() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey, set_PropertyKey(Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey) : System.Void

Enum: SortDirection

Added fields: + Default

Enum: STGM

Accessibility changed to "public"
+ Renamed to "AccessModes"

Field: DirectSwmr

+ Renamed to "DirectSingleWriterMultipleReader"

Class: StockIcon

Method: .ctor(Microsoft.WindowsAPICodePack.Shell.StockIconIdentifier, Microsoft.WindowsAPICodePack.Shell.StockIconSizes, System.Boolean, System.Boolean) : Microsoft.WindowsAPICodePack.Shell.StockIcon

+ Signature changed to "(Microsoft.WindowsAPICodePack.Shell.StockIconIdentifier, Microsoft.WindowsAPICodePack.Shell.StockIconSize, System.Boolean, System.Boolean) : Microsoft.WindowsAPICodePack.Shell.StockIcon"

Property: CurrentSize : Microsoft.WindowsAPICodePack.Shell.StockIconSizes

Method: get_CurrentSize() : Microsoft.WindowsAPICodePack.Shell.StockIconSizes
+ Signature changed to "() : Microsoft.WindowsAPICodePack.Shell.StockIconSize"
Method: set_CurrentSize(Microsoft.WindowsAPICodePack.Shell.StockIconSizes) : System.Void
+ Signature changed to "(Microsoft.WindowsAPICodePack.Shell.StockIconSize) : System.Void"

Method: Dispose(System.Boolean) : System.Void

Accessibility changed to "not public"

Class: StockIcons

Method: .ctor(Microsoft.WindowsAPICodePack.Shell.StockIconSizes, System.Boolean, System.Boolean) : Microsoft.WindowsAPICodePack.Shell.StockIcons

+ Signature changed to "(Microsoft.WindowsAPICodePack.Shell.StockIconSize, System.Boolean, System.Boolean) : Microsoft.WindowsAPICodePack.Shell.StockIcons"

Property: DefaultSize : Microsoft.WindowsAPICodePack.Shell.StockIconSizes

Method: get_DefaultSize() : Microsoft.WindowsAPICodePack.Shell.StockIconSizes
+ Signature changed to "() : Microsoft.WindowsAPICodePack.Shell.StockIconSize"

Enum: StockIconSizes

+ Renamed to "StockIconSize"

Namespace: Microsoft.WindowsAPICodePack.Shell.PropertySystem

Added types: + PropertyStoreCacheState, PropertySystemException

Class: AppUserModel

Property: IsDestListSeparator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "IsDestinationListSeparator"
Method: get_IsDestListSeparator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_IsDestinationListSeparator"

Class: Audio

Property: IsVariableBitRate : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "IsVariableBitrate"
Method: get_IsVariableBitRate() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_IsVariableBitrate"

Class: Communication

Property: FollowupIconIndex : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "FollowUpIconIndex"
Method: get_FollowupIconIndex() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_FollowUpIconIndex"

Class: Contact

Property: BusinessHomePage : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "BusinessHomepage"
Method: get_BusinessHomePage() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_BusinessHomepage"

Property: NickName : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "Nickname"
Method: get_NickName() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_Nickname"

Property: WebPage : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "Webpage"
Method: get_WebPage() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_Webpage"

Class: Device

Property: PrinterURL : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "PrinterUrl"
Removed methods: + get_PrinterURL() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
Added methods: + get_PrinterUrl() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

Class: GPS

Property: DestBearing : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "DestinationBearing"
Method: get_DestBearing() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_DestinationBearing"

Property: DestBearingDenominator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "DestinationBearingDenominator"
Method: get_DestBearingDenominator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_DestinationBearingDenominator"

Property: DestBearingNumerator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "DestinationBearingNumerator"
Method: get_DestBearingNumerator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_DestinationBearingNumerator"

Property: DestBearingRef : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "DestinationBearingRef"
Method: get_DestBearingRef() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_DestinationBearingRef"

Property: DestDistance : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "DestinationDistance"
Method: get_DestDistance() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_DestinationDistance"

Property: DestDistanceDenominator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "DestinationDistanceDenominator"
Method: get_DestDistanceDenominator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_DestinationDistanceDenominator"

Property: DestDistanceNumerator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "DestinationDistanceNumerator"
Method: get_DestDistanceNumerator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_DestinationDistanceNumerator"

Property: DestDistanceRef : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "DestinationDistanceRef"
Method: get_DestDistanceRef() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_DestinationDistanceRef"

Property: DestLatitude : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "DestinationLatitude"
Method: get_DestLatitude() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_DestinationLatitude"

Property: DestLatitudeDenominator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "DestinationLatitudeDenominator"
Method: get_DestLatitudeDenominator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_DestinationLatitudeDenominator"

Property: DestLatitudeNumerator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "DestinationLatitudeNumerator"
Method: get_DestLatitudeNumerator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_DestinationLatitudeNumerator"

Property: DestLatitudeRef : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "DestinationLatitudeRef"
Method: get_DestLatitudeRef() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_DestinationLatitudeRef"

Property: DestLongitude : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "DestinationLongitude"
Method: get_DestLongitude() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_DestinationLongitude"

Property: DestLongitudeDenominator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "DestinationLongitudeDenominator"
Method: get_DestLongitudeDenominator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_DestinationLongitudeDenominator"

Property: DestLongitudeNumerator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "DestinationLongitudeNumerator"
Method: get_DestLongitudeNumerator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_DestinationLongitudeNumerator"

Property: DestLongitudeRef : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "DestinationLongitudeRef"
Method: get_DestLongitudeRef() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_DestinationLongitudeRef"

Property: ImgDirection : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "ImageDirection"
Method: get_ImgDirection() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_ImageDirection"

Property: ImgDirectionDenominator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "ImageDirectionDenominator"
Method: get_ImgDirectionDenominator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_ImageDirectionDenominator"

Property: ImgDirectionNumerator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "ImageDirectionNumerator"
Method: get_ImgDirectionNumerator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_ImageDirectionNumerator"

Property: ImgDirectionRef : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "ImageDirectionRef"
Method: get_ImgDirectionRef() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_ImageDirectionRef"

Interface: IShellProperty

Method: FormatForDisplay(Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyDescriptionFormat) : System.String

+ Signature changed to "(Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyDescriptionFormatOptions) : System.String"

Class: Media

Property: SubTitle : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "Subtitle"
Method: get_SubTitle() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_Subtitle"

Enum: PropertyColumnState

+ Renamed to "PropertyColumnStateOptions"

Field: DefaultValue

+ Renamed to "None"

Field: NoDPIScale

+ Renamed to "NoDpiScale"

Field: PerferVarCmp

+ Renamed to "PreferVariantCompare"

Enum: PropertyDescriptionFormat

+ Renamed to "PropertyDescriptionFormatOptions"

Field: Default

+ Renamed to "None"

Enum: PropertyGroupingRange

Field: Dymamic

+ Renamed to "Dynamic"

Class: PropertySystem

Property: IsPinnedToNameSpaceTree : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.Boolean>>

+ Renamed to "IsPinnedToNamespaceTree"
Method: get_IsPinnedToNameSpaceTree() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.Boolean>>
+ Renamed to "get_IsPinnedToNamespaceTree"

Property: NamespaceCLSID : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.IntPtr>>

+ Renamed to "NamespaceClsid"
Method: get_NamespaceCLSID() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.IntPtr>>
+ Renamed to "get_NamespaceClsid"

Property: OwnerSID : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>

+ Renamed to "OwnerSid"
Method: get_OwnerSID() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>
+ Renamed to "get_OwnerSid"

Class: PropertySystemAppUserModel

Property: IsDestListSeparator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.Boolean>>

+ Renamed to "IsDestinationListSeparator"
Method: get_IsDestListSeparator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.Boolean>>
+ Renamed to "get_IsDestinationListSeparator"

Class: PropertySystemAudio

Property: IsVariableBitRate : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.Boolean>>

+ Renamed to "IsVariableBitrate"
Method: get_IsVariableBitRate() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.Boolean>>
+ Renamed to "get_IsVariableBitrate"

Class: PropertySystemCommunication

Property: FollowupIconIndex : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.Int32>>

+ Renamed to "FollowUpIconIndex"
Method: get_FollowupIconIndex() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.Int32>>
+ Renamed to "get_FollowUpIconIndex"

Class: PropertySystemContact

Property: BusinessHomePage : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>

+ Renamed to "BusinessHomepage"
Method: get_BusinessHomePage() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>
+ Renamed to "get_BusinessHomepage"

Property: NickName : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>

+ Renamed to "Nickname"
Method: get_NickName() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>
+ Renamed to "get_Nickname"

Property: WebPage : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>

+ Renamed to "Webpage"
Method: get_WebPage() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>
+ Renamed to "get_Webpage"

Class: PropertySystemDevice

Property: PrinterURL : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>

+ Renamed to "PrinterUrl"
Method: get_PrinterURL() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>
+ Renamed to "get_PrinterUrl"

Class: PropertySystemGPS

Property: DestBearing : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.Double>>

+ Renamed to "DestinationBearing"
Method: get_DestBearing() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.Double>>
+ Renamed to "get_DestinationBearing"

Property: DestBearingDenominator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.UInt32>>

+ Renamed to "DestinationBearingDenominator"
Method: get_DestBearingDenominator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.UInt32>>
+ Renamed to "get_DestinationBearingDenominator"

Property: DestBearingNumerator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.UInt32>>

+ Renamed to "DestinationBearingNumerator"
Method: get_DestBearingNumerator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.UInt32>>
+ Renamed to "get_DestinationBearingNumerator"

Property: DestBearingRef : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>

+ Renamed to "DestinationBearingRef"
Method: get_DestBearingRef() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>
+ Renamed to "get_DestinationBearingRef"

Property: DestDistance : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.Double>>

+ Renamed to "DestinationDistance"
Method: get_DestDistance() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.Double>>
+ Renamed to "get_DestinationDistance"

Property: DestDistanceDenominator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.UInt32>>

+ Renamed to "DestinationDistanceDenominator"
Method: get_DestDistanceDenominator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.UInt32>>
+ Renamed to "get_DestinationDistanceDenominator"

Property: DestDistanceNumerator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.UInt32>>

+ Renamed to "DestinationDistanceNumerator"
Method: get_DestDistanceNumerator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.UInt32>>
+ Renamed to "get_DestinationDistanceNumerator"

Property: DestDistanceRef : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>

+ Renamed to "DestinationDistanceRef"
Method: get_DestDistanceRef() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>
+ Renamed to "get_DestinationDistanceRef"

Property: DestLatitude : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Double[]>

+ Renamed to "DestinationLatitude"
Method: get_DestLatitude() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Double[]>
+ Renamed to "get_DestinationLatitude"

Property: DestLatitudeDenominator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.UInt32[]>

+ Renamed to "DestinationLatitudeDenominator"
Method: get_DestLatitudeDenominator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.UInt32[]>
+ Renamed to "get_DestinationLatitudeDenominator"

Property: DestLatitudeNumerator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.UInt32[]>

+ Renamed to "DestinationLatitudeNumerator"
Method: get_DestLatitudeNumerator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.UInt32[]>
+ Renamed to "get_DestinationLatitudeNumerator"

Property: DestLatitudeRef : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>

+ Renamed to "DestinationLatitudeRef"
Method: get_DestLatitudeRef() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>
+ Renamed to "get_DestinationLatitudeRef"

Property: DestLongitude : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Double[]>

+ Renamed to "DestinationLongitude"
Method: get_DestLongitude() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Double[]>
+ Renamed to "get_DestinationLongitude"

Property: DestLongitudeDenominator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.UInt32[]>

+ Renamed to "DestinationLongitudeDenominator"
Method: get_DestLongitudeDenominator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.UInt32[]>
+ Renamed to "get_DestinationLongitudeDenominator"

Property: DestLongitudeNumerator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.UInt32[]>

+ Renamed to "DestinationLongitudeNumerator"
Method: get_DestLongitudeNumerator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.UInt32[]>
+ Renamed to "get_DestinationLongitudeNumerator"

Property: DestLongitudeRef : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>

+ Renamed to "DestinationLongitudeRef"
Method: get_DestLongitudeRef() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>
+ Renamed to "get_DestinationLongitudeRef"

Property: ImgDirection : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.Double>>

+ Renamed to "ImageDirection"
Method: get_ImgDirection() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.Double>>
+ Renamed to "get_ImageDirection"

Property: ImgDirectionDenominator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.UInt32>>

+ Renamed to "ImageDirectionDenominator"
Method: get_ImgDirectionDenominator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.UInt32>>
+ Renamed to "get_ImageDirectionDenominator"

Property: ImgDirectionNumerator : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.UInt32>>

+ Renamed to "ImageDirectionNumerator"
Method: get_ImgDirectionNumerator() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.Nullable<System.UInt32>>
+ Renamed to "get_ImageDirectionNumerator"

Property: ImgDirectionRef : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>

+ Renamed to "ImageDirectionRef"
Method: get_ImgDirectionRef() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>
+ Renamed to "get_ImageDirectionRef"

Class: PropertySystemMedia

Property: SubTitle : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>

+ Renamed to "Subtitle"
Method: get_SubTitle() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellProperty<System.String>
+ Renamed to "get_Subtitle"

Enum: PropertyTypeFlags

+ Renamed to "PropertyTypeOptions"

Field: Default

+ Renamed to "None"

Enum: PropertyViewFlags

+ Renamed to "PropertyViewOptions"

Field: Default

+ Renamed to "None"

Class: ShellProperties

Added methods: + Dispose() : System.Void

Class: ShellProperty<T>

Method: FormatForDisplay(Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyDescriptionFormat) : System.String

+ Signature changed to "(Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyDescriptionFormatOptions) : System.String"

Method: TryFormatForDisplay(Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyDescriptionFormat, System.String&) : System.Boolean

+ Signature changed to "(Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyDescriptionFormatOptions, System.String&) : System.Boolean"

Class: ShellPropertyCollection

Method: .ctor(Microsoft.WindowsAPICodePack.Shell.ShellObject) : Microsoft.WindowsAPICodePack.Shell.PropertySystem.ShellPropertyCollection

Accessibility changed to "public"

Class: ShellPropertyDescription

Property: ColumnState : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyColumnState

Method: get_ColumnState() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyColumnState
+ Signature changed to "() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyColumnStateOptions"

Method: Dispose(System.Boolean) : System.Void

Accessibility changed to "not public"

Property: TypeFlags : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyTypeFlags

Method: get_TypeFlags() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyTypeFlags
+ Signature changed to "() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyTypeOptions"

Property: ViewFlags : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyViewFlags

Method: get_ViewFlags() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyViewFlags
+ Signature changed to "() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyViewOptions"

Class: System

Property: IsPinnedToNameSpaceTree : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "IsPinnedToNamespaceTree"
Method: get_IsPinnedToNameSpaceTree() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_IsPinnedToNamespaceTree"

Property: NamespaceCLSID : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "NamespaceClsid"
Method: get_NamespaceCLSID() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_NamespaceClsid"

Property: OwnerSID : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey

+ Renamed to "OwnerSid"
Method: get_OwnerSID() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.PropertyKey
+ Renamed to "get_OwnerSid"

Class: WindowProperties

Removed methods: + .ctor() : Microsoft.WindowsAPICodePack.Shell.PropertySystem.WindowProperties

Namespace: Microsoft.WindowsAPICodePack.Taskbar

Added types: + TabbedThumbnailClosedEventArgs, ThumbnailAlphaType

Interface: IJumpListTask

+ Renamed to "JumpListTask"
+ Kind changed to "Class"

Class: JumpList

Method: AddUserTasks(Microsoft.WindowsAPICodePack.Taskbar.IJumpListTask[]) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.Taskbar.JumpListTask[]) : System.Void"

Class: JumpListLink

Method: Dispose(System.Boolean) : System.Void

Accessibility changed to "not public"

Class: JumpListSeparator

Method: Dispose(System.Boolean) : System.Void

Accessibility changed to "not public"

Class: TabbedThumbnail

Method: Dispose(System.Boolean) : System.Void

Accessibility changed to "not public"

Class: TabbedThumbnailBitmapRequestedEventArgs

Removed methods: + SetImage(System.Drawing.Bitmap) : System.Void, SetImage(System.IntPtr) : System.Void, SetImage(System.Windows.Media.Imaging.BitmapSource) : System.Void

Method: .ctor(System.IntPtr, Microsoft.WindowsAPICodePack.Taskbar.TabbedThumbnail) : Microsoft.WindowsAPICodePack.Taskbar.TabbedThumbnailBitmapRequestedEventArgs

+ Signature changed to "(System.IntPtr) : Microsoft.WindowsAPICodePack.Taskbar.TabbedThumbnailBitmapRequestedEventArgs"

Method: .ctor(System.Windows.UIElement, Microsoft.WindowsAPICodePack.Taskbar.TabbedThumbnail) : Microsoft.WindowsAPICodePack.Taskbar.TabbedThumbnailBitmapRequestedEventArgs

+ Signature changed to "(System.Windows.UIElement) : Microsoft.WindowsAPICodePack.Taskbar.TabbedThumbnailBitmapRequestedEventArgs"

Class: TabbedThumbnailEventArgs

Removed properties: + TabbedThumbnail : Microsoft.WindowsAPICodePack.Taskbar.TabbedThumbnail

Method: .ctor(System.IntPtr, Microsoft.WindowsAPICodePack.Taskbar.TabbedThumbnail) : Microsoft.WindowsAPICodePack.Taskbar.TabbedThumbnailEventArgs

+ Signature changed to "(System.IntPtr) : Microsoft.WindowsAPICodePack.Taskbar.TabbedThumbnailEventArgs"

Method: .ctor(System.Windows.UIElement, Microsoft.WindowsAPICodePack.Taskbar.TabbedThumbnail) : Microsoft.WindowsAPICodePack.Taskbar.TabbedThumbnailEventArgs

+ Signature changed to "(System.Windows.UIElement) : Microsoft.WindowsAPICodePack.Taskbar.TabbedThumbnailEventArgs"

Class: TaskbarManager

Property: ThumbnailToolbars : Microsoft.WindowsAPICodePack.Taskbar.ThumbnailToolbarManager

+ Renamed to "ThumbnailToolBars"
Method: get_ThumbnailToolbars() : Microsoft.WindowsAPICodePack.Taskbar.ThumbnailToolbarManager
+ Renamed to "get_ThumbnailToolBars"
+ Signature changed to "() : Microsoft.WindowsAPICodePack.Taskbar.ThumbnailToolBarManager"

Class: ThumbnailButtonClickedEventArgs

Method: .ctor(System.IntPtr, Microsoft.WindowsAPICodePack.Taskbar.ThumbnailToolbarButton) : Microsoft.WindowsAPICodePack.Taskbar.ThumbnailButtonClickedEventArgs

+ Signature changed to "(System.IntPtr, Microsoft.WindowsAPICodePack.Taskbar.ThumbnailToolBarButton) : Microsoft.WindowsAPICodePack.Taskbar.ThumbnailButtonClickedEventArgs"

Method: .ctor(System.Windows.UIElement, Microsoft.WindowsAPICodePack.Taskbar.ThumbnailToolbarButton) : Microsoft.WindowsAPICodePack.Taskbar.ThumbnailButtonClickedEventArgs

+ Signature changed to "(System.Windows.UIElement, Microsoft.WindowsAPICodePack.Taskbar.ThumbnailToolBarButton) : Microsoft.WindowsAPICodePack.Taskbar.ThumbnailButtonClickedEventArgs"

Property: ThumbnailButton : Microsoft.WindowsAPICodePack.Taskbar.ThumbnailToolbarButton

Method: get_ThumbnailButton() : Microsoft.WindowsAPICodePack.Taskbar.ThumbnailToolbarButton
+ Signature changed to "() : Microsoft.WindowsAPICodePack.Taskbar.ThumbnailToolBarButton"

Class: ThumbnailToolbarButton

+ Renamed to "ThumbnailToolBarButton"

Method: .ctor(System.Drawing.Icon, System.String) : Microsoft.WindowsAPICodePack.Taskbar.ThumbnailToolbarButton

+ Signature changed to "(System.Drawing.Icon, System.String) : Microsoft.WindowsAPICodePack.Taskbar.ThumbnailToolBarButton"

Class: ThumbnailToolbarManager

+ Renamed to "ThumbnailToolBarManager"

Method: AddButtons(System.IntPtr, Microsoft.WindowsAPICodePack.Taskbar.ThumbnailToolbarButton[]) : System.Void

+ Signature changed to "(System.IntPtr, Microsoft.WindowsAPICodePack.Taskbar.ThumbnailToolBarButton[]) : System.Void"

Method: AddButtons(System.Windows.UIElement, Microsoft.WindowsAPICodePack.Taskbar.ThumbnailToolbarButton[]) : System.Void

+ Signature changed to "(System.Windows.UIElement, Microsoft.WindowsAPICodePack.Taskbar.ThumbnailToolBarButton[]) : System.Void"

Namespace: MS.WindowsAPICodePack.Internal

Class: ExplorerBrowserViewEvents

Added methods: + .ctor() : MS.WindowsAPICodePack.Internal.ExplorerBrowserViewEvents, Dispose() : System.Void

Reflection Errors: (no reflection errors reported)

+ \ No newline at end of file diff --git a/documentation/Windows API Code Pack DirectX API Changes.html b/documentation/Windows API Code Pack DirectX API Changes.html new file mode 100644 index 00000000..45991e31 --- /dev/null +++ b/documentation/Windows API Code Pack DirectX API Changes.html @@ -0,0 +1,4126 @@ + + + + + Assembly Changes - Microsoft.WindowsAPICodePack.DirectX + + + + Namespaces + +

Namespace: Microsoft.WindowsAPICodePack.DirectX

+ Removed types: + Colors
+

Class: DirectHelpers

+

Method: .ctor() : Microsoft.WindowsAPICodePack.DirectX.DirectHelpers

Accessibility changed to "not public"

Method: CreateInterface(System.IntPtr) : T

+ Renamed to "CreateInterfaceWrapper"

Method: CreateIUnknown(System.IntPtr) : T

+ Renamed to "CreateIUnknownWrapper"

Method: GetExceptionForHResult(System.Int32) : System.Exception

+ Renamed to "GetExceptionForHresult"

Method: ThrowExceptionForHResult(System.Int32) : System.Void

+ Renamed to "ThrowExceptionForHresult"

Class: DirectObject

Method: GetInterface<ID3D10EffectBlendVariable>() : ID3D10EffectBlendVariable*

+ Renamed to "CastInterface<ID3D10EffectBlendVariable>"

Method: GetInterface<ID3D10EffectConstantBuffer>() : ID3D10EffectConstantBuffer*

+ Renamed to "CastInterface<ID3D10EffectConstantBuffer>"

Method: GetInterface<ID3D10EffectDepthStencilVariable>() : ID3D10EffectDepthStencilVariable*

+ Renamed to "CastInterface<ID3D10EffectDepthStencilVariable>"

Method: GetInterface<ID3D10EffectDepthStencilViewVariable>() : ID3D10EffectDepthStencilViewVariable*

+ Renamed to "CastInterface<ID3D10EffectDepthStencilViewVariable>"

Method: GetInterface<ID3D10EffectMatrixVariable>() : ID3D10EffectMatrixVariable*

+ Renamed to "CastInterface<ID3D10EffectMatrixVariable>"

Method: GetInterface<ID3D10EffectPass>() : ID3D10EffectPass*

+ Renamed to "CastInterface<ID3D10EffectPass>"

Method: GetInterface<ID3D10EffectRasterizerVariable>() : ID3D10EffectRasterizerVariable*

+ Renamed to "CastInterface<ID3D10EffectRasterizerVariable>"

Method: GetInterface<ID3D10EffectRenderTargetViewVariable>() : ID3D10EffectRenderTargetViewVariable*

+ Renamed to "CastInterface<ID3D10EffectRenderTargetViewVariable>"

Method: GetInterface<ID3D10EffectSamplerVariable>() : ID3D10EffectSamplerVariable*

+ Renamed to "CastInterface<ID3D10EffectSamplerVariable>"

Method: GetInterface<ID3D10EffectScalarVariable>() : ID3D10EffectScalarVariable*

+ Renamed to "CastInterface<ID3D10EffectScalarVariable>"

Method: GetInterface<ID3D10EffectShaderResourceVariable>() : ID3D10EffectShaderResourceVariable*

+ Renamed to "CastInterface<ID3D10EffectShaderResourceVariable>"

Method: GetInterface<ID3D10EffectShaderVariable>() : ID3D10EffectShaderVariable*

+ Renamed to "CastInterface<ID3D10EffectShaderVariable>"

Method: GetInterface<ID3D10EffectStringVariable>() : ID3D10EffectStringVariable*

+ Renamed to "CastInterface<ID3D10EffectStringVariable>"

Method: GetInterface<ID3D10EffectTechnique>() : ID3D10EffectTechnique*

+ Renamed to "CastInterface<ID3D10EffectTechnique>"

Method: GetInterface<ID3D10EffectType>() : ID3D10EffectType*

+ Renamed to "CastInterface<ID3D10EffectType>"

Method: GetInterface<ID3D10EffectVariable>() : ID3D10EffectVariable*

+ Renamed to "CastInterface<ID3D10EffectVariable>"

Method: GetInterface<ID3D10EffectVectorVariable>() : ID3D10EffectVectorVariable*

+ Renamed to "CastInterface<ID3D10EffectVectorVariable>"

Method: GetInterface<ID3D10Include>() : ID3D10Include*

+ Renamed to "CastInterface<ID3D10Include>"

Method: GetInterface<ID3D10ShaderReflectionConstantBuffer>() : ID3D10ShaderReflectionConstantBuffer*

+ Renamed to "CastInterface<ID3D10ShaderReflectionConstantBuffer>"

Method: GetInterface<ID3D10ShaderReflectionType>() : ID3D10ShaderReflectionType*

+ Renamed to "CastInterface<ID3D10ShaderReflectionType>"

Method: GetInterface<ID3D10ShaderReflectionVariable>() : ID3D10ShaderReflectionVariable*

+ Renamed to "CastInterface<ID3D10ShaderReflectionVariable>"

Class: DirectUnknown

Method: GetInterface<ID2D1Bitmap>() : ID2D1Bitmap*

+ Renamed to "CastInterface<ID2D1Bitmap>"

Method: GetInterface<ID2D1BitmapBrush>() : ID2D1BitmapBrush*

+ Renamed to "CastInterface<ID2D1BitmapBrush>"

Method: GetInterface<ID2D1BitmapRenderTarget>() : ID2D1BitmapRenderTarget*

+ Renamed to "CastInterface<ID2D1BitmapRenderTarget>"

Method: GetInterface<ID2D1Brush>() : ID2D1Brush*

+ Renamed to "CastInterface<ID2D1Brush>"

Method: GetInterface<ID2D1DCRenderTarget>() : ID2D1DCRenderTarget*

+ Renamed to "CastInterface<ID2D1DCRenderTarget>"

Method: GetInterface<ID2D1DrawingStateBlock>() : ID2D1DrawingStateBlock*

+ Renamed to "CastInterface<ID2D1DrawingStateBlock>"

Method: GetInterface<ID2D1EllipseGeometry>() : ID2D1EllipseGeometry*

+ Renamed to "CastInterface<ID2D1EllipseGeometry>"

Method: GetInterface<ID2D1Factory>() : ID2D1Factory*

+ Renamed to "CastInterface<ID2D1Factory>"

Method: GetInterface<ID2D1GdiInteropRenderTarget>() : ID2D1GdiInteropRenderTarget*

+ Renamed to "CastInterface<ID2D1GdiInteropRenderTarget>"

Method: GetInterface<ID2D1Geometry>() : ID2D1Geometry*

+ Renamed to "CastInterface<ID2D1Geometry>"

Method: GetInterface<ID2D1GeometryGroup>() : ID2D1GeometryGroup*

+ Renamed to "CastInterface<ID2D1GeometryGroup>"

Method: GetInterface<ID2D1GeometrySink>() : ID2D1GeometrySink*

+ Renamed to "CastInterface<ID2D1GeometrySink>"

Method: GetInterface<ID2D1GradientStopCollection>() : ID2D1GradientStopCollection*

+ Renamed to "CastInterface<ID2D1GradientStopCollection>"

Method: GetInterface<ID2D1HwndRenderTarget>() : ID2D1HwndRenderTarget*

+ Renamed to "CastInterface<ID2D1HwndRenderTarget>"

Method: GetInterface<ID2D1Layer>() : ID2D1Layer*

+ Renamed to "CastInterface<ID2D1Layer>"

Method: GetInterface<ID2D1LinearGradientBrush>() : ID2D1LinearGradientBrush*

+ Renamed to "CastInterface<ID2D1LinearGradientBrush>"

Method: GetInterface<ID2D1Mesh>() : ID2D1Mesh*

+ Renamed to "CastInterface<ID2D1Mesh>"

Method: GetInterface<ID2D1PathGeometry>() : ID2D1PathGeometry*

+ Renamed to "CastInterface<ID2D1PathGeometry>"

Method: GetInterface<ID2D1RadialGradientBrush>() : ID2D1RadialGradientBrush*

+ Renamed to "CastInterface<ID2D1RadialGradientBrush>"

Method: GetInterface<ID2D1RectangleGeometry>() : ID2D1RectangleGeometry*

+ Renamed to "CastInterface<ID2D1RectangleGeometry>"

Method: GetInterface<ID2D1RenderTarget>() : ID2D1RenderTarget*

+ Renamed to "CastInterface<ID2D1RenderTarget>"

Method: GetInterface<ID2D1Resource>() : ID2D1Resource*

+ Renamed to "CastInterface<ID2D1Resource>"

Method: GetInterface<ID2D1RoundedRectangleGeometry>() : ID2D1RoundedRectangleGeometry*

+ Renamed to "CastInterface<ID2D1RoundedRectangleGeometry>"

Method: GetInterface<ID2D1SimplifiedGeometrySink>() : ID2D1SimplifiedGeometrySink*

+ Renamed to "CastInterface<ID2D1SimplifiedGeometrySink>"

Method: GetInterface<ID2D1SolidColorBrush>() : ID2D1SolidColorBrush*

+ Renamed to "CastInterface<ID2D1SolidColorBrush>"

Method: GetInterface<ID2D1StrokeStyle>() : ID2D1StrokeStyle*

+ Renamed to "CastInterface<ID2D1StrokeStyle>"

Method: GetInterface<ID2D1TessellationSink>() : ID2D1TessellationSink*

+ Renamed to "CastInterface<ID2D1TessellationSink>"

Method: GetInterface<ID2D1TransformedGeometry>() : ID2D1TransformedGeometry*

+ Renamed to "CastInterface<ID2D1TransformedGeometry>"

Method: GetInterface<ID3D10Asynchronous>() : ID3D10Asynchronous*

+ Renamed to "CastInterface<ID3D10Asynchronous>"

Method: GetInterface<ID3D10BlendState>() : ID3D10BlendState*

+ Renamed to "CastInterface<ID3D10BlendState>"

Method: GetInterface<ID3D10BlendState1>() : ID3D10BlendState1*

+ Renamed to "CastInterface<ID3D10BlendState1>"

Method: GetInterface<ID3D10Blob>() : ID3D10Blob*

+ Renamed to "CastInterface<ID3D10Blob>"

Method: GetInterface<ID3D10Buffer>() : ID3D10Buffer*

+ Renamed to "CastInterface<ID3D10Buffer>"

Method: GetInterface<ID3D10Counter>() : ID3D10Counter*

+ Renamed to "CastInterface<ID3D10Counter>"

Method: GetInterface<ID3D10Debug>() : ID3D10Debug*

+ Renamed to "CastInterface<ID3D10Debug>"

Method: GetInterface<ID3D10DepthStencilState>() : ID3D10DepthStencilState*

+ Renamed to "CastInterface<ID3D10DepthStencilState>"

Method: GetInterface<ID3D10DepthStencilView>() : ID3D10DepthStencilView*

+ Renamed to "CastInterface<ID3D10DepthStencilView>"

Method: GetInterface<ID3D10Device>() : ID3D10Device*

+ Renamed to "CastInterface<ID3D10Device>"

Method: GetInterface<ID3D10Device1>() : ID3D10Device1*

+ Renamed to "CastInterface<ID3D10Device1>"

Method: GetInterface<ID3D10DeviceChild>() : ID3D10DeviceChild*

+ Renamed to "CastInterface<ID3D10DeviceChild>"

Method: GetInterface<ID3D10Effect>() : ID3D10Effect*

+ Renamed to "CastInterface<ID3D10Effect>"

Method: GetInterface<ID3D10EffectPool>() : ID3D10EffectPool*

+ Renamed to "CastInterface<ID3D10EffectPool>"

Method: GetInterface<ID3D10GeometryShader>() : ID3D10GeometryShader*

+ Renamed to "CastInterface<ID3D10GeometryShader>"

Method: GetInterface<ID3D10InfoQueue>() : ID3D10InfoQueue*

+ Renamed to "CastInterface<ID3D10InfoQueue>"

Method: GetInterface<ID3D10InputLayout>() : ID3D10InputLayout*

+ Renamed to "CastInterface<ID3D10InputLayout>"

Method: GetInterface<ID3D10Multithread>() : ID3D10Multithread*

+ Renamed to "CastInterface<ID3D10Multithread>"

Method: GetInterface<ID3D10PixelShader>() : ID3D10PixelShader*

+ Renamed to "CastInterface<ID3D10PixelShader>"

Method: GetInterface<ID3D10Predicate>() : ID3D10Predicate*

+ Renamed to "CastInterface<ID3D10Predicate>"

Method: GetInterface<ID3D10Query>() : ID3D10Query*

+ Renamed to "CastInterface<ID3D10Query>"

Method: GetInterface<ID3D10RasterizerState>() : ID3D10RasterizerState*

+ Renamed to "CastInterface<ID3D10RasterizerState>"

Method: GetInterface<ID3D10RenderTargetView>() : ID3D10RenderTargetView*

+ Renamed to "CastInterface<ID3D10RenderTargetView>"

Method: GetInterface<ID3D10Resource>() : ID3D10Resource*

+ Renamed to "CastInterface<ID3D10Resource>"

Method: GetInterface<ID3D10SamplerState>() : ID3D10SamplerState*

+ Renamed to "CastInterface<ID3D10SamplerState>"

Method: GetInterface<ID3D10ShaderReflection>() : ID3D10ShaderReflection*

+ Renamed to "CastInterface<ID3D10ShaderReflection>"

Method: GetInterface<ID3D10ShaderReflection1>() : ID3D10ShaderReflection1*

+ Renamed to "CastInterface<ID3D10ShaderReflection1>"

Method: GetInterface<ID3D10ShaderResourceView>() : ID3D10ShaderResourceView*

+ Renamed to "CastInterface<ID3D10ShaderResourceView>"

Method: GetInterface<ID3D10ShaderResourceView1>() : ID3D10ShaderResourceView1*

+ Renamed to "CastInterface<ID3D10ShaderResourceView1>"

Method: GetInterface<ID3D10StateBlock>() : ID3D10StateBlock*

+ Renamed to "CastInterface<ID3D10StateBlock>"

Method: GetInterface<ID3D10SwitchToRef>() : ID3D10SwitchToRef*

+ Renamed to "CastInterface<ID3D10SwitchToRef>"

Method: GetInterface<ID3D10Texture1D>() : ID3D10Texture1D*

+ Renamed to "CastInterface<ID3D10Texture1D>"

Method: GetInterface<ID3D10Texture2D>() : ID3D10Texture2D*

+ Renamed to "CastInterface<ID3D10Texture2D>"

Method: GetInterface<ID3D10Texture3D>() : ID3D10Texture3D*

+ Renamed to "CastInterface<ID3D10Texture3D>"

Method: GetInterface<ID3D10VertexShader>() : ID3D10VertexShader*

+ Renamed to "CastInterface<ID3D10VertexShader>"

Method: GetInterface<ID3D10View>() : ID3D10View*

+ Renamed to "CastInterface<ID3D10View>"

Method: GetInterface<ID3D11Asynchronous>() : ID3D11Asynchronous*

+ Renamed to "CastInterface<ID3D11Asynchronous>"

Method: GetInterface<ID3D11BlendState>() : ID3D11BlendState*

+ Renamed to "CastInterface<ID3D11BlendState>"

Method: GetInterface<ID3D11Buffer>() : ID3D11Buffer*

+ Renamed to "CastInterface<ID3D11Buffer>"

Method: GetInterface<ID3D11ClassInstance>() : ID3D11ClassInstance*

+ Renamed to "CastInterface<ID3D11ClassInstance>"

Method: GetInterface<ID3D11ClassLinkage>() : ID3D11ClassLinkage*

+ Renamed to "CastInterface<ID3D11ClassLinkage>"

Method: GetInterface<ID3D11CommandList>() : ID3D11CommandList*

+ Renamed to "CastInterface<ID3D11CommandList>"

Method: GetInterface<ID3D11ComputeShader>() : ID3D11ComputeShader*

+ Renamed to "CastInterface<ID3D11ComputeShader>"

Method: GetInterface<ID3D11Counter>() : ID3D11Counter*

+ Renamed to "CastInterface<ID3D11Counter>"

Method: GetInterface<ID3D11Debug>() : ID3D11Debug*

+ Renamed to "CastInterface<ID3D11Debug>"

Method: GetInterface<ID3D11DepthStencilState>() : ID3D11DepthStencilState*

+ Renamed to "CastInterface<ID3D11DepthStencilState>"

Method: GetInterface<ID3D11DepthStencilView>() : ID3D11DepthStencilView*

+ Renamed to "CastInterface<ID3D11DepthStencilView>"

Method: GetInterface<ID3D11Device>() : ID3D11Device*

+ Renamed to "CastInterface<ID3D11Device>"

Method: GetInterface<ID3D11DeviceChild>() : ID3D11DeviceChild*

+ Renamed to "CastInterface<ID3D11DeviceChild>"

Method: GetInterface<ID3D11DeviceContext>() : ID3D11DeviceContext*

+ Renamed to "CastInterface<ID3D11DeviceContext>"

Method: GetInterface<ID3D11DomainShader>() : ID3D11DomainShader*

+ Renamed to "CastInterface<ID3D11DomainShader>"

Method: GetInterface<ID3D11GeometryShader>() : ID3D11GeometryShader*

+ Renamed to "CastInterface<ID3D11GeometryShader>"

Method: GetInterface<ID3D11HullShader>() : ID3D11HullShader*

+ Renamed to "CastInterface<ID3D11HullShader>"

Method: GetInterface<ID3D11InfoQueue>() : ID3D11InfoQueue*

+ Renamed to "CastInterface<ID3D11InfoQueue>"

Method: GetInterface<ID3D11InputLayout>() : ID3D11InputLayout*

+ Renamed to "CastInterface<ID3D11InputLayout>"

Method: GetInterface<ID3D11PixelShader>() : ID3D11PixelShader*

+ Renamed to "CastInterface<ID3D11PixelShader>"

Method: GetInterface<ID3D11Predicate>() : ID3D11Predicate*

+ Renamed to "CastInterface<ID3D11Predicate>"

Method: GetInterface<ID3D11Query>() : ID3D11Query*

+ Renamed to "CastInterface<ID3D11Query>"

Method: GetInterface<ID3D11RasterizerState>() : ID3D11RasterizerState*

+ Renamed to "CastInterface<ID3D11RasterizerState>"

Method: GetInterface<ID3D11RenderTargetView>() : ID3D11RenderTargetView*

+ Renamed to "CastInterface<ID3D11RenderTargetView>"

Method: GetInterface<ID3D11Resource>() : ID3D11Resource*

+ Renamed to "CastInterface<ID3D11Resource>"

Method: GetInterface<ID3D11SamplerState>() : ID3D11SamplerState*

+ Renamed to "CastInterface<ID3D11SamplerState>"

Method: GetInterface<ID3D11ShaderResourceView>() : ID3D11ShaderResourceView*

+ Renamed to "CastInterface<ID3D11ShaderResourceView>"

Method: GetInterface<ID3D11SwitchToRef>() : ID3D11SwitchToRef*

+ Renamed to "CastInterface<ID3D11SwitchToRef>"

Method: GetInterface<ID3D11Texture1D>() : ID3D11Texture1D*

+ Renamed to "CastInterface<ID3D11Texture1D>"

Method: GetInterface<ID3D11Texture2D>() : ID3D11Texture2D*

+ Renamed to "CastInterface<ID3D11Texture2D>"

Method: GetInterface<ID3D11Texture3D>() : ID3D11Texture3D*

+ Renamed to "CastInterface<ID3D11Texture3D>"

Method: GetInterface<ID3D11UnorderedAccessView>() : ID3D11UnorderedAccessView*

+ Renamed to "CastInterface<ID3D11UnorderedAccessView>"

Method: GetInterface<ID3D11VertexShader>() : ID3D11VertexShader*

+ Renamed to "CastInterface<ID3D11VertexShader>"

Method: GetInterface<ID3D11View>() : ID3D11View*

+ Renamed to "CastInterface<ID3D11View>"

Method: GetInterface<IDWriteFactory>() : IDWriteFactory*

+ Renamed to "CastInterface<IDWriteFactory>"

Method: GetInterface<IDWriteFont>() : IDWriteFont*

+ Renamed to "CastInterface<IDWriteFont>"

Method: GetInterface<IDWriteFontCollection>() : IDWriteFontCollection*

+ Renamed to "CastInterface<IDWriteFontCollection>"

Method: GetInterface<IDWriteFontFace>() : IDWriteFontFace*

+ Renamed to "CastInterface<IDWriteFontFace>"

Method: GetInterface<IDWriteFontFamily>() : IDWriteFontFamily*

+ Renamed to "CastInterface<IDWriteFontFamily>"

Method: GetInterface<IDWriteInlineObject>() : IDWriteInlineObject*

+ Renamed to "CastInterface<IDWriteInlineObject>"

Method: GetInterface<IDWriteRenderingParams>() : IDWriteRenderingParams*

+ Renamed to "CastInterface<IDWriteRenderingParams>"

Method: GetInterface<IDWriteTextFormat>() : IDWriteTextFormat*

+ Renamed to "CastInterface<IDWriteTextFormat>"

Method: GetInterface<IDWriteTextLayout>() : IDWriteTextLayout*

+ Renamed to "CastInterface<IDWriteTextLayout>"

Method: GetInterface<IDWriteTypography>() : IDWriteTypography*

+ Renamed to "CastInterface<IDWriteTypography>"

Method: GetInterface<IDXGIAdapter>() : IDXGIAdapter*

+ Renamed to "CastInterface<IDXGIAdapter>"

Method: GetInterface<IDXGIAdapter1>() : IDXGIAdapter1*

+ Renamed to "CastInterface<IDXGIAdapter1>"

Method: GetInterface<IDXGIDevice>() : IDXGIDevice*

+ Renamed to "CastInterface<IDXGIDevice>"

Method: GetInterface<IDXGIDevice1>() : IDXGIDevice1*

+ Renamed to "CastInterface<IDXGIDevice1>"

Method: GetInterface<IDXGIDeviceSubObject>() : IDXGIDeviceSubObject*

+ Renamed to "CastInterface<IDXGIDeviceSubObject>"

Method: GetInterface<IDXGIFactory>() : IDXGIFactory*

+ Renamed to "CastInterface<IDXGIFactory>"

Method: GetInterface<IDXGIFactory1>() : IDXGIFactory1*

+ Renamed to "CastInterface<IDXGIFactory1>"

Method: GetInterface<IDXGIKeyedMutex>() : IDXGIKeyedMutex*

+ Renamed to "CastInterface<IDXGIKeyedMutex>"

Method: GetInterface<IDXGIObject>() : IDXGIObject*

+ Renamed to "CastInterface<IDXGIObject>"

Method: GetInterface<IDXGIOutput>() : IDXGIOutput*

+ Renamed to "CastInterface<IDXGIOutput>"

Method: GetInterface<IDXGIResource>() : IDXGIResource*

+ Renamed to "CastInterface<IDXGIResource>"

Method: GetInterface<IDXGISurface>() : IDXGISurface*

+ Renamed to "CastInterface<IDXGISurface>"

Method: GetInterface<IDXGISurface1>() : IDXGISurface1*

+ Renamed to "CastInterface<IDXGISurface1>"

Method: GetInterface<IDXGISwapChain>() : IDXGISwapChain*

+ Renamed to "CastInterface<IDXGISwapChain>"

Method: GetInterface<IUnknown>() : IUnknown*

+ Renamed to "CastInterface<IUnknown>"

Method: GetInterface<IWICBitmap>() : IWICBitmap*

+ Renamed to "CastInterface<IWICBitmap>"

Method: GetInterface<IWICBitmapDecoder>() : IWICBitmapDecoder*

+ Renamed to "CastInterface<IWICBitmapDecoder>"

Method: GetInterface<IWICBitmapLock>() : IWICBitmapLock*

+ Renamed to "CastInterface<IWICBitmapLock>"

Method: GetInterface<IWICBitmapSource>() : IWICBitmapSource*

+ Renamed to "CastInterface<IWICBitmapSource>"

Method: GetInterface<IWICFormatConverter>() : IWICFormatConverter*

+ Renamed to "CastInterface<IWICFormatConverter>"

Method: GetInterface<IWICImagingFactory>() : IWICImagingFactory*

+ Renamed to "CastInterface<IWICImagingFactory>"

Class: DirectXException

Added methods: + .ctor(System.Int32) : Microsoft.WindowsAPICodePack.DirectX.DirectXException, .ctor(System.String) : Microsoft.WindowsAPICodePack.DirectX.DirectXException, .ctor(System.String, System.Exception) : Microsoft.WindowsAPICodePack.DirectX.DirectXException

Enum: ErrorCode

Field: Direct2DErrorNO_HARDWARE_DEVICE

+ Renamed to "Direct2DErrorNoHardwareDevice"

Field: Direct2DErrorRenderTargetHasLayerOrCliprect

+ Renamed to "Direct2DErrorRenderTargetHasLayerOrClipRect"

Field: Direct2DErroUnsupportedOperation

+ Renamed to "Direct2DErrorUnsupportedOperation"

Field: DXGIErrorDeviceHung

+ Renamed to "GraphicsErrorDeviceHung"

Field: DXGIErrorDeviceRemoved

+ Renamed to "GraphicsErrorDeviceRemoved"

Field: DXGIErrorDeviceReset

+ Renamed to "GraphicsErrorDeviceReset"

Field: DXGIErrorDriverInternalError

+ Renamed to "GraphicsErrorDriverInternalError"

Field: DXGIErrorFrameStatisticsDisjoint

+ Renamed to "GraphicsErrorFrameStatisticsDisjoint"

Field: DXGIErrorGraphicsVidpnSourceInUse

+ Renamed to "GraphicsErrorGraphicsVideoPresentNetworkSourceInUse"

Field: DXGIErrorInvalidCcall

+ Renamed to "GraphicsErrorInvalidCall"

Field: DXGIErrorMoreData

+ Renamed to "GraphicsErrorMoreData"

Field: DXGIErrorNonExclusive

+ Renamed to "GraphicsErrorNonexclusive"

Field: DXGIErrorNotCurrentlyAvailable

+ Renamed to "GraphicsErrorNotCurrentlyAvailable"

Field: DXGIErrorNotFound

+ Renamed to "GraphicsErrorNotFound"

Field: DXGIErrorRemoteClientDisconnected

+ Renamed to "GraphicsErrorRemoteClientDisconnected"

Field: DXGIErrorRemoteOutOfMemory

+ Renamed to "GraphicsErrorRemoteOutOfMemory"

Field: DXGIErrorUnsupported

+ Renamed to "GraphicsErrorUnsupported"

Field: DXGIErrorWasStillDrawing

+ Renamed to "GraphicsErrorWasStillDrawing"

Field: WICErrorAlreadyLocked

+ Renamed to "ImagingErrorAlreadyLocked"

Field: WICErrorBadHeader

+ Renamed to "ImagingErrorBadHeader"

Field: WICErrorBadImage

+ Renamed to "ImagingErrorBadImage"

Field: WICErrorBadMetaDataHeader

+ Renamed to "ImagingErrorBadMetadataHeader"

Field: WICErrorBadStreamData

+ Renamed to "ImagingErrorBadStreamData"

Field: WICErrorCodecNoThumbnail

+ Renamed to "ImagingErrorCodecNoThumbnail"

Field: WICErrorCodecPresent

+ Renamed to "ImagingErrorCodecPresent"

Field: WICErrorCodecTooManyScanLines

+ Renamed to "ImagingErrorCodecTooManyScanLines"

Field: WICErrorComponentInitializeFailure

+ Renamed to "ImagingErrorComponentInitializeFailure"

Field: WICErrorComponentNotFound

+ Renamed to "ImagingErrorComponentNotFound"

Field: WICErrorDuplicateMetaDataPresent

+ Renamed to "ImagingErrorDuplicateMetadataPresent"

Field: WICErrorFrameMissing

+ Renamed to "ImagingErrorFrameMissing"

Field: WICErrorGeneric

+ Renamed to "ImagingErrorGeneric"

Field: WICErrorImageSizeOutOfRange

+ Renamed to "ImagingErrorImageSizeOutOfRange"

Field: WICErrorInsufficientBuffer

+ Renamed to "ImagingErrorInsufficientBuffer"

Field: WICErrorInternal

+ Renamed to "ImagingErrorInternal"

Field: WICErrorinvalidquerycharacter

+ Renamed to "ImagingErrorInvalidQueryCharacter"

Field: WICErrorInvalidQueryRequest

+ Renamed to "ImagingErrorInvalidQueryRequest"

Field: WICErrorInvalidRegistration

+ Renamed to "ImagingErrorInvalidRegistration"

Field: WICErrorNotInitialized

+ Renamed to "ImagingErrorNotInitialized"

Field: WICErrorPaletteUnavailable

+ Renamed to "ImagingErrorPaletteUnavailable"

Field: WICErrorPropertyNotFound

+ Renamed to "ImagingErrorPropertyNotFound"

Field: WICErrorPropertyNotSupported

+ Renamed to "ImagingErrorPropertyNotSupported"

Field: WICErrorPropertySize

+ Renamed to "ImagingErrorPropertySize"

Field: WICErrorPropertyUnexpectedType

+ Renamed to "ImagingErrorPropertyUnexpectedType"

Field: WICErrorRequestOnlyValidAtMetaDataRoot

+ Renamed to "ImagingErrorRequestOnlyValidAtMetadataRoot"

Field: WICErrorSourceRectDoesNotMatchDimensions

+ Renamed to "ImagingErrorSourceRectDoesNotMatchDimensions"

Field: WICErrorStreamNotAvailable

+ Renamed to "ImagingErrorStreamNotAvailable"

Field: WICErrorStreamRead

+ Renamed to "ImagingErrorStreamRead"

Field: WICErrorStreamWrite

+ Renamed to "ImagingErrorStreamWrite"

Field: WICErrorTooMuchMetaData

+ Renamed to "ImagingErrorTooMuchMetadata"

Field: WICErrorUnexpectedMetaDataType

+ Renamed to "ImagingErrorUnexpectedMetadataType"

Field: WICErrorUnexpectedSize

+ Renamed to "ImagingErrorUnexpectedSize"

Field: WICErrorUnknownImageFormat

+ Renamed to "ImagingErrorUnknownImageFormat"

Field: WICErrorUnsupportedPixelFormat

+ Renamed to "ImagingErrorUnsupportedPixelFormat"

Field: WICErrorUnsupportedVersion

+ Renamed to "ImagingErrorUnsupportedVersion"

Field: WICErroruUsupportedOperation

+ Renamed to "ImagingErrorUnsupportedOperation"

Field: WICErrorValueOutOfRange

+ Renamed to "ImagingErrorValueOutOfRange"

Field: WICErrorValueOverflow

+ Renamed to "ImagingErrorValueOverflow"

Field: WICErrorWrongState

+ Renamed to "ImagingErrorWrongState"

Namespace: Microsoft.WindowsAPICodePack.DirectX.Direct2D1

Added types: + ColorI, PointAndTangent

Enum: AntialiasMode

+ Renamed to "AntiAliasMode"

Struct: ArcSegment

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: ArcSize : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.ArcSize

+ Kind changed to "Property"
Added methods: + get_ArcSize() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.ArcSize, set_ArcSize(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.ArcSize) : System.Void

Field: Point : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F

+ Kind changed to "Property"
Added methods: + get_Point() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F, set_Point(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F) : System.Void

Field: RotationAngle : System.Single

+ Kind changed to "Property"
Added methods: + get_RotationAngle() : System.Single, set_RotationAngle(System.Single) : System.Void

Field: Size : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeF

+ Kind changed to "Property"
Added methods: + get_Size() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeF, set_Size(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeF) : System.Void

Field: SweepDirection : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SweepDirection

+ Kind changed to "Property"
Added methods: + get_SweepDirection() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SweepDirection, set_SweepDirection(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SweepDirection) : System.Void

Struct: BezierSegment

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: Point1 : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F

+ Kind changed to "Property"
Added methods: + get_Point1() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F, set_Point1(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F) : System.Void

Field: Point2 : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F

+ Kind changed to "Property"
Added methods: + get_Point2() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F, set_Point2(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F) : System.Void

Field: Point3 : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F

+ Kind changed to "Property"
Added methods: + get_Point3() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F, set_Point3(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F) : System.Void

Class: BitmapBrush

Removed methods: + GetBitmap() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.D2DBitmap, SetBitmap(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.D2DBitmap) : System.Void
Added properties: + Bitmap : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.D2DBitmap

Struct: BitmapBrushProperties

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.BitmapBrushProperties, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.BitmapBrushProperties) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.BitmapBrushProperties, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.BitmapBrushProperties) : System.Boolean

Field: ExtendModeX : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.ExtendMode

+ Kind changed to "Property"
Added methods: + get_ExtendModeX() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.ExtendMode, set_ExtendModeX(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.ExtendMode) : System.Void

Field: ExtendModeY : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.ExtendMode

+ Kind changed to "Property"
Added methods: + get_ExtendModeY() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.ExtendMode, set_ExtendModeY(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.ExtendMode) : System.Void

Field: InterpolationMode : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.BitmapInterpolationMode

+ Kind changed to "Property"
Added methods: + get_InterpolationMode() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.BitmapInterpolationMode, set_InterpolationMode(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.BitmapInterpolationMode) : System.Void

Struct: BitmapProperties

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.BitmapProperties, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.BitmapProperties) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.BitmapProperties, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.BitmapProperties) : System.Boolean

Field: DpiX : System.Single

+ Kind changed to "Property"
Added methods: + get_DpiX() : System.Single, set_DpiX(System.Single) : System.Void

Field: DpiY : System.Single

+ Kind changed to "Property"
Added methods: + get_DpiY() : System.Single, set_DpiY(System.Single) : System.Void

Field: PixelFormat : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PixelFormat

+ Kind changed to "Property"
Added methods: + get_PixelFormat() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PixelFormat, set_PixelFormat(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PixelFormat) : System.Void

Class: BitmapRenderTarget

Removed methods: + GetBitmap() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.D2DBitmap
Added properties: + Bitmap : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.D2DBitmap

Struct: BrushProperties

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.BrushProperties, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.BrushProperties) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.BrushProperties, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.BrushProperties) : System.Boolean

Field: Opacity : System.Single

+ Kind changed to "Property"
Added methods: + get_Opacity() : System.Single, set_Opacity(System.Single) : System.Void

Field: Transform : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Matrix3x2F

+ Kind changed to "Property"
Added methods: + get_Transform() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Matrix3x2F, set_Transform(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Matrix3x2F) : System.Void

Struct: ColorF

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Method: .ctor(Microsoft.WindowsAPICodePack.DirectX.Colors) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.ColorF

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.ColorI) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.ColorF"

Method: .ctor(Microsoft.WindowsAPICodePack.DirectX.Colors, System.Single) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.ColorF

+ Signature changed to "(System.Single, System.Single, System.Single) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.ColorF"

Field: A : System.Single

+ Renamed to "Alpha"
+ Kind changed to "Property"
Added methods: + get_Alpha() : System.Single, set_Alpha(System.Single) : System.Void

Field: B : System.Single

+ Renamed to "Blue"
+ Kind changed to "Property"
Added methods: + get_Blue() : System.Single, set_Blue(System.Single) : System.Void

Field: G : System.Single

+ Renamed to "Green"
+ Kind changed to "Property"
Added methods: + get_Green() : System.Single, set_Green(System.Single) : System.Void

Field: R : System.Single

+ Renamed to "Red"
+ Kind changed to "Property"
Added methods: + get_Red() : System.Single, set_Red(System.Single) : System.Void

Class: D2DFactory

Method: CreateDxgiSurfaceRenderTarget(Microsoft.WindowsAPICodePack.DirectX.DXGI.Surface, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetProperties) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTarget

+ Renamed to "CreateGraphicsSurfaceRenderTarget"
+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Surface, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetProperties) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTarget"

Method: CreateWicBitmapRenderTarget(Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.WICBitmap, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetProperties) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTarget

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.ImagingBitmap, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetProperties) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTarget"

Enum: D2DFactoryType

Field: MultiThreaded

+ Renamed to "Multithreaded"

Class: D2DResource

Method: GetFactory() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.D2DFactory

+ Renamed to "Factory"
+ Kind changed to "Property"
Added methods: + get_Factory() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.D2DFactory

Class: Direct2DException

Added methods: + .ctor(System.String) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Direct2DException

Struct: DpiF

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: X : System.Single

+ Kind changed to "Property"
Added methods: + get_X() : System.Single, set_X(System.Single) : System.Void

Field: Y : System.Single

+ Kind changed to "Property"
Added methods: + get_Y() : System.Single, set_Y(System.Single) : System.Void

Class: DrawingStateBlock

Removed methods: + GetTextRenderingParams() : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.RenderingParams, SetTextRenderingParams(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.RenderingParams) : System.Void
Added properties: + TextRenderingParams : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.RenderingParams

Struct: DrawingStateDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.DrawingStateDescription, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.DrawingStateDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.DrawingStateDescription, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.DrawingStateDescription) : System.Boolean

Method: .ctor(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AntialiasMode, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.TextAntialiasMode, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Tags, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Matrix3x2F) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.DrawingStateDescription

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AntiAliasMode, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.TextAntiAliasMode, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Tags, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Matrix3x2F) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.DrawingStateDescription"

Field: AntialiasMode : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AntialiasMode

+ Renamed to "AntiAliasMode"
+ Kind changed to "Property"
Added methods: + get_AntiAliasMode() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AntiAliasMode, set_AntiAliasMode(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AntiAliasMode) : System.Void

Field: Tags : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Tags

+ Kind changed to "Property"
Added methods: + get_Tags() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Tags, set_Tags(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Tags) : System.Void

Field: TextAntialiasMode : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.TextAntialiasMode

+ Renamed to "TextAntiAliasMode"
+ Kind changed to "Property"
Added methods: + get_TextAntiAliasMode() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.TextAntiAliasMode, set_TextAntiAliasMode(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.TextAntiAliasMode) : System.Void

Field: Transform : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Matrix3x2F

+ Kind changed to "Property"
Added methods: + get_Transform() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Matrix3x2F, set_Transform(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Matrix3x2F) : System.Void

Struct: Ellipse

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: Point : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F

+ Kind changed to "Property"
Added methods: + get_Point() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F, set_Point(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F) : System.Void

Field: RadiusX : System.Single

+ Kind changed to "Property"
Added methods: + get_RadiusX() : System.Single, set_RadiusX(System.Single) : System.Void

Field: RadiusY : System.Single

+ Kind changed to "Property"
Added methods: + get_RadiusY() : System.Single, set_RadiusY(System.Single) : System.Void

Struct: FactoryOptions

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.FactoryOptions, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.FactoryOptions) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.FactoryOptions, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.FactoryOptions) : System.Boolean

Field: DebugLevel : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.DebugLevel

+ Kind changed to "Property"
Added methods: + get_DebugLevel() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.DebugLevel, set_DebugLevel(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.DebugLevel) : System.Void

Enum: Gamma

Field: Gamma_10

+ Renamed to "Linear"

Field: Gamma_22

+ Renamed to "StandardRgb"

Class: Geometry

Method: ComputePointAtLength(System.Single, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F&) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F

+ Signature changed to "(System.Single) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PointAndTangent"

Method: ComputePointAtLength(System.Single, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F&, System.Single) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F

+ Signature changed to "(System.Single, System.Single) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PointAndTangent"

Method: ComputePointAtLength(System.Single, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F&, System.Single, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Matrix3x2F) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F

+ Signature changed to "(System.Single, System.Single, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Matrix3x2F) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PointAndTangent"

Class: GeometryGroup

Method: GetSourceGeometries() : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Geometry>

+ Renamed to "Geometries"
+ Kind changed to "Property"
Added methods: + get_Geometries() : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Geometry>

Struct: GradientStop

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: Color : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.ColorF

+ Kind changed to "Property"
Added methods: + get_Color() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.ColorF, set_Color(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.ColorF) : System.Void

Field: Position : System.Single

+ Kind changed to "Property"
Added methods: + get_Position() : System.Single, set_Position(System.Single) : System.Void

Class: GradientStopCollection

Removed methods: + GetGradientStops() : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct2D1.GradientStop>
Added methods: + Add(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.GradientStop) : System.Void, Clear() : System.Void, Contains(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.GradientStop) : System.Boolean, CopyTo(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.GradientStop[], System.Int32) : System.Void, GetEnumerator() : System.Collections.Generic.IEnumerator<Microsoft.WindowsAPICodePack.DirectX.Direct2D1.GradientStop>, GetNonGenericEnumerator() : System.Collections.IEnumerator, IndexOf(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.GradientStop) : System.Int32, Insert(System.Int32, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.GradientStop) : System.Void, Remove(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.GradientStop) : System.Boolean, RemoveAt(System.Int32) : System.Void
Added properties: + IsReadOnly : System.Boolean, Item : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.GradientStop

Property: GradientStopCount : System.UInt32

+ Renamed to "Count"
Removed methods: + get_GradientStopCount() : System.UInt32
Added methods: + get_Count() : System.Int32

Struct: HwndRenderTargetProperties

Field: PixelSize : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeU

+ Kind changed to "Property"
Added methods: + get_PixelSize() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeU, set_PixelSize(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeU) : System.Void

Field: PresentOptions : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PresentOptions

+ Kind changed to "Property"
Added methods: + get_PresentOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PresentOptions, set_PresentOptions(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PresentOptions) : System.Void

Field: WindowHandle : System.IntPtr

+ Kind changed to "Property"
Added methods: + get_WindowHandle() : System.IntPtr, set_WindowHandle(System.IntPtr) : System.Void

Interface: ISimplifiedGeometrySink

Method: SetSegmentFlags(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PathSegment) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PathSegmentOptions) : System.Void"

Struct: LayerParameters

Method: .ctor(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RectF, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Geometry, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AntialiasMode, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Matrix3x2F, System.Single, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Brush, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.LayerOptions) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.LayerParameters

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RectF, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Geometry, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AntiAliasMode, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Matrix3x2F, System.Single, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Brush, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.LayerOptions) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.LayerParameters"

Field: ContentBounds : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RectF

+ Kind changed to "Property"
Added methods: + get_ContentBounds() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RectF, set_ContentBounds(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RectF) : System.Void

Field: GeometricMask : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Geometry

+ Kind changed to "Property"
Added methods: + get_GeometricMask() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Geometry, set_GeometricMask(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Geometry) : System.Void

Field: MaskAntialiasMode : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AntialiasMode

+ Renamed to "MaskAntiAliasMode"
+ Kind changed to "Property"
Added methods: + get_MaskAntiAliasMode() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AntiAliasMode, set_MaskAntiAliasMode(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AntiAliasMode) : System.Void

Field: MaskTransform : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Matrix3x2F

+ Kind changed to "Property"
Added methods: + get_MaskTransform() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Matrix3x2F, set_MaskTransform(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Matrix3x2F) : System.Void

Field: Opacity : System.Single

+ Kind changed to "Property"
Added methods: + get_Opacity() : System.Single, set_Opacity(System.Single) : System.Void

Field: OpacityBrush : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Brush

+ Kind changed to "Property"
Added methods: + get_OpacityBrush() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Brush, set_OpacityBrush(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Brush) : System.Void

Field: Options : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.LayerOptions

+ Kind changed to "Property"
Added methods: + get_Options() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.LayerOptions, set_Options(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.LayerOptions) : System.Void

Class: LinearGradientBrush

Method: GetGradientStopCollection() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.GradientStopCollection

+ Renamed to "GradientStops"
+ Kind changed to "Property"
Added methods: + get_GradientStops() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.GradientStopCollection

Struct: LinearGradientBrushProperties

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.LinearGradientBrushProperties, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.LinearGradientBrushProperties) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.LinearGradientBrushProperties, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.LinearGradientBrushProperties) : System.Boolean

Field: EndPoint : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F

+ Kind changed to "Property"
Added methods: + get_EndPoint() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F, set_EndPoint(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F) : System.Void

Field: StartPoint : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F

+ Kind changed to "Property"
Added methods: + get_StartPoint() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F, set_StartPoint(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F) : System.Void

Struct: Matrix3x2F

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: M11 : System.Single

+ Kind changed to "Property"
Added methods: + get_M11() : System.Single, set_M11(System.Single) : System.Void

Field: M12 : System.Single

+ Kind changed to "Property"
Added methods: + get_M12() : System.Single, set_M12(System.Single) : System.Void

Field: M21 : System.Single

+ Kind changed to "Property"
Added methods: + get_M21() : System.Single, set_M21(System.Single) : System.Void

Field: M22 : System.Single

+ Kind changed to "Property"
Added methods: + get_M22() : System.Single, set_M22(System.Single) : System.Void

Field: M31 : System.Single

+ Kind changed to "Property"
Added methods: + get_M31() : System.Single, set_M31(System.Single) : System.Void

Field: M32 : System.Single

+ Kind changed to "Property"
Added methods: + get_M32() : System.Single, set_M32(System.Single) : System.Void

Enum: PathSegment

+ Renamed to "PathSegmentOptions"

Struct: PixelFormat

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Method: .ctor(Microsoft.WindowsAPICodePack.DirectX.DXGI.Format, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AlphaMode) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PixelFormat

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AlphaMode) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PixelFormat"

Field: AlphaMode : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AlphaMode

+ Kind changed to "Property"
Added methods: + get_AlphaMode() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AlphaMode, set_AlphaMode(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AlphaMode) : System.Void

Field: Format : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_Format() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_Format(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Struct: Point2F

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: X : System.Single

+ Kind changed to "Property"
Added methods: + get_X() : System.Single, set_X(System.Single) : System.Void

Field: Y : System.Single

+ Kind changed to "Property"
Added methods: + get_Y() : System.Single, set_Y(System.Single) : System.Void

Struct: Point2U

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: X : System.UInt32

+ Kind changed to "Property"
Added methods: + get_X() : System.UInt32, set_X(System.UInt32) : System.Void

Field: Y : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Y() : System.UInt32, set_Y(System.UInt32) : System.Void

Struct: QuadraticBezierSegment

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: Point1 : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F

+ Kind changed to "Property"
Added methods: + get_Point1() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F, set_Point1(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F) : System.Void

Field: Point2 : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F

+ Kind changed to "Property"
Added methods: + get_Point2() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F, set_Point2(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F) : System.Void

Class: RadialGradientBrush

Method: GetGradientStopCollection() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.GradientStopCollection

+ Renamed to "GradientStops"
+ Kind changed to "Property"
Added methods: + get_GradientStops() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.GradientStopCollection

Struct: RadialGradientBrushProperties

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RadialGradientBrushProperties, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RadialGradientBrushProperties) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RadialGradientBrushProperties, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RadialGradientBrushProperties) : System.Boolean

Field: Center : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F

+ Kind changed to "Property"
Added methods: + get_Center() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F, set_Center(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F) : System.Void

Field: GradientOriginOffset : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F

+ Kind changed to "Property"
Added methods: + get_GradientOriginOffset() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F, set_GradientOriginOffset(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F) : System.Void

Field: RadiusX : System.Single

+ Kind changed to "Property"
Added methods: + get_RadiusX() : System.Single, set_RadiusX(System.Single) : System.Void

Field: RadiusY : System.Single

+ Kind changed to "Property"
Added methods: + get_RadiusY() : System.Single, set_RadiusY(System.Single) : System.Void

Struct: Rect

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: Bottom : System.Int32

+ Kind changed to "Property"
Added methods: + get_Bottom() : System.Int32, set_Bottom(System.Int32) : System.Void

Field: Left : System.Int32

+ Kind changed to "Property"
Added methods: + get_Left() : System.Int32, set_Left(System.Int32) : System.Void

Field: Right : System.Int32

+ Kind changed to "Property"
Added methods: + get_Right() : System.Int32, set_Right(System.Int32) : System.Void

Field: Top : System.Int32

+ Kind changed to "Property"
Added methods: + get_Top() : System.Int32, set_Top(System.Int32) : System.Void

Struct: RectF

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: Bottom : System.Single

+ Kind changed to "Property"
Added methods: + get_Bottom() : System.Single, set_Bottom(System.Single) : System.Void

Field: Left : System.Single

+ Kind changed to "Property"
Added methods: + get_Left() : System.Single, set_Left(System.Single) : System.Void

Field: Right : System.Single

+ Kind changed to "Property"
Added methods: + get_Right() : System.Single, set_Right(System.Single) : System.Void

Field: Top : System.Single

+ Kind changed to "Property"
Added methods: + get_Top() : System.Single, set_Top(System.Single) : System.Void

Struct: RectU

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: Bottom : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Bottom() : System.UInt32, set_Bottom(System.UInt32) : System.Void

Field: Left : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Left() : System.UInt32, set_Left(System.UInt32) : System.Void

Field: Right : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Right() : System.UInt32, set_Right(System.UInt32) : System.Void

Field: Top : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Top() : System.UInt32, set_Top(System.UInt32) : System.Void

Class: RenderTarget

Removed methods: + GetTextRenderingParams() : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.RenderingParams, SetTextRenderingParams(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.RenderingParams) : System.Void
Added properties: + TextRenderingParams : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.RenderingParams

Property: AntialiasMode : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AntialiasMode

+ Renamed to "AntiAliasMode"
Removed methods: + get_AntialiasMode() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AntialiasMode, set_AntialiasMode(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AntialiasMode) : System.Void
Added methods: + get_AntiAliasMode() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AntiAliasMode, set_AntiAliasMode(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AntiAliasMode) : System.Void

Method: CreateSharedBitmap(Microsoft.WindowsAPICodePack.DirectX.DXGI.Surface) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.D2DBitmap

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Surface) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.D2DBitmap"

Method: CreateSharedBitmap(Microsoft.WindowsAPICodePack.DirectX.DXGI.Surface, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.BitmapProperties) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.D2DBitmap

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Surface, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.BitmapProperties) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.D2DBitmap"

Method: CreateSharedBitmap(Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.WICBitmapLock) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.D2DBitmap

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.ImagingBitmapLock) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.D2DBitmap"

Method: CreateSharedBitmap(Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.WICBitmapLock, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.BitmapProperties) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.D2DBitmap

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.ImagingBitmapLock, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.BitmapProperties) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.D2DBitmap"

Method: GetGdiInteropRenderTarget() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.GdiInteropRenderTarget

+ Renamed to "GdiInteropRenderTarget"
+ Kind changed to "Property"
Added methods: + get_GdiInteropRenderTarget() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.GdiInteropRenderTarget

Method: PushAxisAlignedClip(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RectF, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AntialiasMode) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RectF, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.AntiAliasMode) : System.Void"

Property: TextAntialiasMode : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.TextAntialiasMode

+ Renamed to "TextAntiAliasMode"
Removed methods: + get_TextAntialiasMode() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.TextAntialiasMode, set_TextAntialiasMode(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.TextAntialiasMode) : System.Void
Added methods: + get_TextAntiAliasMode() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.TextAntiAliasMode, set_TextAntiAliasMode(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.TextAntiAliasMode) : System.Void

Struct: RenderTargetProperties

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetProperties, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetProperties) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetProperties, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetProperties) : System.Boolean

Method: .ctor(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetType, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PixelFormat, System.Single, System.Single, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetUsage, Microsoft.WindowsAPICodePack.DirectX.Direct3D.FeatureLevel) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetProperties

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetType, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PixelFormat, System.Single, System.Single, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetUsages, Microsoft.WindowsAPICodePack.DirectX.Direct3D.FeatureLevel) : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetProperties"

Field: DpiX : System.Single

+ Kind changed to "Property"
Added methods: + get_DpiX() : System.Single, set_DpiX(System.Single) : System.Void

Field: DpiY : System.Single

+ Kind changed to "Property"
Added methods: + get_DpiY() : System.Single, set_DpiY(System.Single) : System.Void

Field: MinLevel : Microsoft.WindowsAPICodePack.DirectX.Direct3D.FeatureLevel

+ Kind changed to "Property"
Added methods: + get_MinLevel() : Microsoft.WindowsAPICodePack.DirectX.Direct3D.FeatureLevel, set_MinLevel(Microsoft.WindowsAPICodePack.DirectX.Direct3D.FeatureLevel) : System.Void

Field: PixelFormat : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PixelFormat

+ Kind changed to "Property"
Added methods: + get_PixelFormat() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PixelFormat, set_PixelFormat(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PixelFormat) : System.Void

Field: Type : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetType

+ Renamed to "RenderTargetType"
+ Kind changed to "Property"
Added methods: + get_RenderTargetType() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetType, set_RenderTargetType(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetType) : System.Void

Field: Usage : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetUsage

+ Kind changed to "Property"
Added methods: + get_Usage() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetUsages, set_Usage(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RenderTargetUsages) : System.Void

Enum: RenderTargetUsage

+ Renamed to "RenderTargetUsages"

Struct: RoundedRect

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: RadiusX : System.Single

+ Kind changed to "Property"
Added methods: + get_RadiusX() : System.Single, set_RadiusX(System.Single) : System.Void

Field: RadiusY : System.Single

+ Kind changed to "Property"
Added methods: + get_RadiusY() : System.Single, set_RadiusY(System.Single) : System.Void

Field: Rect : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RectF

+ Kind changed to "Property"
Added methods: + get_Rect() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RectF, set_Rect(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.RectF) : System.Void

Class: SimplifiedGeometrySink

Method: SetSegmentFlags(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PathSegment) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PathSegmentOptions) : System.Void"

Struct: SizeF

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: Height : System.Single

+ Kind changed to "Property"
Added methods: + get_Height() : System.Single, set_Height(System.Single) : System.Void

Field: Width : System.Single

+ Kind changed to "Property"
Added methods: + get_Width() : System.Single, set_Width(System.Single) : System.Void

Struct: SizeU

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: Height : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Height() : System.UInt32, set_Height(System.UInt32) : System.Void

Field: Width : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Width() : System.UInt32, set_Width(System.UInt32) : System.Void

Class: StrokeStyle

Property: Dashes : System.Single[]

Method: get_Dashes() : System.Single[]

+ Signature changed to "() : System.Collections.Generic.IEnumerable<System.Single>"

Struct: StrokeStyleProperties

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.StrokeStyleProperties, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.StrokeStyleProperties) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.StrokeStyleProperties, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.StrokeStyleProperties) : System.Boolean

Field: DashCap : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.CapStyle

+ Kind changed to "Property"
Added methods: + get_DashCap() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.CapStyle, set_DashCap(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.CapStyle) : System.Void

Field: DashOffset : System.Single

+ Kind changed to "Property"
Added methods: + get_DashOffset() : System.Single, set_DashOffset(System.Single) : System.Void

Field: DashStyle : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.DashStyle

+ Kind changed to "Property"
Added methods: + get_DashStyle() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.DashStyle, set_DashStyle(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.DashStyle) : System.Void

Field: EndCap : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.CapStyle

+ Kind changed to "Property"
Added methods: + get_EndCap() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.CapStyle, set_EndCap(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.CapStyle) : System.Void

Field: LineJoin : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.LineJoin

+ Kind changed to "Property"
Added methods: + get_LineJoin() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.LineJoin, set_LineJoin(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.LineJoin) : System.Void

Field: MiterLimit : System.Single

+ Kind changed to "Property"
Added methods: + get_MiterLimit() : System.Single, set_MiterLimit(System.Single) : System.Void

Field: StartCap : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.CapStyle

+ Kind changed to "Property"
Added methods: + get_StartCap() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.CapStyle, set_StartCap(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.CapStyle) : System.Void

Enum: SweepDirection

Field: CounterClockwise

+ Renamed to "Counterclockwise"

Struct: Tags

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: Tag1 : System.UInt64

+ Kind changed to "Property"
Added methods: + get_Tag1() : System.UInt64, set_Tag1(System.UInt64) : System.Void

Field: Tag2 : System.UInt64

+ Kind changed to "Property"
Added methods: + get_Tag2() : System.UInt64, set_Tag2(System.UInt64) : System.Void

Enum: TextAntialiasMode

+ Renamed to "TextAntiAliasMode"

Class: TransformedGeometry

Method: GetSourceGeometry() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Geometry

+ Renamed to "Source"
+ Kind changed to "Property"
Added methods: + get_Source() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Geometry

Struct: Triangle

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: Point1 : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F

+ Kind changed to "Property"
Added methods: + get_Point1() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F, set_Point1(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F) : System.Void

Field: Point2 : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F

+ Kind changed to "Property"
Added methods: + get_Point2() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F, set_Point2(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F) : System.Void

Field: Point3 : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F

+ Kind changed to "Property"
Added methods: + get_Point3() : Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F, set_Point3(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F) : System.Void

Namespace: Microsoft.WindowsAPICodePack.DirectX.Direct3D

Struct: D3dRect

+ Renamed to "D3DRect"
Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Method: .ctor(System.Int32, System.Int32, System.Int32, System.Int32) : Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3dRect

+ Signature changed to "(System.Int32, System.Int32, System.Int32, System.Int32) : Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3DRect"

Field: Bottom : System.Int32

+ Kind changed to "Property"
Added methods: + get_Bottom() : System.Int32, set_Bottom(System.Int32) : System.Void

Field: Left : System.Int32

+ Kind changed to "Property"
Added methods: + get_Left() : System.Int32, set_Left(System.Int32) : System.Void

Method: op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3dRect, Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3dRect) : System.Boolean

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3DRect, Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3DRect) : System.Boolean"

Method: op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3dRect, Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3dRect) : System.Boolean

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3DRect, Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3DRect) : System.Boolean"

Field: Right : System.Int32

+ Kind changed to "Property"
Added methods: + get_Right() : System.Int32, set_Right(System.Int32) : System.Void

Field: Top : System.Int32

+ Kind changed to "Property"
Added methods: + get_Top() : System.Int32, set_Top(System.Int32) : System.Void

Enum: DeviceType

Field: Direct3D_10_0

+ Renamed to "Direct3D10"

Field: Direct3D_10_1

+ Renamed to "Direct3D10Point1"

Field: Direct3D_11_0

+ Renamed to "Direct3D11"

Class: Direct3DException

Added methods: + .ctor(System.String) : Microsoft.WindowsAPICodePack.DirectX.Direct3D.Direct3DException, .ctor(System.String, System.Exception) : Microsoft.WindowsAPICodePack.DirectX.Direct3D.Direct3DException

Enum: FeatureLevel

Field: FeatureLevel_10_0

+ Renamed to "Ten"

Field: FeatureLevel_10_1

+ Renamed to "TenPointOne"

Field: FeatureLevel_11_0

+ Renamed to "Eleven"

Field: FeatureLevel_9_1

+ Renamed to "NinePointOne"

Field: FeatureLevel_9_2

+ Renamed to "NinePointTwo"

Field: FeatureLevel_9_3

+ Renamed to "NinePointThree"

Struct: Matrix4x4F

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, Multiply(Microsoft.WindowsAPICodePack.DirectX.Direct3D.Matrix4x4F, Microsoft.WindowsAPICodePack.DirectX.Direct3D.Matrix4x4F) : Microsoft.WindowsAPICodePack.DirectX.Direct3D.Matrix4x4F

Field: M11 : System.Single

+ Kind changed to "Property"
Added methods: + get_M11() : System.Single, set_M11(System.Single) : System.Void

Field: M12 : System.Single

+ Kind changed to "Property"
Added methods: + get_M12() : System.Single, set_M12(System.Single) : System.Void

Field: M13 : System.Single

+ Kind changed to "Property"
Added methods: + get_M13() : System.Single, set_M13(System.Single) : System.Void

Field: M14 : System.Single

+ Kind changed to "Property"
Added methods: + get_M14() : System.Single, set_M14(System.Single) : System.Void

Field: M21 : System.Single

+ Kind changed to "Property"
Added methods: + get_M21() : System.Single, set_M21(System.Single) : System.Void

Field: M22 : System.Single

+ Kind changed to "Property"
Added methods: + get_M22() : System.Single, set_M22(System.Single) : System.Void

Field: M23 : System.Single

+ Kind changed to "Property"
Added methods: + get_M23() : System.Single, set_M23(System.Single) : System.Void

Field: M24 : System.Single

+ Kind changed to "Property"
Added methods: + get_M24() : System.Single, set_M24(System.Single) : System.Void

Field: M31 : System.Single

+ Kind changed to "Property"
Added methods: + get_M31() : System.Single, set_M31(System.Single) : System.Void

Field: M32 : System.Single

+ Kind changed to "Property"
Added methods: + get_M32() : System.Single, set_M32(System.Single) : System.Void

Field: M33 : System.Single

+ Kind changed to "Property"
Added methods: + get_M33() : System.Single, set_M33(System.Single) : System.Void

Field: M34 : System.Single

+ Kind changed to "Property"
Added methods: + get_M34() : System.Single, set_M34(System.Single) : System.Void

Field: M41 : System.Single

+ Kind changed to "Property"
Added methods: + get_M41() : System.Single, set_M41(System.Single) : System.Void

Field: M42 : System.Single

+ Kind changed to "Property"
Added methods: + get_M42() : System.Single, set_M42(System.Single) : System.Void

Field: M43 : System.Single

+ Kind changed to "Property"
Added methods: + get_M43() : System.Single, set_M43(System.Single) : System.Void

Field: M44 : System.Single

+ Kind changed to "Property"
Added methods: + get_M44() : System.Single, set_M44(System.Single) : System.Void

Struct: Vector2F

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: X : System.Single

+ Kind changed to "Property"
Added methods: + get_X() : System.Single, set_X(System.Single) : System.Void

Field: Y : System.Single

+ Kind changed to "Property"
Added methods: + get_Y() : System.Single, set_Y(System.Single) : System.Void

Struct: Vector3F

Added methods: + Add(Microsoft.WindowsAPICodePack.DirectX.Direct3D.Vector3F, Microsoft.WindowsAPICodePack.DirectX.Direct3D.Vector3F) : Microsoft.WindowsAPICodePack.DirectX.Direct3D.Vector3F, Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, Subtract(Microsoft.WindowsAPICodePack.DirectX.Direct3D.Vector3F, Microsoft.WindowsAPICodePack.DirectX.Direct3D.Vector3F) : Microsoft.WindowsAPICodePack.DirectX.Direct3D.Vector3F

Field: X : System.Single

+ Kind changed to "Property"
Added methods: + get_X() : System.Single, set_X(System.Single) : System.Void

Field: Y : System.Single

+ Kind changed to "Property"
Added methods: + get_Y() : System.Single, set_Y(System.Single) : System.Void

Field: Z : System.Single

+ Kind changed to "Property"
Added methods: + get_Z() : System.Single, set_Z(System.Single) : System.Void

Struct: Vector4B

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Method: op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D.Vector4B*, Microsoft.WindowsAPICodePack.DirectX.Direct3D.Vector4B*) : System.Boolean

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D.Vector4B, Microsoft.WindowsAPICodePack.DirectX.Direct3D.Vector4B) : System.Boolean"

Field: W : System.Boolean

+ Kind changed to "Property"
Added methods: + get_W() : System.Boolean, set_W(System.Boolean) : System.Void

Field: X : System.Boolean

+ Kind changed to "Property"
Added methods: + get_X() : System.Boolean, set_X(System.Boolean) : System.Void

Field: Y : System.Boolean

+ Kind changed to "Property"
Added methods: + get_Y() : System.Boolean, set_Y(System.Boolean) : System.Void

Field: Z : System.Boolean

+ Kind changed to "Property"
Added methods: + get_Z() : System.Boolean, set_Z(System.Boolean) : System.Void

Struct: Vector4F

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: W : System.Single

+ Kind changed to "Property"
Added methods: + get_W() : System.Single, set_W(System.Single) : System.Void

Field: X : System.Single

+ Kind changed to "Property"
Added methods: + get_X() : System.Single, set_X(System.Single) : System.Void

Field: Y : System.Single

+ Kind changed to "Property"
Added methods: + get_Y() : System.Single, set_Y(System.Single) : System.Void

Field: Z : System.Single

+ Kind changed to "Property"
Added methods: + get_Z() : System.Single, set_Z(System.Single) : System.Void

Struct: Vector4I

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: W : System.Int32

+ Kind changed to "Property"
Added methods: + get_W() : System.Int32, set_W(System.Int32) : System.Void

Field: X : System.Int32

+ Kind changed to "Property"
Added methods: + get_X() : System.Int32, set_X(System.Int32) : System.Void

Field: Y : System.Int32

+ Kind changed to "Property"
Added methods: + get_Y() : System.Int32, set_Y(System.Int32) : System.Void

Field: Z : System.Int32

+ Kind changed to "Property"
Added methods: + get_Z() : System.Int32, set_Z(System.Int32) : System.Void

Namespace: Microsoft.WindowsAPICodePack.DirectX.Direct3D10

Added types: + CounterData, IncludeData, IndexBuffer, OutputBuffer, OutputMergerBlendState, OutputMergerRenderTargets, VertexBuffer

Enum: AsyncGetDataFlag

+ Renamed to "AsyncGetDataOptions"

Field: Undefined

+ Renamed to "None"

Class: Asynchronous

Method: GetData(System.IntPtr, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.AsyncGetDataFlag) : System.Void

+ Signature changed to "(System.IntPtr, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.AsyncGetDataOptions) : System.Void"

Method: GetDataSize() : System.UInt32

+ Renamed to "DataSize"
+ Kind changed to "Property"
Added methods: + get_DataSize() : System.UInt32

Enum: BindFlag

+ Renamed to "BindingOptions"

Field: Undefined

+ Renamed to "None"

Struct: BlendDescription

Field: AlphaToCoverageEnable : System.Boolean

+ Kind changed to "Property"
Added methods: + get_AlphaToCoverageEnable() : System.Boolean, set_AlphaToCoverageEnable(System.Boolean) : System.Void

Property: BlendEnable : System.Boolean[]

Method: get_BlendEnable() : System.Boolean[]

+ Signature changed to "() : System.Collections.ObjectModel.ReadOnlyCollection<System.Boolean>"

Field: BlendOperation : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BlendOperation

+ Kind changed to "Property"
Added methods: + get_BlendOperation() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BlendOperation, set_BlendOperation(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BlendOperation) : System.Void

Field: BlendOperationAlpha : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BlendOperation

+ Kind changed to "Property"
Added methods: + get_BlendOperationAlpha() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BlendOperation, set_BlendOperationAlpha(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BlendOperation) : System.Void

Field: DestinationBlend : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend

+ Kind changed to "Property"
Added methods: + get_DestinationBlend() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend, set_DestinationBlend(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend) : System.Void

Field: DestinationBlendAlpha : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend

+ Kind changed to "Property"
Added methods: + get_DestinationBlendAlpha() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend, set_DestinationBlendAlpha(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend) : System.Void

Property: RenderTargetWriteMask : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ColorWriteEnable[]

Method: get_RenderTargetWriteMask() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ColorWriteEnable[]

+ Signature changed to "() : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ColorWriteEnableComponents>"

Field: SourceBlend : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend

+ Kind changed to "Property"
Added methods: + get_SourceBlend() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend, set_SourceBlend(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend) : System.Void

Field: SourceBlendAlpha : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend

+ Kind changed to "Property"
Added methods: + get_SourceBlendAlpha() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend, set_SourceBlendAlpha(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend) : System.Void

Struct: BlendDescription1

Property: RenderTarget : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RenderTargetBlendDescription1[]

Method: get_RenderTarget() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RenderTargetBlendDescription1[]

+ Signature changed to "() : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RenderTargetBlendDescription1>"

Class: Blob

Added methods: + Create(System.Int64) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blob

Method: GetBufferPointer() : System.IntPtr

+ Renamed to "BufferPointer"
+ Kind changed to "Property"
Added methods: + get_BufferPointer() : System.IntPtr

Method: GetBufferSize() : System.UInt32

+ Renamed to "BufferSize"
+ Kind changed to "Property"
Added methods: + get_BufferSize() : System.UInt32

Struct: Box

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: Back : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Back() : System.UInt32, set_Back(System.UInt32) : System.Void

Field: Bottom : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Bottom() : System.UInt32, set_Bottom(System.UInt32) : System.Void

Field: Front : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Front() : System.UInt32, set_Front(System.UInt32) : System.Void

Field: Left : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Left() : System.UInt32, set_Left(System.UInt32) : System.Void

Field: Right : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Right() : System.UInt32, set_Right(System.UInt32) : System.Void

Field: Top : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Top() : System.UInt32, set_Top(System.UInt32) : System.Void

Struct: BufferDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferDescription) : System.Boolean

Field: BindFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BindFlag

+ Renamed to "BindingOptions"
+ Kind changed to "Property"
Added methods: + get_BindingOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BindingOptions, set_BindingOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BindingOptions) : System.Void

Field: ByteWidth : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ByteWidth() : System.UInt32, set_ByteWidth(System.UInt32) : System.Void

Field: CpuAccessFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CpuAccessFlag

+ Renamed to "CpuAccessOptions"
+ Kind changed to "Property"
Added methods: + get_CpuAccessOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CpuAccessOptions, set_CpuAccessOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CpuAccessOptions) : System.Void

Field: MiscFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ResourceMiscFlag

+ Renamed to "MiscellaneousResourceOptions"
+ Kind changed to "Property"
Added methods: + get_MiscellaneousResourceOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MiscellaneousResourceOptions, set_MiscellaneousResourceOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MiscellaneousResourceOptions) : System.Void

Field: Usage : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Usage

+ Kind changed to "Property"
Added methods: + get_Usage() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Usage, set_Usage(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Usage) : System.Void

Struct: BufferRenderTargetView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferRenderTargetView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferRenderTargetView) : System.Boolean

Field: ElementOffset : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ElementOffset() : System.UInt32, set_ElementOffset(System.UInt32) : System.Void

Field: ElementWidth : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ElementWidth() : System.UInt32, set_ElementWidth(System.UInt32) : System.Void

Struct: BufferShaderResourceView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferShaderResourceView) : System.Boolean

Field: ElementOffset : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ElementOffset() : System.UInt32, set_ElementOffset(System.UInt32) : System.Void

Field: ElementWidth : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ElementWidth() : System.UInt32, set_ElementWidth(System.UInt32) : System.Void

Enum: ClearFlag

+ Renamed to "ClearOptions"

Field: Undefined

+ Renamed to "None"

Enum: ColorWriteEnable

+ Renamed to "ColorWriteEnableComponents"

Field: Undefined

+ Renamed to "None"

Struct: CounterDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CounterDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CounterDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CounterDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CounterDescription) : System.Boolean

Field: Counter : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Counter

+ Kind changed to "Property"
Added methods: + get_Counter() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Counter, set_Counter(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Counter) : System.Void

Field: MiscFlags : System.UInt32

+ Renamed to "ReservedOptions"
+ Kind changed to "Property"
Added methods: + get_ReservedOptions() : System.UInt32, set_ReservedOptions(System.UInt32) : System.Void

Struct: CounterInformation

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CounterInformation, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CounterInformation) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CounterInformation, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CounterInformation) : System.Boolean

Field: LastDeviceDependentCounter : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Counter

+ Kind changed to "Property"
Added methods: + get_LastDeviceDependentCounter() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Counter, set_LastDeviceDependentCounter(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Counter) : System.Void

Field: NumDetectableParallelUnits : System.Byte

+ Renamed to "DetectableParallelUnitCount"
+ Kind changed to "Property"
Added methods: + get_DetectableParallelUnitCount() : System.Byte, set_DetectableParallelUnitCount(System.Byte) : System.Void

Field: NumSimultaneousCounters : System.UInt32

+ Renamed to "SimultaneousCounterCount"
+ Kind changed to "Property"
Added methods: + get_SimultaneousCounterCount() : System.UInt32, set_SimultaneousCounterCount(System.UInt32) : System.Void

Enum: CounterType

Field: Uint16

+ Renamed to "UInt16"

Field: Uint32

+ Renamed to "UInt32"

Field: Uint64

+ Renamed to "UInt64"

Enum: CpuAccessFlag

+ Renamed to "CpuAccessOptions"

Field: Unspecified

+ Renamed to "None"

Enum: CreateDeviceFlag

+ Renamed to "CreateDeviceOptions"

Field: Default

+ Renamed to "None"

Field: SupportBGRA

+ Renamed to "SupportBgra"

Class: D3DBuffer

Method: Map(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Map, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MapFlag) : System.IntPtr

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Map, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MapOptions) : System.IntPtr"

Class: D3DDebug

Property: FeatureMask : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DebugFeature

Method: get_FeatureMask() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DebugFeature

+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DebugFeatures"

Method: set_FeatureMask(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DebugFeature) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DebugFeatures) : System.Void"

Property: PresentPerRenderOpDelay : System.UInt32

+ Renamed to "PresentPerRenderOperationDelay"

Method: get_PresentPerRenderOpDelay() : System.UInt32

+ Renamed to "get_PresentPerRenderOperationDelay"

Method: set_PresentPerRenderOpDelay(System.UInt32) : System.Void

+ Renamed to "set_PresentPerRenderOperationDelay"

Property: RuntimeSwapChain : Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChain

Method: get_RuntimeSwapChain() : Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChain

+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapChain"

Method: set_RuntimeSwapChain(Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChain) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapChain) : System.Void"

Class: D3DDevice

Removed methods: + CheckCounter(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CounterDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CounterType&, System.UInt32&, System.String&, System.String&, System.String&) : System.Boolean, CheckFormatSupport(Microsoft.WindowsAPICodePack.DirectX.DXGI.Format, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.FormatSupport&) : System.Boolean, CheckMultisampleQualityLevels(Microsoft.WindowsAPICodePack.DirectX.DXGI.Format, System.UInt32, System.UInt32&) : System.Boolean
Added methods: + GetCounterData(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CounterDescription) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CounterData
Added properties: + Debug : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDebug, GraphicsDevice1 : Microsoft.WindowsAPICodePack.DirectX.Graphics.Device1, Multithread : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Multithread, SwapChain : Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapChain

Method: CheckCounterInformation() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CounterInformation

+ Renamed to "CounterInformation"
+ Kind changed to "Property"
Added methods: + get_CounterInformation() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CounterInformation

Method: ClearDepthStencilView(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ClearFlag, System.Single, System.Byte) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ClearOptions, System.Single, System.Byte) : System.Void"

Method: ClearRenderTargetView(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RenderTargetView, Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgba) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgba) : System.Void"

Method: CreateDevice(Microsoft.WindowsAPICodePack.DirectX.DXGI.Adapter, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DriverType, System.String, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CreateDeviceFlag) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Adapter, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DriverType, System.String, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CreateDeviceOptions) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice"

Method: CreateDeviceAndSwapChain(Microsoft.WindowsAPICodePack.DirectX.DXGI.Adapter, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DriverType, System.String, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CreateDeviceFlag, Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChainDescription, Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChain&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Adapter, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DriverType, System.String, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CreateDeviceOptions, Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapChainDescription) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice"

Method: CreateDeviceAndSwapChain(System.IntPtr, Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChain&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice

+ Signature changed to "(System.IntPtr) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice"

Property: CreationFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CreateDeviceFlag

+ Renamed to "CreateDeviceOptions"

Method: get_CreationFlags() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CreateDeviceFlag

+ Renamed to "get_CreateDeviceOptions"
+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CreateDeviceOptions"

Property: ExceptionMode : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RaiseFlag

Method: get_ExceptionMode() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RaiseFlag

+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ExceptionErrors"

Method: set_ExceptionMode(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RaiseFlag) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ExceptionErrors) : System.Void"

Method: GetDXGIDevice() : Microsoft.WindowsAPICodePack.DirectX.DXGI.DXGIDevice

+ Renamed to "GraphicsDevice"
+ Kind changed to "Property"
Added methods: + get_GraphicsDevice() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Device

Method: GetFormatSupport(Microsoft.WindowsAPICodePack.DirectX.DXGI.Format) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.FormatSupport

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.FormatSupportOptions"

Method: GetInfoQueue() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.InfoQueue

+ Renamed to "InfoQueue"
+ Kind changed to "Property"
Added methods: + get_InfoQueue() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.InfoQueue

Method: GetMultisampleQualityLevels(Microsoft.WindowsAPICodePack.DirectX.DXGI.Format, System.UInt32) : System.UInt32

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, System.UInt32) : System.UInt32"

Method: GetPredication(System.Boolean&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DPredicate

+ Renamed to "Predication"
+ Kind changed to "Property"
Added methods: + get_Predication() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DPredicate, set_Predication(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DPredicate) : System.Void

Method: GetSwitchToRef() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.SwitchToRef

+ Renamed to "SwitchToRef"
+ Kind changed to "Property"
Added methods: + get_SwitchToRef() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.SwitchToRef

Method: ResolveSubresource(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DResource, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DResource, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.DXGI.Format) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DResource, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DResource, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void"

Class: D3DDevice1

Method: CreateDevice1(Microsoft.WindowsAPICodePack.DirectX.DXGI.Adapter, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DriverType, System.String, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CreateDeviceFlag, Microsoft.WindowsAPICodePack.DirectX.Direct3D.FeatureLevel) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice1

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Adapter, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DriverType, System.String, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CreateDeviceOptions, Microsoft.WindowsAPICodePack.DirectX.Direct3D.FeatureLevel) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice1"

Method: CreateDeviceAndSwapChain1(Microsoft.WindowsAPICodePack.DirectX.DXGI.Adapter, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DriverType, System.String, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CreateDeviceFlag, Microsoft.WindowsAPICodePack.DirectX.Direct3D.FeatureLevel, Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChainDescription, Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChain&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice1

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Adapter, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DriverType, System.String, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CreateDeviceOptions, Microsoft.WindowsAPICodePack.DirectX.Direct3D.FeatureLevel, Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapChainDescription) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice1"

Method: CreateDeviceAndSwapChain1(System.IntPtr, Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChain&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice1

+ Signature changed to "(System.IntPtr) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice1"

Class: D3DPredicate

Added properties: + WhenTrue : System.Boolean

Class: D3DResource

Added properties: + GraphicsSurface1 : Microsoft.WindowsAPICodePack.DirectX.Graphics.Surface1

Method: GetDXGISurface() : Microsoft.WindowsAPICodePack.DirectX.DXGI.Surface

+ Renamed to "GraphicsSurface"
+ Kind changed to "Property"
Added methods: + get_GraphicsSurface() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Surface

Property: Type : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ResourceDimension

+ Renamed to "ResourceDimension"

Method: get_Type() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ResourceDimension

+ Renamed to "get_ResourceDimension"

Enum: DebugFeature

+ Renamed to "DebugFeatures"

Struct: DepthStencilDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilDescription) : System.Boolean

Field: BackFace : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilOperationDescription

+ Kind changed to "Property"
Added methods: + get_BackFace() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilOperationDescription, set_BackFace(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilOperationDescription) : System.Void

Field: DepthEnable : System.Boolean

+ Kind changed to "Property"
Added methods: + get_DepthEnable() : System.Boolean, set_DepthEnable(System.Boolean) : System.Void

Field: DepthFunction : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ComparisonFunction

+ Kind changed to "Property"
Added methods: + get_DepthFunction() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ComparisonFunction, set_DepthFunction(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ComparisonFunction) : System.Void

Field: DepthWriteMask : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthWriteMask

+ Kind changed to "Property"
Added methods: + get_DepthWriteMask() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthWriteMask, set_DepthWriteMask(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthWriteMask) : System.Void

Field: FrontFace : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilOperationDescription

+ Kind changed to "Property"
Added methods: + get_FrontFace() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilOperationDescription, set_FrontFace(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilOperationDescription) : System.Void

Field: StencilEnable : System.Boolean

+ Kind changed to "Property"
Added methods: + get_StencilEnable() : System.Boolean, set_StencilEnable(System.Boolean) : System.Void

Field: StencilReadMask : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.StencilReadMask

+ Kind changed to "Property"
Added methods: + get_StencilReadMask() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.StencilReadMask, set_StencilReadMask(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.StencilReadMask) : System.Void

Field: StencilWriteMask : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.StencilWriteMask

+ Kind changed to "Property"
Added methods: + get_StencilWriteMask() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.StencilWriteMask, set_StencilWriteMask(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.StencilWriteMask) : System.Void

Struct: DepthStencilOperationDescription

Added methods: + .ctor(D3D10_DEPTH_STENCILOP_DESC*) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilOperationDescription, Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilOperationDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilOperationDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilOperationDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilOperationDescription) : System.Boolean

Field: StencilDepthFailOperation : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.StencilOperation

+ Kind changed to "Property"
Added methods: + get_StencilDepthFailOperation() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.StencilOperation, set_StencilDepthFailOperation(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.StencilOperation) : System.Void

Field: StencilFailOperation : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.StencilOperation

+ Kind changed to "Property"
Added methods: + get_StencilFailOperation() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.StencilOperation, set_StencilFailOperation(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.StencilOperation) : System.Void

Field: StencilFunction : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ComparisonFunction

+ Kind changed to "Property"
Added methods: + get_StencilFunction() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ComparisonFunction, set_StencilFunction(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ComparisonFunction) : System.Void

Field: StencilPassOperation : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.StencilOperation

+ Kind changed to "Property"
Added methods: + get_StencilPassOperation() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.StencilOperation, set_StencilPassOperation(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.StencilOperation) : System.Void

Struct: DepthStencilViewDescription

Field: Format : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_Format() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_Format(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: Texture1D : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DDepthStencilView

+ Kind changed to "Property"
Added methods: + get_Texture1D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DDepthStencilView, set_Texture1D(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DDepthStencilView) : System.Void

Field: Texture1DArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayDepthStencilView

+ Kind changed to "Property"
Added methods: + get_Texture1DArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayDepthStencilView, set_Texture1DArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayDepthStencilView) : System.Void

Field: Texture2D : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DDepthStencilView

+ Kind changed to "Property"
Added methods: + get_Texture2D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DDepthStencilView, set_Texture2D(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DDepthStencilView) : System.Void

Field: Texture2DArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayDepthStencilView

+ Kind changed to "Property"
Added methods: + get_Texture2DArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayDepthStencilView, set_Texture2DArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayDepthStencilView) : System.Void

Field: Texture2DMultiSample : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultiSampleDepthStencilView

+ Renamed to "Texture2DMultisample"
+ Kind changed to "Property"
Added methods: + get_Texture2DMultisample() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleDepthStencilView, set_Texture2DMultisample(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleDepthStencilView) : System.Void

Field: Texture2DMultiSampleArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultiSampleArrayDepthStencilView

+ Renamed to "Texture2DMultisampleArray"
+ Kind changed to "Property"
Added methods: + get_Texture2DMultisampleArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayDepthStencilView, set_Texture2DMultisampleArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayDepthStencilView) : System.Void

Field: ViewDimension : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilViewDimension

+ Kind changed to "Property"
Added methods: + get_ViewDimension() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilViewDimension, set_ViewDimension(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilViewDimension) : System.Void

Enum: DepthStencilViewDimension

Field: Texture2DMultiSample

+ Renamed to "Texture2DMultisample"

Field: Texture2DMultiSampleArray

+ Renamed to "Texture2DMultisampleArray"

Enum: DepthWriteMask

Field: All

+ Renamed to "Enabled"

Field: Zero

+ Renamed to "None"

Class: DeviceChild

Method: GetDevice() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice

+ Renamed to "Device"
+ Kind changed to "Property"
Added methods: + get_Device() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice

Enum: DeviceStateTypes

+ Renamed to "DeviceStateType"

Field: OutputMergeRenderTargets

+ Renamed to "OutputMergerRenderTargets"

Class: Effect

Method: GetDevice() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice

+ Renamed to "Device"
+ Kind changed to "Property"
Added methods: + get_Device() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice

Class: EffectConstantBuffer

Removed methods: + GetConstantBuffer() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DBuffer, GetTextureBuffer() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderResourceView, SetConstantBuffer(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DBuffer) : System.Void, SetTextureBuffer(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderResourceView) : System.Void
Added properties: + ConstantBuffer : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DBuffer, TextureBuffer : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderResourceView

Class: EffectDepthStencilViewVariable

Removed methods: + GetDepthStencil() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilView, SetDepthStencil(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilView) : System.Void
Added properties: + DepthStencil : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilView

Struct: EffectDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectDescription) : System.Boolean

Field: ConstantBuffers : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ConstantBuffers() : System.UInt32, set_ConstantBuffers(System.UInt32) : System.Void

Field: GlobalVariables : System.UInt32

+ Kind changed to "Property"
Added methods: + get_GlobalVariables() : System.UInt32, set_GlobalVariables(System.UInt32) : System.Void

Field: IsChildEffect : System.Boolean

+ Kind changed to "Property"
Added methods: + get_IsChildEffect() : System.Boolean, set_IsChildEffect(System.Boolean) : System.Void

Field: SharedConstantBuffers : System.UInt32

+ Kind changed to "Property"
Added methods: + get_SharedConstantBuffers() : System.UInt32, set_SharedConstantBuffers(System.UInt32) : System.Void

Field: SharedGlobalVariables : System.UInt32

+ Kind changed to "Property"
Added methods: + get_SharedGlobalVariables() : System.UInt32, set_SharedGlobalVariables(System.UInt32) : System.Void

Field: Techniques : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Techniques() : System.UInt32, set_Techniques(System.UInt32) : System.Void

Class: EffectPool

Method: AsEffect() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Effect

+ Kind changed to "Property"
Added methods: + get_AsEffect() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Effect

Class: EffectRenderTargetViewVariable

Removed methods: + GetRenderTarget() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RenderTargetView, SetRenderTarget(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RenderTargetView) : System.Void
Added properties: + RenderTarget : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RenderTargetView

Class: EffectScalarVariable

Property: BoolValue : System.Boolean

+ Renamed to "AsBoolean"

Method: get_BoolValue() : System.Boolean

+ Renamed to "get_AsBoolean"

Method: set_BoolValue(System.Boolean) : System.Void

+ Renamed to "set_AsBoolean"

Property: FloatValue : System.Single

+ Renamed to "AsSingle"

Method: get_FloatValue() : System.Single

+ Renamed to "get_AsSingle"

Method: set_FloatValue(System.Single) : System.Void

+ Renamed to "set_AsSingle"

Method: GetBoolArray(System.UInt32) : System.Boolean[]

+ Renamed to "GetBooleanArray"

Method: GetFloatArray(System.UInt32) : System.Single[]

+ Renamed to "GetSingleArray"

Method: GetIntArray(System.UInt32) : System.Int32[]

+ Renamed to "GetInt32Array"

Property: IntValue : System.Int32

+ Renamed to "AsInt32"

Method: get_IntValue() : System.Int32

+ Renamed to "get_AsInt32"

Method: set_IntValue(System.Int32) : System.Void

+ Renamed to "set_AsInt32"

Method: SetBoolArray(System.Boolean[]) : System.Void

+ Renamed to "SetBooleanArray"

Method: SetFloatArray(System.Single[]) : System.Void

+ Renamed to "SetSingleArray"

Method: SetIntArray(System.Int32[]) : System.Void

+ Renamed to "SetInt32Array"

Struct: EffectShaderDescription

Field: Bytecode : System.IntPtr

+ Kind changed to "Property"
Added methods: + get_Bytecode() : System.IntPtr, set_Bytecode(System.IntPtr) : System.Void

Field: BytecodeLength : System.UInt32

+ Kind changed to "Property"
Added methods: + get_BytecodeLength() : System.UInt32, set_BytecodeLength(System.UInt32) : System.Void

Field: InputSignature : System.IntPtr

+ Kind changed to "Property"
Added methods: + get_InputSignature() : System.IntPtr, set_InputSignature(System.IntPtr) : System.Void

Field: IsInline : System.Boolean

+ Kind changed to "Property"
Added methods: + get_IsInline() : System.Boolean, set_IsInline(System.Boolean) : System.Void

Field: NumInputSignatureEntries : System.UInt32

+ Renamed to "InputSignatureEntryCount"
+ Kind changed to "Property"
Added methods: + get_InputSignatureEntryCount() : System.UInt32, set_InputSignatureEntryCount(System.UInt32) : System.Void

Field: NumOutputSignatureEntries : System.UInt32

+ Renamed to "OutputSignatureEntryCount"
+ Kind changed to "Property"
Added methods: + get_OutputSignatureEntryCount() : System.UInt32, set_OutputSignatureEntryCount(System.UInt32) : System.Void

Field: StreamOutputDeclaration : System.String

+ Kind changed to "Property"
Added methods: + get_StreamOutputDeclaration() : System.String, set_StreamOutputDeclaration(System.String) : System.Void

Class: EffectShaderResourceVariable

Removed methods: + GetResource() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderResourceView, SetResource(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderResourceView) : System.Void
Added properties: + Resource : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderResourceView

Struct: EffectTypeDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectTypeDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectTypeDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectTypeDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectTypeDescription) : System.Boolean

Field: Class : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderVariableClass

+ Renamed to "ShaderVariableClass"
+ Kind changed to "Property"
Added methods: + get_ShaderVariableClass() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderVariableClass, set_ShaderVariableClass(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderVariableClass) : System.Void

Field: Columns : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Columns() : System.UInt32, set_Columns(System.UInt32) : System.Void

Field: Elements : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Elements() : System.UInt32, set_Elements(System.UInt32) : System.Void

Field: Members : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Members() : System.UInt32, set_Members(System.UInt32) : System.Void

Field: PackedSize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_PackedSize() : System.UInt32, set_PackedSize(System.UInt32) : System.Void

Field: Rows : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Rows() : System.UInt32, set_Rows(System.UInt32) : System.Void

Field: Stride : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Stride() : System.UInt32, set_Stride(System.UInt32) : System.Void

Field: Type : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderVariableType

+ Renamed to "ShaderVariableType"
+ Kind changed to "Property"
Added methods: + get_ShaderVariableType() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderVariableType, set_ShaderVariableType(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderVariableType) : System.Void

Field: TypeName : System.String

+ Kind changed to "Property"
Added methods: + get_TypeName() : System.String, set_TypeName(System.String) : System.Void

Field: UnpackedSize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_UnpackedSize() : System.UInt32, set_UnpackedSize(System.UInt32) : System.Void

Class: EffectVariable

Method: AsBlend() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectBlendVariable

+ Kind changed to "Property"
Added methods: + get_AsBlend() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectBlendVariable

Method: AsConstantBuffer() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectConstantBuffer

+ Kind changed to "Property"
Added methods: + get_AsConstantBuffer() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectConstantBuffer

Method: AsDepthStencil() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectDepthStencilVariable

+ Kind changed to "Property"
Added methods: + get_AsDepthStencil() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectDepthStencilVariable

Method: AsDepthStencilView() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectDepthStencilViewVariable

+ Kind changed to "Property"
Added methods: + get_AsDepthStencilView() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectDepthStencilViewVariable

Method: AsMatrix() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectMatrixVariable

+ Kind changed to "Property"
Added methods: + get_AsMatrix() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectMatrixVariable

Method: AsRasterizer() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectRasterizerVariable

+ Kind changed to "Property"
Added methods: + get_AsRasterizer() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectRasterizerVariable

Method: AsRenderTargetView() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectRenderTargetViewVariable

+ Kind changed to "Property"
Added methods: + get_AsRenderTargetView() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectRenderTargetViewVariable

Method: AsSampler() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectSamplerVariable

+ Kind changed to "Property"
Added methods: + get_AsSampler() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectSamplerVariable

Method: AsScalar() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectScalarVariable

+ Kind changed to "Property"
Added methods: + get_AsScalar() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectScalarVariable

Method: AsShader() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectShaderVariable

+ Kind changed to "Property"
Added methods: + get_AsShader() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectShaderVariable

Method: AsShaderResource() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectShaderResourceVariable

+ Kind changed to "Property"
Added methods: + get_AsShaderResource() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectShaderResourceVariable

Method: AsString() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectStringVariable

+ Kind changed to "Property"
Added methods: + get_AsString() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectStringVariable

Method: AsVector() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectVectorVariable

+ Kind changed to "Property"
Added methods: + get_AsVector() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectVectorVariable

Method: GetParentConstantBuffer() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectConstantBuffer

+ Renamed to "ParentConstantBuffer"
+ Kind changed to "Property"
Added methods: + get_ParentConstantBuffer() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectConstantBuffer

Method: GetType() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectType

+ Renamed to "EffectType"
+ Kind changed to "Property"
Added methods: + get_EffectType() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectType

Struct: EffectVariableDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectVariableDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectVariableDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectVariableDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectVariableDescription) : System.Boolean

Field: Annotations : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Annotations() : System.UInt32, set_Annotations(System.UInt32) : System.Void

Field: BufferOffset : System.UInt32

+ Kind changed to "Property"
Added methods: + get_BufferOffset() : System.UInt32, set_BufferOffset(System.UInt32) : System.Void

Field: ExplicitBindPoint : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ExplicitBindPoint() : System.UInt32, set_ExplicitBindPoint(System.UInt32) : System.Void

Field: Flags : System.UInt32

+ Renamed to "Options"
+ Kind changed to "Property"
Added methods: + get_Options() : System.UInt32, set_Options(System.UInt32) : System.Void

Field: Name : System.String

+ Kind changed to "Property"
Added methods: + get_Name() : System.String, set_Name(System.String) : System.Void

Field: Semantic : System.String

+ Kind changed to "Property"
Added methods: + get_Semantic() : System.String, set_Semantic(System.String) : System.Void

Enum: Filter

Field: Text1bit

+ Renamed to "OneBitTexture"

Enum: FormatSupport

+ Renamed to "FormatSupportOptions"

Field: Mip

+ Renamed to "MipMap"

Field: MipAutoGeneration

+ Renamed to "MipMapAutoGeneration"

Field: MultiSampleLoad

+ Renamed to "MultisampleLoad"

Field: MultiSampleRendertarget

+ Renamed to "MultisampleRenderTarget"

Field: MultiSampleResolve

+ Renamed to "MultisampleResolve"

Class: GeometryShaderPipelineStage

Removed methods: + GetShader() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.GeometryShader, SetShader(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.GeometryShader) : System.Void
Added properties: + Shader : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.GeometryShader

Class: Include

Added methods: + .ctor(System.IntPtr) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Include

Method: Close(System.IntPtr) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.IncludeData) : System.Void"

Method: Open(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.IncludeType, System.String, System.IntPtr, System.UInt32&) : System.IntPtr

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.IncludeType, System.String, System.IntPtr) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.IncludeData"

Class: InfoQueue

Property: NumMessagesAllowedByStorageFilter : System.UInt64

+ Renamed to "AllowedByStorageFilterCount"

Method: get_NumMessagesAllowedByStorageFilter() : System.UInt64

+ Renamed to "get_AllowedByStorageFilterCount"

Property: NumMessagesDeniedByStorageFilter : System.UInt64

+ Renamed to "DeniedByStorageFilterCount"

Method: get_NumMessagesDeniedByStorageFilter() : System.UInt64

+ Renamed to "get_DeniedByStorageFilterCount"

Property: NumMessagesDiscardedByMessageCountLimit : System.UInt64

+ Renamed to "DiscardedByMessageCountLimitCount"

Method: get_NumMessagesDiscardedByMessageCountLimit() : System.UInt64

+ Renamed to "get_DiscardedByMessageCountLimitCount"

Property: NumStoredMessages : System.UInt64

+ Renamed to "StoredCount"

Method: get_NumStoredMessages() : System.UInt64

+ Renamed to "get_StoredCount"

Property: NumStoredMessagesAllowedByRetrievalFilter : System.UInt64

+ Renamed to "StoredAllowedByRetrievalFilterCount"

Method: get_NumStoredMessagesAllowedByRetrievalFilter() : System.UInt64

+ Renamed to "get_StoredAllowedByRetrievalFilterCount"

Class: InputAssemblerPipelineStage

Removed methods: + GetIndexBuffer(Microsoft.WindowsAPICodePack.DirectX.DXGI.Format&, System.UInt32&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DBuffer, GetInputLayout() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.InputLayout, GetPrimitiveTopology() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.PrimitiveTopology, SetIndexBuffer(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DBuffer, Microsoft.WindowsAPICodePack.DirectX.DXGI.Format, System.UInt32) : System.Void, SetInputLayout(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.InputLayout) : System.Void, SetPrimitiveTopology(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.PrimitiveTopology) : System.Void
Added methods: + SetVertexBuffers(System.UInt32, System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D10.VertexBuffer>) : System.Void
Added properties: + IndexBuffer : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.IndexBuffer, InputLayout : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.InputLayout, PrimitiveTopology : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.PrimitiveTopology

Method: GetVertexBuffers(System.UInt32, System.UInt32, System.UInt32[]&, System.UInt32[]&) : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DBuffer>

+ Signature changed to "(System.UInt32, System.UInt32) : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D10.VertexBuffer>"

Struct: InputElementDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.InputElementDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.InputElementDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.InputElementDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.InputElementDescription) : System.Boolean

Field: AlignedByteOffset : System.UInt32

+ Kind changed to "Property"
Added methods: + get_AlignedByteOffset() : System.UInt32, set_AlignedByteOffset(System.UInt32) : System.Void

Field: Format : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_Format() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_Format(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: InputSlot : System.UInt32

+ Kind changed to "Property"
Added methods: + get_InputSlot() : System.UInt32, set_InputSlot(System.UInt32) : System.Void

Field: InputSlotClass : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.InputClassification

+ Kind changed to "Property"
Added methods: + get_InputSlotClass() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.InputClassification, set_InputSlotClass(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.InputClassification) : System.Void

Field: InstanceDataStepRate : System.UInt32

+ Kind changed to "Property"
Added methods: + get_InstanceDataStepRate() : System.UInt32, set_InstanceDataStepRate(System.UInt32) : System.Void

Field: SemanticIndex : System.UInt32

+ Kind changed to "Property"
Added methods: + get_SemanticIndex() : System.UInt32, set_SemanticIndex(System.UInt32) : System.Void

Field: SemanticName : System.String

+ Kind changed to "Property"
Added methods: + get_SemanticName() : System.String, set_SemanticName(System.String) : System.Void

Enum: MapFlag

+ Renamed to "MapOptions"

Field: Unspecified

+ Renamed to "None"

Struct: MappedTexture2D

Field: Data : System.IntPtr

+ Kind changed to "Property"
Added methods: + get_Data() : System.IntPtr, set_Data(System.IntPtr) : System.Void

Field: RowPitch : System.UInt32

+ Kind changed to "Property"
Added methods: + get_RowPitch() : System.UInt32, set_RowPitch(System.UInt32) : System.Void

Struct: MappedTexture3D

Field: Data : System.IntPtr

+ Kind changed to "Property"
Added methods: + get_Data() : System.IntPtr, set_Data(System.IntPtr) : System.Void

Field: DepthPitch : System.UInt32

+ Kind changed to "Property"
Added methods: + get_DepthPitch() : System.UInt32, set_DepthPitch(System.UInt32) : System.Void

Field: RowPitch : System.UInt32

+ Kind changed to "Property"
Added methods: + get_RowPitch() : System.UInt32, set_RowPitch(System.UInt32) : System.Void

Struct: Message

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Message, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Message) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Message, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Message) : System.Boolean

Field: Category : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MessageCategory

+ Kind changed to "Property"
Added methods: + get_Category() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MessageCategory, set_Category(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MessageCategory) : System.Void

Field: Description : System.String

+ Kind changed to "Property"
Added methods: + get_Description() : System.String, set_Description(System.String) : System.Void

Field: Id : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MessageId

+ Kind changed to "Property"
Added methods: + get_Id() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MessageId, set_Id(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MessageId) : System.Void

Field: Severity : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MessageSeverity

+ Kind changed to "Property"
Added methods: + get_Severity() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MessageSeverity, set_Severity(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MessageSeverity) : System.Void

Enum: MessageId

Field: BlendstateGetdescLegacy

+ Renamed to "BlendStateGetDescLegacy"

Field: BufferMapAlreadymapped

+ Renamed to "BufferMapAlreadyMapped"

Field: BufferMapDeviceremovedReturn

+ Renamed to "BufferMapDeviceRemovedReturn"

Field: BufferMapInvalidflags

+ Renamed to "BufferMapInvalidFlags"

Field: BufferMapInvalidmaptype

+ Renamed to "BufferMapInvalidMapType"

Field: BufferUnmapNotmapped

+ Renamed to "BufferUnmapNotMapped"

Field: CheckcounterOutofrangeCounter

+ Renamed to "CheckCounterOutOfRangeCounter"

Field: CheckcounterUnsupportedWellknownCounter

+ Renamed to "CheckCounterUnsupportedWellKnownCounter"

Field: CheckformatsupportFormatDeprecated

+ Renamed to "CheckFormatSupportFormatDeprecated"

Field: CheckmultisamplequalitylevelsFormatDeprecated

+ Renamed to "CheckMultisampleQualityLevelsFormatDeprecated"

Field: CleardepthstencilviewDenormflush

+ Renamed to "ClearDepthStencilViewDenormFlush"

Field: CleardepthstencilviewInvalid

+ Renamed to "ClearDepthStencilViewInvalid"

Field: ClearrendertargetviewDenormflush

+ Renamed to "ClearRenderTargetViewDenormFlush"

Field: CopyresourceInvaliddestinationstate

+ Renamed to "CopyResourceInvalidDestinationState"

Field: CopyresourceInvalidsource

+ Renamed to "CopyResourceInvalidSource"

Field: CopyresourceInvalidsourcestate

+ Renamed to "CopyResourceInvalidSourceState"

Field: CopysubresourceregionInvaliddestinationstate

+ Renamed to "CopySubresourceRegionInvalidDestinationState"

Field: CopysubresourceregionInvaliddestinationsubresource

+ Renamed to "CopySubresourceRegionInvalidDestinationSubresource"

Field: CopysubresourceregionInvalidsource

+ Renamed to "CopySubresourceRegionInvalidSource"

Field: CopysubresourceregionInvalidsourcebox

+ Renamed to "CopySubresourceRegionInvalidSourceBox"

Field: CopysubresourceregionInvalidsourcestate

+ Renamed to "CopySubresourceRegionInvalidSourceState"

Field: CopysubresourceregionInvalidsourcesubresource

+ Renamed to "CopySubresourceRegionInvalidSourceSubresource"

Field: CreateblendstateInvalidblendop

+ Renamed to "CreateBlendStateInvalidBlendOperation"

Field: CreateblendstateInvalidblendopalpha

+ Renamed to "CreateBlendStateInvalidBlendOperationAlpha"

Field: CreateblendstateInvaliddestblend

+ Renamed to "CreateBlendStateInvalidDestinationBlend"

Field: CreateblendstateInvaliddestblendalpha

+ Renamed to "CreateBlendStateInvalidDestinationBlendAlpha"

Field: CreateblendstateInvalidrendertargetwritemask

+ Renamed to "CreateBlendStateInvalidRenderTargetWriteMask"

Field: CreateblendstateInvalidsrcblend

+ Renamed to "CreateBlendStateInvalidSourceBlend"

Field: CreateblendstateInvalidsrcblendalpha

+ Renamed to "CreateBlendStateInvalidSourceBlendAlpha"

Field: CreateblendstateNulldesc

+ Renamed to "CreateBlendStateNullDesc"

Field: CreateblendstateToomanyobjects

+ Renamed to "CreateBlendStateTooManyObjects"

Field: CreatebufferInvalidargReturn

+ Renamed to "CreateBufferInvalidArgReturn"

Field: CreatebufferInvalidbindflags

+ Renamed to "CreateBufferInvalidBindFlags"

Field: CreatebufferInvalidconstantbufferbindings

+ Renamed to "CreateBufferInvalidConstantBufferBindings"

Field: CreatebufferInvalidcpuaccessflags

+ Renamed to "CreateBufferInvalidCpuAccessFlags"

Field: CreatebufferInvaliddimensions

+ Renamed to "CreateBufferInvalidDimensions"

Field: CreatebufferInvalidinitialdata

+ Renamed to "CreateBufferInvalidInitialData"

Field: CreatebufferInvalidmiplevels

+ Renamed to "CreateBufferInvalidMipLevels"

Field: CreatebufferInvalidmiscflags

+ Renamed to "CreateBufferInvalidMiscFlags"

Field: CreatebufferInvalidsamples

+ Renamed to "CreateBufferInvalidSamples"

Field: CreatebufferLargeallocation

+ Renamed to "CreateBufferLargeAllocation"

Field: CreatebufferNulldesc

+ Renamed to "CreateBufferNullDesc"

Field: CreatebufferOutofmemoryReturn

+ Renamed to "CreateBufferOutOfMemoryReturn"

Field: CreatebufferUnrecognizedbindflags

+ Renamed to "CreateBufferUnrecognizedBindFlags"

Field: CreatebufferUnrecognizedcpuaccessflags

+ Renamed to "CreateBufferUnrecognizedCpuAccessFlags"

Field: CreatebufferUnrecognizedformat

+ Renamed to "CreateBufferUnrecognizedFormat"

Field: CreatebufferUnrecognizedmiscflags

+ Renamed to "CreateBufferUnrecognizedMiscFlags"

Field: CreatebufferUnrecognizedusage

+ Renamed to "CreateBufferUnrecognizedUsage"

Field: CreatecounterNonexclusiveReturn

+ Renamed to "CreateCounterNonexclusiveReturn"

Field: CreatecounterNulldesc

+ Renamed to "CreateCounterNullDesc"

Field: CreatecounterOutofmemoryReturn

+ Renamed to "CreateCounterOutOfMemoryReturn"

Field: CreatecounterOutofrangeCounter

+ Renamed to "CreateCounterOutOfRangeCounter"

Field: CreatecounterSimultaneousActiveCountersExhausted

+ Renamed to "CreateCounterSimultaneousActiveCountersExhausted"

Field: CreatecounterUnsupportedWellknownCounter

+ Renamed to "CreateCounterUnsupportedWellKnownCounter"

Field: CreatedepthstencilstateInvalidbackfacestencilfailop

+ Renamed to "CreateDepthStencilStateInvalidBackFaceStencilFailOperation"

Field: CreatedepthstencilstateInvalidbackfacestencilfunc

+ Renamed to "CreateDepthStencilStateInvalidBackFaceStencilFunc"

Field: CreatedepthstencilstateInvalidbackfacestencilpassop

+ Renamed to "CreateDepthStencilStateInvalidBackFaceStencilPassOperation"

Field: CreatedepthstencilstateInvalidbackfacestencilzfailop

+ Renamed to "CreateDepthStencilStateInvalidBackFaceStencilZFailOperation"

Field: CreatedepthstencilstateInvaliddepthfunc

+ Renamed to "CreateDepthStencilStateInvalidDepthFunc"

Field: CreatedepthstencilstateInvaliddepthwritemask

+ Renamed to "CreateDepthStencilStateInvalidDepthWriteMask"

Field: CreatedepthstencilstateInvalidfrontfacestencilfailop

+ Renamed to "CreateDepthStencilStateInvalidFrontFaceStencilFailOperation"

Field: CreatedepthstencilstateInvalidfrontfacestencilfunc

+ Renamed to "CreateDepthStencilStateInvalidFrontFaceStencilFunc"

Field: CreatedepthstencilstateInvalidfrontfacestencilpassop

+ Renamed to "CreateDepthStencilStateInvalidFrontFaceStencilPassOperation"

Field: CreatedepthstencilstateInvalidfrontfacestencilzfailop

+ Renamed to "CreateDepthStencilStateInvalidFrontFaceStencilZFailOperation"

Field: CreatedepthstencilstateNulldesc

+ Renamed to "CreateDepthStencilStateNullDesc"

Field: CreatedepthstencilstateToomanyobjects

+ Renamed to "CreateDepthStencilStateTooManyObjects"

Field: CreatedepthstencilviewInvalidargReturn

+ Renamed to "CreateDepthStencilViewInvalidArgReturn"

Field: CreatedepthstencilviewInvaliddesc

+ Renamed to "CreateDepthStencilViewInvalidDesc"

Field: CreatedepthstencilviewInvaliddimensions

+ Renamed to "CreateDepthStencilViewInvalidDimensions"

Field: CreatedepthstencilviewInvalidformat

+ Renamed to "CreateDepthStencilViewInvalidFormat"

Field: CreatedepthstencilviewInvalidresource

+ Renamed to "CreateDepthStencilViewInvalidResource"

Field: CreatedepthstencilviewOutofmemoryReturn

+ Renamed to "CreateDepthStencilViewOutOfMemoryReturn"

Field: CreatedepthstencilviewToomanyobjects

+ Renamed to "CreateDepthStencilViewTooManyObjects"

Field: CreatedepthstencilviewUnrecognizedformat

+ Renamed to "CreateDepthStencilViewUnrecognizedFormat"

Field: CreategeometryshaderInvalidshaderbytecode

+ Renamed to "CreateGeometryShaderInvalidShaderBytecode"

Field: CreategeometryshaderInvalidshadertype

+ Renamed to "CreateGeometryShaderInvalidShaderType"

Field: CreategeometryshaderOutofmemory

+ Renamed to "CreateGeometryShaderOutOfMemory"

Field: CreategeometryshaderwithstreamoutputCanthaveonlygaps

+ Renamed to "CreateGeometryShaderWithStreamOutputCannotHaveOnlyGaps"

Field: CreategeometryshaderwithstreamoutputDecltoocomplex

+ Renamed to "CreateGeometryShaderWithStreamOutputDeclTooComplex"

Field: CreategeometryshaderwithstreamoutputExpecteddecl

+ Renamed to "CreateGeometryShaderWithStreamOutputExpectedDecl"

Field: CreategeometryshaderwithstreamoutputInvalidcomponentcount

+ Renamed to "CreateGeometryShaderWithStreamOutputInvalidComponentCount"

Field: CreategeometryshaderwithstreamoutputInvalidgapdefinition

+ Renamed to "CreateGeometryShaderWithStreamOutputInvalidGapDefinition"

Field: CreategeometryshaderwithstreamoutputInvalidnumentries

+ Renamed to "CreateGeometryShaderWithStreamOutputInvalidNumEntries"

Field: CreategeometryshaderwithstreamoutputInvalidoutputslot

+ Renamed to "CreateGeometryShaderWithStreamOutputInvalidOutputSlot"

Field: CreategeometryshaderwithstreamoutputInvalidoutputstreamstride

+ Renamed to "CreateGeometryShaderWithStreamOutputInvalidOutputStreamStride"

Field: CreategeometryshaderwithstreamoutputInvalidshaderbytecode

+ Renamed to "CreateGeometryShaderWithStreamOutputInvalidShaderBytecode"

Field: CreategeometryshaderwithstreamoutputInvalidshadertype

+ Renamed to "CreateGeometryShaderWithStreamOutputInvalidShaderType"

Field: CreategeometryshaderwithstreamoutputInvalidstartcomponentandcomponentcount

+ Renamed to "CreateGeometryShaderWithStreamOutputInvalidStartComponentAndComponentCount"

Field: CreategeometryshaderwithstreamoutputMaskmismatch

+ Renamed to "CreateGeometryShaderWithStreamOutputMaskMismatch"

Field: CreategeometryshaderwithstreamoutputMissingoutputsignature

+ Renamed to "CreateGeometryShaderWithStreamOutputMissingOutputSignature"

Field: CreategeometryshaderwithstreamoutputMissingsemantic

+ Renamed to "CreateGeometryShaderWithStreamOutputMissingSemantic"

Field: CreategeometryshaderwithstreamoutputOnlyoneelementperslot

+ Renamed to "CreateGeometryShaderWithStreamOutputOnlyOneElementPerSlot"

Field: CreategeometryshaderwithstreamoutputOutofmemory

+ Renamed to "CreateGeometryShaderWithStreamOutputOutOfMemory"

Field: CreategeometryshaderwithstreamoutputOutputslot0expected

+ Renamed to "CreateGeometryShaderWithStreamOutputOutputSlot0Expected"

Field: CreategeometryshaderwithstreamoutputOutputstreamstrideunused

+ Renamed to "CreateGeometryShaderWithStreamOutputOutputStreamStrideUnused"

Field: CreategeometryshaderwithstreamoutputRepeatedoutput

+ Renamed to "CreateGeometryShaderWithStreamOutputRepeatedOutput"

Field: CreategeometryshaderwithstreamoutputTrailingDigitInSemantic

+ Renamed to "CreateGeometryShaderWithStreamOutputTrailingDigitInSemantic"

Field: CreategeometryshaderwithstreamoutputUnexpecteddecl

+ Renamed to "CreateGeometryShaderWithStreamOutputUnexpectedDecl"

Field: CreateinputlayoutDuplicatesemantic

+ Renamed to "CreateInputLayoutDuplicateSemantic"

Field: CreateinputlayoutIncompatibleformat

+ Renamed to "CreateInputLayoutIncompatibleFormat"

Field: CreateinputlayoutInvalidalignment

+ Renamed to "CreateInputLayoutInvalidAlignment"

Field: CreateinputlayoutInvalidformat

+ Renamed to "CreateInputLayoutInvalidFormat"

Field: CreateinputlayoutInvalidinputslotclass

+ Renamed to "CreateInputLayoutInvalidInputSlotClass"

Field: CreateinputlayoutInvalidslot

+ Renamed to "CreateInputLayoutInvalidSlot"

Field: CreateinputlayoutInvalidslotclasschange

+ Renamed to "CreateInputLayoutInvalidSlotClassChange"

Field: CreateinputlayoutInvalidstepratechange

+ Renamed to "CreateInputLayoutInvalidStepRateChange"

Field: CreateinputlayoutMissingelement

+ Renamed to "CreateInputLayoutMissingElement"

Field: CreateinputlayoutNulldesc

+ Renamed to "CreateInputLayoutNullDesc"

Field: CreateinputlayoutNullsemantic

+ Renamed to "CreateInputLayoutNullSemantic"

Field: CreateinputlayoutOutofmemory

+ Renamed to "CreateInputLayoutOutOfMemory"

Field: CreateinputlayoutSteprateslotclassmismatch

+ Renamed to "CreateInputLayoutStepRateSlotClassMismatch"

Field: CreateinputlayoutToomanyelements

+ Renamed to "CreateInputLayoutTooManyElements"

Field: CreateinputlayoutTrailingDigitInSemantic

+ Renamed to "CreateInputLayoutTrailingDigitInSemantic"

Field: CreateinputlayoutTypeMismatch

+ Renamed to "CreateInputLayoutTypeMismatch"

Field: CreateinputlayoutUnparseableinputsignature

+ Renamed to "CreateInputLayoutUnparsableInputSignature"

Field: CreatepixelshaderInvalidshaderbytecode

+ Renamed to "CreatePixelShaderInvalidShaderBytecode"

Field: CreatepixelshaderInvalidshadertype

+ Renamed to "CreatePixelShaderInvalidShaderType"

Field: CreatepixelshaderOutofmemory

+ Renamed to "CreatePixelShaderOutOfMemory"

Field: CreatepredicateOutofmemoryReturn

+ Renamed to "CreatePredicateOutOfMemoryReturn"

Field: CreatequeryorpredicateInvalidmiscflags

+ Renamed to "CreateQueryOrPredicateInvalidMiscFlags"

Field: CreatequeryorpredicateInvalidquery

+ Renamed to "CreateQueryOrPredicateInvalidQuery"

Field: CreatequeryorpredicateNulldesc

+ Renamed to "CreateQueryOrPredicateNullDesc"

Field: CreatequeryorpredicateUnexpectedmiscflag

+ Renamed to "CreateQueryOrPredicateUnexpectedMiscFlag"

Field: CreatequeryOutofmemoryReturn

+ Renamed to "CreateQueryOutOfMemoryReturn"

Field: CreaterasterizerstateInvalidcullmode

+ Renamed to "CreateRasterizerStateInvalidCullMode"

Field: CreaterasterizerstateInvaliddepthbiasclamp

+ Renamed to "CreateRasterizerStateInvalidDepthBiasClamp"

Field: CreaterasterizerstateInvalidfillmode

+ Renamed to "CreateRasterizerStateInvalidFillMode"

Field: CreaterasterizerstateInvalidslopescaleddepthbias

+ Renamed to "CreateRasterizerStateInvalidSlopeScaledDepthBias"

Field: CreaterasterizerstateNulldesc

+ Renamed to "CreateRasterizerStateNullDesc"

Field: CreaterasterizerstateToomanyobjects

+ Renamed to "CreateRasterizerStateTooManyObjects"

Field: CreaterendertargetviewInvalidargReturn

+ Renamed to "CreateRenderTargetViewInvalidArgReturn"

Field: CreaterendertargetviewInvaliddesc

+ Renamed to "CreateRenderTargetViewInvalidDesc"

Field: CreaterendertargetviewInvaliddimensions

+ Renamed to "CreateRenderTargetViewInvalidDimensions"

Field: CreaterendertargetviewInvalidformat

+ Renamed to "CreateRenderTargetViewInvalidFormat"

Field: CreaterendertargetviewInvalidresource

+ Renamed to "CreateRenderTargetViewInvalidResource"

Field: CreaterendertargetviewOutofmemoryReturn

+ Renamed to "CreateRenderTargetViewOutOfMemoryReturn"

Field: CreaterendertargetviewToomanyobjects

+ Renamed to "CreateRenderTargetViewTooManyObjects"

Field: CreaterendertargetviewUnrecognizedformat

+ Renamed to "CreateRenderTargetViewUnrecognizedFormat"

Field: CreaterendertargetviewUnsupportedformat

+ Renamed to "CreateRenderTargetViewUnsupportedFormat"

Field: CreatesamplerstateInvalidaddressu

+ Renamed to "CreateSamplerStateInvalidAddressU"

Field: CreatesamplerstateInvalidaddressv

+ Renamed to "CreateSamplerStateInvalidAddressV"

Field: CreatesamplerstateInvalidaddressw

+ Renamed to "CreateSamplerStateInvalidAddressW"

Field: CreatesamplerstateInvalidcomparisonfunc

+ Renamed to "CreateSamplerStateInvalidComparisonFunc"

Field: CreatesamplerstateInvalidfilter

+ Renamed to "CreateSamplerStateInvalidFilter"

Field: CreatesamplerstateInvalidmaxanisotropy

+ Renamed to "CreateSamplerStateInvalidMaxAnisotropy"

Field: CreatesamplerstateInvalidmaxlod

+ Renamed to "CreateSamplerStateInvalidMaxLod"

Field: CreatesamplerstateInvalidminlod

+ Renamed to "CreateSamplerStateInvalidMinLod"

Field: CreatesamplerstateInvalidmiplodbias

+ Renamed to "CreateSamplerStateInvalidMipLodBias"

Field: CreatesamplerstateNulldesc

+ Renamed to "CreateSamplerStateNullDesc"

Field: CreatesamplerstateToomanyobjects

+ Renamed to "CreateSamplerStateTooManyObjects"

Field: CreateshaderresourceviewInvalidargReturn

+ Renamed to "CreateShaderResourceViewInvalidArgReturn"

Field: CreateshaderresourceviewInvaliddesc

+ Renamed to "CreateShaderResourceViewInvalidDesc"

Field: CreateshaderresourceviewInvaliddimensions

+ Renamed to "CreateShaderResourceViewInvalidDimensions"

Field: CreateshaderresourceviewInvalidformat

+ Renamed to "CreateShaderResourceViewInvalidFormat"

Field: CreateshaderresourceviewInvalidresource

+ Renamed to "CreateShaderResourceViewInvalidResource"

Field: CreateshaderresourceviewOutofmemoryReturn

+ Renamed to "CreateShaderResourceViewOutOfMemoryReturn"

Field: CreateshaderresourceviewToomanyobjects

+ Renamed to "CreateShaderResourceViewTooManyObjects"

Field: CreateshaderresourceviewUnrecognizedformat

+ Renamed to "CreateShaderResourceViewUnrecognizedFormat"

Field: Createtexture1dInvalidargReturn

+ Renamed to "CreateTexture1DInvalidArgReturn"

Field: Createtexture1dInvalidbindflags

+ Renamed to "CreateTexture1DInvalidBindFlags"

Field: Createtexture1dInvalidcpuaccessflags

+ Renamed to "CreateTexture1DInvalidCpuAccessFlags"

Field: Createtexture1dInvaliddimensions

+ Renamed to "CreateTexture1DInvalidDimensions"

Field: Createtexture1dInvalidinitialdata

+ Renamed to "CreateTexture1DInvalidInitialData"

Field: Createtexture1dInvalidmiplevels

+ Renamed to "CreateTexture1DInvalidMipLevels"

Field: Createtexture1dInvalidmiscflags

+ Renamed to "CreateTexture1DInvalidMiscFlags"

Field: Createtexture1dInvalidsamples

+ Renamed to "CreateTexture1DInvalidSamples"

Field: Createtexture1dLargeallocation

+ Renamed to "CreateTexture1DLargeAllocation"

Field: Createtexture1dNulldesc

+ Renamed to "CreateTexture1DNullDesc"

Field: Createtexture1dOutofmemoryReturn

+ Renamed to "CreateTexture1DOutOfMemoryReturn"

Field: Createtexture1dUnrecognizedbindflags

+ Renamed to "CreateTexture1DUnrecognizedBindFlags"

Field: Createtexture1dUnrecognizedcpuaccessflags

+ Renamed to "CreateTexture1DUnrecognizedCpuAccessFlags"

Field: Createtexture1dUnrecognizedformat

+ Renamed to "CreateTexture1DUnrecognizedFormat"

Field: Createtexture1dUnrecognizedmiscflags

+ Renamed to "CreateTexture1DUnrecognizedMiscFlags"

Field: Createtexture1dUnrecognizedusage

+ Renamed to "CreateTexture1DUnrecognizedUsage"

Field: Createtexture1dUnsupportedformat

+ Renamed to "CreateTexture1DUnsupportedFormat"

Field: Createtexture2dInvalidargReturn

+ Renamed to "CreateTexture2DInvalidArgReturn"

Field: Createtexture2dInvalidbindflags

+ Renamed to "CreateTexture2DInvalidBindFlags"

Field: Createtexture2dInvalidcpuaccessflags

+ Renamed to "CreateTexture2DInvalidCpuAccessFlags"

Field: Createtexture2dInvaliddimensions

+ Renamed to "CreateTexture2DInvalidDimensions"

Field: Createtexture2dInvalidinitialdata

+ Renamed to "CreateTexture2DInvalidInitialData"

Field: Createtexture2dInvalidmiplevels

+ Renamed to "CreateTexture2DInvalidMipLevels"

Field: Createtexture2dInvalidmiscflags

+ Renamed to "CreateTexture2DInvalidMiscFlags"

Field: Createtexture2dInvalidsamples

+ Renamed to "CreateTexture2DInvalidSamples"

Field: Createtexture2dLargeallocation

+ Renamed to "CreateTexture2DLargeAllocation"

Field: Createtexture2dNulldesc

+ Renamed to "CreateTexture2DNullDesc"

Field: Createtexture2dOutofmemoryReturn

+ Renamed to "CreateTexture2DOutOfMemoryReturn"

Field: Createtexture2dUnrecognizedbindflags

+ Renamed to "CreateTexture2DUnrecognizedBindFlags"

Field: Createtexture2dUnrecognizedcpuaccessflags

+ Renamed to "CreateTexture2DUnrecognizedCpuAccessFlags"

Field: Createtexture2dUnrecognizedformat

+ Renamed to "CreateTexture2DUnrecognizedFormat"

Field: Createtexture2dUnrecognizedmiscflags

+ Renamed to "CreateTexture2DUnrecognizedMiscFlags"

Field: Createtexture2dUnrecognizedusage

+ Renamed to "CreateTexture2DUnrecognizedUsage"

Field: Createtexture2dUnsupportedformat

+ Renamed to "CreateTexture2DUnsupportedFormat"

Field: Createtexture3dInvalidargReturn

+ Renamed to "CreateTexture3DInvalidArgReturn"

Field: Createtexture3dInvalidbindflags

+ Renamed to "CreateTexture3DInvalidBindFlags"

Field: Createtexture3dInvalidcpuaccessflags

+ Renamed to "CreateTexture3DInvalidCpuAccessFlags"

Field: Createtexture3dInvaliddimensions

+ Renamed to "CreateTexture3DInvalidDimensions"

Field: Createtexture3dInvalidinitialdata

+ Renamed to "CreateTexture3DInvalidInitialData"

Field: Createtexture3dInvalidmiplevels

+ Renamed to "CreateTexture3DInvalidMipLevels"

Field: Createtexture3dInvalidmiscflags

+ Renamed to "CreateTexture3DInvalidMiscFlags"

Field: Createtexture3dInvalidsamples

+ Renamed to "CreateTexture3DInvalidSamples"

Field: Createtexture3dLargeallocation

+ Renamed to "CreateTexture3DLargeAllocation"

Field: Createtexture3dNulldesc

+ Renamed to "CreateTexture3DNullDesc"

Field: Createtexture3dOutofmemoryReturn

+ Renamed to "CreateTexture3DOutOfMemoryReturn"

Field: Createtexture3dUnrecognizedbindflags

+ Renamed to "CreateTexture3DUnrecognizedBindFlags"

Field: Createtexture3dUnrecognizedcpuaccessflags

+ Renamed to "CreateTexture3DUnrecognizedCpuAccessFlags"

Field: Createtexture3dUnrecognizedformat

+ Renamed to "CreateTexture3DUnrecognizedFormat"

Field: Createtexture3dUnrecognizedmiscflags

+ Renamed to "CreateTexture3DUnrecognizedMiscFlags"

Field: Createtexture3dUnrecognizedusage

+ Renamed to "CreateTexture3DUnrecognizedUsage"

Field: Createtexture3dUnsupportedformat

+ Renamed to "CreateTexture3DUnsupportedFormat"

Field: CreatevertexshaderInvalidshaderbytecode

+ Renamed to "CreateVertexShaderInvalidShaderBytecode"

Field: CreatevertexshaderInvalidshadertype

+ Renamed to "CreateVertexShaderInvalidShaderType"

Field: CreatevertexshaderOutofmemory

+ Renamed to "CreateVertexShaderOutOfMemory"

Field: DeviceDrawGsInputPrimitiveMismatch

+ Renamed to "DeviceDrawGSInputPrimitiveMismatch"

Field: DeviceDrawindexedIndexposOverflow

+ Renamed to "DeviceDrawIndexedIndexPosOverflow"

Field: DeviceDrawindexedinstancedIndexposOverflow

+ Renamed to "DeviceDrawIndexedInstancedIndexPosOverflow"

Field: DeviceDrawindexedinstancedInstanceposOverflow

+ Renamed to "DeviceDrawIndexedInstancedInstancePosOverflow"

Field: DeviceDrawInputlayoutNotSet

+ Renamed to "DeviceDrawInputLayoutNotSet"

Field: DeviceDrawinstancedInstanceposOverflow

+ Renamed to "DeviceDrawInstancedInstancePosOverflow"

Field: DeviceDrawinstancedVertexposOverflow

+ Renamed to "DeviceDrawInstancedVertexPosOverflow"

Field: DeviceDrawInvalidPrimitivetopology

+ Renamed to "DeviceDrawInvalidPrimitiveTopology"

Field: DeviceDrawOmDualSourceBlendingCanOnlyHaveRenderTarget_0

+ Renamed to "DeviceDrawOMDualSourceBlendingCanOnlyHaveRenderTargetZero"

Field: DeviceDrawOmRenderTargetDoesNotSupportBlending

+ Renamed to "DeviceDrawOMRenderTargetDoesNotSupportBlending"

Field: DeviceDrawPsOutputTypeMismatch

+ Renamed to "DeviceDrawPSOutputTypeMismatch"

Field: DeviceDrawResourceFormatLdUnsupported

+ Renamed to "DeviceDrawResourceFormatLDUnsupported"

Field: DeviceDrawShaderresourceviewNotSet

+ Renamed to "DeviceDrawShaderResourceViewNotSet"

Field: DeviceDrawVertexposOverflow

+ Renamed to "DeviceDrawVertexPosOverflow"

Field: DeviceGeneratemipsResourceInvalid

+ Renamed to "DeviceGenerateMipsResourceInvalid"

Field: DeviceGsgetconstantbuffersBuffersEmpty

+ Renamed to "DeviceGSGetConstantBuffersBuffersEmpty"

Field: DeviceGsgetsamplersSamplersEmpty

+ Renamed to "DeviceGSGetSamplersSamplersEmpty"

Field: DeviceGsgetshaderresourcesViewsEmpty

+ Renamed to "DeviceGSGetShaderResourcesViewsEmpty"

Field: DeviceGssetconstantbuffersBuffersEmpty

+ Renamed to "DeviceGSSetConstantBuffersBuffersEmpty"

Field: DeviceGssetconstantbuffersHazard

+ Renamed to "DeviceGSSetConstantBuffersHazard"

Field: DeviceGssetsamplersSamplersEmpty

+ Renamed to "DeviceGSSetSamplersSamplersEmpty"

Field: DeviceGssetshaderresourcesHazard

+ Renamed to "DeviceGSSetShaderResourcesHazard"

Field: DeviceGssetshaderresourcesViewsEmpty

+ Renamed to "DeviceGSSetShaderResourcesViewsEmpty"

Field: DeviceIagetvertexbuffersBuffersEmpty

+ Renamed to "DeviceIAGetVertexBuffersBuffersEmpty"

Field: DeviceIasetindexbufferFormatInvalid

+ Renamed to "DeviceIASetIndexBufferFormatInvalid"

Field: DeviceIasetindexbufferHazard

+ Renamed to "DeviceIASetIndexBufferHazard"

Field: DeviceIasetindexbufferOffsetTooLarge

+ Renamed to "DeviceIASetIndexBufferOffsetTooLarge"

Field: DeviceIasetindexbufferOffsetUnaligned

+ Renamed to "DeviceIASetIndexBufferOffsetUnaligned"

Field: DeviceIasetprimitivetopologyTopologyUndefined

+ Renamed to "DeviceIASetPrimitiveTopologyTopologyUndefined"

Field: DeviceIasetprimitivetopologyTopologyUnrecognized

+ Renamed to "DeviceIASetPrimitiveTopologyTopologyUnrecognized"

Field: DeviceIasetvertexbuffersBuffersEmpty

+ Renamed to "DeviceIASetVertexBuffersBuffersEmpty"

Field: DeviceIasetvertexbuffersHazard

+ Renamed to "DeviceIASetVertexBuffersHazard"

Field: DeviceIasetvertexbuffersOffsetTooLarge

+ Renamed to "DeviceIASetVertexBuffersOffsetTooLarge"

Field: DeviceOmsetrendertargetsHazard

+ Renamed to "DeviceOMSetRenderTargetsHazard"

Field: DeviceOpenSharedResourceBadinterfaceReturn

+ Renamed to "DeviceOpenSharedResourceBadInterfaceReturn"

Field: DeviceOpenSharedResourceInvalidargReturn

+ Renamed to "DeviceOpenSharedResourceInvalidArgReturn"

Field: DeviceOpenSharedResourceOutofmemoryReturn

+ Renamed to "DeviceOpenSharedResourceOutOfMemoryReturn"

Field: DevicePsgetconstantbuffersBuffersEmpty

+ Renamed to "DevicePSGetConstantBuffersBuffersEmpty"

Field: DevicePsgetsamplersSamplersEmpty

+ Renamed to "DevicePSGetSamplersSamplersEmpty"

Field: DevicePsgetshaderresourcesViewsEmpty

+ Renamed to "DevicePSGetShaderResourcesViewsEmpty"

Field: DevicePssetconstantbuffersBuffersEmpty

+ Renamed to "DevicePSSetConstantBuffersBuffersEmpty"

Field: DevicePssetconstantbuffersHazard

+ Renamed to "DevicePSSetConstantBuffersHazard"

Field: DevicePssetsamplersSamplersEmpty

+ Renamed to "DevicePSSetSamplersSamplersEmpty"

Field: DevicePssetshaderresourcesHazard

+ Renamed to "DevicePSSetShaderResourcesHazard"

Field: DevicePssetshaderresourcesViewsEmpty

+ Renamed to "DevicePSSetShaderResourcesViewsEmpty"

Field: DeviceResolvesubresourceDestinationInvalid

+ Renamed to "DeviceResolveSubresourceDestinationInvalid"

Field: DeviceResolvesubresourceDestinationSubresourceInvalid

+ Renamed to "DeviceResolveSubresourceDestinationSubresourceInvalid"

Field: DeviceResolvesubresourceFormatInvalid

+ Renamed to "DeviceResolveSubresourceFormatInvalid"

Field: DeviceResolvesubresourceSourceInvalid

+ Renamed to "DeviceResolveSubresourceSourceInvalid"

Field: DeviceResolvesubresourceSourceSubresourceInvalid

+ Renamed to "DeviceResolveSubresourceSourceSubresourceInvalid"

Field: DeviceRsgetscissorrectsRectsEmpty

+ Renamed to "DeviceRSGetScissorRectsRectsEmpty"

Field: DeviceRsgetviewportsViewportsEmpty

+ Renamed to "DeviceRSGetViewportsViewportsEmpty"

Field: DeviceRssetscissorrectsInvalidscissor

+ Renamed to "DeviceRSSetScissorRectsInvalidScissor"

Field: DeviceRssetviewportsDenormflush

+ Renamed to "DeviceRSSetViewportsDenormFlush"

Field: DeviceRssetviewportsInvalidviewport

+ Renamed to "DeviceRSSetViewportsInvalidViewport"

Field: DeviceSettextfiltersizeInvaliddimensions

+ Renamed to "DeviceSetTextFilterSizeInvalidDimensions"

Field: DeviceShaderLinkageComponenttype

+ Renamed to "DeviceShaderLinkageComponentType"

Field: DeviceShaderLinkageNeverwrittenAlwaysreads

+ Renamed to "DeviceShaderLinkageNeverWrittenAlwaysReads"

Field: DeviceShaderLinkageRegisterindex

+ Renamed to "DeviceShaderLinkageRegisterIndex"

Field: DeviceShaderLinkageRegistermask

+ Renamed to "DeviceShaderLinkageRegisterMask"

Field: DeviceShaderLinkageSemanticnameNotFound

+ Renamed to "DeviceShaderLinkageSemanticNameNotFound"

Field: DeviceShaderLinkageSystemvalue

+ Renamed to "DeviceShaderLinkageSystemValue"

Field: DeviceSogettargetsBuffersEmpty

+ Renamed to "DeviceSoGetTargetsBuffersEmpty"

Field: DeviceSosettargetsHazard

+ Renamed to "DeviceSOSetTargetsHazard"

Field: DeviceSosettargetsOffsetUnaligned

+ Renamed to "DeviceSoSetTargetsOffsetUnaligned"

Field: DeviceVsgetconstantbuffersBuffersEmpty

+ Renamed to "DeviceVSGetConstantBuffersBuffersEmpty"

Field: DeviceVsgetsamplersSamplersEmpty

+ Renamed to "DeviceVSGetSamplersSamplersEmpty"

Field: DeviceVsgetshaderresourcesViewsEmpty

+ Renamed to "DeviceVSGetShaderResourcesViewsEmpty"

Field: DeviceVssetconstantbuffersBuffersEmpty

+ Renamed to "DeviceVSSetConstantBuffersBuffersEmpty"

Field: DeviceVssetconstantbuffersHazard

+ Renamed to "DeviceVSSetConstantBuffersHazard"

Field: DeviceVssetsamplersSamplersEmpty

+ Renamed to "DeviceVSSetSamplersSamplersEmpty"

Field: DeviceVssetshaderresourcesHazard

+ Renamed to "DeviceVSSetShaderResourcesHazard"

Field: DeviceVssetshaderresourcesViewsEmpty

+ Renamed to "DeviceVSSetShaderResourcesViewsEmpty"

Field: GetprivatedataMoredata

+ Renamed to "GetPrivateDataMoreData"

Field: GssetconstantbuffersInvalidbuffer

+ Renamed to "GSSetConstantBuffersInvalidBuffer"

Field: GssetconstantbuffersUnbinddeletingobject

+ Renamed to "GSSetConstantBuffersUnbindDeletingObject"

Field: GssetsamplersUnbinddeletingobject

+ Renamed to "GSSetSamplersUnbindDeletingObject"

Field: GssetshaderresourcesUnbinddeletingobject

+ Renamed to "GSSetShaderResourcesUnbindDeletingObject"

Field: GssetshaderUnbinddeletingobject

+ Renamed to "GSSetShaderUnbindDeletingObject"

Field: IasetindexbufferInvalidbuffer

+ Renamed to "IASetIndexBufferInvalidBuffer"

Field: IasetindexbufferUnbinddeletingobject

+ Renamed to "IASetIndexBufferUnbindDeletingObject"

Field: IasetinputlayoutUnbinddeletingobject

+ Renamed to "IASetInputLayoutUnbindDeletingObject"

Field: IasetvertexbuffersInvalidbuffer

+ Renamed to "IASetVertexBuffersInvalidBuffer"

Field: IasetvertexbuffersUnbinddeletingobject

+ Renamed to "IASetVertexBuffersUnbindDeletingObject"

Field: MessageReportingOutofmemory

+ Renamed to "MessageReportingOutOfMemory"

Field: OmsetblendstateUnbinddeletingobject

+ Renamed to "OMSetBlendStateUnbindDeletingObject"

Field: OmsetdepthstencilstateUnbinddeletingobject

+ Renamed to "OMSetDepthStencilStateUnbindDeletingObject"

Field: OmsetrendertargetsInvalidview

+ Renamed to "OMSetRenderTargetsInvalidView"

Field: OmsetrendertargetsUnbinddeletingobject

+ Renamed to "OMSetRenderTargetsUnbindDeletingObject"

Field: PssetconstantbuffersInvalidbuffer

+ Renamed to "PSSetConstantBuffersInvalidBuffer"

Field: PssetconstantbuffersUnbinddeletingobject

+ Renamed to "PSSetConstantBuffersUnbindDeletingObject"

Field: PssetsamplersUnbinddeletingobject

+ Renamed to "PSSetSamplersUnbindDeletingObject"

Field: PssetshaderresourcesUnbinddeletingobject

+ Renamed to "PSSetShaderResourcesUnbindDeletingObject"

Field: PssetshaderUnbinddeletingobject

+ Renamed to "PSSetShaderUnbindDeletingObject"

Field: QueryGetdataInvalidCall

+ Renamed to "QueryGetDataInvalidCall"

Field: QueryGetdataInvalidDatasize

+ Renamed to "QueryGetDataInvalidDataSize"

Field: QueryGetdataInvalidFlags

+ Renamed to "QueryGetDataInvalidFlags"

Field: RefKmdriverException

+ Renamed to "RefKernelModeDriverException"

Field: RefUmdriverException

+ Renamed to "RefUserModeDriverException"

Field: RssetstateUnbinddeletingobject

+ Renamed to "RSSetStateUnbindDeletingObject"

Field: SetexceptionmodeDeviceremovedReturn

+ Renamed to "SetExceptionModeDeviceRemovedReturn"

Field: SetexceptionmodeInvalidargReturn

+ Renamed to "SetExceptionModeInvalidArgReturn"

Field: SetexceptionmodeUnrecognizedflags

+ Renamed to "SetExceptionModeUnrecognizedFlags"

Field: SetpredicationInvalidPredicateState

+ Renamed to "SetPredicationInvalidPredicateState"

Field: SetpredicationUnbinddeletingobject

+ Renamed to "SetPredicationUnbindDeletingObject"

Field: SetprivatedataChangingparams

+ Renamed to "SetPrivateDataChangingParams"

Field: SetprivatedataInvalidflags

+ Renamed to "SetPrivateDataInvalidFlags"

Field: SetprivatedataInvalidfreedata

+ Renamed to "SetPrivateDataInvalidFreeData"

Field: SetprivatedataInvalidiunknown

+ Renamed to "SetPrivateDataInvalidIUnknown"

Field: SetprivatedataOutofmemory

+ Renamed to "SetPrivateDataOutOfMemory"

Field: ShaderresourceviewGetdescLegacy

+ Renamed to "ShaderResourceViewGetDescLegacy"

Field: SosettargetsInvalidbuffer

+ Renamed to "SoSetTargetsInvalidBuffer"

Field: SosettargetsUnbinddeletingobject

+ Renamed to "SOSetTargetsUnbindDeletingObject"

Field: Texture1dMapAlreadymapped

+ Renamed to "Texture1DMapAlreadyMapped"

Field: Texture1dMapDeviceremovedReturn

+ Renamed to "Texture1DMapDeviceRemovedReturn"

Field: Texture1dMapInvalidflags

+ Renamed to "Texture1DMapInvalidFlags"

Field: Texture1dMapInvalidmaptype

+ Renamed to "Texture1DMapInvalidMapType"

Field: Texture1dMapInvalidsubresource

+ Renamed to "Texture1DMapInvalidSubresource"

Field: Texture1dUnmapInvalidsubresource

+ Renamed to "Texture1DUnmapInvalidSubresource"

Field: Texture1dUnmapNotmapped

+ Renamed to "Texture1DUnmapNotMapped"

Field: Texture2dMapAlreadymapped

+ Renamed to "Texture2DMapAlreadyMapped"

Field: Texture2dMapDeviceremovedReturn

+ Renamed to "Texture2DMapDeviceRemovedReturn"

Field: Texture2dMapInvalidflags

+ Renamed to "Texture2DMapInvalidFlags"

Field: Texture2dMapInvalidmaptype

+ Renamed to "Texture2DMapInvalidMapType"

Field: Texture2dMapInvalidsubresource

+ Renamed to "Texture2DMapInvalidSubresource"

Field: Texture2dUnmapInvalidsubresource

+ Renamed to "Texture2DUnmapInvalidSubresource"

Field: Texture2dUnmapNotmapped

+ Renamed to "Texture2DUnmapNotMapped"

Field: Texture3dMapAlreadymapped

+ Renamed to "Texture3DMapAlreadyMapped"

Field: Texture3dMapDeviceremovedReturn

+ Renamed to "Texture3DMapDeviceRemovedReturn"

Field: Texture3dMapInvalidflags

+ Renamed to "Texture3DMapInvalidFlags"

Field: Texture3dMapInvalidmaptype

+ Renamed to "Texture3DMapInvalidMapType"

Field: Texture3dMapInvalidsubresource

+ Renamed to "Texture3DMapInvalidSubresource"

Field: Texture3dUnmapInvalidsubresource

+ Renamed to "Texture3DUnmapInvalidSubresource"

Field: Texture3dUnmapNotmapped

+ Renamed to "Texture3DUnmapNotMapped"

Field: UpdatesubresourceInvaliddestinationbox

+ Renamed to "UpdateSubresourceInvalidDestinationBox"

Field: UpdatesubresourceInvaliddestinationstate

+ Renamed to "UpdateSubresourceInvalidDestinationState"

Field: UpdatesubresourceInvaliddestinationsubresource

+ Renamed to "UpdateSubresourceInvalidDestinationSubresource"

Field: VssetconstantbuffersInvalidbuffer

+ Renamed to "VSSetConstantBuffersInvalidBuffer"

Field: VssetconstantbuffersUnbinddeletingobject

+ Renamed to "VSSetConstantBuffersUnbindDeletingObject"

Field: VssetsamplersUnbinddeletingobject

+ Renamed to "VSSetSamplersUnbindDeletingObject"

Field: VssetshaderresourcesUnbinddeletingobject

+ Renamed to "VSSetShaderResourcesUnbindDeletingObject"

Field: VssetshaderUnbinddeletingobject

+ Renamed to "VSSetShaderUnbindDeletingObject"

Class: OutputMergerPipelineStage

Removed methods: + GetBlendState(Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgba&, System.UInt32&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BlendState, GetDepthStencilState(System.UInt32&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilState, GetDepthStencilView() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilView, GetRenderTargets(System.UInt32) : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RenderTargetView>, GetRenderTargets(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilView&) : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RenderTargetView>, SetBlendState(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BlendState, Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgba, System.UInt32) : System.Void, SetDepthStencilState(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilState, System.UInt32) : System.Void, SetRenderTargets(System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RenderTargetView>) : System.Void, SetRenderTargets(System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RenderTargetView>, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilView) : System.Void
Added methods: + GetDepthStencilStateAndReferenceValue(System.UInt32&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilState, SetDepthStencilStateAndReferenceValue(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilState, System.UInt32) : System.Void
Added properties: + BlendState : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.OutputMergerBlendState, DepthStencilView : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.DepthStencilView, RenderTargets : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.OutputMergerRenderTargets

Struct: PassDescription

Field: Annotations : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Annotations() : System.UInt32, set_Annotations(System.UInt32) : System.Void

Property: BlendFactor : System.Single[]

Method: get_BlendFactor() : System.Single[]

+ Signature changed to "() : System.Collections.ObjectModel.ReadOnlyCollection<System.Single>"

Field: InputAssemblerInputSignature : System.IntPtr

+ Kind changed to "Property"
Added methods: + get_InputAssemblerInputSignature() : System.IntPtr, set_InputAssemblerInputSignature(System.IntPtr) : System.Void

Field: InputAssemblerInputSignatureSize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_InputAssemblerInputSignatureSize() : System.UInt32, set_InputAssemblerInputSignatureSize(System.UInt32) : System.Void

Field: Name : System.String

+ Kind changed to "Property"
Added methods: + get_Name() : System.String, set_Name(System.String) : System.Void

Field: SampleMask : System.UInt32

+ Kind changed to "Property"
Added methods: + get_SampleMask() : System.UInt32, set_SampleMask(System.UInt32) : System.Void

Field: StencilRef : System.UInt32

+ Kind changed to "Property"
Added methods: + get_StencilRef() : System.UInt32, set_StencilRef(System.UInt32) : System.Void

Struct: PassShaderDescription

Field: ShaderIndex : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ShaderIndex() : System.UInt32, set_ShaderIndex(System.UInt32) : System.Void

Field: ShaderVariable : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectShaderVariable

+ Kind changed to "Property"
Added methods: + get_ShaderVariable() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectShaderVariable, set_ShaderVariable(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.EffectShaderVariable) : System.Void

Class: PixelShaderPipelineStage

Removed methods: + GetShader() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.PixelShader, SetShader(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.PixelShader) : System.Void
Added properties: + Shader : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.PixelShader

Enum: Primitive

Field: LineAdj

+ Renamed to "LineAdjacency"

Field: TriangleAdj

+ Renamed to "TriangleAdjacency"

Enum: PrimitiveTopology

Field: LineListAdj

+ Renamed to "LineListAdjacency"

Field: LineStripAdj

+ Renamed to "LineStripAdjacency"

Field: TriangleListAdj

+ Renamed to "TriangleListAdjacency"

Field: TriangleStripAdj

+ Renamed to "TriangleStripAdjacency"

Enum: Query

Field: StreamOuputOverflowPredicate

+ Renamed to "StreamOutputOverflowPredicate"

Field: StreamOuputStatistics

+ Renamed to "StreamOutputStatistics"

Struct: QueryDataPipelineStatistics

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.QueryDataPipelineStatistics, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.QueryDataPipelineStatistics) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.QueryDataPipelineStatistics, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.QueryDataPipelineStatistics) : System.Boolean

Field: CInvocations : System.UInt64

+ Kind changed to "Property"
Added methods: + get_CInvocations() : System.UInt64, set_CInvocations(System.UInt64) : System.Void

Field: CPrimitives : System.UInt64

+ Kind changed to "Property"
Added methods: + get_CPrimitives() : System.UInt64, set_CPrimitives(System.UInt64) : System.Void

Field: GeometryShaderInvocations : System.UInt64

+ Kind changed to "Property"
Added methods: + get_GeometryShaderInvocations() : System.UInt64, set_GeometryShaderInvocations(System.UInt64) : System.Void

Field: GeometryShaderPrimitives : System.UInt64

+ Kind changed to "Property"
Added methods: + get_GeometryShaderPrimitives() : System.UInt64, set_GeometryShaderPrimitives(System.UInt64) : System.Void

Field: InputAssemblerPrimitives : System.UInt64

+ Kind changed to "Property"
Added methods: + get_InputAssemblerPrimitives() : System.UInt64, set_InputAssemblerPrimitives(System.UInt64) : System.Void

Field: InputAssemblerVertices : System.UInt64

+ Kind changed to "Property"
Added methods: + get_InputAssemblerVertices() : System.UInt64, set_InputAssemblerVertices(System.UInt64) : System.Void

Field: PixelShaderInvocations : System.UInt64

+ Kind changed to "Property"
Added methods: + get_PixelShaderInvocations() : System.UInt64, set_PixelShaderInvocations(System.UInt64) : System.Void

Field: VertexShaderInvocations : System.UInt64

+ Kind changed to "Property"
Added methods: + get_VertexShaderInvocations() : System.UInt64, set_VertexShaderInvocations(System.UInt64) : System.Void

Struct: QueryDataStreamOuputStatistics

+ Renamed to "QueryDataStreamOutputStatistics"
Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.QueryDataStreamOutputStatistics, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.QueryDataStreamOutputStatistics) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.QueryDataStreamOutputStatistics, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.QueryDataStreamOutputStatistics) : System.Boolean

Field: NumPrimitivesWritten : System.UInt64

+ Renamed to "PrimitiveWrittenCount"
+ Kind changed to "Property"
Added methods: + get_PrimitiveWrittenCount() : System.UInt64, set_PrimitiveWrittenCount(System.UInt64) : System.Void

Field: PrimitivesStorageNeeded : System.UInt64

+ Kind changed to "Property"
Added methods: + get_PrimitivesStorageNeeded() : System.UInt64, set_PrimitivesStorageNeeded(System.UInt64) : System.Void

Struct: QueryDataTimestampDisjoint

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.QueryDataTimestampDisjoint, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.QueryDataTimestampDisjoint) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.QueryDataTimestampDisjoint, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.QueryDataTimestampDisjoint) : System.Boolean

Field: Disjoint : System.Boolean

+ Kind changed to "Property"
Added methods: + get_Disjoint() : System.Boolean, set_Disjoint(System.Boolean) : System.Void

Field: Frequency : System.UInt64

+ Kind changed to "Property"
Added methods: + get_Frequency() : System.UInt64, set_Frequency(System.UInt64) : System.Void

Struct: QueryDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.QueryDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.QueryDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.QueryDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.QueryDescription) : System.Boolean

Field: MiscFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.QueryMiscFlag

+ Renamed to "MiscellaneousQueryOptions"
+ Kind changed to "Property"
Added methods: + get_MiscellaneousQueryOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MiscellaneousQueryOptions, set_MiscellaneousQueryOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MiscellaneousQueryOptions) : System.Void

Field: Query : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Query

+ Kind changed to "Property"
Added methods: + get_Query() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Query, set_Query(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Query) : System.Void

Enum: QueryMiscFlag

+ Renamed to "ExceptionErrors"

Field: PredicateHint

+ Renamed to "DriverInternalError"

Enum: RaiseFlag

+ Renamed to "MiscellaneousQueryOptions"

Field: DriverInternalError

+ Renamed to "PredicateHint"

Struct: RasterizerDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RasterizerDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RasterizerDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RasterizerDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RasterizerDescription) : System.Boolean

Field: AntialiasedLineEnable : System.Boolean

+ Renamed to "AntiAliasedLineEnable"
+ Kind changed to "Property"
Added methods: + get_AntiAliasedLineEnable() : System.Boolean, set_AntiAliasedLineEnable(System.Boolean) : System.Void

Field: CullMode : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CullMode

+ Kind changed to "Property"
Added methods: + get_CullMode() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CullMode, set_CullMode(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CullMode) : System.Void

Field: DepthBias : System.Int32

+ Kind changed to "Property"
Added methods: + get_DepthBias() : System.Int32, set_DepthBias(System.Int32) : System.Void

Field: DepthBiasClamp : System.Single

+ Kind changed to "Property"
Added methods: + get_DepthBiasClamp() : System.Single, set_DepthBiasClamp(System.Single) : System.Void

Field: DepthClipEnable : System.Boolean

+ Kind changed to "Property"
Added methods: + get_DepthClipEnable() : System.Boolean, set_DepthClipEnable(System.Boolean) : System.Void

Field: FillMode : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.FillMode

+ Kind changed to "Property"
Added methods: + get_FillMode() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.FillMode, set_FillMode(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.FillMode) : System.Void

Field: FrontCounterClockwise : System.Boolean

+ Renamed to "FrontCounterclockwise"
+ Kind changed to "Property"
Added methods: + get_FrontCounterclockwise() : System.Boolean, set_FrontCounterclockwise(System.Boolean) : System.Void

Field: MultisampleEnable : System.Boolean

+ Kind changed to "Property"
Added methods: + get_MultisampleEnable() : System.Boolean, set_MultisampleEnable(System.Boolean) : System.Void

Field: ScissorEnable : System.Boolean

+ Kind changed to "Property"
Added methods: + get_ScissorEnable() : System.Boolean, set_ScissorEnable(System.Boolean) : System.Void

Field: SlopeScaledDepthBias : System.Single

+ Kind changed to "Property"
Added methods: + get_SlopeScaledDepthBias() : System.Single, set_SlopeScaledDepthBias(System.Single) : System.Void

Class: RasterizerPipelineStage

Removed methods: + GetScissorRects(System.UInt32) : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3dRect>, GetState() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RasterizerState, GetViewports(System.UInt32) : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Viewport>, SetScissorRects(System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3dRect>) : System.Void, SetState(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RasterizerState) : System.Void, SetViewports(System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Viewport>) : System.Void
Added methods: + BoundedGetScissorRects(System.UInt32) : System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3DRect>, BoundedGetViewports(System.UInt32) : System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Viewport>
Added properties: + ScissorRects : System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3DRect>, State : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RasterizerState, Viewports : System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Viewport>

Enum: RegisterComponentType

Field: Sint32

+ Renamed to "SInt32"

Field: Uint32

+ Renamed to "UInt32"

Struct: RenderTargetBlendDescription1

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RenderTargetBlendDescription1, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RenderTargetBlendDescription1) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RenderTargetBlendDescription1, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RenderTargetBlendDescription1) : System.Boolean

Field: BlendEnable : System.Boolean

+ Kind changed to "Property"
Added methods: + get_BlendEnable() : System.Boolean, set_BlendEnable(System.Boolean) : System.Void

Field: BlendOperation : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BlendOperation

+ Kind changed to "Property"
Added methods: + get_BlendOperation() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BlendOperation, set_BlendOperation(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BlendOperation) : System.Void

Field: BlendOperationAlpha : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BlendOperation

+ Kind changed to "Property"
Added methods: + get_BlendOperationAlpha() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BlendOperation, set_BlendOperationAlpha(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BlendOperation) : System.Void

Field: DestinationBlend : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend

+ Kind changed to "Property"
Added methods: + get_DestinationBlend() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend, set_DestinationBlend(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend) : System.Void

Field: DestinationBlendAlpha : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend

+ Kind changed to "Property"
Added methods: + get_DestinationBlendAlpha() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend, set_DestinationBlendAlpha(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend) : System.Void

Field: RenderTargetWriteMask : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ColorWriteEnable

+ Kind changed to "Property"
Added methods: + get_RenderTargetWriteMask() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ColorWriteEnableComponents, set_RenderTargetWriteMask(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ColorWriteEnableComponents) : System.Void

Field: SourceBlend : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend

+ Kind changed to "Property"
Added methods: + get_SourceBlend() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend, set_SourceBlend(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend) : System.Void

Field: SourceBlendAlpha : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend

+ Kind changed to "Property"
Added methods: + get_SourceBlendAlpha() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend, set_SourceBlendAlpha(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Blend) : System.Void

Struct: RenderTargetViewDescription

Field: Buffer : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferRenderTargetView

+ Kind changed to "Property"
Added methods: + get_Buffer() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferRenderTargetView, set_Buffer(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferRenderTargetView) : System.Void

Field: Format : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_Format() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_Format(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: Texture1D : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DRenderTargetView

+ Kind changed to "Property"
Added methods: + get_Texture1D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DRenderTargetView, set_Texture1D(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DRenderTargetView) : System.Void

Field: Texture1DArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayRenderTargetView

+ Kind changed to "Property"
Added methods: + get_Texture1DArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayRenderTargetView, set_Texture1DArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayRenderTargetView) : System.Void

Field: Texture2D : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DRenderTargetView

+ Kind changed to "Property"
Added methods: + get_Texture2D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DRenderTargetView, set_Texture2D(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DRenderTargetView) : System.Void

Field: Texture2DArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayRenderTargetView

+ Kind changed to "Property"
Added methods: + get_Texture2DArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayRenderTargetView, set_Texture2DArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayRenderTargetView) : System.Void

Field: Texture2DMultiSample : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultiSampleRenderTargetView

+ Renamed to "Texture2DMultisample"
+ Kind changed to "Property"
Added methods: + get_Texture2DMultisample() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleRenderTargetView, set_Texture2DMultisample(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleRenderTargetView) : System.Void

Field: Texture2DMultiSampleArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultiSampleArrayRenderTargetView

+ Renamed to "Texture2DMultisampleArray"
+ Kind changed to "Property"
Added methods: + get_Texture2DMultisampleArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayRenderTargetView, set_Texture2DMultisampleArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayRenderTargetView) : System.Void

Field: Texture3D : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DRenderTargetView

+ Kind changed to "Property"
Added methods: + get_Texture3D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DRenderTargetView, set_Texture3D(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DRenderTargetView) : System.Void

Field: ViewDimension : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RenderTargetViewDimension

+ Kind changed to "Property"
Added methods: + get_ViewDimension() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RenderTargetViewDimension, set_ViewDimension(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RenderTargetViewDimension) : System.Void

Enum: RenderTargetViewDimension

Field: Texture2DMultiSample

+ Renamed to "Texture2DMultisample"

Field: Texture2DMultiSampleArray

+ Renamed to "Texture2DMultisampleArray"

Enum: ResourceMiscFlag

+ Renamed to "MiscellaneousResourceOptions"

Field: Undefined

+ Renamed to "None"

Enum: ResourceReturnType

Field: Sint

+ Renamed to "SInt"

Field: Snorm

+ Renamed to "SNorm"

Field: Uint

+ Renamed to "UInt"

Field: Unorm

+ Renamed to "UNorm"

Struct: SamplerDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.SamplerDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.SamplerDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.SamplerDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.SamplerDescription) : System.Boolean

Field: AddressU : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureAddressMode

+ Kind changed to "Property"
Added methods: + get_AddressU() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureAddressMode, set_AddressU(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureAddressMode) : System.Void

Field: AddressV : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureAddressMode

+ Kind changed to "Property"
Added methods: + get_AddressV() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureAddressMode, set_AddressV(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureAddressMode) : System.Void

Field: AddressW : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureAddressMode

+ Kind changed to "Property"
Added methods: + get_AddressW() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureAddressMode, set_AddressW(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureAddressMode) : System.Void

Field: BorderColor : Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgba

+ Kind changed to "Property"
Added methods: + get_BorderColor() : Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgba, set_BorderColor(Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgba) : System.Void

Field: ComparisonFunction : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ComparisonFunction

+ Kind changed to "Property"
Added methods: + get_ComparisonFunction() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ComparisonFunction, set_ComparisonFunction(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ComparisonFunction) : System.Void

Field: Filter : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Filter

+ Kind changed to "Property"
Added methods: + get_Filter() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Filter, set_Filter(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Filter) : System.Void

Field: MaxAnisotropy : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MaxAnisotropy() : System.UInt32, set_MaxAnisotropy(System.UInt32) : System.Void

Field: MaxLOD : System.Single

+ Renamed to "MaximumLevelOfDetail"
+ Kind changed to "Property"
Added methods: + get_MaximumLevelOfDetail() : System.Single, set_MaximumLevelOfDetail(System.Single) : System.Void

Field: MinLOD : System.Single

+ Renamed to "MinimumLevelOfDetail"
+ Kind changed to "Property"
Added methods: + get_MinimumLevelOfDetail() : System.Single, set_MinimumLevelOfDetail(System.Single) : System.Void

Field: MipLODBias : System.Single

+ Renamed to "MipLevelOfDetailBias"
+ Kind changed to "Property"
Added methods: + get_MipLevelOfDetailBias() : System.Single, set_MipLevelOfDetailBias(System.Single) : System.Void

Struct: ShaderBufferDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderBufferDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderBufferDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderBufferDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderBufferDescription) : System.Boolean

Field: Flags : System.UInt32

+ Renamed to "Options"
+ Kind changed to "Property"
Added methods: + get_Options() : System.UInt32, set_Options(System.UInt32) : System.Void

Field: Name : System.String

+ Kind changed to "Property"
Added methods: + get_Name() : System.String, set_Name(System.String) : System.Void

Field: Size : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Size() : System.UInt32, set_Size(System.UInt32) : System.Void

Field: Type : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ConstantBufferType

+ Renamed to "ConstantBufferType"
+ Kind changed to "Property"
Added methods: + get_ConstantBufferType() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ConstantBufferType, set_ConstantBufferType(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ConstantBufferType) : System.Void

Field: Variables : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Variables() : System.UInt32, set_Variables(System.UInt32) : System.Void

Enum: ShaderConstantBufferFlags

+ Renamed to "ShaderConstantBufferProperties"

Enum: ShaderDebugScopetype

+ Renamed to "ShaderDebugScopeType"

Field: Stateblock

+ Renamed to "StateBlock"

Enum: ShaderDebugVartype

+ Renamed to "ShaderDebugVariantType"

Struct: ShaderDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderDescription) : System.Boolean

Field: ArrayInstructionCount : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArrayInstructionCount() : System.UInt32, set_ArrayInstructionCount(System.UInt32) : System.Void

Field: BoundResources : System.UInt32

+ Kind changed to "Property"
Added methods: + get_BoundResources() : System.UInt32, set_BoundResources(System.UInt32) : System.Void

Field: ConstantBuffers : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ConstantBuffers() : System.UInt32, set_ConstantBuffers(System.UInt32) : System.Void

Field: Creator : System.String

+ Kind changed to "Property"
Added methods: + get_Creator() : System.String, set_Creator(System.String) : System.Void

Field: CutInstructionCount : System.UInt32

+ Kind changed to "Property"
Added methods: + get_CutInstructionCount() : System.UInt32, set_CutInstructionCount(System.UInt32) : System.Void

Field: DclCount : System.UInt32

+ Renamed to "DeclarationCount"
+ Kind changed to "Property"
Added methods: + get_DeclarationCount() : System.UInt32, set_DeclarationCount(System.UInt32) : System.Void

Field: DefCount : System.UInt32

+ Kind changed to "Property"
Added methods: + get_DefCount() : System.UInt32, set_DefCount(System.UInt32) : System.Void

Field: DynamicFlowControlCount : System.UInt32

+ Kind changed to "Property"
Added methods: + get_DynamicFlowControlCount() : System.UInt32, set_DynamicFlowControlCount(System.UInt32) : System.Void

Field: EmitInstructionCount : System.UInt32

+ Kind changed to "Property"
Added methods: + get_EmitInstructionCount() : System.UInt32, set_EmitInstructionCount(System.UInt32) : System.Void

Field: Flags : System.UInt32

+ Renamed to "Options"
+ Kind changed to "Property"
Added methods: + get_Options() : System.UInt32, set_Options(System.UInt32) : System.Void

Field: FloatInstructionCount : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FloatInstructionCount() : System.UInt32, set_FloatInstructionCount(System.UInt32) : System.Void

Field: GeometryShaderMaxOutputVertexCount : System.UInt32

+ Kind changed to "Property"
Added methods: + get_GeometryShaderMaxOutputVertexCount() : System.UInt32, set_GeometryShaderMaxOutputVertexCount(System.UInt32) : System.Void

Field: GeometryShaderOutputTopology : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.PrimitiveTopology

+ Kind changed to "Property"
Added methods: + get_GeometryShaderOutputTopology() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.PrimitiveTopology, set_GeometryShaderOutputTopology(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.PrimitiveTopology) : System.Void

Field: InputParameters : System.UInt32

+ Kind changed to "Property"
Added methods: + get_InputParameters() : System.UInt32, set_InputParameters(System.UInt32) : System.Void

Field: InstructionCount : System.UInt32

+ Kind changed to "Property"
Added methods: + get_InstructionCount() : System.UInt32, set_InstructionCount(System.UInt32) : System.Void

Field: IntInstructionCount : System.UInt32

+ Renamed to "IntegerInstructionCount"
+ Kind changed to "Property"
Added methods: + get_IntegerInstructionCount() : System.UInt32, set_IntegerInstructionCount(System.UInt32) : System.Void

Field: MacroInstructionCount : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MacroInstructionCount() : System.UInt32, set_MacroInstructionCount(System.UInt32) : System.Void

Field: OutputParameters : System.UInt32

+ Kind changed to "Property"
Added methods: + get_OutputParameters() : System.UInt32, set_OutputParameters(System.UInt32) : System.Void

Field: StaticFlowControlCount : System.UInt32

+ Kind changed to "Property"
Added methods: + get_StaticFlowControlCount() : System.UInt32, set_StaticFlowControlCount(System.UInt32) : System.Void

Field: TempArrayCount : System.UInt32

+ Kind changed to "Property"
Added methods: + get_TempArrayCount() : System.UInt32, set_TempArrayCount(System.UInt32) : System.Void

Field: TempRegisterCount : System.UInt32

+ Kind changed to "Property"
Added methods: + get_TempRegisterCount() : System.UInt32, set_TempRegisterCount(System.UInt32) : System.Void

Field: TextureBiasInstructions : System.UInt32

+ Kind changed to "Property"
Added methods: + get_TextureBiasInstructions() : System.UInt32, set_TextureBiasInstructions(System.UInt32) : System.Void

Field: TextureCompInstructions : System.UInt32

+ Kind changed to "Property"
Added methods: + get_TextureCompInstructions() : System.UInt32, set_TextureCompInstructions(System.UInt32) : System.Void

Field: TextureGradientInstructions : System.UInt32

+ Kind changed to "Property"
Added methods: + get_TextureGradientInstructions() : System.UInt32, set_TextureGradientInstructions(System.UInt32) : System.Void

Field: TextureLoadInstructions : System.UInt32

+ Kind changed to "Property"
Added methods: + get_TextureLoadInstructions() : System.UInt32, set_TextureLoadInstructions(System.UInt32) : System.Void

Field: TextureNormalInstructions : System.UInt32

+ Kind changed to "Property"
Added methods: + get_TextureNormalInstructions() : System.UInt32, set_TextureNormalInstructions(System.UInt32) : System.Void

Field: UintInstructionCount : System.UInt32

+ Renamed to "UnsignedIntegerInstructionCount"
+ Kind changed to "Property"
Added methods: + get_UnsignedIntegerInstructionCount() : System.UInt32, set_UnsignedIntegerInstructionCount(System.UInt32) : System.Void

Field: Version : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Version() : System.UInt32, set_Version(System.UInt32) : System.Void

Struct: ShaderInputBindDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderInputBindDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderInputBindDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderInputBindDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderInputBindDescription) : System.Boolean

Field: BindCount : System.UInt32

+ Kind changed to "Property"
Added methods: + get_BindCount() : System.UInt32, set_BindCount(System.UInt32) : System.Void

Field: BindPoint : System.UInt32

+ Kind changed to "Property"
Added methods: + get_BindPoint() : System.UInt32, set_BindPoint(System.UInt32) : System.Void

Field: Dimension : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderResourceViewDimension

+ Kind changed to "Property"
Added methods: + get_Dimension() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderResourceViewDimension, set_Dimension(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderResourceViewDimension) : System.Void

Field: Flags : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderInputFlags

+ Renamed to "ShaderInputOptions"
+ Kind changed to "Property"
Added methods: + get_ShaderInputOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderInputOptions, set_ShaderInputOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderInputOptions) : System.Void

Field: Name : System.String

+ Kind changed to "Property"
Added methods: + get_Name() : System.String, set_Name(System.String) : System.Void

Field: NumSamples : System.UInt32

+ Renamed to "SampleCount"
+ Kind changed to "Property"
Added methods: + get_SampleCount() : System.UInt32, set_SampleCount(System.UInt32) : System.Void

Field: ReturnType : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ResourceReturnType

+ Kind changed to "Property"
Added methods: + get_ReturnType() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ResourceReturnType, set_ReturnType(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ResourceReturnType) : System.Void

Field: Type : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderInputType

+ Renamed to "ShaderInputType"
+ Kind changed to "Property"
Added methods: + get_ShaderInputType() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderInputType, set_ShaderInputType(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderInputType) : System.Void

Enum: ShaderInputFlags

+ Renamed to "ShaderInputOptions"

Class: ShaderReflectionVariable

Property: Type : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderReflectionType

+ Renamed to "ShaderReflectionType"
Removed methods: + get_Type() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderReflectionType
Added methods: + get_ShaderReflectionType() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderReflectionType

Struct: ShaderResourceViewDescription

Field: Buffer : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferShaderResourceView

+ Kind changed to "Property"
Added methods: + get_Buffer() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferShaderResourceView, set_Buffer(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferShaderResourceView) : System.Void

Field: Format : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_Format() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_Format(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: Texture1D : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DShaderResourceView

+ Kind changed to "Property"
Added methods: + get_Texture1D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DShaderResourceView, set_Texture1D(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DShaderResourceView) : System.Void

Field: Texture1DArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayShaderResourceView

+ Kind changed to "Property"
Added methods: + get_Texture1DArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayShaderResourceView, set_Texture1DArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayShaderResourceView) : System.Void

Field: Texture2D : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DShaderResourceView

+ Kind changed to "Property"
Added methods: + get_Texture2D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DShaderResourceView, set_Texture2D(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DShaderResourceView) : System.Void

Field: Texture2DArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayShaderResourceView

+ Kind changed to "Property"
Added methods: + get_Texture2DArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayShaderResourceView, set_Texture2DArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayShaderResourceView) : System.Void

Field: Texture2DMultiSample : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultiSampleShaderResourceView

+ Renamed to "Texture2DMultisample"
+ Kind changed to "Property"
Added methods: + get_Texture2DMultisample() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleShaderResourceView, set_Texture2DMultisample(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleShaderResourceView) : System.Void

Field: Texture2DMultiSampleArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultiSampleArrayShaderResourceView

+ Renamed to "Texture2DMultisampleArray"
+ Kind changed to "Property"
Added methods: + get_Texture2DMultisampleArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayShaderResourceView, set_Texture2DMultisampleArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayShaderResourceView) : System.Void

Field: Texture3D : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DShaderResourceView

+ Kind changed to "Property"
Added methods: + get_Texture3D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DShaderResourceView, set_Texture3D(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DShaderResourceView) : System.Void

Field: TextureCube : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureCubeShaderResourceView

+ Kind changed to "Property"
Added methods: + get_TextureCube() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureCubeShaderResourceView, set_TextureCube(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureCubeShaderResourceView) : System.Void

Field: ViewDimension : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderResourceViewDimension

+ Kind changed to "Property"
Added methods: + get_ViewDimension() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderResourceViewDimension, set_ViewDimension(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderResourceViewDimension) : System.Void

Struct: ShaderResourceViewDescription1

Field: Buffer : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferShaderResourceView

+ Kind changed to "Property"
Added methods: + get_Buffer() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferShaderResourceView, set_Buffer(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BufferShaderResourceView) : System.Void

Field: Format : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_Format() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_Format(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: Texture1D : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DShaderResourceView

+ Kind changed to "Property"
Added methods: + get_Texture1D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DShaderResourceView, set_Texture1D(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DShaderResourceView) : System.Void

Field: Texture1DArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayShaderResourceView

+ Kind changed to "Property"
Added methods: + get_Texture1DArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayShaderResourceView, set_Texture1DArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayShaderResourceView) : System.Void

Field: Texture2D : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DShaderResourceView

+ Kind changed to "Property"
Added methods: + get_Texture2D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DShaderResourceView, set_Texture2D(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DShaderResourceView) : System.Void

Field: Texture2DArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayShaderResourceView

+ Kind changed to "Property"
Added methods: + get_Texture2DArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayShaderResourceView, set_Texture2DArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayShaderResourceView) : System.Void

Field: Texture2DMultiSample : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultiSampleShaderResourceView

+ Renamed to "Texture2DMultisample"
+ Kind changed to "Property"
Added methods: + get_Texture2DMultisample() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleShaderResourceView, set_Texture2DMultisample(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleShaderResourceView) : System.Void

Field: Texture2DMultiSampleArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultiSampleArrayShaderResourceView

+ Renamed to "Texture2DMultisampleArray"
+ Kind changed to "Property"
Added methods: + get_Texture2DMultisampleArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayShaderResourceView, set_Texture2DMultisampleArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayShaderResourceView) : System.Void

Field: Texture3D : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DShaderResourceView

+ Kind changed to "Property"
Added methods: + get_Texture3D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DShaderResourceView, set_Texture3D(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DShaderResourceView) : System.Void

Field: TextureCube : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureCubeShaderResourceView

+ Kind changed to "Property"
Added methods: + get_TextureCube() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureCubeShaderResourceView, set_TextureCube(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureCubeShaderResourceView) : System.Void

Field: TextureCubeArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureCubeArrayShaderResourceView1

+ Kind changed to "Property"
Added methods: + get_TextureCubeArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureCubeArrayShaderResourceView1, set_TextureCubeArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureCubeArrayShaderResourceView1) : System.Void

Field: ViewDimension : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderResourceViewDimension1

+ Kind changed to "Property"
Added methods: + get_ViewDimension() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderResourceViewDimension1, set_ViewDimension(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderResourceViewDimension1) : System.Void

Enum: ShaderResourceViewDimension

Field: Texture2DMultiSample

+ Renamed to "Texture2DMultisample"

Field: Texture2DMultiSampleArray

+ Renamed to "Texture2DMultisampleArray"

Enum: ShaderResourceViewDimension1

Field: Texture2DMultiSample

+ Renamed to "Texture2DMultisample"

Field: Texture2DMultiSampleArray

+ Renamed to "Texture2DMultisampleArray"

Struct: ShaderTypeDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderTypeDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderTypeDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderTypeDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderTypeDescription) : System.Boolean

Field: Class : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderVariableClass

+ Kind changed to "Property"
Added methods: + get_Class() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderVariableClass, set_Class(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderVariableClass) : System.Void

Field: Columns : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Columns() : System.UInt32, set_Columns(System.UInt32) : System.Void

Field: Elements : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Elements() : System.UInt32, set_Elements(System.UInt32) : System.Void

Field: Members : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Members() : System.UInt32, set_Members(System.UInt32) : System.Void

Field: Offset : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Offset() : System.UInt32, set_Offset(System.UInt32) : System.Void

Field: Rows : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Rows() : System.UInt32, set_Rows(System.UInt32) : System.Void

Field: Type : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderVariableType

+ Renamed to "ShaderVariableType"
+ Kind changed to "Property"
Added methods: + get_ShaderVariableType() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderVariableType, set_ShaderVariableType(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderVariableType) : System.Void

Struct: ShaderVariableDescription

Added methods: + SetDefaultValue(System.Collections.Generic.IEnumerable<System.Byte>) : System.Void

Field: DefaultValue : System.Byte[]

+ Kind changed to "Property"
Added methods: + get_DefaultValue() : System.Collections.ObjectModel.ReadOnlyCollection<System.Byte>

Field: Flags : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderVariableFlags

+ Renamed to "ShaderVariableProperties"
+ Kind changed to "Property"
Added methods: + get_ShaderVariableProperties() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderVariableProperties, set_ShaderVariableProperties(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ShaderVariableProperties) : System.Void

Field: Name : System.String

+ Kind changed to "Property"
Added methods: + get_Name() : System.String, set_Name(System.String) : System.Void

Field: Size : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Size() : System.UInt32, set_Size(System.UInt32) : System.Void

Field: StartOffset : System.UInt32

+ Kind changed to "Property"
Added methods: + get_StartOffset() : System.UInt32, set_StartOffset(System.UInt32) : System.Void

Enum: ShaderVariableFlags

+ Renamed to "ShaderVariableProperties"

Field: Undefined

+ Renamed to "None"

Enum: ShaderVariableType

Field: Texture2DMultipSample

+ Renamed to "Texture2DMultisample"

Field: Texture2DMultiSampleArray

+ Renamed to "Texture2DMultisampleArray"

Field: Uint

+ Renamed to "UInt"

Field: Uint8

+ Renamed to "UInt8"

Struct: SignatureParameterDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.SignatureParameterDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.SignatureParameterDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.SignatureParameterDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.SignatureParameterDescription) : System.Boolean

Field: ComponentType : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RegisterComponentType

+ Kind changed to "Property"
Added methods: + get_ComponentType() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RegisterComponentType, set_ComponentType(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.RegisterComponentType) : System.Void

Field: Mask : System.Byte

+ Kind changed to "Property"
Added methods: + get_Mask() : System.Byte, set_Mask(System.Byte) : System.Void

Field: ReadWriteMask : System.Byte

+ Kind changed to "Property"
Added methods: + get_ReadWriteMask() : System.Byte, set_ReadWriteMask(System.Byte) : System.Void

Field: Register : System.UInt32

+ Renamed to "RegisterNumber"
+ Kind changed to "Property"
Added methods: + get_RegisterNumber() : System.UInt32, set_RegisterNumber(System.UInt32) : System.Void

Field: SemanticIndex : System.UInt32

+ Kind changed to "Property"
Added methods: + get_SemanticIndex() : System.UInt32, set_SemanticIndex(System.UInt32) : System.Void

Field: SemanticName : System.String

+ Kind changed to "Property"
Added methods: + get_SemanticName() : System.String, set_SemanticName(System.String) : System.Void

Field: SystemValueType : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Name

+ Kind changed to "Property"
Added methods: + get_SystemValueType() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Name, set_SystemValueType(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Name) : System.Void

Class: StateBlock

Method: GetDevice() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice

+ Renamed to "Device"
+ Kind changed to "Property"
Added methods: + get_Device() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice

Class: StateBlockMask

Property: GeometryShaderConstantBuffers : System.Byte[]

Method: get_GeometryShaderConstantBuffers() : System.Byte[]

+ Signature changed to "() : System.Collections.ObjectModel.ReadOnlyCollection<System.Byte>"

Property: GeometryShaderSamplers : System.Byte[]

Method: get_GeometryShaderSamplers() : System.Byte[]

+ Signature changed to "() : System.Collections.ObjectModel.ReadOnlyCollection<System.Byte>"

Property: GeometryShaderShaderResources : System.Byte[]

Method: get_GeometryShaderShaderResources() : System.Byte[]

+ Signature changed to "() : System.Collections.ObjectModel.ReadOnlyCollection<System.Byte>"

Property: InputAssemblerVertexBuffers : System.Byte[]

Method: get_InputAssemblerVertexBuffers() : System.Byte[]

+ Signature changed to "() : System.Collections.ObjectModel.ReadOnlyCollection<System.Byte>"

Property: PixelShaderConstantBuffers : System.Byte[]

Method: get_PixelShaderConstantBuffers() : System.Byte[]

+ Signature changed to "() : System.Collections.ObjectModel.ReadOnlyCollection<System.Byte>"

Property: PixelShaderSamplers : System.Byte[]

Method: get_PixelShaderSamplers() : System.Byte[]

+ Signature changed to "() : System.Collections.ObjectModel.ReadOnlyCollection<System.Byte>"

Property: PixelShaderShaderResources : System.Byte[]

Method: get_PixelShaderShaderResources() : System.Byte[]

+ Signature changed to "() : System.Collections.ObjectModel.ReadOnlyCollection<System.Byte>"

Property: VertexShaderConstantBuffers : System.Byte[]

Method: get_VertexShaderConstantBuffers() : System.Byte[]

+ Signature changed to "() : System.Collections.ObjectModel.ReadOnlyCollection<System.Byte>"

Property: VertexShaderSamplers : System.Byte[]

Method: get_VertexShaderSamplers() : System.Byte[]

+ Signature changed to "() : System.Collections.ObjectModel.ReadOnlyCollection<System.Byte>"

Property: VertexShaderShaderResources : System.Byte[]

Method: get_VertexShaderShaderResources() : System.Byte[]

+ Signature changed to "() : System.Collections.ObjectModel.ReadOnlyCollection<System.Byte>"

Enum: StencilReadMask

Field: Default

+ Renamed to "All"

Field: Zero

+ Renamed to "None"

Enum: StencilWriteMask

Field: Default

+ Renamed to "All"

Field: Zero

+ Renamed to "None"

Struct: StreamOutputDeclarationEntry

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.StreamOutputDeclarationEntry, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.StreamOutputDeclarationEntry) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.StreamOutputDeclarationEntry, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.StreamOutputDeclarationEntry) : System.Boolean

Field: ComponentCount : System.Byte

+ Kind changed to "Property"
Added methods: + get_ComponentCount() : System.Byte, set_ComponentCount(System.Byte) : System.Void

Field: OutputSlot : System.Byte

+ Kind changed to "Property"
Added methods: + get_OutputSlot() : System.Byte, set_OutputSlot(System.Byte) : System.Void

Field: SemanticIndex : System.UInt32

+ Kind changed to "Property"
Added methods: + get_SemanticIndex() : System.UInt32, set_SemanticIndex(System.UInt32) : System.Void

Field: SemanticName : System.String

+ Kind changed to "Property"
Added methods: + get_SemanticName() : System.String, set_SemanticName(System.String) : System.Void

Field: StartComponent : System.Byte

+ Kind changed to "Property"
Added methods: + get_StartComponent() : System.Byte, set_StartComponent(System.Byte) : System.Void

Class: StreamOutputPipelineStage

Removed methods: + GetTargets(System.UInt32, System.UInt32[]&) : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DBuffer>, SetTargets(System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DBuffer>, System.UInt32[]) : System.Void
Added properties: + Targets : System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D10.OutputBuffer>

Struct: SubresourceData

Field: SysMem : System.IntPtr

+ Renamed to "SystemMemory"
+ Kind changed to "Property"
Added methods: + get_SystemMemory() : System.IntPtr, set_SystemMemory(System.IntPtr) : System.Void

Field: SysMemPitch : System.UInt32

+ Renamed to "SystemMemoryPitch"
+ Kind changed to "Property"
Added methods: + get_SystemMemoryPitch() : System.UInt32, set_SystemMemoryPitch(System.UInt32) : System.Void

Field: SysMemSlicePitch : System.UInt32

+ Renamed to "SystemMemorySlicePitch"
+ Kind changed to "Property"
Added methods: + get_SystemMemorySlicePitch() : System.UInt32, set_SystemMemorySlicePitch(System.UInt32) : System.Void

Struct: TechniqueDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TechniqueDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TechniqueDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TechniqueDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TechniqueDescription) : System.Boolean

Field: Annotations : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Annotations() : System.UInt32, set_Annotations(System.UInt32) : System.Void

Field: Name : System.String

+ Kind changed to "Property"
Added methods: + get_Name() : System.String, set_Name(System.String) : System.Void

Field: Passes : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Passes() : System.UInt32, set_Passes(System.UInt32) : System.Void

Class: Texture1D

Method: Map(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Map, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MapFlag) : System.IntPtr

+ Signature changed to "(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Map, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MapOptions) : System.IntPtr"

Struct: Texture1DArrayDepthStencilView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayDepthStencilView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayDepthStencilView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture1DArrayRenderTargetView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayRenderTargetView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayRenderTargetView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture1DArrayShaderResourceView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DArrayShaderResourceView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MostDetailedMip : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MostDetailedMip() : System.UInt32, set_MostDetailedMip(System.UInt32) : System.Void

Struct: Texture1DDepthStencilView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DDepthStencilView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DDepthStencilView) : System.Boolean

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture1DDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DDescription) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: BindFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BindFlag

+ Renamed to "BindingOptions"
+ Kind changed to "Property"
Added methods: + get_BindingOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BindingOptions, set_BindingOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BindingOptions) : System.Void

Field: CpuAccessFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CpuAccessFlag

+ Renamed to "CpuAccessOptions"
+ Kind changed to "Property"
Added methods: + get_CpuAccessOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CpuAccessOptions, set_CpuAccessOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CpuAccessOptions) : System.Void

Field: Format : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_Format() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_Format(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MiscFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ResourceMiscFlag

+ Renamed to "MiscellaneousResourceOptions"
+ Kind changed to "Property"
Added methods: + get_MiscellaneousResourceOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MiscellaneousResourceOptions, set_MiscellaneousResourceOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MiscellaneousResourceOptions) : System.Void

Field: Usage : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Usage

+ Kind changed to "Property"
Added methods: + get_Usage() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Usage, set_Usage(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Usage) : System.Void

Field: Width : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Width() : System.UInt32, set_Width(System.UInt32) : System.Void

Struct: Texture1DRenderTargetView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DRenderTargetView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DRenderTargetView) : System.Boolean

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture1DShaderResourceView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture1DShaderResourceView) : System.Boolean

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MostDetailedMip : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MostDetailedMip() : System.UInt32, set_MostDetailedMip(System.UInt32) : System.Void

Class: Texture2D

Method: Map(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Map, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MapFlag) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MappedTexture2D

+ Signature changed to "(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Map, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MapOptions) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MappedTexture2D"

Struct: Texture2DArrayDepthStencilView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayDepthStencilView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayDepthStencilView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture2DArrayRenderTargetView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayRenderTargetView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayRenderTargetView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture2DArrayShaderResourceView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DArrayShaderResourceView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MostDetailedMip : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MostDetailedMip() : System.UInt32, set_MostDetailedMip(System.UInt32) : System.Void

Struct: Texture2DDepthStencilView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DDepthStencilView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DDepthStencilView) : System.Boolean

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture2DDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DDescription) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: BindFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BindFlag

+ Renamed to "BindingOptions"
+ Kind changed to "Property"
Added methods: + get_BindingOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BindingOptions, set_BindingOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BindingOptions) : System.Void

Field: CpuAccessFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CpuAccessFlag

+ Renamed to "CpuAccessOptions"
+ Kind changed to "Property"
Added methods: + get_CpuAccessOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CpuAccessOptions, set_CpuAccessOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CpuAccessOptions) : System.Void

Field: Format : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_Format() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_Format(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: Height : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Height() : System.UInt32, set_Height(System.UInt32) : System.Void

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MiscFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ResourceMiscFlag

+ Renamed to "MiscellaneousResourceOptions"
+ Kind changed to "Property"
Added methods: + get_MiscellaneousResourceOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MiscellaneousResourceOptions, set_MiscellaneousResourceOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MiscellaneousResourceOptions) : System.Void

Field: SampleDescription : Microsoft.WindowsAPICodePack.DirectX.DXGI.SampleDescription

+ Kind changed to "Property"
Added methods: + get_SampleDescription() : Microsoft.WindowsAPICodePack.DirectX.Graphics.SampleDescription, set_SampleDescription(Microsoft.WindowsAPICodePack.DirectX.Graphics.SampleDescription) : System.Void

Field: Usage : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Usage

+ Kind changed to "Property"
Added methods: + get_Usage() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Usage, set_Usage(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Usage) : System.Void

Field: Width : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Width() : System.UInt32, set_Width(System.UInt32) : System.Void

Struct: Texture2DMultiSampleArrayDepthStencilView

+ Renamed to "Texture2DMultisampleArrayDepthStencilView"
Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayDepthStencilView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayDepthStencilView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Struct: Texture2DMultiSampleArrayRenderTargetView

+ Renamed to "Texture2DMultisampleArrayRenderTargetView"
Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayRenderTargetView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayRenderTargetView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Struct: Texture2DMultiSampleArrayShaderResourceView

+ Renamed to "Texture2DMultisampleArrayShaderResourceView"
Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleArrayShaderResourceView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Struct: Texture2DMultiSampleDepthStencilView

+ Renamed to "Texture2DMultisampleDepthStencilView"
Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleDepthStencilView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleDepthStencilView) : System.Boolean

Field: UnusedField : System.UInt32

+ Kind changed to "Property"
Added methods: + get_UnusedField() : System.UInt32, set_UnusedField(System.UInt32) : System.Void

Struct: Texture2DMultiSampleRenderTargetView

+ Renamed to "Texture2DMultisampleRenderTargetView"
Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleRenderTargetView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleRenderTargetView) : System.Boolean

Field: UnusedField : System.UInt32

+ Kind changed to "Property"
Added methods: + get_UnusedField() : System.UInt32, set_UnusedField(System.UInt32) : System.Void

Struct: Texture2DMultiSampleShaderResourceView

+ Renamed to "Texture2DMultisampleShaderResourceView"
Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DMultisampleShaderResourceView) : System.Boolean

Field: UnusedField : System.UInt32

+ Kind changed to "Property"
Added methods: + get_UnusedField() : System.UInt32, set_UnusedField(System.UInt32) : System.Void

Struct: Texture2DRenderTargetView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DRenderTargetView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DRenderTargetView) : System.Boolean

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture2DShaderResourceView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture2DShaderResourceView) : System.Boolean

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MostDetailedMip : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MostDetailedMip() : System.UInt32, set_MostDetailedMip(System.UInt32) : System.Void

Class: Texture3D

Method: Map(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Map, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MapFlag) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MappedTexture3D

+ Signature changed to "(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Map, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MapOptions) : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MappedTexture3D"

Struct: Texture3DDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DDescription) : System.Boolean

Field: BindFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BindFlag

+ Renamed to "BindingOptions"
+ Kind changed to "Property"
Added methods: + get_BindingOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BindingOptions, set_BindingOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.BindingOptions) : System.Void

Field: CpuAccessFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CpuAccessFlag

+ Renamed to "CpuAccessOptions"
+ Kind changed to "Property"
Added methods: + get_CpuAccessOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CpuAccessOptions, set_CpuAccessOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.CpuAccessOptions) : System.Void

Field: Depth : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Depth() : System.UInt32, set_Depth(System.UInt32) : System.Void

Field: Format : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_Format() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_Format(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: Height : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Height() : System.UInt32, set_Height(System.UInt32) : System.Void

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MiscFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.ResourceMiscFlag

+ Renamed to "MiscellaneousResourceOptions"
+ Kind changed to "Property"
Added methods: + get_MiscellaneousResourceOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MiscellaneousResourceOptions, set_MiscellaneousResourceOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MiscellaneousResourceOptions) : System.Void

Field: Usage : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Usage

+ Kind changed to "Property"
Added methods: + get_Usage() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Usage, set_Usage(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Usage) : System.Void

Field: Width : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Width() : System.UInt32, set_Width(System.UInt32) : System.Void

Struct: Texture3DRenderTargetView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DRenderTargetView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DRenderTargetView) : System.Boolean

Field: FirstWSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstWSlice() : System.UInt32, set_FirstWSlice(System.UInt32) : System.Void

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Field: WSize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_WSize() : System.UInt32, set_WSize(System.UInt32) : System.Void

Struct: Texture3DShaderResourceView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.Texture3DShaderResourceView) : System.Boolean

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MostDetailedMip : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MostDetailedMip() : System.UInt32, set_MostDetailedMip(System.UInt32) : System.Void

Struct: TextureCubeArrayShaderResourceView1

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureCubeArrayShaderResourceView1, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureCubeArrayShaderResourceView1) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureCubeArrayShaderResourceView1, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureCubeArrayShaderResourceView1) : System.Boolean

Field: First2DArrayFace : System.UInt32

+ Kind changed to "Property"
Added methods: + get_First2DArrayFace() : System.UInt32, set_First2DArrayFace(System.UInt32) : System.Void

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MostDetailedMip : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MostDetailedMip() : System.UInt32, set_MostDetailedMip(System.UInt32) : System.Void

Field: NumCubes : System.UInt32

+ Renamed to "CubeCount"
+ Kind changed to "Property"
Added methods: + get_CubeCount() : System.UInt32, set_CubeCount(System.UInt32) : System.Void

Enum: TexturecubeFace

+ Renamed to "TextureCubeFace"

Struct: TextureCubeShaderResourceView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureCubeShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureCubeShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureCubeShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.TextureCubeShaderResourceView) : System.Boolean

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MostDetailedMip : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MostDetailedMip() : System.UInt32, set_MostDetailedMip(System.UInt32) : System.Void

Class: VertexShaderPipelineStage

Removed methods: + GetShader() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.VertexShader, SetShader(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.VertexShader) : System.Void
Added properties: + Shader : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.VertexShader

Class: View

Method: GetResource() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DResource

+ Renamed to "Resource"
+ Kind changed to "Property"
Added methods: + get_Resource() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DResource

Struct: Viewport

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: Height : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Height() : System.UInt32, set_Height(System.UInt32) : System.Void

Field: MaxDepth : System.Single

+ Kind changed to "Property"
Added methods: + get_MaxDepth() : System.Single, set_MaxDepth(System.Single) : System.Void

Field: MinDepth : System.Single

+ Kind changed to "Property"
Added methods: + get_MinDepth() : System.Single, set_MinDepth(System.Single) : System.Void

Field: TopLeftX : System.Int32

+ Kind changed to "Property"
Added methods: + get_TopLeftX() : System.Int32, set_TopLeftX(System.Int32) : System.Void

Field: TopLeftY : System.Int32

+ Kind changed to "Property"
Added methods: + get_TopLeftY() : System.Int32, set_TopLeftY(System.Int32) : System.Void

Field: Width : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Width() : System.UInt32, set_Width(System.UInt32) : System.Void

Namespace: Microsoft.WindowsAPICodePack.DirectX.Direct3D11

Added types: + CounterData, IndexBuffer, OutputMergerBlendState, OutputMergerRenderTargets, ShaderAndClasses<T>, VertexBuffer

Enum: AsyncGetDataFlag

+ Renamed to "AsyncGetDataOptions"

Field: Undefined

+ Renamed to "None"

Enum: BindFlag

+ Renamed to "BindingOptions"

Field: Undefined

+ Renamed to "None"

Struct: BlendDescription

Field: AlphaToCoverageEnable : System.Boolean

+ Kind changed to "Property"
Added methods: + get_AlphaToCoverageEnable() : System.Boolean, set_AlphaToCoverageEnable(System.Boolean) : System.Void

Field: IndependentBlendEnable : System.Boolean

+ Kind changed to "Property"
Added methods: + get_IndependentBlendEnable() : System.Boolean, set_IndependentBlendEnable(System.Boolean) : System.Void

Property: RenderTarget : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RenderTargetBlendDescription[]

Method: get_RenderTarget() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RenderTargetBlendDescription[]

+ Signature changed to "() : System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RenderTargetBlendDescription>"

Struct: Box

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Field: Back : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Back() : System.UInt32, set_Back(System.UInt32) : System.Void

Field: Bottom : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Bottom() : System.UInt32, set_Bottom(System.UInt32) : System.Void

Field: Front : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Front() : System.UInt32, set_Front(System.UInt32) : System.Void

Field: Left : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Left() : System.UInt32, set_Left(System.UInt32) : System.Void

Field: Right : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Right() : System.UInt32, set_Right(System.UInt32) : System.Void

Field: Top : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Top() : System.UInt32, set_Top(System.UInt32) : System.Void

Struct: BufferDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferDescription) : System.Boolean

Field: BindFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BindFlag

+ Renamed to "BindingOptions"
+ Kind changed to "Property"
Added methods: + get_BindingOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BindingOptions, set_BindingOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BindingOptions) : System.Void

Field: ByteWidth : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ByteWidth() : System.UInt32, set_ByteWidth(System.UInt32) : System.Void

Field: CpuAccessFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CpuAccessFlag

+ Renamed to "CpuAccessOptions"
+ Kind changed to "Property"
Added methods: + get_CpuAccessOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CpuAccessOptions, set_CpuAccessOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CpuAccessOptions) : System.Void

Field: MiscFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ResourceMiscFlag

+ Renamed to "MiscellaneousResourceOptions"
+ Kind changed to "Property"
Added methods: + get_MiscellaneousResourceOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MiscellaneousResourceOptions, set_MiscellaneousResourceOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MiscellaneousResourceOptions) : System.Void

Field: StructureByteStride : System.UInt32

+ Kind changed to "Property"
Added methods: + get_StructureByteStride() : System.UInt32, set_StructureByteStride(System.UInt32) : System.Void

Field: Usage : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Usage

+ Kind changed to "Property"
Added methods: + get_Usage() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Usage, set_Usage(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Usage) : System.Void

Struct: BufferExShaderResourceView

+ Renamed to "ExtendedBufferShaderResourceView"
Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ExtendedBufferShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ExtendedBufferShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ExtendedBufferShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ExtendedBufferShaderResourceView) : System.Boolean

Field: FirstElement : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstElement() : System.UInt32, set_FirstElement(System.UInt32) : System.Void

Field: Flags : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferExShaderResourceViewFlag

+ Renamed to "BindingOptions"
+ Kind changed to "Property"
Added methods: + get_BindingOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ExtendedBufferBindingOptions, set_BindingOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ExtendedBufferBindingOptions) : System.Void

Field: NumElements : System.UInt32

+ Renamed to "ElementCount"
+ Kind changed to "Property"
Added methods: + get_ElementCount() : System.UInt32, set_ElementCount(System.UInt32) : System.Void

Enum: BufferExShaderResourceViewFlag

+ Renamed to "ExtendedBufferBindingOptions"

Field: Undefined

+ Renamed to "None"

Struct: BufferRenderTargetView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferRenderTargetView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferRenderTargetView) : System.Boolean

Field: ElementOffset : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ElementOffset() : System.UInt32, set_ElementOffset(System.UInt32) : System.Void

Field: ElementWidth : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ElementWidth() : System.UInt32, set_ElementWidth(System.UInt32) : System.Void

Struct: BufferShaderResourceView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferShaderResourceView) : System.Boolean

Field: ElementOffset : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ElementOffset() : System.UInt32, set_ElementOffset(System.UInt32) : System.Void

Field: ElementWidth : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ElementWidth() : System.UInt32, set_ElementWidth(System.UInt32) : System.Void

Struct: BufferUnorderedAccessView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferUnorderedAccessView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferUnorderedAccessView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferUnorderedAccessView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferUnorderedAccessView) : System.Boolean

Field: FirstElement : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstElement() : System.UInt32, set_FirstElement(System.UInt32) : System.Void

Field: Flags : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferUnorderedAccessViewFlag

+ Renamed to "BufferOptions"
+ Kind changed to "Property"
Added methods: + get_BufferOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.UnorderedAccessViewBufferOptions, set_BufferOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.UnorderedAccessViewBufferOptions) : System.Void

Field: NumElements : System.UInt32

+ Renamed to "ElementCount"
+ Kind changed to "Property"
Added methods: + get_ElementCount() : System.UInt32, set_ElementCount(System.UInt32) : System.Void

Enum: BufferUnorderedAccessViewFlag

+ Renamed to "UnorderedAccessViewBufferOptions"

Field: Undefined

+ Renamed to "None"

Class: ClassInstance

Method: GetClassLinkage() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ClassLinkage

+ Renamed to "ClassLinkage"
+ Kind changed to "Property"
Added methods: + get_ClassLinkage() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ClassLinkage

Struct: ClassInstanceDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ClassInstanceDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ClassInstanceDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ClassInstanceDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ClassInstanceDescription) : System.Boolean

Field: BaseConstantBufferOffset : System.UInt32

+ Kind changed to "Property"
Added methods: + get_BaseConstantBufferOffset() : System.UInt32, set_BaseConstantBufferOffset(System.UInt32) : System.Void

Field: BaseSampler : System.UInt32

+ Kind changed to "Property"
Added methods: + get_BaseSampler() : System.UInt32, set_BaseSampler(System.UInt32) : System.Void

Field: BaseTexture : System.UInt32

+ Kind changed to "Property"
Added methods: + get_BaseTexture() : System.UInt32, set_BaseTexture(System.UInt32) : System.Void

Field: ConstantBuffer : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ConstantBuffer() : System.UInt32, set_ConstantBuffer(System.UInt32) : System.Void

Field: Created : System.Boolean

+ Kind changed to "Property"
Added methods: + get_Created() : System.Boolean, set_Created(System.Boolean) : System.Void

Field: InstanceId : System.UInt32

+ Kind changed to "Property"
Added methods: + get_InstanceId() : System.UInt32, set_InstanceId(System.UInt32) : System.Void

Field: InstanceIndex : System.UInt32

+ Kind changed to "Property"
Added methods: + get_InstanceIndex() : System.UInt32, set_InstanceIndex(System.UInt32) : System.Void

Field: TypeId : System.UInt32

+ Kind changed to "Property"
Added methods: + get_TypeId() : System.UInt32, set_TypeId(System.UInt32) : System.Void

Enum: ClearFlag

+ Renamed to "ClearOptions"

Field: Undefined

+ Renamed to "None"

Enum: ColorWriteEnable

+ Renamed to "ColorWriteEnableComponents"

Field: Undefined

+ Renamed to "None"

Class: CommandList

Property: ContextFlags : System.UInt32

+ Renamed to "ContextOptions"

Method: get_ContextFlags() : System.UInt32

+ Renamed to "get_ContextOptions"

Class: ComputeShaderPipelineStage

Method: GetShader() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ComputeShader

+ Renamed to "Shader"
+ Kind changed to "Property"
Added methods: + get_Shader() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ComputeShader, set_Shader(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ComputeShader) : System.Void

Method: GetShader(System.UInt32, System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ClassInstance>&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ComputeShader

+ Renamed to "GetShaderAndClasses"
+ Signature changed to "(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ShaderAndClasses<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ComputeShader>"

Method: SetShader(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ComputeShader) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ShaderAndClasses<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ComputeShader>) : System.Void"

Struct: CounterDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CounterDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CounterDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CounterDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CounterDescription) : System.Boolean

Field: Counter : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Counter

+ Kind changed to "Property"
Added methods: + get_Counter() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Counter, set_Counter(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Counter) : System.Void

Field: MiscFlags : System.UInt32

+ Renamed to "ReservedOptions"
+ Kind changed to "Property"
Added methods: + get_ReservedOptions() : System.UInt32, set_ReservedOptions(System.UInt32) : System.Void

Struct: CounterInformation

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CounterInformation, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CounterInformation) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CounterInformation, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CounterInformation) : System.Boolean

Field: LastDeviceDependentCounter : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Counter

+ Kind changed to "Property"
Added methods: + get_LastDeviceDependentCounter() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Counter, set_LastDeviceDependentCounter(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Counter) : System.Void

Field: NumDetectableParallelUnits : System.Byte

+ Renamed to "DetectableParallelUnitCount"
+ Kind changed to "Property"
Added methods: + get_DetectableParallelUnitCount() : System.Byte, set_DetectableParallelUnitCount(System.Byte) : System.Void

Field: NumSimultaneousCounters : System.UInt32

+ Renamed to "SimultaneousCounterCount"
+ Kind changed to "Property"
Added methods: + get_SimultaneousCounterCount() : System.UInt32, set_SimultaneousCounterCount(System.UInt32) : System.Void

Enum: CounterType

Field: Uint16

+ Renamed to "UInt16"

Field: Uint32

+ Renamed to "UInt32"

Field: Uint64

+ Renamed to "UInt64"

Enum: CpuAccessFlag

+ Renamed to "CpuAccessOptions"

Field: Unspecified

+ Renamed to "None"

Enum: CreateDeviceFlag

+ Renamed to "CreateDeviceOptions"

Field: Default

+ Renamed to "None"

Field: SupportBGRA

+ Renamed to "SupportBgra"

Class: D3DDebug

Property: FeatureMask : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DebugFeature

Method: get_FeatureMask() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DebugFeature

+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DebugFeatures"

Method: set_FeatureMask(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DebugFeature) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DebugFeatures) : System.Void"

Property: PresentPerRenderOpDelay : System.UInt32

+ Renamed to "PresentPerRenderOperationDelay"
Removed methods: + get_PresentPerRenderOpDelay() : System.UInt32, set_PresentPerRenderOpDelay(System.UInt32) : System.Void
Added methods: + get_PresentPerRenderOperationDelay() : System.UInt32, set_PresentPerRenderOperationDelay(System.UInt32) : System.Void

Property: RuntimeSwapChain : Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChain

Method: get_RuntimeSwapChain() : Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChain

+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapChain"

Method: set_RuntimeSwapChain(Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChain) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapChain) : System.Void"

Class: D3DDevice

Removed methods: + CheckFeatureDataD3D10XHardwareOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataD3D10XHardwareOptions&) : System.Boolean, CheckFormatSupport(Microsoft.WindowsAPICodePack.DirectX.DXGI.Format, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FormatSupport&) : System.Boolean, CheckMultisampleQualityLevels(Microsoft.WindowsAPICodePack.DirectX.DXGI.Format, System.UInt32, System.UInt32&) : System.Boolean
Added properties: + Debug : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DDebug, GraphicsDevice1 : Microsoft.WindowsAPICodePack.DirectX.Graphics.Device1, IsComputeShaderWithRawAndStructuredBuffersSupported : System.Boolean, SwapChain : Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapChain

Method: CheckCounter(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CounterDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CounterType&, System.UInt32&, System.String&, System.String&, System.String&) : System.Boolean

+ Renamed to "GetCounterData"
+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CounterDescription) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CounterData"

Method: CheckCounterInformation() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CounterInformation

+ Renamed to "CounterInformation"
+ Kind changed to "Property"
Added methods: + get_CounterInformation() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CounterInformation

Method: CheckFeatureDataDoubles(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataDoubles&) : System.Boolean

+ Renamed to "IsDoubleSupported"
+ Kind changed to "Property"
Added methods: + get_IsDoubleSupported() : System.Boolean

Method: CheckFeatureDataFormatSupport(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataFormatSupport&) : System.Boolean

+ Renamed to "GetFeatureDataFormatSupport"
+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataFormatSupport"

Method: CheckFeatureDataFormatSupport2(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataFormatSupport2&) : System.Boolean

+ Renamed to "GetFeatureDataFormatSupport2"
+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataFormatSupport2"

Method: CheckThreadingSupport(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataThreading&) : System.Boolean

+ Renamed to "ThreadingSupport"
+ Kind changed to "Property"
Added methods: + get_ThreadingSupport() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataThreading

Method: CreateDevice(Microsoft.WindowsAPICodePack.DirectX.DXGI.Adapter, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DriverType, System.String, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CreateDeviceFlag, Microsoft.WindowsAPICodePack.DirectX.Direct3D.FeatureLevel[]) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DDevice

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Adapter, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DriverType, System.String, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CreateDeviceOptions, Microsoft.WindowsAPICodePack.DirectX.Direct3D.FeatureLevel[]) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DDevice"

Method: CreateDeviceAndSwapChain(Microsoft.WindowsAPICodePack.DirectX.DXGI.Adapter, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DriverType, System.String, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CreateDeviceFlag, Microsoft.WindowsAPICodePack.DirectX.Direct3D.FeatureLevel[], Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChainDescription, Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChain&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DDevice

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Adapter, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DriverType, System.String, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CreateDeviceOptions, Microsoft.WindowsAPICodePack.DirectX.Direct3D.FeatureLevel[], Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapChainDescription) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DDevice"

Method: CreateDeviceAndSwapChain(System.IntPtr, Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChain&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DDevice

+ Signature changed to "(System.IntPtr) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DDevice"

Property: CreationFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CreateDeviceFlag

+ Renamed to "CreateDeviceOptions"

Method: get_CreationFlags() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CreateDeviceFlag

+ Renamed to "get_CreateDeviceOptions"
+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CreateDeviceOptions"

Property: ExceptionMode : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RaiseFlag

Method: get_ExceptionMode() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RaiseFlag

+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ExceptionErrors"

Method: set_ExceptionMode(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RaiseFlag) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ExceptionErrors) : System.Void"

Method: GetDXGIDevice() : Microsoft.WindowsAPICodePack.DirectX.DXGI.DXGIDevice

+ Renamed to "GraphicsDevice"
+ Kind changed to "Property"
Added methods: + get_GraphicsDevice() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Device

Method: GetFormatSupport(Microsoft.WindowsAPICodePack.DirectX.DXGI.Format) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FormatSupport

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FormatSupportOptions"

Method: GetImmediateContext() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DeviceContext

+ Renamed to "ImmediateContext"
+ Kind changed to "Property"
Added methods: + get_ImmediateContext() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DeviceContext

Method: GetInfoQueue() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.InfoQueue

+ Renamed to "InfoQueue"
+ Kind changed to "Property"
Added methods: + get_InfoQueue() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.InfoQueue

Method: GetMultisampleQualityLevels(Microsoft.WindowsAPICodePack.DirectX.DXGI.Format, System.UInt32) : System.UInt32

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, System.UInt32) : System.UInt32"

Method: GetSwitchToRef() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.SwitchToRef

+ Renamed to "SwitchToRef"
+ Kind changed to "Property"
Added methods: + get_SwitchToRef() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.SwitchToRef

Class: D3DPredicate

Added properties: + Context : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DeviceContext, WhenTrue : System.Boolean

Class: D3DResource

Added properties: + GraphicsSurface1 : Microsoft.WindowsAPICodePack.DirectX.Graphics.Surface1

Method: GetDXGISurface() : Microsoft.WindowsAPICodePack.DirectX.DXGI.Surface

+ Renamed to "GraphicsSurface"
+ Kind changed to "Property"
Added methods: + get_GraphicsSurface() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Surface

Property: Type : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ResourceDimension

+ Renamed to "ResourceDimension"

Method: get_Type() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ResourceDimension

+ Renamed to "get_ResourceDimension"

Enum: DebugFeature

+ Renamed to "DebugFeatures"

Field: Undefined

+ Renamed to "None"

Struct: DepthStencilDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilDescription) : System.Boolean

Field: BackFace : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilOperationDescription

+ Kind changed to "Property"
Added methods: + get_BackFace() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilOperationDescription, set_BackFace(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilOperationDescription) : System.Void

Field: DepthEnable : System.Boolean

+ Kind changed to "Property"
Added methods: + get_DepthEnable() : System.Boolean, set_DepthEnable(System.Boolean) : System.Void

Field: DepthFunction : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ComparisonFunction

+ Kind changed to "Property"
Added methods: + get_DepthFunction() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ComparisonFunction, set_DepthFunction(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ComparisonFunction) : System.Void

Field: DepthWriteMask : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthWriteMask

+ Kind changed to "Property"
Added methods: + get_DepthWriteMask() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthWriteMask, set_DepthWriteMask(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthWriteMask) : System.Void

Field: FrontFace : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilOperationDescription

+ Kind changed to "Property"
Added methods: + get_FrontFace() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilOperationDescription, set_FrontFace(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilOperationDescription) : System.Void

Field: StencilEnable : System.Boolean

+ Kind changed to "Property"
Added methods: + get_StencilEnable() : System.Boolean, set_StencilEnable(System.Boolean) : System.Void

Field: StencilReadMask : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.StencilReadMask

+ Kind changed to "Property"
Added methods: + get_StencilReadMask() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.StencilReadMask, set_StencilReadMask(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.StencilReadMask) : System.Void

Field: StencilWriteMask : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.StencilWriteMask

+ Kind changed to "Property"
Added methods: + get_StencilWriteMask() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.StencilWriteMask, set_StencilWriteMask(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.StencilWriteMask) : System.Void

Struct: DepthStencilOperationDescription

Added methods: + .ctor(D3D11_DEPTH_STENCILOP_DESC*) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilOperationDescription, Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilOperationDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilOperationDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilOperationDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilOperationDescription) : System.Boolean

Field: StencilDepthFailOperation : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.StencilOperation

+ Kind changed to "Property"
Added methods: + get_StencilDepthFailOperation() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.StencilOperation, set_StencilDepthFailOperation(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.StencilOperation) : System.Void

Field: StencilFailOperation : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.StencilOperation

+ Kind changed to "Property"
Added methods: + get_StencilFailOperation() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.StencilOperation, set_StencilFailOperation(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.StencilOperation) : System.Void

Field: StencilFunction : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ComparisonFunction

+ Kind changed to "Property"
Added methods: + get_StencilFunction() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ComparisonFunction, set_StencilFunction(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ComparisonFunction) : System.Void

Field: StencilPassOperation : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.StencilOperation

+ Kind changed to "Property"
Added methods: + get_StencilPassOperation() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.StencilOperation, set_StencilPassOperation(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.StencilOperation) : System.Void

Struct: DepthStencilViewDescription

Field: Flags : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilViewFlag

+ Renamed to "Options"
+ Kind changed to "Property"
Added methods: + get_Options() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilViewOptions, set_Options(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilViewOptions) : System.Void

Field: Format : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_Format() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_Format(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: Texture1D : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DDepthStencilView

+ Kind changed to "Property"
Added methods: + get_Texture1D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DDepthStencilView, set_Texture1D(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DDepthStencilView) : System.Void

Field: Texture1DArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayDepthStencilView

+ Kind changed to "Property"
Added methods: + get_Texture1DArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayDepthStencilView, set_Texture1DArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayDepthStencilView) : System.Void

Field: Texture2D : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DDepthStencilView

+ Kind changed to "Property"
Added methods: + get_Texture2D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DDepthStencilView, set_Texture2D(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DDepthStencilView) : System.Void

Field: Texture2DArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayDepthStencilView

+ Kind changed to "Property"
Added methods: + get_Texture2DArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayDepthStencilView, set_Texture2DArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayDepthStencilView) : System.Void

Field: Texture2DMultiSample : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultiSampleDepthStencilView

+ Renamed to "Texture2DMultisample"
+ Kind changed to "Property"
Added methods: + get_Texture2DMultisample() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleDepthStencilView, set_Texture2DMultisample(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleDepthStencilView) : System.Void

Field: Texture2DMultiSampleArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultiSampleArrayDepthStencilView

+ Renamed to "Texture2DMultisampleArray"
+ Kind changed to "Property"
Added methods: + get_Texture2DMultisampleArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleArrayDepthStencilView, set_Texture2DMultisampleArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleArrayDepthStencilView) : System.Void

Field: ViewDimension : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilViewDimension

+ Kind changed to "Property"
Added methods: + get_ViewDimension() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilViewDimension, set_ViewDimension(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilViewDimension) : System.Void

Enum: DepthStencilViewDimension

Field: Texture2DMultiSample

+ Renamed to "Texture2DMultisample"

Field: Texture2DMultiSampleArray

+ Renamed to "Texture2DMultisampleArray"

Enum: DepthStencilViewFlag

+ Renamed to "DepthStencilViewOptions"

Field: Undefined

+ Renamed to "None"

Enum: DepthWriteMask

Field: All

+ Renamed to "Enabled"

Field: Zero

+ Renamed to "None"

Class: DeviceChild

Method: GetDevice() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DDevice

+ Renamed to "Device"
+ Kind changed to "Property"
Added methods: + get_Device() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DDevice

Class: DeviceContext

Method: ClearDepthStencilView(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ClearFlag, System.Single, System.Byte) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ClearOptions, System.Single, System.Byte) : System.Void"

Method: ClearRenderTargetView(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RenderTargetView, Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgba) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgba) : System.Void"

Method: ClearUnorderedAccessViewUint(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.UnorderedAccessView, System.UInt32[]) : System.Void

+ Renamed to "ClearUnorderedAccessViewUInt32"

Property: ContextFlags : System.UInt32

+ Renamed to "ContextOptions"

Method: get_ContextFlags() : System.UInt32

+ Renamed to "get_ContextOptions"

Method: FinishCommandList(System.Boolean, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CommandList&) : System.Void

+ Signature changed to "(System.Boolean) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CommandList"

Method: GetData(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Asynchronous, System.IntPtr, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.AsyncGetDataFlag) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Asynchronous, System.IntPtr, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.AsyncGetDataOptions) : System.Void"

Method: GetPredication(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DPredicate&, System.Boolean&) : System.Void

+ Renamed to "Predication"
+ Kind changed to "Property"
Added methods: + get_Predication() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DPredicate, set_Predication(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DPredicate) : System.Void

Method: GetResourceMinLOD(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DResource) : System.Single

+ Renamed to "GetResourceMinimumLevelOfDetail"

Method: GetType() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DeviceContextType

+ Renamed to "DeviceContextType"
+ Kind changed to "Property"
Added methods: + get_DeviceContextType() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DeviceContextType

Method: Map(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DResource, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Map, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MapFlag, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MappedSubresource) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DResource, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Map, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MapOptions, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MappedSubresource) : System.Void"

Method: ResolveSubresource(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DResource, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DResource, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.DXGI.Format) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DResource, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DResource, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void"

Method: SetResourceMinLOD(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DResource, System.Single) : System.Void

+ Renamed to "SetResourceMinimumLevelOfDetail"

Class: DomainShaderPipelineStage

Method: GetShader() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DomainShader

+ Renamed to "Shader"
+ Kind changed to "Property"
Added methods: + get_Shader() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DomainShader, set_Shader(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DomainShader) : System.Void

Method: GetShader(System.UInt32, System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ClassInstance>&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DomainShader

+ Renamed to "GetShaderAndClasses"
+ Signature changed to "(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ShaderAndClasses<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DomainShader>"

Method: SetShader(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DomainShader) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ShaderAndClasses<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DomainShader>) : System.Void"

Enum: Feature

Field: D3d10XHardwareOptions

+ Renamed to "D3D10XHardwareOptions"

Field: FormatSupport2

+ Renamed to "ExtendedFormatSupport"

Struct: FeatureDataD3D10XHardwareOptions

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataD3D10XHardwareOptions, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataD3D10XHardwareOptions) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataD3D10XHardwareOptions, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataD3D10XHardwareOptions) : System.Boolean

Field: ComputeShadersPlusRawAndStructuredBuffersViaShader4x : System.Boolean

+ Kind changed to "Property"
Added methods: + get_ComputeShadersPlusRawAndStructuredBuffersViaShader4x() : System.Boolean, set_ComputeShadersPlusRawAndStructuredBuffersViaShader4x(System.Boolean) : System.Void

Struct: FeatureDataDoubles

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataDoubles, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataDoubles) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataDoubles, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataDoubles) : System.Boolean

Field: DoublePrecisionFloatShaderOperations : System.Boolean

+ Kind changed to "Property"
Added methods: + get_DoublePrecisionFloatShaderOperations() : System.Boolean, set_DoublePrecisionFloatShaderOperations(System.Boolean) : System.Void

Struct: FeatureDataFormatSupport

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataFormatSupport, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataFormatSupport) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataFormatSupport, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataFormatSupport) : System.Boolean

Field: InFormat : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_InFormat() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_InFormat(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: OutFormatSupport : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FormatSupport

+ Kind changed to "Property"
Added methods: + get_OutFormatSupport() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FormatSupportOptions, set_OutFormatSupport(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FormatSupportOptions) : System.Void

Struct: FeatureDataFormatSupport2

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataFormatSupport2, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataFormatSupport2) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataFormatSupport2, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataFormatSupport2) : System.Boolean

Field: InFormat : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_InFormat() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_InFormat(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: OutFormatSupport2 : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FormatSupport2

+ Kind changed to "Property"
Added methods: + get_OutFormatSupport2() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ExtendedFormatSupportOptions, set_OutFormatSupport2(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ExtendedFormatSupportOptions) : System.Void

Struct: FeatureDataThreading

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataThreading, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataThreading) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataThreading, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FeatureDataThreading) : System.Boolean

Field: DriverCommandLists : System.Boolean

+ Kind changed to "Property"
Added methods: + get_DriverCommandLists() : System.Boolean, set_DriverCommandLists(System.Boolean) : System.Void

Field: DriverConcurrentCreates : System.Boolean

+ Kind changed to "Property"
Added methods: + get_DriverConcurrentCreates() : System.Boolean, set_DriverConcurrentCreates(System.Boolean) : System.Void

Enum: FormatSupport

+ Renamed to "FormatSupportOptions"

Field: Mip

+ Renamed to "MipMap"

Field: MipAutoGeneration

+ Renamed to "MipMapAutoGeneration"

Field: MultiSampleRendertarget

+ Renamed to "MultisampleRenderTarget"

Field: Undefined

+ Renamed to "None"

Enum: FormatSupport2

+ Renamed to "ExtendedFormatSupportOptions"

Field: UnorderedAccessViewAtomicBitwiseOps

+ Renamed to "UnorderedAccessViewAtomicBitwiseOperations"

Class: GeometryShaderPipelineStage

Method: GetShader() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.GeometryShader

+ Renamed to "Shader"
+ Kind changed to "Property"
Added methods: + get_Shader() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.GeometryShader, set_Shader(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.GeometryShader) : System.Void

Method: GetShader(System.UInt32, System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ClassInstance>&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.GeometryShader

+ Renamed to "GetShaderAndClasses"
+ Signature changed to "(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ShaderAndClasses<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.GeometryShader>"

Method: SetShader(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.GeometryShader) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ShaderAndClasses<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.GeometryShader>) : System.Void"

Class: HullShaderPipelineStage

Method: GetShader() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.HullShader

+ Renamed to "Shader"
+ Kind changed to "Property"
Added methods: + get_Shader() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.HullShader, set_Shader(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.HullShader) : System.Void

Method: GetShader(System.UInt32, System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ClassInstance>&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.HullShader

+ Renamed to "GetShaderAndClasses"
+ Signature changed to "(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ShaderAndClasses<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.HullShader>"

Method: SetShader(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.HullShader) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ShaderAndClasses<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.HullShader>) : System.Void"

Class: InfoQueue

Property: NumMessagesAllowedByStorageFilter : System.UInt64

+ Renamed to "AllowedByStorageFilterCount"

Method: get_NumMessagesAllowedByStorageFilter() : System.UInt64

+ Renamed to "get_AllowedByStorageFilterCount"

Property: NumMessagesDeniedByStorageFilter : System.UInt64

+ Renamed to "DeniedByStorageFilterCount"

Method: get_NumMessagesDeniedByStorageFilter() : System.UInt64

+ Renamed to "get_DeniedByStorageFilterCount"

Property: NumMessagesDiscardedByMessageCountLimit : System.UInt64

+ Renamed to "DiscardedByMessageCountLimitCount"

Method: get_NumMessagesDiscardedByMessageCountLimit() : System.UInt64

+ Renamed to "get_DiscardedByMessageCountLimitCount"

Property: NumStoredMessages : System.UInt64

+ Renamed to "StoredCount"

Method: get_NumStoredMessages() : System.UInt64

+ Renamed to "get_StoredCount"

Property: NumStoredMessagesAllowedByRetrievalFilter : System.UInt64

+ Renamed to "StoredAllowedByRetrievalFilterCount"

Method: get_NumStoredMessagesAllowedByRetrievalFilter() : System.UInt64

+ Renamed to "get_StoredAllowedByRetrievalFilterCount"

Class: InputAssemblerPipelineStage

Removed methods: + GetIndexBuffer(Microsoft.WindowsAPICodePack.DirectX.DXGI.Format&, System.UInt32&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DBuffer, GetInputLayout() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.InputLayout, GetPrimitiveTopology() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.PrimitiveTopology, SetIndexBuffer(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DBuffer, Microsoft.WindowsAPICodePack.DirectX.DXGI.Format, System.UInt32) : System.Void, SetInputLayout(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.InputLayout) : System.Void, SetPrimitiveTopology(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.PrimitiveTopology) : System.Void
Added methods: + SetVertexBuffers(System.UInt32, System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.VertexBuffer>) : System.Void
Added properties: + IndexBuffer : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.IndexBuffer, InputLayout : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.InputLayout, PrimitiveTopology : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.PrimitiveTopology

Method: GetVertexBuffers(System.UInt32, System.UInt32, System.UInt32[]&, System.UInt32[]&) : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DBuffer>

+ Signature changed to "(System.UInt32, System.UInt32) : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.VertexBuffer>"

Struct: InputElementDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.InputElementDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.InputElementDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.InputElementDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.InputElementDescription) : System.Boolean

Field: AlignedByteOffset : System.UInt32

+ Kind changed to "Property"
Added methods: + get_AlignedByteOffset() : System.UInt32, set_AlignedByteOffset(System.UInt32) : System.Void

Field: Format : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_Format() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_Format(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: InputSlot : System.UInt32

+ Kind changed to "Property"
Added methods: + get_InputSlot() : System.UInt32, set_InputSlot(System.UInt32) : System.Void

Field: InputSlotClass : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.InputClassification

+ Kind changed to "Property"
Added methods: + get_InputSlotClass() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.InputClassification, set_InputSlotClass(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.InputClassification) : System.Void

Field: InstanceDataStepRate : System.UInt32

+ Kind changed to "Property"
Added methods: + get_InstanceDataStepRate() : System.UInt32, set_InstanceDataStepRate(System.UInt32) : System.Void

Field: SemanticIndex : System.UInt32

+ Kind changed to "Property"
Added methods: + get_SemanticIndex() : System.UInt32, set_SemanticIndex(System.UInt32) : System.Void

Field: SemanticName : System.String

+ Kind changed to "Property"
Added methods: + get_SemanticName() : System.String, set_SemanticName(System.String) : System.Void

Enum: MapFlag

+ Renamed to "MapOptions"

Field: Unspecified

+ Renamed to "None"

Struct: MappedSubresource

Field: Data : System.IntPtr

+ Kind changed to "Property"
Added methods: + get_Data() : System.IntPtr, set_Data(System.IntPtr) : System.Void

Field: DepthPitch : System.UInt32

+ Kind changed to "Property"
Added methods: + get_DepthPitch() : System.UInt32, set_DepthPitch(System.UInt32) : System.Void

Field: RowPitch : System.UInt32

+ Kind changed to "Property"
Added methods: + get_RowPitch() : System.UInt32, set_RowPitch(System.UInt32) : System.Void

Struct: Message

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Message, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Message) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Message, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Message) : System.Boolean

Field: Category : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MessageCategory

+ Kind changed to "Property"
Added methods: + get_Category() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MessageCategory, set_Category(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MessageCategory) : System.Void

Field: Description : System.String

+ Kind changed to "Property"
Added methods: + get_Description() : System.String, set_Description(System.String) : System.Void

Field: Id : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MessageId

+ Kind changed to "Property"
Added methods: + get_Id() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MessageId, set_Id(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MessageId) : System.Void

Field: Severity : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MessageSeverity

+ Kind changed to "Property"
Added methods: + get_Severity() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MessageSeverity, set_Severity(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MessageSeverity) : System.Void

Enum: MessageId

Field: BlendstateGetdescLegacy

+ Renamed to "BlendStateGetDescLegacy"

Field: BufferMapAlreadymapped

+ Renamed to "BufferMapAlreadyMapped"

Field: BufferMapDeviceremovedReturn

+ Renamed to "BufferMapDeviceRemovedReturn"

Field: BufferMapInvalidflags

+ Renamed to "BufferMapInvalidFlags"

Field: BufferMapInvalidmaptype

+ Renamed to "BufferMapInvalidMapType"

Field: BufferUnmapNotmapped

+ Renamed to "BufferUnmapNotMapped"

Field: CheckcounterOutofrangeCounter

+ Renamed to "CheckCounterOutOfRangeCounter"

Field: CheckcounterUnsupportedWellknownCounter

+ Renamed to "CheckCounterUnsupportedWellKnownCounter"

Field: CheckformatsupportFormatDeprecated

+ Renamed to "CheckFormatSupportFormatDeprecated"

Field: CheckmultisamplequalitylevelsFormatDeprecated

+ Renamed to "CheckMultisampleQualityLevelsFormatDeprecated"

Field: CleardepthstencilviewDenormflush

+ Renamed to "ClearDepthStencilViewDenormFlush"

Field: CleardepthstencilviewInvalid

+ Renamed to "ClearDepthStencilViewInvalid"

Field: ClearrendertargetviewDenormflush

+ Renamed to "ClearRenderTargetViewDenormFlush"

Field: CopyresourceInvaliddestinationstate

+ Renamed to "CopyResourceInvalidDestinationState"

Field: CopyresourceInvalidsource

+ Renamed to "CopyResourceInvalidSource"

Field: CopyresourceInvalidsourcestate

+ Renamed to "CopyResourceInvalidSourceState"

Field: CopysubresourceregionInvaliddestinationstate

+ Renamed to "CopySubresourceRegionInvalidDestinationState"

Field: CopysubresourceregionInvaliddestinationsubresource

+ Renamed to "CopySubresourceRegionInvalidDestinationSubresource"

Field: CopysubresourceregionInvalidsource

+ Renamed to "CopySubresourceRegionInvalidSource"

Field: CopysubresourceregionInvalidsourcebox

+ Renamed to "CopySubresourceRegionInvalidSourceBox"

Field: CopysubresourceregionInvalidsourcestate

+ Renamed to "CopySubresourceRegionInvalidSourceState"

Field: CopysubresourceregionInvalidsourcesubresource

+ Renamed to "CopySubresourceRegionInvalidSourceSubresource"

Field: CreateblendstateInvalidblendop

+ Renamed to "CreateBlendStateInvalidBlendOperation"

Field: CreateblendstateInvalidblendopalpha

+ Renamed to "CreateBlendStateInvalidBlendOperationAlpha"

Field: CreateblendstateInvaliddestblend

+ Renamed to "CreateBlendStateInvalidDestinationBlend"

Field: CreateblendstateInvaliddestblendalpha

+ Renamed to "CreateBlendStateInvalidDestinationBlendAlpha"

Field: CreateblendstateInvalidrendertargetwritemask

+ Renamed to "CreateBlendStateInvalidRenderTargetWriteMask"

Field: CreateblendstateInvalidsrcblend

+ Renamed to "CreateBlendStateInvalidSourceBlend"

Field: CreateblendstateInvalidsrcblendalpha

+ Renamed to "CreateBlendStateInvalidSourceBlendAlpha"

Field: CreateblendstateNulldesc

+ Renamed to "CreateBlendStateNullDesc"

Field: CreateblendstateToomanyobjects

+ Renamed to "CreateBlendStateTooManyObjects"

Field: CreatebufferInvalidargReturn

+ Renamed to "CreateBufferInvalidArgReturn"

Field: CreatebufferInvalidbindflags

+ Renamed to "CreateBufferInvalidBindFlags"

Field: CreatebufferInvalidconstantbufferbindings

+ Renamed to "CreateBufferInvalidConstantBufferBindings"

Field: CreatebufferInvalidcpuaccessflags

+ Renamed to "CreateBufferInvalidCpuAccessFlags"

Field: CreatebufferInvaliddimensions

+ Renamed to "CreateBufferInvalidDimensions"

Field: CreatebufferInvalidinitialdata

+ Renamed to "CreateBufferInvalidInitialData"

Field: CreatebufferInvalidmiplevels

+ Renamed to "CreateBufferInvalidMipLevels"

Field: CreatebufferInvalidmiscflags

+ Renamed to "CreateBufferInvalidMiscFlags"

Field: CreatebufferInvalidsamples

+ Renamed to "CreateBufferInvalidSamples"

Field: CreatebufferLargeallocation

+ Renamed to "CreateBufferLargeAllocation"

Field: CreatebufferNulldesc

+ Renamed to "CreateBufferNullDesc"

Field: CreatebufferOutofmemoryReturn

+ Renamed to "CreateBufferOutOfMemoryReturn"

Field: CreatebufferUnrecognizedbindflags

+ Renamed to "CreateBufferUnrecognizedBindFlags"

Field: CreatebufferUnrecognizedcpuaccessflags

+ Renamed to "CreateBufferUnrecognizedCpuAccessFlags"

Field: CreatebufferUnrecognizedformat

+ Renamed to "CreateBufferUnrecognizedFormat"

Field: CreatebufferUnrecognizedmiscflags

+ Renamed to "CreateBufferUnrecognizedMiscFlags"

Field: CreatebufferUnrecognizedusage

+ Renamed to "CreateBufferUnrecognizedUsage"

Field: CreatecounterNonexclusiveReturn

+ Renamed to "CreateCounterNonexclusiveReturn"

Field: CreatecounterNulldesc

+ Renamed to "CreateCounterNullDesc"

Field: CreatecounterOutofmemoryReturn

+ Renamed to "CreateCounterOutOfMemoryReturn"

Field: CreatecounterOutofrangeCounter

+ Renamed to "CreateCounterOutOfRangeCounter"

Field: CreatecounterSimultaneousActiveCountersExhausted

+ Renamed to "CreateCounterSimultaneousActiveCountersExhausted"

Field: CreatecounterUnsupportedWellknownCounter

+ Renamed to "CreateCounterUnsupportedWellKnownCounter"

Field: CreatedepthstencilstateInvalidbackfacestencilfailop

+ Renamed to "CreateDepthStencilStateInvalidBackFaceStencilFailOperation"

Field: CreatedepthstencilstateInvalidbackfacestencilfunc

+ Renamed to "CreateDepthStencilStateInvalidBackFaceStencilFunc"

Field: CreatedepthstencilstateInvalidbackfacestencilpassop

+ Renamed to "CreateDepthStencilStateInvalidBackFaceStencilPassOperation"

Field: CreatedepthstencilstateInvalidbackfacestencilzfailop

+ Renamed to "CreateDepthStencilStateInvalidBackFaceStencilZFailOperation"

Field: CreatedepthstencilstateInvaliddepthfunc

+ Renamed to "CreateDepthStencilStateInvalidDepthFunc"

Field: CreatedepthstencilstateInvaliddepthwritemask

+ Renamed to "CreateDepthStencilStateInvalidDepthWriteMask"

Field: CreatedepthstencilstateInvalidfrontfacestencilfailop

+ Renamed to "CreateDepthStencilStateInvalidFrontFaceStencilFailOperation"

Field: CreatedepthstencilstateInvalidfrontfacestencilfunc

+ Renamed to "CreateDepthStencilStateInvalidFrontFaceStencilFunc"

Field: CreatedepthstencilstateInvalidfrontfacestencilpassop

+ Renamed to "CreateDepthStencilStateInvalidFrontFaceStencilPassOperation"

Field: CreatedepthstencilstateInvalidfrontfacestencilzfailop

+ Renamed to "CreateDepthStencilStateInvalidFrontFaceStencilZFailOperation"

Field: CreatedepthstencilstateNulldesc

+ Renamed to "CreateDepthStencilStateNullDesc"

Field: CreatedepthstencilstateToomanyobjects

+ Renamed to "CreateDepthStencilStateTooManyObjects"

Field: CreatedepthstencilviewInvalidargReturn

+ Renamed to "CreateDepthStencilViewInvalidArgReturn"

Field: CreatedepthstencilviewInvaliddesc

+ Renamed to "CreateDepthStencilViewInvalidDesc"

Field: CreatedepthstencilviewInvaliddimensions

+ Renamed to "CreateDepthStencilViewInvalidDimensions"

Field: CreatedepthstencilviewInvalidformat

+ Renamed to "CreateDepthStencilViewInvalidFormat"

Field: CreatedepthstencilviewInvalidresource

+ Renamed to "CreateDepthStencilViewInvalidResource"

Field: CreatedepthstencilviewOutofmemoryReturn

+ Renamed to "CreateDepthStencilViewOutOfMemoryReturn"

Field: CreatedepthstencilviewToomanyobjects

+ Renamed to "CreateDepthStencilViewTooManyObjects"

Field: CreatedepthstencilviewUnrecognizedformat

+ Renamed to "CreateDepthStencilViewUnrecognizedFormat"

Field: CreategeometryshaderInvalidshaderbytecode

+ Renamed to "CreateGeometryShaderInvalidShaderBytecode"

Field: CreategeometryshaderInvalidshadertype

+ Renamed to "CreateGeometryShaderInvalidShaderType"

Field: CreategeometryshaderOutofmemory

+ Renamed to "CreateGeometryShaderOutOfMemory"

Field: CreategeometryshaderwithstreamoutputCanthaveonlygaps

+ Renamed to "CreateGeometryShaderWithStreamOutputCannotHaveOnlyGaps"

Field: CreategeometryshaderwithstreamoutputDecltoocomplex

+ Renamed to "CreateGeometryShaderWithStreamOutputDeclTooComplex"

Field: CreategeometryshaderwithstreamoutputExpecteddecl

+ Renamed to "CreateGeometryShaderWithStreamOutputExpectedDecl"

Field: CreategeometryshaderwithstreamoutputInvalidcomponentcount

+ Renamed to "CreateGeometryShaderWithStreamOutputInvalidComponentCount"

Field: CreategeometryshaderwithstreamoutputInvalidgapdefinition

+ Renamed to "CreateGeometryShaderWithStreamOutputInvalidGapDefinition"

Field: CreategeometryshaderwithstreamoutputInvalidnumentries

+ Renamed to "CreateGeometryShaderWithStreamOutputInvalidNumEntries"

Field: CreategeometryshaderwithstreamoutputInvalidoutputslot

+ Renamed to "CreateGeometryShaderWithStreamOutputInvalidOutputSlot"

Field: CreategeometryshaderwithstreamoutputInvalidoutputstreamstride

+ Renamed to "CreateGeometryShaderWithStreamOutputInvalidOutputStreamStride"

Field: CreategeometryshaderwithstreamoutputInvalidshaderbytecode

+ Renamed to "CreateGeometryShaderWithStreamOutputInvalidShaderBytecode"

Field: CreategeometryshaderwithstreamoutputInvalidshadertype

+ Renamed to "CreateGeometryShaderWithStreamOutputInvalidShaderType"

Field: CreategeometryshaderwithstreamoutputInvalidstartcomponentandcomponentcount

+ Renamed to "CreateGeometryShaderWithStreamOutputInvalidStartComponentAndComponentCount"

Field: CreategeometryshaderwithstreamoutputMaskmismatch

+ Renamed to "CreateGeometryShaderWithStreamOutputMaskMismatch"

Field: CreategeometryshaderwithstreamoutputMissingoutputsignature

+ Renamed to "CreateGeometryShaderWithStreamOutputMissingOutputSignature"

Field: CreategeometryshaderwithstreamoutputMissingsemantic

+ Renamed to "CreateGeometryShaderWithStreamOutputMissingSemantic"

Field: CreategeometryshaderwithstreamoutputOnlyoneelementperslot

+ Renamed to "CreateGeometryShaderWithStreamOutputOnlyOneElementPerSlot"

Field: CreategeometryshaderwithstreamoutputOutofmemory

+ Renamed to "CreateGeometryShaderWithStreamOutputOutOfMemory"

Field: CreategeometryshaderwithstreamoutputOutputslot0expected

+ Renamed to "CreateGeometryShaderWithStreamOutputOutputSlot0Expected"

Field: CreategeometryshaderwithstreamoutputOutputstreamstrideunused

+ Renamed to "CreateGeometryShaderWithStreamOutputOutputStreamStrideUnused"

Field: CreategeometryshaderwithstreamoutputRepeatedoutput

+ Renamed to "CreateGeometryShaderWithStreamOutputRepeatedOutput"

Field: CreategeometryshaderwithstreamoutputTrailingDigitInSemantic

+ Renamed to "CreateGeometryShaderWithStreamOutputTrailingDigitInSemantic"

Field: CreategeometryshaderwithstreamoutputUnexpecteddecl

+ Renamed to "CreateGeometryShaderWithStreamOutputUnexpectedDecl"

Field: CreateinputlayoutDuplicatesemantic

+ Renamed to "CreateInputLayoutDuplicateSemantic"

Field: CreateinputlayoutIncompatibleformat

+ Renamed to "CreateInputLayoutIncompatibleFormat"

Field: CreateinputlayoutInvalidalignment

+ Renamed to "CreateInputLayoutInvalidAlignment"

Field: CreateinputlayoutInvalidformat

+ Renamed to "CreateInputLayoutInvalidFormat"

Field: CreateinputlayoutInvalidinputslotclass

+ Renamed to "CreateInputLayoutInvalidInputSlotClass"

Field: CreateinputlayoutInvalidslot

+ Renamed to "CreateInputLayoutInvalidSlot"

Field: CreateinputlayoutInvalidslotclasschange

+ Renamed to "CreateInputLayoutInvalidSlotClassChange"

Field: CreateinputlayoutInvalidstepratechange

+ Renamed to "CreateInputLayoutInvalidStepRateChange"

Field: CreateinputlayoutMissingelement

+ Renamed to "CreateInputLayoutMissingElement"

Field: CreateinputlayoutNulldesc

+ Renamed to "CreateInputLayoutNullDesc"

Field: CreateinputlayoutNullsemantic

+ Renamed to "CreateInputLayoutNullSemantic"

Field: CreateinputlayoutOutofmemory

+ Renamed to "CreateInputLayoutOutOfMemory"

Field: CreateinputlayoutSteprateslotclassmismatch

+ Renamed to "CreateInputLayoutStepRateSlotClassMismatch"

Field: CreateinputlayoutToomanyelements

+ Renamed to "CreateInputLayoutTooManyElements"

Field: CreateinputlayoutTrailingDigitInSemantic

+ Renamed to "CreateInputLayoutTrailingDigitInSemantic"

Field: CreateinputlayoutTypeMismatch

+ Renamed to "CreateInputLayoutTypeMismatch"

Field: CreateinputlayoutUnparseableinputsignature

+ Renamed to "CreateInputLayoutUnparsableInputSignature"

Field: CreatepixelshaderInvalidshaderbytecode

+ Renamed to "CreatePixelShaderInvalidShaderBytecode"

Field: CreatepixelshaderInvalidshadertype

+ Renamed to "CreatePixelShaderInvalidShaderType"

Field: CreatepixelshaderOutofmemory

+ Renamed to "CreatePixelShaderOutOfMemory"

Field: CreatepredicateOutofmemoryReturn

+ Renamed to "CreatePredicateOutOfMemoryReturn"

Field: CreatequeryorpredicateInvalidmiscflags

+ Renamed to "CreateQueryOrPredicateInvalidMiscFlags"

Field: CreatequeryorpredicateInvalidquery

+ Renamed to "CreateQueryOrPredicateInvalidQuery"

Field: CreatequeryorpredicateNulldesc

+ Renamed to "CreateQueryOrPredicateNullDesc"

Field: CreatequeryorpredicateUnexpectedmiscflag

+ Renamed to "CreateQueryOrPredicateUnexpectedMiscFlag"

Field: CreatequeryOutofmemoryReturn

+ Renamed to "CreateQueryOutOfMemoryReturn"

Field: CreaterasterizerstateInvalidcullmode

+ Renamed to "CreateRasterizerStateInvalidCullMode"

Field: CreaterasterizerstateInvaliddepthbiasclamp

+ Renamed to "CreateRasterizerStateInvalidDepthBiasClamp"

Field: CreaterasterizerstateInvalidfillmode

+ Renamed to "CreateRasterizerStateInvalidFillMode"

Field: CreaterasterizerstateInvalidslopescaleddepthbias

+ Renamed to "CreateRasterizerStateInvalidSlopeScaledDepthBias"

Field: CreaterasterizerstateNulldesc

+ Renamed to "CreateRasterizerStateNullDesc"

Field: CreaterasterizerstateToomanyobjects

+ Renamed to "CreateRasterizerStateTooManyObjects"

Field: CreaterendertargetviewInvalidargReturn

+ Renamed to "CreateRenderTargetViewInvalidArgReturn"

Field: CreaterendertargetviewInvaliddesc

+ Renamed to "CreateRenderTargetViewInvalidDesc"

Field: CreaterendertargetviewInvaliddimensions

+ Renamed to "CreateRenderTargetViewInvalidDimensions"

Field: CreaterendertargetviewInvalidformat

+ Renamed to "CreateRenderTargetViewInvalidFormat"

Field: CreaterendertargetviewInvalidresource

+ Renamed to "CreateRenderTargetViewInvalidResource"

Field: CreaterendertargetviewOutofmemoryReturn

+ Renamed to "CreateRenderTargetViewOutOfMemoryReturn"

Field: CreaterendertargetviewToomanyobjects

+ Renamed to "CreateRenderTargetViewTooManyObjects"

Field: CreaterendertargetviewUnrecognizedformat

+ Renamed to "CreateRenderTargetViewUnrecognizedFormat"

Field: CreaterendertargetviewUnsupportedformat

+ Renamed to "CreateRenderTargetViewUnsupportedFormat"

Field: CreatesamplerstateInvalidaddressu

+ Renamed to "CreateSamplerStateInvalidAddressU"

Field: CreatesamplerstateInvalidaddressv

+ Renamed to "CreateSamplerStateInvalidAddressV"

Field: CreatesamplerstateInvalidaddressw

+ Renamed to "CreateSamplerStateInvalidAddressW"

Field: CreatesamplerstateInvalidcomparisonfunc

+ Renamed to "CreateSamplerStateInvalidComparisonFunc"

Field: CreatesamplerstateInvalidfilter

+ Renamed to "CreateSamplerStateInvalidFilter"

Field: CreatesamplerstateInvalidmaxanisotropy

+ Renamed to "CreateSamplerStateInvalidMaxAnisotropy"

Field: CreatesamplerstateInvalidmaxlod

+ Renamed to "CreateSamplerStateInvalidMaxLod"

Field: CreatesamplerstateInvalidminlod

+ Renamed to "CreateSamplerStateInvalidMinLod"

Field: CreatesamplerstateInvalidmiplodbias

+ Renamed to "CreateSamplerStateInvalidMipLodBias"

Field: CreatesamplerstateNulldesc

+ Renamed to "CreateSamplerStateNullDesc"

Field: CreatesamplerstateToomanyobjects

+ Renamed to "CreateSamplerStateTooManyObjects"

Field: CreateshaderresourceviewInvalidargReturn

+ Renamed to "CreateShaderResourceViewInvalidArgReturn"

Field: CreateshaderresourceviewInvaliddesc

+ Renamed to "CreateShaderResourceViewInvalidDesc"

Field: CreateshaderresourceviewInvaliddimensions

+ Renamed to "CreateShaderResourceViewInvalidDimensions"

Field: CreateshaderresourceviewInvalidformat

+ Renamed to "CreateShaderResourceViewInvalidFormat"

Field: CreateshaderresourceviewInvalidresource

+ Renamed to "CreateShaderResourceViewInvalidResource"

Field: CreateshaderresourceviewOutofmemoryReturn

+ Renamed to "CreateShaderResourceViewOutOfMemoryReturn"

Field: CreateshaderresourceviewToomanyobjects

+ Renamed to "CreateShaderResourceViewTooManyObjects"

Field: CreateshaderresourceviewUnrecognizedformat

+ Renamed to "CreateShaderResourceViewUnrecognizedFormat"

Field: Createtexture1dInvalidargReturn

+ Renamed to "CreateTexture1DInvalidArgReturn"

Field: Createtexture1dInvalidbindflags

+ Renamed to "CreateTexture1DInvalidBindFlags"

Field: Createtexture1dInvalidcpuaccessflags

+ Renamed to "CreateTexture1DInvalidCpuAccessFlags"

Field: Createtexture1dInvaliddimensions

+ Renamed to "CreateTexture1DInvalidDimensions"

Field: Createtexture1dInvalidinitialdata

+ Renamed to "CreateTexture1DInvalidInitialData"

Field: Createtexture1dInvalidmiplevels

+ Renamed to "CreateTexture1DInvalidMipLevels"

Field: Createtexture1dInvalidmiscflags

+ Renamed to "CreateTexture1DInvalidMiscFlags"

Field: Createtexture1dInvalidsamples

+ Renamed to "CreateTexture1DInvalidSamples"

Field: Createtexture1dLargeallocation

+ Renamed to "CreateTexture1DLargeAllocation"

Field: Createtexture1dNulldesc

+ Renamed to "CreateTexture1DNullDesc"

Field: Createtexture1dOutofmemoryReturn

+ Renamed to "CreateTexture1DOutOfMemoryReturn"

Field: Createtexture1dUnrecognizedbindflags

+ Renamed to "CreateTexture1DUnrecognizedBindFlags"

Field: Createtexture1dUnrecognizedcpuaccessflags

+ Renamed to "CreateTexture1DUnrecognizedCpuAccessFlags"

Field: Createtexture1dUnrecognizedformat

+ Renamed to "CreateTexture1DUnrecognizedFormat"

Field: Createtexture1dUnrecognizedmiscflags

+ Renamed to "CreateTexture1DUnrecognizedMiscFlags"

Field: Createtexture1dUnrecognizedusage

+ Renamed to "CreateTexture1DUnrecognizedUsage"

Field: Createtexture1dUnsupportedformat

+ Renamed to "CreateTexture1DUnsupportedFormat"

Field: Createtexture2dInvalidargReturn

+ Renamed to "CreateTexture2DInvalidArgReturn"

Field: Createtexture2dInvalidbindflags

+ Renamed to "CreateTexture2DInvalidBindFlags"

Field: Createtexture2dInvalidcpuaccessflags

+ Renamed to "CreateTexture2DInvalidCpuAccessFlags"

Field: Createtexture2dInvaliddimensions

+ Renamed to "CreateTexture2DInvalidDimensions"

Field: Createtexture2dInvalidinitialdata

+ Renamed to "CreateTexture2DInvalidInitialData"

Field: Createtexture2dInvalidmiplevels

+ Renamed to "CreateTexture2DInvalidMipLevels"

Field: Createtexture2dInvalidmiscflags

+ Renamed to "CreateTexture2DInvalidMiscFlags"

Field: Createtexture2dInvalidsamples

+ Renamed to "CreateTexture2DInvalidSamples"

Field: Createtexture2dLargeallocation

+ Renamed to "CreateTexture2DLargeAllocation"

Field: Createtexture2dNulldesc

+ Renamed to "CreateTexture2DNullDesc"

Field: Createtexture2dOutofmemoryReturn

+ Renamed to "CreateTexture2DOutOfMemoryReturn"

Field: Createtexture2dUnrecognizedbindflags

+ Renamed to "CreateTexture2DUnrecognizedBindFlags"

Field: Createtexture2dUnrecognizedcpuaccessflags

+ Renamed to "CreateTexture2DUnrecognizedCpuAccessFlags"

Field: Createtexture2dUnrecognizedformat

+ Renamed to "CreateTexture2DUnrecognizedFormat"

Field: Createtexture2dUnrecognizedmiscflags

+ Renamed to "CreateTexture2DUnrecognizedMiscFlags"

Field: Createtexture2dUnrecognizedusage

+ Renamed to "CreateTexture2DUnrecognizedUsage"

Field: Createtexture2dUnsupportedformat

+ Renamed to "CreateTexture2DUnsupportedFormat"

Field: Createtexture3dInvalidargReturn

+ Renamed to "CreateTexture3DInvalidArgReturn"

Field: Createtexture3dInvalidbindflags

+ Renamed to "CreateTexture3DInvalidBindFlags"

Field: Createtexture3dInvalidcpuaccessflags

+ Renamed to "CreateTexture3DInvalidCpuAccessFlags"

Field: Createtexture3dInvaliddimensions

+ Renamed to "CreateTexture3DInvalidDimensions"

Field: Createtexture3dInvalidinitialdata

+ Renamed to "CreateTexture3DInvalidInitialData"

Field: Createtexture3dInvalidmiplevels

+ Renamed to "CreateTexture3DInvalidMipLevels"

Field: Createtexture3dInvalidmiscflags

+ Renamed to "CreateTexture3DInvalidMiscFlags"

Field: Createtexture3dInvalidsamples

+ Renamed to "CreateTexture3DInvalidSamples"

Field: Createtexture3dLargeallocation

+ Renamed to "CreateTexture3DLargeAllocation"

Field: Createtexture3dNulldesc

+ Renamed to "CreateTexture3DNullDesc"

Field: Createtexture3dOutofmemoryReturn

+ Renamed to "CreateTexture3DOutOfMemoryReturn"

Field: Createtexture3dUnrecognizedbindflags

+ Renamed to "CreateTexture3DUnrecognizedBindFlags"

Field: Createtexture3dUnrecognizedcpuaccessflags

+ Renamed to "CreateTexture3DUnrecognizedCpuAccessFlags"

Field: Createtexture3dUnrecognizedformat

+ Renamed to "CreateTexture3DUnrecognizedFormat"

Field: Createtexture3dUnrecognizedmiscflags

+ Renamed to "CreateTexture3DUnrecognizedMiscFlags"

Field: Createtexture3dUnrecognizedusage

+ Renamed to "CreateTexture3DUnrecognizedUsage"

Field: Createtexture3dUnsupportedformat

+ Renamed to "CreateTexture3DUnsupportedFormat"

Field: CreatevertexshaderInvalidshaderbytecode

+ Renamed to "CreateVertexShaderInvalidShaderBytecode"

Field: CreatevertexshaderInvalidshadertype

+ Renamed to "CreateVertexShaderInvalidShaderType"

Field: CreatevertexshaderOutofmemory

+ Renamed to "CreateVertexShaderOutOfMemory"

Field: DeviceDrawGsInputPrimitiveMismatch

+ Renamed to "DeviceDrawGSInputPrimitiveMismatch"

Field: DeviceDrawindexedIndexposOverflow

+ Renamed to "DeviceDrawIndexedIndexPosOverflow"

Field: DeviceDrawindexedinstancedIndexposOverflow

+ Renamed to "DeviceDrawIndexedInstancedIndexPosOverflow"

Field: DeviceDrawindexedinstancedInstanceposOverflow

+ Renamed to "DeviceDrawIndexedInstancedInstancePosOverflow"

Field: DeviceDrawInputlayoutNotSet

+ Renamed to "DeviceDrawInputLayoutNotSet"

Field: DeviceDrawinstancedInstanceposOverflow

+ Renamed to "DeviceDrawInstancedInstancePosOverflow"

Field: DeviceDrawinstancedVertexposOverflow

+ Renamed to "DeviceDrawInstancedVertexPosOverflow"

Field: DeviceDrawInvalidPrimitivetopology

+ Renamed to "DeviceDrawInvalidPrimitiveTopology"

Field: DeviceDrawOmDualSourceBlendingCanOnlyHaveRenderTarget_0

+ Renamed to "DeviceDrawOMDualSourceBlendingCanOnlyHaveRenderTargetZero"

Field: DeviceDrawOmRenderTargetDoesNotSupportBlending

+ Renamed to "DeviceDrawOMRenderTargetDoesNotSupportBlending"

Field: DeviceDrawPsOutputTypeMismatch

+ Renamed to "DeviceDrawPSOutputTypeMismatch"

Field: DeviceDrawResourceFormatLdUnsupported

+ Renamed to "DeviceDrawResourceFormatLDUnsupported"

Field: DeviceDrawShaderresourceviewNotSet

+ Renamed to "DeviceDrawShaderResourceViewNotSet"

Field: DeviceDrawVertexposOverflow

+ Renamed to "DeviceDrawVertexPosOverflow"

Field: DeviceGeneratemipsResourceInvalid

+ Renamed to "DeviceGenerateMipsResourceInvalid"

Field: DeviceGsgetconstantbuffersBuffersEmpty

+ Renamed to "DeviceGSGetConstantBuffersBuffersEmpty"

Field: DeviceGsgetsamplersSamplersEmpty

+ Renamed to "DeviceGSGetSamplersSamplersEmpty"

Field: DeviceGsgetshaderresourcesViewsEmpty

+ Renamed to "DeviceGSGetShaderResourcesViewsEmpty"

Field: DeviceGssetconstantbuffersBuffersEmpty

+ Renamed to "DeviceGSSetConstantBuffersBuffersEmpty"

Field: DeviceGssetconstantbuffersHazard

+ Renamed to "DeviceGSSetConstantBuffersHazard"

Field: DeviceGssetsamplersSamplersEmpty

+ Renamed to "DeviceGSSetSamplersSamplersEmpty"

Field: DeviceGssetshaderresourcesHazard

+ Renamed to "DeviceGSSetShaderResourcesHazard"

Field: DeviceGssetshaderresourcesViewsEmpty

+ Renamed to "DeviceGSSetShaderResourcesViewsEmpty"

Field: DeviceIagetvertexbuffersBuffersEmpty

+ Renamed to "DeviceIAGetVertexBuffersBuffersEmpty"

Field: DeviceIasetindexbufferFormatInvalid

+ Renamed to "DeviceIASetIndexBufferFormatInvalid"

Field: DeviceIasetindexbufferHazard

+ Renamed to "DeviceIASetIndexBufferHazard"

Field: DeviceIasetindexbufferOffsetTooLarge

+ Renamed to "DeviceIASetIndexBufferOffsetTooLarge"

Field: DeviceIasetindexbufferOffsetUnaligned

+ Renamed to "DeviceIASetIndexBufferOffsetUnaligned"

Field: DeviceIasetprimitivetopologyTopologyUndefined

+ Renamed to "DeviceIASetPrimitiveTopologyTopologyUndefined"

Field: DeviceIasetprimitivetopologyTopologyUnrecognized

+ Renamed to "DeviceIASetPrimitiveTopologyTopologyUnrecognized"

Field: DeviceIasetvertexbuffersBuffersEmpty

+ Renamed to "DeviceIASetVertexBuffersBuffersEmpty"

Field: DeviceIasetvertexbuffersHazard

+ Renamed to "DeviceIASetVertexBuffersHazard"

Field: DeviceIasetvertexbuffersOffsetTooLarge

+ Renamed to "DeviceIASetVertexBuffersOffsetTooLarge"

Field: DeviceOmsetrendertargetsHazard

+ Renamed to "DeviceOMSetRenderTargetsHazard"

Field: DeviceOpenSharedResourceBadinterfaceReturn

+ Renamed to "DeviceOpenSharedResourceBadInterfaceReturn"

Field: DeviceOpenSharedResourceInvalidargReturn

+ Renamed to "DeviceOpenSharedResourceInvalidArgReturn"

Field: DeviceOpenSharedResourceOutofmemoryReturn

+ Renamed to "DeviceOpenSharedResourceOutOfMemoryReturn"

Field: DevicePsgetconstantbuffersBuffersEmpty

+ Renamed to "DevicePSGetConstantBuffersBuffersEmpty"

Field: DevicePsgetsamplersSamplersEmpty

+ Renamed to "DevicePSGetSamplersSamplersEmpty"

Field: DevicePsgetshaderresourcesViewsEmpty

+ Renamed to "DevicePSGetShaderResourcesViewsEmpty"

Field: DevicePssetconstantbuffersBuffersEmpty

+ Renamed to "DevicePSSetConstantBuffersBuffersEmpty"

Field: DevicePssetconstantbuffersHazard

+ Renamed to "DevicePSSetConstantBuffersHazard"

Field: DevicePssetsamplersSamplersEmpty

+ Renamed to "DevicePSSetSamplersSamplersEmpty"

Field: DevicePssetshaderresourcesHazard

+ Renamed to "DevicePSSetShaderResourcesHazard"

Field: DevicePssetshaderresourcesViewsEmpty

+ Renamed to "DevicePSSetShaderResourcesViewsEmpty"

Field: DeviceResolvesubresourceDestinationInvalid

+ Renamed to "DeviceResolveSubresourceDestinationInvalid"

Field: DeviceResolvesubresourceDestinationSubresourceInvalid

+ Renamed to "DeviceResolveSubresourceDestinationSubresourceInvalid"

Field: DeviceResolvesubresourceFormatInvalid

+ Renamed to "DeviceResolveSubresourceFormatInvalid"

Field: DeviceResolvesubresourceSourceInvalid

+ Renamed to "DeviceResolveSubresourceSourceInvalid"

Field: DeviceResolvesubresourceSourceSubresourceInvalid

+ Renamed to "DeviceResolveSubresourceSourceSubresourceInvalid"

Field: DeviceRsgetscissorrectsRectsEmpty

+ Renamed to "DeviceRSGetScissorRectsRectsEmpty"

Field: DeviceRsgetviewportsViewportsEmpty

+ Renamed to "DeviceRSGetViewportsViewportsEmpty"

Field: DeviceRssetscissorrectsInvalidscissor

+ Renamed to "DeviceRSSetScissorRectsInvalidScissor"

Field: DeviceRssetviewportsDenormflush

+ Renamed to "DeviceRSSetViewportsDenormFlush"

Field: DeviceRssetviewportsInvalidviewport

+ Renamed to "DeviceRSSetViewportsInvalidViewport"

Field: DeviceSettextfiltersizeInvaliddimensions

+ Renamed to "DeviceSetTextFilterSizeInvalidDimensions"

Field: DeviceShaderLinkageComponenttype

+ Renamed to "DeviceShaderLinkageComponentType"

Field: DeviceShaderLinkageNeverwrittenAlwaysreads

+ Renamed to "DeviceShaderLinkageNeverWrittenAlwaysReads"

Field: DeviceShaderLinkageRegisterindex

+ Renamed to "DeviceShaderLinkageRegisterIndex"

Field: DeviceShaderLinkageRegistermask

+ Renamed to "DeviceShaderLinkageRegisterMask"

Field: DeviceShaderLinkageSemanticnameNotFound

+ Renamed to "DeviceShaderLinkageSemanticNameNotFound"

Field: DeviceShaderLinkageSystemvalue

+ Renamed to "DeviceShaderLinkageSystemValue"

Field: DeviceSogettargetsBuffersEmpty

+ Renamed to "DeviceSoGetTargetsBuffersEmpty"

Field: DeviceSosettargetsHazard

+ Renamed to "DeviceSOSetTargetsHazard"

Field: DeviceSosettargetsOffsetUnaligned

+ Renamed to "DeviceSoSetTargetsOffsetUnaligned"

Field: DeviceVsgetconstantbuffersBuffersEmpty

+ Renamed to "DeviceVSGetConstantBuffersBuffersEmpty"

Field: DeviceVsgetsamplersSamplersEmpty

+ Renamed to "DeviceVSGetSamplersSamplersEmpty"

Field: DeviceVsgetshaderresourcesViewsEmpty

+ Renamed to "DeviceVSGetShaderResourcesViewsEmpty"

Field: DeviceVssetconstantbuffersBuffersEmpty

+ Renamed to "DeviceVSSetConstantBuffersBuffersEmpty"

Field: DeviceVssetconstantbuffersHazard

+ Renamed to "DeviceVSSetConstantBuffersHazard"

Field: DeviceVssetsamplersSamplersEmpty

+ Renamed to "DeviceVSSetSamplersSamplersEmpty"

Field: DeviceVssetshaderresourcesHazard

+ Renamed to "DeviceVSSetShaderResourcesHazard"

Field: DeviceVssetshaderresourcesViewsEmpty

+ Renamed to "DeviceVSSetShaderResourcesViewsEmpty"

Field: GetprivatedataMoredata

+ Renamed to "GetPrivateDataMoreData"

Field: GssetconstantbuffersInvalidbuffer

+ Renamed to "GSSetConstantBuffersInvalidBuffer"

Field: GssetconstantbuffersUnbinddeletingobject

+ Renamed to "GSSetConstantBuffersUnbindDeletingObject"

Field: GssetsamplersUnbinddeletingobject

+ Renamed to "GSSetSamplersUnbindDeletingObject"

Field: GssetshaderresourcesUnbinddeletingobject

+ Renamed to "GSSetShaderResourcesUnbindDeletingObject"

Field: GssetshaderUnbinddeletingobject

+ Renamed to "GSSetShaderUnbindDeletingObject"

Field: IasetindexbufferInvalidbuffer

+ Renamed to "IASetIndexBufferInvalidBuffer"

Field: IasetindexbufferUnbinddeletingobject

+ Renamed to "IASetIndexBufferUnbindDeletingObject"

Field: IasetinputlayoutUnbinddeletingobject

+ Renamed to "IASetInputLayoutUnbindDeletingObject"

Field: IasetvertexbuffersInvalidbuffer

+ Renamed to "IASetVertexBuffersInvalidBuffer"

Field: IasetvertexbuffersUnbinddeletingobject

+ Renamed to "IASetVertexBuffersUnbindDeletingObject"

Field: MessageReportingOutofmemory

+ Renamed to "MessageReportingOutOfMemory"

Field: OmsetblendstateUnbinddeletingobject

+ Renamed to "OMSetBlendStateUnbindDeletingObject"

Field: OmsetdepthstencilstateUnbinddeletingobject

+ Renamed to "OMSetDepthStencilStateUnbindDeletingObject"

Field: OmsetrendertargetsInvalidview

+ Renamed to "OMSetRenderTargetsInvalidView"

Field: OmsetrendertargetsUnbinddeletingobject

+ Renamed to "OMSetRenderTargetsUnbindDeletingObject"

Field: PssetconstantbuffersInvalidbuffer

+ Renamed to "PSSetConstantBuffersInvalidBuffer"

Field: PssetconstantbuffersUnbinddeletingobject

+ Renamed to "PSSetConstantBuffersUnbindDeletingObject"

Field: PssetsamplersUnbinddeletingobject

+ Renamed to "PSSetSamplersUnbindDeletingObject"

Field: PssetshaderresourcesUnbinddeletingobject

+ Renamed to "PSSetShaderResourcesUnbindDeletingObject"

Field: PssetshaderUnbinddeletingobject

+ Renamed to "PSSetShaderUnbindDeletingObject"

Field: QueryGetdataInvalidCall

+ Renamed to "QueryGetDataInvalidCall"

Field: QueryGetdataInvalidDatasize

+ Renamed to "QueryGetDataInvalidDataSize"

Field: QueryGetdataInvalidFlags

+ Renamed to "QueryGetDataInvalidFlags"

Field: RefKmdriverException

+ Renamed to "RefKernelModeDriverException"

Field: RefUmdriverException

+ Renamed to "RefUserModeDriverException"

Field: RssetstateUnbinddeletingobject

+ Renamed to "RSSetStateUnbindDeletingObject"

Field: SetexceptionmodeDeviceremovedReturn

+ Renamed to "SetExceptionModeDeviceRemovedReturn"

Field: SetexceptionmodeInvalidargReturn

+ Renamed to "SetExceptionModeInvalidArgReturn"

Field: SetexceptionmodeUnrecognizedflags

+ Renamed to "SetExceptionModeUnrecognizedFlags"

Field: SetpredicationInvalidPredicateState

+ Renamed to "SetPredicationInvalidPredicateState"

Field: SetpredicationUnbinddeletingobject

+ Renamed to "SetPredicationUnbindDeletingObject"

Field: SetprivatedataChangingparams

+ Renamed to "SetPrivateDataChangingParams"

Field: SetprivatedataInvalidflags

+ Renamed to "SetPrivateDataInvalidFlags"

Field: SetprivatedataInvalidfreedata

+ Renamed to "SetPrivateDataInvalidFreeData"

Field: SetprivatedataInvalidiunknown

+ Renamed to "SetPrivateDataInvalidIUnknown"

Field: SetprivatedataOutofmemory

+ Renamed to "SetPrivateDataOutOfMemory"

Field: ShaderresourceviewGetdescLegacy

+ Renamed to "ShaderResourceViewGetDescLegacy"

Field: SosettargetsInvalidbuffer

+ Renamed to "SoSetTargetsInvalidBuffer"

Field: SosettargetsUnbinddeletingobject

+ Renamed to "SOSetTargetsUnbindDeletingObject"

Field: Texture1dMapAlreadymapped

+ Renamed to "Texture1DMapAlreadyMapped"

Field: Texture1dMapDeviceremovedReturn

+ Renamed to "Texture1DMapDeviceRemovedReturn"

Field: Texture1dMapInvalidflags

+ Renamed to "Texture1DMapInvalidFlags"

Field: Texture1dMapInvalidmaptype

+ Renamed to "Texture1DMapInvalidMapType"

Field: Texture1dMapInvalidsubresource

+ Renamed to "Texture1DMapInvalidSubresource"

Field: Texture1dUnmapInvalidsubresource

+ Renamed to "Texture1DUnmapInvalidSubresource"

Field: Texture1dUnmapNotmapped

+ Renamed to "Texture1DUnmapNotMapped"

Field: Texture2dMapAlreadymapped

+ Renamed to "Texture2DMapAlreadyMapped"

Field: Texture2dMapDeviceremovedReturn

+ Renamed to "Texture2DMapDeviceRemovedReturn"

Field: Texture2dMapInvalidflags

+ Renamed to "Texture2DMapInvalidFlags"

Field: Texture2dMapInvalidmaptype

+ Renamed to "Texture2DMapInvalidMapType"

Field: Texture2dMapInvalidsubresource

+ Renamed to "Texture2DMapInvalidSubresource"

Field: Texture2dUnmapInvalidsubresource

+ Renamed to "Texture2DUnmapInvalidSubresource"

Field: Texture2dUnmapNotmapped

+ Renamed to "Texture2DUnmapNotMapped"

Field: Texture3dMapAlreadymapped

+ Renamed to "Texture3DMapAlreadyMapped"

Field: Texture3dMapDeviceremovedReturn

+ Renamed to "Texture3DMapDeviceRemovedReturn"

Field: Texture3dMapInvalidflags

+ Renamed to "Texture3DMapInvalidFlags"

Field: Texture3dMapInvalidmaptype

+ Renamed to "Texture3DMapInvalidMapType"

Field: Texture3dMapInvalidsubresource

+ Renamed to "Texture3DMapInvalidSubresource"

Field: Texture3dUnmapInvalidsubresource

+ Renamed to "Texture3DUnmapInvalidSubresource"

Field: Texture3dUnmapNotmapped

+ Renamed to "Texture3DUnmapNotMapped"

Field: UpdatesubresourceInvaliddestinationbox

+ Renamed to "UpdateSubresourceInvalidDestinationBox"

Field: UpdatesubresourceInvaliddestinationstate

+ Renamed to "UpdateSubresourceInvalidDestinationState"

Field: UpdatesubresourceInvaliddestinationsubresource

+ Renamed to "UpdateSubresourceInvalidDestinationSubresource"

Field: VssetconstantbuffersInvalidbuffer

+ Renamed to "VSSetConstantBuffersInvalidBuffer"

Field: VssetconstantbuffersUnbinddeletingobject

+ Renamed to "VSSetConstantBuffersUnbindDeletingObject"

Field: VssetsamplersUnbinddeletingobject

+ Renamed to "VSSetSamplersUnbindDeletingObject"

Field: VssetshaderresourcesUnbinddeletingobject

+ Renamed to "VSSetShaderResourcesUnbindDeletingObject"

Field: VssetshaderUnbinddeletingobject

+ Renamed to "VSSetShaderUnbindDeletingObject"

Class: OutputMergerPipelineStage

Removed methods: + GetBlendState() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BlendState, GetBlendState(Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgba&, System.UInt32&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BlendState, GetDepthStencilState() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilState, GetDepthStencilView() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilView, GetRenderTargets(System.UInt32) : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RenderTargetView>, GetRenderTargets(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilView&) : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RenderTargetView>, GetRenderTargetsAndUnorderedAccessViews(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilView&, System.UInt32, System.UInt32, System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.UnorderedAccessView>&) : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RenderTargetView>, GetUnorderedAccessViews(System.UInt32, System.UInt32) : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.UnorderedAccessView>, SetBlendState(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BlendState, Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgba, System.UInt32) : System.Void, SetRenderTargets(System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RenderTargetView>) : System.Void
Added properties: + BlendState : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.OutputMergerBlendState, DepthStencilState : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilState, DepthStencilView : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilView, RenderTargets : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.OutputMergerRenderTargets

Method: GetDepthStencilState(System.UInt32&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilState

+ Renamed to "GetDepthStencilStateAndReferenceValue"

Method: SetDepthStencilState(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilState, System.UInt32) : System.Void

+ Renamed to "SetDepthStencilStateAndReferenceValue"

Method: SetRenderTargets(System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RenderTargetView>, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilView) : System.Void

Accessibility changed to "not public"

Method: SetRenderTargetsAndUnorderedAccessViews(System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RenderTargetView>, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilView, System.UInt32, System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.UnorderedAccessView>, System.UInt32[]) : System.Void

Accessibility changed to "not public"
+ Signature changed to "(System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RenderTargetView>, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.DepthStencilView, System.UInt32, System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.UnorderedAccessView>, System.Collections.Generic.IEnumerable<System.UInt32>) : System.Void"

Class: PixelShaderPipelineStage

Method: GetShader() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.PixelShader

+ Renamed to "Shader"
+ Kind changed to "Property"
Added methods: + get_Shader() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.PixelShader, set_Shader(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.PixelShader) : System.Void

Method: GetShader(System.UInt32, System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ClassInstance>&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.PixelShader

+ Renamed to "GetShaderAndClasses"
+ Signature changed to "(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ShaderAndClasses<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.PixelShader>"

Method: SetShader(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.PixelShader) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ShaderAndClasses<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.PixelShader>) : System.Void"

Enum: Primitive

Field: ControlPointPatch1

+ Renamed to "Primitive1AsControlPointPatch"

Field: ControlPointPatch10

+ Renamed to "Primitive10AsControlPointPatch"

Field: ControlPointPatch11

+ Renamed to "Primitive11AsControlPointPatch"

Field: ControlPointPatch12

+ Renamed to "Primitive12AsControlPointPatch"

Field: ControlPointPatch13

+ Renamed to "Primitive13AsControlPointPatch"

Field: ControlPointPatch14

+ Renamed to "Primitive14AsControlPointPatch"

Field: ControlPointPatch15

+ Renamed to "Primitive15AsControlPointPatch"

Field: ControlPointPatch16

+ Renamed to "Primitive16AsControlPointPatch"

Field: ControlPointPatch17

+ Renamed to "Primitive17AsControlPointPatch"

Field: ControlPointPatch18

+ Renamed to "Primitive18AsControlPointPatch"

Field: ControlPointPatch19

+ Renamed to "Primitive19AsControlPointPatch"

Field: ControlPointPatch2

+ Renamed to "Primitive2AsControlPointPatch"

Field: ControlPointPatch20

+ Renamed to "Primitive20AsControlPointPatch"

Field: ControlPointPatch21

+ Renamed to "Primitive21AsControlPointPatch"

Field: ControlPointPatch22

+ Renamed to "Primitive22AsControlPointPatch"

Field: ControlPointPatch23

+ Renamed to "Primitive23AsControlPointPatch"

Field: ControlPointPatch24

+ Renamed to "Primitive24AsControlPointPatch"

Field: ControlPointPatch25

+ Renamed to "Primitive25AsControlPointPatch"

Field: ControlPointPatch26

+ Renamed to "Primitive26AsControlPointPatch"

Field: ControlPointPatch27

+ Renamed to "Primitive27AsControlPointPatch"

Field: ControlPointPatch28

+ Renamed to "Primitive28AsControlPointPatch"

Field: ControlPointPatch29

+ Renamed to "Primitive29AsControlPointPatch"

Field: ControlPointPatch3

+ Renamed to "Primitive3AsControlPointPatch"

Field: ControlPointPatch30

+ Renamed to "Primitive30AsControlPointPatch"

Field: ControlPointPatch31

+ Renamed to "Primitive31AsControlPointPatch"

Field: ControlPointPatch32

+ Renamed to "Primitive32AsControlPointPatch"

Field: ControlPointPatch4

+ Renamed to "Primitive4AsControlPointPatch"

Field: ControlPointPatch5

+ Renamed to "Primitive5AsControlPointPatch"

Field: ControlPointPatch6

+ Renamed to "Primitive6AsControlPointPatch"

Field: ControlPointPatch7

+ Renamed to "Primitive7AsControlPointPatch"

Field: ControlPointPatch8

+ Renamed to "Primitive8AsControlPointPatch"

Field: ControlPointPatch9

+ Renamed to "Primitive9AsControlPointPatch"

Field: LineAdj

+ Renamed to "LineAdjacency"

Field: TriangleAdj

+ Renamed to "TriangleAdjacency"

Enum: PrimitiveTopology

Field: ControlPointPatchList1

+ Renamed to "PrimitiveTopology1AsControlPointPatchList"

Field: ControlPointPatchList10

+ Renamed to "PrimitiveTopology10AsControlPointPatchList"

Field: ControlPointPatchList11

+ Renamed to "PrimitiveTopology11AsControlPointPatchList"

Field: ControlPointPatchList12

+ Renamed to "PrimitiveTopology12AsControlPointPatchList"

Field: ControlPointPatchList13

+ Renamed to "PrimitiveTopology13AsControlPointPatchList"

Field: ControlPointPatchList14

+ Renamed to "PrimitiveTopology14AsControlPointPatchList"

Field: ControlPointPatchList15

+ Renamed to "PrimitiveTopology15AsControlPointPatchList"

Field: ControlPointPatchList16

+ Renamed to "PrimitiveTopology16AsControlPointPatchList"

Field: ControlPointPatchList17

+ Renamed to "PrimitiveTopology17AsControlPointPatchList"

Field: ControlPointPatchList18

+ Renamed to "PrimitiveTopology18AsControlPointPatchList"

Field: ControlPointPatchList19

+ Renamed to "PrimitiveTopology19AsControlPointPatchList"

Field: ControlPointPatchList2

+ Renamed to "PrimitiveTopology2AsControlPointPatchList"

Field: ControlPointPatchList20

+ Renamed to "PrimitiveTopology20AsControlPointPatchList"

Field: ControlPointPatchList21

+ Renamed to "PrimitiveTopology21AsControlPointPatchList"

Field: ControlPointPatchList22

+ Renamed to "PrimitiveTopology22AsControlPointPatchList"

Field: ControlPointPatchList23

+ Renamed to "PrimitiveTopology23AsControlPointPatchList"

Field: ControlPointPatchList24

+ Renamed to "PrimitiveTopology24AsControlPointPatchList"

Field: ControlPointPatchList25

+ Renamed to "PrimitiveTopology25AsControlPointPatchList"

Field: ControlPointPatchList26

+ Renamed to "PrimitiveTopology26AsControlPointPatchList"

Field: ControlPointPatchList27

+ Renamed to "PrimitiveTopology27AsControlPointPatchList"

Field: ControlPointPatchList28

+ Renamed to "PrimitiveTopology28AsControlPointPatchList"

Field: ControlPointPatchList29

+ Renamed to "PrimitiveTopology29AsControlPointPatchList"

Field: ControlPointPatchList3

+ Renamed to "PrimitiveTopology3AsControlPointPatchList"

Field: ControlPointPatchList30

+ Renamed to "PrimitiveTopology30AsControlPointPatchList"

Field: ControlPointPatchList31

+ Renamed to "PrimitiveTopology31AsControlPointPatchList"

Field: ControlPointPatchList32

+ Renamed to "PrimitiveTopology32AsControlPointPatchList"

Field: ControlPointPatchList4

+ Renamed to "PrimitiveTopology4AsControlPointPatchList"

Field: ControlPointPatchList5

+ Renamed to "PrimitiveTopology5AsControlPointPatchList"

Field: ControlPointPatchList6

+ Renamed to "PrimitiveTopology6AsControlPointPatchList"

Field: ControlPointPatchList7

+ Renamed to "PrimitiveTopology7AsControlPointPatchList"

Field: ControlPointPatchList8

+ Renamed to "PrimitiveTopology8AsControlPointPatchList"

Field: ControlPointPatchList9

+ Renamed to "PrimitiveTopology9AsControlPointPatchList"

Field: LineListAdj

+ Renamed to "LineListAdjacency"

Field: LineStripAdj

+ Renamed to "LineStripAdjacency"

Field: TriangleListAdj

+ Renamed to "TriangleListAdjacency"

Field: TriangleStripAdj

+ Renamed to "TriangleStripAdjacency"

Struct: QueryDataPipelineStatistics

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.QueryDataPipelineStatistics, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.QueryDataPipelineStatistics) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.QueryDataPipelineStatistics, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.QueryDataPipelineStatistics) : System.Boolean

Field: CInvocations : System.UInt64

+ Kind changed to "Property"
Added methods: + get_CInvocations() : System.UInt64, set_CInvocations(System.UInt64) : System.Void

Field: CPrimitives : System.UInt64

+ Kind changed to "Property"
Added methods: + get_CPrimitives() : System.UInt64, set_CPrimitives(System.UInt64) : System.Void

Field: DomainShaderInvocations : System.UInt64

+ Kind changed to "Property"
Added methods: + get_DomainShaderInvocations() : System.UInt64, set_DomainShaderInvocations(System.UInt64) : System.Void

Field: GeometryShaderInvocations : System.UInt64

+ Kind changed to "Property"
Added methods: + get_GeometryShaderInvocations() : System.UInt64, set_GeometryShaderInvocations(System.UInt64) : System.Void

Field: GeometryShaderPrimitives : System.UInt64

+ Kind changed to "Property"
Added methods: + get_GeometryShaderPrimitives() : System.UInt64, set_GeometryShaderPrimitives(System.UInt64) : System.Void

Field: HullShaderInvocations : System.UInt64

+ Kind changed to "Property"
Added methods: + get_HullShaderInvocations() : System.UInt64, set_HullShaderInvocations(System.UInt64) : System.Void

Field: InputAssemblerPrimitives : System.UInt64

+ Kind changed to "Property"
Added methods: + get_InputAssemblerPrimitives() : System.UInt64, set_InputAssemblerPrimitives(System.UInt64) : System.Void

Field: InputAssemblerVertices : System.UInt64

+ Kind changed to "Property"
Added methods: + get_InputAssemblerVertices() : System.UInt64, set_InputAssemblerVertices(System.UInt64) : System.Void

Field: PixelShaderInvocations : System.UInt64

+ Kind changed to "Property"
Added methods: + get_PixelShaderInvocations() : System.UInt64, set_PixelShaderInvocations(System.UInt64) : System.Void

Field: VertexShaderInvocations : System.UInt64

+ Kind changed to "Property"
Added methods: + get_VertexShaderInvocations() : System.UInt64, set_VertexShaderInvocations(System.UInt64) : System.Void

Struct: QueryDataStreamOuputStatistics

+ Renamed to "QueryDataStreamOutputStatistics"
Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.QueryDataStreamOutputStatistics, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.QueryDataStreamOutputStatistics) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.QueryDataStreamOutputStatistics, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.QueryDataStreamOutputStatistics) : System.Boolean

Field: NumPrimitivesWritten : System.UInt64

+ Renamed to "PrimitiveWrittenCount"
+ Kind changed to "Property"
Added methods: + get_PrimitiveWrittenCount() : System.UInt64, set_PrimitiveWrittenCount(System.UInt64) : System.Void

Field: PrimitivesStorageNeeded : System.UInt64

+ Kind changed to "Property"
Added methods: + get_PrimitivesStorageNeeded() : System.UInt64, set_PrimitivesStorageNeeded(System.UInt64) : System.Void

Struct: QueryDataTimestampDisjoint

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.QueryDataTimestampDisjoint, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.QueryDataTimestampDisjoint) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.QueryDataTimestampDisjoint, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.QueryDataTimestampDisjoint) : System.Boolean

Field: Disjoint : System.Boolean

+ Kind changed to "Property"
Added methods: + get_Disjoint() : System.Boolean, set_Disjoint(System.Boolean) : System.Void

Field: Frequency : System.UInt64

+ Kind changed to "Property"
Added methods: + get_Frequency() : System.UInt64, set_Frequency(System.UInt64) : System.Void

Struct: QueryDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.QueryDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.QueryDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.QueryDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.QueryDescription) : System.Boolean

Field: MiscFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.QueryMiscFlag

+ Renamed to "MiscellaneousQueryOptions"
+ Kind changed to "Property"
Added methods: + get_MiscellaneousQueryOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MiscellaneousQueryOptions, set_MiscellaneousQueryOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MiscellaneousQueryOptions) : System.Void

Field: Query : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Query

+ Kind changed to "Property"
Added methods: + get_Query() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Query, set_Query(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Query) : System.Void

Enum: QueryMiscFlag

+ Renamed to "MiscellaneousQueryOptions"

Field: Predicatehint

+ Renamed to "PredicateHint"

Enum: RaiseFlag

+ Renamed to "ExceptionErrors"

Struct: RasterizerDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RasterizerDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RasterizerDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RasterizerDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RasterizerDescription) : System.Boolean

Field: AntialiasedLineEnable : System.Boolean

+ Renamed to "AntiAliasedLineEnable"
+ Kind changed to "Property"
Added methods: + get_AntiAliasedLineEnable() : System.Boolean, set_AntiAliasedLineEnable(System.Boolean) : System.Void

Field: CullMode : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CullMode

+ Kind changed to "Property"
Added methods: + get_CullMode() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CullMode, set_CullMode(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CullMode) : System.Void

Field: DepthBias : System.Int32

+ Kind changed to "Property"
Added methods: + get_DepthBias() : System.Int32, set_DepthBias(System.Int32) : System.Void

Field: DepthBiasClamp : System.Single

+ Kind changed to "Property"
Added methods: + get_DepthBiasClamp() : System.Single, set_DepthBiasClamp(System.Single) : System.Void

Field: DepthClipEnable : System.Boolean

+ Kind changed to "Property"
Added methods: + get_DepthClipEnable() : System.Boolean, set_DepthClipEnable(System.Boolean) : System.Void

Field: FillMode : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FillMode

+ Kind changed to "Property"
Added methods: + get_FillMode() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FillMode, set_FillMode(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.FillMode) : System.Void

Field: FrontCounterClockwise : System.Boolean

+ Renamed to "FrontCounterclockwise"
+ Kind changed to "Property"
Added methods: + get_FrontCounterclockwise() : System.Boolean, set_FrontCounterclockwise(System.Boolean) : System.Void

Field: MultisampleEnable : System.Boolean

+ Kind changed to "Property"
Added methods: + get_MultisampleEnable() : System.Boolean, set_MultisampleEnable(System.Boolean) : System.Void

Field: ScissorEnable : System.Boolean

+ Kind changed to "Property"
Added methods: + get_ScissorEnable() : System.Boolean, set_ScissorEnable(System.Boolean) : System.Void

Field: SlopeScaledDepthBias : System.Single

+ Kind changed to "Property"
Added methods: + get_SlopeScaledDepthBias() : System.Single, set_SlopeScaledDepthBias(System.Single) : System.Void

Class: RasterizerPipelineStage

Removed methods: + GetScissorRects(System.UInt32) : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3dRect>, GetState() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RasterizerState, GetViewports(System.UInt32) : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Viewport>, SetScissorRects(System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3dRect>) : System.Void, SetState(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RasterizerState) : System.Void, SetViewports(System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Viewport>) : System.Void
Added methods: + BoundedGetScissorRects(System.UInt32) : System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3DRect>, BoundedGetViewports(System.UInt32) : System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Viewport>
Added properties: + ScissorRects : System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3DRect>, State : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RasterizerState, Viewports : System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Viewport>

Struct: RenderTargetBlendDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RenderTargetBlendDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RenderTargetBlendDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RenderTargetBlendDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RenderTargetBlendDescription) : System.Boolean

Field: BlendEnable : System.Boolean

+ Kind changed to "Property"
Added methods: + get_BlendEnable() : System.Boolean, set_BlendEnable(System.Boolean) : System.Void

Field: BlendOperation : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BlendOperation

+ Kind changed to "Property"
Added methods: + get_BlendOperation() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BlendOperation, set_BlendOperation(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BlendOperation) : System.Void

Field: BlendOperationAlpha : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BlendOperation

+ Kind changed to "Property"
Added methods: + get_BlendOperationAlpha() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BlendOperation, set_BlendOperationAlpha(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BlendOperation) : System.Void

Field: DestinationBlend : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Blend

+ Kind changed to "Property"
Added methods: + get_DestinationBlend() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Blend, set_DestinationBlend(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Blend) : System.Void

Field: DestinationBlendAlpha : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Blend

+ Kind changed to "Property"
Added methods: + get_DestinationBlendAlpha() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Blend, set_DestinationBlendAlpha(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Blend) : System.Void

Field: RenderTargetWriteMask : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ColorWriteEnable

+ Kind changed to "Property"
Added methods: + get_RenderTargetWriteMask() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ColorWriteEnableComponents, set_RenderTargetWriteMask(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ColorWriteEnableComponents) : System.Void

Field: SourceBlend : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Blend

+ Kind changed to "Property"
Added methods: + get_SourceBlend() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Blend, set_SourceBlend(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Blend) : System.Void

Field: SourceBlendAlpha : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Blend

+ Kind changed to "Property"
Added methods: + get_SourceBlendAlpha() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Blend, set_SourceBlendAlpha(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Blend) : System.Void

Struct: RenderTargetViewDescription

Field: Buffer : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferRenderTargetView

+ Kind changed to "Property"
Added methods: + get_Buffer() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferRenderTargetView, set_Buffer(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferRenderTargetView) : System.Void

Field: Format : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_Format() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_Format(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: Texture1D : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DRenderTargetView

+ Kind changed to "Property"
Added methods: + get_Texture1D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DRenderTargetView, set_Texture1D(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DRenderTargetView) : System.Void

Field: Texture1DArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayRenderTargetView

+ Kind changed to "Property"
Added methods: + get_Texture1DArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayRenderTargetView, set_Texture1DArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayRenderTargetView) : System.Void

Field: Texture2D : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DRenderTargetView

+ Kind changed to "Property"
Added methods: + get_Texture2D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DRenderTargetView, set_Texture2D(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DRenderTargetView) : System.Void

Field: Texture2DArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayRenderTargetView

+ Kind changed to "Property"
Added methods: + get_Texture2DArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayRenderTargetView, set_Texture2DArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayRenderTargetView) : System.Void

Field: Texture2DMultiSample : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultiSampleRenderTargetView

+ Renamed to "Texture2DMultisample"
+ Kind changed to "Property"
Added methods: + get_Texture2DMultisample() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleRenderTargetView, set_Texture2DMultisample(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleRenderTargetView) : System.Void

Field: Texture2DMultiSampleArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultiSampleArrayRenderTargetView

+ Renamed to "Texture2DMultisampleArray"
+ Kind changed to "Property"
Added methods: + get_Texture2DMultisampleArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleArrayRenderTargetView, set_Texture2DMultisampleArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleArrayRenderTargetView) : System.Void

Field: Texture3D : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DRenderTargetView

+ Kind changed to "Property"
Added methods: + get_Texture3D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DRenderTargetView, set_Texture3D(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DRenderTargetView) : System.Void

Field: ViewDimension : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RenderTargetViewDimension

+ Kind changed to "Property"
Added methods: + get_ViewDimension() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RenderTargetViewDimension, set_ViewDimension(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.RenderTargetViewDimension) : System.Void

Enum: RenderTargetViewDimension

Field: Texture2DMultiSample

+ Renamed to "Texture2DMultisample"

Field: Texture2DMultiSampleArray

+ Renamed to "Texture2DMultisampleArray"

Enum: ResourceMiscFlag

+ Renamed to "MiscellaneousResourceOptions"

Field: DrawindirectArgs

+ Renamed to "DrawIndirectArgs"

Field: SharedKeyedmutex

+ Renamed to "SharedKeyedMutex"

Field: Undefined

+ Renamed to "None"

Enum: RldoFlags

+ Renamed to "LiveDeviceObjectsReportOptions"

Struct: SamplerDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.SamplerDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.SamplerDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.SamplerDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.SamplerDescription) : System.Boolean

Field: AddressU : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureAddressMode

+ Kind changed to "Property"
Added methods: + get_AddressU() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureAddressMode, set_AddressU(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureAddressMode) : System.Void

Field: AddressV : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureAddressMode

+ Kind changed to "Property"
Added methods: + get_AddressV() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureAddressMode, set_AddressV(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureAddressMode) : System.Void

Field: AddressW : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureAddressMode

+ Kind changed to "Property"
Added methods: + get_AddressW() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureAddressMode, set_AddressW(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureAddressMode) : System.Void

Field: BorderColor : Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgba

+ Kind changed to "Property"
Added methods: + get_BorderColor() : Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgba, set_BorderColor(Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgba) : System.Void

Field: ComparisonFunction : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ComparisonFunction

+ Kind changed to "Property"
Added methods: + get_ComparisonFunction() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ComparisonFunction, set_ComparisonFunction(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ComparisonFunction) : System.Void

Field: Filter : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Filter

+ Kind changed to "Property"
Added methods: + get_Filter() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Filter, set_Filter(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Filter) : System.Void

Field: MaxAnisotropy : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MaxAnisotropy() : System.UInt32, set_MaxAnisotropy(System.UInt32) : System.Void

Field: MaxLOD : System.Single

+ Renamed to "MaximumLevelOfDetail"
+ Kind changed to "Property"
Added methods: + get_MaximumLevelOfDetail() : System.Single, set_MaximumLevelOfDetail(System.Single) : System.Void

Field: MinLOD : System.Single

+ Renamed to "MinimumLevelOfDetail"
+ Kind changed to "Property"
Added methods: + get_MinimumLevelOfDetail() : System.Single, set_MinimumLevelOfDetail(System.Single) : System.Void

Field: MipLODBias : System.Single

+ Renamed to "MipLevelOfDetailBias"
+ Kind changed to "Property"
Added methods: + get_MipLevelOfDetailBias() : System.Single, set_MipLevelOfDetailBias(System.Single) : System.Void

Struct: ShaderResourceViewDescription

Field: Buffer : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferShaderResourceView

+ Kind changed to "Property"
Added methods: + get_Buffer() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferShaderResourceView, set_Buffer(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferShaderResourceView) : System.Void

Field: BufferEx : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferExShaderResourceView

+ Renamed to "ExtendedBuffer"
+ Kind changed to "Property"
Added methods: + get_ExtendedBuffer() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ExtendedBufferShaderResourceView, set_ExtendedBuffer(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ExtendedBufferShaderResourceView) : System.Void

Field: Format : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_Format() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_Format(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: Texture1D : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DShaderResourceView

+ Kind changed to "Property"
Added methods: + get_Texture1D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DShaderResourceView, set_Texture1D(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DShaderResourceView) : System.Void

Field: Texture1DArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayShaderResourceView

+ Kind changed to "Property"
Added methods: + get_Texture1DArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayShaderResourceView, set_Texture1DArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayShaderResourceView) : System.Void

Field: Texture2D : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DShaderResourceView

+ Kind changed to "Property"
Added methods: + get_Texture2D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DShaderResourceView, set_Texture2D(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DShaderResourceView) : System.Void

Field: Texture2DArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayShaderResourceView

+ Kind changed to "Property"
Added methods: + get_Texture2DArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayShaderResourceView, set_Texture2DArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayShaderResourceView) : System.Void

Field: Texture2DMultiSample : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultiSampleShaderResourceView

+ Renamed to "Texture2DMultisample"
+ Kind changed to "Property"
Added methods: + get_Texture2DMultisample() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleShaderResourceView, set_Texture2DMultisample(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleShaderResourceView) : System.Void

Field: Texture2DMultiSampleArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultiSampleArrayShaderResourceView

+ Renamed to "Texture2DMultisampleArray"
+ Kind changed to "Property"
Added methods: + get_Texture2DMultisampleArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleArrayShaderResourceView, set_Texture2DMultisampleArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleArrayShaderResourceView) : System.Void

Field: Texture3D : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DShaderResourceView

+ Kind changed to "Property"
Added methods: + get_Texture3D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DShaderResourceView, set_Texture3D(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DShaderResourceView) : System.Void

Field: TextureCube : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureCubeShaderResourceView

+ Kind changed to "Property"
Added methods: + get_TextureCube() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureCubeShaderResourceView, set_TextureCube(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureCubeShaderResourceView) : System.Void

Field: TextureCubeArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureCubeArrayShaderResourceView

+ Kind changed to "Property"
Added methods: + get_TextureCubeArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureCubeArrayShaderResourceView, set_TextureCubeArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureCubeArrayShaderResourceView) : System.Void

Field: ViewDimension : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ShaderResourceViewDimension

+ Kind changed to "Property"
Added methods: + get_ViewDimension() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ShaderResourceViewDimension, set_ViewDimension(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ShaderResourceViewDimension) : System.Void

Enum: ShaderResourceViewDimension

Field: BufferEx

+ Renamed to "ExtendedBuffer"

Field: Texture2DMultiSample

+ Renamed to "Texture2DMultisample"

Field: Texture2DMultiSampleArray

+ Renamed to "Texture2DMultisampleArray"

Enum: StencilReadMask

Field: Default

+ Renamed to "All"

Field: Zero

+ Renamed to "None"

Enum: StencilWriteMask

Field: Default

+ Renamed to "All"

Field: Zero

+ Renamed to "None"

Struct: StreamOutputDeclarationEntry

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.StreamOutputDeclarationEntry, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.StreamOutputDeclarationEntry) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.StreamOutputDeclarationEntry, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.StreamOutputDeclarationEntry) : System.Boolean

Field: ComponentCount : System.Byte

+ Kind changed to "Property"
Added methods: + get_ComponentCount() : System.Byte, set_ComponentCount(System.Byte) : System.Void

Field: OutputSlot : System.Byte

+ Kind changed to "Property"
Added methods: + get_OutputSlot() : System.Byte, set_OutputSlot(System.Byte) : System.Void

Field: SemanticIndex : System.UInt32

+ Kind changed to "Property"
Added methods: + get_SemanticIndex() : System.UInt32, set_SemanticIndex(System.UInt32) : System.Void

Field: SemanticName : System.String

+ Kind changed to "Property"
Added methods: + get_SemanticName() : System.String, set_SemanticName(System.String) : System.Void

Field: StartComponent : System.Byte

+ Kind changed to "Property"
Added methods: + get_StartComponent() : System.Byte, set_StartComponent(System.Byte) : System.Void

Field: StreamIndex : System.UInt32

+ Kind changed to "Property"
Added methods: + get_StreamIndex() : System.UInt32, set_StreamIndex(System.UInt32) : System.Void

Struct: SubresourceData

Field: SysMem : System.IntPtr

+ Renamed to "SystemMemory"
+ Kind changed to "Property"
Added methods: + get_SystemMemory() : System.IntPtr, set_SystemMemory(System.IntPtr) : System.Void

Field: SysMemPitch : System.UInt32

+ Renamed to "SystemMemoryPitch"
+ Kind changed to "Property"
Added methods: + get_SystemMemoryPitch() : System.UInt32, set_SystemMemoryPitch(System.UInt32) : System.Void

Field: SysMemSlicePitch : System.UInt32

+ Renamed to "SystemMemorySlicePitch"
+ Kind changed to "Property"
Added methods: + get_SystemMemorySlicePitch() : System.UInt32, set_SystemMemorySlicePitch(System.UInt32) : System.Void

Class: SwitchToRef

Removed methods: + GetUseRef() : System.Boolean, SetUseRef(System.Boolean) : System.Boolean
Added properties: + UseRef : System.Boolean

Struct: Texture1DArrayDepthStencilView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayDepthStencilView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayDepthStencilView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture1DArrayRenderTargetView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayRenderTargetView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayRenderTargetView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture1DArrayShaderResourceView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayShaderResourceView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MostDetailedMip : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MostDetailedMip() : System.UInt32, set_MostDetailedMip(System.UInt32) : System.Void

Struct: Texture1DArrayUnorderedAccessView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayUnorderedAccessView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayUnorderedAccessView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayUnorderedAccessView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayUnorderedAccessView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture1DDepthStencilView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DDepthStencilView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DDepthStencilView) : System.Boolean

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture1DDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DDescription) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: BindFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BindFlag

+ Renamed to "BindingOptions"
+ Kind changed to "Property"
Added methods: + get_BindingOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BindingOptions, set_BindingOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BindingOptions) : System.Void

Field: CpuAccessFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CpuAccessFlag

+ Renamed to "CpuAccessOptions"
+ Kind changed to "Property"
Added methods: + get_CpuAccessOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CpuAccessOptions, set_CpuAccessOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CpuAccessOptions) : System.Void

Field: Format : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_Format() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_Format(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MiscFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ResourceMiscFlag

+ Renamed to "MiscellaneousResourceOptions"
+ Kind changed to "Property"
Added methods: + get_MiscellaneousResourceOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MiscellaneousResourceOptions, set_MiscellaneousResourceOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MiscellaneousResourceOptions) : System.Void

Field: Usage : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Usage

+ Kind changed to "Property"
Added methods: + get_Usage() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Usage, set_Usage(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Usage) : System.Void

Field: Width : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Width() : System.UInt32, set_Width(System.UInt32) : System.Void

Struct: Texture1DRenderTargetView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DRenderTargetView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DRenderTargetView) : System.Boolean

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture1DShaderResourceView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DShaderResourceView) : System.Boolean

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MostDetailedMip : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MostDetailedMip() : System.UInt32, set_MostDetailedMip(System.UInt32) : System.Void

Struct: Texture1DUnorderedAccessView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DUnorderedAccessView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DUnorderedAccessView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DUnorderedAccessView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DUnorderedAccessView) : System.Boolean

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture2DArrayDepthStencilView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayDepthStencilView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayDepthStencilView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture2DArrayRenderTargetView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayRenderTargetView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayRenderTargetView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture2DArrayShaderResourceView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayShaderResourceView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MostDetailedMip : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MostDetailedMip() : System.UInt32, set_MostDetailedMip(System.UInt32) : System.Void

Struct: Texture2DArrayUnorderedAccessView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayUnorderedAccessView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayUnorderedAccessView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayUnorderedAccessView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayUnorderedAccessView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture2DDepthStencilView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DDepthStencilView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DDepthStencilView) : System.Boolean

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture2DDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DDescription) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: BindFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BindFlag

+ Renamed to "BindingOptions"
+ Kind changed to "Property"
Added methods: + get_BindingOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BindingOptions, set_BindingOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BindingOptions) : System.Void

Field: CpuAccessFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CpuAccessFlag

+ Renamed to "CpuAccessOptions"
+ Kind changed to "Property"
Added methods: + get_CpuAccessOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CpuAccessOptions, set_CpuAccessOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CpuAccessOptions) : System.Void

Field: Format : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_Format() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_Format(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: Height : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Height() : System.UInt32, set_Height(System.UInt32) : System.Void

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MiscFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ResourceMiscFlag

+ Renamed to "MiscellaneousResourceOptions"
+ Kind changed to "Property"
Added methods: + get_MiscellaneousResourceOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MiscellaneousResourceOptions, set_MiscellaneousResourceOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MiscellaneousResourceOptions) : System.Void

Field: SampleDescription : Microsoft.WindowsAPICodePack.DirectX.DXGI.SampleDescription

+ Kind changed to "Property"
Added methods: + get_SampleDescription() : Microsoft.WindowsAPICodePack.DirectX.Graphics.SampleDescription, set_SampleDescription(Microsoft.WindowsAPICodePack.DirectX.Graphics.SampleDescription) : System.Void

Field: Usage : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Usage

+ Kind changed to "Property"
Added methods: + get_Usage() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Usage, set_Usage(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Usage) : System.Void

Field: Width : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Width() : System.UInt32, set_Width(System.UInt32) : System.Void

Struct: Texture2DMultiSampleArrayDepthStencilView

+ Renamed to "Texture2DMultisampleArrayDepthStencilView"
Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleArrayDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleArrayDepthStencilView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleArrayDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleArrayDepthStencilView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Struct: Texture2DMultiSampleArrayRenderTargetView

+ Renamed to "Texture2DMultisampleArrayRenderTargetView"
Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleArrayRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleArrayRenderTargetView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleArrayRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleArrayRenderTargetView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Struct: Texture2DMultiSampleArrayShaderResourceView

+ Renamed to "Texture2DMultisampleArrayShaderResourceView"
Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleArrayShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleArrayShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleArrayShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleArrayShaderResourceView) : System.Boolean

Field: ArraySize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_ArraySize() : System.UInt32, set_ArraySize(System.UInt32) : System.Void

Field: FirstArraySlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstArraySlice() : System.UInt32, set_FirstArraySlice(System.UInt32) : System.Void

Struct: Texture2DMultiSampleDepthStencilView

+ Renamed to "Texture2DMultisampleDepthStencilView"
Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleDepthStencilView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleDepthStencilView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleDepthStencilView) : System.Boolean

Field: UnusedField : System.UInt32

+ Kind changed to "Property"
Added methods: + get_UnusedField() : System.UInt32, set_UnusedField(System.UInt32) : System.Void

Struct: Texture2DMultiSampleRenderTargetView

+ Renamed to "Texture2DMultisampleRenderTargetView"
Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleRenderTargetView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleRenderTargetView) : System.Boolean

Field: UnusedField : System.UInt32

+ Kind changed to "Property"
Added methods: + get_UnusedField() : System.UInt32, set_UnusedField(System.UInt32) : System.Void

Struct: Texture2DMultiSampleShaderResourceView

+ Renamed to "Texture2DMultisampleShaderResourceView"
Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DMultisampleShaderResourceView) : System.Boolean

Field: UnusedField : System.UInt32

+ Kind changed to "Property"
Added methods: + get_UnusedField() : System.UInt32, set_UnusedField(System.UInt32) : System.Void

Struct: Texture2DRenderTargetView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DRenderTargetView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DRenderTargetView) : System.Boolean

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture2DShaderResourceView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DShaderResourceView) : System.Boolean

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MostDetailedMip : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MostDetailedMip() : System.UInt32, set_MostDetailedMip(System.UInt32) : System.Void

Struct: Texture2DUnorderedAccessView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DUnorderedAccessView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DUnorderedAccessView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DUnorderedAccessView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DUnorderedAccessView) : System.Boolean

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Struct: Texture3DDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DDescription) : System.Boolean

Field: BindFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BindFlag

+ Renamed to "BindingOptions"
+ Kind changed to "Property"
Added methods: + get_BindingOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BindingOptions, set_BindingOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BindingOptions) : System.Void

Field: CpuAccessFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CpuAccessFlag

+ Renamed to "CpuAccessOptions"
+ Kind changed to "Property"
Added methods: + get_CpuAccessOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CpuAccessOptions, set_CpuAccessOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.CpuAccessOptions) : System.Void

Field: Depth : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Depth() : System.UInt32, set_Depth(System.UInt32) : System.Void

Field: Format : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_Format() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_Format(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: Height : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Height() : System.UInt32, set_Height(System.UInt32) : System.Void

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MiscFlags : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ResourceMiscFlag

+ Renamed to "MiscellaneousResourceOptions"
+ Kind changed to "Property"
Added methods: + get_MiscellaneousResourceOptions() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MiscellaneousResourceOptions, set_MiscellaneousResourceOptions(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.MiscellaneousResourceOptions) : System.Void

Field: Usage : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Usage

+ Kind changed to "Property"
Added methods: + get_Usage() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Usage, set_Usage(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Usage) : System.Void

Field: Width : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Width() : System.UInt32, set_Width(System.UInt32) : System.Void

Struct: Texture3DRenderTargetView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DRenderTargetView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DRenderTargetView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DRenderTargetView) : System.Boolean

Field: FirstWSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstWSlice() : System.UInt32, set_FirstWSlice(System.UInt32) : System.Void

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Field: WSize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_WSize() : System.UInt32, set_WSize(System.UInt32) : System.Void

Struct: Texture3DShaderResourceView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DShaderResourceView) : System.Boolean

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MostDetailedMip : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MostDetailedMip() : System.UInt32, set_MostDetailedMip(System.UInt32) : System.Void

Struct: Texture3DUnorderedAccessView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DUnorderedAccessView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DUnorderedAccessView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DUnorderedAccessView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DUnorderedAccessView) : System.Boolean

Field: FirstWSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_FirstWSlice() : System.UInt32, set_FirstWSlice(System.UInt32) : System.Void

Field: MipSlice : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipSlice() : System.UInt32, set_MipSlice(System.UInt32) : System.Void

Field: WSize : System.UInt32

+ Kind changed to "Property"
Added methods: + get_WSize() : System.UInt32, set_WSize(System.UInt32) : System.Void

Struct: TextureCubeArrayShaderResourceView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureCubeArrayShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureCubeArrayShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureCubeArrayShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureCubeArrayShaderResourceView) : System.Boolean

Field: First2DArrayFace : System.UInt32

+ Kind changed to "Property"
Added methods: + get_First2DArrayFace() : System.UInt32, set_First2DArrayFace(System.UInt32) : System.Void

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MostDetailedMip : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MostDetailedMip() : System.UInt32, set_MostDetailedMip(System.UInt32) : System.Void

Field: NumCubes : System.UInt32

+ Renamed to "CubeCount"
+ Kind changed to "Property"
Added methods: + get_CubeCount() : System.UInt32, set_CubeCount(System.UInt32) : System.Void

Enum: TexturecubeFace

+ Renamed to "TextureCubeFace"

Struct: TextureCubeShaderResourceView

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureCubeShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureCubeShaderResourceView) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureCubeShaderResourceView, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.TextureCubeShaderResourceView) : System.Boolean

Field: MipLevels : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MipLevels() : System.UInt32, set_MipLevels(System.UInt32) : System.Void

Field: MostDetailedMip : System.UInt32

+ Kind changed to "Property"
Added methods: + get_MostDetailedMip() : System.UInt32, set_MostDetailedMip(System.UInt32) : System.Void

Struct: UnorderedAccessViewDescription

Field: Buffer : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferUnorderedAccessView

+ Kind changed to "Property"
Added methods: + get_Buffer() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferUnorderedAccessView, set_Buffer(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.BufferUnorderedAccessView) : System.Void

Field: Format : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_Format() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_Format(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: Texture1D : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DUnorderedAccessView

+ Kind changed to "Property"
Added methods: + get_Texture1D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DUnorderedAccessView, set_Texture1D(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DUnorderedAccessView) : System.Void

Field: Texture1DArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayUnorderedAccessView

+ Kind changed to "Property"
Added methods: + get_Texture1DArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayUnorderedAccessView, set_Texture1DArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture1DArrayUnorderedAccessView) : System.Void

Field: Texture2D : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DUnorderedAccessView

+ Kind changed to "Property"
Added methods: + get_Texture2D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DUnorderedAccessView, set_Texture2D(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DUnorderedAccessView) : System.Void

Field: Texture2DArray : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayUnorderedAccessView

+ Kind changed to "Property"
Added methods: + get_Texture2DArray() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayUnorderedAccessView, set_Texture2DArray(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture2DArrayUnorderedAccessView) : System.Void

Field: Texture3D : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DUnorderedAccessView

+ Kind changed to "Property"
Added methods: + get_Texture3D() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DUnorderedAccessView, set_Texture3D(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Texture3DUnorderedAccessView) : System.Void

Field: ViewDimension : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.UnorderedAccessViewDimension

+ Kind changed to "Property"
Added methods: + get_ViewDimension() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.UnorderedAccessViewDimension, set_ViewDimension(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.UnorderedAccessViewDimension) : System.Void

Class: VertexShaderPipelineStage

Method: GetShader() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.VertexShader

+ Renamed to "Shader"
+ Kind changed to "Property"
Added methods: + get_Shader() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.VertexShader, set_Shader(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.VertexShader) : System.Void

Method: GetShader(System.UInt32, System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ClassInstance>&) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.VertexShader

+ Renamed to "GetShaderAndClasses"
+ Signature changed to "(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ShaderAndClasses<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.VertexShader>"

Method: SetShader(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.VertexShader) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.ShaderAndClasses<Microsoft.WindowsAPICodePack.DirectX.Direct3D11.VertexShader>) : System.Void"

Class: View

Method: GetResource() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DResource

+ Renamed to "Resource"
+ Kind changed to "Property"
Added methods: + get_Resource() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DResource

Struct: Viewport

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Viewport, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Viewport) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Viewport, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.Viewport) : System.Boolean

Field: Height : System.Single

+ Kind changed to "Property"
Added methods: + get_Height() : System.Single, set_Height(System.Single) : System.Void

Field: MaxDepth : System.Single

+ Kind changed to "Property"
Added methods: + get_MaxDepth() : System.Single, set_MaxDepth(System.Single) : System.Void

Field: MinDepth : System.Single

+ Kind changed to "Property"
Added methods: + get_MinDepth() : System.Single, set_MinDepth(System.Single) : System.Void

Field: TopLeftX : System.Single

+ Kind changed to "Property"
Added methods: + get_TopLeftX() : System.Single, set_TopLeftX(System.Single) : System.Void

Field: TopLeftY : System.Single

+ Kind changed to "Property"
Added methods: + get_TopLeftY() : System.Single, set_TopLeftY(System.Single) : System.Void

Field: Width : System.Single

+ Kind changed to "Property"
Added methods: + get_Width() : System.Single, set_Width(System.Single) : System.Void

Namespace: Microsoft.WindowsAPICodePack.DirectX.DirectWrite

Added types: + HitTestInfo, TextRangeOf<T>, TrimmingWithSign

Struct: ClusterMetrics

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.ClusterMetrics, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.ClusterMetrics) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.ClusterMetrics, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.ClusterMetrics) : System.Boolean

Field: CanWrapLineAfter : System.Boolean

+ Kind changed to "Property"
Added methods: + get_CanWrapLineAfter() : System.Boolean, set_CanWrapLineAfter(System.Boolean) : System.Void

Field: IsNewline : System.Boolean

+ Kind changed to "Property"
Added methods: + get_IsNewline() : System.Boolean, set_IsNewline(System.Boolean) : System.Void

Field: IsRightToLeft : System.Boolean

+ Kind changed to "Property"
Added methods: + get_IsRightToLeft() : System.Boolean, set_IsRightToLeft(System.Boolean) : System.Void

Field: IsSoftHyphen : System.Boolean

+ Kind changed to "Property"
Added methods: + get_IsSoftHyphen() : System.Boolean, set_IsSoftHyphen(System.Boolean) : System.Void

Field: IsWhitespace : System.Boolean

+ Kind changed to "Property"
Added methods: + get_IsWhitespace() : System.Boolean, set_IsWhitespace(System.Boolean) : System.Void

Field: Length : System.UInt16

+ Kind changed to "Property"
Added methods: + get_Length() : System.UInt16, set_Length(System.UInt16) : System.Void

Field: Width : System.Single

+ Kind changed to "Property"
Added methods: + get_Width() : System.Single, set_Width(System.Single) : System.Void

Class: DWriteFactory

Method: CreateTypography() : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.Typography

+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TypographySettingCollection"

Class: FontFace

Method: GetGlyphIndices(System.Char[]) : System.UInt16[]

+ Renamed to "GetGlyphIndexes"

Method: GetGlyphIndices(System.String) : System.UInt16[]

+ Renamed to "GetGlyphIndexes"

Method: GetGlyphIndices(System.UInt32[]) : System.UInt16[]

+ Renamed to "GetGlyphIndexes"

Enum: FontFaceType

Field: Cff

+ Renamed to "CompactFontFormat"

Struct: FontFeature

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontFeature, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontFeature) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontFeature, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontFeature) : System.Boolean

Field: NameTag : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontFeatureTag

+ Kind changed to "Property"
Added methods: + get_NameTag() : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontFeatureTag, set_NameTag(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontFeatureTag) : System.Void

Field: Parameter : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Parameter() : System.UInt32, set_Parameter(System.UInt32) : System.Void

Enum: FontFeatureTag

Field: NlcKanjiForms

+ Renamed to "NLCKanjiForms"

Field: ProportionaWidths

+ Renamed to "ProportionalWidths"

Enum: FontFileType

Field: Cff

+ Renamed to "CompactFontFormat"

Field: DWRITE_FONT_FILE_TYPE_UNKNOWN

+ Renamed to "Unknown"

Field: Type1Pfb

+ Renamed to "Type1PrinterFontBinary"

Field: Type1Pfm

+ Renamed to "Type1PrinterFontMetric"

Struct: FontMetrics

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontMetrics, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontMetrics) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontMetrics, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontMetrics) : System.Boolean

Field: Ascent : System.UInt16

+ Kind changed to "Property"
Added methods: + get_Ascent() : System.UInt16, set_Ascent(System.UInt16) : System.Void

Field: CapHeight : System.UInt16

+ Kind changed to "Property"
Added methods: + get_CapHeight() : System.UInt16, set_CapHeight(System.UInt16) : System.Void

Field: Descent : System.UInt16

+ Kind changed to "Property"
Added methods: + get_Descent() : System.UInt16, set_Descent(System.UInt16) : System.Void

Field: DesignUnitsPerEm : System.UInt16

+ Kind changed to "Property"
Added methods: + get_DesignUnitsPerEm() : System.UInt16, set_DesignUnitsPerEm(System.UInt16) : System.Void

Field: LineGap : System.Int16

+ Kind changed to "Property"
Added methods: + get_LineGap() : System.Int16, set_LineGap(System.Int16) : System.Void

Field: StrikethroughPosition : System.Int16

+ Kind changed to "Property"
Added methods: + get_StrikethroughPosition() : System.Int16, set_StrikethroughPosition(System.Int16) : System.Void

Field: StrikethroughThickness : System.UInt16

+ Kind changed to "Property"
Added methods: + get_StrikethroughThickness() : System.UInt16, set_StrikethroughThickness(System.UInt16) : System.Void

Field: UnderlinePosition : System.Int16

+ Kind changed to "Property"
Added methods: + get_UnderlinePosition() : System.Int16, set_UnderlinePosition(System.Int16) : System.Void

Field: UnderlineThickness : System.UInt16

+ Kind changed to "Property"
Added methods: + get_UnderlineThickness() : System.UInt16, set_UnderlineThickness(System.UInt16) : System.Void

Field: XHeight : System.UInt16

+ Kind changed to "Property"
Added methods: + get_XHeight() : System.UInt16, set_XHeight(System.UInt16) : System.Void

Struct: GlyphMetrics

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.GlyphMetrics, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.GlyphMetrics) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.GlyphMetrics, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.GlyphMetrics) : System.Boolean

Field: AdvanceHeight : System.UInt32

+ Kind changed to "Property"
Added methods: + get_AdvanceHeight() : System.UInt32, set_AdvanceHeight(System.UInt32) : System.Void

Field: AdvanceWidth : System.UInt32

+ Kind changed to "Property"
Added methods: + get_AdvanceWidth() : System.UInt32, set_AdvanceWidth(System.UInt32) : System.Void

Field: BottomSideBearing : System.Int32

+ Kind changed to "Property"
Added methods: + get_BottomSideBearing() : System.Int32, set_BottomSideBearing(System.Int32) : System.Void

Field: LeftSideBearing : System.Int32

+ Kind changed to "Property"
Added methods: + get_LeftSideBearing() : System.Int32, set_LeftSideBearing(System.Int32) : System.Void

Field: RightSideBearing : System.Int32

+ Kind changed to "Property"
Added methods: + get_RightSideBearing() : System.Int32, set_RightSideBearing(System.Int32) : System.Void

Field: TopSideBearing : System.Int32

+ Kind changed to "Property"
Added methods: + get_TopSideBearing() : System.Int32, set_TopSideBearing(System.Int32) : System.Void

Field: VerticalOriginY : System.Int32

+ Kind changed to "Property"
Added methods: + get_VerticalOriginY() : System.Int32, set_VerticalOriginY(System.Int32) : System.Void

Struct: GlyphOffset

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.GlyphOffset, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.GlyphOffset) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.GlyphOffset, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.GlyphOffset) : System.Boolean

Field: AdvanceOffset : System.Single

+ Kind changed to "Property"
Added methods: + get_AdvanceOffset() : System.Single, set_AdvanceOffset(System.Single) : System.Void

Field: AscenderOffset : System.Single

+ Kind changed to "Property"
Added methods: + get_AscenderOffset() : System.Single, set_AscenderOffset(System.Single) : System.Void

Struct: GlyphRun

Field: BidiLevel : System.UInt32

+ Kind changed to "Property"
Added methods: + get_BidiLevel() : System.UInt32, set_BidiLevel(System.UInt32) : System.Void

Field: FontEmSize : System.Single

+ Kind changed to "Property"
Added methods: + get_FontEmSize() : System.Single, set_FontEmSize(System.Single) : System.Void

Field: FontFace : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontFace

+ Kind changed to "Property"
Added methods: + get_FontFace() : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontFace, set_FontFace(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontFace) : System.Void

Field: GlyphAdvances : System.Single[]

+ Kind changed to "Property"
Added methods: + get_GlyphAdvances() : System.Collections.Generic.IEnumerable<System.Single>, set_GlyphAdvances(System.Collections.Generic.IEnumerable<System.Single>) : System.Void

Field: GlyphIndices : System.UInt16[]

+ Renamed to "GlyphIndexes"
+ Kind changed to "Property"
Added methods: + get_GlyphIndexes() : System.Collections.Generic.IEnumerable<System.UInt16>, set_GlyphIndexes(System.Collections.Generic.IEnumerable<System.UInt16>) : System.Void

Field: GlyphOffsets : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.GlyphOffset[]

+ Kind changed to "Property"
Added methods: + get_GlyphOffsets() : System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.DirectWrite.GlyphOffset>, set_GlyphOffsets(System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.DirectWrite.GlyphOffset>) : System.Void

Field: IsSideways : System.Boolean

+ Kind changed to "Property"
Added methods: + get_IsSideways() : System.Boolean, set_IsSideways(System.Boolean) : System.Void

Struct: HitTestMetrics

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.HitTestMetrics, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.HitTestMetrics) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.HitTestMetrics, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.HitTestMetrics) : System.Boolean

Field: BidiLevel : System.UInt32

+ Kind changed to "Property"
Added methods: + get_BidiLevel() : System.UInt32, set_BidiLevel(System.UInt32) : System.Void

Field: Height : System.Single

+ Kind changed to "Property"
Added methods: + get_Height() : System.Single, set_Height(System.Single) : System.Void

Field: IsText : System.Boolean

+ Kind changed to "Property"
Added methods: + get_IsText() : System.Boolean, set_IsText(System.Boolean) : System.Void

Field: IsTrimmed : System.Boolean

+ Kind changed to "Property"
Added methods: + get_IsTrimmed() : System.Boolean, set_IsTrimmed(System.Boolean) : System.Void

Field: Left : System.Single

+ Kind changed to "Property"
Added methods: + get_Left() : System.Single, set_Left(System.Single) : System.Void

Field: Length : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Length() : System.UInt32, set_Length(System.UInt32) : System.Void

Field: TextPosition : System.UInt32

+ Kind changed to "Property"
Added methods: + get_TextPosition() : System.UInt32, set_TextPosition(System.UInt32) : System.Void

Field: Top : System.Single

+ Kind changed to "Property"
Added methods: + get_Top() : System.Single, set_Top(System.Single) : System.Void

Field: Width : System.Single

+ Kind changed to "Property"
Added methods: + get_Width() : System.Single, set_Width(System.Single) : System.Void

Struct: InlineObjectMetrics

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.InlineObjectMetrics, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.InlineObjectMetrics) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.InlineObjectMetrics, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.InlineObjectMetrics) : System.Boolean

Field: Baseline : System.Single

+ Kind changed to "Property"
Added methods: + get_Baseline() : System.Single, set_Baseline(System.Single) : System.Void

Field: Height : System.Single

+ Kind changed to "Property"
Added methods: + get_Height() : System.Single, set_Height(System.Single) : System.Void

Field: SupportsSideways : System.Boolean

+ Kind changed to "Property"
Added methods: + get_SupportsSideways() : System.Boolean, set_SupportsSideways(System.Boolean) : System.Void

Field: Width : System.Single

+ Kind changed to "Property"
Added methods: + get_Width() : System.Single, set_Width(System.Single) : System.Void

Struct: LineMetrics

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.LineMetrics, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.LineMetrics) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.LineMetrics, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.LineMetrics) : System.Boolean

Field: Baseline : System.Single

+ Kind changed to "Property"
Added methods: + get_Baseline() : System.Single, set_Baseline(System.Single) : System.Void

Field: Height : System.Single

+ Kind changed to "Property"
Added methods: + get_Height() : System.Single, set_Height(System.Single) : System.Void

Field: IsTrimmed : System.Boolean

+ Kind changed to "Property"
Added methods: + get_IsTrimmed() : System.Boolean, set_IsTrimmed(System.Boolean) : System.Void

Field: Length : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Length() : System.UInt32, set_Length(System.UInt32) : System.Void

Field: NewlineLength : System.UInt32

+ Kind changed to "Property"
Added methods: + get_NewlineLength() : System.UInt32, set_NewlineLength(System.UInt32) : System.Void

Field: TrailingWhitespaceLength : System.UInt32

+ Kind changed to "Property"
Added methods: + get_TrailingWhitespaceLength() : System.UInt32, set_TrailingWhitespaceLength(System.UInt32) : System.Void

Struct: LineSpacing

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.LineSpacing, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.LineSpacing) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.LineSpacing, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.LineSpacing) : System.Boolean

Field: Baseline : System.Single

+ Kind changed to "Property"
Added methods: + get_Baseline() : System.Single, set_Baseline(System.Single) : System.Void

Field: Height : System.Single

+ Kind changed to "Property"
Added methods: + get_Height() : System.Single, set_Height(System.Single) : System.Void

Field: LineSpacingMethod : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.LineSpacingMethod

+ Kind changed to "Property"
Added methods: + get_LineSpacingMethod() : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.LineSpacingMethod, set_LineSpacingMethod(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.LineSpacingMethod) : System.Void

Struct: OverhangMetrics

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.OverhangMetrics, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.OverhangMetrics) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.OverhangMetrics, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.OverhangMetrics) : System.Boolean

Field: Bottom : System.Single

+ Kind changed to "Property"
Added methods: + get_Bottom() : System.Single, set_Bottom(System.Single) : System.Void

Field: Left : System.Single

+ Kind changed to "Property"
Added methods: + get_Left() : System.Single, set_Left(System.Single) : System.Void

Field: Right : System.Single

+ Kind changed to "Property"
Added methods: + get_Right() : System.Single, set_Right(System.Single) : System.Void

Field: Top : System.Single

+ Kind changed to "Property"
Added methods: + get_Top() : System.Single, set_Top(System.Single) : System.Void

Enum: RenderingMode

Field: CleartypeGdiClassic

+ Renamed to "ClearTypeGdiClassic"

Field: CleartypeGdiNatural

+ Renamed to "ClearTypeGdiNatural"

Field: CleartypeNatural

+ Renamed to "ClearTypeNatural"

Field: CleartypeNaturalSymmetric

+ Renamed to "ClearTypeNaturalSymmetric"

Class: TextFormat

Removed methods: + GetTrimming(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.InlineObject&) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.Trimming, SetTrimming(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.Trimming, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.ICustomInlineObject) : System.Void, SetTrimming(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.Trimming, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.InlineObject) : System.Void
Added properties: + TrimmingWithSign : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TrimmingWithSign

Class: TextLayout

Removed methods: + SetInlineObject(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.InlineObject, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRange) : System.Void

Method: GetClusterMetrics() : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.ClusterMetrics[]

+ Renamed to "ClusterMetrics"
+ Kind changed to "Property"
Added methods: + get_ClusterMetrics() : System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.DirectWrite.ClusterMetrics>

Method: GetCultureInfo(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRange&) : System.Globalization.CultureInfo

+ Renamed to "GetCultureInfoForRange"
+ Signature changed to "(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRangeOf<System.Globalization.CultureInfo>"

Method: GetFontFamilyName(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRange&) : System.String

+ Renamed to "GetFontFamilyNameForRange"
+ Signature changed to "(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRangeOf<System.String>"

Method: GetFontSize(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRange&) : System.Single

+ Renamed to "GetFontSizeForRange"
+ Signature changed to "(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRangeOf<System.Single>"

Method: GetFontStretch(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRange&) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontStretch

+ Renamed to "GetFontStretchForRange"
+ Signature changed to "(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRangeOf<Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontStretch>"

Method: GetFontStyle(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRange&) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontStyle

+ Renamed to "GetFontStyleForRange"
+ Signature changed to "(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRangeOf<Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontStyle>"

Method: GetFontWeight(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRange&) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontWeight

+ Renamed to "GetFontWeightForRange"
+ Signature changed to "(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRangeOf<Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontWeight>"

Method: GetLineMetrics() : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.LineMetrics[]

+ Renamed to "LineMetrics"
+ Kind changed to "Property"
Added methods: + get_LineMetrics() : System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.DirectWrite.LineMetrics>

Method: GetStrikethrough(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRange&) : System.Boolean

+ Renamed to "GetStrikethroughForRange"
+ Signature changed to "(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRangeOf<System.Boolean>"

Method: GetTypography(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.Typography

+ Signature changed to "(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TypographySettingCollection"

Method: GetTypography(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRange&) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.Typography

+ Renamed to "GetTypographyForRange"
+ Signature changed to "(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRangeOf<Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TypographySettingCollection>"

Method: GetUnderline(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRange&) : System.Boolean

+ Renamed to "GetUnderlineForRange"
+ Signature changed to "(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRangeOf<System.Boolean>"

Method: HitTestPoint(System.Single, System.Single, System.Boolean&, System.Boolean&) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.HitTestMetrics

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Point2F) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.HitTestInfo"

Method: HitTestTextPosition(System.UInt32, System.Boolean, System.Single&, System.Single&) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.HitTestMetrics

+ Signature changed to "(System.UInt32, System.Boolean) : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.HitTestInfo"

Method: SetTypography(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.Typography, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRange) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TypographySettingCollection, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRange) : System.Void"

Struct: TextMetrics

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextMetrics, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextMetrics) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextMetrics, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextMetrics) : System.Boolean

Field: Height : System.Single

+ Kind changed to "Property"
Added methods: + get_Height() : System.Single, set_Height(System.Single) : System.Void

Field: LayoutHeight : System.Single

+ Kind changed to "Property"
Added methods: + get_LayoutHeight() : System.Single, set_LayoutHeight(System.Single) : System.Void

Field: LayoutWidth : System.Single

+ Kind changed to "Property"
Added methods: + get_LayoutWidth() : System.Single, set_LayoutWidth(System.Single) : System.Void

Field: Left : System.Single

+ Kind changed to "Property"
Added methods: + get_Left() : System.Single, set_Left(System.Single) : System.Void

Field: LineCount : System.UInt32

+ Kind changed to "Property"
Added methods: + get_LineCount() : System.UInt32, set_LineCount(System.UInt32) : System.Void

Field: MaxBidiReorderingDepth : System.UInt32

+ Renamed to "MaxBidirectionalReorderingDepth"
+ Kind changed to "Property"
Added methods: + get_MaxBidirectionalReorderingDepth() : System.UInt32, set_MaxBidirectionalReorderingDepth(System.UInt32) : System.Void

Field: Top : System.Single

+ Kind changed to "Property"
Added methods: + get_Top() : System.Single, set_Top(System.Single) : System.Void

Field: Width : System.Single

+ Kind changed to "Property"
Added methods: + get_Width() : System.Single, set_Width(System.Single) : System.Void

Field: WidthIncludingTrailingWhitespace : System.Single

+ Kind changed to "Property"
Added methods: + get_WidthIncludingTrailingWhitespace() : System.Single, set_WidthIncludingTrailingWhitespace(System.Single) : System.Void

Struct: TextRange

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRange, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRange) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRange, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextRange) : System.Boolean

Field: Length : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Length() : System.UInt32, set_Length(System.UInt32) : System.Void

Field: StartPosition : System.UInt32

+ Kind changed to "Property"
Added methods: + get_StartPosition() : System.UInt32, set_StartPosition(System.UInt32) : System.Void

Struct: Trimming

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.Trimming, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.Trimming) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.Trimming, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.Trimming) : System.Boolean

Field: Delimiter : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Delimiter() : System.UInt32, set_Delimiter(System.UInt32) : System.Void

Field: DelimiterCount : System.UInt32

+ Kind changed to "Property"
Added methods: + get_DelimiterCount() : System.UInt32, set_DelimiterCount(System.UInt32) : System.Void

Field: Granularity : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TrimmingGranularity

+ Kind changed to "Property"
Added methods: + get_Granularity() : Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TrimmingGranularity, set_Granularity(Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TrimmingGranularity) : System.Void

Class: Typography

+ Renamed to "TypographySettingCollection"

Method: GetGenericEnumerator() : System.Collections.Generic.IEnumerator<Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontFeature>

Accessibility changed to "public"

Namespace: Microsoft.WindowsAPICodePack.DirectX.DXGI

+ Renamed to "Microsoft.WindowsAPICodePack.DirectX.Graphics"
Added types: + AdapterDriverVersion

Class: Adapter

Removed methods: + CheckDeviceSupport(Microsoft.WindowsAPICodePack.DirectX.Direct3D.DeviceType, System.Int32&, System.Int32&) : System.Boolean

Method: CheckDeviceSupport(Microsoft.WindowsAPICodePack.DirectX.Direct3D.DeviceType) : System.Boolean

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D.DeviceType) : System.Nullable<Microsoft.WindowsAPICodePack.DirectX.Graphics.AdapterDriverVersion>"

Property: Description : Microsoft.WindowsAPICodePack.DirectX.DXGI.AdapterDescription

Method: get_Description() : Microsoft.WindowsAPICodePack.DirectX.DXGI.AdapterDescription

+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.Graphics.AdapterDescription"

Method: GetOutput(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.DXGI.Output

+ Signature changed to "(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.Graphics.Output"

Method: GetOutputs() : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.DXGI.Output>

+ Renamed to "Outputs"
+ Kind changed to "Property"
Added methods: + get_Outputs() : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Graphics.Output>

Class: Adapter1

Property: Description1 : Microsoft.WindowsAPICodePack.DirectX.DXGI.AdapterDescription1

Method: get_Description1() : Microsoft.WindowsAPICodePack.DirectX.DXGI.AdapterDescription1

+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.Graphics.AdapterDescription1"

Struct: AdapterDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Graphics.AdapterDescription, Microsoft.WindowsAPICodePack.DirectX.Graphics.AdapterDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Graphics.AdapterDescription, Microsoft.WindowsAPICodePack.DirectX.Graphics.AdapterDescription) : System.Boolean

Field: AdapterLuid : Microsoft.WindowsAPICodePack.DirectX.DXGI.Luid

+ Kind changed to "Property"
Added methods: + get_AdapterLuid() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Luid, set_AdapterLuid(Microsoft.WindowsAPICodePack.DirectX.Graphics.Luid) : System.Void

Field: DedicatedSystemMemory : System.UInt32

+ Kind changed to "Property"
Added methods: + get_DedicatedSystemMemory() : System.UInt32, set_DedicatedSystemMemory(System.UInt32) : System.Void

Field: DedicatedVideoMemory : System.UInt32

+ Kind changed to "Property"
Added methods: + get_DedicatedVideoMemory() : System.UInt32, set_DedicatedVideoMemory(System.UInt32) : System.Void

Field: Description : System.String

+ Kind changed to "Property"
Added methods: + get_Description() : System.String, set_Description(System.String) : System.Void

Field: DeviceId : System.UInt32

+ Kind changed to "Property"
Added methods: + get_DeviceId() : System.UInt32, set_DeviceId(System.UInt32) : System.Void

Field: Revision : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Revision() : System.UInt32, set_Revision(System.UInt32) : System.Void

Field: SharedSystemMemory : System.UInt32

+ Kind changed to "Property"
Added methods: + get_SharedSystemMemory() : System.UInt32, set_SharedSystemMemory(System.UInt32) : System.Void

Field: SubSysId : System.UInt32

+ Kind changed to "Property"
Added methods: + get_SubSysId() : System.UInt32, set_SubSysId(System.UInt32) : System.Void

Field: VendorId : System.UInt32

+ Kind changed to "Property"
Added methods: + get_VendorId() : System.UInt32, set_VendorId(System.UInt32) : System.Void

Struct: AdapterDescription1

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Graphics.AdapterDescription1, Microsoft.WindowsAPICodePack.DirectX.Graphics.AdapterDescription1) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Graphics.AdapterDescription1, Microsoft.WindowsAPICodePack.DirectX.Graphics.AdapterDescription1) : System.Boolean

Field: AdapterLuid : Microsoft.WindowsAPICodePack.DirectX.DXGI.Luid

+ Kind changed to "Property"
Added methods: + get_AdapterLuid() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Luid, set_AdapterLuid(Microsoft.WindowsAPICodePack.DirectX.Graphics.Luid) : System.Void

Field: DedicatedSystemMemory : System.UInt32

+ Kind changed to "Property"
Added methods: + get_DedicatedSystemMemory() : System.UInt32, set_DedicatedSystemMemory(System.UInt32) : System.Void

Field: DedicatedVideoMemory : System.UInt32

+ Kind changed to "Property"
Added methods: + get_DedicatedVideoMemory() : System.UInt32, set_DedicatedVideoMemory(System.UInt32) : System.Void

Field: Description : System.String

+ Kind changed to "Property"
Added methods: + get_Description() : System.String, set_Description(System.String) : System.Void

Field: DeviceId : System.UInt32

+ Kind changed to "Property"
Added methods: + get_DeviceId() : System.UInt32, set_DeviceId(System.UInt32) : System.Void

Field: Flags : Microsoft.WindowsAPICodePack.DirectX.DXGI.AdapterFlag

+ Renamed to "Options"
+ Kind changed to "Property"
Added methods: + get_Options() : Microsoft.WindowsAPICodePack.DirectX.Graphics.AdapterOptions, set_Options(Microsoft.WindowsAPICodePack.DirectX.Graphics.AdapterOptions) : System.Void

Field: Revision : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Revision() : System.UInt32, set_Revision(System.UInt32) : System.Void

Field: SharedSystemMemory : System.UInt32

+ Kind changed to "Property"
Added methods: + get_SharedSystemMemory() : System.UInt32, set_SharedSystemMemory(System.UInt32) : System.Void

Field: SubSysId : System.UInt32

+ Kind changed to "Property"
Added methods: + get_SubSysId() : System.UInt32, set_SubSysId(System.UInt32) : System.Void

Field: VendorId : System.UInt32

+ Kind changed to "Property"
Added methods: + get_VendorId() : System.UInt32, set_VendorId(System.UInt32) : System.Void

Enum: AdapterFlag

+ Renamed to "AdapterOptions"

Struct: ColorRgb

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Method: .ctor(System.Single, System.Single, System.Single) : Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgb

+ Signature changed to "(System.Single, System.Single, System.Single) : Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgb"

Field: Blue : System.Single

+ Kind changed to "Property"
Added methods: + get_Blue() : System.Single, set_Blue(System.Single) : System.Void

Field: Green : System.Single

+ Kind changed to "Property"
Added methods: + get_Green() : System.Single, set_Green(System.Single) : System.Void

Method: op_Equality(Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgb, Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgb) : System.Boolean

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgb, Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgb) : System.Boolean"

Method: op_Inequality(Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgb, Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgb) : System.Boolean

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgb, Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgb) : System.Boolean"

Field: Red : System.Single

+ Kind changed to "Property"
Added methods: + get_Red() : System.Single, set_Red(System.Single) : System.Void

Struct: ColorRgba

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32

Method: .ctor(Microsoft.WindowsAPICodePack.DirectX.Colors) : Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgba

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.ColorF) : Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgba"

Method: .ctor(Microsoft.WindowsAPICodePack.DirectX.Colors, System.Single) : Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgba

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.ColorF, System.Single) : Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgba"

Method: .ctor(System.Single, System.Single, System.Single, System.Single) : Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgba

+ Signature changed to "(System.Single, System.Single, System.Single, System.Single) : Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgba"

Method: .ctor(System.Single[]) : Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgba

+ Signature changed to "(System.Single[]) : Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgba"

Field: Alpha : System.Single

+ Kind changed to "Property"
Added methods: + get_Alpha() : System.Single, set_Alpha(System.Single) : System.Void

Field: Blue : System.Single

+ Kind changed to "Property"
Added methods: + get_Blue() : System.Single, set_Blue(System.Single) : System.Void

Field: Green : System.Single

+ Kind changed to "Property"
Added methods: + get_Green() : System.Single, set_Green(System.Single) : System.Void

Method: op_Equality(Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgba, Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgba) : System.Boolean

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgba, Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgba) : System.Boolean"

Method: op_Inequality(Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgba, Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgba) : System.Boolean

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgba, Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgba) : System.Boolean"

Field: Red : System.Single

+ Kind changed to "Property"
Added methods: + get_Red() : System.Single, set_Red(System.Single) : System.Void

Class: DeviceSubObject

Method: GetDirect3D10Device() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice

+ Renamed to "AsDirect3D10Device"
+ Kind changed to "Property"
Added methods: + get_AsDirect3D10Device() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice

Method: GetDirect3D10Device1() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice1

+ Renamed to "AsDirect3D10Device1"
+ Kind changed to "Property"
Added methods: + get_AsDirect3D10Device1() : Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice1

Method: GetDirect3D11Device() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DDevice

+ Renamed to "AsDirect3D11Device"
+ Kind changed to "Property"
Added methods: + get_AsDirect3D11Device() : Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DDevice

Method: GetDXGIDevice() : Microsoft.WindowsAPICodePack.DirectX.DXGI.DXGIDevice

+ Renamed to "AsGraphicsDevice"
+ Kind changed to "Property"
Added methods: + get_AsGraphicsDevice() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Device

Class: DXGIDevice

+ Renamed to "Device"

Method: GetAdapter() : Microsoft.WindowsAPICodePack.DirectX.DXGI.Adapter

+ Renamed to "Adapter"
+ Kind changed to "Property"
Added methods: + get_Adapter() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Adapter

Property: GPUThreadPriority : System.Int32

+ Renamed to "GpuThreadPriority"

Method: get_GPUThreadPriority() : System.Int32

+ Renamed to "get_GpuThreadPriority"

Method: set_GPUThreadPriority(System.Int32) : System.Void

+ Renamed to "set_GpuThreadPriority"

Method: QueryResourceResidency(System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.DXGI.DXGIResource>) : Microsoft.WindowsAPICodePack.DirectX.DXGI.Residency[]

+ Signature changed to "(System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Graphics.Resource>) : Microsoft.WindowsAPICodePack.DirectX.Graphics.Residency[]"

Class: DXGIDevice1

+ Renamed to "Device1"

Class: DXGIException

+ Renamed to "GraphicsException"
Added methods: + .ctor(System.String) : Microsoft.WindowsAPICodePack.DirectX.Graphics.GraphicsException, .ctor(System.String, System.Exception) : Microsoft.WindowsAPICodePack.DirectX.Graphics.GraphicsException, .ctor(System.String, System.Exception, System.Int32) : Microsoft.WindowsAPICodePack.DirectX.Graphics.GraphicsException, .ctor(System.String, System.Int32) : Microsoft.WindowsAPICodePack.DirectX.Graphics.GraphicsException

Method: .ctor() : Microsoft.WindowsAPICodePack.DirectX.DXGI.DXGIException

+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.Graphics.GraphicsException"

Method: .ctor(System.Int32) : Microsoft.WindowsAPICodePack.DirectX.DXGI.DXGIException

+ Signature changed to "(System.Int32) : Microsoft.WindowsAPICodePack.DirectX.Graphics.GraphicsException"

Method: .ctor(System.String, System.Exception, System.Int32) : Microsoft.WindowsAPICodePack.DirectX.DXGI.DXGIException

Accessibility changed to "not public"
+ Signature changed to "(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) : Microsoft.WindowsAPICodePack.DirectX.Graphics.GraphicsException"

Method: .ctor(System.String, System.Int32) : Microsoft.WindowsAPICodePack.DirectX.DXGI.DXGIException

Accessibility changed to "not public"
+ Signature changed to "(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext, System.Int32) : Microsoft.WindowsAPICodePack.DirectX.Graphics.GraphicsException"

Class: DXGIFactory

+ Renamed to "Factory"
Removed methods: + GetAdapter(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.DXGI.Adapter

Method: CreateFactory() : Microsoft.WindowsAPICodePack.DirectX.DXGI.DXGIFactory

+ Renamed to "Create"
+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Factory"

Method: CreateSwapChain(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice, Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChainDescription) : Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChain

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice, Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapChainDescription) : Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapChain"

Method: CreateSwapChain(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DDevice, Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChainDescription) : Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChain

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DDevice, Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapChainDescription) : Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapChain"

Method: GetAdapters() : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.DXGI.Adapter>

+ Renamed to "Adapters"
+ Kind changed to "Property"
Added methods: + get_Adapters() : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Graphics.Adapter>

Method: GetWindowAssociation() : System.IntPtr

+ Renamed to "WindowAssociation"
+ Kind changed to "Property"
Added methods: + get_WindowAssociation() : System.IntPtr

Method: MakeWindowAssociation(System.IntPtr, Microsoft.WindowsAPICodePack.DirectX.DXGI.MakeWindowAssociationFlags) : System.Void

+ Signature changed to "(System.IntPtr, Microsoft.WindowsAPICodePack.DirectX.Graphics.MakeWindowAssociationOptions) : System.Void"

Class: DXGIFactory1

+ Renamed to "Factory1"
Removed methods: + GetAdapter1(System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.DXGI.Adapter1

Method: CreateFactory1() : Microsoft.WindowsAPICodePack.DirectX.DXGI.DXGIFactory1

+ Renamed to "Create"
+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Factory1"

Method: GetAdapters1() : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.DXGI.Adapter1>

+ Renamed to "Adapters"
+ Kind changed to "Property"
Added methods: + get_Adapters() : System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.WindowsAPICodePack.DirectX.Graphics.Adapter1>

Class: DXGIObject

+ Renamed to "GraphicsObject"

Class: DXGIResource

+ Renamed to "Resource"

Property: EvictionPriority : Microsoft.WindowsAPICodePack.DirectX.DXGI.ResourcePriority

Method: get_EvictionPriority() : Microsoft.WindowsAPICodePack.DirectX.DXGI.ResourcePriority

+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.Graphics.ResourcePriority"

Method: set_EvictionPriority(Microsoft.WindowsAPICodePack.DirectX.DXGI.ResourcePriority) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.ResourcePriority) : System.Void"

Property: UsageFlags : Microsoft.WindowsAPICodePack.DirectX.DXGI.UsageOption

+ Renamed to "UsageOptions"
Removed methods: + get_UsageFlags() : Microsoft.WindowsAPICodePack.DirectX.DXGI.UsageOption
Added methods: + get_UsageOptions() : Microsoft.WindowsAPICodePack.DirectX.Graphics.UsageOptions

Enum: EnumModes

+ Renamed to "NonDefaultModes"

Field: Default

+ Renamed to "None"

Enum: Format

Field: A8_UNORM

+ Renamed to "A8UNorm"

Field: B5G5R5A1_UNORM

+ Renamed to "B5G5R5A1UNorm"

Field: B5G6R5_UNORM

+ Renamed to "B5G6R5UNorm"

Field: B8G8R8A8_TYPELESS

+ Renamed to "B8G8R8A8Typeless"

Field: B8G8R8A8_UNORM

+ Renamed to "B8G8R8A8UNorm"

Field: B8G8R8A8_UNORM_SRGB

+ Renamed to "B8G8R8A8UNormSrgb"

Field: B8G8R8X8_TYPELESS

+ Renamed to "B8G8R8X8Typeless"

Field: B8G8R8X8_UNORM

+ Renamed to "B8G8R8X8UNorm"

Field: B8G8R8X8_UNORM_SRGB

+ Renamed to "B8G8R8X8UNormSrgb"

Field: BC1_TYPELESS

+ Renamed to "BC1Typeless"

Field: BC1_UNORM

+ Renamed to "BC1UNorm"

Field: BC1_UNORM_SRGB

+ Renamed to "BC1UNormSrgb"

Field: BC2_TYPELESS

+ Renamed to "BC2Typeless"

Field: BC2_UNORM

+ Renamed to "BC2UNorm"

Field: BC2_UNORM_SRGB

+ Renamed to "BC2UNormSrgb"

Field: BC3_TYPELESS

+ Renamed to "BC3Typeless"

Field: BC3_UNORM

+ Renamed to "BC3UNorm"

Field: BC3_UNORM_SRGB

+ Renamed to "BC3UNormSrgb"

Field: BC4_SNORM

+ Renamed to "BC4SNorm"

Field: BC4_TYPELESS

+ Renamed to "BC4Typeless"

Field: BC4_UNORM

+ Renamed to "BC4UNorm"

Field: BC5_SNORM

+ Renamed to "BC5SNorm"

Field: BC5_TYPELESS

+ Renamed to "BC5Typeless"

Field: BC5_UNORM

+ Renamed to "BC5UNorm"

Field: BC6H_SF16

+ Renamed to "BlockCompression6HSignedFloat16"

Field: BC6H_TYPELESS

+ Renamed to "BlockCompression6HTypeless"

Field: BC6H_UF16

+ Renamed to "BlockCompression6HUnsignedFloat16"

Field: BC7_TYPELESS

+ Renamed to "BlockCompression7Typeless"

Field: BC7_UNORM

+ Renamed to "BlockCompression7UNorm"

Field: BC7_UNORM_SRGB

+ Renamed to "BlockCompression7UNormSrgb"

Field: D16_UNORM

+ Renamed to "D16UNorm"

Field: D24_UNORM_S8_UINT

+ Renamed to "D24UNormS8UInt"

Field: D32_FLOAT

+ Renamed to "D32Float"

Field: D32_FLOAT_S8X24_UINT

+ Renamed to "D32FloatS8X24UInt"

Field: G8R8_G8B8_UNORM

+ Renamed to "G8R8G8B8UNorm"

Field: R1_UNORM

+ Renamed to "R1UNorm"

Field: R10G10B10_XR_BIAS_A2_UNORM

+ Renamed to "R10G10B10XRBiasA2UNorm"

Field: R10G10B10A2_TYPELESS

+ Renamed to "R10G10B10A2Typeless"

Field: R10G10B10A2_UINT

+ Renamed to "R10G10B10A2UInt"

Field: R10G10B10A2_UNORM

+ Renamed to "R10G10B10A2UNorm"

Field: R11G11B10_FLOAT

+ Renamed to "R11G11B10Float"

Field: R16_FLOAT

+ Renamed to "R16Float"

Field: R16_SINT

+ Renamed to "R16SInt"

Field: R16_SNORM

+ Renamed to "R16SNorm"

Field: R16_TYPELESS

+ Renamed to "R16Typeless"

Field: R16_UINT

+ Renamed to "R16UInt"

Field: R16_UNORM

+ Renamed to "R16UNorm"

Field: R16G16_FLOAT

+ Renamed to "R16G16Float"

Field: R16G16_SINT

+ Renamed to "R16G16SInt"

Field: R16G16_SNORM

+ Renamed to "R16G16SNorm"

Field: R16G16_TYPELESS

+ Renamed to "R16G16Typeless"

Field: R16G16_UINT

+ Renamed to "R16G16UInt"

Field: R16G16_UNORM

+ Renamed to "R16G16UNorm"

Field: R16G16B16A16_FLOAT

+ Renamed to "R16G16B16A16Float"

Field: R16G16B16A16_SINT

+ Renamed to "R16G16B16A16SInt"

Field: R16G16B16A16_SNORM

+ Renamed to "R16G16B16A16SNorm"

Field: R16G16B16A16_TYPELESS

+ Renamed to "R16G16B16A16Typeless"

Field: R16G16B16A16_UINT

+ Renamed to "R16G16B16A16UInt"

Field: R16G16B16A16_UNORM

+ Renamed to "R16G16B16A16UNorm"

Field: R24_UNORM_X8_TYPELESS

+ Renamed to "R24UNormX8Typeless"

Field: R24G8_TYPELESS

+ Renamed to "R24G8Typeless"

Field: R32_FLOAT

+ Renamed to "R32Float"

Field: R32_FLOAT_X8X24_TYPELESS

+ Renamed to "R32FloatX8X24Typeless"

Field: R32_SINT

+ Renamed to "R32SInt"

Field: R32_TYPELESS

+ Renamed to "R32Typeless"

Field: R32_UINT

+ Renamed to "R32UInt"

Field: R32G32_FLOAT

+ Renamed to "R32G32Float"

Field: R32G32_SINT

+ Renamed to "R32G32SInt"

Field: R32G32_TYPELESS

+ Renamed to "R32G32Typeless"

Field: R32G32_UINT

+ Renamed to "R32G32UInt"

Field: R32G32B32_FLOAT

+ Renamed to "R32G32B32Float"

Field: R32G32B32_SINT

+ Renamed to "R32G32B32SInt"

Field: R32G32B32_TYPELESS

+ Renamed to "R32G32B32Typeless"

Field: R32G32B32_UINT

+ Renamed to "R32G32B32UInt"

Field: R32G32B32A32_FLOAT

+ Renamed to "R32G32B32A32Float"

Field: R32G32B32A32_SINT

+ Renamed to "R32G32B32A32SInt"

Field: R32G32B32A32_TYPELESS

+ Renamed to "R32G32B32A32Typeless"

Field: R32G32B32A32_UINT

+ Renamed to "R32G32B32A32UInt"

Field: R32G8X24_TYPELESS

+ Renamed to "R32G8X24Typeless"

Field: R8_SINT

+ Renamed to "R8SInt"

Field: R8_SNORM

+ Renamed to "R8SNorm"

Field: R8_TYPELESS

+ Renamed to "R8Typeless"

Field: R8_UINT

+ Renamed to "R8UInt"

Field: R8_UNORM

+ Renamed to "R8UNorm"

Field: R8G8_B8G8_UNORM

+ Renamed to "R8G8B8G8UNorm"

Field: R8G8_SINT

+ Renamed to "R8G8SInt"

Field: R8G8_SNORM

+ Renamed to "R8G8SNorm"

Field: R8G8_TYPELESS

+ Renamed to "R8G8Typeless"

Field: R8G8_UINT

+ Renamed to "R8G8UInt"

Field: R8G8_UNORM

+ Renamed to "R8G8UNorm"

Field: R8G8B8A8_SINT

+ Renamed to "R8G8B8A8SInt"

Field: R8G8B8A8_SNORM

+ Renamed to "R8G8B8A8SNorm"

Field: R8G8B8A8_TYPELESS

+ Renamed to "R8G8B8A8Typeless"

Field: R8G8B8A8_UINT

+ Renamed to "R8G8B8A8UInt"

Field: R8G8B8A8_UNORM

+ Renamed to "R8G8B8A8UNorm"

Field: R8G8B8A8_UNORM_SRGB

+ Renamed to "R8G8B8A8UNormSrgb"

Field: R9G9B9E5_SHAREDEXP

+ Renamed to "R9G9B9E5SharedExp"

Field: X24_TYPELESS_G8_UINT

+ Renamed to "X24TypelessG8UInt"

Field: X32_TYPELESS_G8X24_UINT

+ Renamed to "X32TypelessG8X24UInt"

Struct: FrameStatistics

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Graphics.FrameStatistics, Microsoft.WindowsAPICodePack.DirectX.Graphics.FrameStatistics) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Graphics.FrameStatistics, Microsoft.WindowsAPICodePack.DirectX.Graphics.FrameStatistics) : System.Boolean

Field: PresentCount : System.UInt32

+ Kind changed to "Property"
Added methods: + get_PresentCount() : System.UInt32, set_PresentCount(System.UInt32) : System.Void

Field: PresentRefreshCount : System.UInt32

+ Kind changed to "Property"
Added methods: + get_PresentRefreshCount() : System.UInt32, set_PresentRefreshCount(System.UInt32) : System.Void

Field: SyncGPUTime : System.Int64

+ Renamed to "SyncGpuTime"
+ Kind changed to "Property"
Added methods: + get_SyncGpuTime() : System.Int64, set_SyncGpuTime(System.Int64) : System.Void

Field: SyncQueryPerformanceCounterTime : System.Int64

+ Kind changed to "Property"
Added methods: + get_SyncQueryPerformanceCounterTime() : System.Int64, set_SyncQueryPerformanceCounterTime(System.Int64) : System.Void

Field: SyncRefreshCount : System.UInt32

+ Kind changed to "Property"
Added methods: + get_SyncRefreshCount() : System.UInt32, set_SyncRefreshCount(System.UInt32) : System.Void

Struct: GammaControl

Property: GammaCurve : Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgb[]

Method: get_GammaCurve() : Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgb[]

+ Signature changed to "() : System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgb>"

Field: Offset : Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgb

+ Kind changed to "Property"
Added methods: + get_Offset() : Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgb, set_Offset(Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgb) : System.Void

Field: Scale : Microsoft.WindowsAPICodePack.DirectX.DXGI.ColorRgb

+ Kind changed to "Property"
Added methods: + get_Scale() : Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgb, set_Scale(Microsoft.WindowsAPICodePack.DirectX.Graphics.ColorRgb) : System.Void

Struct: GammaControlCapabilities

Property: ControlPointPositions : System.Single[]

Method: get_ControlPointPositions() : System.Single[]

+ Signature changed to "() : System.Collections.Generic.IEnumerable<System.Single>"

Field: MaxConvertedValue : System.Single

+ Kind changed to "Property"
Added methods: + get_MaxConvertedValue() : System.Single, set_MaxConvertedValue(System.Single) : System.Void

Field: MinConvertedValue : System.Single

+ Kind changed to "Property"
Added methods: + get_MinConvertedValue() : System.Single, set_MinConvertedValue(System.Single) : System.Void

Field: NumGammaControlPoints : System.UInt32

+ Renamed to "GammaControlPointCount"
+ Kind changed to "Property"
Added methods: + get_GammaControlPointCount() : System.UInt32, set_GammaControlPointCount(System.UInt32) : System.Void

Field: ScaleAndOffsetSupported : System.Boolean

+ Kind changed to "Property"
Added methods: + get_ScaleAndOffsetSupported() : System.Boolean, set_ScaleAndOffsetSupported(System.Boolean) : System.Void

Class: KeyedMutex

Added methods: + FromResource(Microsoft.WindowsAPICodePack.DirectX.DirectUnknown) : Microsoft.WindowsAPICodePack.DirectX.Graphics.KeyedMutex

Struct: Luid

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Graphics.Luid, Microsoft.WindowsAPICodePack.DirectX.Graphics.Luid) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Graphics.Luid, Microsoft.WindowsAPICodePack.DirectX.Graphics.Luid) : System.Boolean

Field: HighPart : System.Int32

+ Kind changed to "Property"
Added methods: + get_HighPart() : System.Int32, set_HighPart(System.Int32) : System.Void

Field: LowPart : System.Int32

+ Kind changed to "Property"
Added methods: + get_LowPart() : System.Int32, set_LowPart(System.Int32) : System.Void

Enum: MakeWindowAssociationFlags

+ Renamed to "MakeWindowAssociationOptions"

Enum: MapOption

+ Renamed to "MapOptions"

Field: Unspecified

+ Renamed to "None"

Struct: MappedRect

Field: Bits : System.IntPtr

+ Kind changed to "Property"
Added methods: + get_Bits() : System.IntPtr, set_Bits(System.IntPtr) : System.Void

Field: Pitch : System.Int32

+ Kind changed to "Property"
Added methods: + get_Pitch() : System.Int32, set_Pitch(System.Int32) : System.Void

Struct: ModeDescription

Added methods: + .ctor(System.UInt32, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, Microsoft.WindowsAPICodePack.DirectX.Graphics.Rational) : Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeDescription, .ctor(System.UInt32, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, Microsoft.WindowsAPICodePack.DirectX.Graphics.Rational, Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeScanlineOrder, Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeScaling) : Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeDescription, Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeDescription, Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeDescription, Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeDescription) : System.Boolean

Field: Format : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_Format() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_Format(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: Height : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Height() : System.UInt32, set_Height(System.UInt32) : System.Void

Field: RefreshRate : Microsoft.WindowsAPICodePack.DirectX.DXGI.Rational

+ Kind changed to "Property"
Added methods: + get_RefreshRate() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Rational, set_RefreshRate(Microsoft.WindowsAPICodePack.DirectX.Graphics.Rational) : System.Void

Field: Scaling : Microsoft.WindowsAPICodePack.DirectX.DXGI.ModeScaling

+ Kind changed to "Property"
Added methods: + get_Scaling() : Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeScaling, set_Scaling(Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeScaling) : System.Void

Field: ScanlineOrdering : Microsoft.WindowsAPICodePack.DirectX.DXGI.ModeScanlineOrder

+ Kind changed to "Property"
Added methods: + get_ScanlineOrdering() : Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeScanlineOrder, set_ScanlineOrdering(Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeScanlineOrder) : System.Void

Field: Width : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Width() : System.UInt32, set_Width(System.UInt32) : System.Void

Struct: MonitorInfo

Field: IsPrimaryMonitor : System.Boolean

+ Kind changed to "Property"
Added methods: + get_IsPrimaryMonitor() : System.Boolean, set_IsPrimaryMonitor(System.Boolean) : System.Void

Field: MonitorCoordinates : Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3dRect

+ Kind changed to "Property"
Added methods: + get_MonitorCoordinates() : Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3DRect, set_MonitorCoordinates(Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3DRect) : System.Void

Field: MonitorHandle : System.IntPtr

+ Kind changed to "Property"
Added methods: + get_MonitorHandle() : System.IntPtr, set_MonitorHandle(System.IntPtr) : System.Void

Field: WorkCoordinates : Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3dRect

+ Kind changed to "Property"
Added methods: + get_WorkCoordinates() : Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3DRect, set_WorkCoordinates(Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3DRect) : System.Void

Class: Output

Removed methods: + GetGammaControl() : Microsoft.WindowsAPICodePack.DirectX.DXGI.GammaControl, SetGammaControl(Microsoft.WindowsAPICodePack.DirectX.DXGI.GammaControl) : System.Void
Added properties: + GammaControl : Microsoft.WindowsAPICodePack.DirectX.Graphics.GammaControl

Property: Description : Microsoft.WindowsAPICodePack.DirectX.DXGI.OutputDescription

Method: get_Description() : Microsoft.WindowsAPICodePack.DirectX.DXGI.OutputDescription

+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.Graphics.OutputDescription"

Method: FindClosestMatchingMode(Microsoft.WindowsAPICodePack.DirectX.DXGI.ModeDescription) : Microsoft.WindowsAPICodePack.DirectX.DXGI.ModeDescription

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeDescription) : Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeDescription"

Method: FindClosestMatchingMode(Microsoft.WindowsAPICodePack.DirectX.DXGI.ModeDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice) : Microsoft.WindowsAPICodePack.DirectX.DXGI.ModeDescription

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.D3DDevice) : Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeDescription"

Method: FindClosestMatchingMode(Microsoft.WindowsAPICodePack.DirectX.DXGI.ModeDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DDevice) : Microsoft.WindowsAPICodePack.DirectX.DXGI.ModeDescription

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeDescription, Microsoft.WindowsAPICodePack.DirectX.Direct3D11.D3DDevice) : Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeDescription"

Method: GetDisplayModeList(Microsoft.WindowsAPICodePack.DirectX.DXGI.Format, Microsoft.WindowsAPICodePack.DirectX.DXGI.EnumModes) : Microsoft.WindowsAPICodePack.DirectX.DXGI.ModeDescription[]

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, Microsoft.WindowsAPICodePack.DirectX.Graphics.NonDefaultModes) : Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeDescription[]"

Method: GetDisplaySurfaceData(Microsoft.WindowsAPICodePack.DirectX.DXGI.Surface) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Surface) : System.Void"

Method: GetGammaControlCapabilities() : Microsoft.WindowsAPICodePack.DirectX.DXGI.GammaControlCapabilities

+ Renamed to "GammaControlCapabilities"
+ Kind changed to "Property"
Added methods: + get_GammaControlCapabilities() : Microsoft.WindowsAPICodePack.DirectX.Graphics.GammaControlCapabilities

Method: GetNumberOfDisplayModes(Microsoft.WindowsAPICodePack.DirectX.DXGI.Format, Microsoft.WindowsAPICodePack.DirectX.DXGI.EnumModes) : System.UInt32

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, Microsoft.WindowsAPICodePack.DirectX.Graphics.NonDefaultModes) : System.UInt32"

Method: GetRenderedFrameStatistics() : Microsoft.WindowsAPICodePack.DirectX.DXGI.FrameStatistics

+ Renamed to "RenderedFrameStatistics"
+ Kind changed to "Property"
Added methods: + get_RenderedFrameStatistics() : Microsoft.WindowsAPICodePack.DirectX.Graphics.FrameStatistics

Method: SetDisplaySurface(Microsoft.WindowsAPICodePack.DirectX.DXGI.Surface) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Surface) : System.Void"

Method: TakeOwnership(Microsoft.WindowsAPICodePack.DirectX.DXGI.DXGIDevice, System.Boolean) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.Device, System.Boolean) : System.Void"

Struct: OutputDescription

Field: AttachedToDesktop : System.Boolean

+ Kind changed to "Property"
Added methods: + get_AttachedToDesktop() : System.Boolean, set_AttachedToDesktop(System.Boolean) : System.Void

Field: DesktopCoordinates : Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3dRect

+ Kind changed to "Property"
Added methods: + get_DesktopCoordinates() : Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3DRect, set_DesktopCoordinates(Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3DRect) : System.Void

Field: DeviceName : System.String

+ Kind changed to "Property"
Added methods: + get_DeviceName() : System.String, set_DeviceName(System.String) : System.Void

Field: Monitor : Microsoft.WindowsAPICodePack.DirectX.DXGI.MonitorInfo

+ Kind changed to "Property"
Added methods: + get_Monitor() : Microsoft.WindowsAPICodePack.DirectX.Graphics.MonitorInfo, set_Monitor(Microsoft.WindowsAPICodePack.DirectX.Graphics.MonitorInfo) : System.Void

Field: Rotation : Microsoft.WindowsAPICodePack.DirectX.DXGI.ModeRotation

+ Kind changed to "Property"
Added methods: + get_Rotation() : Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeRotation, set_Rotation(Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeRotation) : System.Void

Enum: PresentFlag

+ Renamed to "PresentOptions"

Field: Default

+ Renamed to "None"

Struct: Rational

Added methods: + .ctor(System.UInt32, System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.Graphics.Rational, Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Graphics.Rational, Microsoft.WindowsAPICodePack.DirectX.Graphics.Rational) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Graphics.Rational, Microsoft.WindowsAPICodePack.DirectX.Graphics.Rational) : System.Boolean

Field: Denominator : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Denominator() : System.UInt32, set_Denominator(System.UInt32) : System.Void

Field: Numerator : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Numerator() : System.UInt32, set_Numerator(System.UInt32) : System.Void

Struct: SampleDescription

Added methods: + .ctor(System.UInt32, System.UInt32) : Microsoft.WindowsAPICodePack.DirectX.Graphics.SampleDescription, Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Graphics.SampleDescription, Microsoft.WindowsAPICodePack.DirectX.Graphics.SampleDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Graphics.SampleDescription, Microsoft.WindowsAPICodePack.DirectX.Graphics.SampleDescription) : System.Boolean

Field: Count : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Count() : System.UInt32, set_Count(System.UInt32) : System.Void

Field: Quality : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Quality() : System.UInt32, set_Quality(System.UInt32) : System.Void

Struct: SharedResource

Field: Handle : System.IntPtr

+ Kind changed to "Property"
Added methods: + get_Handle() : System.IntPtr, set_Handle(System.IntPtr) : System.Void

Class: Surface

Property: Description : Microsoft.WindowsAPICodePack.DirectX.DXGI.SurfaceDescription

Method: get_Description() : Microsoft.WindowsAPICodePack.DirectX.DXGI.SurfaceDescription

+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.Graphics.SurfaceDescription"

Method: Map(Microsoft.WindowsAPICodePack.DirectX.DXGI.MapOption) : Microsoft.WindowsAPICodePack.DirectX.DXGI.MappedRect

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.MapOptions) : Microsoft.WindowsAPICodePack.DirectX.Graphics.MappedRect"

Class: Surface1

Method: ReleaseDC(Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3dRect) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Direct3D.D3DRect) : System.Void"

Struct: SurfaceDescription

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.Graphics.SurfaceDescription, Microsoft.WindowsAPICodePack.DirectX.Graphics.SurfaceDescription) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.Graphics.SurfaceDescription, Microsoft.WindowsAPICodePack.DirectX.Graphics.SurfaceDescription) : System.Boolean

Field: Format : Microsoft.WindowsAPICodePack.DirectX.DXGI.Format

+ Kind changed to "Property"
Added methods: + get_Format() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, set_Format(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format) : System.Void

Field: Height : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Height() : System.UInt32, set_Height(System.UInt32) : System.Void

Field: SampleDescription : Microsoft.WindowsAPICodePack.DirectX.DXGI.SampleDescription

+ Kind changed to "Property"
Added methods: + get_SampleDescription() : Microsoft.WindowsAPICodePack.DirectX.Graphics.SampleDescription, set_SampleDescription(Microsoft.WindowsAPICodePack.DirectX.Graphics.SampleDescription) : System.Void

Field: Width : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Width() : System.UInt32, set_Width(System.UInt32) : System.Void

Class: SwapChain

Property: Description : Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChainDescription

Method: get_Description() : Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChainDescription

+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapChainDescription"

Method: GetContainingOutput() : Microsoft.WindowsAPICodePack.DirectX.DXGI.Output

+ Renamed to "ContainingOutput"
+ Kind changed to "Property"
Added methods: + get_ContainingOutput() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Output

Method: GetFrameStatistics() : Microsoft.WindowsAPICodePack.DirectX.DXGI.FrameStatistics

+ Renamed to "FrameStatistics"
+ Kind changed to "Property"
Added methods: + get_FrameStatistics() : Microsoft.WindowsAPICodePack.DirectX.Graphics.FrameStatistics

Method: GetFullScreenState(Microsoft.WindowsAPICodePack.DirectX.DXGI.Output&) : System.Boolean

+ Renamed to "FullScreenOutput"
+ Kind changed to "Property"
Added methods: + get_FullScreenOutput() : Microsoft.WindowsAPICodePack.DirectX.Graphics.Output

Method: Present(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.DXGI.PresentFlag) : System.Void

+ Signature changed to "(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Graphics.PresentOptions) : System.Void"

Method: ResizeBuffers(System.UInt32, System.UInt32, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.DXGI.Format, Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChainFlag) : System.Void

+ Signature changed to "(System.UInt32, System.UInt32, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapChainOptions) : System.Void"

Method: ResizeTarget(Microsoft.WindowsAPICodePack.DirectX.DXGI.ModeDescription) : System.Void

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeDescription) : System.Void"

Method: SetFullScreenState(System.Boolean, Microsoft.WindowsAPICodePack.DirectX.DXGI.Output) : System.Void

+ Signature changed to "(System.Boolean, Microsoft.WindowsAPICodePack.DirectX.Graphics.Output) : System.Void"

Method: TryPresent(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.DXGI.PresentFlag, Microsoft.WindowsAPICodePack.DirectX.ErrorCode&) : System.Boolean

+ Signature changed to "(System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Graphics.PresentOptions, Microsoft.WindowsAPICodePack.DirectX.ErrorCode&) : System.Boolean"

Method: TryResizeBuffers(System.UInt32, System.UInt32, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.DXGI.Format, Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChainFlag, Microsoft.WindowsAPICodePack.DirectX.ErrorCode&) : System.Boolean

+ Signature changed to "(System.UInt32, System.UInt32, System.UInt32, Microsoft.WindowsAPICodePack.DirectX.Graphics.Format, Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapChainOptions, Microsoft.WindowsAPICodePack.DirectX.ErrorCode&) : System.Boolean"

Struct: SwapChainDescription

Field: BufferCount : System.UInt32

+ Kind changed to "Property"
Added methods: + get_BufferCount() : System.UInt32, set_BufferCount(System.UInt32) : System.Void

Field: BufferDescription : Microsoft.WindowsAPICodePack.DirectX.DXGI.ModeDescription

+ Kind changed to "Property"
Added methods: + get_BufferDescription() : Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeDescription, set_BufferDescription(Microsoft.WindowsAPICodePack.DirectX.Graphics.ModeDescription) : System.Void

Field: BufferUsage : Microsoft.WindowsAPICodePack.DirectX.DXGI.UsageOption

+ Kind changed to "Property"
Added methods: + get_BufferUsage() : Microsoft.WindowsAPICodePack.DirectX.Graphics.UsageOptions, set_BufferUsage(Microsoft.WindowsAPICodePack.DirectX.Graphics.UsageOptions) : System.Void

Field: Flags : Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapChainFlag

+ Renamed to "Options"
+ Kind changed to "Property"
Added methods: + get_Options() : Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapChainOptions, set_Options(Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapChainOptions) : System.Void

Field: OutputWindowHandle : System.IntPtr

+ Kind changed to "Property"
Added methods: + get_OutputWindowHandle() : System.IntPtr, set_OutputWindowHandle(System.IntPtr) : System.Void

Field: SampleDescription : Microsoft.WindowsAPICodePack.DirectX.DXGI.SampleDescription

+ Kind changed to "Property"
Added methods: + get_SampleDescription() : Microsoft.WindowsAPICodePack.DirectX.Graphics.SampleDescription, set_SampleDescription(Microsoft.WindowsAPICodePack.DirectX.Graphics.SampleDescription) : System.Void

Field: SwapEffect : Microsoft.WindowsAPICodePack.DirectX.DXGI.SwapEffect

+ Kind changed to "Property"
Added methods: + get_SwapEffect() : Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapEffect, set_SwapEffect(Microsoft.WindowsAPICodePack.DirectX.Graphics.SwapEffect) : System.Void

Field: Windowed : System.Boolean

+ Kind changed to "Property"
Added methods: + get_Windowed() : System.Boolean, set_Windowed(System.Boolean) : System.Void

Enum: SwapChainFlag

+ Renamed to "SwapChainOptions"

Enum: UsageOption

+ Renamed to "UsageOptions"

Field: Unspecified

+ Renamed to "None"

Namespace: Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent

Enum: BitmapLockFlags

+ Renamed to "BitmapLockOptions"

Struct: BitmapRectangle

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapRectangle, Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapRectangle) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapRectangle, Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapRectangle) : System.Boolean

Field: Height : System.Int32

+ Kind changed to "Property"
Added methods: + get_Height() : System.Int32, set_Height(System.Int32) : System.Void

Field: Width : System.Int32

+ Kind changed to "Property"
Added methods: + get_Width() : System.Int32, set_Width(System.Int32) : System.Void

Field: X : System.Int32

+ Kind changed to "Property"
Added methods: + get_X() : System.Int32, set_X(System.Int32) : System.Void

Field: Y : System.Int32

+ Kind changed to "Property"
Added methods: + get_Y() : System.Int32, set_Y(System.Int32) : System.Void

Struct: BitmapResolution

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapResolution, Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapResolution) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapResolution, Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapResolution) : System.Boolean

Field: DpiX : System.Double

+ Kind changed to "Property"
Added methods: + get_DpiX() : System.Double, set_DpiX(System.Double) : System.Void

Field: DpiY : System.Double

+ Kind changed to "Property"
Added methods: + get_DpiY() : System.Double, set_DpiY(System.Double) : System.Void

Struct: BitmapSize

Added methods: + Equals(System.Object) : System.Boolean, GetHashCode() : System.Int32, op_Equality(Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapSize, Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapSize) : System.Boolean, op_Inequality(Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapSize, Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapSize) : System.Boolean

Field: Height : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Height() : System.UInt32, set_Height(System.UInt32) : System.Void

Field: Width : System.UInt32

+ Kind changed to "Property"
Added methods: + get_Width() : System.UInt32, set_Width(System.UInt32) : System.Void

Class: ContainerFormats

Method: .ctor() : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.ContainerFormats

Accessibility changed to "not public"

Field: Bmp : System.Guid

+ Kind changed to "Property"
Added methods: + get_Bmp() : System.Guid

Field: Gif : System.Guid

+ Kind changed to "Property"
Added methods: + get_Gif() : System.Guid

Field: Ico : System.Guid

+ Kind changed to "Property"
Added methods: + get_Ico() : System.Guid

Field: Jpeg : System.Guid

+ Kind changed to "Property"
Added methods: + get_Jpeg() : System.Guid

Field: Png : System.Guid

+ Kind changed to "Property"
Added methods: + get_Png() : System.Guid

Field: Tiff : System.Guid

+ Kind changed to "Property"
Added methods: + get_Tiff() : System.Guid

Field: Wmp : System.Guid

+ Kind changed to "Property"
Added methods: + get_Wmp() : System.Guid

Enum: DecodeMetadataCacheOptions

+ Renamed to "DecodeMetadataCacheOption"

Class: ImagingFactory

Added methods: + Create() : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.ImagingFactory

Method: .ctor() : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.ImagingFactory

Accessibility changed to "not public"
+ Signature changed to "(IWICImagingFactory*) : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.ImagingFactory"

Method: CreateDecoderFromFilename(System.String, Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.DesiredAccess, Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.DecodeMetadataCacheOptions) : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapDecoder

+ Renamed to "CreateDecoderFromFileName"
+ Signature changed to "(System.String, Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.DesiredAccess, Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.DecodeMetadataCacheOption) : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapDecoder"

Method: CreateDecoderFromStream(System.IO.Stream, Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.DecodeMetadataCacheOptions) : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapDecoder

+ Signature changed to "(System.IO.Stream, Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.DecodeMetadataCacheOption) : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapDecoder"

Method: CreateFormatConverter() : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.WICFormatConverter

+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.FormatConverter"

Method: CreateWICBitmap(System.UInt32, System.UInt32, System.Guid, Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapCreateCacheOption) : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.WICBitmap

+ Renamed to "CreateImagingBitmap"
+ Signature changed to "(System.UInt32, System.UInt32, System.Guid, Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapCreateCacheOption) : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.ImagingBitmap"

Class: PixelFormats

Method: .ctor() : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.PixelFormats

Accessibility changed to "not public"

Field: DontCare : System.Guid

+ Renamed to "DoNotCare"
+ Kind changed to "Property"
Added methods: + get_DoNotCare() : System.Guid

Field: Pf112bpp6ChannelsAlpha : System.Guid

+ Renamed to "SixChannelAlpha112Bpp"
+ Kind changed to "Property"
Added methods: + get_SixChannelAlpha112Bpp() : System.Guid

Field: Pf112bpp7Channels : System.Guid

+ Renamed to "SevenChannel112Bpp"
+ Kind changed to "Property"
Added methods: + get_SevenChannel112Bpp() : System.Guid

Field: Pf128bpp7ChannelsAlpha : System.Guid

+ Renamed to "SevenChannelAlpha128Bpp"
+ Kind changed to "Property"
Added methods: + get_SevenChannelAlpha128Bpp() : System.Guid

Field: Pf128bpp8Channels : System.Guid

+ Renamed to "EightChannel128Bpp"
+ Kind changed to "Property"
Added methods: + get_EightChannel128Bpp() : System.Guid

Field: Pf128bppPRGBAFloat : System.Guid

+ Renamed to "PrgbaFloat128Bpp"
+ Kind changed to "Property"
Added methods: + get_PrgbaFloat128Bpp() : System.Guid

Field: Pf128bppRGBAFixedPoint : System.Guid

+ Renamed to "RgbaFixedPoint128Bpp"
+ Kind changed to "Property"
Added methods: + get_RgbaFixedPoint128Bpp() : System.Guid

Field: Pf128bppRGBAFloat : System.Guid

+ Renamed to "RgbaFloat128Bpp"
+ Kind changed to "Property"
Added methods: + get_RgbaFloat128Bpp() : System.Guid

Field: Pf128bppRGBFixedPoint : System.Guid

+ Renamed to "RgbFixedPoint128Bpp"
+ Kind changed to "Property"
Added methods: + get_RgbFixedPoint128Bpp() : System.Guid

Field: Pf128bppRGBFloat : System.Guid

+ Renamed to "RgbFloat128Bpp"
+ Kind changed to "Property"
Added methods: + get_RgbFloat128Bpp() : System.Guid

Field: Pf144bpp8ChannelsAlpha : System.Guid

+ Renamed to "EightChannelAlpha144Bpp"
+ Kind changed to "Property"
Added methods: + get_EightChannelAlpha144Bpp() : System.Guid

Field: Pf16bppBGR555 : System.Guid

+ Renamed to "Bgr55516Bpp"
+ Kind changed to "Property"
Added methods: + get_Bgr55516Bpp() : System.Guid

Field: Pf16bppBGR565 : System.Guid

+ Renamed to "Bgr56516Bpp"
+ Kind changed to "Property"
Added methods: + get_Bgr56516Bpp() : System.Guid

Field: Pf16bppGray : System.Guid

+ Renamed to "Gray16Bpp"
+ Kind changed to "Property"
Added methods: + get_Gray16Bpp() : System.Guid

Field: Pf16bppGrayFixedPoint : System.Guid

+ Renamed to "GrayFixedPoint16Bpp"
+ Kind changed to "Property"
Added methods: + get_GrayFixedPoint16Bpp() : System.Guid

Field: Pf16bppGrayHalf : System.Guid

+ Renamed to "GrayHalf16Bpp"
+ Kind changed to "Property"
Added methods: + get_GrayHalf16Bpp() : System.Guid

Field: Pf1bppIndexed : System.Guid

+ Renamed to "Indexed1Bpp"
+ Kind changed to "Property"
Added methods: + get_Indexed1Bpp() : System.Guid

Field: Pf24bpp3Channels : System.Guid

+ Renamed to "ThreeChannel24Bpp"
+ Kind changed to "Property"
Added methods: + get_ThreeChannel24Bpp() : System.Guid

Field: Pf24bppBGR : System.Guid

+ Renamed to "Bgr24Bpp"
+ Kind changed to "Property"
Added methods: + get_Bgr24Bpp() : System.Guid

Field: Pf24bppRGB : System.Guid

+ Renamed to "Rgb24Bpp"
+ Kind changed to "Property"
Added methods: + get_Rgb24Bpp() : System.Guid

Field: Pf2bppGray : System.Guid

+ Renamed to "Gray2Bpp"
+ Kind changed to "Property"
Added methods: + get_Gray2Bpp() : System.Guid

Field: Pf2bppIndexed : System.Guid

+ Renamed to "Indexed2Bpp"
+ Kind changed to "Property"
Added methods: + get_Indexed2Bpp() : System.Guid

Field: Pf32bpp3ChannelsAlpha : System.Guid

+ Renamed to "ThreeChannelAlpha32Bpp"
+ Kind changed to "Property"
Added methods: + get_ThreeChannelAlpha32Bpp() : System.Guid

Field: Pf32bpp4Channels : System.Guid

+ Renamed to "FourChannel32Bpp"
+ Kind changed to "Property"
Added methods: + get_FourChannel32Bpp() : System.Guid

Field: Pf32bppBGR : System.Guid

+ Renamed to "Bgr32Bpp"
+ Kind changed to "Property"
Added methods: + get_Bgr32Bpp() : System.Guid

Field: Pf32bppBGR101010 : System.Guid

+ Renamed to "Bgr10101032Bpp"
+ Kind changed to "Property"
Added methods: + get_Bgr10101032Bpp() : System.Guid

Field: Pf32bppBGRA : System.Guid

+ Renamed to "Bgra32Bpp"
+ Kind changed to "Property"
Added methods: + get_Bgra32Bpp() : System.Guid

Field: Pf32bppCMYK : System.Guid

+ Renamed to "Cmyk32Bpp"
+ Kind changed to "Property"
Added methods: + get_Cmyk32Bpp() : System.Guid

Field: Pf32bppGrayFixedPoint : System.Guid

+ Renamed to "GrayFixedPoint32Bpp"
+ Kind changed to "Property"
Added methods: + get_GrayFixedPoint32Bpp() : System.Guid

Field: Pf32bppGrayFloat : System.Guid

+ Renamed to "GrayFloat32Bpp"
+ Kind changed to "Property"
Added methods: + get_GrayFloat32Bpp() : System.Guid

Field: Pf32bppPBGRA : System.Guid

+ Renamed to "Pbgra32Bpp"
+ Kind changed to "Property"
Added methods: + get_Pbgra32Bpp() : System.Guid

Field: Pf32bppPRGBA : System.Guid

+ Renamed to "Prgba32Bpp"
+ Kind changed to "Property"
Added methods: + get_Prgba32Bpp() : System.Guid

Field: Pf32bppRGBA : System.Guid

+ Renamed to "Rgba32Bpp"
+ Kind changed to "Property"
Added methods: + get_Rgba32Bpp() : System.Guid

Field: Pf32bppRGBE : System.Guid

+ Renamed to "Rgbe32Bpp"
+ Kind changed to "Property"
Added methods: + get_Rgbe32Bpp() : System.Guid

Field: Pf40bpp4ChannelsAlpha : System.Guid

+ Renamed to "FourChannelAlpha40Bpp"
+ Kind changed to "Property"
Added methods: + get_FourChannelAlpha40Bpp() : System.Guid

Field: Pf40bpp5Channels : System.Guid

+ Renamed to "FiveChannel40Bpp"
+ Kind changed to "Property"
Added methods: + get_FiveChannel40Bpp() : System.Guid

Field: Pf40bppCMYKAlpha : System.Guid

+ Renamed to "CmykAlpha40Bpp"
+ Kind changed to "Property"
Added methods: + get_CmykAlpha40Bpp() : System.Guid

Field: Pf48bpp3Channels : System.Guid

+ Renamed to "ThreeChannel48Bpp"
+ Kind changed to "Property"
Added methods: + get_ThreeChannel48Bpp() : System.Guid

Field: Pf48bpp5ChannelsAlpha : System.Guid

+ Renamed to "FiveChannelAlpha48Bpp"
+ Kind changed to "Property"
Added methods: + get_FiveChannelAlpha48Bpp() : System.Guid

Field: Pf48bpp6Channels : System.Guid

+ Renamed to "SixChannel48Bpp"
+ Kind changed to "Property"
Added methods: + get_SixChannel48Bpp() : System.Guid

Field: Pf48bppRGB : System.Guid

+ Renamed to "Rgb48Bpp"
+ Kind changed to "Property"
Added methods: + get_Rgb48Bpp() : System.Guid

Field: Pf48bppRGBFixedPoint : System.Guid

+ Renamed to "RgbFixedPoint48Bpp"
+ Kind changed to "Property"
Added methods: + get_RgbFixedPoint48Bpp() : System.Guid

Field: Pf48bppRGBHalf : System.Guid

+ Renamed to "RgbHalf48Bpp"
+ Kind changed to "Property"
Added methods: + get_RgbHalf48Bpp() : System.Guid

Field: Pf4bppGray : System.Guid

+ Renamed to "Gray4Bpp"
+ Kind changed to "Property"
Added methods: + get_Gray4Bpp() : System.Guid

Field: Pf4bppIndexed : System.Guid

+ Renamed to "Indexed4Bpp"
+ Kind changed to "Property"
Added methods: + get_Indexed4Bpp() : System.Guid

Field: Pf56bpp6ChannelsAlpha : System.Guid

+ Renamed to "SixChannelAlpha56Bpp"
+ Kind changed to "Property"
Added methods: + get_SixChannelAlpha56Bpp() : System.Guid

Field: Pf56bpp7Channels : System.Guid

+ Renamed to "SevenChannel56Bpp"
+ Kind changed to "Property"
Added methods: + get_SevenChannel56Bpp() : System.Guid

Field: Pf64bpp3ChannelsAlpha : System.Guid

+ Renamed to "ThreeChannelAlpha64Bpp"
+ Kind changed to "Property"
Added methods: + get_ThreeChannelAlpha64Bpp() : System.Guid

Field: Pf64bpp4Channels : System.Guid

+ Renamed to "FourChannel64Bpp"
+ Kind changed to "Property"
Added methods: + get_FourChannel64Bpp() : System.Guid

Field: Pf64bpp7ChannelsAlpha : System.Guid

+ Renamed to "SevenChannelAlpha64Bpp"
+ Kind changed to "Property"
Added methods: + get_SevenChannelAlpha64Bpp() : System.Guid

Field: Pf64bpp8Channels : System.Guid

+ Renamed to "EightChannel64Bpp"
+ Kind changed to "Property"
Added methods: + get_EightChannel64Bpp() : System.Guid

Field: Pf64bppCMYK : System.Guid

+ Renamed to "Cmyk64Bpp"
+ Kind changed to "Property"
Added methods: + get_Cmyk64Bpp() : System.Guid

Field: Pf64bppPRGBA : System.Guid

+ Renamed to "Prgba64Bpp"
+ Kind changed to "Property"
Added methods: + get_Prgba64Bpp() : System.Guid

Field: Pf64bppRGBA : System.Guid

+ Renamed to "Rgba64Bpp"
+ Kind changed to "Property"
Added methods: + get_Rgba64Bpp() : System.Guid

Field: Pf64bppRGBAFixedPoint : System.Guid

+ Renamed to "RgbaFixedPoint64Bpp"
+ Kind changed to "Property"
Added methods: + get_RgbaFixedPoint64Bpp() : System.Guid

Field: Pf64bppRGBAHalf : System.Guid

+ Renamed to "RgbaHalf64Bpp"
+ Kind changed to "Property"
Added methods: + get_RgbaHalf64Bpp() : System.Guid

Field: Pf64bppRGBFixedPoint : System.Guid

+ Renamed to "RgbFixedPoint64Bpp"
+ Kind changed to "Property"
Added methods: + get_RgbFixedPoint64Bpp() : System.Guid

Field: Pf64bppRGBHalf : System.Guid

+ Renamed to "RgbHalf64Bpp"
+ Kind changed to "Property"
Added methods: + get_RgbHalf64Bpp() : System.Guid

Field: Pf72bpp8ChannelsAlpha : System.Guid

+ Renamed to "EightChannelAlpha72Bpp"
+ Kind changed to "Property"
Added methods: + get_EightChannelAlpha72Bpp() : System.Guid

Field: Pf80bpp4ChannelsAlpha : System.Guid

+ Renamed to "FourChannelAlpha80Bpp"
+ Kind changed to "Property"
Added methods: + get_FourChannelAlpha80Bpp() : System.Guid

Field: Pf80bpp5Channels : System.Guid

+ Renamed to "FiveChannel80Bpp"
+ Kind changed to "Property"
Added methods: + get_FiveChannel80Bpp() : System.Guid

Field: Pf80bppCMYKAlpha : System.Guid

+ Renamed to "CmykAlpha80Bpp"
+ Kind changed to "Property"
Added methods: + get_CmykAlpha80Bpp() : System.Guid

Field: Pf8bppGray : System.Guid

+ Renamed to "Gray8Bpp"
+ Kind changed to "Property"
Added methods: + get_Gray8Bpp() : System.Guid

Field: Pf8bppIndexed : System.Guid

+ Renamed to "Indexed8Bpp"
+ Kind changed to "Property"
Added methods: + get_Indexed8Bpp() : System.Guid

Field: Pf96bpp5ChannelsAlpha : System.Guid

+ Renamed to "FiveChannelAlpha96Bpp"
+ Kind changed to "Property"
Added methods: + get_FiveChannelAlpha96Bpp() : System.Guid

Field: Pf96bpp6Channels : System.Guid

+ Renamed to "SixChannel96Bpp"
+ Kind changed to "Property"
Added methods: + get_SixChannel96Bpp() : System.Guid

Field: Pf96bppRGBFixedPoint : System.Guid

+ Renamed to "RgbFixedPoint96Bpp"
+ Kind changed to "Property"
Added methods: + get_RgbFixedPoint96Bpp() : System.Guid

Field: PfBlackWhite : System.Guid

+ Renamed to "BlackWhite"
+ Kind changed to "Property"
Added methods: + get_BlackWhite() : System.Guid

Class: WICBitmap

+ Renamed to "ImagingBitmap"
Removed methods: + SetResolution(Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapResolution) : System.Void
Added properties: + Resolution : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapResolution

Method: Lock(Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapRectangle, Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapLockFlags) : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.WICBitmapLock

+ Signature changed to "(Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapRectangle, Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.BitmapLockOptions) : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.ImagingBitmapLock"

Class: WICBitmapLock

+ Renamed to "ImagingBitmapLock"
Removed methods: + GetDataPointer(System.UInt32&) : System.IntPtr
Added properties: + DataPointer : System.IntPtr, DataSize : System.UInt32

Class: WICException

+ Renamed to "ImagingException"
Added methods: + .ctor(System.String) : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.ImagingException, .ctor(System.String, System.Exception) : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.ImagingException, .ctor(System.String, System.Exception, System.Int32) : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.ImagingException, .ctor(System.String, System.Int32) : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.ImagingException

Method: .ctor() : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.WICException

+ Signature changed to "() : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.ImagingException"

Method: .ctor(System.Int32) : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.WICException

+ Signature changed to "(System.Int32) : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.ImagingException"

Method: .ctor(System.String, System.Exception, System.Int32) : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.WICException

Accessibility changed to "not public"
+ Signature changed to "(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.ImagingException"

Method: .ctor(System.String, System.Int32) : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.WICException

Accessibility changed to "not public"
+ Signature changed to "(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext, System.Int32) : Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent.ImagingException"

Class: WICFormatConverter

+ Renamed to "FormatConverter"
+ \ No newline at end of file diff --git a/documentation/Windows API Code Pack DirectX Help.chm b/documentation/Windows API Code Pack DirectX Help.chm new file mode 100644 index 00000000..32bf0a87 Binary files /dev/null and b/documentation/Windows API Code Pack DirectX Help.chm differ diff --git a/documentation/Windows API Code Pack Help.chm b/documentation/Windows API Code Pack Help.chm new file mode 100644 index 00000000..b70b643d Binary files /dev/null and b/documentation/Windows API Code Pack Help.chm differ diff --git a/documentation/Windows API Code Pack Release Notes.htm b/documentation/Windows API Code Pack Release Notes.htm new file mode 100644 index 00000000..ac8e6f96 --- /dev/null +++ b/documentation/Windows API Code Pack Release Notes.htm @@ -0,0 +1,3328 @@ + + + + + + + + + + + + + + + + + + + + +
+ +

Windows API Code Pack v1.1 Release +Notes

+ +
+ +

Release Overview

+ +
+ +

The major changes v1.1 of the Windows API Code Pack includes:

+ +

         +Code clean-up

+ +

o    +Addressed many +FxCop violations and PREfast warnings

+ +

o    +Various spot-fixes for improved stability

+ +

o    +Added String localization preparation

+ +

         +Bug Fixes within the Code Pack and Samples

+ +

         +New Features

+ +

o    +PropVariant (Re-designed)

+ +

o    +Thumbnail Handlers

+ +

o    +Preview Handlers

+ +

o    +ShellObjectWatcher

+ +

         +New Demos and Sample Applications

+ +

         +Visual Studio 2010 Compliance

+ +

         +xUnit test coverage

+ +

         +Signed assemblies

+ +
+ +

Release Changes

+ +
+ +
+ +

Code Clean-up

+ +
+ +

This release the code underwent a review process to assess +how well the project adhered to Microsofts design guidelines for class +libraries. To address the discovered issues +we have corrected a large number of outstanding FxCop and PREfast warnings in the +codebase. Many of these corrections have +resulted in API changes that may prevent existing applications from using the +new code base without upgrading. A +complete list of these changes can be found in the API Changes documents.

+ +

FxCop +is an application that analyzes managed code assemblies for potential design, +localization, performance, and security improvements. We addressed all of the +FxCop violations in the release.

+ +

PREfast +is a static analysis tool that identifies defects in C/C++ code that +can detect certain kinds of source code errors that are not easily found by the +typical compiler or by conventional testing. PREfast can be used to detect +access to misused memory allocations, compliment with specifications, possible +argument-type mismatches, and more. In this release we addressed all of the +PREfast warnings in our DirectX Project.

+ +

 

+ +
+ +

Bugs Fixed

+ +
+ +

This release contains many bug fixes. Below are some of the +more significant ones.

+ +
+ +

ALL

+ +
+ +

         +Properties should not be write-only

+ +
+ +

Core

+ +
+ +

         +BatteryState.EstimatedTimeRemaining returns an +unexpected value when the device is plugged in.

+ +

         +BatteryState.DischargeRate is named incorrectly +and returns an unexpected negative value.

+ +

         +PropVariant should not be a struct

+ +

         +PropVariant should support float[] and decimal[] +datatypes

+ +

         +PropVariant. +CreatePropVariantFromVectorElement copies data twice (fixed with the re-design)

+ +

         +PowerManager should expose a way to set the +threads execution-state and inform the system that an app is in use

+ +

         +TaskDialogCommandLink.ToString() returns extra +line breaks

+ +

         +TaskDialog doesnt Dispose correctly and throws +a NullReferenceException

+ +
+ +

Shell

+ +
+ +

         +ExplorerBrowser throws an unwrapped COM +Exception when navigating quickly

+ +

         +ProgressBarStateSettings class is never used +(removed).

+ +

         +TabbedThumbnail leaks memory

+ +

         +WinForms ExplorerBrowserthrows an unwrapped COM +Exception when canceling the first navigation

+ +

         +ShellObjectCollection throws a +NullReferenceException when using IEnumberable extensions and the content +variable is null or the Count is zero.

+ +

         +IJumpListTask should not be an empty interface

+ +

         +ShellFile from a NonFileSystemFolder does not +have the same properties as a ShellFileSystemFolder

+ +
+ +

Direct X

+ +
+ +

         +OpenSharedResource +functions should support DirectUnknown

+ +

         +CreateTexture +functions should have a variable-length arguments

+ +

         +DeviceContext.Map +function should return a MappedSubresource instead of accepting one as an +argument

+ +

         +BitmapSource.CopyPixels crashes if the bitmaps +width is greater than its height

+ +

         +Improve support for the creation of D3D10 +StateBlocks

+ +
+ +

SAMPLES

+ +
+ +

All of the samples have been reviewed many have undergone +stability and performance improvements.

+ +
+ +

Features Added

+ +
+ +
+ +

ALL Projects

+ +
+ +

This release has been released such that it will build in +Visual Studio 2008 and will succeed in converting to run in Visual Studio +2010. The exception to this is the +ShellExtensions project and Handler Samples project which require .NET 4 +features and can only be built in Visual Studio 2010.

+ +
+ +

Core

+ +

Redesigned PROPVARIANT

+ +
+ +

The PropVariant has been completely redesigned. Issues that +you experienced in the past may no longer be a problem please see the new +implementation in the source code. The redesign included changing it from a +struct to a class, making it immutable and disposable, improving the +performance of setting and retrieving values, +and greatly increasing its maintainability and flexibility.

+ +

 

+ +
+ +

Shell Extensions

+ +
+ +

The Shell Extensions project has been added to contain the +new Shell Extensions added to the API Code Pack. This project only targets .NET +4.0 and contains features that are designed to facilitate extending the shell.

+ +
+ +

File Thumbnail handlers

+ +
+ +

The Microsoft.WindowsAPICodePack.ShellExtensions namespace +now contains APIs to support the development of managed thumbnail handlers. Thumbnail handlers are shell extensions that allow +one to specify how the Windows Shell will display a thumbnail for a custom file +type. The Shell does this by calling your handler with a reference to file whose +thumbnail is being requested. Thumbnail handlers +can be designed to include adornments (i.e.: drop shadows or photo +borders), overlays (i.e.: icons), and transparency. Below are a few examples of thumbnails +generated from a custom file type using managed thumbnail handlers:

+ +

+ +

To build a custom thumbnail handler:

+ +

         +Derive your handler from ThumbnailProvider and implement +at least one of the following initialization interfaces: IThumbnailFromStream, +IThumbnailFromShellObject, IThumbnailFromFile. IThumbnailFromStream is highly +encouraged if possible - initializing with a Steam is explicitly suggested on MSDN.

+ +

o    +Implement the ConstructBitmap functions for the +initialization interfaces you chose and return a Bitmap based on the provided +shell item and thumbnail size.

+ +

         +Add the required class attributes

+ +

o    +ThumbnailProvider Attribute - specifies how the handler should be +registered

+ +

  +Specify a unique name for the handler, +semicolon-delimited list of supported extensions, adornment, overlay, and cutoff size.

+ +

o    +[Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")] The GUID under which your +assembly is registered. This GUID must be unique.

+ +

o    +[ComVisible(true)] +- Ensures that your shell extension can +be registered and is visible by the Shell.

+ +

o    +[ClassInterface(ClassInterfaceType.None)] Required for interoperability

+ +

o    +[ProgId("YourHandlers.YourXYZThumbnailHandler")] + Another ID used to register your handler

+ +

 

+ +

A managed thumbnail handler can be compiled for AnyCPU but +must target .NET 4. As with all managed +COM objects, thumbnail handlers must be registered with regasm.exe. +For more information on thumbnail handlers and the available features, see the +thumbnail handler samples included with this release and the MSDN +page for thumbnail handlers.

+ +

Implementation Notes: +Only 32bpp bitmaps (for thumbnails) support adornments. Additional guidelines for +development can be found on MSDN +.

+ +

Compilation Notes: +This feature was designed for .NET 4.0 as the new version of the CLR allows +multiple runtimes in the same process. Information on why using previous +versions of .NET is highly discouraged can be found here. +For more information on why .NET 4 is a safer alternative see this MSDN article. The What Does In-Process Side-by-Side Mean +To You? section discusses shell extensions. This feature cannot be compiled for earlier +versions of .NET as it uses features specific to .NET 4.

+ +

Test Notes: When +registering & unregistering thumbnail handlers for testing purposes certain +actions should be taken to ensure that you are observing the actual behavior of +the thumbnail handler.

+ +

         +Terminate instances of DllHost.exe (the +surrogate host for your handler) or Explorer.exe (if opting out of process +isolation).

+ +

         +Delete the thumbnail cache files with the Disk +Cleanup utility included with Windows. See this article +for instructions.

+ +

         +Generated thumbnails are cached by Windows. To +cause a new thumbnail to be generated you can increase the size of the viewed +thumbnail to a previously unviewed size, manually modify the file such that the +last modified time is updated on the file, or create a new instance of the +file. Our developers found it extremely +helpful to write a script which on build-complete would automatically update +the test files.

+ +

If all three initialization interfaces are implemented, only +one will be used according to the circumstances and Shells own preset +priorities for the native interfaces. The prioritized order of access is as +follows: IThumbnailFromStream, +IThumbnailFromShellObject, IThumbnailFromFile.

+ +

 

+ +
+ +

File Preview Handlers

+ +
+ +

The Microsoft.WindowsAPICodePack.ShellExtensions namespace +now contains APIs to support the development of managed preview handlers. Preview handlers are shell extensions that +allows one to specify how the Windows Shell or Microsoft Outlook will display a +preview for a custom file type . The Shell does this by calling your handler +and providing access to the file whose preview is being requested. Previews can be displayed in explorers +preview pane or Microsoft Outlook.

+ +

The APIs for implementing a preview handler require that a +native window handle is supplied to shell. +In this release we provide abstracted implementations for both WPF and +Winforms as well as providing access to the base class if a more custom +approach is required. Below are a few examples of previews generated from a +custom file type using managed preview handlers (WPF on top, WinForms on the +bottom):

+ +

+ +

+ +

To build a custom preview handler:

+ +

         +Derive your handler from either +WPFPreviewHandler or WinFormsPreviewHandler and implement at least one of following +initialization interfaces: IPreviewFromStream, IPreviewFromShellObject, +IPreviewFromFile. IPreviewFromStream is highly encouraged if possible +(initializing with a Steam is explicitly suggested on MSDN).

+ +

o    +Implement the Load functions for the initialization +interfaces. Based on the shell item provided to +the called Load function, populate the Control property inherited from WPFPreviewHandler or +WinFormsPreviewHandler.

+ +

         +Add the required class attributes

+ +

o    +PreviewHandler Attribute - specifies how the handler should be +registered

+ +

  +Specify the name of the handler, a +semicolon-delimited list of supported extensions, and a unique AppID (GUID) for +the dedicated +surrogate host process (prevhost.exe).

+ +

o    +[Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")] The GUID under which your assembly is registered. This GUID must be unique.

+ +

o    +[ComVisible(true)] - Ensures that your handler can be registered and is visible by the Shell.

+ +

o    +[ClassInterface(ClassInterfaceType.None)] Required for +interoperability

+ +

o    +[ProgId("YourHandlers.YourXYZThumbnailHandler")] + Another ID used to register your handler

+ +

 

+ +

A managed preview handler can be compiled for AnyCPU but must target .NET 4. As with all managed COM objects they must be +registered with regasm.exe.

+ +

Implementation Notes: +Additional guidelines for development can be found on MSDN +.

+ +

Compilation Notes: +This feature was designed for .NET 4.0 as the new version of the CLR allows +multiple runtimes in the same process. Information +on why using previous versions of .NET can be found here. +For more information on why .NET 4 is a safer alternative see this MSDN article. The What Does In-Process Side-by-Side Mean +To You? section discusses shell extensions. This feature cannot be compiled +for earlier versions of .NET as it uses features specific to .NET 4.

+ +

Test Notes: When +registering & unregistering preview handlers for testing purposes certain +actions should be taken to ensure that you are observing the actual behavior of +the preview handler.

+ +

         +Terminate instances of Prevhost.exe (the +surrogate host for your provider) or Explorer.exe (if opting out of process +isolation).

+ +

If the file-type is associated with a particular +application, the adornment specified in your thumbnail handler may be +overridden and not be shown. If all three initialization interfaces are +implemented, only one will be used according to the circumstances under which +the thumbnail is requested and Shells own preset priorities for the native interfaces. +The prioritized order of access is as follows: +IPreviewFromStream, IPreviewFromShellObject, IPreviewFromFile.

+ +

 

+ +

 

+ +
+ +

Shell Object Watcher

+ +
+ +

 

+ +

The +Microsoft.WindowsAPICodePack.Shell namespace now contains APIs to watch +items within the Shell Namespace and receive notifications +when theyre modified. The ShellObjectWatcher class allows an application

+ +

to subscribe to individual ShellFiles or ShellContainers (including +virtual folders like network shares and Libraries). The complete list of +supported notifications can be found here. +

+ +

 

+ +

To register for change notifications on a specified shell +item:

+ +

         +Create a new instance of ShellObjectWatcher and +provide an instance of a ShellObject

+ +

         +Subscribe to the desired events

+ +

         +Call the Start() method on the +ShellObjectWatcher instance

+ +

 

+ +

To unsubscribe to notifications call the Stop() method. You +cannot change which events youre subscribed +to while the watcher is running. To alter the list of subscribed +notifications, call the Stop() method, unsubscribe/subscribe to events, then +call the Start() method.

+ +

 

+ +

Behavioral Notes: +Change notifications are initially +raised on a separate thread and use the current or default +SynchronizaionContext to raise events. In +the case of WPF and Windows Forms, these events are marshaled over to the +thread containing the ShellObjectWatcher. +Console applications and other +types of applications that do not provide a default implementations of a +SynchronizationContext are treated as free threaded.

+ +

 

+ +

Shell items are watched according to their PIDL (pointer +to ID list) which is constructed similarly to an items fully qualified +path. If a shell item is renamed its +PIDL will change but the ShellObjectWatcher will continue to watch the original +PIDL. This behavior must be taken into account as future changes to the renamed +shell item will not raise notifications. To receive notifications on a renamed +shell item, create a new ShellObjectWatcher withthe renamed shell item and Stop +the ShellObjectWatcher created with the shell item prior to the rename. If the +ShellObjectWatcher created with the shell item (prior to the rename) is not Stopped and the file is reverted to +its original name, notifications will continue to be raised from that +ShellObjectWatcher. Similarly, if a another shell item is renamed to match the +fully qualified path of a watched shell item, the ShellObjectWatcher will raise +notifications on that renamed shell item despite the fact that the +ShellObjectWatcher was created with a different shell item. In summary, the change notification for a +shell item is solely based on PIDLs and persists to do so regardless of the +actual shell it is associated with a given PIDL.

+ +

 

+ +

 

+ +
+ +

SAMPLES ADDED

+ +
+ +
+ +

Shell

+ +

ShellObjectWatcher +Sample

+ +
+ +

This sample allows the user to select an item from the +Windows Shell and watch it for change notifications. This sample supports +files, folders, and virtual folders (i.e.: network shares & libraries).

+ +
+ +

Shell Extensions

+ +

Thumbnail Handler +Samples

+ +
+ +

Two samples have been created to demonstrate how to generate +thumbnails for an .xyz file-type and .xyz2 file type. The samples demonstrate +how to use the various initialization interfaces and parse a sample file to +generate a thumbnail with adornments and overlays.

+ +
+ +

Preview Handler +Samples

+ +
+ +

Two samples have been created to demonstrate how to generate +a preview from an .xyz and .xyz2 file-type. One sample illustrates how to +generate a WPF control and the other +demonstrates how to generate a Windows Forms control within the preview pane of +explorer.

+ +

 

+ +
+ +

API Changes

+ +
+ +

A complete list of these changes can be found in the API +Changes documents. Changes are organized by namespace and class and are +structured as follows:

+ +

<Kind Of Member Modified> : +<Identifier of Member Modified> : <Type/Return-type of Member +Modified>

+ +

<Changes Made to Member>
+<Members Removed from this Member>

+ +

<Members +Added to this Member>

+ +

Below are a few examples of actual entries from the DirectX +changes document:

+ +

Class: SwitchToRef

+ +

Removed +methods: GetUseRef() : System.Boolean, SetUseRef(System.Boolean) : +System.Boolean
+
Added +properties: UseRef : System.Boolean

+ +

In this entry, the SwitchToRef class has been modified. The GetUseRef (returning a +Boolean) and SetUseRef (accepting a Boolean) have been removed in favor of +adding a Property called UseRef.

+ +

Method: GetClusterMetrics() : +Microsoft.WindowsAPICodePack.DirectX.DirectWrite.ClusterMetrics[]

+ +

Renamed to +"ClusterMetrics"
+Kind changed to "Property"
+Added methods: get_ClusterMetrics() : +System.Collections.Generic.IEnumerable<Microsoft.WindowsAPICodePack.DirectX.DirectWrite.ClusterMetrics>

+ +

In this entry the GetClusterMetrics() method was removed in +favor of a readonly ClusterMetrics Property. The return type has also been +changed from an array to an IEnumerable

+ +

 

+ +

 

+ +
+ + + + diff --git a/documentation/Windows API Code Pack Release Notes_files/colorschememapping.xml b/documentation/Windows API Code Pack Release Notes_files/colorschememapping.xml new file mode 100644 index 00000000..6a0069cd --- /dev/null +++ b/documentation/Windows API Code Pack Release Notes_files/colorschememapping.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/documentation/Windows API Code Pack Release Notes_files/filelist.xml b/documentation/Windows API Code Pack Release Notes_files/filelist.xml new file mode 100644 index 00000000..73476c46 --- /dev/null +++ b/documentation/Windows API Code Pack Release Notes_files/filelist.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/documentation/Windows API Code Pack Release Notes_files/image001.png b/documentation/Windows API Code Pack Release Notes_files/image001.png new file mode 100644 index 00000000..302c9462 Binary files /dev/null and b/documentation/Windows API Code Pack Release Notes_files/image001.png differ diff --git a/documentation/Windows API Code Pack Release Notes_files/image002.jpg b/documentation/Windows API Code Pack Release Notes_files/image002.jpg new file mode 100644 index 00000000..f024f6ac Binary files /dev/null and b/documentation/Windows API Code Pack Release Notes_files/image002.jpg differ diff --git a/documentation/Windows API Code Pack Release Notes_files/image003.png b/documentation/Windows API Code Pack Release Notes_files/image003.png new file mode 100644 index 00000000..07ff894f Binary files /dev/null and b/documentation/Windows API Code Pack Release Notes_files/image003.png differ diff --git a/documentation/Windows API Code Pack Release Notes_files/image004.jpg b/documentation/Windows API Code Pack Release Notes_files/image004.jpg new file mode 100644 index 00000000..f20c791c Binary files /dev/null and b/documentation/Windows API Code Pack Release Notes_files/image004.jpg differ diff --git a/documentation/Windows API Code Pack Release Notes_files/image005.png b/documentation/Windows API Code Pack Release Notes_files/image005.png new file mode 100644 index 00000000..c00a6a0e Binary files /dev/null and b/documentation/Windows API Code Pack Release Notes_files/image005.png differ diff --git a/documentation/Windows API Code Pack Release Notes_files/image006.jpg b/documentation/Windows API Code Pack Release Notes_files/image006.jpg new file mode 100644 index 00000000..c6ab8853 Binary files /dev/null and b/documentation/Windows API Code Pack Release Notes_files/image006.jpg differ diff --git a/documentation/Windows API Code Pack Release Notes_files/item0001.xml b/documentation/Windows API Code Pack Release Notes_files/item0001.xml new file mode 100644 index 00000000..4c93d4ac --- /dev/null +++ b/documentation/Windows API Code Pack Release Notes_files/item0001.xml @@ -0,0 +1 @@ + diff --git a/documentation/Windows API Code Pack Release Notes_files/props0002.xml b/documentation/Windows API Code Pack Release Notes_files/props0002.xml new file mode 100644 index 00000000..dc231efa --- /dev/null +++ b/documentation/Windows API Code Pack Release Notes_files/props0002.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/documentation/Windows API Code Pack Release Notes_files/themedata.thmx b/documentation/Windows API Code Pack Release Notes_files/themedata.thmx new file mode 100644 index 00000000..456c13a0 Binary files /dev/null and b/documentation/Windows API Code Pack Release Notes_files/themedata.thmx differ diff --git a/source/Samples/AeroGlass/CS/AeroGlassDemo.sln b/source/Samples/AeroGlass/CS/AeroGlassDemo.sln new file mode 100644 index 00000000..190e08a5 --- /dev/null +++ b/source/Samples/AeroGlass/CS/AeroGlassDemo.sln @@ -0,0 +1,48 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfGlassDemo", "WpfGlassDemo\WpfGlassDemo.csproj", "{CDC3EC63-D7F4-4854-833B-169A1FDA3589}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsFormsGlassDemo", "WindowsFormsGlassDemo\WindowsFormsGlassDemo.csproj", "{6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Form1.Designer.cs b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Form1.Designer.cs new file mode 100644 index 00000000..d13d08d5 --- /dev/null +++ b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Form1.Designer.cs @@ -0,0 +1,115 @@ +namespace WindowsFormsGlassDemo +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose( bool disposing ) + { + if( disposing && (components != null) ) + { + components.Dispose( ); + } + base.Dispose( disposing ); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent( ) + { + this.panel1 = new System.Windows.Forms.Panel(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.explorerBrowser1 = new Microsoft.WindowsAPICodePack.Controls.WindowsForms.ExplorerBrowser(); + this.compositionEnabled = new System.Windows.Forms.CheckBox(); + this.panel1.SuspendLayout(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.BackColor = System.Drawing.Color.PaleTurquoise; + this.panel1.Controls.Add(this.splitContainer1); + this.panel1.Location = new System.Drawing.Point(46, 35); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(328, 275); + this.panel1.TabIndex = 0; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.explorerBrowser1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.compositionEnabled); + this.splitContainer1.Size = new System.Drawing.Size(328, 275); + this.splitContainer1.SplitterDistance = 228; + this.splitContainer1.TabIndex = 0; + // + // explorerBrowser1 + // + this.explorerBrowser1.Dock = System.Windows.Forms.DockStyle.Fill; + this.explorerBrowser1.Location = new System.Drawing.Point(0, 0); + this.explorerBrowser1.Name = "explorerBrowser1"; + this.explorerBrowser1.PropertyBagName = "Microsoft.WindowsAPICodePack.Controls.WindowsForms.ExplorerBrowser"; + this.explorerBrowser1.Size = new System.Drawing.Size(328, 228); + this.explorerBrowser1.TabIndex = 0; + // + // compositionEnabled + // + this.compositionEnabled.AutoSize = true; + this.compositionEnabled.Location = new System.Drawing.Point(4, 15); + this.compositionEnabled.Name = "compositionEnabled"; + this.compositionEnabled.Size = new System.Drawing.Size(164, 17); + this.compositionEnabled.TabIndex = 0; + this.compositionEnabled.Text = "desktop composition enabled"; + this.compositionEnabled.UseVisualStyleBackColor = true; + this.compositionEnabled.CheckedChanged += new System.EventHandler(this.compositionEnabled_CheckedChanged); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(438, 341); + this.Controls.Add(this.panel1); + this.Name = "Form1"; + this.Text = "WinForms AeroGlass Demo"; + this.Resize += new System.EventHandler(this.Form1_Resize); + this.panel1.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.Panel2.PerformLayout(); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.SplitContainer splitContainer1; + private Microsoft.WindowsAPICodePack.Controls.WindowsForms.ExplorerBrowser explorerBrowser1; + private System.Windows.Forms.CheckBox compositionEnabled; + } +} + diff --git a/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Form1.cs b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Form1.cs new file mode 100644 index 00000000..be0336d4 --- /dev/null +++ b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Form1.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +using Microsoft.WindowsAPICodePack.Shell; + +namespace WindowsFormsGlassDemo +{ + public partial class Form1 : GlassForm + { + public Form1( ) + { + InitializeComponent( ); + + explorerBrowser1.Navigate( (ShellObject)KnownFolders.Desktop ); + + AeroGlassCompositionChanged += new EventHandler( Form1_AeroGlassCompositionChanged ); + + if( AeroGlassCompositionEnabled ) + { + ExcludeControlFromAeroGlass( panel1 ); + } + else + { + this.BackColor = Color.Teal; + } + + // set the state of the Desktop Composition check box. + compositionEnabled.Checked = AeroGlassCompositionEnabled; + } + + void Form1_AeroGlassCompositionChanged( object sender, AeroGlassCompositionChangedEventArgs e ) + { + // When the desktop composition mode changes the window exclusion must be changed appropriately. + if( e.GlassAvailable ) + { + compositionEnabled.Checked = true; + ExcludeControlFromAeroGlass( panel1 ); + Invalidate( ); + } + else + { + compositionEnabled.Checked = false; + this.BackColor = Color.Teal; + } + } + + private void Form1_Resize( object sender, EventArgs e ) + { + Rectangle panelRect = ClientRectangle; + panelRect.Inflate( -30, -30 ); + panel1.Bounds = panelRect; + ExcludeControlFromAeroGlass( panel1 ); + } + + private void compositionEnabled_CheckedChanged(object sender, EventArgs e) + { + // Toggles the desktop composition mode. + AeroGlassCompositionEnabled = compositionEnabled.Checked; + } + } +} diff --git a/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Form1.resx b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Form1.resx new file mode 100644 index 00000000..6739acff --- /dev/null +++ b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + \ No newline at end of file diff --git a/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Program.cs b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Program.cs new file mode 100644 index 00000000..952febc3 --- /dev/null +++ b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Program.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace WindowsFormsGlassDemo +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main( ) + { + Application.EnableVisualStyles( ); + Application.SetCompatibleTextRenderingDefault( false ); + Application.Run( new Form1( ) ); + } + } +} diff --git a/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Properties/AssemblyInfo.cs b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..11d807c9 --- /dev/null +++ b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle( "WindowsFormsGlassDemo" )] +[assembly: AssemblyDescription( "" )] +[assembly: AssemblyConfiguration( "" )] +[assembly: AssemblyCompany( "Microsoft" )] +[assembly: AssemblyProduct( "WindowsFormsGlassDemo" )] +[assembly: AssemblyCopyright( "Copyright © Microsoft 2009" )] +[assembly: AssemblyTrademark( "" )] +[assembly: AssemblyCulture( "" )] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible( false )] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid( "eb2d526c-af3d-4806-8e92-921ca711a5ae" )] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion( "1.0.0.0" )] +[assembly: AssemblyFileVersion( "1.0.0.0" )] diff --git a/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Properties/Resources.Designer.cs b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Properties/Resources.Designer.cs new file mode 100644 index 00000000..9529d042 --- /dev/null +++ b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WindowsFormsGlassDemo.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WindowsFormsGlassDemo.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Properties/Resources.resx b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Properties/Settings.Designer.cs b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Properties/Settings.Designer.cs new file mode 100644 index 00000000..9f111654 --- /dev/null +++ b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WindowsFormsGlassDemo.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute( )] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute( "Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0" )] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized( new Settings( ) ))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Properties/Settings.settings b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/WindowsFormsGlassDemo.csproj b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/WindowsFormsGlassDemo.csproj new file mode 100644 index 00000000..f87db371 --- /dev/null +++ b/source/Samples/AeroGlass/CS/WindowsFormsGlassDemo/WindowsFormsGlassDemo.csproj @@ -0,0 +1,144 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E} + WinExe + Properties + WindowsFormsGlassDemo + WindowsFormsGlassDemo + v3.5 + 512 + + + + + + + + + 3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/AeroGlass/CS/WpfGlassDemo/App.xaml b/source/Samples/AeroGlass/CS/WpfGlassDemo/App.xaml new file mode 100644 index 00000000..39f70e2b --- /dev/null +++ b/source/Samples/AeroGlass/CS/WpfGlassDemo/App.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/source/Samples/AeroGlass/CS/WpfGlassDemo/App.xaml.cs b/source/Samples/AeroGlass/CS/WpfGlassDemo/App.xaml.cs new file mode 100644 index 00000000..b2dcbf78 --- /dev/null +++ b/source/Samples/AeroGlass/CS/WpfGlassDemo/App.xaml.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Windows; + +namespace WpfGlassDemo +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/source/Samples/AeroGlass/CS/WpfGlassDemo/Properties/AssemblyInfo.cs b/source/Samples/AeroGlass/CS/WpfGlassDemo/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..d5bedc94 --- /dev/null +++ b/source/Samples/AeroGlass/CS/WpfGlassDemo/Properties/AssemblyInfo.cs @@ -0,0 +1,55 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle( "WpfGlassDemo" )] +[assembly: AssemblyDescription( "" )] +[assembly: AssemblyConfiguration( "" )] +[assembly: AssemblyCompany( "Microsoft" )] +[assembly: AssemblyProduct( "WpfGlassDemo" )] +[assembly: AssemblyCopyright( "Copyright © Microsoft 2009" )] +[assembly: AssemblyTrademark( "" )] +[assembly: AssemblyCulture( "" )] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible( false )] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion( "1.0.0.0" )] +[assembly: AssemblyFileVersion( "1.0.0.0" )] diff --git a/source/Samples/AeroGlass/CS/WpfGlassDemo/Properties/Resources.Designer.cs b/source/Samples/AeroGlass/CS/WpfGlassDemo/Properties/Resources.Designer.cs new file mode 100644 index 00000000..712b5ab7 --- /dev/null +++ b/source/Samples/AeroGlass/CS/WpfGlassDemo/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WpfGlassDemo.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WpfGlassDemo.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/AeroGlass/CS/WpfGlassDemo/Properties/Resources.resx b/source/Samples/AeroGlass/CS/WpfGlassDemo/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/AeroGlass/CS/WpfGlassDemo/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/AeroGlass/CS/WpfGlassDemo/Properties/Settings.Designer.cs b/source/Samples/AeroGlass/CS/WpfGlassDemo/Properties/Settings.Designer.cs new file mode 100644 index 00000000..b1514963 --- /dev/null +++ b/source/Samples/AeroGlass/CS/WpfGlassDemo/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WpfGlassDemo.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/AeroGlass/CS/WpfGlassDemo/Properties/Settings.settings b/source/Samples/AeroGlass/CS/WpfGlassDemo/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/AeroGlass/CS/WpfGlassDemo/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/AeroGlass/CS/WpfGlassDemo/Window1.xaml b/source/Samples/AeroGlass/CS/WpfGlassDemo/Window1.xaml new file mode 100644 index 00000000..3c76888a --- /dev/null +++ b/source/Samples/AeroGlass/CS/WpfGlassDemo/Window1.xaml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + Enable Composition + + + + + + diff --git a/source/Samples/AeroGlass/CS/WpfGlassDemo/Window1.xaml.cs b/source/Samples/AeroGlass/CS/WpfGlassDemo/Window1.xaml.cs new file mode 100644 index 00000000..11cf1518 --- /dev/null +++ b/source/Samples/AeroGlass/CS/WpfGlassDemo/Window1.xaml.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; + +using System.Windows.Threading; + +using System.Drawing; + +using Microsoft.WindowsAPICodePack.Shell; + +namespace WpfGlassDemo +{ + /// + /// Interaction logic for Window1.xaml + /// + public partial class Window1 : GlassWindow + { + public Window1( ) + { + InitializeComponent( ); + } + + private void GlassWindow_Loaded( object sender, RoutedEventArgs e ) + { + // update GlassRegion on window size change + SizeChanged += new SizeChangedEventHandler( Window1_SizeChanged ); + + // update background color on change of desktop composition mode + AeroGlassCompositionChanged += new EventHandler(Window1_AeroGlassCompositionChanged); + + // Set the window background color + if( AeroGlassCompositionEnabled ) + { + // exclude the GDI rendered controls from the initial GlassRegion + ExcludeElementFromAeroGlass( eb1 ); + SetAeroGlassTransparency( ); + } + else + { + this.Background = System.Windows.Media.Brushes.Teal; + } + + // initialize the explorer browser control + eb1.NavigationTarget = (ShellObject)KnownFolders.Computer; + + // set the state of the Desktop Composition check box. + EnableCompositionCheck.IsChecked = AeroGlassCompositionEnabled; + } + + void Window1_AeroGlassCompositionChanged( object sender, AeroGlassCompositionChangedEventArgs e ) + { + // When the desktop composition mode changes the background color and window exclusion must be changed appropriately. + if( e.GlassAvailable ) + { + this.EnableCompositionCheck.IsChecked = true; + SetAeroGlassTransparency( ); + ExcludeElementFromAeroGlass( eb1 ); + InvalidateVisual( ); + } + else + { + this.EnableCompositionCheck.IsChecked = false; + this.Background = System.Windows.Media.Brushes.Teal; + } + } + + void Window1_SizeChanged( object sender, SizeChangedEventArgs e ) + { + ExcludeElementFromAeroGlass( eb1 ); + } + + private void CheckBox_Click( object sender, RoutedEventArgs e ) + { + // Toggles the desktop composition mode. + AeroGlassCompositionEnabled = EnableCompositionCheck.IsChecked.Value; + } + + } +} diff --git a/source/Samples/AeroGlass/CS/WpfGlassDemo/WpfGlassDemo.csproj b/source/Samples/AeroGlass/CS/WpfGlassDemo/WpfGlassDemo.csproj new file mode 100644 index 00000000..79fa86a5 --- /dev/null +++ b/source/Samples/AeroGlass/CS/WpfGlassDemo/WpfGlassDemo.csproj @@ -0,0 +1,161 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {CDC3EC63-D7F4-4854-833B-169A1FDA3589} + WinExe + Properties + WpfGlassDemo + WpfGlassDemo + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + + + + + + + 3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + 3.5 + + + + 3.5 + + + 3.5 + + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + App.xaml + Code + + + Window1.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/AeroGlass/VB/AeroGlassDemo.sln b/source/Samples/AeroGlass/VB/AeroGlassDemo.sln new file mode 100644 index 00000000..388fbbd0 --- /dev/null +++ b/source/Samples/AeroGlass/VB/AeroGlassDemo.sln @@ -0,0 +1,48 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WpfGlassDemo", "WpfGlassDemo\WpfGlassDemo.vbproj", "{CDC3EC63-D7F4-4854-833B-169A1FDA3589}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WindowsFormsGlassDemo", "WindowsFormsGlassDemo\WindowsFormsGlassDemo.vbproj", "{6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.Release|Any CPU.Build.0 = Release|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/Form1.Designer.vb b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/Form1.Designer.vb new file mode 100644 index 00000000..666197b4 --- /dev/null +++ b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/Form1.Designer.vb @@ -0,0 +1,112 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace WindowsFormsGlassDemo + Partial Public Class Form1 + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Me.panel1 = New System.Windows.Forms.Panel() + Me.splitContainer1 = New System.Windows.Forms.SplitContainer() + Me.explorerBrowser1 = New Microsoft.WindowsAPICodePack.Controls.WindowsForms.ExplorerBrowser() + Me.compositionEnabled = New System.Windows.Forms.CheckBox() + Me.panel1.SuspendLayout() + Me.splitContainer1.Panel1.SuspendLayout() + Me.splitContainer1.Panel2.SuspendLayout() + Me.splitContainer1.SuspendLayout() + Me.SuspendLayout() + ' + ' panel1 + ' + Me.panel1.BackColor = System.Drawing.Color.PaleTurquoise + Me.panel1.Controls.Add(Me.splitContainer1) + Me.panel1.Location = New System.Drawing.Point(46, 35) + Me.panel1.Name = "panel1" + Me.panel1.Size = New System.Drawing.Size(328, 275) + Me.panel1.TabIndex = 0 + ' + ' splitContainer1 + ' + Me.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill + Me.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2 + Me.splitContainer1.Location = New System.Drawing.Point(0, 0) + Me.splitContainer1.Name = "splitContainer1" + Me.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal + ' + ' splitContainer1.Panel1 + ' + Me.splitContainer1.Panel1.Controls.Add(Me.explorerBrowser1) + ' + ' splitContainer1.Panel2 + ' + Me.splitContainer1.Panel2.Controls.Add(Me.compositionEnabled) + Me.splitContainer1.Size = New System.Drawing.Size(328, 275) + Me.splitContainer1.SplitterDistance = 228 + Me.splitContainer1.TabIndex = 0 + ' + ' explorerBrowser1 + ' + Me.explorerBrowser1.Dock = System.Windows.Forms.DockStyle.Fill + Me.explorerBrowser1.Location = New System.Drawing.Point(0, 0) + Me.explorerBrowser1.Name = "explorerBrowser1" + Me.explorerBrowser1.PropertyBagName = "Microsoft.WindowsAPICodePack.Controls.WindowsForms.ExplorerBrowser" + Me.explorerBrowser1.Size = New System.Drawing.Size(328, 228) + Me.explorerBrowser1.TabIndex = 0 + ' + ' compositionEnabled + ' + Me.compositionEnabled.AutoSize = True + Me.compositionEnabled.Location = New System.Drawing.Point(4, 15) + Me.compositionEnabled.Name = "compositionEnabled" + Me.compositionEnabled.Size = New System.Drawing.Size(164, 17) + Me.compositionEnabled.TabIndex = 0 + Me.compositionEnabled.Text = "desktop composition enabled" + Me.compositionEnabled.UseVisualStyleBackColor = True +' Me.compositionEnabled.CheckedChanged += New System.EventHandler(Me.compositionEnabled_CheckedChanged) + ' + ' Form1 + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6F, 13F) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(438, 341) + Me.Controls.Add(Me.panel1) + Me.Name = "Form1" + Me.Text = "WinForms AeroGlass Demo" +' Me.Resize += New System.EventHandler(Me.Form1_Resize) + Me.panel1.ResumeLayout(False) + Me.splitContainer1.Panel1.ResumeLayout(False) + Me.splitContainer1.Panel2.ResumeLayout(False) + Me.splitContainer1.Panel2.PerformLayout() + Me.splitContainer1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + + #End Region + + Private panel1 As System.Windows.Forms.Panel + Private splitContainer1 As System.Windows.Forms.SplitContainer + Private explorerBrowser1 As Microsoft.WindowsAPICodePack.Controls.WindowsForms.ExplorerBrowser + Private WithEvents compositionEnabled As System.Windows.Forms.CheckBox + End Class +End Namespace + diff --git a/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/Form1.resx b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/Form1.resx new file mode 100644 index 00000000..6739acff --- /dev/null +++ b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/Form1.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + \ No newline at end of file diff --git a/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/Form1.vb b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/Form1.vb new file mode 100644 index 00000000..604ed8e2 --- /dev/null +++ b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/Form1.vb @@ -0,0 +1,57 @@ +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +Imports System.Data +Imports System.Drawing +Imports System.Linq +Imports System.Text +Imports System.Windows.Forms + +Imports Microsoft.WindowsAPICodePack.Shell + +Namespace WindowsFormsGlassDemo + Partial Public Class Form1 + Inherits GlassForm + Public Sub New() + InitializeComponent() + + explorerBrowser1.Navigate(CType(KnownFolders.Desktop, ShellObject)) + + AddHandler AeroGlassCompositionChanged, AddressOf Form1_AeroGlassCompositionChanged + + If AeroGlassCompositionEnabled Then + ExcludeControlFromAeroGlass(panel1) + Else + Me.BackColor = Color.Teal + End If + + ' set the state of the Desktop Composition check box. + compositionEnabled.Checked = AeroGlassCompositionEnabled + End Sub + + Private Sub Form1_AeroGlassCompositionChanged(ByVal sender As Object, ByVal e As AeroGlassCompositionChangedEventArgs) + ' When the desktop composition mode changes the window exclusion must be changed appropriately. + If e.GlassAvailable Then + compositionEnabled.Checked = True + ExcludeControlFromAeroGlass(panel1) + Invalidate() + Else + compositionEnabled.Checked = False + Me.BackColor = Color.Teal + End If + End Sub + + Private Sub Form1_Resize(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Resize + Dim panelRect As Rectangle = ClientRectangle + panelRect.Inflate(-30, -30) + panel1.Bounds = panelRect + ExcludeControlFromAeroGlass(panel1) + End Sub + + Private Sub compositionEnabled_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) Handles compositionEnabled.CheckedChanged + ' Toggles the desktop composition mode. + AeroGlassCompositionEnabled = compositionEnabled.Checked + End Sub + End Class +End Namespace diff --git a/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/My Project/AssemblyInfo.vb b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..10e611d5 --- /dev/null +++ b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/My Project/AssemblyInfo.vb @@ -0,0 +1,37 @@ +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/My Project/Resources.Designer.vb b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/My Project/Resources.Designer.vb new file mode 100644 index 00000000..e96b8aff --- /dev/null +++ b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/My Project/Resources.resx b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/My Project/Settings.Designer.vb b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/My Project/Settings.Designer.vb new file mode 100644 index 00000000..f2ffe239 --- /dev/null +++ b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class Settings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()),Settings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As Settings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Settings + Get + Return Global.Settings.Default + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/My Project/Settings.settings b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/Program.vb b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/Program.vb new file mode 100644 index 00000000..f982c258 --- /dev/null +++ b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/Program.vb @@ -0,0 +1,21 @@ +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Linq +Imports System.Windows.Forms + +Namespace WindowsFormsGlassDemo + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New Form1()) + End Sub + End Class +End Namespace diff --git a/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/WindowsFormsGlassDemo.vbproj b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/WindowsFormsGlassDemo.vbproj new file mode 100644 index 00000000..55c2ef2f --- /dev/null +++ b/source/Samples/AeroGlass/VB/WindowsFormsGlassDemo/WindowsFormsGlassDemo.vbproj @@ -0,0 +1,164 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {EDC1FA53-E3D6-4C0D-88B1-4684847D4E0E} + WinExe + + + WindowsFormsGlassDemo + v3.5 + On + Binary + Off + On + 512 + + + + + + + + + 3.5 + false + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + + + true + full + false + bin\Debug\ + true + true + prompt + AllRules.ruleset + + + pdbonly + true + bin\Release\ + false + true + prompt + AllRules.ruleset + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + Form + + + Form1.vb + + + + + Form1.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + Designer + My.Resources + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + True + Settings.settings + True + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + false + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/AeroGlass/VB/WpfGlassDemo/Application.xaml b/source/Samples/AeroGlass/VB/WpfGlassDemo/Application.xaml new file mode 100644 index 00000000..39f70e2b --- /dev/null +++ b/source/Samples/AeroGlass/VB/WpfGlassDemo/Application.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/source/Samples/AeroGlass/VB/WpfGlassDemo/Application.xaml.vb b/source/Samples/AeroGlass/VB/WpfGlassDemo/Application.xaml.vb new file mode 100644 index 00000000..b56bca94 --- /dev/null +++ b/source/Samples/AeroGlass/VB/WpfGlassDemo/Application.xaml.vb @@ -0,0 +1,16 @@ +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Configuration +Imports System.Data +Imports System.Linq +Imports System.Windows + +Namespace WpfGlassDemo + ''' + ''' Interaction logic for App.xaml + ''' + Partial Public Class App + Inherits Application + End Class +End Namespace diff --git a/source/Samples/AeroGlass/VB/WpfGlassDemo/My Project/AssemblyInfo.vb b/source/Samples/AeroGlass/VB/WpfGlassDemo/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..2c78e2c9 --- /dev/null +++ b/source/Samples/AeroGlass/VB/WpfGlassDemo/My Project/AssemblyInfo.vb @@ -0,0 +1,53 @@ +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Resources +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + + '(used if a resource is not found in the page, + ' or application resource dictionaries) + '(used if a resource is not found in the page, + ' app, or any theme specific resource dictionaries) + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/AeroGlass/VB/WpfGlassDemo/My Project/Resources.Designer.vb b/source/Samples/AeroGlass/VB/WpfGlassDemo/My Project/Resources.Designer.vb new file mode 100644 index 00000000..e96b8aff --- /dev/null +++ b/source/Samples/AeroGlass/VB/WpfGlassDemo/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/AeroGlass/VB/WpfGlassDemo/My Project/Resources.resx b/source/Samples/AeroGlass/VB/WpfGlassDemo/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/AeroGlass/VB/WpfGlassDemo/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/AeroGlass/VB/WpfGlassDemo/My Project/Settings.Designer.vb b/source/Samples/AeroGlass/VB/WpfGlassDemo/My Project/Settings.Designer.vb new file mode 100644 index 00000000..f2ffe239 --- /dev/null +++ b/source/Samples/AeroGlass/VB/WpfGlassDemo/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class Settings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()),Settings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As Settings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Settings + Get + Return Global.Settings.Default + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/AeroGlass/VB/WpfGlassDemo/My Project/Settings.settings b/source/Samples/AeroGlass/VB/WpfGlassDemo/My Project/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/AeroGlass/VB/WpfGlassDemo/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/AeroGlass/VB/WpfGlassDemo/Window1.xaml b/source/Samples/AeroGlass/VB/WpfGlassDemo/Window1.xaml new file mode 100644 index 00000000..3c76888a --- /dev/null +++ b/source/Samples/AeroGlass/VB/WpfGlassDemo/Window1.xaml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + Enable Composition + + + + + + diff --git a/source/Samples/AeroGlass/VB/WpfGlassDemo/Window1.xaml.vb b/source/Samples/AeroGlass/VB/WpfGlassDemo/Window1.xaml.vb new file mode 100644 index 00000000..bd57a5e9 --- /dev/null +++ b/source/Samples/AeroGlass/VB/WpfGlassDemo/Window1.xaml.vb @@ -0,0 +1,78 @@ +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Linq +Imports System.Text +Imports System.Windows +Imports System.Windows.Controls +Imports System.Windows.Data +Imports System.Windows.Documents +Imports System.Windows.Input +Imports System.Windows.Media +Imports System.Windows.Media.Imaging +Imports System.Windows.Navigation +Imports System.Windows.Shapes + +Imports System.Windows.Threading + +Imports System.Drawing + +Imports Microsoft.WindowsAPICodePack.Shell + +Namespace WpfGlassDemo + ''' + ''' Interaction logic for Window1.xaml + ''' + Partial Public Class Window1 + Inherits GlassWindow + Public Sub New() + InitializeComponent() + End Sub + + Private Sub GlassWindow_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' update GlassRegion on window size change + AddHandler SizeChanged, AddressOf Window1_SizeChanged + + ' update background color on change of desktop composition mode + AddHandler AeroGlassCompositionChanged, AddressOf Window1_AeroGlassCompositionChanged + + ' Set the window background color + If AeroGlassCompositionEnabled Then + ' exclude the GDI rendered controls from the initial GlassRegion + ExcludeElementFromAeroGlass(eb1) + SetAeroGlassTransparency() + Else + Me.Background = System.Windows.Media.Brushes.Teal + End If + + ' initialize the explorer browser control + eb1.NavigationTarget = CType(KnownFolders.Computer, ShellObject) + + ' set the state of the Desktop Composition check box. + EnableCompositionCheck.IsChecked = AeroGlassCompositionEnabled + End Sub + + Private Sub Window1_AeroGlassCompositionChanged(ByVal sender As Object, ByVal e As AeroGlassCompositionChangedEventArgs) + ' When the desktop composition mode changes the background color and window exclusion must be changed appropriately. + If e.GlassAvailable Then + Me.EnableCompositionCheck.IsChecked = True + SetAeroGlassTransparency() + ExcludeElementFromAeroGlass(eb1) + InvalidateVisual() + Else + Me.EnableCompositionCheck.IsChecked = False + Me.Background = System.Windows.Media.Brushes.Teal + End If + End Sub + + Private Sub Window1_SizeChanged(ByVal sender As Object, ByVal e As SizeChangedEventArgs) + ExcludeElementFromAeroGlass(eb1) + End Sub + + Private Sub CheckBox_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' Toggles the desktop composition mode. + AeroGlassCompositionEnabled = EnableCompositionCheck.IsChecked.Value + End Sub + + End Class +End Namespace diff --git a/source/Samples/AeroGlass/VB/WpfGlassDemo/WpfGlassDemo.vbproj b/source/Samples/AeroGlass/VB/WpfGlassDemo/WpfGlassDemo.vbproj new file mode 100644 index 00000000..d1ba6f1a --- /dev/null +++ b/source/Samples/AeroGlass/VB/WpfGlassDemo/WpfGlassDemo.vbproj @@ -0,0 +1,132 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {749DED8B-DB4E-4CF5-BFAE-5CAB791BC5EC} + WinExe + + + WpfGlassDemo + v3.5 + On + Binary + Off + On + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + + + + + + + 3.5 + + + true + full + false + bin\Debug\ + true + true + prompt + + AllRules.ruleset + + + pdbonly + true + bin\Release\ + false + true + prompt + + AllRules.ruleset + + + + + 3.5 + + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + Application.xaml + Code + + + Window1.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + Designer + My.Resources + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + \ No newline at end of file diff --git a/source/Samples/AppRestartRecoveryDemo/CS/AppRestartRecoveryDemo.csproj b/source/Samples/AppRestartRecoveryDemo/CS/AppRestartRecoveryDemo.csproj new file mode 100644 index 00000000..847b151f --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/CS/AppRestartRecoveryDemo.csproj @@ -0,0 +1,113 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1} + WinExe + Properties + Microsoft.WindowsAPICodePack.Samples.AppRestartRecoveryDemo + AppRestartRecoveryDemo + v3.5 + 512 + + + + + + + + + 3.5 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + \ No newline at end of file diff --git a/source/Samples/AppRestartRecoveryDemo/CS/AppRestartRecoveryDemo.sln b/source/Samples/AppRestartRecoveryDemo/CS/AppRestartRecoveryDemo.sln new file mode 100644 index 00000000..a4a41f06 --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/CS/AppRestartRecoveryDemo.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppRestartRecoveryDemo", "AppRestartRecoveryDemo.csproj", "{DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/AppRestartRecoveryDemo/CS/CurrentFile.cs b/source/Samples/AppRestartRecoveryDemo/CS/CurrentFile.cs new file mode 100644 index 00000000..d37e3f77 --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/CS/CurrentFile.cs @@ -0,0 +1,50 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.IO; + +namespace Microsoft.WindowsAPICodePack.Samples.AppRestartRecoveryDemo +{ + public class FileSettings + { + public FileSettings() + { + + } + + public string Filename + { + get; + set; + } + + public string Contents + { + get; + set; + } + + public bool IsDirty + { + get; + set; + } + + public void Load(string path) + { + Contents = File.ReadAllText(path); + Filename = path; + IsDirty = false; + } + + public void Save(string path) + { + File.WriteAllText(path, Contents); + Filename = path; + IsDirty = false; + } + } +} diff --git a/source/Samples/AppRestartRecoveryDemo/CS/Form1.Designer.cs b/source/Samples/AppRestartRecoveryDemo/CS/Form1.Designer.cs new file mode 100644 index 00000000..2188ac51 --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/CS/Form1.Designer.cs @@ -0,0 +1,331 @@ +namespace Microsoft.WindowsAPICodePack.Samples.AppRestartRecoveryDemo +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator = new System.Windows.Forms.ToolStripSeparator(); + this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.editToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.undoToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); + this.cutToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.copyToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.pasteToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator9 = new System.Windows.Forms.ToolStripSeparator(); + this.selectAllToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.appRestartRecoveryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.crashToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.timerLabel = new System.Windows.Forms.ToolStripStatusLabel(); + this.statusLabel = new System.Windows.Forms.ToolStripStatusLabel(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.menuStrip1.SuspendLayout(); + this.statusStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // textBox1 + // + this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox1.Location = new System.Drawing.Point(0, 24); + this.textBox1.Multiline = true; + this.textBox1.Name = "textBox1"; + this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBox1.Size = new System.Drawing.Size(675, 261); + this.textBox1.TabIndex = 0; + this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.editToolStripMenuItem1, + this.appRestartRecoveryToolStripMenuItem, + this.helpToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(675, 24); + this.menuStrip1.TabIndex = 1; + this.menuStrip1.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newToolStripMenuItem, + this.openToolStripMenuItem, + this.toolStripSeparator, + this.saveToolStripMenuItem, + this.toolStripSeparator2, + this.exitToolStripMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + this.fileToolStripMenuItem.Text = "&File"; + // + // newToolStripMenuItem + // + this.newToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("newToolStripMenuItem.Image"))); + this.newToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.newToolStripMenuItem.Name = "newToolStripMenuItem"; + this.newToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N))); + this.newToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.newToolStripMenuItem.Text = "&New"; + this.newToolStripMenuItem.Click += new System.EventHandler(this.newToolStripMenuItem_Click); + // + // openToolStripMenuItem + // + this.openToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("openToolStripMenuItem.Image"))); + this.openToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.openToolStripMenuItem.Name = "openToolStripMenuItem"; + this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O))); + this.openToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.openToolStripMenuItem.Text = "&Open"; + this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click); + // + // toolStripSeparator + // + this.toolStripSeparator.Name = "toolStripSeparator"; + this.toolStripSeparator.Size = new System.Drawing.Size(149, 6); + // + // saveToolStripMenuItem + // + this.saveToolStripMenuItem.Image = ((System.Drawing.Image)(resources.GetObject("saveToolStripMenuItem.Image"))); + this.saveToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta; + this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; + this.saveToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S))); + this.saveToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.saveToolStripMenuItem.Text = "&Save"; + this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(149, 6); + // + // exitToolStripMenuItem + // + this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + this.exitToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.exitToolStripMenuItem.Text = "E&xit"; + this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); + // + // editToolStripMenuItem1 + // + this.editToolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.undoToolStripMenuItem, + this.toolStripSeparator8, + this.cutToolStripMenuItem1, + this.copyToolStripMenuItem1, + this.pasteToolStripMenuItem1, + this.toolStripSeparator9, + this.selectAllToolStripMenuItem1}); + this.editToolStripMenuItem1.Name = "editToolStripMenuItem1"; + this.editToolStripMenuItem1.Size = new System.Drawing.Size(39, 20); + this.editToolStripMenuItem1.Text = "&Edit"; + // + // undoToolStripMenuItem + // + this.undoToolStripMenuItem.Name = "undoToolStripMenuItem"; + this.undoToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.Z))); + this.undoToolStripMenuItem.Size = new System.Drawing.Size(144, 22); + this.undoToolStripMenuItem.Text = "&Undo"; + this.undoToolStripMenuItem.Click += new System.EventHandler(this.undoToolStripMenuItem_Click); + // + // toolStripSeparator8 + // + this.toolStripSeparator8.Name = "toolStripSeparator8"; + this.toolStripSeparator8.Size = new System.Drawing.Size(141, 6); + // + // cutToolStripMenuItem1 + // + this.cutToolStripMenuItem1.Image = ((System.Drawing.Image)(resources.GetObject("cutToolStripMenuItem1.Image"))); + this.cutToolStripMenuItem1.ImageTransparentColor = System.Drawing.Color.Magenta; + this.cutToolStripMenuItem1.Name = "cutToolStripMenuItem1"; + this.cutToolStripMenuItem1.Size = new System.Drawing.Size(144, 22); + this.cutToolStripMenuItem1.Text = "Cu&t"; + this.cutToolStripMenuItem1.Click += new System.EventHandler(this.cutToolStripMenuItem1_Click); + // + // copyToolStripMenuItem1 + // + this.copyToolStripMenuItem1.Image = ((System.Drawing.Image)(resources.GetObject("copyToolStripMenuItem1.Image"))); + this.copyToolStripMenuItem1.ImageTransparentColor = System.Drawing.Color.Magenta; + this.copyToolStripMenuItem1.Name = "copyToolStripMenuItem1"; + this.copyToolStripMenuItem1.Size = new System.Drawing.Size(144, 22); + this.copyToolStripMenuItem1.Text = "&Copy"; + this.copyToolStripMenuItem1.Click += new System.EventHandler(this.copyToolStripMenuItem1_Click); + // + // pasteToolStripMenuItem1 + // + this.pasteToolStripMenuItem1.Image = ((System.Drawing.Image)(resources.GetObject("pasteToolStripMenuItem1.Image"))); + this.pasteToolStripMenuItem1.ImageTransparentColor = System.Drawing.Color.Magenta; + this.pasteToolStripMenuItem1.Name = "pasteToolStripMenuItem1"; + this.pasteToolStripMenuItem1.Size = new System.Drawing.Size(144, 22); + this.pasteToolStripMenuItem1.Text = "&Paste"; + this.pasteToolStripMenuItem1.Click += new System.EventHandler(this.pasteToolStripMenuItem1_Click); + // + // toolStripSeparator9 + // + this.toolStripSeparator9.Name = "toolStripSeparator9"; + this.toolStripSeparator9.Size = new System.Drawing.Size(141, 6); + // + // selectAllToolStripMenuItem1 + // + this.selectAllToolStripMenuItem1.Name = "selectAllToolStripMenuItem1"; + this.selectAllToolStripMenuItem1.Size = new System.Drawing.Size(144, 22); + this.selectAllToolStripMenuItem1.Text = "Select &All"; + this.selectAllToolStripMenuItem1.Click += new System.EventHandler(this.selectAllToolStripMenuItem1_Click); + // + // appRestartRecoveryToolStripMenuItem + // + this.appRestartRecoveryToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.crashToolStripMenuItem}); + this.appRestartRecoveryToolStripMenuItem.Name = "appRestartRecoveryToolStripMenuItem"; + this.appRestartRecoveryToolStripMenuItem.Size = new System.Drawing.Size(131, 20); + this.appRestartRecoveryToolStripMenuItem.Text = "&App Restart Recovery"; + // + // crashToolStripMenuItem + // + this.crashToolStripMenuItem.Name = "crashToolStripMenuItem"; + this.crashToolStripMenuItem.Size = new System.Drawing.Size(107, 22); + this.crashToolStripMenuItem.Text = "&Crash!"; + this.crashToolStripMenuItem.Click += new System.EventHandler(this.crashToolStripMenuItem_Click); + // + // helpToolStripMenuItem + // + this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripSeparator5, + this.aboutToolStripMenuItem}); + this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + this.helpToolStripMenuItem.Text = "&Help"; + // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + this.toolStripSeparator5.Size = new System.Drawing.Size(113, 6); + // + // aboutToolStripMenuItem + // + this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; + this.aboutToolStripMenuItem.Size = new System.Drawing.Size(116, 22); + this.aboutToolStripMenuItem.Text = "&About..."; + this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); + // + // statusStrip1 + // + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.timerLabel, + this.statusLabel}); + this.statusStrip1.Location = new System.Drawing.Point(0, 285); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(675, 24); + this.statusStrip1.TabIndex = 2; + this.statusStrip1.Text = "statusStrip1"; + // + // timerLabel + // + this.timerLabel.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Right; + this.timerLabel.Name = "timerLabel"; + this.timerLabel.Size = new System.Drawing.Size(42, 19); + this.timerLabel.Text = "Timer"; + // + // statusLabel + // + this.statusLabel.Name = "statusLabel"; + this.statusLabel.Size = new System.Drawing.Size(39, 19); + this.statusLabel.Text = "Status"; + // + // timer1 + // + this.timer1.Enabled = true; + this.timer1.Interval = 1000; + this.timer1.Tick += new System.EventHandler(this.timer1_Tick); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(675, 309); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.menuStrip1); + this.Controls.Add(this.statusStrip1); + this.MainMenuStrip = this.menuStrip1; + this.Name = "Form1"; + this.Text = "Form1"; + this.Load += new System.EventHandler(this.Form1_Load); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator; + private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; + private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem; + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.ToolStripStatusLabel statusLabel; + private System.Windows.Forms.ToolStripMenuItem appRestartRecoveryToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem crashToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem undoToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator8; + private System.Windows.Forms.ToolStripMenuItem cutToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem copyToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem pasteToolStripMenuItem1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator9; + private System.Windows.Forms.ToolStripMenuItem selectAllToolStripMenuItem1; + private System.Windows.Forms.ToolStripStatusLabel timerLabel; + private System.Windows.Forms.Timer timer1; + + } +} + diff --git a/source/Samples/AppRestartRecoveryDemo/CS/Form1.cs b/source/Samples/AppRestartRecoveryDemo/CS/Form1.cs new file mode 100644 index 00000000..5a479fcc --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/CS/Form1.cs @@ -0,0 +1,360 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Windows.Forms; +using System.Diagnostics; +using System; +using System.Threading; +using System.Timers; +using Microsoft.WindowsAPICodePack.Shell; +using System.IO; +using Microsoft.WindowsAPICodePack.ApplicationServices; +using Microsoft.WindowsAPICodePack.Dialogs; + +namespace Microsoft.WindowsAPICodePack.Samples.AppRestartRecoveryDemo +{ + public partial class Form1 : Form + { + private static string AppTitle = "Application Restart/Recovery Demo"; + private static FileSettings CurrentFile = new FileSettings(); + private static string RecoveryFile = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "AppRestartRecoveryDemoData.xml"); + private static string DataSeparatorString = "@@@@@@@@@@"; + + // + private bool internalLoad = false; + private bool recovered = false; + private DateTime startTime; + + public Form1() + { + Debug.WriteLine("ARR: Demo started"); + + InitializeComponent(); + + + Form1.CurrentFile.IsDirty = false; + + UpdateAppTitle(); + + RegisterForRestart(); + RegisterForRecovery(); + + + statusLabel.Text = "Application successfully registered for restart / recovery. Wait 60s before crashing the application."; + + // SetupTimerNotifyForRestart sets a timer to + // beep when 60 seconds have elapsed, indicating that + // WER will restart the program after a crash. + // WER will not restart applications that crash + // within 60 seconds of startup. + SetupTimerNotifyForRestart(); + + // If we started with /restart command line argument + // then we were automatically restarted and should + // try to resume the previous session. + if (System.Environment.GetCommandLineArgs().Length > 1 && System.Environment.GetCommandLineArgs()[1] == "/restart") + { + recovered = true; + RecoverLastSession(System.Environment.GetCommandLineArgs()[1]); + } + } + + private void SetupTimerNotifyForRestart() + { + // Beep when 60 seconds has elapsed. + System.Timers.Timer notify = new System.Timers.Timer(60000); + notify.Elapsed += new ElapsedEventHandler(NotifyUser); + notify.AutoReset = false; // Only beep once. + notify.Enabled = true; + } + + private void NotifyUser(object source, ElapsedEventArgs e) + { + statusLabel.Text = "It is \"safe\" to crash now! (click App Restart Recovery->Crash!)"; + } + + private void Crash() + { + Environment.FailFast("ARR Demo intentional crash."); + } + + private void RegisterForRestart() + { + // Register for automatic restart if the + // application was terminated for any reason + // other than a system reboot or a system update. + ApplicationRestartRecoveryManager.RegisterForApplicationRestart( + new RestartSettings("/restart", RestartRestrictions.NotOnReboot | RestartRestrictions.NotOnPatch)); + + Debug.WriteLine("ARR: Registered for restart"); + } + + private void RegisterForRecovery() + { + // Don't pass any state. We'll use our static variable "CurrentFile" to determine + // the current state of the application. + // Since this registration is being done on application startup, we don't have a state currently. + // In some cases it might make sense to pass this initial state. + // Another approach: When doing "auto-save", register for recovery everytime, and pass + // the current state at that time. + RecoveryData data = new RecoveryData(new RecoveryCallback(RecoveryProcedure), null); + RecoverySettings settings = new RecoverySettings(data, 0); + + ApplicationRestartRecoveryManager.RegisterForApplicationRecovery(settings); + + Debug.WriteLine("ARR: Registered for recovery"); + } + + // This method is invoked by WER. + private int RecoveryProcedure(object state) + { + Debug.WriteLine("ARR: Recovery procedure called!!!"); + + PingSystem(); + + // Do recovery work here. + // Signal to WER that the recovery + // is still in progress. + + // Write the contents of the file, as well as some other data that we need + File.WriteAllText(RecoveryFile, string.Format("{1}{0}{2}{0}{3}", DataSeparatorString, CurrentFile.Filename, CurrentFile.IsDirty, CurrentFile.Contents)); + + Debug.WriteLine("File path: " + RecoveryFile); + Debug.WriteLine("File exists: " + File.Exists(RecoveryFile)); + Debug.WriteLine("Application shutting down..."); + + ApplicationRestartRecoveryManager.ApplicationRecoveryFinished(true); + return 0; + } + + // This method is called periodically to ensure + // that WER knows that recovery is still in progress. + private void PingSystem() + { + // Find out if the user canceled recovery. + bool isCanceled = ApplicationRestartRecoveryManager.ApplicationRecoveryInProgress(); + + if (isCanceled) + { + Console.WriteLine("Recovery has been canceled by user."); + Environment.Exit(2); + } + } + + // This method gets called by main when the + // commandline arguments indicate that this + // application was automatically restarted + // by WER. + private void RecoverLastSession(string command) + { + if (!File.Exists(RecoveryFile)) + { + MessageBox.Show(this, string.Format("Recovery file {0} does not exist", RecoveryFile)); + internalLoad = true; + textBox1.Text = "Could not recover the data. Recovery data file does not exist"; + internalLoad = false; + UpdateAppTitle(); + return; + } + + // Perform application state restoration + // actions here. + string contents = File.ReadAllText(RecoveryFile); + + CurrentFile.Filename = contents.Remove(contents.IndexOf(Form1.DataSeparatorString)); + + contents = contents.Remove(0, contents.IndexOf(Form1.DataSeparatorString) + Form1.DataSeparatorString.Length); + + CurrentFile.IsDirty = contents.Remove(contents.IndexOf(Form1.DataSeparatorString)) == "True" ? true : false; + + contents = contents.Remove(0, contents.IndexOf(Form1.DataSeparatorString) + Form1.DataSeparatorString.Length); + + CurrentFile.Contents = contents; + + // Load our textbox + textBox1.Text = CurrentFile.Contents; + + // Update the title + UpdateAppTitle(); + + // Reset our variable so next title updates we don't show the "recovered" text + recovered = false; + } + + private void exitToolStripMenuItem_Click(object sender, EventArgs e) + { + if (PromptForSave()) + { + Application.Exit(); + } + } + + private void openToolStripMenuItem_Click(object sender, EventArgs e) + { + if (PromptForSave()) + { + CommonOpenFileDialog cfd = new CommonOpenFileDialog(); + cfd.Filters.Add(new CommonFileDialogFilter("Text files", ".txt")); + + CommonFileDialogResult result = cfd.ShowDialog(); + + if (result == CommonFileDialogResult.Ok) + { + internalLoad = true; + Form1.CurrentFile.Load(cfd.FileName); + textBox1.Text = CurrentFile.Contents; + internalLoad = false; + + UpdateAppTitle(); + } + } + } + + private bool PromptForSave() + { + if (!CurrentFile.IsDirty) + { + return true; + } + + // ask the user to save. + DialogResult dr = MessageBox.Show(this, "Current document has changed. Would you like to save?", "Save current document", MessageBoxButtons.YesNoCancel); + + if (dr == DialogResult.Cancel) + { + return false; + } + + if (dr == DialogResult.Yes) + { + // Does the current file have a name? + if (string.IsNullOrEmpty(Form1.CurrentFile.Filename)) + { + CommonSaveFileDialog saveAsCFD = new CommonSaveFileDialog(); + saveAsCFD.Filters.Add(new CommonFileDialogFilter("Text files", ".txt")); + saveAsCFD.AlwaysAppendDefaultExtension = true; + + if (saveAsCFD.ShowDialog() == CommonFileDialogResult.Ok) + { + Form1.CurrentFile.Save(saveAsCFD.FileName); + UpdateAppTitle(); + } + else + { + return false; + } + } + else + { + // just save it + Form1.CurrentFile.Save(CurrentFile.Filename); + UpdateAppTitle(); + } + } + + return true; + } + + private void textBox1_TextChanged(object sender, EventArgs e) + { + if (!internalLoad && Form1.CurrentFile != null) + { + Form1.CurrentFile.IsDirty = true; + Form1.CurrentFile.Contents = textBox1.Text; + UpdateAppTitle(); + } + } + + private void saveToolStripMenuItem_Click(object sender, EventArgs e) + { + // Does the current file have a name? + if (string.IsNullOrEmpty(Form1.CurrentFile.Filename)) + { + CommonSaveFileDialog saveAsCFD = new CommonSaveFileDialog(); + saveAsCFD.Filters.Add(new CommonFileDialogFilter("Text files", ".txt")); + + if (saveAsCFD.ShowDialog() == CommonFileDialogResult.Ok) + { + Form1.CurrentFile.Save(saveAsCFD.FileName); + UpdateAppTitle(); + } + else + return; + } + else + { + // just save it + Form1.CurrentFile.Save(Form1.CurrentFile.Filename); + UpdateAppTitle(); + } + } + + private void UpdateAppTitle() + { + string dirtyState = Form1.CurrentFile.IsDirty ? "*" : ""; + string filename = string.IsNullOrEmpty(Form1.CurrentFile.Filename) ? + "Untitled" : Path.GetFileName(Form1.CurrentFile.Filename); + + this.Text = string.Format("{0}{1} - {2}", filename, dirtyState, AppTitle); + + if (recovered) + this.Text += " (RECOVERED FROM CRASH)"; + } + + private void crashToolStripMenuItem_Click(object sender, EventArgs e) + { + Crash(); + } + + private void undoToolStripMenuItem_Click(object sender, EventArgs e) + { + textBox1.Undo(); + } + + private void cutToolStripMenuItem1_Click(object sender, EventArgs e) + { + textBox1.Cut(); + } + + private void copyToolStripMenuItem1_Click(object sender, EventArgs e) + { + textBox1.Copy(); + } + + private void pasteToolStripMenuItem1_Click(object sender, EventArgs e) + { + textBox1.Paste(); + } + + private void selectAllToolStripMenuItem1_Click(object sender, EventArgs e) + { + textBox1.SelectAll(); + } + + private void aboutToolStripMenuItem_Click(object sender, EventArgs e) + { + MessageBox.Show(this, "Application Restart and Recovery demo", "Windows API Code Pack for .NET Framework"); + } + + private void timer1_Tick(object sender, EventArgs e) + { + TimeSpan span = DateTime.Now - startTime; + timerLabel.Text = string.Format("App running for {0}s", (int)span.TotalSeconds); + } + + private void Form1_Load(object sender, EventArgs e) + { + startTime = DateTime.Now; + } + + private void newToolStripMenuItem_Click(object sender, EventArgs e) + { + if (PromptForSave()) + { + textBox1.Clear(); + CurrentFile = new FileSettings(); + CurrentFile.IsDirty = false; + UpdateAppTitle(); + } + } + } +} diff --git a/source/Samples/AppRestartRecoveryDemo/CS/Form1.resx b/source/Samples/AppRestartRecoveryDemo/CS/Form1.resx new file mode 100644 index 00000000..43befd78 --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/CS/Form1.resx @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEPSURBVDhPrdPZasJAFAZgX8q+Q32N9o2kXkjphQsigoJC + ixa1VAWXiohG7IakbmjcNcYl5i8TCQSdGXPhgcPczHwz5xzGZrtWRN+bOM1wqo5gvAJfrIBy4w/cu8hh + VjyG3nDjuOcjkbTABB58cSRy9SMiiPSXhF6rTMDpedEPG0ktJfD8wQT26gEEMSAq4I3mqYCmaZCVHQZj + WQfst3f0Ep7CGSqw3amYzBWI/TkfcAdTZ4B60LCQt+hJK3yJEz7g8ifOAGWzhzRdo9WdofYt8QFSnzlI + 42bLDdqDBZqtMUpC3zpgbtxPe4rq5xDZSsc6YG6c8DtCodZDsihaA4x5s1bmGI0Zkw2X8lofWHf+AdjM + 9sNc+xBlAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJQSURBVDhPlZNdSNNRGMb/F110ZZEVhVBgeeHNICiiuggp + olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdPKMgr7kApFItTUkWZqVhSVYmao5Nev/xyoQ4k88Nyc + 8z6/93nP4QjCfy6lwc4ltZVso4P/tMyXRcmMHqZ0EeY6jZQVInzuf0e1Tb9Ina3P/tkpLD6XkNg8BJe5 + u93C+HDVrP4M2ZkcMOOw5tLZ9nxJyJE4HSExBoKkBQhVpTrGhso9zNPfiph0JlB+U01ZcRbmwnRMeWlc + 08opUCV6QissGsZ+WOY6z4hmuuXglC6pRYBbJSp+fzXNxnaZ66o1s3rkyKHWruJuWRYOcwZ2kxKr8TI3 + DCkU6+QYNUnuNGWmLEY+5uOK3degoKZcx3SfEvozPfVB3OtNhi4ZvI2nrTIc23U9gtmYwa8eNXzScq8i + l6bHWnfRwhHeREJzGFONgYw/CeB9qQSZNNR9FyUGBT87lfQ3plJj1zLTq4COGDegLVo0HmeqKZjx+gOM + PNzDYPU2lLF+4jhyN6BIl8pgexK3bRpaXopJuhJEwGloiWDmVSgTLw4xWreXoZrtfK/wp/nKak4E+s6/ + hDFHTkd9GndsOdCTBq1i3NdHmWgIYvRpAMO1OxlwSPhi2YpT641CuoWzsSfnAfnZiVRZ1Tjvx9GsF+bU + pF1BvWolD9JXUZmyDnOiD1cvbCZiYXfXCPrMi+gVZ8hOiiL53DHORwdzKnw/hw/uYt9uCTskfvj7+rBp + 41rWr/Fig7fX8j/Tsn/fcgx/ARfG3ml6M3rzAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIsSURBVDhPrZPdS5NxFMf3L3TfTdBFtzU1hmuxGjzlHMqq + YVgRvT2RL+XSZZqoWJlGLV8gW+HSScvpJJxU+AamSI2hTCVLM1e0xKGm2EQw+PY7v+j5tTIvoh+cy8/n + POec76NS/Y/37GkUVL72ZbR5l/DYvYDGhgjuO2ZQW/MJ9tsh3CifQmnJBAoLXiMvdxQXzgeh9Cawtweo + qV7FRm9ldQ3GtF4cTnvCSxF4Wxe5oLLiy195giMLK9htfg61WoblkEcI3I/muaC05PO6gp/w+/Ai4kw+ + FFyexgFzkxA462e54JLt3R+CX+GRyQi2SV5Yc8aRmuIUgrq7YS7IzhqNEfwODwbD2Kx3Q5YDMJkcQlBd + 9ZEL5DMBRbAe3OP/gE2JDThy9AWSkmqF4GblNLq7wE4JHD/5CpZjA3zbtDCamT6bOv+A+3DQ0glJsgvB + 1bJJdPjAMgA0ub6xu39F+fU5vlRaGM2cmRFU4OTUdhgMFUJwpXAcnmbgoXONBScKY3pOTJlP2JB+roh3 + Tk5h8H4P9PoyIbDljTEYqLoT5Z1JwEKCOK2EobezGJuag5x7DXuNbRzW7nFBpysSAoql4x6UzyYBwWfz + b+FNaB6hmSVcLLYjXu9icCPidz2ANjFfCDIzhtncy3zmrQYPtuyQ0NLRD1/XILr7/Bh4OYR9JgvUunok + MHi7pg4ajVUIKNOnT/XzeFLCKCR0ZzoVbZsWRjNTVyqCdyZkxwr+9a/+Dk60OMVjMFpXAAAAAElFTkSu + QmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGHSURBVDhPrdNNS0JREAbgfk3QpkVRCUUSFrUQFJSrEIRZ + pKWULSIlsgJTMD+SpF0tLIS6hhZIKBalkJmkUdqiL1OxTMFoXfCWV5BcdLlRsznDYeY5A8Opq/vvuEje + wen247v7kHnGJumtufvx3ZdiCabVjZpici+A8FmcGVCW7Wsk/EcRqiFfKEGmmkX68ZE5sOM9hvlrimwu + j2A4DpFEiaenHHPgIHSOJbsD2x4f1AsW9EtGmTeXx05nnzE1b8HwxByIgTHoDKbfAWVEoTaBkEyCkBsQ + PE0yBzKFDxhdbxDr01h03IKniUGoTcC6lUIkUaSHUvl3DNpeIdbdgyN1gD+6BqEmBN5MEj0KH5Y3Kpv5 + MYyuEgh9Dl0jHrSLbFAtusGbjlabWISNHhDrs9WCNoGZygXaa+okfVdo5CjpAUKXogq8oRRa+HoqH7de + olO6jYaOIdQ3NNEDqpUbsKUkmvlGsLmV3QciGbD6FGjplsK1H6MHDqM5cGXraO2Vw7l7wnx1f/nRn6qq + 3+OKoLtvAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHiSURBVDhPpZPRT5JRGMb9U0rHnHXtH9BaWa0222pe1EVb + 2briQq+6atlsyzVstIkhzcLSAfahtJbS0mESaQaJlIGTzBkslPEpiSDor+87LAnawM13e+7O+3uf55z3 + VFUdtBwT31AljQeELCNe+hwfCC//Yl9stbm0zMMerrc9J7i4XBliHwsU9ed2dunqf4PTHeBSS2dliGXU + JwDOEEifwR+WeWh+jTQpY5tIYHUleDKaQD8UFwquZIpd9Tk8ew4y2znkjTSRWFIASqt9YJX6Zje+hfUC + xGRziXO97m10IzK3pZ+0Pg3T/3btP0CLMYZjSuZo0zCf5uN5iEHJq+beTGVZTaRYiqzzNbyG6VVUADqk + nJBfmXpFF+VI00vqLgxS2/gsD1DzbqWze5O1phA3DF94YF0qciD/zrKwsoV7bgOjNIPm3OMCQE6mmf8e + wxeM4PH/YPzjIm29+ee9NZBEa4hy+X6I83dmhYzSNJoz3QVA/emrlKpVPysAWSVeLJFlLrzJmFfG/i7O + o0EPNQ368jtyrX1KAP6d/NdBt+091Sd05QEXb7pIZXYwDXnpsc9gfDEtJqvNBsskh4/fKw9o0DqV27YK + 1Taa0ZztoeZUF9UnO5XmDg4du1t5zff1mQ566A8dAOcMIXbZrQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJQSURBVDhPtZNZSJRhFIZ/6MJuihbqqquC6CaKCKqLjMIs + TDOMxIysiRiVEpXJ0iE1NUUnt0nTxshlUHOrRFEpEiFxaNdwjBaJ1Mhpsuafcc/i6f8/GWxo86YDL+fm + vM9Z+D5J+h/R2ZxB+81UGssSmBe/oTIPt8pyjuCwVTFmu8ZgXzZntb7kpeu4YtBjTI/7FagaJ+V6pp11 + TDqqMRfrGB+pICclihdd8Zw/7U+8ZjO2zmOMtK4mOmy/J0QFqOZpZw1FGUfptmQjvy9guE/PW8sJmkoC + CQ/1pipxFU/zJCIP7/ME1FXkzALkGxgSw0jWhaCPCuZcZBA6bSAxGn8iQn3Ij14jACF+3p6A6lIDU3It + U3YT40OZ2J9HYa1YLtRbvozu4kU8MnoJsyqfbRs9AWZTBhP2MiYG0hh/eYqxZweRmxeTW95KpqmRC5dr + iTeYiUktITzBSFhsliegtDCV0UEjY31aRh/747q/iY+3VwizO6ZnvuFwTjIw7CA4IoWA4/o5SEluEvKr + NFwPfXF1rMfZtpLBckl0VqP0VqeQqaad3n6bMN/tsrInSDMLKcxK4HPPGZzt65BblmKv96L/uiTG/jrz + nS8upfMHB71vbFh63uEXGoOvYt619wDe23cg5V+Mw/4gQjEv4VPDQoYqF2AtkohWdlbHdk9wVZmgwNxG + U4dVZFVbN6xFupQcKx6I+8rurFUO9nPne5bXwlx/p5ua1idzAHWN3KSTygsLRBO0m4CdWwRZvba6s7vb + 77KY4E9xSLm2WvAvzeuz/a3oB0747y0N60d/AAAAAElFTkSuQmCC + + + + 132, 17 + + + 248, 17 + + \ No newline at end of file diff --git a/source/Samples/AppRestartRecoveryDemo/CS/Program.cs b/source/Samples/AppRestartRecoveryDemo/CS/Program.cs new file mode 100644 index 00000000..248709ad --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/CS/Program.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; + +namespace Microsoft.WindowsAPICodePack.Samples.AppRestartRecoveryDemo +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/source/Samples/AppRestartRecoveryDemo/CS/Properties/AssemblyInfo.cs b/source/Samples/AppRestartRecoveryDemo/CS/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..74e933c1 --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/CS/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("AppRestartRecoveryDemo")] +[assembly: AssemblyDescription("Application Restart Recovery Demo")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("5b55c1fe-4e02-4ffd-9c19-7f39d900ad8f")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/AppRestartRecoveryDemo/CS/Properties/Resources.Designer.cs b/source/Samples/AppRestartRecoveryDemo/CS/Properties/Resources.Designer.cs new file mode 100644 index 00000000..ab0a46ee --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/CS/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.AppRestartRecoveryDemo.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.WindowsAPICodePack.Samples.AppRestartRecoveryDemo.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/AppRestartRecoveryDemo/CS/Properties/Resources.resx b/source/Samples/AppRestartRecoveryDemo/CS/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/CS/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/AppRestartRecoveryDemo/CS/Properties/Settings.Designer.cs b/source/Samples/AppRestartRecoveryDemo/CS/Properties/Settings.Designer.cs new file mode 100644 index 00000000..3cc2c8b5 --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/CS/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.AppRestartRecoveryDemo.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/AppRestartRecoveryDemo/CS/Properties/Settings.settings b/source/Samples/AppRestartRecoveryDemo/CS/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/CS/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/AppRestartRecoveryDemo/VB/AppRestartRecoveryDemo.sln b/source/Samples/AppRestartRecoveryDemo/VB/AppRestartRecoveryDemo.sln new file mode 100644 index 00000000..2e23fe6b --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/VB/AppRestartRecoveryDemo.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AppRestartRecoveryDemo", "AppRestartRecoveryDemo.vbproj", "{DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/AppRestartRecoveryDemo/VB/AppRestartRecoveryDemo.vbproj b/source/Samples/AppRestartRecoveryDemo/VB/AppRestartRecoveryDemo.vbproj new file mode 100644 index 00000000..c79a971b --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/VB/AppRestartRecoveryDemo.vbproj @@ -0,0 +1,120 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {0FEEF2BF-058C-49E9-938C-EA41768A1998} + WinExe + + + AppRestartRecoveryDemo + v3.5 + On + Binary + Off + On + 512 + + + + + + + + + 3.5 + + + true + full + false + bin\Debug\ + true + true + prompt + + AllRules.ruleset + + + pdbonly + true + bin\Release\ + false + true + prompt + + AllRules.ruleset + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + Form + + + Form1.vb + + + + + Form1.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + Designer + My.Resources + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + True + Settings.settings + True + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + \ No newline at end of file diff --git a/source/Samples/AppRestartRecoveryDemo/VB/CurrentFile.vb b/source/Samples/AppRestartRecoveryDemo/VB/CurrentFile.vb new file mode 100644 index 00000000..b361876b --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/VB/CurrentFile.vb @@ -0,0 +1,59 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Linq +Imports System.Text +Imports System.IO + +Namespace Microsoft.WindowsAPICodePack.Samples.AppRestartRecoveryDemo + Public Class FileSettings + Public Sub New() + + End Sub + + Private privateFilename As String + Public Property Filename() As String + Get + Return privateFilename + End Get + Set(ByVal value As String) + privateFilename = value + End Set + End Property + + Private privateContents As String + Public Property Contents() As String + Get + Return privateContents + End Get + Set(ByVal value As String) + privateContents = value + End Set + End Property + + Private privateIsDirty As Boolean + Public Property IsDirty() As Boolean + Get + Return privateIsDirty + End Get + Set(ByVal value As Boolean) + privateIsDirty = value + End Set + End Property + + Public Sub Load(ByVal path As String) + Contents = File.ReadAllText(path) + Filename = path + IsDirty = False + End Sub + + Public Sub Save(ByVal path As String) + File.WriteAllText(path, Contents) + Filename = path + IsDirty = False + End Sub + End Class +End Namespace diff --git a/source/Samples/AppRestartRecoveryDemo/VB/Form1.Designer.vb b/source/Samples/AppRestartRecoveryDemo/VB/Form1.Designer.vb new file mode 100644 index 00000000..3196d3d1 --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/VB/Form1.Designer.vb @@ -0,0 +1,292 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace Microsoft.WindowsAPICodePack.Samples.AppRestartRecoveryDemo + Partial Public Class Form1 + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1)) + Me.textBox1 = New System.Windows.Forms.TextBox + Me.menuStrip1 = New System.Windows.Forms.MenuStrip + Me.fileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.newToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.openToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.toolStripSeparator = New System.Windows.Forms.ToolStripSeparator + Me.saveToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.toolStripSeparator2 = New System.Windows.Forms.ToolStripSeparator + Me.exitToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.editToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem + Me.undoToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.toolStripSeparator8 = New System.Windows.Forms.ToolStripSeparator + Me.cutToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem + Me.copyToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem + Me.pasteToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem + Me.toolStripSeparator9 = New System.Windows.Forms.ToolStripSeparator + Me.selectAllToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem + Me.appRestartRecoveryToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.crashToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.helpToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.toolStripSeparator5 = New System.Windows.Forms.ToolStripSeparator + Me.aboutToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem + Me.statusStrip1 = New System.Windows.Forms.StatusStrip + Me.timerLabel = New System.Windows.Forms.ToolStripStatusLabel + Me.statusLabel = New System.Windows.Forms.ToolStripStatusLabel + Me.timer1 = New System.Windows.Forms.Timer(Me.components) + Me.menuStrip1.SuspendLayout() + Me.statusStrip1.SuspendLayout() + Me.SuspendLayout() + ' + 'textBox1 + ' + Me.textBox1.Dock = System.Windows.Forms.DockStyle.Fill + Me.textBox1.Location = New System.Drawing.Point(0, 24) + Me.textBox1.Multiline = True + Me.textBox1.Name = "textBox1" + Me.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both + Me.textBox1.Size = New System.Drawing.Size(675, 261) + Me.textBox1.TabIndex = 0 + ' + 'menuStrip1 + ' + Me.menuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.fileToolStripMenuItem, Me.editToolStripMenuItem1, Me.appRestartRecoveryToolStripMenuItem, Me.helpToolStripMenuItem}) + Me.menuStrip1.Location = New System.Drawing.Point(0, 0) + Me.menuStrip1.Name = "menuStrip1" + Me.menuStrip1.Size = New System.Drawing.Size(675, 24) + Me.menuStrip1.TabIndex = 1 + Me.menuStrip1.Text = "menuStrip1" + ' + 'fileToolStripMenuItem + ' + Me.fileToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.newToolStripMenuItem, Me.openToolStripMenuItem, Me.toolStripSeparator, Me.saveToolStripMenuItem, Me.toolStripSeparator2, Me.exitToolStripMenuItem}) + Me.fileToolStripMenuItem.Name = "fileToolStripMenuItem" + Me.fileToolStripMenuItem.Size = New System.Drawing.Size(37, 20) + Me.fileToolStripMenuItem.Text = "&File" + ' + 'newToolStripMenuItem + ' + Me.newToolStripMenuItem.Image = CType(resources.GetObject("newToolStripMenuItem.Image"), System.Drawing.Image) + Me.newToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta + Me.newToolStripMenuItem.Name = "newToolStripMenuItem" + Me.newToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.N), System.Windows.Forms.Keys) + Me.newToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.newToolStripMenuItem.Text = "&New" + ' + 'openToolStripMenuItem + ' + Me.openToolStripMenuItem.Image = CType(resources.GetObject("openToolStripMenuItem.Image"), System.Drawing.Image) + Me.openToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta + Me.openToolStripMenuItem.Name = "openToolStripMenuItem" + Me.openToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.O), System.Windows.Forms.Keys) + Me.openToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.openToolStripMenuItem.Text = "&Open" + ' + 'toolStripSeparator + ' + Me.toolStripSeparator.Name = "toolStripSeparator" + Me.toolStripSeparator.Size = New System.Drawing.Size(149, 6) + ' + 'saveToolStripMenuItem + ' + Me.saveToolStripMenuItem.Image = CType(resources.GetObject("saveToolStripMenuItem.Image"), System.Drawing.Image) + Me.saveToolStripMenuItem.ImageTransparentColor = System.Drawing.Color.Magenta + Me.saveToolStripMenuItem.Name = "saveToolStripMenuItem" + Me.saveToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.S), System.Windows.Forms.Keys) + Me.saveToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.saveToolStripMenuItem.Text = "&Save" + ' + 'toolStripSeparator2 + ' + Me.toolStripSeparator2.Name = "toolStripSeparator2" + Me.toolStripSeparator2.Size = New System.Drawing.Size(149, 6) + ' + 'exitToolStripMenuItem + ' + Me.exitToolStripMenuItem.Name = "exitToolStripMenuItem" + Me.exitToolStripMenuItem.Size = New System.Drawing.Size(152, 22) + Me.exitToolStripMenuItem.Text = "E&xit" + ' + 'editToolStripMenuItem1 + ' + Me.editToolStripMenuItem1.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.undoToolStripMenuItem, Me.toolStripSeparator8, Me.cutToolStripMenuItem1, Me.copyToolStripMenuItem1, Me.pasteToolStripMenuItem1, Me.toolStripSeparator9, Me.selectAllToolStripMenuItem1}) + Me.editToolStripMenuItem1.Name = "editToolStripMenuItem1" + Me.editToolStripMenuItem1.Size = New System.Drawing.Size(39, 20) + Me.editToolStripMenuItem1.Text = "&Edit" + ' + 'undoToolStripMenuItem + ' + Me.undoToolStripMenuItem.Name = "undoToolStripMenuItem" + Me.undoToolStripMenuItem.ShortcutKeys = CType((System.Windows.Forms.Keys.Control Or System.Windows.Forms.Keys.Z), System.Windows.Forms.Keys) + Me.undoToolStripMenuItem.Size = New System.Drawing.Size(144, 22) + Me.undoToolStripMenuItem.Text = "&Undo" + ' + 'toolStripSeparator8 + ' + Me.toolStripSeparator8.Name = "toolStripSeparator8" + Me.toolStripSeparator8.Size = New System.Drawing.Size(141, 6) + ' + 'cutToolStripMenuItem1 + ' + Me.cutToolStripMenuItem1.Image = CType(resources.GetObject("cutToolStripMenuItem1.Image"), System.Drawing.Image) + Me.cutToolStripMenuItem1.ImageTransparentColor = System.Drawing.Color.Magenta + Me.cutToolStripMenuItem1.Name = "cutToolStripMenuItem1" + Me.cutToolStripMenuItem1.Size = New System.Drawing.Size(144, 22) + Me.cutToolStripMenuItem1.Text = "Cu&t" + ' + 'copyToolStripMenuItem1 + ' + Me.copyToolStripMenuItem1.Image = CType(resources.GetObject("copyToolStripMenuItem1.Image"), System.Drawing.Image) + Me.copyToolStripMenuItem1.ImageTransparentColor = System.Drawing.Color.Magenta + Me.copyToolStripMenuItem1.Name = "copyToolStripMenuItem1" + Me.copyToolStripMenuItem1.Size = New System.Drawing.Size(144, 22) + Me.copyToolStripMenuItem1.Text = "&Copy" + ' + 'pasteToolStripMenuItem1 + ' + Me.pasteToolStripMenuItem1.Image = CType(resources.GetObject("pasteToolStripMenuItem1.Image"), System.Drawing.Image) + Me.pasteToolStripMenuItem1.ImageTransparentColor = System.Drawing.Color.Magenta + Me.pasteToolStripMenuItem1.Name = "pasteToolStripMenuItem1" + Me.pasteToolStripMenuItem1.Size = New System.Drawing.Size(144, 22) + Me.pasteToolStripMenuItem1.Text = "&Paste" + ' + 'toolStripSeparator9 + ' + Me.toolStripSeparator9.Name = "toolStripSeparator9" + Me.toolStripSeparator9.Size = New System.Drawing.Size(141, 6) + ' + 'selectAllToolStripMenuItem1 + ' + Me.selectAllToolStripMenuItem1.Name = "selectAllToolStripMenuItem1" + Me.selectAllToolStripMenuItem1.Size = New System.Drawing.Size(144, 22) + Me.selectAllToolStripMenuItem1.Text = "Select &All" + ' + 'appRestartRecoveryToolStripMenuItem + ' + Me.appRestartRecoveryToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.crashToolStripMenuItem}) + Me.appRestartRecoveryToolStripMenuItem.Name = "appRestartRecoveryToolStripMenuItem" + Me.appRestartRecoveryToolStripMenuItem.Size = New System.Drawing.Size(131, 20) + Me.appRestartRecoveryToolStripMenuItem.Text = "&App Restart Recovery" + ' + 'crashToolStripMenuItem + ' + Me.crashToolStripMenuItem.Name = "crashToolStripMenuItem" + Me.crashToolStripMenuItem.Size = New System.Drawing.Size(107, 22) + Me.crashToolStripMenuItem.Text = "&Crash!" + ' + 'helpToolStripMenuItem + ' + Me.helpToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.toolStripSeparator5, Me.aboutToolStripMenuItem}) + Me.helpToolStripMenuItem.Name = "helpToolStripMenuItem" + Me.helpToolStripMenuItem.Size = New System.Drawing.Size(44, 20) + Me.helpToolStripMenuItem.Text = "&Help" + ' + 'toolStripSeparator5 + ' + Me.toolStripSeparator5.Name = "toolStripSeparator5" + Me.toolStripSeparator5.Size = New System.Drawing.Size(113, 6) + ' + 'aboutToolStripMenuItem + ' + Me.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem" + Me.aboutToolStripMenuItem.Size = New System.Drawing.Size(116, 22) + Me.aboutToolStripMenuItem.Text = "&About..." + ' + 'statusStrip1 + ' + Me.statusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.timerLabel, Me.statusLabel}) + Me.statusStrip1.Location = New System.Drawing.Point(0, 285) + Me.statusStrip1.Name = "statusStrip1" + Me.statusStrip1.Size = New System.Drawing.Size(675, 24) + Me.statusStrip1.TabIndex = 2 + Me.statusStrip1.Text = "statusStrip1" + ' + 'timerLabel + ' + Me.timerLabel.BorderSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Right + Me.timerLabel.Name = "timerLabel" + Me.timerLabel.Size = New System.Drawing.Size(42, 19) + Me.timerLabel.Text = "Timer" + ' + 'statusLabel + ' + Me.statusLabel.Name = "statusLabel" + Me.statusLabel.Size = New System.Drawing.Size(39, 19) + Me.statusLabel.Text = "Status" + ' + 'timer1 + ' + Me.timer1.Enabled = True + Me.timer1.Interval = 1000 + ' + 'Form1 + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(675, 309) + Me.Controls.Add(Me.textBox1) + Me.Controls.Add(Me.menuStrip1) + Me.Controls.Add(Me.statusStrip1) + Me.MainMenuStrip = Me.menuStrip1 + Me.Name = "Form1" + Me.Text = "Form1" + Me.menuStrip1.ResumeLayout(False) + Me.menuStrip1.PerformLayout() + Me.statusStrip1.ResumeLayout(False) + Me.statusStrip1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + #End Region + + Private WithEvents textBox1 As System.Windows.Forms.TextBox + Private menuStrip1 As System.Windows.Forms.MenuStrip + Private fileToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents newToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents openToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private toolStripSeparator As System.Windows.Forms.ToolStripSeparator + Private WithEvents saveToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private toolStripSeparator2 As System.Windows.Forms.ToolStripSeparator + Private WithEvents exitToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private helpToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private toolStripSeparator5 As System.Windows.Forms.ToolStripSeparator + Private WithEvents aboutToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private statusStrip1 As System.Windows.Forms.StatusStrip + Private statusLabel As System.Windows.Forms.ToolStripStatusLabel + Private appRestartRecoveryToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents crashToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private editToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem + Private WithEvents undoToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private toolStripSeparator8 As System.Windows.Forms.ToolStripSeparator + Private WithEvents cutToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem + Private WithEvents copyToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem + Private WithEvents pasteToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem + Private toolStripSeparator9 As System.Windows.Forms.ToolStripSeparator + Private WithEvents selectAllToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem + Private timerLabel As System.Windows.Forms.ToolStripStatusLabel + Private WithEvents timer1 As System.Windows.Forms.Timer + + End Class +End Namespace + diff --git a/source/Samples/AppRestartRecoveryDemo/VB/Form1.resx b/source/Samples/AppRestartRecoveryDemo/VB/Form1.resx new file mode 100644 index 00000000..43befd78 --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/VB/Form1.resx @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEPSURBVDhPrdPZasJAFAZgX8q+Q32N9o2kXkjphQsigoJC + ixa1VAWXiohG7IakbmjcNcYl5i8TCQSdGXPhgcPczHwz5xzGZrtWRN+bOM1wqo5gvAJfrIBy4w/cu8hh + VjyG3nDjuOcjkbTABB58cSRy9SMiiPSXhF6rTMDpedEPG0ktJfD8wQT26gEEMSAq4I3mqYCmaZCVHQZj + WQfst3f0Ep7CGSqw3amYzBWI/TkfcAdTZ4B60LCQt+hJK3yJEz7g8ifOAGWzhzRdo9WdofYt8QFSnzlI + 42bLDdqDBZqtMUpC3zpgbtxPe4rq5xDZSsc6YG6c8DtCodZDsihaA4x5s1bmGI0Zkw2X8lofWHf+AdjM + 9sNc+xBlAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJQSURBVDhPlZNdSNNRGMb/F110ZZEVhVBgeeHNICiiuggp + olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdPKMgr7kApFItTUkWZqVhSVYmao5Nev/xyoQ4k88Nyc + 8z6/93nP4QjCfy6lwc4ltZVso4P/tMyXRcmMHqZ0EeY6jZQVInzuf0e1Tb9Ina3P/tkpLD6XkNg8BJe5 + u93C+HDVrP4M2ZkcMOOw5tLZ9nxJyJE4HSExBoKkBQhVpTrGhso9zNPfiph0JlB+U01ZcRbmwnRMeWlc + 08opUCV6QissGsZ+WOY6z4hmuuXglC6pRYBbJSp+fzXNxnaZ66o1s3rkyKHWruJuWRYOcwZ2kxKr8TI3 + DCkU6+QYNUnuNGWmLEY+5uOK3degoKZcx3SfEvozPfVB3OtNhi4ZvI2nrTIc23U9gtmYwa8eNXzScq8i + l6bHWnfRwhHeREJzGFONgYw/CeB9qQSZNNR9FyUGBT87lfQ3plJj1zLTq4COGDegLVo0HmeqKZjx+gOM + PNzDYPU2lLF+4jhyN6BIl8pgexK3bRpaXopJuhJEwGloiWDmVSgTLw4xWreXoZrtfK/wp/nKak4E+s6/ + hDFHTkd9GndsOdCTBq1i3NdHmWgIYvRpAMO1OxlwSPhi2YpT641CuoWzsSfnAfnZiVRZ1Tjvx9GsF+bU + pF1BvWolD9JXUZmyDnOiD1cvbCZiYXfXCPrMi+gVZ8hOiiL53DHORwdzKnw/hw/uYt9uCTskfvj7+rBp + 41rWr/Fig7fX8j/Tsn/fcgx/ARfG3ml6M3rzAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIsSURBVDhPrZPdS5NxFMf3L3TfTdBFtzU1hmuxGjzlHMqq + YVgRvT2RL+XSZZqoWJlGLV8gW+HSScvpJJxU+AamSI2hTCVLM1e0xKGm2EQw+PY7v+j5tTIvoh+cy8/n + POec76NS/Y/37GkUVL72ZbR5l/DYvYDGhgjuO2ZQW/MJ9tsh3CifQmnJBAoLXiMvdxQXzgeh9Cawtweo + qV7FRm9ldQ3GtF4cTnvCSxF4Wxe5oLLiy195giMLK9htfg61WoblkEcI3I/muaC05PO6gp/w+/Ai4kw+ + FFyexgFzkxA462e54JLt3R+CX+GRyQi2SV5Yc8aRmuIUgrq7YS7IzhqNEfwODwbD2Kx3Q5YDMJkcQlBd + 9ZEL5DMBRbAe3OP/gE2JDThy9AWSkmqF4GblNLq7wE4JHD/5CpZjA3zbtDCamT6bOv+A+3DQ0glJsgvB + 1bJJdPjAMgA0ub6xu39F+fU5vlRaGM2cmRFU4OTUdhgMFUJwpXAcnmbgoXONBScKY3pOTJlP2JB+roh3 + Tk5h8H4P9PoyIbDljTEYqLoT5Z1JwEKCOK2EobezGJuag5x7DXuNbRzW7nFBpysSAoql4x6UzyYBwWfz + b+FNaB6hmSVcLLYjXu9icCPidz2ANjFfCDIzhtncy3zmrQYPtuyQ0NLRD1/XILr7/Bh4OYR9JgvUunok + MHi7pg4ajVUIKNOnT/XzeFLCKCR0ZzoVbZsWRjNTVyqCdyZkxwr+9a/+Dk60OMVjMFpXAAAAAElFTkSu + QmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGHSURBVDhPrdNNS0JREAbgfk3QpkVRCUUSFrUQFJSrEIRZ + pKWULSIlsgJTMD+SpF0tLIS6hhZIKBalkJmkUdqiL1OxTMFoXfCWV5BcdLlRsznDYeY5A8Opq/vvuEje + wen247v7kHnGJumtufvx3ZdiCabVjZpici+A8FmcGVCW7Wsk/EcRqiFfKEGmmkX68ZE5sOM9hvlrimwu + j2A4DpFEiaenHHPgIHSOJbsD2x4f1AsW9EtGmTeXx05nnzE1b8HwxByIgTHoDKbfAWVEoTaBkEyCkBsQ + PE0yBzKFDxhdbxDr01h03IKniUGoTcC6lUIkUaSHUvl3DNpeIdbdgyN1gD+6BqEmBN5MEj0KH5Y3Kpv5 + MYyuEgh9Dl0jHrSLbFAtusGbjlabWISNHhDrs9WCNoGZygXaa+okfVdo5CjpAUKXogq8oRRa+HoqH7de + olO6jYaOIdQ3NNEDqpUbsKUkmvlGsLmV3QciGbD6FGjplsK1H6MHDqM5cGXraO2Vw7l7wnx1f/nRn6qq + 3+OKoLtvAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHiSURBVDhPpZPRT5JRGMb9U0rHnHXtH9BaWa0222pe1EVb + 2briQq+6atlsyzVstIkhzcLSAfahtJbS0mESaQaJlIGTzBkslPEpiSDor+87LAnawM13e+7O+3uf55z3 + VFUdtBwT31AljQeELCNe+hwfCC//Yl9stbm0zMMerrc9J7i4XBliHwsU9ed2dunqf4PTHeBSS2dliGXU + JwDOEEifwR+WeWh+jTQpY5tIYHUleDKaQD8UFwquZIpd9Tk8ew4y2znkjTSRWFIASqt9YJX6Zje+hfUC + xGRziXO97m10IzK3pZ+0Pg3T/3btP0CLMYZjSuZo0zCf5uN5iEHJq+beTGVZTaRYiqzzNbyG6VVUADqk + nJBfmXpFF+VI00vqLgxS2/gsD1DzbqWze5O1phA3DF94YF0qciD/zrKwsoV7bgOjNIPm3OMCQE6mmf8e + wxeM4PH/YPzjIm29+ee9NZBEa4hy+X6I83dmhYzSNJoz3QVA/emrlKpVPysAWSVeLJFlLrzJmFfG/i7O + o0EPNQ368jtyrX1KAP6d/NdBt+091Sd05QEXb7pIZXYwDXnpsc9gfDEtJqvNBsskh4/fKw9o0DqV27YK + 1Taa0ZztoeZUF9UnO5XmDg4du1t5zff1mQ566A8dAOcMIXbZrQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJQSURBVDhPtZNZSJRhFIZ/6MJuihbqqquC6CaKCKqLjMIs + TDOMxIysiRiVEpXJ0iE1NUUnt0nTxshlUHOrRFEpEiFxaNdwjBaJ1Mhpsuafcc/i6f8/GWxo86YDL+fm + vM9Z+D5J+h/R2ZxB+81UGssSmBe/oTIPt8pyjuCwVTFmu8ZgXzZntb7kpeu4YtBjTI/7FagaJ+V6pp11 + TDqqMRfrGB+pICclihdd8Zw/7U+8ZjO2zmOMtK4mOmy/J0QFqOZpZw1FGUfptmQjvy9guE/PW8sJmkoC + CQ/1pipxFU/zJCIP7/ME1FXkzALkGxgSw0jWhaCPCuZcZBA6bSAxGn8iQn3Ij14jACF+3p6A6lIDU3It + U3YT40OZ2J9HYa1YLtRbvozu4kU8MnoJsyqfbRs9AWZTBhP2MiYG0hh/eYqxZweRmxeTW95KpqmRC5dr + iTeYiUktITzBSFhsliegtDCV0UEjY31aRh/747q/iY+3VwizO6ZnvuFwTjIw7CA4IoWA4/o5SEluEvKr + NFwPfXF1rMfZtpLBckl0VqP0VqeQqaad3n6bMN/tsrInSDMLKcxK4HPPGZzt65BblmKv96L/uiTG/jrz + nS8upfMHB71vbFh63uEXGoOvYt619wDe23cg5V+Mw/4gQjEv4VPDQoYqF2AtkohWdlbHdk9wVZmgwNxG + U4dVZFVbN6xFupQcKx6I+8rurFUO9nPne5bXwlx/p5ua1idzAHWN3KSTygsLRBO0m4CdWwRZvba6s7vb + 77KY4E9xSLm2WvAvzeuz/a3oB0747y0N60d/AAAAAElFTkSuQmCC + + + + 132, 17 + + + 248, 17 + + \ No newline at end of file diff --git a/source/Samples/AppRestartRecoveryDemo/VB/Form1.vb b/source/Samples/AppRestartRecoveryDemo/VB/Form1.vb new file mode 100644 index 00000000..3c774535 --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/VB/Form1.vb @@ -0,0 +1,315 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Windows.Forms +Imports System.Diagnostics +Imports System +Imports System.Threading +Imports System.Timers +Imports Microsoft.WindowsAPICodePack.Shell +Imports System.IO +Imports Microsoft.WindowsAPICodePack.ApplicationServices +Imports Microsoft.WindowsAPICodePack.Dialogs + +Namespace Microsoft.WindowsAPICodePack.Samples.AppRestartRecoveryDemo + Partial Public Class Form1 + Inherits Form + Private Shared AppTitle As String = "Application Restart/Recovery Demo" + Private Shared CurrentFile As New FileSettings() + Private Shared RecoveryFile As String = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "AppRestartRecoveryDemoData.xml") + Private Shared DataSeparatorString As String = "@@@@@@@@@@" + + ' + Private internalLoad As Boolean = False + Private recovered As Boolean = False + Private startTime As DateTime + + Public Sub New() + Debug.WriteLine("ARR: Demo started") + + InitializeComponent() + + + Form1.CurrentFile.IsDirty = False + + UpdateAppTitle() + + RegisterForRestart() + RegisterForRecovery() + + + statusLabel.Text = "Application successfully registered for restart / recovery. Wait 60s before crashing the application." + + ' SetupTimerNotifyForRestart sets a timer to + ' beep when 60 seconds have elapsed, indicating that + ' WER will restart the program after a crash. + ' WER will not restart applications that crash + ' within 60 seconds of startup. + SetupTimerNotifyForRestart() + + ' If we started with /restart command line argument + ' then we were automatically restarted and should + ' try to resume the previous session. + If System.Environment.GetCommandLineArgs().Length > 1 AndAlso System.Environment.GetCommandLineArgs()(1) = "/restart" Then + recovered = True + RecoverLastSession(System.Environment.GetCommandLineArgs()(1)) + End If + End Sub + + Private Sub SetupTimerNotifyForRestart() + ' Beep when 60 seconds has elapsed. + Dim notify As New System.Timers.Timer(60000) + AddHandler notify.Elapsed, AddressOf NotifyUser + notify.AutoReset = False ' Only beep once. + notify.Enabled = True + End Sub + + Private Sub NotifyUser(ByVal source As Object, ByVal e As ElapsedEventArgs) + statusLabel.Text = "It is ""safe"" to crash now! (click App Restart Recovery->Crash!)" + End Sub + + Private Sub Crash() + Environment.FailFast("ARR Demo intentional crash.") + End Sub + + Private Sub RegisterForRestart() + ' Register for automatic restart if the + ' application was terminated for any reason + ' other than a system reboot or a system update. + ApplicationRestartRecoveryManager.RegisterForApplicationRestart(New RestartSettings("/restart", RestartRestrictions.NotOnReboot Or RestartRestrictions.NotOnPatch)) + + Debug.WriteLine("ARR: Registered for restart") + End Sub + + Private Sub RegisterForRecovery() + ' Don't pass any state. We'll use our static variable "CurrentFile" to determine + ' the current state of the application. + ' Since this registration is being done on application startup, we don't have a state currently. + ' In some cases it might make sense to pass this initial state. + ' Another approach: When doing "auto-save", register for recovery everytime, and pass + ' the current state at that time. + Dim data As New RecoveryData(New RecoveryCallback(AddressOf RecoveryProcedure), Nothing) + Dim settings As New RecoverySettings(data, 0) + + ApplicationRestartRecoveryManager.RegisterForApplicationRecovery(settings) + + Debug.WriteLine("ARR: Registered for recovery") + End Sub + + ' This method is invoked by WER. + Private Function RecoveryProcedure(ByVal state As Object) As Integer + Debug.WriteLine("ARR: Recovery procedure called!!!") + + PingSystem() + + ' Do recovery work here. + ' Signal to WER that the recovery + ' is still in progress. + + ' Write the contents of the file, as well as some other data that we need + File.WriteAllText(RecoveryFile, String.Format("{1}{0}{2}{0}{3}", DataSeparatorString, CurrentFile.Filename, CurrentFile.IsDirty, CurrentFile.Contents)) + + Debug.WriteLine("File path: " & RecoveryFile) + Debug.WriteLine("File exists: " & File.Exists(RecoveryFile)) + Debug.WriteLine("Application shutting down...") + + ApplicationRestartRecoveryManager.ApplicationRecoveryFinished(True) + Return 0 + End Function + + ' This method is called periodically to ensure + ' that WER knows that recovery is still in progress. + Private Sub PingSystem() + ' Find out if the user canceled recovery. + Dim isCanceled As Boolean = ApplicationRestartRecoveryManager.ApplicationRecoveryInProgress() + + If isCanceled Then + Console.WriteLine("Recovery has been canceled by user.") + Environment.Exit(2) + End If + End Sub + + ' This method gets called by main when the + ' commandline arguments indicate that this + ' application was automatically restarted + ' by WER. + Private Sub RecoverLastSession(ByVal command As String) + If Not File.Exists(RecoveryFile) Then + MessageBox.Show(Me, String.Format("Recovery file {0} does not exist", RecoveryFile)) + internalLoad = True + textBox1.Text = "Could not recover the data. Recovery data file does not exist" + internalLoad = False + UpdateAppTitle() + Return + End If + + ' Perform application state restoration + ' actions here. + Dim contents As String = File.ReadAllText(RecoveryFile) + + CurrentFile.Filename = contents.Remove(contents.IndexOf(Form1.DataSeparatorString)) + + contents = contents.Remove(0, contents.IndexOf(Form1.DataSeparatorString) + Form1.DataSeparatorString.Length) + + CurrentFile.IsDirty = If(contents.Remove(contents.IndexOf(Form1.DataSeparatorString)) = "True", True, False) + + contents = contents.Remove(0, contents.IndexOf(Form1.DataSeparatorString) + Form1.DataSeparatorString.Length) + + CurrentFile.Contents = contents + + ' Load our textbox + textBox1.Text = CurrentFile.Contents + + ' Update the title + UpdateAppTitle() + + ' Reset our variable so next title updates we don't show the "recovered" text + recovered = False + End Sub + + Private Sub exitToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles exitToolStripMenuItem.Click + If PromptForSave() Then + Application.Exit() + End If + End Sub + + Private Sub openToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles openToolStripMenuItem.Click + If PromptForSave() Then + Dim cfd As New CommonOpenFileDialog() + cfd.Filters.Add(New CommonFileDialogFilter("Text files", ".txt")) + + Dim result As CommonFileDialogResult = cfd.ShowDialog() + + If result = CommonFileDialogResult.Ok Then + internalLoad = True + Form1.CurrentFile.Load(cfd.FileName) + textBox1.Text = CurrentFile.Contents + internalLoad = False + + UpdateAppTitle() + End If + End If + End Sub + + Private Function PromptForSave() As Boolean + If Not CurrentFile.IsDirty Then + Return True + End If + + ' ask the user to save. + Dim dr As DialogResult = MessageBox.Show(Me, "Current document has changed. Would you like to save?", "Save current document", MessageBoxButtons.YesNoCancel) + + If dr = System.Windows.Forms.DialogResult.Cancel Then + Return False + End If + + If dr = System.Windows.Forms.DialogResult.Yes Then + ' Does the current file have a name? + If String.IsNullOrEmpty(Form1.CurrentFile.Filename) Then + Dim saveAsCFD As New CommonSaveFileDialog() + saveAsCFD.Filters.Add(New CommonFileDialogFilter("Text files", ".txt")) + saveAsCFD.AlwaysAppendDefaultExtension = True + + If saveAsCFD.ShowDialog() = CommonFileDialogResult.Ok Then + Form1.CurrentFile.Save(saveAsCFD.FileName) + UpdateAppTitle() + Else + Return False + End If + Else + ' just save it + Form1.CurrentFile.Save(CurrentFile.Filename) + UpdateAppTitle() + End If + End If + + Return True + End Function + + Private Sub textBox1_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles textBox1.TextChanged + If (Not internalLoad) AndAlso Form1.CurrentFile IsNot Nothing Then + Form1.CurrentFile.IsDirty = True + Form1.CurrentFile.Contents = textBox1.Text + UpdateAppTitle() + End If + End Sub + + Private Sub saveToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles saveToolStripMenuItem.Click + ' Does the current file have a name? + If String.IsNullOrEmpty(Form1.CurrentFile.Filename) Then + Dim saveAsCFD As New CommonSaveFileDialog() + saveAsCFD.Filters.Add(New CommonFileDialogFilter("Text files", ".txt")) + + If saveAsCFD.ShowDialog() = CommonFileDialogResult.Ok Then + Form1.CurrentFile.Save(saveAsCFD.FileName) + UpdateAppTitle() + Else + Return + End If + Else + ' just save it + Form1.CurrentFile.Save(Form1.CurrentFile.Filename) + UpdateAppTitle() + End If + End Sub + + Private Sub UpdateAppTitle() + Dim dirtyState As String = If(Form1.CurrentFile.IsDirty, "*", "") + Dim filename As String = If(String.IsNullOrEmpty(Form1.CurrentFile.Filename), _ + "Untitled", Path.GetFileName(Form1.CurrentFile.Filename)) + + Me.Text = String.Format("{0}{1} - {2}", filename, dirtyState, AppTitle) + + If recovered Then + Me.Text &= " (RECOVERED FROM CRASH)" + End If + End Sub + + Private Sub crashToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles crashToolStripMenuItem.Click + Crash() + End Sub + + Private Sub undoToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles undoToolStripMenuItem.Click + textBox1.Undo() + End Sub + + Private Sub cutToolStripMenuItem1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cutToolStripMenuItem1.Click + textBox1.Cut() + End Sub + + Private Sub copyToolStripMenuItem1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles copyToolStripMenuItem1.Click + textBox1.Copy() + End Sub + + Private Sub pasteToolStripMenuItem1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles pasteToolStripMenuItem1.Click + textBox1.Paste() + End Sub + + Private Sub selectAllToolStripMenuItem1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles selectAllToolStripMenuItem1.Click + textBox1.SelectAll() + End Sub + + Private Sub aboutToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles aboutToolStripMenuItem.Click + MessageBox.Show(Me, "Application Restart and Recovery demo", "Windows API Code Pack for .NET Framework") + End Sub + + Private Sub timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles timer1.Tick + Dim span As TimeSpan = DateTime.Now.Subtract(startTime) + timerLabel.Text = String.Format("App running for {0}s", CInt(Fix(span.TotalSeconds))) + End Sub + + Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load + startTime = DateTime.Now + End Sub + + Private Sub newToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles newToolStripMenuItem.Click + If PromptForSave() Then + textBox1.Clear() + CurrentFile = New FileSettings() + CurrentFile.IsDirty = False + UpdateAppTitle() + End If + End Sub + End Class +End Namespace diff --git a/source/Samples/AppRestartRecoveryDemo/VB/My Project/AssemblyInfo.vb b/source/Samples/AppRestartRecoveryDemo/VB/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..618e1c40 --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/VB/My Project/AssemblyInfo.vb @@ -0,0 +1,40 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/AppRestartRecoveryDemo/VB/My Project/Resources.Designer.vb b/source/Samples/AppRestartRecoveryDemo/VB/My Project/Resources.Designer.vb new file mode 100644 index 00000000..e96b8aff --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/VB/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/AppRestartRecoveryDemo/VB/My Project/Resources.resx b/source/Samples/AppRestartRecoveryDemo/VB/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/VB/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/AppRestartRecoveryDemo/VB/My Project/Settings.Designer.vb b/source/Samples/AppRestartRecoveryDemo/VB/My Project/Settings.Designer.vb new file mode 100644 index 00000000..f2ffe239 --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/VB/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class Settings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()),Settings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As Settings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Settings + Get + Return Global.Settings.Default + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/AppRestartRecoveryDemo/VB/My Project/Settings.settings b/source/Samples/AppRestartRecoveryDemo/VB/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/VB/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/AppRestartRecoveryDemo/VB/Program.vb b/source/Samples/AppRestartRecoveryDemo/VB/Program.vb new file mode 100644 index 00000000..5111481a --- /dev/null +++ b/source/Samples/AppRestartRecoveryDemo/VB/Program.vb @@ -0,0 +1,22 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms + +Namespace Microsoft.WindowsAPICodePack.Samples.AppRestartRecoveryDemo + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New Form1()) + End Sub + End Class +End Namespace diff --git a/source/Samples/CollectiveSample/CollectiveSample.sln b/source/Samples/CollectiveSample/CollectiveSample.sln new file mode 100644 index 00000000..31d4d3f3 --- /dev/null +++ b/source/Samples/CollectiveSample/CollectiveSample.sln @@ -0,0 +1,484 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExtendedLinguisticServices", "..\..\WindowsAPICodePack\ExtendedLinguisticServices\ExtendedLinguisticServices.csproj", "{B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sensors", "..\..\WindowsAPICodePack\Sensors\Sensors.csproj", "{31421787-1A3C-427C-A8AD-C7E2561B2956}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CoreTests", "..\..\Tests\Core\CoreTests.csproj", "{605A0E8A-E237-4240-9727-73D927556862}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExtendedLinguisticServicesTests", "..\..\Tests\ExtendedLinguisticServices\ExtendedLinguisticServicesTests.csproj", "{3995A0E5-379E-4682-9986-473AF4E7E818}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SensorsTests", "..\..\Tests\Sensors\SensorsTests.csproj", "{730B7513-6B75-4D76-9CB4-18214FD58263}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShellTests", "..\..\Tests\Shell\ShellTests.csproj", "{69A3898C-DD4B-4DED-B1FE-AB2F9E539E66}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Codepack", "Codepack", "{6AAB4EA3-E304-476E-8E31-71028C706752}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{CD4553DF-D5CF-470A-B296-6D746F29B05B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{F56C4DA5-B2E1-410E-8B50-7D835AA5DDF2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfGlassDemo", "..\AeroGlass\CS\WpfGlassDemo\WpfGlassDemo.csproj", "{CDC3EC63-D7F4-4854-833B-169A1FDA3589}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsFormsGlassDemo", "..\AeroGlass\CS\WindowsFormsGlassDemo\WindowsFormsGlassDemo.csproj", "{6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CS", "CS", "{ACA7AC56-13ED-4A71-9827-05FE1CF639C8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "VB", "VB", "{CA6B148C-136E-4580-8877-75CAE7B40507}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WindowsFormsGlassDemo", "..\AeroGlass\VB\WindowsFormsGlassDemo\WindowsFormsGlassDemo.vbproj", "{EDC1FA53-E3D6-4C0D-88B1-4684847D4E0E}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WpfGlassDemo", "..\AeroGlass\VB\WpfGlassDemo\WpfGlassDemo.vbproj", "{749DED8B-DB4E-4CF5-BFAE-5CAB791BC5EC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppRestartRecoveryDemo", "..\AppRestartRecoveryDemo\CS\AppRestartRecoveryDemo.csproj", "{DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AppRestartRecoveryDemo", "..\AppRestartRecoveryDemo\VB\AppRestartRecoveryDemo.vbproj", "{0FEEF2BF-058C-49E9-938C-EA41768A1998}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExplorerBrowserDemo", "..\ExplorerBrowser\CS\WinForms\ExplorerBrowserDemo.csproj", "{2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPFExplorerBrowserDemo", "..\ExplorerBrowser\CS\WPF\WPFExplorerBrowserDemo\WPFExplorerBrowserDemo.csproj", "{85C322BA-C046-4416-87D2-D79AE92A1E65}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ExplorerBrowserDemo", "..\ExplorerBrowser\VB\WinForms\ExplorerBrowserDemo.vbproj", "{63451B99-617D-40BF-88AE-F5E8643F9FBA}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WPFExplorerBrowserDemo", "..\ExplorerBrowser\VB\WPF\WPFExplorerBrowserDemo\WPFExplorerBrowserDemo.vbproj", "{222AD218-65BD-4F71-AF7F-8EA742DF645F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ELSSamples", "..\ExtendedLinguisticServices\ELSDemo\CS\ELSSamples.csproj", "{238AF76E-0D42-4F01-A852-12E65D84A885}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ELSSamples", "..\ExtendedLinguisticServices\ELSDemo\VB\ELSSamples.vbproj", "{A5B41CCB-A5AE-46CD-A49B-847677402DB2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Transliterator", "..\ExtendedLinguisticServices\Transliterator\CS\Transliterator.csproj", "{24435C75-34D7-48A7-A5C5-248782EABB93}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Transliterator", "..\ExtendedLinguisticServices\Transliterator\VB\Transliterator.vbproj", "{5D831085-1147-452A-9863-BDFE6DB85C89}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetworkDemo", "..\NetworkDemo\CS\NetworkDemo.csproj", "{D700D10F-A974-4072-BE67-E2F712F9E055}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NetworkDemo", "..\NetworkDemo\VB\NetworkDemo.vbproj", "{4C2C740C-F3CC-40F9-943B-34D61B4BD346}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PowerMgmtDemo", "..\PowerMgmtDemo\CS\PowerMgmtDemo\PowerMgmtDemo.csproj", "{1767FA65-426B-4555-9049-01DB8DCEA5A8}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "PowerMgmtDemo", "..\PowerMgmtDemo\VB\PowerMgmtDemo\PowerMgmtDemo.vbproj", "{F2133A77-7E62-41AB-B98D-20D37079540E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AccelerationMeasurement", "..\Sensors\CS\AccelerationMeasurement\AccelerationMeasurement.csproj", "{3F23C7FA-1E3C-4FE1-A727-D204F54D3883}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AmbientLightMeasurement", "..\Sensors\CS\AmbientLightMeasurement\AmbientLightMeasurement.csproj", "{E17BF7BD-6E9A-49C6-AFA7-BF36458B5A17}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AccelerationMeasurement", "..\Sensors\VB\AccelerationMeasurement\AccelerationMeasurement.vbproj", "{A3F3C344-70A8-4979-8855-B8F8C652D6CC}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AmbientLightMeasurement", "..\Sensors\VB\AmbientLightMeasurement\AmbientLightMeasurement.vbproj", "{FF67662F-F407-44E5-831F-0A6B2F5AC79B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TaskDialogDemo", "..\TaskDialogDemo\CS\TaskDialogDemo\TaskDialogDemo.csproj", "{C6EC6389-2624-48AF-ACEC-4583435AF148}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TaskDialogDemo", "..\TaskDialogDemo\VB\TaskDialogDemo\TaskDialogDemo.vbproj", "{74F14777-DB36-4D3A-AC8B-CA2FDBC15DFC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommonFileDialogsDemo", "..\Shell\CommonFileDialogsDemo\CS\CommonFileDialogsDemo\CommonFileDialogsDemo.csproj", "{999D4DCE-5E0E-4DA9-8C42-8889FEC751F3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustomFileDialogsDemo", "..\Shell\CustomCommonFileDialogsDemo\CS\CustomFileDialogsDemo.csproj", "{A204460D-EF59-4131-AA15-B5B7206333A0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShellObjectDragAndDropDemo", "..\Shell\DragAndDrop\CS\WPF\ShellObjectDragAndDrop\ShellObjectDragAndDropDemo.csproj", "{59BE0CCF-98FE-415A-89EE-F646082B5E07}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KnownFoldersBrowser", "..\Shell\KnownFoldersBrowser\CS\KnownFoldersBrowser\KnownFoldersBrowser.csproj", "{FC25A058-BA33-42A2-B172-439D56CFE835}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PicturePropertiesEditor", "..\Shell\PicturePropertiesEditor\CS\PicturePropertiesEditor.csproj", "{B83D884E-57E6-476A-BC83-78E2892C44F8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PropertyEdit", "..\Shell\PropertyEditDemo\CS\PropertyEdit\PropertyEdit.csproj", "{4948B64F-7008-44D2-872E-21A642759B62}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchApp", "..\Shell\SearchApplication\CS\SearchApp\SearchApp.csproj", "{B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShellHierarchyTreeDemo", "..\Shell\ShellHierarchyTreeDemo\CS\ShellHierarchyTreeDemo.csproj", "{E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShellThumbnailBrowserDemo", "..\Shell\ShellThumbnailBrowserDemo\CS\ThumbnailBrowserDemo\ShellThumbnailBrowserDemo.csproj", "{86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StarBackupUsingLibraries", "..\Shell\StarBackupUsingLibraries\CS\StarBackupUsingLibraries.csproj", "{709ECE68-5107-4C42-8A92-AD9A79EAC07E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StockIconsDemo", "..\Shell\StockIconsDemo\CS\StockIconsDemo\StockIconsDemo.csproj", "{F5F48434-A2BD-4065-9EAC-C9B028C5C05F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TabbedThumbnailDemoWinforms", "..\Shell\TabbedThumbnailDemo\CS\Winforms\TabbedThumbnailDemoWinforms.csproj", "{69865974-3934-4060-B9F5-29B5FAE26DF7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RegistrationHelper", "..\Shell\TaskbarDemo\CS\RegistrationHelper\RegistrationHelper.csproj", "{03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TaskbarDemo", "..\Shell\TaskbarDemo\CS\TaskbarDemo\TaskbarDemo.csproj", "{12F17213-0DEC-41E6-91EB-48C74A0B6AB0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThumbnailToolbarDemoWinforms", "..\Shell\ThumbnailToolbarDemo\CS\Winforms\ThumbnailToolbarDemoWinforms.csproj", "{FEE9384C-251C-4D42-A190-F89775D339F1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThumbnailToolbarDemoWPF", "..\Shell\ThumbnailToolbarDemo\CS\WPF\ThumbnailToolbarDemoWPF.csproj", "{52A6AB4A-F177-4133-93B0-24BE2F350055}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CommonFileDialogsDemo", "..\Shell\CommonFileDialogsDemo\VB\CommonFileDialogsDemo\CommonFileDialogsDemo.vbproj", "{5D3C35B1-43E3-4B09-8798-3AD7594F2B84}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomFileDialogsDemo", "..\Shell\CustomCommonFileDialogsDemo\VB\CustomFileDialogsDemo.vbproj", "{C93D705C-E4C2-485F-9359-5C47A013A06A}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ShellObjectDragAndDropDemo", "..\Shell\DragAndDrop\VB\WPF\ShellObjectDragAndDrop\ShellObjectDragAndDropDemo.vbproj", "{D3512DD4-3251-47C9-90AA-54407029FACC}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "KnownFoldersBrowser", "..\Shell\KnownFoldersBrowser\VB\KnownFoldersBrowser\KnownFoldersBrowser.vbproj", "{602DAD34-1C30-4CA8-B20A-7E03F04F6C65}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "PicturePropertiesEditor", "..\Shell\PicturePropertiesEditor\VB\PicturePropertiesEditor.vbproj", "{9A9226D8-65A8-4D3C-A602-74F177D054CE}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "PropertyEdit", "..\Shell\PropertyEditDemo\VB\PropertyEdit\PropertyEdit.vbproj", "{A3064FB2-57BA-486E-BCE1-E84C798D31F5}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SearchApp", "..\Shell\SearchApplication\VB\SearchApp\SearchApp.vbproj", "{D7FA0CF2-AD5E-43AC-86F8-B8D3F560A475}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ShellHierarchyTreeDemo", "..\Shell\ShellHierarchyTreeDemo\VB\ShellHierarchyTreeDemo.vbproj", "{B4D3EF7E-FDA1-4AF5-A274-8317BB83F718}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ShellThumbnailBrowserDemo", "..\Shell\ShellThumbnailBrowserDemo\VB\ThumbnailBrowserDemo\ShellThumbnailBrowserDemo.vbproj", "{58604E0E-E8B1-4D22-9751-5B4EB574BA6A}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "StarBackupUsingLibraries", "..\Shell\StarBackupUsingLibraries\VB\StarBackupUsingLibraries.vbproj", "{BE1CD7DB-FFE0-4317-B975-76CA7D726715}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "StockIconsDemo", "..\Shell\StockIconsDemo\VB\StockIconsDemo\StockIconsDemo.vbproj", "{676A1177-EAE2-400A-931A-E1BA31E81908}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TabbedThumbnailDemoWinforms", "..\Shell\TabbedThumbnailDemo\VB\Winforms\TabbedThumbnailDemoWinforms.vbproj", "{E17540B9-E5FC-489F-8AE6-38657ED9998D}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RegistrationHelper", "..\Shell\TaskbarDemo\VB\RegistrationHelper\RegistrationHelper.vbproj", "{A1AC4592-6309-492C-B0F1-C9241886718F}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TaskbarDemo", "..\Shell\TaskbarDemo\VB\TaskbarDemo\TaskbarDemo.vbproj", "{981637D1-48D8-4763-B0FC-B3A2E3E199A0}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ThumbnailToolbarDemoWinforms", "..\Shell\ThumbnailToolbarDemo\VB\Winforms\ThumbnailToolbarDemoWinforms.vbproj", "{8618F7BE-4377-4537-AA9E-53C11352FAB3}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ThumbnailToolbarDemoWPF", "..\Shell\ThumbnailToolbarDemo\VB\WPF\ThumbnailToolbarDemoWPF.vbproj", "{43619AA5-B3A2-47B9-A3B1-8B80BE502FD9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShellObjectWatcherSampleWPF", "..\ShellObjectWatcherSampleWPF\ShellObjectWatcherSampleWPF.csproj", "{6B0D8019-50D6-446F-998D-B24384FB3025}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Release|Any CPU.Build.0 = Release|Any CPU + {31421787-1A3C-427C-A8AD-C7E2561B2956}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {31421787-1A3C-427C-A8AD-C7E2561B2956}.Debug|Any CPU.Build.0 = Debug|Any CPU + {31421787-1A3C-427C-A8AD-C7E2561B2956}.Release|Any CPU.ActiveCfg = Release|Any CPU + {31421787-1A3C-427C-A8AD-C7E2561B2956}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {605A0E8A-E237-4240-9727-73D927556862}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {605A0E8A-E237-4240-9727-73D927556862}.Debug|Any CPU.Build.0 = Debug|Any CPU + {605A0E8A-E237-4240-9727-73D927556862}.Release|Any CPU.ActiveCfg = Release|Any CPU + {605A0E8A-E237-4240-9727-73D927556862}.Release|Any CPU.Build.0 = Release|Any CPU + {3995A0E5-379E-4682-9986-473AF4E7E818}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3995A0E5-379E-4682-9986-473AF4E7E818}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3995A0E5-379E-4682-9986-473AF4E7E818}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3995A0E5-379E-4682-9986-473AF4E7E818}.Release|Any CPU.Build.0 = Release|Any CPU + {730B7513-6B75-4D76-9CB4-18214FD58263}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {730B7513-6B75-4D76-9CB4-18214FD58263}.Debug|Any CPU.Build.0 = Debug|Any CPU + {730B7513-6B75-4D76-9CB4-18214FD58263}.Release|Any CPU.ActiveCfg = Release|Any CPU + {730B7513-6B75-4D76-9CB4-18214FD58263}.Release|Any CPU.Build.0 = Release|Any CPU + {69A3898C-DD4B-4DED-B1FE-AB2F9E539E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {69A3898C-DD4B-4DED-B1FE-AB2F9E539E66}.Debug|Any CPU.Build.0 = Debug|Any CPU + {69A3898C-DD4B-4DED-B1FE-AB2F9E539E66}.Release|Any CPU.ActiveCfg = Release|Any CPU + {69A3898C-DD4B-4DED-B1FE-AB2F9E539E66}.Release|Any CPU.Build.0 = Release|Any CPU + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.Release|Any CPU.Build.0 = Release|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.Release|Any CPU.Build.0 = Release|Any CPU + {EDC1FA53-E3D6-4C0D-88B1-4684847D4E0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EDC1FA53-E3D6-4C0D-88B1-4684847D4E0E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EDC1FA53-E3D6-4C0D-88B1-4684847D4E0E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EDC1FA53-E3D6-4C0D-88B1-4684847D4E0E}.Release|Any CPU.Build.0 = Release|Any CPU + {749DED8B-DB4E-4CF5-BFAE-5CAB791BC5EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {749DED8B-DB4E-4CF5-BFAE-5CAB791BC5EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {749DED8B-DB4E-4CF5-BFAE-5CAB791BC5EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {749DED8B-DB4E-4CF5-BFAE-5CAB791BC5EC}.Release|Any CPU.Build.0 = Release|Any CPU + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.Release|Any CPU.Build.0 = Release|Any CPU + {0FEEF2BF-058C-49E9-938C-EA41768A1998}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0FEEF2BF-058C-49E9-938C-EA41768A1998}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0FEEF2BF-058C-49E9-938C-EA41768A1998}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0FEEF2BF-058C-49E9-938C-EA41768A1998}.Release|Any CPU.Build.0 = Release|Any CPU + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.Release|Any CPU.Build.0 = Release|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.Debug|Any CPU.Build.0 = Debug|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.Release|Any CPU.ActiveCfg = Release|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.Release|Any CPU.Build.0 = Release|Any CPU + {63451B99-617D-40BF-88AE-F5E8643F9FBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {63451B99-617D-40BF-88AE-F5E8643F9FBA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63451B99-617D-40BF-88AE-F5E8643F9FBA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {63451B99-617D-40BF-88AE-F5E8643F9FBA}.Release|Any CPU.Build.0 = Release|Any CPU + {222AD218-65BD-4F71-AF7F-8EA742DF645F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {222AD218-65BD-4F71-AF7F-8EA742DF645F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {222AD218-65BD-4F71-AF7F-8EA742DF645F}.Release|Any CPU.ActiveCfg = Debug|Any CPU + {222AD218-65BD-4F71-AF7F-8EA742DF645F}.Release|Any CPU.Build.0 = Debug|Any CPU + {238AF76E-0D42-4F01-A852-12E65D84A885}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {238AF76E-0D42-4F01-A852-12E65D84A885}.Debug|Any CPU.Build.0 = Debug|Any CPU + {238AF76E-0D42-4F01-A852-12E65D84A885}.Release|Any CPU.ActiveCfg = Release|Any CPU + {238AF76E-0D42-4F01-A852-12E65D84A885}.Release|Any CPU.Build.0 = Release|Any CPU + {A5B41CCB-A5AE-46CD-A49B-847677402DB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A5B41CCB-A5AE-46CD-A49B-847677402DB2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A5B41CCB-A5AE-46CD-A49B-847677402DB2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A5B41CCB-A5AE-46CD-A49B-847677402DB2}.Release|Any CPU.Build.0 = Release|Any CPU + {24435C75-34D7-48A7-A5C5-248782EABB93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {24435C75-34D7-48A7-A5C5-248782EABB93}.Debug|Any CPU.Build.0 = Debug|Any CPU + {24435C75-34D7-48A7-A5C5-248782EABB93}.Release|Any CPU.ActiveCfg = Release|Any CPU + {24435C75-34D7-48A7-A5C5-248782EABB93}.Release|Any CPU.Build.0 = Release|Any CPU + {5D831085-1147-452A-9863-BDFE6DB85C89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5D831085-1147-452A-9863-BDFE6DB85C89}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5D831085-1147-452A-9863-BDFE6DB85C89}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5D831085-1147-452A-9863-BDFE6DB85C89}.Release|Any CPU.Build.0 = Release|Any CPU + {D700D10F-A974-4072-BE67-E2F712F9E055}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D700D10F-A974-4072-BE67-E2F712F9E055}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D700D10F-A974-4072-BE67-E2F712F9E055}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D700D10F-A974-4072-BE67-E2F712F9E055}.Release|Any CPU.Build.0 = Release|Any CPU + {4C2C740C-F3CC-40F9-943B-34D61B4BD346}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4C2C740C-F3CC-40F9-943B-34D61B4BD346}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4C2C740C-F3CC-40F9-943B-34D61B4BD346}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4C2C740C-F3CC-40F9-943B-34D61B4BD346}.Release|Any CPU.Build.0 = Release|Any CPU + {1767FA65-426B-4555-9049-01DB8DCEA5A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1767FA65-426B-4555-9049-01DB8DCEA5A8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1767FA65-426B-4555-9049-01DB8DCEA5A8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1767FA65-426B-4555-9049-01DB8DCEA5A8}.Release|Any CPU.Build.0 = Release|Any CPU + {F2133A77-7E62-41AB-B98D-20D37079540E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F2133A77-7E62-41AB-B98D-20D37079540E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F2133A77-7E62-41AB-B98D-20D37079540E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F2133A77-7E62-41AB-B98D-20D37079540E}.Release|Any CPU.Build.0 = Release|Any CPU + {3F23C7FA-1E3C-4FE1-A727-D204F54D3883}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3F23C7FA-1E3C-4FE1-A727-D204F54D3883}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3F23C7FA-1E3C-4FE1-A727-D204F54D3883}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3F23C7FA-1E3C-4FE1-A727-D204F54D3883}.Release|Any CPU.Build.0 = Release|Any CPU + {E17BF7BD-6E9A-49C6-AFA7-BF36458B5A17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E17BF7BD-6E9A-49C6-AFA7-BF36458B5A17}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E17BF7BD-6E9A-49C6-AFA7-BF36458B5A17}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E17BF7BD-6E9A-49C6-AFA7-BF36458B5A17}.Release|Any CPU.Build.0 = Release|Any CPU + {A3F3C344-70A8-4979-8855-B8F8C652D6CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A3F3C344-70A8-4979-8855-B8F8C652D6CC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A3F3C344-70A8-4979-8855-B8F8C652D6CC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A3F3C344-70A8-4979-8855-B8F8C652D6CC}.Release|Any CPU.Build.0 = Release|Any CPU + {FF67662F-F407-44E5-831F-0A6B2F5AC79B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FF67662F-F407-44E5-831F-0A6B2F5AC79B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FF67662F-F407-44E5-831F-0A6B2F5AC79B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FF67662F-F407-44E5-831F-0A6B2F5AC79B}.Release|Any CPU.Build.0 = Release|Any CPU + {C6EC6389-2624-48AF-ACEC-4583435AF148}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C6EC6389-2624-48AF-ACEC-4583435AF148}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C6EC6389-2624-48AF-ACEC-4583435AF148}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C6EC6389-2624-48AF-ACEC-4583435AF148}.Release|Any CPU.Build.0 = Release|Any CPU + {74F14777-DB36-4D3A-AC8B-CA2FDBC15DFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {74F14777-DB36-4D3A-AC8B-CA2FDBC15DFC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {74F14777-DB36-4D3A-AC8B-CA2FDBC15DFC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {74F14777-DB36-4D3A-AC8B-CA2FDBC15DFC}.Release|Any CPU.Build.0 = Release|Any CPU + {999D4DCE-5E0E-4DA9-8C42-8889FEC751F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {999D4DCE-5E0E-4DA9-8C42-8889FEC751F3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {999D4DCE-5E0E-4DA9-8C42-8889FEC751F3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {999D4DCE-5E0E-4DA9-8C42-8889FEC751F3}.Release|Any CPU.Build.0 = Release|Any CPU + {A204460D-EF59-4131-AA15-B5B7206333A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A204460D-EF59-4131-AA15-B5B7206333A0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A204460D-EF59-4131-AA15-B5B7206333A0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A204460D-EF59-4131-AA15-B5B7206333A0}.Release|Any CPU.Build.0 = Release|Any CPU + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.Release|Any CPU.Build.0 = Release|Any CPU + {FC25A058-BA33-42A2-B172-439D56CFE835}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FC25A058-BA33-42A2-B172-439D56CFE835}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FC25A058-BA33-42A2-B172-439D56CFE835}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FC25A058-BA33-42A2-B172-439D56CFE835}.Release|Any CPU.Build.0 = Release|Any CPU + {B83D884E-57E6-476A-BC83-78E2892C44F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B83D884E-57E6-476A-BC83-78E2892C44F8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B83D884E-57E6-476A-BC83-78E2892C44F8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B83D884E-57E6-476A-BC83-78E2892C44F8}.Release|Any CPU.Build.0 = Release|Any CPU + {4948B64F-7008-44D2-872E-21A642759B62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4948B64F-7008-44D2-872E-21A642759B62}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4948B64F-7008-44D2-872E-21A642759B62}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4948B64F-7008-44D2-872E-21A642759B62}.Release|Any CPU.Build.0 = Release|Any CPU + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.Release|Any CPU.Build.0 = Release|Any CPU + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.Release|Any CPU.Build.0 = Release|Any CPU + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.Release|Any CPU.Build.0 = Release|Any CPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.Release|Any CPU.Build.0 = Release|Any CPU + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.Release|Any CPU.Build.0 = Release|Any CPU + {69865974-3934-4060-B9F5-29B5FAE26DF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {69865974-3934-4060-B9F5-29B5FAE26DF7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {69865974-3934-4060-B9F5-29B5FAE26DF7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {69865974-3934-4060-B9F5-29B5FAE26DF7}.Release|Any CPU.Build.0 = Release|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.Release|Any CPU.Build.0 = Release|Any CPU + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.Release|Any CPU.Build.0 = Release|Any CPU + {FEE9384C-251C-4D42-A190-F89775D339F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FEE9384C-251C-4D42-A190-F89775D339F1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FEE9384C-251C-4D42-A190-F89775D339F1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FEE9384C-251C-4D42-A190-F89775D339F1}.Release|Any CPU.Build.0 = Release|Any CPU + {52A6AB4A-F177-4133-93B0-24BE2F350055}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {52A6AB4A-F177-4133-93B0-24BE2F350055}.Debug|Any CPU.Build.0 = Debug|Any CPU + {52A6AB4A-F177-4133-93B0-24BE2F350055}.Release|Any CPU.ActiveCfg = Release|Any CPU + {52A6AB4A-F177-4133-93B0-24BE2F350055}.Release|Any CPU.Build.0 = Release|Any CPU + {5D3C35B1-43E3-4B09-8798-3AD7594F2B84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5D3C35B1-43E3-4B09-8798-3AD7594F2B84}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5D3C35B1-43E3-4B09-8798-3AD7594F2B84}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5D3C35B1-43E3-4B09-8798-3AD7594F2B84}.Release|Any CPU.Build.0 = Release|Any CPU + {C93D705C-E4C2-485F-9359-5C47A013A06A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C93D705C-E4C2-485F-9359-5C47A013A06A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C93D705C-E4C2-485F-9359-5C47A013A06A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C93D705C-E4C2-485F-9359-5C47A013A06A}.Release|Any CPU.Build.0 = Release|Any CPU + {D3512DD4-3251-47C9-90AA-54407029FACC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D3512DD4-3251-47C9-90AA-54407029FACC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D3512DD4-3251-47C9-90AA-54407029FACC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D3512DD4-3251-47C9-90AA-54407029FACC}.Release|Any CPU.Build.0 = Release|Any CPU + {602DAD34-1C30-4CA8-B20A-7E03F04F6C65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {602DAD34-1C30-4CA8-B20A-7E03F04F6C65}.Debug|Any CPU.Build.0 = Debug|Any CPU + {602DAD34-1C30-4CA8-B20A-7E03F04F6C65}.Release|Any CPU.ActiveCfg = Release|Any CPU + {602DAD34-1C30-4CA8-B20A-7E03F04F6C65}.Release|Any CPU.Build.0 = Release|Any CPU + {9A9226D8-65A8-4D3C-A602-74F177D054CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9A9226D8-65A8-4D3C-A602-74F177D054CE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9A9226D8-65A8-4D3C-A602-74F177D054CE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9A9226D8-65A8-4D3C-A602-74F177D054CE}.Release|Any CPU.Build.0 = Release|Any CPU + {A3064FB2-57BA-486E-BCE1-E84C798D31F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A3064FB2-57BA-486E-BCE1-E84C798D31F5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A3064FB2-57BA-486E-BCE1-E84C798D31F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A3064FB2-57BA-486E-BCE1-E84C798D31F5}.Release|Any CPU.Build.0 = Release|Any CPU + {D7FA0CF2-AD5E-43AC-86F8-B8D3F560A475}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D7FA0CF2-AD5E-43AC-86F8-B8D3F560A475}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D7FA0CF2-AD5E-43AC-86F8-B8D3F560A475}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D7FA0CF2-AD5E-43AC-86F8-B8D3F560A475}.Release|Any CPU.Build.0 = Release|Any CPU + {B4D3EF7E-FDA1-4AF5-A274-8317BB83F718}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B4D3EF7E-FDA1-4AF5-A274-8317BB83F718}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B4D3EF7E-FDA1-4AF5-A274-8317BB83F718}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B4D3EF7E-FDA1-4AF5-A274-8317BB83F718}.Release|Any CPU.Build.0 = Release|Any CPU + {58604E0E-E8B1-4D22-9751-5B4EB574BA6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {58604E0E-E8B1-4D22-9751-5B4EB574BA6A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {58604E0E-E8B1-4D22-9751-5B4EB574BA6A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {58604E0E-E8B1-4D22-9751-5B4EB574BA6A}.Release|Any CPU.Build.0 = Release|Any CPU + {BE1CD7DB-FFE0-4317-B975-76CA7D726715}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BE1CD7DB-FFE0-4317-B975-76CA7D726715}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BE1CD7DB-FFE0-4317-B975-76CA7D726715}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BE1CD7DB-FFE0-4317-B975-76CA7D726715}.Release|Any CPU.Build.0 = Release|Any CPU + {676A1177-EAE2-400A-931A-E1BA31E81908}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {676A1177-EAE2-400A-931A-E1BA31E81908}.Debug|Any CPU.Build.0 = Debug|Any CPU + {676A1177-EAE2-400A-931A-E1BA31E81908}.Release|Any CPU.ActiveCfg = Release|Any CPU + {676A1177-EAE2-400A-931A-E1BA31E81908}.Release|Any CPU.Build.0 = Release|Any CPU + {E17540B9-E5FC-489F-8AE6-38657ED9998D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E17540B9-E5FC-489F-8AE6-38657ED9998D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E17540B9-E5FC-489F-8AE6-38657ED9998D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E17540B9-E5FC-489F-8AE6-38657ED9998D}.Release|Any CPU.Build.0 = Release|Any CPU + {A1AC4592-6309-492C-B0F1-C9241886718F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A1AC4592-6309-492C-B0F1-C9241886718F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A1AC4592-6309-492C-B0F1-C9241886718F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A1AC4592-6309-492C-B0F1-C9241886718F}.Release|Any CPU.Build.0 = Release|Any CPU + {981637D1-48D8-4763-B0FC-B3A2E3E199A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {981637D1-48D8-4763-B0FC-B3A2E3E199A0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {981637D1-48D8-4763-B0FC-B3A2E3E199A0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {981637D1-48D8-4763-B0FC-B3A2E3E199A0}.Release|Any CPU.Build.0 = Release|Any CPU + {8618F7BE-4377-4537-AA9E-53C11352FAB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8618F7BE-4377-4537-AA9E-53C11352FAB3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8618F7BE-4377-4537-AA9E-53C11352FAB3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8618F7BE-4377-4537-AA9E-53C11352FAB3}.Release|Any CPU.Build.0 = Release|Any CPU + {43619AA5-B3A2-47B9-A3B1-8B80BE502FD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {43619AA5-B3A2-47B9-A3B1-8B80BE502FD9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {43619AA5-B3A2-47B9-A3B1-8B80BE502FD9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {43619AA5-B3A2-47B9-A3B1-8B80BE502FD9}.Release|Any CPU.Build.0 = Release|Any CPU + {6B0D8019-50D6-446F-998D-B24384FB3025}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6B0D8019-50D6-446F-998D-B24384FB3025}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6B0D8019-50D6-446F-998D-B24384FB3025}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6B0D8019-50D6-446F-998D-B24384FB3025}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9} = {6AAB4EA3-E304-476E-8E31-71028C706752} + {31421787-1A3C-427C-A8AD-C7E2561B2956} = {6AAB4EA3-E304-476E-8E31-71028C706752} + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} = {6AAB4EA3-E304-476E-8E31-71028C706752} + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} = {6AAB4EA3-E304-476E-8E31-71028C706752} + {3995A0E5-379E-4682-9986-473AF4E7E818} = {CD4553DF-D5CF-470A-B296-6D746F29B05B} + {730B7513-6B75-4D76-9CB4-18214FD58263} = {CD4553DF-D5CF-470A-B296-6D746F29B05B} + {69A3898C-DD4B-4DED-B1FE-AB2F9E539E66} = {CD4553DF-D5CF-470A-B296-6D746F29B05B} + {605A0E8A-E237-4240-9727-73D927556862} = {CD4553DF-D5CF-470A-B296-6D746F29B05B} + {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} = {F56C4DA5-B2E1-410E-8B50-7D835AA5DDF2} + {CA6B148C-136E-4580-8877-75CAE7B40507} = {F56C4DA5-B2E1-410E-8B50-7D835AA5DDF2} + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {CDC3EC63-D7F4-4854-833B-169A1FDA3589} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {85C322BA-C046-4416-87D2-D79AE92A1E65} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {238AF76E-0D42-4F01-A852-12E65D84A885} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {24435C75-34D7-48A7-A5C5-248782EABB93} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {D700D10F-A974-4072-BE67-E2F712F9E055} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {1767FA65-426B-4555-9049-01DB8DCEA5A8} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {3F23C7FA-1E3C-4FE1-A727-D204F54D3883} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {E17BF7BD-6E9A-49C6-AFA7-BF36458B5A17} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {C6EC6389-2624-48AF-ACEC-4583435AF148} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {999D4DCE-5E0E-4DA9-8C42-8889FEC751F3} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {A204460D-EF59-4131-AA15-B5B7206333A0} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {59BE0CCF-98FE-415A-89EE-F646082B5E07} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {FC25A058-BA33-42A2-B172-439D56CFE835} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {B83D884E-57E6-476A-BC83-78E2892C44F8} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {4948B64F-7008-44D2-872E-21A642759B62} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {709ECE68-5107-4C42-8A92-AD9A79EAC07E} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {69865974-3934-4060-B9F5-29B5FAE26DF7} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {FEE9384C-251C-4D42-A190-F89775D339F1} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {52A6AB4A-F177-4133-93B0-24BE2F350055} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {6B0D8019-50D6-446F-998D-B24384FB3025} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {EDC1FA53-E3D6-4C0D-88B1-4684847D4E0E} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {749DED8B-DB4E-4CF5-BFAE-5CAB791BC5EC} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {0FEEF2BF-058C-49E9-938C-EA41768A1998} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {63451B99-617D-40BF-88AE-F5E8643F9FBA} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {222AD218-65BD-4F71-AF7F-8EA742DF645F} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {A5B41CCB-A5AE-46CD-A49B-847677402DB2} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {5D831085-1147-452A-9863-BDFE6DB85C89} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {4C2C740C-F3CC-40F9-943B-34D61B4BD346} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {F2133A77-7E62-41AB-B98D-20D37079540E} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {A3F3C344-70A8-4979-8855-B8F8C652D6CC} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {FF67662F-F407-44E5-831F-0A6B2F5AC79B} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {74F14777-DB36-4D3A-AC8B-CA2FDBC15DFC} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {5D3C35B1-43E3-4B09-8798-3AD7594F2B84} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {C93D705C-E4C2-485F-9359-5C47A013A06A} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {D3512DD4-3251-47C9-90AA-54407029FACC} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {602DAD34-1C30-4CA8-B20A-7E03F04F6C65} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {9A9226D8-65A8-4D3C-A602-74F177D054CE} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {A3064FB2-57BA-486E-BCE1-E84C798D31F5} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {D7FA0CF2-AD5E-43AC-86F8-B8D3F560A475} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {B4D3EF7E-FDA1-4AF5-A274-8317BB83F718} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {58604E0E-E8B1-4D22-9751-5B4EB574BA6A} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {BE1CD7DB-FFE0-4317-B975-76CA7D726715} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {676A1177-EAE2-400A-931A-E1BA31E81908} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {E17540B9-E5FC-489F-8AE6-38657ED9998D} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {A1AC4592-6309-492C-B0F1-C9241886718F} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {981637D1-48D8-4763-B0FC-B3A2E3E199A0} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {8618F7BE-4377-4537-AA9E-53C11352FAB3} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {43619AA5-B3A2-47B9-A3B1-8B80BE502FD9} = {CA6B148C-136E-4580-8877-75CAE7B40507} + EndGlobalSection +EndGlobal diff --git a/source/Samples/CollectiveSample/CollectiveSample10.sln b/source/Samples/CollectiveSample/CollectiveSample10.sln new file mode 100644 index 00000000..2787e9f5 --- /dev/null +++ b/source/Samples/CollectiveSample/CollectiveSample10.sln @@ -0,0 +1,497 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Codepack", "Codepack", "{6AAB4EA3-E304-476E-8E31-71028C706752}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{CD4553DF-D5CF-470A-B296-6D746F29B05B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{F56C4DA5-B2E1-410E-8B50-7D835AA5DDF2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CS", "CS", "{ACA7AC56-13ED-4A71-9827-05FE1CF639C8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "VB", "VB", "{CA6B148C-136E-4580-8877-75CAE7B40507}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExtendedLinguisticServices", "..\..\WindowsAPICodePack\ExtendedLinguisticServices\ExtendedLinguisticServices.csproj", "{B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Sensors", "..\..\WindowsAPICodePack\Sensors\Sensors.csproj", "{31421787-1A3C-427C-A8AD-C7E2561B2956}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CoreTests", "..\..\Tests\Core\CoreTests.csproj", "{605A0E8A-E237-4240-9727-73D927556862}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExtendedLinguisticServicesTests", "..\..\Tests\ExtendedLinguisticServices\ExtendedLinguisticServicesTests.csproj", "{3995A0E5-379E-4682-9986-473AF4E7E818}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SensorsTests", "..\..\Tests\Sensors\SensorsTests.csproj", "{730B7513-6B75-4D76-9CB4-18214FD58263}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShellTests", "..\..\Tests\Shell\ShellTests.csproj", "{69A3898C-DD4B-4DED-B1FE-AB2F9E539E66}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfGlassDemo", "..\AeroGlass\CS\WpfGlassDemo\WpfGlassDemo.csproj", "{CDC3EC63-D7F4-4854-833B-169A1FDA3589}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsFormsGlassDemo", "..\AeroGlass\CS\WindowsFormsGlassDemo\WindowsFormsGlassDemo.csproj", "{6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WindowsFormsGlassDemo", "..\AeroGlass\VB\WindowsFormsGlassDemo\WindowsFormsGlassDemo.vbproj", "{EDC1FA53-E3D6-4C0D-88B1-4684847D4E0E}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WpfGlassDemo", "..\AeroGlass\VB\WpfGlassDemo\WpfGlassDemo.vbproj", "{749DED8B-DB4E-4CF5-BFAE-5CAB791BC5EC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AppRestartRecoveryDemo", "..\AppRestartRecoveryDemo\CS\AppRestartRecoveryDemo.csproj", "{DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AppRestartRecoveryDemo", "..\AppRestartRecoveryDemo\VB\AppRestartRecoveryDemo.vbproj", "{0FEEF2BF-058C-49E9-938C-EA41768A1998}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExplorerBrowserDemo", "..\ExplorerBrowser\CS\WinForms\ExplorerBrowserDemo.csproj", "{2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPFExplorerBrowserDemo", "..\ExplorerBrowser\CS\WPF\WPFExplorerBrowserDemo\WPFExplorerBrowserDemo.csproj", "{85C322BA-C046-4416-87D2-D79AE92A1E65}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ExplorerBrowserDemo", "..\ExplorerBrowser\VB\WinForms\ExplorerBrowserDemo.vbproj", "{63451B99-617D-40BF-88AE-F5E8643F9FBA}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WPFExplorerBrowserDemo", "..\ExplorerBrowser\VB\WPF\WPFExplorerBrowserDemo\WPFExplorerBrowserDemo.vbproj", "{222AD218-65BD-4F71-AF7F-8EA742DF645F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ELSSamples", "..\ExtendedLinguisticServices\ELSDemo\CS\ELSSamples.csproj", "{238AF76E-0D42-4F01-A852-12E65D84A885}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ELSSamples", "..\ExtendedLinguisticServices\ELSDemo\VB\ELSSamples.vbproj", "{A5B41CCB-A5AE-46CD-A49B-847677402DB2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Transliterator", "..\ExtendedLinguisticServices\Transliterator\CS\Transliterator.csproj", "{24435C75-34D7-48A7-A5C5-248782EABB93}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Transliterator", "..\ExtendedLinguisticServices\Transliterator\VB\Transliterator.vbproj", "{5D831085-1147-452A-9863-BDFE6DB85C89}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetworkDemo", "..\NetworkDemo\CS\NetworkDemo.csproj", "{D700D10F-A974-4072-BE67-E2F712F9E055}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NetworkDemo", "..\NetworkDemo\VB\NetworkDemo.vbproj", "{4C2C740C-F3CC-40F9-943B-34D61B4BD346}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PowerMgmtDemo", "..\PowerMgmtDemo\CS\PowerMgmtDemo\PowerMgmtDemo.csproj", "{1767FA65-426B-4555-9049-01DB8DCEA5A8}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "PowerMgmtDemo", "..\PowerMgmtDemo\VB\PowerMgmtDemo\PowerMgmtDemo.vbproj", "{F2133A77-7E62-41AB-B98D-20D37079540E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AccelerationMeasurement", "..\Sensors\CS\AccelerationMeasurement\AccelerationMeasurement.csproj", "{3F23C7FA-1E3C-4FE1-A727-D204F54D3883}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AmbientLightMeasurement", "..\Sensors\CS\AmbientLightMeasurement\AmbientLightMeasurement.csproj", "{E17BF7BD-6E9A-49C6-AFA7-BF36458B5A17}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AccelerationMeasurement", "..\Sensors\VB\AccelerationMeasurement\AccelerationMeasurement.vbproj", "{A3F3C344-70A8-4979-8855-B8F8C652D6CC}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "AmbientLightMeasurement", "..\Sensors\VB\AmbientLightMeasurement\AmbientLightMeasurement.vbproj", "{FF67662F-F407-44E5-831F-0A6B2F5AC79B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TaskDialogDemo", "..\TaskDialogDemo\CS\TaskDialogDemo\TaskDialogDemo.csproj", "{C6EC6389-2624-48AF-ACEC-4583435AF148}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TaskDialogDemo", "..\TaskDialogDemo\VB\TaskDialogDemo\TaskDialogDemo.vbproj", "{74F14777-DB36-4D3A-AC8B-CA2FDBC15DFC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommonFileDialogsDemo", "..\Shell\CommonFileDialogsDemo\CS\CommonFileDialogsDemo\CommonFileDialogsDemo.csproj", "{999D4DCE-5E0E-4DA9-8C42-8889FEC751F3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustomFileDialogsDemo", "..\Shell\CustomCommonFileDialogsDemo\CS\CustomFileDialogsDemo.csproj", "{A204460D-EF59-4131-AA15-B5B7206333A0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShellObjectDragAndDropDemo", "..\Shell\DragAndDrop\CS\WPF\ShellObjectDragAndDrop\ShellObjectDragAndDropDemo.csproj", "{59BE0CCF-98FE-415A-89EE-F646082B5E07}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KnownFoldersBrowser", "..\Shell\KnownFoldersBrowser\CS\KnownFoldersBrowser\KnownFoldersBrowser.csproj", "{FC25A058-BA33-42A2-B172-439D56CFE835}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PicturePropertiesEditor", "..\Shell\PicturePropertiesEditor\CS\PicturePropertiesEditor.csproj", "{B83D884E-57E6-476A-BC83-78E2892C44F8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PropertyEdit", "..\Shell\PropertyEditDemo\CS\PropertyEdit\PropertyEdit.csproj", "{4948B64F-7008-44D2-872E-21A642759B62}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchApp", "..\Shell\SearchApplication\CS\SearchApp\SearchApp.csproj", "{B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShellHierarchyTreeDemo", "..\Shell\ShellHierarchyTreeDemo\CS\ShellHierarchyTreeDemo.csproj", "{E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShellThumbnailBrowserDemo", "..\Shell\ShellThumbnailBrowserDemo\CS\ThumbnailBrowserDemo\ShellThumbnailBrowserDemo.csproj", "{86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StarBackupUsingLibraries", "..\Shell\StarBackupUsingLibraries\CS\StarBackupUsingLibraries.csproj", "{709ECE68-5107-4C42-8A92-AD9A79EAC07E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StockIconsDemo", "..\Shell\StockIconsDemo\CS\StockIconsDemo\StockIconsDemo.csproj", "{F5F48434-A2BD-4065-9EAC-C9B028C5C05F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TabbedThumbnailDemoWinforms", "..\Shell\TabbedThumbnailDemo\CS\Winforms\TabbedThumbnailDemoWinforms.csproj", "{69865974-3934-4060-B9F5-29B5FAE26DF7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RegistrationHelper", "..\Shell\TaskbarDemo\CS\RegistrationHelper\RegistrationHelper.csproj", "{03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TaskbarDemo", "..\Shell\TaskbarDemo\CS\TaskbarDemo\TaskbarDemo.csproj", "{12F17213-0DEC-41E6-91EB-48C74A0B6AB0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThumbnailToolbarDemoWinforms", "..\Shell\ThumbnailToolbarDemo\CS\Winforms\ThumbnailToolbarDemoWinforms.csproj", "{FEE9384C-251C-4D42-A190-F89775D339F1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThumbnailToolbarDemoWPF", "..\Shell\ThumbnailToolbarDemo\CS\WPF\ThumbnailToolbarDemoWPF.csproj", "{52A6AB4A-F177-4133-93B0-24BE2F350055}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CommonFileDialogsDemo", "..\Shell\CommonFileDialogsDemo\VB\CommonFileDialogsDemo\CommonFileDialogsDemo.vbproj", "{5D3C35B1-43E3-4B09-8798-3AD7594F2B84}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomFileDialogsDemo", "..\Shell\CustomCommonFileDialogsDemo\VB\CustomFileDialogsDemo.vbproj", "{C93D705C-E4C2-485F-9359-5C47A013A06A}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ShellObjectDragAndDropDemo", "..\Shell\DragAndDrop\VB\WPF\ShellObjectDragAndDrop\ShellObjectDragAndDropDemo.vbproj", "{D3512DD4-3251-47C9-90AA-54407029FACC}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "KnownFoldersBrowser", "..\Shell\KnownFoldersBrowser\VB\KnownFoldersBrowser\KnownFoldersBrowser.vbproj", "{602DAD34-1C30-4CA8-B20A-7E03F04F6C65}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "PicturePropertiesEditor", "..\Shell\PicturePropertiesEditor\VB\PicturePropertiesEditor.vbproj", "{9A9226D8-65A8-4D3C-A602-74F177D054CE}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "PropertyEdit", "..\Shell\PropertyEditDemo\VB\PropertyEdit\PropertyEdit.vbproj", "{A3064FB2-57BA-486E-BCE1-E84C798D31F5}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SearchApp", "..\Shell\SearchApplication\VB\SearchApp\SearchApp.vbproj", "{D7FA0CF2-AD5E-43AC-86F8-B8D3F560A475}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ShellHierarchyTreeDemo", "..\Shell\ShellHierarchyTreeDemo\VB\ShellHierarchyTreeDemo.vbproj", "{B4D3EF7E-FDA1-4AF5-A274-8317BB83F718}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ShellThumbnailBrowserDemo", "..\Shell\ShellThumbnailBrowserDemo\VB\ThumbnailBrowserDemo\ShellThumbnailBrowserDemo.vbproj", "{58604E0E-E8B1-4D22-9751-5B4EB574BA6A}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "StarBackupUsingLibraries", "..\Shell\StarBackupUsingLibraries\VB\StarBackupUsingLibraries.vbproj", "{BE1CD7DB-FFE0-4317-B975-76CA7D726715}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "StockIconsDemo", "..\Shell\StockIconsDemo\VB\StockIconsDemo\StockIconsDemo.vbproj", "{676A1177-EAE2-400A-931A-E1BA31E81908}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TabbedThumbnailDemoWinforms", "..\Shell\TabbedThumbnailDemo\VB\Winforms\TabbedThumbnailDemoWinforms.vbproj", "{E17540B9-E5FC-489F-8AE6-38657ED9998D}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RegistrationHelper", "..\Shell\TaskbarDemo\VB\RegistrationHelper\RegistrationHelper.vbproj", "{A1AC4592-6309-492C-B0F1-C9241886718F}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TaskbarDemo", "..\Shell\TaskbarDemo\VB\TaskbarDemo\TaskbarDemo.vbproj", "{981637D1-48D8-4763-B0FC-B3A2E3E199A0}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ThumbnailToolbarDemoWinforms", "..\Shell\ThumbnailToolbarDemo\VB\Winforms\ThumbnailToolbarDemoWinforms.vbproj", "{8618F7BE-4377-4537-AA9E-53C11352FAB3}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ThumbnailToolbarDemoWPF", "..\Shell\ThumbnailToolbarDemo\VB\WPF\ThumbnailToolbarDemoWPF.vbproj", "{43619AA5-B3A2-47B9-A3B1-8B80BE502FD9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HandlerSamples", "..\HandlerSamples\HandlerSamples.csproj", "{1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShellObjectWatcherSampleWPF", "..\ShellObjectWatcherSampleWPF\ShellObjectWatcherSampleWPF.csproj", "{6B0D8019-50D6-446F-998D-B24384FB3025}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShellExtensions", "..\..\WindowsAPICodePack\ShellExtensions\ShellExtensions.csproj", "{F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Release|Any CPU.Build.0 = Release|Any CPU + {31421787-1A3C-427C-A8AD-C7E2561B2956}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {31421787-1A3C-427C-A8AD-C7E2561B2956}.Debug|Any CPU.Build.0 = Debug|Any CPU + {31421787-1A3C-427C-A8AD-C7E2561B2956}.Release|Any CPU.ActiveCfg = Release|Any CPU + {31421787-1A3C-427C-A8AD-C7E2561B2956}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {605A0E8A-E237-4240-9727-73D927556862}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {605A0E8A-E237-4240-9727-73D927556862}.Debug|Any CPU.Build.0 = Debug|Any CPU + {605A0E8A-E237-4240-9727-73D927556862}.Release|Any CPU.ActiveCfg = Release|Any CPU + {605A0E8A-E237-4240-9727-73D927556862}.Release|Any CPU.Build.0 = Release|Any CPU + {3995A0E5-379E-4682-9986-473AF4E7E818}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3995A0E5-379E-4682-9986-473AF4E7E818}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3995A0E5-379E-4682-9986-473AF4E7E818}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3995A0E5-379E-4682-9986-473AF4E7E818}.Release|Any CPU.Build.0 = Release|Any CPU + {730B7513-6B75-4D76-9CB4-18214FD58263}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {730B7513-6B75-4D76-9CB4-18214FD58263}.Debug|Any CPU.Build.0 = Debug|Any CPU + {730B7513-6B75-4D76-9CB4-18214FD58263}.Release|Any CPU.ActiveCfg = Release|Any CPU + {730B7513-6B75-4D76-9CB4-18214FD58263}.Release|Any CPU.Build.0 = Release|Any CPU + {69A3898C-DD4B-4DED-B1FE-AB2F9E539E66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {69A3898C-DD4B-4DED-B1FE-AB2F9E539E66}.Debug|Any CPU.Build.0 = Debug|Any CPU + {69A3898C-DD4B-4DED-B1FE-AB2F9E539E66}.Release|Any CPU.ActiveCfg = Release|Any CPU + {69A3898C-DD4B-4DED-B1FE-AB2F9E539E66}.Release|Any CPU.Build.0 = Release|Any CPU + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CDC3EC63-D7F4-4854-833B-169A1FDA3589}.Release|Any CPU.Build.0 = Release|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E}.Release|Any CPU.Build.0 = Release|Any CPU + {EDC1FA53-E3D6-4C0D-88B1-4684847D4E0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EDC1FA53-E3D6-4C0D-88B1-4684847D4E0E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EDC1FA53-E3D6-4C0D-88B1-4684847D4E0E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EDC1FA53-E3D6-4C0D-88B1-4684847D4E0E}.Release|Any CPU.Build.0 = Release|Any CPU + {749DED8B-DB4E-4CF5-BFAE-5CAB791BC5EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {749DED8B-DB4E-4CF5-BFAE-5CAB791BC5EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {749DED8B-DB4E-4CF5-BFAE-5CAB791BC5EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {749DED8B-DB4E-4CF5-BFAE-5CAB791BC5EC}.Release|Any CPU.Build.0 = Release|Any CPU + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1}.Release|Any CPU.Build.0 = Release|Any CPU + {0FEEF2BF-058C-49E9-938C-EA41768A1998}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0FEEF2BF-058C-49E9-938C-EA41768A1998}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0FEEF2BF-058C-49E9-938C-EA41768A1998}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0FEEF2BF-058C-49E9-938C-EA41768A1998}.Release|Any CPU.Build.0 = Release|Any CPU + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.Release|Any CPU.Build.0 = Release|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.Debug|Any CPU.Build.0 = Debug|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.Release|Any CPU.ActiveCfg = Release|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.Release|Any CPU.Build.0 = Release|Any CPU + {63451B99-617D-40BF-88AE-F5E8643F9FBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {63451B99-617D-40BF-88AE-F5E8643F9FBA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63451B99-617D-40BF-88AE-F5E8643F9FBA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {63451B99-617D-40BF-88AE-F5E8643F9FBA}.Release|Any CPU.Build.0 = Release|Any CPU + {222AD218-65BD-4F71-AF7F-8EA742DF645F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {222AD218-65BD-4F71-AF7F-8EA742DF645F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {222AD218-65BD-4F71-AF7F-8EA742DF645F}.Release|Any CPU.ActiveCfg = Debug|Any CPU + {222AD218-65BD-4F71-AF7F-8EA742DF645F}.Release|Any CPU.Build.0 = Debug|Any CPU + {238AF76E-0D42-4F01-A852-12E65D84A885}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {238AF76E-0D42-4F01-A852-12E65D84A885}.Debug|Any CPU.Build.0 = Debug|Any CPU + {238AF76E-0D42-4F01-A852-12E65D84A885}.Release|Any CPU.ActiveCfg = Release|Any CPU + {238AF76E-0D42-4F01-A852-12E65D84A885}.Release|Any CPU.Build.0 = Release|Any CPU + {A5B41CCB-A5AE-46CD-A49B-847677402DB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A5B41CCB-A5AE-46CD-A49B-847677402DB2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A5B41CCB-A5AE-46CD-A49B-847677402DB2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A5B41CCB-A5AE-46CD-A49B-847677402DB2}.Release|Any CPU.Build.0 = Release|Any CPU + {24435C75-34D7-48A7-A5C5-248782EABB93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {24435C75-34D7-48A7-A5C5-248782EABB93}.Debug|Any CPU.Build.0 = Debug|Any CPU + {24435C75-34D7-48A7-A5C5-248782EABB93}.Release|Any CPU.ActiveCfg = Release|Any CPU + {24435C75-34D7-48A7-A5C5-248782EABB93}.Release|Any CPU.Build.0 = Release|Any CPU + {5D831085-1147-452A-9863-BDFE6DB85C89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5D831085-1147-452A-9863-BDFE6DB85C89}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5D831085-1147-452A-9863-BDFE6DB85C89}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5D831085-1147-452A-9863-BDFE6DB85C89}.Release|Any CPU.Build.0 = Release|Any CPU + {D700D10F-A974-4072-BE67-E2F712F9E055}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D700D10F-A974-4072-BE67-E2F712F9E055}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D700D10F-A974-4072-BE67-E2F712F9E055}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D700D10F-A974-4072-BE67-E2F712F9E055}.Release|Any CPU.Build.0 = Release|Any CPU + {4C2C740C-F3CC-40F9-943B-34D61B4BD346}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4C2C740C-F3CC-40F9-943B-34D61B4BD346}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4C2C740C-F3CC-40F9-943B-34D61B4BD346}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4C2C740C-F3CC-40F9-943B-34D61B4BD346}.Release|Any CPU.Build.0 = Release|Any CPU + {1767FA65-426B-4555-9049-01DB8DCEA5A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1767FA65-426B-4555-9049-01DB8DCEA5A8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1767FA65-426B-4555-9049-01DB8DCEA5A8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1767FA65-426B-4555-9049-01DB8DCEA5A8}.Release|Any CPU.Build.0 = Release|Any CPU + {F2133A77-7E62-41AB-B98D-20D37079540E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F2133A77-7E62-41AB-B98D-20D37079540E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F2133A77-7E62-41AB-B98D-20D37079540E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F2133A77-7E62-41AB-B98D-20D37079540E}.Release|Any CPU.Build.0 = Release|Any CPU + {3F23C7FA-1E3C-4FE1-A727-D204F54D3883}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3F23C7FA-1E3C-4FE1-A727-D204F54D3883}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3F23C7FA-1E3C-4FE1-A727-D204F54D3883}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3F23C7FA-1E3C-4FE1-A727-D204F54D3883}.Release|Any CPU.Build.0 = Release|Any CPU + {E17BF7BD-6E9A-49C6-AFA7-BF36458B5A17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E17BF7BD-6E9A-49C6-AFA7-BF36458B5A17}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E17BF7BD-6E9A-49C6-AFA7-BF36458B5A17}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E17BF7BD-6E9A-49C6-AFA7-BF36458B5A17}.Release|Any CPU.Build.0 = Release|Any CPU + {A3F3C344-70A8-4979-8855-B8F8C652D6CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A3F3C344-70A8-4979-8855-B8F8C652D6CC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A3F3C344-70A8-4979-8855-B8F8C652D6CC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A3F3C344-70A8-4979-8855-B8F8C652D6CC}.Release|Any CPU.Build.0 = Release|Any CPU + {FF67662F-F407-44E5-831F-0A6B2F5AC79B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FF67662F-F407-44E5-831F-0A6B2F5AC79B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FF67662F-F407-44E5-831F-0A6B2F5AC79B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FF67662F-F407-44E5-831F-0A6B2F5AC79B}.Release|Any CPU.Build.0 = Release|Any CPU + {C6EC6389-2624-48AF-ACEC-4583435AF148}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C6EC6389-2624-48AF-ACEC-4583435AF148}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C6EC6389-2624-48AF-ACEC-4583435AF148}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C6EC6389-2624-48AF-ACEC-4583435AF148}.Release|Any CPU.Build.0 = Release|Any CPU + {74F14777-DB36-4D3A-AC8B-CA2FDBC15DFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {74F14777-DB36-4D3A-AC8B-CA2FDBC15DFC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {74F14777-DB36-4D3A-AC8B-CA2FDBC15DFC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {74F14777-DB36-4D3A-AC8B-CA2FDBC15DFC}.Release|Any CPU.Build.0 = Release|Any CPU + {999D4DCE-5E0E-4DA9-8C42-8889FEC751F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {999D4DCE-5E0E-4DA9-8C42-8889FEC751F3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {999D4DCE-5E0E-4DA9-8C42-8889FEC751F3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {999D4DCE-5E0E-4DA9-8C42-8889FEC751F3}.Release|Any CPU.Build.0 = Release|Any CPU + {A204460D-EF59-4131-AA15-B5B7206333A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A204460D-EF59-4131-AA15-B5B7206333A0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A204460D-EF59-4131-AA15-B5B7206333A0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A204460D-EF59-4131-AA15-B5B7206333A0}.Release|Any CPU.Build.0 = Release|Any CPU + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.Release|Any CPU.Build.0 = Release|Any CPU + {FC25A058-BA33-42A2-B172-439D56CFE835}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FC25A058-BA33-42A2-B172-439D56CFE835}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FC25A058-BA33-42A2-B172-439D56CFE835}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FC25A058-BA33-42A2-B172-439D56CFE835}.Release|Any CPU.Build.0 = Release|Any CPU + {B83D884E-57E6-476A-BC83-78E2892C44F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B83D884E-57E6-476A-BC83-78E2892C44F8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B83D884E-57E6-476A-BC83-78E2892C44F8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B83D884E-57E6-476A-BC83-78E2892C44F8}.Release|Any CPU.Build.0 = Release|Any CPU + {4948B64F-7008-44D2-872E-21A642759B62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4948B64F-7008-44D2-872E-21A642759B62}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4948B64F-7008-44D2-872E-21A642759B62}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4948B64F-7008-44D2-872E-21A642759B62}.Release|Any CPU.Build.0 = Release|Any CPU + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.Release|Any CPU.Build.0 = Release|Any CPU + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.Release|Any CPU.Build.0 = Release|Any CPU + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.Release|Any CPU.Build.0 = Release|Any CPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.Release|Any CPU.Build.0 = Release|Any CPU + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.Release|Any CPU.Build.0 = Release|Any CPU + {69865974-3934-4060-B9F5-29B5FAE26DF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {69865974-3934-4060-B9F5-29B5FAE26DF7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {69865974-3934-4060-B9F5-29B5FAE26DF7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {69865974-3934-4060-B9F5-29B5FAE26DF7}.Release|Any CPU.Build.0 = Release|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.Release|Any CPU.Build.0 = Release|Any CPU + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.Release|Any CPU.Build.0 = Release|Any CPU + {FEE9384C-251C-4D42-A190-F89775D339F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FEE9384C-251C-4D42-A190-F89775D339F1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FEE9384C-251C-4D42-A190-F89775D339F1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FEE9384C-251C-4D42-A190-F89775D339F1}.Release|Any CPU.Build.0 = Release|Any CPU + {52A6AB4A-F177-4133-93B0-24BE2F350055}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {52A6AB4A-F177-4133-93B0-24BE2F350055}.Debug|Any CPU.Build.0 = Debug|Any CPU + {52A6AB4A-F177-4133-93B0-24BE2F350055}.Release|Any CPU.ActiveCfg = Release|Any CPU + {52A6AB4A-F177-4133-93B0-24BE2F350055}.Release|Any CPU.Build.0 = Release|Any CPU + {5D3C35B1-43E3-4B09-8798-3AD7594F2B84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5D3C35B1-43E3-4B09-8798-3AD7594F2B84}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5D3C35B1-43E3-4B09-8798-3AD7594F2B84}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5D3C35B1-43E3-4B09-8798-3AD7594F2B84}.Release|Any CPU.Build.0 = Release|Any CPU + {C93D705C-E4C2-485F-9359-5C47A013A06A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C93D705C-E4C2-485F-9359-5C47A013A06A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C93D705C-E4C2-485F-9359-5C47A013A06A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C93D705C-E4C2-485F-9359-5C47A013A06A}.Release|Any CPU.Build.0 = Release|Any CPU + {D3512DD4-3251-47C9-90AA-54407029FACC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D3512DD4-3251-47C9-90AA-54407029FACC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D3512DD4-3251-47C9-90AA-54407029FACC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D3512DD4-3251-47C9-90AA-54407029FACC}.Release|Any CPU.Build.0 = Release|Any CPU + {602DAD34-1C30-4CA8-B20A-7E03F04F6C65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {602DAD34-1C30-4CA8-B20A-7E03F04F6C65}.Debug|Any CPU.Build.0 = Debug|Any CPU + {602DAD34-1C30-4CA8-B20A-7E03F04F6C65}.Release|Any CPU.ActiveCfg = Release|Any CPU + {602DAD34-1C30-4CA8-B20A-7E03F04F6C65}.Release|Any CPU.Build.0 = Release|Any CPU + {9A9226D8-65A8-4D3C-A602-74F177D054CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9A9226D8-65A8-4D3C-A602-74F177D054CE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9A9226D8-65A8-4D3C-A602-74F177D054CE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9A9226D8-65A8-4D3C-A602-74F177D054CE}.Release|Any CPU.Build.0 = Release|Any CPU + {A3064FB2-57BA-486E-BCE1-E84C798D31F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A3064FB2-57BA-486E-BCE1-E84C798D31F5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A3064FB2-57BA-486E-BCE1-E84C798D31F5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A3064FB2-57BA-486E-BCE1-E84C798D31F5}.Release|Any CPU.Build.0 = Release|Any CPU + {D7FA0CF2-AD5E-43AC-86F8-B8D3F560A475}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D7FA0CF2-AD5E-43AC-86F8-B8D3F560A475}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D7FA0CF2-AD5E-43AC-86F8-B8D3F560A475}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D7FA0CF2-AD5E-43AC-86F8-B8D3F560A475}.Release|Any CPU.Build.0 = Release|Any CPU + {B4D3EF7E-FDA1-4AF5-A274-8317BB83F718}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B4D3EF7E-FDA1-4AF5-A274-8317BB83F718}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B4D3EF7E-FDA1-4AF5-A274-8317BB83F718}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B4D3EF7E-FDA1-4AF5-A274-8317BB83F718}.Release|Any CPU.Build.0 = Release|Any CPU + {58604E0E-E8B1-4D22-9751-5B4EB574BA6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {58604E0E-E8B1-4D22-9751-5B4EB574BA6A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {58604E0E-E8B1-4D22-9751-5B4EB574BA6A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {58604E0E-E8B1-4D22-9751-5B4EB574BA6A}.Release|Any CPU.Build.0 = Release|Any CPU + {BE1CD7DB-FFE0-4317-B975-76CA7D726715}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BE1CD7DB-FFE0-4317-B975-76CA7D726715}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BE1CD7DB-FFE0-4317-B975-76CA7D726715}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BE1CD7DB-FFE0-4317-B975-76CA7D726715}.Release|Any CPU.Build.0 = Release|Any CPU + {676A1177-EAE2-400A-931A-E1BA31E81908}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {676A1177-EAE2-400A-931A-E1BA31E81908}.Debug|Any CPU.Build.0 = Debug|Any CPU + {676A1177-EAE2-400A-931A-E1BA31E81908}.Release|Any CPU.ActiveCfg = Release|Any CPU + {676A1177-EAE2-400A-931A-E1BA31E81908}.Release|Any CPU.Build.0 = Release|Any CPU + {E17540B9-E5FC-489F-8AE6-38657ED9998D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E17540B9-E5FC-489F-8AE6-38657ED9998D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E17540B9-E5FC-489F-8AE6-38657ED9998D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E17540B9-E5FC-489F-8AE6-38657ED9998D}.Release|Any CPU.Build.0 = Release|Any CPU + {A1AC4592-6309-492C-B0F1-C9241886718F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A1AC4592-6309-492C-B0F1-C9241886718F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A1AC4592-6309-492C-B0F1-C9241886718F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A1AC4592-6309-492C-B0F1-C9241886718F}.Release|Any CPU.Build.0 = Release|Any CPU + {981637D1-48D8-4763-B0FC-B3A2E3E199A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {981637D1-48D8-4763-B0FC-B3A2E3E199A0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {981637D1-48D8-4763-B0FC-B3A2E3E199A0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {981637D1-48D8-4763-B0FC-B3A2E3E199A0}.Release|Any CPU.Build.0 = Release|Any CPU + {8618F7BE-4377-4537-AA9E-53C11352FAB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8618F7BE-4377-4537-AA9E-53C11352FAB3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8618F7BE-4377-4537-AA9E-53C11352FAB3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8618F7BE-4377-4537-AA9E-53C11352FAB3}.Release|Any CPU.Build.0 = Release|Any CPU + {43619AA5-B3A2-47B9-A3B1-8B80BE502FD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {43619AA5-B3A2-47B9-A3B1-8B80BE502FD9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {43619AA5-B3A2-47B9-A3B1-8B80BE502FD9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {43619AA5-B3A2-47B9-A3B1-8B80BE502FD9}.Release|Any CPU.Build.0 = Release|Any CPU + {1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4}.Release|Any CPU.Build.0 = Release|Any CPU + {6B0D8019-50D6-446F-998D-B24384FB3025}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6B0D8019-50D6-446F-998D-B24384FB3025}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6B0D8019-50D6-446F-998D-B24384FB3025}.Release|Any CPU.ActiveCfg = Release|x86 + {F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} = {6AAB4EA3-E304-476E-8E31-71028C706752} + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9} = {6AAB4EA3-E304-476E-8E31-71028C706752} + {31421787-1A3C-427C-A8AD-C7E2561B2956} = {6AAB4EA3-E304-476E-8E31-71028C706752} + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} = {6AAB4EA3-E304-476E-8E31-71028C706752} + {F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64} = {6AAB4EA3-E304-476E-8E31-71028C706752} + {605A0E8A-E237-4240-9727-73D927556862} = {CD4553DF-D5CF-470A-B296-6D746F29B05B} + {3995A0E5-379E-4682-9986-473AF4E7E818} = {CD4553DF-D5CF-470A-B296-6D746F29B05B} + {730B7513-6B75-4D76-9CB4-18214FD58263} = {CD4553DF-D5CF-470A-B296-6D746F29B05B} + {69A3898C-DD4B-4DED-B1FE-AB2F9E539E66} = {CD4553DF-D5CF-470A-B296-6D746F29B05B} + {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} = {F56C4DA5-B2E1-410E-8B50-7D835AA5DDF2} + {CA6B148C-136E-4580-8877-75CAE7B40507} = {F56C4DA5-B2E1-410E-8B50-7D835AA5DDF2} + {CDC3EC63-D7F4-4854-833B-169A1FDA3589} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {6A9E5882-8DC2-4F64-9D9A-2FC4B4533A7E} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {DEB4C1CC-0745-4C96-9AE2-E24F29D558D1} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {85C322BA-C046-4416-87D2-D79AE92A1E65} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {238AF76E-0D42-4F01-A852-12E65D84A885} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {24435C75-34D7-48A7-A5C5-248782EABB93} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {D700D10F-A974-4072-BE67-E2F712F9E055} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {1767FA65-426B-4555-9049-01DB8DCEA5A8} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {3F23C7FA-1E3C-4FE1-A727-D204F54D3883} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {E17BF7BD-6E9A-49C6-AFA7-BF36458B5A17} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {C6EC6389-2624-48AF-ACEC-4583435AF148} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {999D4DCE-5E0E-4DA9-8C42-8889FEC751F3} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {A204460D-EF59-4131-AA15-B5B7206333A0} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {59BE0CCF-98FE-415A-89EE-F646082B5E07} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {FC25A058-BA33-42A2-B172-439D56CFE835} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {B83D884E-57E6-476A-BC83-78E2892C44F8} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {4948B64F-7008-44D2-872E-21A642759B62} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {709ECE68-5107-4C42-8A92-AD9A79EAC07E} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {69865974-3934-4060-B9F5-29B5FAE26DF7} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {FEE9384C-251C-4D42-A190-F89775D339F1} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {52A6AB4A-F177-4133-93B0-24BE2F350055} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {6B0D8019-50D6-446F-998D-B24384FB3025} = {ACA7AC56-13ED-4A71-9827-05FE1CF639C8} + {EDC1FA53-E3D6-4C0D-88B1-4684847D4E0E} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {749DED8B-DB4E-4CF5-BFAE-5CAB791BC5EC} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {0FEEF2BF-058C-49E9-938C-EA41768A1998} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {63451B99-617D-40BF-88AE-F5E8643F9FBA} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {222AD218-65BD-4F71-AF7F-8EA742DF645F} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {A5B41CCB-A5AE-46CD-A49B-847677402DB2} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {5D831085-1147-452A-9863-BDFE6DB85C89} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {4C2C740C-F3CC-40F9-943B-34D61B4BD346} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {F2133A77-7E62-41AB-B98D-20D37079540E} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {A3F3C344-70A8-4979-8855-B8F8C652D6CC} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {FF67662F-F407-44E5-831F-0A6B2F5AC79B} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {74F14777-DB36-4D3A-AC8B-CA2FDBC15DFC} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {5D3C35B1-43E3-4B09-8798-3AD7594F2B84} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {C93D705C-E4C2-485F-9359-5C47A013A06A} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {D3512DD4-3251-47C9-90AA-54407029FACC} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {602DAD34-1C30-4CA8-B20A-7E03F04F6C65} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {9A9226D8-65A8-4D3C-A602-74F177D054CE} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {A3064FB2-57BA-486E-BCE1-E84C798D31F5} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {D7FA0CF2-AD5E-43AC-86F8-B8D3F560A475} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {B4D3EF7E-FDA1-4AF5-A274-8317BB83F718} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {58604E0E-E8B1-4D22-9751-5B4EB574BA6A} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {BE1CD7DB-FFE0-4317-B975-76CA7D726715} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {676A1177-EAE2-400A-931A-E1BA31E81908} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {E17540B9-E5FC-489F-8AE6-38657ED9998D} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {A1AC4592-6309-492C-B0F1-C9241886718F} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {981637D1-48D8-4763-B0FC-B3A2E3E199A0} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {8618F7BE-4377-4537-AA9E-53C11352FAB3} = {CA6B148C-136E-4580-8877-75CAE7B40507} + {43619AA5-B3A2-47B9-A3B1-8B80BE502FD9} = {CA6B148C-136E-4580-8877-75CAE7B40507} + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/CS/AllDirectXCSharpSamples/AllDirectXCSharpSamples.sln b/source/Samples/DirectX/CS/AllDirectXCSharpSamples/AllDirectXCSharpSamples.sln new file mode 100644 index 00000000..1646e5a9 --- /dev/null +++ b/source/Samples/DirectX/CS/AllDirectXCSharpSamples/AllDirectXCSharpSamples.sln @@ -0,0 +1,907 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChartDemo", "..\Direct2D\ChartDemo\ChartDemo.csproj", "{06E0C795-735A-425F-9864-13086BAF18C1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Code Pack", "Code Pack", "{F14E0BE0-1089-484D-99FF-E04409D0115B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX", "..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{94A89884-7932-49BE-B395-E623DB5F3519}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Paint2D", "..\Direct2D\Paint2D\Paint2D.csproj", "{E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RandomShapesDemo", "..\Direct2D\RandomShapes\RandomShapesDemo.csproj", "{081B37CA-E9FF-4F68-94A5-57BB43145FDC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D2DShapes", "..\Direct2D\D2DShapes\D2DShapes.csproj", "{32D3BC0C-7DCB-4132-866D-A5060E16066B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextInlineImage", "..\Direct2D\TextInlineImage\TextInlineImage.csproj", "{06E0C795-735A-425F-9864-1308612F19C1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Direct2D", "Direct2D", "{C1C81F4C-DADE-4971-86EF-2F04ED06CBB9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Direct2D3D", "Direct2D3D", "{3161B5E3-0EF7-4B3B-82DB-D45A50839913}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D2D_D3D_Interop", "..\Direct2D_3D\D2D_D3D_Interop\D2D_D3D_Interop.csproj", "{25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SciFiTextDemo", "..\Direct2D_3D\SciFiTextDemo\SciFiTextDemo.csproj", "{E11236F6-99D5-49BA-BB07-8E66C4F85D0E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Direct3DUtilities", "..\UtilitiesLibrary\D3DUtilities\Direct3DUtilities.csproj", "{8A152DCF-12AE-492B-9F24-060B90B2DDD0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Direct3D10", "Direct3D10", "{63FF7062-7EDA-4F9D-AB30-E5C5F31DCF53}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeshBrowser", "..\Direct3D10\MeshBrowser\MeshBrowser.csproj", "{9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeshLoader", "..\UtilitiesLibrary\MeshLoader\MeshLoader.csproj", "{B28ADA8B-BD7E-4C11-8298-C39F7C456365}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX.Direct3DX10", "..\..\UtilitiesLibrary\D3DX10Helpers\Direct3DX10.vcproj", "{453FF234-24EC-4CC3-83DA-6D6C54388899}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextureSwap", "..\Direct3D10\TextureSwap\TextureSwap.csproj", "{318D173C-3D21-472C-905F-C37D7E7A66EC}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorial09", "Tutorial09", "{F0D30ED8-C165-4179-AA23-997AC0920867}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial09_WinFormsControl", "..\Direct3D10\Tutorial09\D3D10Tutorial09_WinFormsControl\D3D10Tutorial09_WinFormsControl.csproj", "{63FAFC43-88BA-48F6-80A6-F164B618A72A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial09_WPF", "..\Direct3D10\Tutorial09\D3D10Tutorial09_WPF\D3D10Tutorial09_WPF.csproj", "{790B3091-7B27-4062-B790-6FDE8C69EB7C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorials", "Tutorials", "{4D66DA5F-4D61-4CFB-889E-7F62AB3AC089}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial01_WinFormsControl", "..\Direct3D10\Tutorials\D3D10Tutorial01_WinFormsControl\D3D10Tutorial01_WinFormsControl.csproj", "{9AE5997A-8072-41C0-9324-BC886BFD6C66}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial01_WinFormsWindow", "..\Direct3D10\Tutorials\D3D10Tutorial01_WinFormsWindow\D3D10Tutorial01_WinFormsWindow.csproj", "{6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial01_WPF", "..\Direct3D10\Tutorials\D3D10Tutorial01_WPF\D3D10Tutorial01_WPF.csproj", "{980315C4-115D-482E-A484-4AFDD0A4B569}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial02_WinFormsControl", "..\Direct3D10\Tutorials\D3D10Tutorial02_WinFormsControl\D3D10Tutorial02_WinFormsControl.csproj", "{33CD3CE3-DAB1-4790-A861-B296FE85DEF6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial04_WinFormsControl", "..\Direct3D10\Tutorials\D3D10Tutorial04_WinFormsControl\D3D10Tutorial04_WinFormsControl.csproj", "{D0E3965D-10DF-45FC-A05F-39D67EDA760E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial05_WinFormsControl", "..\Direct3D10\Tutorials\D3D10Tutorial05_WinFormsControl\D3D10Tutorial05_WinFormsControl.csproj", "{87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial06_WinFormsControl", "..\Direct3D10\Tutorials\D3D10Tutorial06_WinFormsControl\D3D10Tutorial06_WinFormsControl.csproj", "{43D713E1-7B99-4C89-8B31-A2210392B284}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial07_WinFormsControl", "..\Direct3D10\Tutorials\D3D10Tutorial07_WinFormsControl\D3D10Tutorial07_WinFormsControl.csproj", "{CE251D57-5072-44E7-8238-C977F610BBD1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial07_WinFormsWindow", "..\Direct3D10\Tutorials\D3D10Tutorial07_WinFormsWindow\D3D10Tutorial07_WinFormsWindow.csproj", "{9DCD7874-4D07-413B-9E64-AA947B11D9FC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial07_WPF", "..\Direct3D10\Tutorials\D3D10Tutorial07_WPF\D3D10Tutorial07_WPF.csproj", "{FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsFlag", "..\Direct3D10\WindowsFlag\WindowsFlag.csproj", "{F235C99B-05D2-4A53-902C-E1691D7511B8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{5A8A64BA-5077-4FE7-A38B-457AC54A1EF0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{E0E9FDB3-D28B-4992-ADC5-4095B901AC3D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Direct3D11", "Direct3D11", "{8E7A0308-30E3-433B-B0E7-9F559FD2F2A7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tutorial02_WinFormsControl", "..\Direct3D11\Tutorials\D3D11Tutorial02_WinFormsControl\Tutorial02_WinFormsControl.csproj", "{60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorials", "Tutorials", "{EC58417E-2299-48CE-A844-AFEAD37F4D4F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tutorial02_WinFormsWindow", "..\Direct3D11\Tutorials\D3D11Tutorial02_WinFormsWindow\Tutorial02_WinFormsWindow.csproj", "{7F4B3540-1E98-48D5-A826-78E4755ACCD5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tutorial02_WPF", "..\Direct3D11\Tutorials\D3D11Tutorial02_WPF\Tutorial02_WPF.csproj", "{D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DXGI", "DXGI", "{FB18204E-FA93-4C20-97BC-FFEE79E7CECC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EnumAdapters", "..\DXGI\EnumAdapters\EnumAdapters.csproj", "{D691CAEB-8635-436B-9987-403047DA06AC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Mixed Platforms = CodeAnalysisDebug|Mixed Platforms + CodeAnalysisDebug|Win32 = CodeAnalysisDebug|Win32 + CodeAnalysisDebug|x64 = CodeAnalysisDebug|x64 + Debug with FxCop|Mixed Platforms = Debug with FxCop|Mixed Platforms + Debug with FxCop|Win32 = Debug with FxCop|Win32 + Debug with FxCop|x64 = Debug with FxCop|x64 + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release with FxCop|Mixed Platforms = Release with FxCop|Mixed Platforms + Release with FxCop|Win32 = Release with FxCop|Win32 + Release with FxCop|x64 = Release with FxCop|x64 + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {06E0C795-735A-425F-9864-13086BAF18C1}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|Win32.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|x64.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|x64.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|Win32.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|x64.ActiveCfg = Release|Any CPU + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.CodeAnalysisDebug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.CodeAnalysisDebug|x64.ActiveCfg = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.CodeAnalysisDebug|x64.Build.0 = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug with FxCop|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug with FxCop|Mixed Platforms.Build.0 = Debug with FxCop|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug with FxCop|Win32.ActiveCfg = Debug with FxCop|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug with FxCop|Win32.Build.0 = Debug with FxCop|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug with FxCop|x64.ActiveCfg = Debug with FxCop|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug with FxCop|x64.Build.0 = Debug with FxCop|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.ActiveCfg = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.Build.0 = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release with FxCop|Mixed Platforms.ActiveCfg = Release with FxCop|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release with FxCop|Mixed Platforms.Build.0 = Release with FxCop|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release with FxCop|Win32.ActiveCfg = Release with FxCop|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release with FxCop|Win32.Build.0 = Release with FxCop|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release with FxCop|x64.ActiveCfg = Release with FxCop|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release with FxCop|x64.Build.0 = Release with FxCop|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.ActiveCfg = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.Build.0 = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.CodeAnalysisDebug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.CodeAnalysisDebug|x64.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.CodeAnalysisDebug|x64.Build.0 = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug with FxCop|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug with FxCop|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug with FxCop|x64.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.Build.0 = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release with FxCop|Mixed Platforms.ActiveCfg = Releasex64|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release with FxCop|Mixed Platforms.Build.0 = Releasex64|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release with FxCop|Win32.ActiveCfg = Releasex64|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release with FxCop|Win32.Build.0 = Releasex64|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release with FxCop|x64.ActiveCfg = Releasex64|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.ActiveCfg = Release|x64 + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|Win32.ActiveCfg = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|Win32.Build.0 = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|x64.ActiveCfg = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|x64.Build.0 = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|Win32.ActiveCfg = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|x64.ActiveCfg = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|Win32.Build.0 = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|x64.ActiveCfg = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|x64.Build.0 = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|Win32.ActiveCfg = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|x64.ActiveCfg = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|Win32.ActiveCfg = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|Win32.Build.0 = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|x64.ActiveCfg = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|x64.Build.0 = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|Win32.ActiveCfg = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|x64.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|Win32.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|x64.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|x64.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release|Win32.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release|x64.ActiveCfg = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|Win32.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|Win32.Build.0 = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|x64.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|x64.Build.0 = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|Win32.ActiveCfg = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|x64.ActiveCfg = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|Win32.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|Win32.Build.0 = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|x64.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|x64.Build.0 = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|Win32.ActiveCfg = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|x64.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Win32.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Win32.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Win32.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.ActiveCfg = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|Win32.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|Win32.Build.0 = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|x64.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|x64.Build.0 = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|Win32.ActiveCfg = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|x64.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Win32.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Win32.Build.0 = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|x64.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|x64.Build.0 = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Win32.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|x64.ActiveCfg = Release|Any CPU + {453FF234-24EC-4CC3-83DA-6D6C54388899}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.CodeAnalysisDebug|Win32.Build.0 = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.CodeAnalysisDebug|x64.ActiveCfg = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.CodeAnalysisDebug|x64.Build.0 = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug with FxCop|Win32.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug with FxCop|x64.ActiveCfg = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug with FxCop|x64.Build.0 = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Win32.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Win32.Build.0 = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|x64.ActiveCfg = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|x64.Build.0 = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release with FxCop|Mixed Platforms.Build.0 = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release with FxCop|Win32.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release with FxCop|x64.ActiveCfg = Release|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release with FxCop|x64.Build.0 = Release|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Mixed Platforms.Build.0 = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Win32.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Win32.Build.0 = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|x64.ActiveCfg = Release|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|x64.Build.0 = Release|x64 + {318D173C-3D21-472C-905F-C37D7E7A66EC}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|Win32.Build.0 = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|x64.ActiveCfg = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|x64.Build.0 = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release|Win32.ActiveCfg = Release|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release|x64.ActiveCfg = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|Win32.ActiveCfg = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|Win32.Build.0 = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|x64.ActiveCfg = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|x64.Build.0 = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|Win32.ActiveCfg = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|x64.ActiveCfg = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|Win32.ActiveCfg = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|Win32.Build.0 = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|x64.ActiveCfg = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|x64.Build.0 = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|Win32.ActiveCfg = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|x64.ActiveCfg = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Win32.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Win32.Build.0 = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|x64.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|x64.Build.0 = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|Win32.ActiveCfg = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|x64.ActiveCfg = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Win32.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Win32.Build.0 = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|x64.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|x64.Build.0 = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|Win32.ActiveCfg = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|x64.ActiveCfg = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Win32.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Win32.Build.0 = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|x64.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|x64.Build.0 = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|Win32.ActiveCfg = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|x64.ActiveCfg = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Win32.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Win32.Build.0 = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|x64.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|x64.Build.0 = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|Win32.ActiveCfg = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|x64.ActiveCfg = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Win32.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Win32.Build.0 = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|x64.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|x64.Build.0 = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|Win32.ActiveCfg = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|x64.ActiveCfg = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Win32.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Win32.Build.0 = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|x64.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|x64.Build.0 = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|Win32.ActiveCfg = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|x64.ActiveCfg = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Win32.ActiveCfg = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Win32.Build.0 = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|x64.ActiveCfg = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|x64.Build.0 = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|Win32.ActiveCfg = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|x64.ActiveCfg = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Win32.Build.0 = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|x64.ActiveCfg = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|x64.Build.0 = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|Win32.ActiveCfg = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|x64.ActiveCfg = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|Win32.Build.0 = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|x64.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|x64.Build.0 = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|Win32.ActiveCfg = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|x64.ActiveCfg = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|Win32.Build.0 = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|x64.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|x64.Build.0 = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|Win32.ActiveCfg = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|x64.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Win32.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Win32.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|x64.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|x64.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Win32.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|x64.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Mixed Platforms.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Win32.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|x64.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Win32.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Win32.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|x64.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|x64.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Win32.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|x64.ActiveCfg = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|Win32.ActiveCfg = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|Win32.Build.0 = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|x64.ActiveCfg = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|x64.Build.0 = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|Win32.ActiveCfg = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|x64.ActiveCfg = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|Win32.ActiveCfg = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|Win32.Build.0 = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|x64.ActiveCfg = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|x64.Build.0 = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|Win32.ActiveCfg = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|x64.ActiveCfg = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|Win32.ActiveCfg = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|Win32.Build.0 = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|x64.ActiveCfg = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|x64.Build.0 = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|Win32.ActiveCfg = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|x64.ActiveCfg = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|Win32.ActiveCfg = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|Win32.Build.0 = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|x64.ActiveCfg = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|x64.Build.0 = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|Win32.ActiveCfg = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|x64.ActiveCfg = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.CodeAnalysisDebug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.CodeAnalysisDebug|Mixed Platforms.Build.0 = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.CodeAnalysisDebug|Win32.ActiveCfg = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug with FxCop|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug with FxCop|Mixed Platforms.Build.0 = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug with FxCop|Win32.ActiveCfg = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug with FxCop|x64.ActiveCfg = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|Win32.Build.0 = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|x64.ActiveCfg = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|x64.Build.0 = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release with FxCop|Mixed Platforms.ActiveCfg = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release with FxCop|Mixed Platforms.Build.0 = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release with FxCop|Win32.ActiveCfg = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release with FxCop|x64.ActiveCfg = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|Win32.ActiveCfg = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|x64.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432} = {C1C81F4C-DADE-4971-86EF-2F04ED06CBB9} + {081B37CA-E9FF-4F68-94A5-57BB43145FDC} = {C1C81F4C-DADE-4971-86EF-2F04ED06CBB9} + {06E0C795-735A-425F-9864-1308612F19C1} = {C1C81F4C-DADE-4971-86EF-2F04ED06CBB9} + {06E0C795-735A-425F-9864-13086BAF18C1} = {C1C81F4C-DADE-4971-86EF-2F04ED06CBB9} + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} = {F14E0BE0-1089-484D-99FF-E04409D0115B} + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} = {F14E0BE0-1089-484D-99FF-E04409D0115B} + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} = {F14E0BE0-1089-484D-99FF-E04409D0115B} + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} = {94A89884-7932-49BE-B395-E623DB5F3519} + {32D3BC0C-7DCB-4132-866D-A5060E16066B} = {94A89884-7932-49BE-B395-E623DB5F3519} + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} = {94A89884-7932-49BE-B395-E623DB5F3519} + {B28ADA8B-BD7E-4C11-8298-C39F7C456365} = {94A89884-7932-49BE-B395-E623DB5F3519} + {453FF234-24EC-4CC3-83DA-6D6C54388899} = {94A89884-7932-49BE-B395-E623DB5F3519} + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664} = {3161B5E3-0EF7-4B3B-82DB-D45A50839913} + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E} = {3161B5E3-0EF7-4B3B-82DB-D45A50839913} + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3} = {63FF7062-7EDA-4F9D-AB30-E5C5F31DCF53} + {318D173C-3D21-472C-905F-C37D7E7A66EC} = {63FF7062-7EDA-4F9D-AB30-E5C5F31DCF53} + {F0D30ED8-C165-4179-AA23-997AC0920867} = {63FF7062-7EDA-4F9D-AB30-E5C5F31DCF53} + {4D66DA5F-4D61-4CFB-889E-7F62AB3AC089} = {63FF7062-7EDA-4F9D-AB30-E5C5F31DCF53} + {F235C99B-05D2-4A53-902C-E1691D7511B8} = {63FF7062-7EDA-4F9D-AB30-E5C5F31DCF53} + {63FAFC43-88BA-48F6-80A6-F164B618A72A} = {F0D30ED8-C165-4179-AA23-997AC0920867} + {790B3091-7B27-4062-B790-6FDE8C69EB7C} = {F0D30ED8-C165-4179-AA23-997AC0920867} + {9AE5997A-8072-41C0-9324-BC886BFD6C66} = {4D66DA5F-4D61-4CFB-889E-7F62AB3AC089} + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA} = {4D66DA5F-4D61-4CFB-889E-7F62AB3AC089} + {980315C4-115D-482E-A484-4AFDD0A4B569} = {4D66DA5F-4D61-4CFB-889E-7F62AB3AC089} + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6} = {4D66DA5F-4D61-4CFB-889E-7F62AB3AC089} + {D0E3965D-10DF-45FC-A05F-39D67EDA760E} = {4D66DA5F-4D61-4CFB-889E-7F62AB3AC089} + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75} = {4D66DA5F-4D61-4CFB-889E-7F62AB3AC089} + {43D713E1-7B99-4C89-8B31-A2210392B284} = {4D66DA5F-4D61-4CFB-889E-7F62AB3AC089} + {CE251D57-5072-44E7-8238-C977F610BBD1} = {4D66DA5F-4D61-4CFB-889E-7F62AB3AC089} + {9DCD7874-4D07-413B-9E64-AA947B11D9FC} = {4D66DA5F-4D61-4CFB-889E-7F62AB3AC089} + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1} = {4D66DA5F-4D61-4CFB-889E-7F62AB3AC089} + {F14E0BE0-1089-484D-99FF-E04409D0115B} = {5A8A64BA-5077-4FE7-A38B-457AC54A1EF0} + {94A89884-7932-49BE-B395-E623DB5F3519} = {5A8A64BA-5077-4FE7-A38B-457AC54A1EF0} + {C1C81F4C-DADE-4971-86EF-2F04ED06CBB9} = {E0E9FDB3-D28B-4992-ADC5-4095B901AC3D} + {63FF7062-7EDA-4F9D-AB30-E5C5F31DCF53} = {E0E9FDB3-D28B-4992-ADC5-4095B901AC3D} + {3161B5E3-0EF7-4B3B-82DB-D45A50839913} = {E0E9FDB3-D28B-4992-ADC5-4095B901AC3D} + {8E7A0308-30E3-433B-B0E7-9F559FD2F2A7} = {E0E9FDB3-D28B-4992-ADC5-4095B901AC3D} + {FB18204E-FA93-4C20-97BC-FFEE79E7CECC} = {E0E9FDB3-D28B-4992-ADC5-4095B901AC3D} + {EC58417E-2299-48CE-A844-AFEAD37F4D4F} = {8E7A0308-30E3-433B-B0E7-9F559FD2F2A7} + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E} = {EC58417E-2299-48CE-A844-AFEAD37F4D4F} + {7F4B3540-1E98-48D5-A826-78E4755ACCD5} = {EC58417E-2299-48CE-A844-AFEAD37F4D4F} + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3} = {EC58417E-2299-48CE-A844-AFEAD37F4D4F} + {D691CAEB-8635-436B-9987-403047DA06AC} = {FB18204E-FA93-4C20-97BC-FFEE79E7CECC} + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/CS/DXGI/EnumAdapters/EnumAdapters.csproj b/source/Samples/DirectX/CS/DXGI/EnumAdapters/EnumAdapters.csproj new file mode 100644 index 00000000..451c3cf2 --- /dev/null +++ b/source/Samples/DirectX/CS/DXGI/EnumAdapters/EnumAdapters.csproj @@ -0,0 +1,71 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {D691CAEB-8635-436B-9987-403047DA06AC} + Exe + Properties + EnumAdapters + EnumAdapters + v3.5 + 512 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + DirectX + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/DXGI/EnumAdapters/EnumAdapters.sln b/source/Samples/DirectX/CS/DXGI/EnumAdapters/EnumAdapters.sln new file mode 100644 index 00000000..ed01439d --- /dev/null +++ b/source/Samples/DirectX/CS/DXGI/EnumAdapters/EnumAdapters.sln @@ -0,0 +1,42 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EnumAdapters", "EnumAdapters.csproj", "{D691CAEB-8635-436B-9987-403047DA06AC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|Any CPU.Build.0 = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|Win32.ActiveCfg = Release|Any CPU + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/CS/DXGI/EnumAdapters/Program.cs b/source/Samples/DirectX/CS/DXGI/EnumAdapters/Program.cs new file mode 100644 index 00000000..67477f37 --- /dev/null +++ b/source/Samples/DirectX/CS/DXGI/EnumAdapters/Program.cs @@ -0,0 +1,53 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using Microsoft.WindowsAPICodePack.DirectX.Graphics; +using System; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; + +namespace EnumAdapters +{ + class Program + { + static void Main(string[] args) + { + Factory1 factory = Factory1.Create(); + + Console.WriteLine("Adapter(s) Information:"); + foreach (Adapter1 adapter in factory.Adapters) + { + AdapterDescription description = adapter.Description; + AdapterDriverVersion? version; + + Console.WriteLine("Description: {0} ", description.Description); + Console.WriteLine("\tDedicated System Memory: {0} ", description.DedicatedSystemMemory); + Console.WriteLine("\tDedicated Video Memory: {0} ", description.DedicatedVideoMemory); + Console.WriteLine("\tLuid: {0:X}:{1:X} ", description.AdapterLuid.HighPart, description.AdapterLuid.LowPart); + Console.WriteLine("\tDevice Id: {0:X} ", description.DeviceId); + Console.WriteLine("\tRevision: {0:X} ", description.Revision); + + Console.WriteLine(); + version = adapter.CheckDeviceSupport(DeviceType.Direct3D11); + Console.WriteLine("\tSupports Direct3D 11.0 Device: {0}", version != null); + version = adapter.CheckDeviceSupport(DeviceType.Direct3D10Point1); + Console.WriteLine("\tSupports Direct3D 10.1 Device: {0}", version != null); + version = adapter.CheckDeviceSupport(DeviceType.Direct3D10); + Console.WriteLine("\tSupports Direct3D 10.0 Device: {0}", version != null); + Console.WriteLine(); + + Console.WriteLine("\tMonitor(s) Information:"); + foreach (Output output in adapter.Outputs) + { + OutputDescription outDesc = output.Description; + + Console.WriteLine("\tDevice Name: {0} ", outDesc.DeviceName); + Console.WriteLine("\t\tAttached To Desktop: {0} ", outDesc.AttachedToDesktop); + Console.WriteLine("\t\tRotation Mode: {0} ", outDesc.Rotation); + Console.WriteLine("\t\tMonitor Coordinates: Top: {0}, Left: {1}, Right: {2}, Bottom: {3} ", outDesc.Monitor.MonitorCoordinates.Top, outDesc.Monitor.MonitorCoordinates.Left, outDesc.Monitor.MonitorCoordinates.Right, outDesc.Monitor.MonitorCoordinates.Bottom); + Console.WriteLine("\t\tWorking Coordinates: Top: {0}, left: {1}, Right: {2}, Bottom: {3} ", outDesc.Monitor.WorkCoordinates.Top, outDesc.Monitor.WorkCoordinates.Left, outDesc.Monitor.WorkCoordinates.Right, outDesc.Monitor.WorkCoordinates.Bottom); + } + } + Console.WriteLine("Press any key to continue..."); + Console.ReadKey(); + } + } +} diff --git a/source/Samples/DirectX/CS/DXGI/EnumAdapters/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/DXGI/EnumAdapters/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..cf684c5b --- /dev/null +++ b/source/Samples/DirectX/CS/DXGI/EnumAdapters/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("EnumAdapters")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("3fe213c8-6867-4819-a6da-0745cd995eb7")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct2D/ChartDemo/App.xaml b/source/Samples/DirectX/CS/Direct2D/ChartDemo/App.xaml new file mode 100644 index 00000000..6b5d29ab --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/ChartDemo/App.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct2D/ChartDemo/App.xaml.cs b/source/Samples/DirectX/CS/Direct2D/ChartDemo/App.xaml.cs new file mode 100644 index 00000000..5a73fc72 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/ChartDemo/App.xaml.cs @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Windows; + +namespace Direct2D_Demo_WPF +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/ChartDemo/ChartDemo.csproj b/source/Samples/DirectX/CS/Direct2D/ChartDemo/ChartDemo.csproj new file mode 100644 index 00000000..f87d3a6a --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/ChartDemo/ChartDemo.csproj @@ -0,0 +1,115 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {06E0C795-735A-425F-9864-13086BAF18C1} + WinExe + Properties + ChartDemo + ChartDemo + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + + 3.5 + + + 3.5 + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + Window1.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/ChartDemo/ChartDemo.sln b/source/Samples/DirectX/CS/Direct2D/ChartDemo/ChartDemo.sln new file mode 100644 index 00000000..57249d89 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/ChartDemo/ChartDemo.sln @@ -0,0 +1,55 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChartDemo", "ChartDemo.csproj", "{06E0C795-735A-425F-9864-13086BAF18C1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|Any CPU.Build.0 = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|Win32.ActiveCfg = Release|Any CPU + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/CS/Direct2D/ChartDemo/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct2D/ChartDemo/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..e12e78ae --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/ChartDemo/Properties/AssemblyInfo.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Direct2D_Demo_WPF")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct2D/ChartDemo/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct2D/ChartDemo/Properties/Resources.Designer.cs new file mode 100644 index 00000000..071931cb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/ChartDemo/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Direct2D_Demo_WPF.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Direct2D_Demo_WPF.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/ChartDemo/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct2D/ChartDemo/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/ChartDemo/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/ChartDemo/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct2D/ChartDemo/Properties/Settings.Designer.cs new file mode 100644 index 00000000..3dc64c32 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/ChartDemo/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Direct2D_Demo_WPF.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/ChartDemo/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct2D/ChartDemo/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/ChartDemo/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/ChartDemo/Window1.xaml b/source/Samples/DirectX/CS/Direct2D/ChartDemo/Window1.xaml new file mode 100644 index 00000000..db4d9803 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/ChartDemo/Window1.xaml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct2D/ChartDemo/Window1.xaml.cs b/source/Samples/DirectX/CS/Direct2D/ChartDemo/Window1.xaml.cs new file mode 100644 index 00000000..b8799740 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/ChartDemo/Window1.xaml.cs @@ -0,0 +1,243 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows; +using Microsoft.WindowsAPICodePack.DirectX.Controls; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; +using Microsoft.WindowsAPICodePack.DirectX.DirectWrite; + +using DWrite = Microsoft.WindowsAPICodePack.DirectX.DirectWrite; + +namespace Microsoft.WindowsAPICodePack.Samples +{ + /// + /// Interaction logic for Window1.xaml + /// + public partial class Window1 : Window + { + D2DFactory d2dFactory; + DWriteFactory dwriteFactory; + HwndRenderTarget renderTarget; + SolidColorBrush blackBrush; + BitmapBrush gridPatternBitmapBrush; + SolidColorBrush solidBrush1; + SolidColorBrush solidBrush2; + SolidColorBrush solidBrush3; + LinearGradientBrush linearGradientBrush; + RadialGradientBrush radialGradientBrush; + TextFormat textFormat; + TextLayout textLayout; + + int x1 = 70, x2 = 82, x3 = 25, x4 = 75, x5 = 54; + + public Window1() + { + InitializeComponent(); + host.Loaded += new RoutedEventHandler(host_Loaded); + host.SizeChanged += new SizeChangedEventHandler(host_SizeChanged); + } + + + void host_Loaded(object sender, RoutedEventArgs e) + { + // Create the D2D Factory + d2dFactory = D2DFactory.CreateFactory(D2DFactoryType.SingleThreaded); + + // Create the DWrite Factory + dwriteFactory = DWriteFactory.CreateFactory(); + + // Start rendering now! + host.Render = Render; + host.InvalidateVisual(); + } + + void host_SizeChanged(object sender, SizeChangedEventArgs e) + { + if (renderTarget != null) + { + // Resize the render targrt to the actual host size + renderTarget.Resize(new SizeU((uint)(host.ActualWidth), (uint)(host.ActualHeight))); + } + InvalidateVisual(); + } + + /// + /// This method creates the render target and all associated D2D and DWrite resources + /// + void CreateDeviceResources() + { + // Only calls if resources have not been initialize before + if (renderTarget == null) + { + // The text format + textFormat = dwriteFactory.CreateTextFormat("Bodoni MT", 24, DWrite.FontWeight.Normal, DWrite.FontStyle.Italic, DWrite.FontStretch.Normal); + + // Create the render target + SizeU size = new SizeU((uint)host.ActualWidth, (uint)host.ActualHeight); + RenderTargetProperties props = new RenderTargetProperties(); + HwndRenderTargetProperties hwndProps = new HwndRenderTargetProperties(host.Handle, size, PresentOptions.None); + renderTarget = d2dFactory.CreateHwndRenderTarget(props, hwndProps); + + // A black brush to be used for drawing text + ColorF cf = new ColorF(0, 0, 0, 1); + blackBrush = renderTarget.CreateSolidColorBrush(cf); + + // Create a linear gradient. + GradientStop[] stops = + { + new GradientStop(1, new ColorF(1f, 0f, 0f, 0.25f)), + new GradientStop(0, new ColorF(0f, 0f, 1f, 1f)) + }; + + GradientStopCollection pGradientStops = renderTarget.CreateGradientStopCollection(stops, Gamma.Linear, ExtendMode.Wrap); + LinearGradientBrushProperties gradBrushProps = new LinearGradientBrushProperties(new Point2F(50, 25), new Point2F(25, 50)); + + linearGradientBrush = renderTarget.CreateLinearGradientBrush(gradBrushProps, pGradientStops); + + gridPatternBitmapBrush = CreateGridPatternBrush(renderTarget); + + solidBrush1 = renderTarget.CreateSolidColorBrush(new ColorF(0.3F, 0.5F, 0.65F, 0.25F)); + solidBrush2 = renderTarget.CreateSolidColorBrush(new ColorF(0.0F, 0.0F, 0.65F, 0.5F)); + solidBrush3 = renderTarget.CreateSolidColorBrush(new ColorF(0.9F, 0.5F, 0.3F, 0.75F)); + + // Create a linear gradient. + stops[0] = new GradientStop(1, new ColorF(0f, 0f, 0f, 0.25f)); + stops[1] = new GradientStop(0, new ColorF(1f, 1f, 0.2f, 1f)); + GradientStopCollection radiantGradientStops = renderTarget.CreateGradientStopCollection(stops, Gamma.Linear, ExtendMode.Wrap); + + RadialGradientBrushProperties radialBrushProps = new RadialGradientBrushProperties(new Point2F(25, 25), new Point2F(0, 0), 10, 10); + radialGradientBrush = renderTarget.CreateRadialGradientBrush(radialBrushProps, radiantGradientStops); + } + } + + /// + /// Create the grid pattern (squares) brush + /// + /// + /// + BitmapBrush CreateGridPatternBrush(RenderTarget target) + { + + // Create a compatible render target. + BitmapRenderTarget compatibleRenderTarget = + target.CreateCompatibleRenderTarget(CompatibleRenderTargetOptions.None, new SizeF(10.0f, 10.0f)); + + //// Draw a pattern. + SolidColorBrush spGridBrush = compatibleRenderTarget.CreateSolidColorBrush(new ColorF(0.93f, 0.94f, 0.96f, 1.0f)); + compatibleRenderTarget.BeginDraw(); + compatibleRenderTarget.FillRectangle(new RectF(0.0f, 0.0f, 10.0f, 1.0f), spGridBrush); + compatibleRenderTarget.FillRectangle(new RectF(0.0f, 0.1f, 1.0f, 10.0f), spGridBrush); + compatibleRenderTarget.EndDraw(); + + //// Retrieve the bitmap from the render target. + D2DBitmap spGridBitmap; + spGridBitmap = compatibleRenderTarget.Bitmap; + + //// Choose the tiling mode for the bitmap brush. + BitmapBrushProperties brushProperties = new BitmapBrushProperties(ExtendMode.Wrap, ExtendMode.Wrap, BitmapInterpolationMode.Linear); + //// Create the bitmap brush. + return renderTarget.CreateBitmapBrush(spGridBitmap, brushProperties); + } + + private void Render() + { + + CreateDeviceResources(); + + if (renderTarget.IsOccluded) + return; + + SizeF renderTargetSize = renderTarget.Size; + + renderTarget.BeginDraw(); + + renderTarget.Clear(new ColorF(1, 1, 1, 0)); + + // Paint a grid background. + RectF rf = new RectF(0.0f, 0.0f, renderTargetSize.Width, renderTargetSize.Height); + renderTarget.FillRectangle(rf, gridPatternBitmapBrush); + + float curLeft = 0; + + rf = new RectF( + curLeft, + renderTargetSize.Height, + (curLeft + renderTargetSize.Width / 5.0F), + renderTargetSize.Height - renderTargetSize.Height * ((float)x1 / 100.0F)); + + renderTarget.FillRectangle(rf, solidBrush1); + + textLayout = dwriteFactory.CreateTextLayout(String.Format(" {0}%", x1), textFormat, renderTargetSize.Width / 5.0F, 30); + + renderTarget.DrawTextLayout( + new Point2F(curLeft, renderTargetSize.Height - 30), + textLayout, + blackBrush); + + curLeft = (curLeft + renderTargetSize.Width / 5.0F); + rf = new RectF( + curLeft, + renderTargetSize.Height, + (curLeft + renderTargetSize.Width / 5.0F), + renderTargetSize.Height - renderTargetSize.Height * ((float)x2 / 100.0F)); + renderTarget.FillRectangle(rf, radialGradientBrush); + renderTarget.DrawText( + String.Format(" {0}%", x2), + textFormat, + new RectF(curLeft, renderTargetSize.Height - 30, (curLeft + renderTargetSize.Width / 5.0F), renderTargetSize.Height), blackBrush); + + curLeft = (curLeft + renderTargetSize.Width / 5.0F); + rf = new RectF( + curLeft, + renderTargetSize.Height, + (curLeft + renderTargetSize.Width / 5.0F), + renderTargetSize.Height - renderTargetSize.Height * ((float)x3 / 100.0F)); + renderTarget.FillRectangle(rf, solidBrush3); + renderTarget.DrawText( + String.Format(" {0}%", x3), + textFormat, + new RectF(curLeft, renderTargetSize.Height - 30, (curLeft + renderTargetSize.Width / 5.0F), renderTargetSize.Height), blackBrush); + + curLeft = (curLeft + renderTargetSize.Width / 5.0F); + rf = new RectF( + curLeft, + renderTargetSize.Height, + (curLeft + renderTargetSize.Width / 5.0F), + renderTargetSize.Height - renderTargetSize.Height * ((float)x4 / 100.0F)); + renderTarget.FillRectangle(rf, linearGradientBrush); + renderTarget.DrawText( + String.Format(" {0}%", x4), + textFormat, + new RectF(curLeft, renderTargetSize.Height - 30, (curLeft + renderTargetSize.Width / 5.0F), renderTargetSize.Height), blackBrush); + + + curLeft = (curLeft + renderTargetSize.Width / 5.0F); + rf = new RectF( + curLeft, + renderTargetSize.Height, + (curLeft + renderTargetSize.Width / 5.0F), + renderTargetSize.Height - renderTargetSize.Height * ((float)x5 / 100.0F)); + renderTarget.FillRectangle(rf, solidBrush2); + renderTarget.DrawText( + String.Format(" {0}%", x5), + textFormat, + new RectF(curLeft, renderTargetSize.Height - 30, (curLeft + renderTargetSize.Width / 5.0F), renderTargetSize.Height), blackBrush); + + renderTarget.EndDraw(); + + } + + private void generate_Data(object sender, RoutedEventArgs e) + { + Random rand = new Random((int)Environment.TickCount); + x1 = rand.Next(100); + x2 = rand.Next(100); + x3 = rand.Next(100); + x4 = rand.Next(100); + x5 = rand.Next(100); + + Render(); + } + + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/BitmapShape.cs b/source/Samples/DirectX/CS/Direct2D/D2DShapes/BitmapShape.cs new file mode 100644 index 00000000..6681dbfb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/D2DShapes/BitmapShape.cs @@ -0,0 +1,79 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.ComponentModel; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; + +namespace D2DShapes +{ + internal class BitmapShape : DrawingShape + { + #region Fields + private RectF destRect; + private RectF sourceRect; + private bool drawSection; + private float opacity; + #endregion + + #region Properties + [TypeConverter(typeof(ExpandableObjectConverter))] + public RectF DestRect + { + get { return destRect; } + set { destRect = value; } + } + + [TypeConverter(typeof(ExpandableObjectConverter))] + public RectF SourceRect + { + get { return sourceRect; } + set { sourceRect = value; } + } + + public bool DrawSection + { + get { return drawSection; } + set { drawSection = value; } + } + + public float Opacity + { + get { return opacity; } + set { opacity = value; } + } + #endregion + + public BitmapShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap) + : base(initialRenderTarget, random, d2DFactory, bitmap) + { + DestRect = RandomRect(CanvasWidth, CanvasHeight); + opacity = RandomOpacity(); + DrawSection = Random.NextDouble() < 0.25; + if (drawSection) + SourceRect = RandomRect( + Bitmap.PixelSize.Width, + Bitmap.PixelSize.Height); + } + + protected internal override void ChangeRenderTarget(RenderTarget newRenderTarget) + { + //no rendertarget dependent members + } + + protected internal override void Draw(RenderTarget renderTarget) + { + if (DrawSection) + renderTarget.DrawBitmap(Bitmap, opacity, BitmapInterpolationMode.Linear, DestRect, SourceRect); + else + renderTarget.DrawBitmap(Bitmap, opacity, BitmapInterpolationMode.Linear, DestRect); + } + + public override bool HitTest(Point2F point) + { + return DestRect.Top <= point.Y && + DestRect.Bottom >= point.Y && + DestRect.Left <= point.X && + DestRect.Right >= point.X; + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/BitmapUtilities.cs b/source/Samples/DirectX/CS/Direct2D/D2DShapes/BitmapUtilities.cs new file mode 100644 index 00000000..959e9473 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/D2DShapes/BitmapUtilities.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; +using System.IO; + +namespace D2DShapes +{ + internal class BitmapUtilities + { + internal static D2DBitmap LoadBitmapFromFile( + RenderTarget renderTarget, + ImagingFactory wicFactory, + string fileName) + { + BitmapDecoder decoder = wicFactory.CreateDecoderFromFileName(fileName, DesiredAccess.Read, DecodeMetadataCacheOption.OnLoad); + D2DBitmap ret = CreateBitmapFromDecoder(renderTarget, wicFactory, decoder); + decoder.Dispose(); + return ret; + } + + internal static D2DBitmap LoadBitmapFromStream( + RenderTarget renderTarget, + ImagingFactory wicFactory, + Stream ioStream) + { + BitmapDecoder decoder = wicFactory.CreateDecoderFromStream(ioStream, DecodeMetadataCacheOption.OnLoad); + D2DBitmap ret = CreateBitmapFromDecoder(renderTarget, wicFactory, decoder); + decoder.Dispose(); + return ret; + } + + private static D2DBitmap CreateBitmapFromDecoder(RenderTarget renderTarget, ImagingFactory wicFactory, BitmapDecoder decoder) + { + // Create the initial frame. + BitmapFrameDecode source = decoder.GetFrame(0); + // Convert the image format to 32bppPBGRA -- which Direct2D expects. + FormatConverter converter = wicFactory.CreateFormatConverter(); + converter.Initialize( + source.ToBitmapSource(), + PixelFormats.Pbgra32Bpp, + BitmapDitherType.None, + BitmapPaletteType.MedianCut + ); + + // Create a Direct2D bitmap from the WIC bitmap. + D2DBitmap ret = renderTarget.CreateBitmapFromWicBitmap(converter.ToBitmapSource()); + + converter.Dispose(); + source.Dispose(); + + return ret; + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/D2DShapes.csproj b/source/Samples/DirectX/CS/Direct2D/D2DShapes/D2DShapes.csproj new file mode 100644 index 00000000..1744d821 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/D2DShapes/D2DShapes.csproj @@ -0,0 +1,97 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {32D3BC0C-7DCB-4132-866D-A5060E16066B} + Library + Properties + D2DShapes + D2DShapes + v3.5 + 512 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + + 3.5 + + + + + + + + + + + UserControl + + + D2DShapesControlWithButtons.cs + + + + + + + + + + + + UserControl + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + + + D2DShapesControlWithButtons.cs + Designer + + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/D2DShapesControl.cs b/source/Samples/DirectX/CS/Direct2D/D2DShapes/D2DShapesControl.cs new file mode 100644 index 00000000..f5fa3387 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/D2DShapes/D2DShapesControl.cs @@ -0,0 +1,1245 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Threading; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.DirectX; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; +using Microsoft.WindowsAPICodePack.DirectX.DirectWrite; +using Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; + +namespace D2DShapes +{ + /// + /// A control for managing a list and rendering DrawingShape objects + /// + public sealed class D2DShapesControl : UserControl + { + #region enum RenderModes + public enum RenderModes + { + /// + /// Draw through device context in OnPaint (when the window gets invalidated) + /// + DCRenderTarget = 0, + /// + /// Use BitmapRenderTarget to draw on updates, copy the bitmap to DCRenderTarget in OnPaint (when the window gets invalidated) + /// + BitmapRenderTargetOnPaint, + /// + /// Use BitmapRenderTarget to draw on updates, copy the bitmap to HwndRenderTarget in real time + /// + BitmapRenderTargetRealTime, + /// + /// Draw directly on window in real time + /// + HwndRenderTarget, + }; + #endregion + + #region Fields + //fields for shared factory use + internal static D2DFactory sharedD2DFactory; + internal static ImagingFactory sharedWicFactory; + internal static DWriteFactory sharedDwriteFactory; + internal static object sharedSyncObject = new object(); + internal static int sharedRefCount; + + //object used for synchronization, so shape list changes, (de)initialization, configuration changes and rendering are not done concurrently + private readonly Object renderSyncObject; + + //factory objects + internal D2DFactory d2DFactory; + internal ImagingFactory wicFactory; + internal DWriteFactory dwriteFactory; + + //common random object + internal Random random = new Random(Environment.TickCount + seedDelta++); + //used to have different random objects for all instances of this class + private static int seedDelta; + + //render target used in real time rendering modes (can also be used OnPaint, but does not use a device context) + private HwndRenderTarget hwndRenderTarget; + //compatible bitmap that is used in cached modes, in which only changes to the image are drawn to the bitmap and the bitmap is drawn to screen when needed + private BitmapRenderTarget bitmapRenderTarget; + //device context (DC) render target - used with the Graphics object to render to DC + private DCRenderTarget dcRenderTarget; + + //shapes to be drawn + private readonly List drawingShapes = new List(); + //stack of shapes taken off the drawingShapes list that could be thrown back there + private readonly Stack peelings = new Stack(); + + //fields for FPS calculations + private int lastTickCount; + private int frameCount; + + //various statistics that invoke StatsChanged when they are updated + private readonly Dictionary stats = new Dictionary(); + //statistics as a string + public string Stats = ""; + + //GDI brushes used to draw background and stub text on a non-initialized control + private System.Drawing.Brush backgroundBrush = SystemBrushes.Control; + private System.Drawing.Brush foregroundBrush = SystemBrushes.ControlText; + + //object state management variables + private bool isInitialized; + private bool isInitializing; + private bool disposed; + + //background render thread + private readonly Thread renderThread; + //reset event for ending the render thread + private readonly ManualResetEvent killThread; + //delegate for rendering in background + public delegate void RenderHandler(); + #endregion + + #region Properties + #region Render + private RenderHandler render; + /// + /// Gets or sets the handler of the render event for background rendering thread in real time modes. + /// + /// The render. + public RenderHandler Render + { + get + { + lock (renderSyncObject) + { + return render; + } + } + set + { + lock (renderSyncObject) + { + render = value; + } + } + } + #endregion + + #region IsInitialized + /// + /// Gets a value indicating whether this instance is initialized. + /// + /// + /// true if this instance is initialized; otherwise, false. + /// + public bool IsInitialized + { + get { return isInitialized && + d2DFactory != null && + d2DFactory.NativeInterface != IntPtr.Zero; + } + } + #endregion + + #region StatsChanged + private event EventHandler statsChanged; + /// + /// Occurs after statistics change (eg. when shapes are added/removed) + /// + public event EventHandler StatsChanged + { + add + { + statsChanged += value; + } + remove + { + statsChanged -= value; + } + } + #endregion + + #region RenderMode + private RenderModes renderMode; + /// + /// Gets or sets the render mode. + /// See RenderModes enum description for descriptions of particular modes implemented + /// + /// The render mode. + public RenderModes RenderMode + { + get { return renderMode; } + set + { + SetRenderMode(value); + } + } + #endregion + + #region UsingCompatibleRenderTarget + /// + /// Gets a value indicating whether a compatible render target bitmap is used for cached rendering. + /// + /// + /// true if [using compatible render target]; otherwise, false. + /// + private bool UsingCompatibleRenderTarget + { + get + { + return renderMode == RenderModes.BitmapRenderTargetOnPaint || + renderMode == RenderModes.BitmapRenderTargetRealTime; + } + } + #endregion + + #region RenderTarget + /// + /// render target to use when drawing shapes + /// + internal RenderTarget RenderTarget + { + get + { + lock (renderSyncObject) + { + switch (renderMode) + { + case RenderModes.BitmapRenderTargetOnPaint: + case RenderModes.BitmapRenderTargetRealTime: + return bitmapRenderTarget; + case RenderModes.DCRenderTarget: + return dcRenderTarget; + default: + return hwndRenderTarget; + } + } + } + } + #endregion + + #region BackColorF + private ColorF backColorF; + /// + /// Gets the (float) back color used for clearing the background - it is dependent on the BackColor property. + /// + /// The back color F. + private ColorF BackColorF + { + get + { + return backColorF; + } + } + #endregion + + #region Bitmap + private D2DBitmap bitmap; + /// + /// Gets the bitmap shared among shape objects. Loads the bitmap if not initialized and rendertarget and wicFactory are available. + /// Set bitmap to null to reload it after changing the render target + /// + /// The bitmap. + internal D2DBitmap Bitmap + { + get + { + if (bitmap == null && RenderTarget != null && wicFactory != null) + { + using (Stream stream = typeof(D2DShapesControl).Assembly.GetManifestResourceStream("D2DShapes.Peacock.jpg")) + bitmap = BitmapUtilities.LoadBitmapFromStream(RenderTarget, wicFactory, stream); + } + return bitmap; + } + } + #endregion + + #region Fps + /// + /// Gets or sets the number of frames drawn per second. + /// Is updated when the image is redrawn after at least a second since the last calculation. + /// See CalculateFPS(). + /// + /// The FPS. + public float Fps { get; private set; } + #endregion + + #region FpsChanged + private event EventHandler fpsChanged; + /// + /// Occurs when Fps property value changes. + /// + public event EventHandler FpsChanged + { + add + { + fpsChanged += value; + } + remove + { + fpsChanged -= value; + } + } + #endregion + #endregion + + #region D2DShapesControl() - CTOR + public D2DShapesControl(IContainer components) + { + components.Add(this); + SetStyle(ControlStyles.UserPaint, true); + SetStyle(ControlStyles.AllPaintingInWmPaint, true); + UpdateStyles(); + + backColorF = new ColorF( + BackColor.R / 256f, + BackColor.G / 256f, + BackColor.B / 256f, + 1.0f); + + //Initialize the background render thread and synchronization objects + renderSyncObject = new object(); + killThread = new ManualResetEvent(false); + ThreadStart ts = RenderThreadProcedure; + renderThread = new Thread( ts ); + renderThread.Start(); + } + #endregion + + #region Methods + #region WndProc() + protected override void WndProc(ref Message m) + { + //kill and wait for render thread to complete when window gets destroyed + if (m.Msg == 0x0002/*WM_DESTROY*/ ) + { + killThread.Set(); + renderThread.Join(); + } + base.WndProc(ref m); + } + #endregion + + #region OnParentChanged() + /// + /// Stop rendering if removed from a parent control + /// + /// An that contains the event data. + protected override void OnParentChanged(EventArgs e) + { + lock (renderSyncObject) + { + if (Parent == null) + render = null; + } + base.OnParentChanged(e); + } + #endregion + + #region Dispose() + /// + /// Dispose of resources (IDisposable implementation) + /// + /// true to release both managed and unmanaged resources; false to release only unmanaged resources. + protected override void Dispose(bool disposing) + { + if (disposing && !disposed) + { + lock (renderSyncObject) + { + render = null; + + lock (sharedSyncObject) + { + if (sharedD2DFactory != null && d2DFactory == sharedD2DFactory) + sharedRefCount--; + + if (d2DFactory != null && d2DFactory != sharedD2DFactory) + d2DFactory.Dispose(); + d2DFactory = null; + + if (dwriteFactory != null && dwriteFactory != sharedDwriteFactory) + dwriteFactory.Dispose(); + dwriteFactory = null; + + if (wicFactory != null && wicFactory != sharedWicFactory) + wicFactory.Dispose(); + wicFactory = null; + + if (sharedRefCount == 0) + { + if (sharedD2DFactory != null) + sharedD2DFactory.Dispose(); + sharedD2DFactory = null; + + if (sharedDwriteFactory != null) + sharedDwriteFactory.Dispose(); + sharedDwriteFactory = null; + + if (sharedWicFactory != null) + sharedWicFactory.Dispose(); + sharedWicFactory = null; + } + } + + foreach (DrawingShape shape in drawingShapes) + { + shape.Dispose(); + } + + if (bitmap != null) + bitmap.Dispose(); + bitmap = null; + + if (dcRenderTarget != null) + dcRenderTarget.Dispose(); + dcRenderTarget = null; + if (bitmapRenderTarget != null) + bitmapRenderTarget.Dispose(); + bitmapRenderTarget = null; + if (hwndRenderTarget != null) + hwndRenderTarget.Dispose(); + hwndRenderTarget = null; + + + disposed = true; + } + } + base.Dispose(disposing); + } + #endregion + + #region Initialize() + /// + /// Initializes rendering. + /// + public void Initialize() + { + lock (renderSyncObject) + { + isInitializing = true; + CreateFactories(); + CreateDeviceResources(); + isInitializing = false; + isInitialized = true; + } + } + #endregion + + #region CreateFactories() + private void CreateFactories() + { + //reuse factories except for random cases + if (random.NextDouble() < 0.5) + { + lock (sharedSyncObject) + { + if (sharedD2DFactory == null) + { + // Create the D2D Factory + sharedD2DFactory = D2DFactory.CreateFactory(D2DFactoryType.SingleThreaded); + + // Create the DWrite Factory + sharedDwriteFactory = DWriteFactory.CreateFactory(); + + // Create the WIC Factory + sharedWicFactory = ImagingFactory.Create(); + + Debug.Assert(sharedD2DFactory.NativeInterface != IntPtr.Zero); + Debug.Assert(sharedDwriteFactory.NativeInterface != IntPtr.Zero); + Debug.Assert(sharedWicFactory.NativeInterface != IntPtr.Zero); + } + sharedRefCount++; + } + d2DFactory = sharedD2DFactory; + dwriteFactory = sharedDwriteFactory; + wicFactory = sharedWicFactory; + Debug.Assert(d2DFactory.NativeInterface != IntPtr.Zero); + Debug.Assert(dwriteFactory.NativeInterface != IntPtr.Zero); + Debug.Assert(wicFactory.NativeInterface != IntPtr.Zero); + } + else + { + // Create the D2D Factory + d2DFactory = D2DFactory.CreateFactory(D2DFactoryType.Multithreaded); + + // Create the DWrite Factory + dwriteFactory = DWriteFactory.CreateFactory(); + + // Create the WIC Factory + wicFactory = ImagingFactory.Create(); + Debug.Assert(d2DFactory.NativeInterface != IntPtr.Zero); + Debug.Assert(dwriteFactory.NativeInterface != IntPtr.Zero); + Debug.Assert(wicFactory.NativeInterface != IntPtr.Zero); + } + } + + #endregion + + #region CreateDeviceResources() + /// + /// This method creates the render target and associated D2D and DWrite resources + /// + void CreateDeviceResources() + { + // Only calls if resources have not been initialize before + //if (RenderTarget != null) + // return; + SetRenderMode(renderMode); + } + #endregion + + #region SetRenderMode() + private void SetRenderMode(RenderModes rm) + { + lock (renderSyncObject) + { + renderMode = rm; + if (!IsInitialized && !isInitializing) + return; + + //clean up objects that will be invalid after RenderTarget change + if (dcRenderTarget != null) + { + dcRenderTarget.Dispose(); + dcRenderTarget = null; + } + if (hwndRenderTarget != null) + { + hwndRenderTarget.Dispose(); + hwndRenderTarget = null; + } + if (bitmapRenderTarget != null) + { + bitmapRenderTarget.Dispose(); + bitmapRenderTarget = null; + } + peelings.Clear(); + bitmap = null; //the bitmap created in dc render target can't be used in hwnd render target + + // Create the screen render target + var size = new SizeU((uint)ClientSize.Width, (uint)ClientSize.Height); + var props = new RenderTargetProperties + { + PixelFormat = new PixelFormat( + Format.B8G8R8A8UNorm, + AlphaMode.Ignore), + Usage = RenderTargetUsages.GdiCompatible + }; + + if (renderMode == RenderModes.DCRenderTarget || renderMode == RenderModes.BitmapRenderTargetOnPaint) + { + dcRenderTarget = d2DFactory.CreateDCRenderTarget(props); + if (renderMode == RenderModes.BitmapRenderTargetOnPaint) + { + bitmapRenderTarget = + dcRenderTarget.CreateCompatibleRenderTarget( + CompatibleRenderTargetOptions.GdiCompatible, + new Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeF(ClientSize.Width, ClientSize.Height)); + } + render = null; + } + else + { + hwndRenderTarget = d2DFactory.CreateHwndRenderTarget( + props, + new HwndRenderTargetProperties(Handle, size, Microsoft.WindowsAPICodePack.DirectX.Direct2D1.PresentOptions.RetainContents)); + if (renderMode == RenderModes.BitmapRenderTargetRealTime) + { + bitmapRenderTarget = + hwndRenderTarget.CreateCompatibleRenderTarget( + CompatibleRenderTargetOptions.GdiCompatible, + new Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeF(ClientSize.Width, ClientSize.Height)); + } + render = RenderSceneInBackground; + } + + //move all shapes to new rendertarget and refresh + foreach (var shape in drawingShapes) + { + shape.Bitmap = Bitmap; + shape.RenderTarget = RenderTarget; + } + RefreshAll(); + } + } + #endregion + + #region OnResize() + protected override void OnResize(EventArgs e) + { + lock (renderSyncObject) + { + if (RenderTarget != null) + { + // Resize the render targrt to the actual host size + var size = new SizeU((uint)ClientSize.Width, (uint)ClientSize.Height); + if (hwndRenderTarget != null) + hwndRenderTarget.Resize(size); //need to resize hwndRenderTarget to make its size same as the window's size + if (renderMode == RenderModes.BitmapRenderTargetOnPaint) + { + bitmapRenderTarget.Dispose(); + bitmapRenderTarget = dcRenderTarget.CreateCompatibleRenderTarget(CompatibleRenderTargetOptions.GdiCompatible, new Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeF(ClientSize.Width, ClientSize.Height)); + bitmap = null; //the bitmap created in dc render target can't be used in hwnd render target + foreach (var shape in drawingShapes) + { + shape.Bitmap = Bitmap; + shape.RenderTarget = RenderTarget; + } + RefreshAll(); + } + else if (renderMode == RenderModes.BitmapRenderTargetRealTime) + { + Debug.Assert(hwndRenderTarget != null);//this should never be null considering the above + bitmapRenderTarget.Dispose(); + bitmapRenderTarget = hwndRenderTarget.CreateCompatibleRenderTarget(CompatibleRenderTargetOptions.GdiCompatible, new Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeF(ClientSize.Width, ClientSize.Height)); + bitmap = null; //the bitmap created in dc render target can't be used in hwnd render target + foreach (var shape in drawingShapes) + { + shape.Bitmap = Bitmap; + shape.RenderTarget = RenderTarget; + } + RefreshAll(); + } + } + } + base.OnResize(e); + } + #endregion + + #region OnBackColorChanged() + protected override void OnBackColorChanged(EventArgs e) + { + base.OnBackColorChanged(e); + backColorF = new ColorF( + BackColor.R / 256f, + BackColor.G / 256f, + BackColor.B / 256f, + 1.0f); + backgroundBrush = new SolidBrush(BackColor); + } + #endregion + + #region OnForeColorChanged() + protected override void OnForeColorChanged(EventArgs e) + { + base.OnForeColorChanged(e); + foregroundBrush = new SolidBrush(ForeColor); + } + #endregion + + #region OnPaintBackground() + protected override void OnPaintBackground(PaintEventArgs e) + { + if (!IsInitialized || DesignMode) + { + e.Graphics.FillRectangle(backgroundBrush, ClientRectangle); + } + } + #endregion + + #region OnPaint() + /// + /// for use with DcRenderTarget (though it would also work with HwndRenderTarget if GDI interop was not used) + /// + /// + protected override void OnPaint(PaintEventArgs e) + { + if (!IsInitialized || DesignMode) + { + e.Graphics.DrawString("D2DShapesControl", Font, foregroundBrush, (float)Width / 2, (float)Height / 2); + } + else + { + lock (renderSyncObject) + { + if (renderMode == RenderModes.DCRenderTarget || + renderMode == RenderModes.BitmapRenderTargetOnPaint) + { + if (dcRenderTarget == null) + return; + CalculateFPS(); + if (renderMode == RenderModes.DCRenderTarget) + { + //render scene directly to DC + dcRenderTarget.BindDC(e.Graphics.GetHdc(), new Rect(Left, Top, Right, Bottom)); + RenderScene(dcRenderTarget); + e.Graphics.ReleaseHdc(); + e.Graphics.DrawString(string.Format("OnPaint({0}) direct DC draw", DateTime.Now), Font, Brushes.White, 0, 2); + e.Graphics.DrawString(string.Format("OnPaint({0}) direct DC draw", DateTime.Now), Font, Brushes.Black, 1, 2); + } + else if (renderMode == RenderModes.BitmapRenderTargetOnPaint) + { + //draw bitmap cache of the shapes to DC + dcRenderTarget.BindDC(e.Graphics.GetHdc(), new Rect(Left, Top, Right, Bottom)); + dcRenderTarget.BeginDraw(); + dcRenderTarget.DrawBitmap(bitmapRenderTarget.Bitmap, 1.0f, + BitmapInterpolationMode.NearestNeighbor, + new RectF(0, 0, Width, Height)); + dcRenderTarget.EndDraw(); + e.Graphics.ReleaseHdc(); + e.Graphics.DrawString(string.Format("OnPaint({0}) DC DrawBitmap", DateTime.Now), Font, Brushes.White, 0, 2); + e.Graphics.DrawString(string.Format("OnPaint({0}) DC DrawBitmap", DateTime.Now), Font, Brushes.Black, 1, 2); + } + } + } + } + } + #endregion + + #region RenderThreadProcedure() + /// + /// The render thread procedure - calls. + /// + private void RenderThreadProcedure() + { + do + { + lock (renderSyncObject) + { + if (Render != null) + Render(); + } + if (Render == null) + Thread.Sleep(1); + } + while (killThread.WaitOne(0) == false); + } + #endregion + + #region RenderSceneInBackground() + //used with HwndRenderTarget + private void RenderSceneInBackground() + { + if (Parent == null || render == null) + return; + if (renderMode == RenderModes.HwndRenderTarget || + renderMode == RenderModes.BitmapRenderTargetRealTime) + { + if (hwndRenderTarget == null || hwndRenderTarget.IsOccluded) + return; + CalculateFPS(); + if (renderMode == RenderModes.HwndRenderTarget) + { + //render scene directly on the control + RenderScene(hwndRenderTarget); + } + else if (renderMode == RenderModes.BitmapRenderTargetRealTime) + { + //draw bitmap cache of the shapes to control + hwndRenderTarget.BeginDraw(); + hwndRenderTarget.DrawBitmap(bitmapRenderTarget.Bitmap, 1.0f, + BitmapInterpolationMode.NearestNeighbor, + new RectF(0, 0, Width, Height)); + hwndRenderTarget.EndDraw(); + } + } + } + #endregion + + #region RenderScene() + /// + /// Renders the scene to the given render target. + /// Clears the scene, then draws all shapes + /// + /// The render target. + private void RenderScene(RenderTarget renderTarget) + { + Cursor c = null; + if (renderMode != RenderModes.HwndRenderTarget) + { + c = Cursor; + Cursor = Cursors.WaitCursor; + } + renderTarget.BeginDraw(); + renderTarget.Clear(BackColorF); + + for (int i = 0; i < drawingShapes.Count; i++) + { + DrawingShape shape = drawingShapes[i]; + //tag with shape index for debugging + renderTarget.Tags = new Tags((ulong)i, 0); + shape.Draw(renderTarget); + } + Tags tags; + ErrorCode errorCode; + if (!renderTarget.TryEndDraw(out tags, out errorCode)) + { + Debug.WriteLine(String.Format("Failed EndDraw. Error: {0}, tag1: {1}, tag2: {2}, shape[{1}]: {3}", + errorCode, tags.Tag1, tags.Tag2, + (int)tags.Tag1 < drawingShapes.Count ? drawingShapes[(int)tags.Tag1].ToString() : "")); + } + if (renderMode != RenderModes.HwndRenderTarget) + Cursor = c; + } + #endregion + + #region RefreshCompatibleRenderTarget() + /// + /// Refreshes the compatible render target - the bitmap used for caching the scene + /// for quick rendering when the control is redrawn + /// + private void RefreshCompatibleRenderTarget() + { + RenderScene(bitmapRenderTarget); + } + #endregion + + #region AddToCompatibleRenderTarget() + /// + /// Adds a shape to compatible render target - avoids the need to redraw all shapes. + /// + /// The shape. + private void AddToCompatibleRenderTarget(DrawingShape shape) + { + lock (renderSyncObject) + { + bitmapRenderTarget.BeginDraw(); + shape.Draw(bitmapRenderTarget); + bitmapRenderTarget.EndDraw(); + } + } + #endregion + + #region CalculateFPS() + /// + /// Calculates Frames Per Second if at least a second passed since previous update. + /// Should be called whenever a frame is drawn on the control + /// + private void CalculateFPS() + { + int currentTickCount = Environment.TickCount; + int ticks = currentTickCount - lastTickCount; + if (ticks >= 1000) + { + Fps = (float)frameCount * 1000 / ticks; + frameCount = 0; + lastTickCount = currentTickCount; + BeginInvoke(new MethodInvoker(delegate + { + if (fpsChanged != null) + fpsChanged(this, EventArgs.Empty); + })); + } + frameCount++; + } + #endregion + + #region ClearShapes() + /// + /// Clears all the shapes and invalidates the control and bitmap cache if one exists. + /// + public void ClearShapes() + { + lock (renderSyncObject) + { + drawingShapes.Clear(); + stats.Clear(); + Stats = ""; + if (statsChanged != null) + statsChanged(this, EventArgs.Empty); + RefreshAll(); + } + } + #endregion + + #region PeelShape() + /// + /// Peels the shape from the end(top) of the list, + /// updates the render targets and puts the peeled shape to the stack of peelings. + /// + /// + internal DrawingShape PeelShape() + { + lock (renderSyncObject) + { + if (drawingShapes.Count == 0) + return null; + string statName = drawingShapes[drawingShapes.Count - 1].GetType().Name.Replace("Shape", " count"); + UpdateStats(statName, -1); + peelings.Push(drawingShapes[drawingShapes.Count - 1]); + drawingShapes.RemoveAt(drawingShapes.Count - 1); + RefreshAll(); + return peelings.Peek(); + } + } + + /// + /// Peels the specific shape. + /// + /// The shape. + internal void PeelShape(DrawingShape shape) + { + Debug.Assert(shape != null); + lock (renderSyncObject) + { + string statName = shape.GetType().Name.Replace("Shape", " count"); + UpdateStats(statName, -1); + peelings.Push(shape); + PeelShape(shape, drawingShapes); + RefreshAll(); + } + } + + /// + /// Peels the shape recursively. + /// + /// The shape. + /// The shapes. + /// + private static bool PeelShape(DrawingShape shape, ICollection shapes) + { + foreach (var s in shapes) + { + if (s == shape) + { + shapes.Remove(shape); + return true; + } + if (s.ChildShapes != null && PeelShape(shape, s.ChildShapes)) + return true; + } + return false; + } + #endregion + + #region PeelAt() + /// + /// Peels the top shape at a given point, + /// updates the render targets and puts the peeled shape to the stack of peelings. + /// + /// + /// + internal DrawingShape PeelAt(Point2F point) + { + lock (renderSyncObject) + { + return PeelAtRecursive(point, drawingShapes); + } + } + #endregion + + #region PeelAtRecursive() + /// + /// Peels the top shape at a given point, + /// updates the render targets and puts the peeled shape to the stack of peelings. + /// Used to enable removing a child shape - eg. a top shape in a layer + /// + /// + /// + /// + private DrawingShape PeelAtRecursive(Point2F point, IList shapes) + { + for (int i = shapes.Count - 1; i >= 0; i--) + { + if (shapes[i].HitTest(point)) + { + if (shapes[i].ChildShapes == null) + { + string statName = shapes[i].GetType().Name.Replace("Shape", " count"); + UpdateStats(statName, -1); + peelings.Push(shapes[i]); + shapes.RemoveAt(i); + RefreshAll(); + return peelings.Peek(); + } + DrawingShape shapePeeled = PeelAtRecursive(point, shapes[i].ChildShapes); + if (shapePeeled == null) + { + string statName = shapes[i].GetType().Name.Replace("Shape", " count"); + UpdateStats(statName, -1); + peelings.Push(shapes[i]); + shapes.RemoveAt(i); + RefreshAll(); + return peelings.Peek(); + } + return shapePeeled; + } + } + return null; + } + #endregion + + #region UnpeelShape() + /// + /// Puts a shape from the stack of peelings back to the list of shapes and invalidates the render targets. + /// + /// + internal DrawingShape UnpeelShape() + { + lock (renderSyncObject) + { + if (peelings.Count == 0) + return null; + DrawingShape shape = peelings.Peek(); + string statName = shape.GetType().Name.Replace("Shape", " count"); + UpdateStats(statName, 1); + drawingShapes.Add(peelings.Pop()); + if (UsingCompatibleRenderTarget) + AddToCompatibleRenderTarget(shape); + InvalidateClientRectangle(); + return shape; + } + } + #endregion + + #region AddShape~() + #region AddShape() + /// + /// Adds the shape to the list and updates the render targets. + /// + /// The shape. + /// + private DrawingShape AddShape(DrawingShape shape) + { + lock (renderSyncObject) + { + drawingShapes.Add(shape); + string statName = shape.GetType().Name.Replace("Shape", " count"); + UpdateStats(statName, 1); + if (UsingCompatibleRenderTarget) + AddToCompatibleRenderTarget(shape); + InvalidateClientRectangle(); + return shape; + } + } + #endregion + + #region AddRandomShape() + /// + /// Adds a random shape. + /// + /// + public DrawingShape AddRandomShape() + { + double which = random.NextDouble(); + if (which < 0.1) + return AddLine(); + if (which < 0.2) + return AddRectangle(); + if (which < 0.3) + return AddRoundRect(); + if (which < 0.4) + return AddEllipse(); + if (which < 0.5) + return AddText(); + if (which < 0.6) + return AddBitmap(); + if (which < 0.7) + return AddGeometry(); + if (which < 0.8) + return AddMesh(); + if (which < 0.9) + return AddGDIEllipses(5); + return AddLayer(5); + } + #endregion + + #region AddRandomShapes(count) + /// + /// Adds [count] random shapes. + /// + /// The count. + public void AddRandomShapes(int count) + { + for (int i = 0; i < count; i++) + AddRandomShape(); + } + #endregion + + #region AddLine() + /// + /// Adds a random line. + /// + /// + public DrawingShape AddLine() + { + return AddShape(new LineShape(RenderTarget, random, d2DFactory, Bitmap)); + } + #endregion + + #region AddRectangle() + /// + /// Adds a random rectangle. + /// + /// + public DrawingShape AddRectangle() + { + return AddShape(new RectangleShape(RenderTarget, random, d2DFactory, Bitmap)); + } + #endregion + + #region AddRoundRect() + /// + /// Adds a random round rect. + /// + /// + public DrawingShape AddRoundRect() + { + return AddShape(new RoundRectangleShape(RenderTarget, random, d2DFactory, Bitmap)); + } + #endregion + + #region AddEllipse() + /// + /// Adds a random ellipse. + /// + /// + public DrawingShape AddEllipse() + { + return AddShape(new EllipseShape(RenderTarget, random, d2DFactory, Bitmap)); + } + #endregion + + #region AddText() + /// + /// Adds a random text. + /// + /// + public DrawingShape AddText() + { + if (random.NextDouble() < 0.5) + return AddShape(new TextShape(RenderTarget, random, d2DFactory, Bitmap, dwriteFactory)); + return AddShape(new TextLayoutShape(RenderTarget, random, d2DFactory, Bitmap, dwriteFactory)); + } + #endregion + + #region AddBitmap() + /// + /// Adds a random bitmap. + /// + /// + public DrawingShape AddBitmap() + { + return AddShape(new BitmapShape(RenderTarget, random, d2DFactory, Bitmap)); + } + #endregion + + #region AddGeometry() + /// + /// Adds a random geometry. + /// + /// + public DrawingShape AddGeometry() + { + return AddShape(new GeometryShape(RenderTarget, random, d2DFactory, Bitmap)); + } + #endregion + + #region AddMesh() + /// + /// Adds a random mesh. + /// + /// + public DrawingShape AddMesh() + { + return AddShape(new MeshShape(RenderTarget, random, d2DFactory, Bitmap)); + } + #endregion + + #region AddGDIEllipses() + /// + /// Adds [count] random GDI drawings (as a single shape). + /// + /// The count. + /// + public DrawingShape AddGDIEllipses(int count) + { + return AddShape(new GDIEllipsesShape(RenderTarget, random, d2DFactory, Bitmap, count)); + } + #endregion + + #region AddLayer() + /// + /// Adds a random layer with [count] random shapes in it. + /// + /// The count. + /// + public DrawingShape AddLayer(int count) + { + return AddShape(new LayerShape(RenderTarget, random, d2DFactory, Bitmap, count)); + } + #endregion + #endregion + + #region UpdateStats() + /// + /// Updates the statistics + /// + /// The stat to update + /// The value by which to change the stat + void UpdateStats(string stat, int added) + { + if (stats.ContainsKey(stat)) + stats[stat] += added; + else + stats.Add(stat, added); + Stats = ""; + foreach (var s in stats.Keys) + Stats = Stats + s + ": " + stats[s] + Environment.NewLine; + if (statsChanged != null) + statsChanged(this, EventArgs.Empty); + } + #endregion + + #region GetTreeAt() + /// + /// Gets the tree of shapes at the given point + /// + /// The point. + /// + internal TreeNode GetTreeAt(Point2F point) + { + lock (renderSyncObject) + { + var root = new TreeNode("/"); + AddChildShapesToTree(root, drawingShapes, point); + return root; + } + } + #endregion + + #region AddChildShapesToTree() + /// + /// Adds the child shapes to tree. + /// + /// The parent node. + /// The list of shapes to add. + /// The point at which child shapes should be checked. + private static void AddChildShapesToTree(TreeNode parent, IList shapes, Point2F point) + { + for (int i = shapes.Count - 1; i >= 0; i--) + { + if (shapes[i].HitTest(point)) + { + var child = new TreeNode(shapes[i].ToString()) { Tag = shapes[i] }; + child.Expand(); + parent.Nodes.Add(child); + if (shapes[i].ChildShapes != null) + AddChildShapesToTree(child, shapes[i].ChildShapes, point); + } + } + } + #endregion + + #region RefreshAll() + public void RefreshAll() + { + if (UsingCompatibleRenderTarget) + RefreshCompatibleRenderTarget(); + InvalidateClientRectangle(); + } + #endregion + + #region InvalidateClientRectangle() + private void InvalidateClientRectangle() + { + Invalidate(ClientRectangle, true); + } + #endregion + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/D2DShapesControlWithButtons.Designer.cs b/source/Samples/DirectX/CS/Direct2D/D2DShapes/D2DShapesControlWithButtons.Designer.cs new file mode 100644 index 00000000..65233d18 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/D2DShapes/D2DShapesControlWithButtons.Designer.cs @@ -0,0 +1,525 @@ +namespace D2DShapes +{ + partial class D2DShapesControlWithButtons + { + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(D2DShapesControlWithButtons)); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.comboBoxRenderMode = new System.Windows.Forms.ComboBox(); + this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); + this.buttonAddLines = new System.Windows.Forms.Button(); + this.buttonAddRectangles = new System.Windows.Forms.Button(); + this.buttonUnpeel = new System.Windows.Forms.Button(); + this.buttonAddRoundRects = new System.Windows.Forms.Button(); + this.buttonPeelShape = new System.Windows.Forms.Button(); + this.buttonAddEllipses = new System.Windows.Forms.Button(); + this.buttonClear = new System.Windows.Forms.Button(); + this.buttonAddTexts = new System.Windows.Forms.Button(); + this.buttonAddLayer = new System.Windows.Forms.Button(); + this.buttonAddBitmaps = new System.Windows.Forms.Button(); + this.buttonAddGDI = new System.Windows.Forms.Button(); + this.buttonAddGeometries = new System.Windows.Forms.Button(); + this.buttonAddMeshes = new System.Windows.Forms.Button(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.textBoxStats = new System.Windows.Forms.TextBox(); + this.tabPageShapes = new System.Windows.Forms.TabPage(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.tabControl2 = new System.Windows.Forms.TabControl(); + this.tabPageShapesAtPoint = new System.Windows.Forms.TabPage(); + this.treeViewShapesAtPoint = new System.Windows.Forms.TreeView(); + this.tabPageAllShapes = new System.Windows.Forms.TabPage(); + this.treeViewAllShapes = new System.Windows.Forms.TreeView(); + this.propertyGridShapeInfo = new System.Windows.Forms.PropertyGrid(); + this.labelFPS = new System.Windows.Forms.Label(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.timer1 = new System.Windows.Forms.Timer(this.components); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.d2dShapesControl = new D2DShapes.D2DShapesControl(this.components); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); + this.tabPage2.SuspendLayout(); + this.tabPageShapes.SuspendLayout(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.tabControl2.SuspendLayout(); + this.tabPageShapesAtPoint.SuspendLayout(); + this.tabPageAllShapes.SuspendLayout(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.SuspendLayout(); + // + // tabControl1 + // + this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Controls.Add(this.tabPageShapes); + this.tabControl1.Location = new System.Drawing.Point(0, 0); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(175, 444); + this.tabControl1.TabIndex = 4; + // + // tabPage1 + // + this.tabPage1.BackColor = System.Drawing.SystemColors.Window; + this.tabPage1.Controls.Add(this.numericUpDown1); + this.tabPage1.Controls.Add(this.buttonAddLines); + this.tabPage1.Controls.Add(this.buttonAddRectangles); + this.tabPage1.Controls.Add(this.buttonAddRoundRects); + this.tabPage1.Controls.Add(this.buttonAddEllipses); + this.tabPage1.Controls.Add(this.buttonAddTexts); + this.tabPage1.Controls.Add(this.buttonAddLayer); + this.tabPage1.Controls.Add(this.buttonAddBitmaps); + this.tabPage1.Controls.Add(this.buttonAddGDI); + this.tabPage1.Controls.Add(this.buttonAddGeometries); + this.tabPage1.Controls.Add(this.buttonAddMeshes); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(167, 418); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "Edit"; + // + // comboBoxRenderMode + // + this.comboBoxRenderMode.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.comboBoxRenderMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxRenderMode.FormattingEnabled = true; + this.comboBoxRenderMode.Items.AddRange(new object[] { + "DCRenderTarget", + "BitmapRenderTarget OnPaint", + "BitmapRenderTarget Real Time", + "HwndRenderTarget"}); + this.comboBoxRenderMode.Location = new System.Drawing.Point(7, 508); + this.comboBoxRenderMode.Name = "comboBoxRenderMode"; + this.comboBoxRenderMode.Size = new System.Drawing.Size(164, 21); + this.comboBoxRenderMode.TabIndex = 4; + this.toolTip1.SetToolTip(this.comboBoxRenderMode, resources.GetString("comboBoxRenderMode.ToolTip")); + this.comboBoxRenderMode.SelectedIndexChanged += new System.EventHandler(this.comboBoxRenderMode_SelectedIndexChanged); + // + // numericUpDown1 + // + this.numericUpDown1.Location = new System.Drawing.Point(3, 6); + this.numericUpDown1.Maximum = new decimal(new int[] { + 1000, + 0, + 0, + 0}); + this.numericUpDown1.Name = "numericUpDown1"; + this.numericUpDown1.Size = new System.Drawing.Size(164, 20); + this.numericUpDown1.TabIndex = 3; + this.toolTip1.SetToolTip(this.numericUpDown1, "Number of shapes to add at a time."); + this.numericUpDown1.Value = new decimal(new int[] { + 1, + 0, + 0, + 0}); + // + // buttonAddLines + // + this.buttonAddLines.Location = new System.Drawing.Point(3, 32); + this.buttonAddLines.Name = "buttonAddLines"; + this.buttonAddLines.Size = new System.Drawing.Size(164, 23); + this.buttonAddLines.TabIndex = 0; + this.buttonAddLines.Text = "Add Lines"; + this.buttonAddLines.UseVisualStyleBackColor = true; + this.buttonAddLines.Click += new System.EventHandler(this.buttonAddLines_Click); + // + // buttonAddRectangles + // + this.buttonAddRectangles.Location = new System.Drawing.Point(3, 61); + this.buttonAddRectangles.Name = "buttonAddRectangles"; + this.buttonAddRectangles.Size = new System.Drawing.Size(164, 23); + this.buttonAddRectangles.TabIndex = 0; + this.buttonAddRectangles.Text = "Add Rectangles"; + this.buttonAddRectangles.UseVisualStyleBackColor = true; + this.buttonAddRectangles.Click += new System.EventHandler(this.buttonAddRectangles_Click); + // + // buttonUnpeel + // + this.buttonUnpeel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonUnpeel.Location = new System.Drawing.Point(89, 450); + this.buttonUnpeel.Name = "buttonUnpeel"; + this.buttonUnpeel.Size = new System.Drawing.Size(82, 23); + this.buttonUnpeel.TabIndex = 0; + this.buttonUnpeel.Text = "Unpeel"; + this.toolTip1.SetToolTip(this.buttonUnpeel, "Takes a shape from the top of the stack of \"peelings\" and puts it back onto the c" + + "anvas"); + this.buttonUnpeel.UseVisualStyleBackColor = true; + this.buttonUnpeel.Click += new System.EventHandler(this.buttonUnpeel_Click); + // + // buttonAddRoundRects + // + this.buttonAddRoundRects.Location = new System.Drawing.Point(3, 90); + this.buttonAddRoundRects.Name = "buttonAddRoundRects"; + this.buttonAddRoundRects.Size = new System.Drawing.Size(164, 23); + this.buttonAddRoundRects.TabIndex = 0; + this.buttonAddRoundRects.Text = "Add Rounded Rectangles"; + this.buttonAddRoundRects.UseVisualStyleBackColor = true; + this.buttonAddRoundRects.Click += new System.EventHandler(this.buttonAddRoundRects_Click); + // + // buttonPeelShape + // + this.buttonPeelShape.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonPeelShape.Location = new System.Drawing.Point(7, 450); + this.buttonPeelShape.Name = "buttonPeelShape"; + this.buttonPeelShape.Size = new System.Drawing.Size(76, 23); + this.buttonPeelShape.TabIndex = 0; + this.buttonPeelShape.Text = "Peel Shape"; + this.toolTip1.SetToolTip(this.buttonPeelShape, "Removes the top shape from the canvas and puts it at the top of a stack of \"peeli" + + "ngs\""); + this.buttonPeelShape.UseVisualStyleBackColor = true; + this.buttonPeelShape.Click += new System.EventHandler(this.buttonPeelShape_Click); + // + // buttonAddEllipses + // + this.buttonAddEllipses.Location = new System.Drawing.Point(3, 119); + this.buttonAddEllipses.Name = "buttonAddEllipses"; + this.buttonAddEllipses.Size = new System.Drawing.Size(164, 23); + this.buttonAddEllipses.TabIndex = 0; + this.buttonAddEllipses.Text = "Add Ellipses"; + this.buttonAddEllipses.UseVisualStyleBackColor = true; + this.buttonAddEllipses.Click += new System.EventHandler(this.buttonAddEllipses_Click); + // + // buttonClear + // + this.buttonClear.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.buttonClear.Location = new System.Drawing.Point(7, 479); + this.buttonClear.Name = "buttonClear"; + this.buttonClear.Size = new System.Drawing.Size(164, 23); + this.buttonClear.TabIndex = 0; + this.buttonClear.Text = "Clear Shapes"; + this.toolTip1.SetToolTip(this.buttonClear, "Clears all shapes from the canvas (peelings remain)."); + this.buttonClear.UseVisualStyleBackColor = true; + this.buttonClear.Click += new System.EventHandler(this.buttonClear_Click); + // + // buttonAddTexts + // + this.buttonAddTexts.Location = new System.Drawing.Point(3, 148); + this.buttonAddTexts.Name = "buttonAddTexts"; + this.buttonAddTexts.Size = new System.Drawing.Size(164, 23); + this.buttonAddTexts.TabIndex = 0; + this.buttonAddTexts.Text = "Add Texts"; + this.buttonAddTexts.UseVisualStyleBackColor = true; + this.buttonAddTexts.Click += new System.EventHandler(this.buttonAddTexts_Click); + // + // buttonAddLayer + // + this.buttonAddLayer.Location = new System.Drawing.Point(3, 293); + this.buttonAddLayer.Name = "buttonAddLayer"; + this.buttonAddLayer.Size = new System.Drawing.Size(164, 23); + this.buttonAddLayer.TabIndex = 0; + this.buttonAddLayer.Text = "Add Layer"; + this.toolTip1.SetToolTip(this.buttonAddLayer, "A layer provides masking and grouping capability."); + this.buttonAddLayer.UseVisualStyleBackColor = true; + this.buttonAddLayer.Click += new System.EventHandler(this.buttonAddLayer_Click); + // + // buttonAddBitmaps + // + this.buttonAddBitmaps.Location = new System.Drawing.Point(3, 177); + this.buttonAddBitmaps.Name = "buttonAddBitmaps"; + this.buttonAddBitmaps.Size = new System.Drawing.Size(164, 23); + this.buttonAddBitmaps.TabIndex = 0; + this.buttonAddBitmaps.Text = "Add Bitmaps"; + this.buttonAddBitmaps.UseVisualStyleBackColor = true; + this.buttonAddBitmaps.Click += new System.EventHandler(this.buttonAddBitmaps_Click); + // + // buttonAddGDI + // + this.buttonAddGDI.Location = new System.Drawing.Point(3, 264); + this.buttonAddGDI.Name = "buttonAddGDI"; + this.buttonAddGDI.Size = new System.Drawing.Size(164, 23); + this.buttonAddGDI.TabIndex = 0; + this.buttonAddGDI.Text = "Add GDI Ellipses"; + this.toolTip1.SetToolTip(this.buttonAddGDI, "Ellipses drawn using GDI+ on a Direct2D render target."); + this.buttonAddGDI.UseVisualStyleBackColor = true; + this.buttonAddGDI.Click += new System.EventHandler(this.buttonAddGDI_Click); + // + // buttonAddGeometries + // + this.buttonAddGeometries.Location = new System.Drawing.Point(3, 206); + this.buttonAddGeometries.Name = "buttonAddGeometries"; + this.buttonAddGeometries.Size = new System.Drawing.Size(164, 23); + this.buttonAddGeometries.TabIndex = 0; + this.buttonAddGeometries.Text = "Add Geometries"; + this.buttonAddGeometries.UseVisualStyleBackColor = true; + this.buttonAddGeometries.Click += new System.EventHandler(this.buttonAddGeometries_Click); + // + // buttonAddMeshes + // + this.buttonAddMeshes.Location = new System.Drawing.Point(3, 235); + this.buttonAddMeshes.Name = "buttonAddMeshes"; + this.buttonAddMeshes.Size = new System.Drawing.Size(164, 23); + this.buttonAddMeshes.TabIndex = 0; + this.buttonAddMeshes.Text = "Add Meshes"; + this.toolTip1.SetToolTip(this.buttonAddMeshes, "Meshes consist of triangles. Here - they are either tesselated from random geomet" + + "ries or assembled from random triangles."); + this.buttonAddMeshes.UseVisualStyleBackColor = true; + this.buttonAddMeshes.Click += new System.EventHandler(this.buttonAddMeshes_Click); + // + // tabPage2 + // + this.tabPage2.BackColor = System.Drawing.SystemColors.Window; + this.tabPage2.Controls.Add(this.textBoxStats); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(167, 418); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "Stats"; + // + // textBoxStats + // + this.textBoxStats.AcceptsReturn = true; + this.textBoxStats.AcceptsTab = true; + this.textBoxStats.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBoxStats.Location = new System.Drawing.Point(3, 3); + this.textBoxStats.Multiline = true; + this.textBoxStats.Name = "textBoxStats"; + this.textBoxStats.ReadOnly = true; + this.textBoxStats.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBoxStats.Size = new System.Drawing.Size(161, 412); + this.textBoxStats.TabIndex = 3; + this.textBoxStats.Text = "Stats:"; + this.textBoxStats.WordWrap = false; + // + // tabPageShapes + // + this.tabPageShapes.Controls.Add(this.splitContainer2); + this.tabPageShapes.Location = new System.Drawing.Point(4, 22); + this.tabPageShapes.Name = "tabPageShapes"; + this.tabPageShapes.Padding = new System.Windows.Forms.Padding(3); + this.tabPageShapes.Size = new System.Drawing.Size(167, 418); + this.tabPageShapes.TabIndex = 2; + this.tabPageShapes.Text = "Shapes"; + this.tabPageShapes.UseVisualStyleBackColor = true; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.Location = new System.Drawing.Point(3, 3); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.tabControl2); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.propertyGridShapeInfo); + this.splitContainer2.Size = new System.Drawing.Size(161, 412); + this.splitContainer2.SplitterDistance = 205; + this.splitContainer2.SplitterWidth = 6; + this.splitContainer2.TabIndex = 4; + // + // tabControl2 + // + this.tabControl2.Controls.Add(this.tabPageShapesAtPoint); + this.tabControl2.Controls.Add(this.tabPageAllShapes); + this.tabControl2.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl2.Location = new System.Drawing.Point(0, 0); + this.tabControl2.Name = "tabControl2"; + this.tabControl2.SelectedIndex = 0; + this.tabControl2.Size = new System.Drawing.Size(161, 205); + this.tabControl2.TabIndex = 3; + // + // tabPageShapesAtPoint + // + this.tabPageShapesAtPoint.BackColor = System.Drawing.SystemColors.Window; + this.tabPageShapesAtPoint.Controls.Add(this.treeViewShapesAtPoint); + this.tabPageShapesAtPoint.Location = new System.Drawing.Point(4, 22); + this.tabPageShapesAtPoint.Name = "tabPageShapesAtPoint"; + this.tabPageShapesAtPoint.Padding = new System.Windows.Forms.Padding(3); + this.tabPageShapesAtPoint.Size = new System.Drawing.Size(153, 179); + this.tabPageShapesAtPoint.TabIndex = 0; + this.tabPageShapesAtPoint.Text = "Shapes Clicked"; + // + // treeViewShapesAtPoint + // + this.treeViewShapesAtPoint.Dock = System.Windows.Forms.DockStyle.Fill; + this.treeViewShapesAtPoint.Location = new System.Drawing.Point(3, 3); + this.treeViewShapesAtPoint.Name = "treeViewShapesAtPoint"; + this.treeViewShapesAtPoint.Size = new System.Drawing.Size(147, 173); + this.treeViewShapesAtPoint.TabIndex = 2; + this.toolTip1.SetToolTip(this.treeViewShapesAtPoint, "List of shapes and hierarchies of shapes (for layers) at point clicked. Select to" + + " view shape properties. Right click to peel specific shape."); + this.treeViewShapesAtPoint.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViewShapes_AfterSelect); + this.treeViewShapesAtPoint.MouseDown += new System.Windows.Forms.MouseEventHandler(this.treeViewShapes_MouseDown); + // + // tabPageAllShapes + // + this.tabPageAllShapes.Controls.Add(this.treeViewAllShapes); + this.tabPageAllShapes.Location = new System.Drawing.Point(4, 22); + this.tabPageAllShapes.Name = "tabPageAllShapes"; + this.tabPageAllShapes.Padding = new System.Windows.Forms.Padding(3); + this.tabPageAllShapes.Size = new System.Drawing.Size(153, 179); + this.tabPageAllShapes.TabIndex = 1; + this.tabPageAllShapes.Text = "All Shapes"; + this.tabPageAllShapes.UseVisualStyleBackColor = true; + // + // treeViewAllShapes + // + this.treeViewAllShapes.Dock = System.Windows.Forms.DockStyle.Fill; + this.treeViewAllShapes.Location = new System.Drawing.Point(3, 3); + this.treeViewAllShapes.Name = "treeViewAllShapes"; + this.treeViewAllShapes.Size = new System.Drawing.Size(147, 173); + this.treeViewAllShapes.TabIndex = 3; + this.toolTip1.SetToolTip(this.treeViewAllShapes, "List of all shapes and hierarchies of shapes (for layers). Select to view shape p" + + "roperties. Right click to peel specific shape."); + this.treeViewAllShapes.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeViewShapes_AfterSelect); + this.treeViewAllShapes.MouseDown += new System.Windows.Forms.MouseEventHandler(this.treeViewShapes_MouseDown); + // + // propertyGridShapeInfo + // + this.propertyGridShapeInfo.Dock = System.Windows.Forms.DockStyle.Fill; + this.propertyGridShapeInfo.Location = new System.Drawing.Point(0, 0); + this.propertyGridShapeInfo.Name = "propertyGridShapeInfo"; + this.propertyGridShapeInfo.Size = new System.Drawing.Size(161, 201); + this.propertyGridShapeInfo.TabIndex = 0; + this.propertyGridShapeInfo.PropertyValueChanged += new System.Windows.Forms.PropertyValueChangedEventHandler(this.propertyGridShapeInfo_PropertyValueChanged); + // + // labelFPS + // + this.labelFPS.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.labelFPS.AutoSize = true; + this.labelFPS.Location = new System.Drawing.Point(3, 516); + this.labelFPS.Name = "labelFPS"; + this.labelFPS.Size = new System.Drawing.Size(27, 13); + this.labelFPS.TabIndex = 1; + this.labelFPS.Text = "FPS"; + this.toolTip1.SetToolTip(this.labelFPS, "Frames Per Second - only shows for real time render mode (HwndRenderTarget)"); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.labelFPS); + this.splitContainer1.Panel1.Controls.Add(this.d2dShapesControl); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.BackColor = System.Drawing.SystemColors.Window; + this.splitContainer1.Panel2.Controls.Add(this.comboBoxRenderMode); + this.splitContainer1.Panel2.Controls.Add(this.tabControl1); + this.splitContainer1.Panel2.Controls.Add(this.buttonPeelShape); + this.splitContainer1.Panel2.Controls.Add(this.buttonClear); + this.splitContainer1.Panel2.Controls.Add(this.buttonUnpeel); + this.splitContainer1.Size = new System.Drawing.Size(670, 533); + this.splitContainer1.SplitterDistance = 487; + this.splitContainer1.SplitterWidth = 6; + this.splitContainer1.TabIndex = 5; + // + // d2dShapesControl + // + this.d2dShapesControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.d2dShapesControl.Location = new System.Drawing.Point(0, 0); + this.d2dShapesControl.Name = "d2dShapesControl"; + this.d2dShapesControl.Render = null; + this.d2dShapesControl.RenderMode = D2DShapes.D2DShapesControl.RenderModes.BitmapRenderTargetOnPaint; + this.d2dShapesControl.Size = new System.Drawing.Size(487, 533); + this.d2dShapesControl.TabIndex = 0; + this.toolTip1.SetToolTip(this.d2dShapesControl, "Left click to view details of the shape. Right click to peel shape."); + this.d2dShapesControl.StatsChanged += new System.EventHandler(this.d2dShapesControl_StatsChanged); + this.d2dShapesControl.MouseUp += new System.Windows.Forms.MouseEventHandler(this.d2dShapesControl_MouseUp); + this.d2dShapesControl.FpsChanged += new System.EventHandler(this.d2dShapesControl_FpsChanged); + // + // D2DShapesControlWithButtons + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.splitContainer1); + this.Name = "D2DShapesControlWithButtons"; + this.Size = new System.Drawing.Size(670, 533); + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); + this.tabPage2.ResumeLayout(false); + this.tabPage2.PerformLayout(); + this.tabPageShapes.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel2.ResumeLayout(false); + this.splitContainer2.ResumeLayout(false); + this.tabControl2.ResumeLayout(false); + this.tabPageShapesAtPoint.ResumeLayout(false); + this.tabPageAllShapes.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.ResumeLayout(false); + this.ResumeLayout(false); + + } + #endregion + + private D2DShapesControl d2dShapesControl; + private System.Windows.Forms.Button buttonAddBitmaps; + private System.Windows.Forms.Button buttonAddTexts; + private System.Windows.Forms.Button buttonAddEllipses; + private System.Windows.Forms.Button buttonAddRoundRects; + private System.Windows.Forms.Button buttonAddRectangles; + private System.Windows.Forms.Button buttonAddLines; + private System.Windows.Forms.Label labelFPS; + private System.Windows.Forms.Button buttonClear; + private System.Windows.Forms.Button buttonAddGeometries; + private System.Windows.Forms.Button buttonPeelShape; + private System.Windows.Forms.Button buttonAddMeshes; + private System.Windows.Forms.NumericUpDown numericUpDown1; + private System.Windows.Forms.Button buttonAddLayer; + private System.Windows.Forms.Button buttonAddGDI; + private System.Windows.Forms.Button buttonUnpeel; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.TextBox textBoxStats; + private System.Windows.Forms.TabPage tabPageShapes; + private System.Windows.Forms.ComboBox comboBoxRenderMode; + private System.Windows.Forms.PropertyGrid propertyGridShapeInfo; + private System.Windows.Forms.TreeView treeViewShapesAtPoint; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.TabControl tabControl2; + private System.Windows.Forms.TabPage tabPageShapesAtPoint; + private System.Windows.Forms.TabPage tabPageAllShapes; + private System.Windows.Forms.TreeView treeViewAllShapes; + private System.Windows.Forms.Timer timer1; + private System.ComponentModel.IContainer components; + private System.Windows.Forms.ToolTip toolTip1; + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/D2DShapesControlWithButtons.cs b/source/Samples/DirectX/CS/Direct2D/D2DShapes/D2DShapesControlWithButtons.cs new file mode 100644 index 00000000..9fd04eac --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/D2DShapes/D2DShapesControlWithButtons.cs @@ -0,0 +1,253 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Windows.Forms; +using System.ComponentModel; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; + +namespace D2DShapes +{ + public partial class D2DShapesControlWithButtons : UserControl + { + #region NumberOfShapesToAdd + [DefaultValue(1)] + public int NumberOfShapesToAdd + { + get { return (int)numericUpDown1.Value; } + set { numericUpDown1.Value = value; } + } + #endregion + + #region D2DShapesControlWithButtons() - CTOR + public D2DShapesControlWithButtons() + { + InitializeComponent(); + comboBoxRenderMode.SelectedIndex = (int)d2dShapesControl.RenderMode; + } + #endregion + + #region Initialize() + public void Initialize() + { + d2dShapesControl.Initialize(); + } + #endregion + + #region buttonAdd~ event handlers + private void buttonAddLines_Click(object sender, System.EventArgs e) + { + for (int i = 0; i < (int)numericUpDown1.Value; i++) + { + AddToTree(d2dShapesControl.AddLine()); + } + } + + private void buttonAddRectangles_Click(object sender, System.EventArgs e) + { + for (int i = 0; i < (int)numericUpDown1.Value; i++) + AddToTree(d2dShapesControl.AddRectangle()); + } + + private void buttonAddRoundRects_Click(object sender, System.EventArgs e) + { + for (int i = 0; i < (int)numericUpDown1.Value; i++) + AddToTree(d2dShapesControl.AddRoundRect()); + } + + private void buttonAddEllipses_Click(object sender, System.EventArgs e) + { + for (int i = 0; i < (int)numericUpDown1.Value; i++) + AddToTree(d2dShapesControl.AddEllipse()); + } + + private void buttonAddTexts_Click(object sender, System.EventArgs e) + { + for (int i = 0; i < (int)numericUpDown1.Value; i++) + AddToTree(d2dShapesControl.AddText()); + } + + private void buttonAddBitmaps_Click(object sender, System.EventArgs e) + { + for (int i = 0; i < (int)numericUpDown1.Value; i++) + AddToTree(d2dShapesControl.AddBitmap()); + } + + private void buttonAddGeometries_Click(object sender, System.EventArgs e) + { + for (int i = 0; i < (int)numericUpDown1.Value; i++) + AddToTree(d2dShapesControl.AddGeometry()); + } + + private void buttonAddMeshes_Click(object sender, System.EventArgs e) + { + for (int i = 0; i < (int)numericUpDown1.Value; i++) + AddToTree(d2dShapesControl.AddMesh()); + } + + private void buttonAddGDI_Click(object sender, System.EventArgs e) + { + AddToTree(d2dShapesControl.AddGDIEllipses((int)numericUpDown1.Value)); + } + + private void buttonAddLayer_Click(object sender, System.EventArgs e) + { + AddToTree(d2dShapesControl.AddLayer((int)numericUpDown1.Value)); + } + #endregion + + #region d2dShapesControl_FpsChanged + private void d2dShapesControl_FpsChanged(object sender, System.EventArgs e) + { + labelFPS.Text = "FPS: " + d2dShapesControl.Fps; + } + #endregion + + #region d2dShapesControl_MouseUp + private void d2dShapesControl_MouseUp(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Right) + { + DrawingShape shape = d2dShapesControl.PeelAt(new Point2F(e.Location.X, e.Location.Y)); + if (shape != null) + RemoveFromTree(shape, treeViewAllShapes.Nodes); + } + treeViewShapesAtPoint.Nodes.Clear(); + treeViewShapesAtPoint.Nodes.Add(d2dShapesControl.GetTreeAt(new Point2F(e.Location.X, e.Location.Y))); + treeViewShapesAtPoint.ExpandAll(); + if (treeViewShapesAtPoint.Nodes.Count > 0) + { + TreeNode nodeToSelect = treeViewShapesAtPoint.Nodes[0]; + while (nodeToSelect.Nodes.Count > 0) + nodeToSelect = nodeToSelect.Nodes[0]; + treeViewShapesAtPoint.SelectedNode = nodeToSelect; + if (e.Button == MouseButtons.Left) + { + tabControl1.SelectedTab = tabPageShapes; + tabControl2.SelectedTab = tabPageShapesAtPoint; + treeViewShapesAtPoint.Focus(); + } + } + } + #endregion + + #region d2dShapesControl_StatsChanged + private void d2dShapesControl_StatsChanged(object sender, System.EventArgs e) + { + textBoxStats.Text = "Stats:" + System.Environment.NewLine + d2dShapesControl.Stats; + } + #endregion + + #region buttonClear_Click + private void buttonClear_Click(object sender, System.EventArgs e) + { + d2dShapesControl.ClearShapes(); + treeViewAllShapes.Nodes.Clear(); + } + #endregion + + #region buttonPeelShape_Click + private void buttonPeelShape_Click(object sender, System.EventArgs e) + { + RemoveFromTree(d2dShapesControl.PeelShape(), treeViewAllShapes.Nodes); + } + #endregion + + #region buttonUnpeel_Click + private void buttonUnpeel_Click(object sender, System.EventArgs e) + { + DrawingShape shape = d2dShapesControl.UnpeelShape(); + if (shape != null) + AddToTree(shape); + } + #endregion + + #region comboBoxRenderMode_SelectedIndexChanged + private void comboBoxRenderMode_SelectedIndexChanged(object sender, System.EventArgs e) + { + if (comboBoxRenderMode.SelectedIndex >= 0) + { + d2dShapesControl.RenderMode = (D2DShapesControl.RenderModes) comboBoxRenderMode.SelectedIndex; + labelFPS.Visible = d2dShapesControl.RenderMode == D2DShapesControl.RenderModes.HwndRenderTarget; + } + } + #endregion + + #region treeViewShapes_AfterSelect + private void treeViewShapes_AfterSelect(object sender, TreeViewEventArgs e) + { + var tree = (TreeView)sender; + if (tree.SelectedNode != null && tree.SelectedNode.Tag is DrawingShape) + propertyGridShapeInfo.SelectedObject = tree.SelectedNode.Tag; + } + #endregion + + #region treeViewShapes_MouseDown + private void treeViewShapes_MouseDown(object sender, MouseEventArgs e) + { + var tree = (TreeView)sender; + TreeNode node = tree.HitTest(e.Location).Node; + tree.SelectedNode = node; + if (e.Button == MouseButtons.Right && node != null) + { + var shape = node.Tag as DrawingShape; + if (shape != null) + { + RemoveFromTree(shape, treeViewAllShapes.Nodes); + RemoveFromTree(shape, treeViewShapesAtPoint.Nodes); + d2dShapesControl.PeelShape(shape); + } + } + } + #endregion + + #region AddToTree + private void AddToTree(DrawingShape shape) + { + AddToTreeRecursive(shape, treeViewAllShapes.Nodes); + } + #endregion + + #region AddToTreeRecursive + private static void AddToTreeRecursive(DrawingShape shape, TreeNodeCollection treeNodeCollection) + { + var node = new TreeNode(shape.ToString()) { Tag = shape}; + node.Expand(); + treeNodeCollection.Add(node); + if (shape.ChildShapes != null && shape.ChildShapes.Count > 0) + foreach (DrawingShape s in shape.ChildShapes) + { + AddToTreeRecursive(s, node.Nodes); + } + } + #endregion + + #region RemoveFromTree + /// + /// Remove shape from the tree node collection + /// + /// + /// + /// true if removed + private static bool RemoveFromTree(DrawingShape shape, TreeNodeCollection treeNodes) + { + foreach (TreeNode node in treeNodes) + { + if (node.Tag == shape) + { + treeNodes.Remove(node); + return true; + } + if (node.Nodes.Count > 0 && RemoveFromTree(shape, node.Nodes)) + return true; + } + return false; + } + #endregion + + #region propertyGridShapeInfo_PropertyValueChanged() + private void propertyGridShapeInfo_PropertyValueChanged(object s, PropertyValueChangedEventArgs e) + { + d2dShapesControl.RefreshAll(); + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/D2DShapesControlWithButtons.resx b/source/Samples/DirectX/CS/Direct2D/D2DShapes/D2DShapesControlWithButtons.resx new file mode 100644 index 00000000..f4961c39 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/D2DShapes/D2DShapesControlWithButtons.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 104, 17 + + + Render mode - the pattern to use for rendering the scene. +- DCRenderTarget - most simple mode - renders the whole scene every time the canvas needs to be redrawn +- BitmapRenderTarget OnPaint - cached, reasonable solution for fairly static images - renders the scene to a bitmap when the list of shapes changes and draws the bitmap to the canvas when it needs to be redrawn +- BitmapRenderTarget Real Time - cached, good for scenes with fairly static backgrounds with some animation on top - renders the scene to a bitmap when the list of shapes changes and draws the bitmap to the canvas in real time +- HwndRenderTarget - good for animations - renders the whole scene in real time (in a background thread) + + + 17, 17 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/DrawingShape.cs b/source/Samples/DirectX/CS/Direct2D/D2DShapes/DrawingShape.cs new file mode 100644 index 00000000..99f51dbd --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/D2DShapes/DrawingShape.cs @@ -0,0 +1,598 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +#if _D2DTRACE +using System.Diagnostics; +#endif +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; + +namespace D2DShapes +{ + public abstract class DrawingShape : IDisposable + { + #region Properties and Fields + private static int shapesCreated; + private int shapeID; + protected internal Random Random { get; set; } + protected internal D2DFactory d2DFactory; + + protected D2DBitmap bitmap; + internal virtual D2DBitmap Bitmap + { + get { return bitmap; } + set { bitmap = value; } + } + + [TypeConverter(typeof(ExpandableObjectConverter))] + public Brush FillBrush { get; set; } + + [TypeConverter(typeof(ExpandableObjectConverter))] + public Brush PenBrush { get; set; } + + public float StrokeWidth { get; set; } + + [TypeConverter(typeof(ExpandableObjectConverter))] + public StrokeStyle StrokeStyle { get; set; } + + protected const float FlatteningTolerance = 5; + + private RenderTarget renderTarget; + [TypeConverter(typeof(ExpandableObjectConverter))] + public RenderTarget RenderTarget + { + get { return renderTarget; } + set + { + if (renderTarget != value) + { + ChangeRenderTarget(value); + renderTarget = value; + } + } + } + + protected bool coolStrokes; //used by GeometryShape to create geometries from modified dashed strokes + + public virtual List ChildShapes + { + get + { + return null; + } + } + + protected int CanvasWidth + { + get + { + return (int)RenderTarget.PixelSize.Width; + } + } + + protected int CanvasHeight + { + get + { + return (int)RenderTarget.PixelSize.Height; + } + } + #endregion + + #region DrawingShape() - CTOR + protected DrawingShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap) + { + renderTarget = initialRenderTarget; + Random = random; + this.d2DFactory = d2DFactory; + this.bitmap = bitmap; + shapeID = ++shapesCreated; + } + #endregion + + public override string ToString() + { + return shapeID + ":" + GetType().Name; + } + + #region Virtual methods + /// + /// Draws the shape to the specified render target. + /// + /// The render target. + protected internal abstract void Draw(RenderTarget renderTarget); + /// + /// Changes the render target of the shape - need to create copies of all render target-dependent properties to the new render target. + /// + /// The render target. + protected internal abstract void ChangeRenderTarget(RenderTarget newRenderTarget); + /// + /// Hit test of the shape. + /// + /// The point. + /// true if the given point belongs to the shape + public virtual bool HitTest(Point2F point) + { + return false; + } + #endregion + + #region Methods to randomize properties of shapes + #region CoinFlip + protected internal bool CoinFlip + { + get + { + return Random.NextDouble() < 0.5; + } + } + #endregion + + #region RandomStrokeWidth() + protected float RandomStrokeWidth() + { + float ret = (float)(32 * Random.NextDouble() * Random.NextDouble()); +#if _D2DTRACE + Trace.WriteLine("Stroke width: " + ret); +#endif + return ret; + } + #endregion + + #region RandomOpacity() + protected float RandomOpacity() + { + float ret = Math.Min(1f, Math.Max(0f, 1.2f - (float)(Random.NextDouble() * 1.2))); +#if _D2DTRACE + Trace.WriteLine("Opacity: " + ret); +#endif + return ret; + } + #endregion + + #region RandomPoint() + protected internal Point2F RandomPoint() + { + previousPoint = new Point2F( + (float)Random.NextDouble() * CanvasWidth, + (float)Random.NextDouble() * CanvasHeight); +#if _D2DTRACE + Trace.WriteLine("Point: " + previousPoint.Value.X + "," + previousPoint.Value.Y); +#endif + return previousPoint.Value; + } + #endregion + + #region RandomNearPoint() + protected internal Point2F? previousPoint; + protected internal Point2F RandomNearPoint() + { + Point2F ret; + if (previousPoint == null || CoinFlip) + { + ret = RandomPoint(); + } + else + { + ret = new Point2F( + previousPoint.Value.X + (float)Random.NextDouble() * 100 - 50, + previousPoint.Value.Y + (float)Random.NextDouble() * 100 - 50); + } + previousPoint = ret; +#if _D2DTRACE + Trace.WriteLine("Point: " + previousPoint.Value.X + "," + previousPoint.Value.Y); +#endif + return ret; + } + #endregion + + #region RandomRect() + protected internal RectF RandomRect(float maxWidth, float maxHeight) + { + float x1 = (float)Random.NextDouble() * maxWidth; + float x2 = (float)Random.NextDouble() * maxWidth; + float y1 = (float)Random.NextDouble() * maxHeight; + float y2 = (float)Random.NextDouble() * maxHeight; + //return new RectF(x1, y1, x2, y2); + RectF ret = new RectF( + Math.Min(x1, x2), + Math.Min(y1, y2), + Math.Max(x1, x2), + Math.Max(y1, y2)); +#if _D2DTRACE + Trace.WriteLine("RectF: Left:" + ret.Left + ", Top:" + ret.Top + ", Right:" + ret.Right + ", Bottom:" + ret.Bottom); +#endif + return ret; + } + #endregion + + #region RandomBrush() + protected internal Brush RandomBrush() + { + double which = Random.NextDouble(); + if (which < 0.5) + return RandomSolidBrush(); + if (which < 0.7) + return RandomGradientBrush(); + if (which < 0.9) + return RandomRadialBrush(); + return RandomBitmapBrush(); + } + #endregion + + #region RandomSolidBrush() + protected internal SolidColorBrush RandomSolidBrush() + { +#if _D2DTRACE + Trace.WriteLine("SolidBrush:"); +#endif + return RenderTarget.CreateSolidColorBrush( + RandomColor(), + RandomBrushProperties()); + } + #endregion + + #region RandomGradientBrush() + protected internal LinearGradientBrush RandomGradientBrush() + { +#if _D2DTRACE + Trace.WriteLine("LinearGradientBrush:"); +#endif + return RenderTarget.CreateLinearGradientBrush( + new LinearGradientBrushProperties( + RandomPoint(), + RandomPoint()), + RandomGradientStopCollection(), + RandomBrushProperties()); + } + #endregion + + #region RandomRadialBrush() + protected internal RadialGradientBrush RandomRadialBrush() + { +#if _D2DTRACE + Trace.WriteLine("RadialGradientBrush:"); +#endif + float radiusX = (float)(Random.NextDouble() * CanvasWidth); + float radiusY = (float)(Random.NextDouble() * CanvasHeight); +#if _D2DTRACE + Trace.WriteLine("Radius: " + radiusX + "," + radiusY); +#endif + return RenderTarget.CreateRadialGradientBrush( + new RadialGradientBrushProperties( + RandomPoint(), + RandomPoint(), + radiusX, + radiusY), + RandomGradientStopCollection(), + RandomBrushProperties()); + } + #endregion + + #region RandomBitmapBrush() + private BitmapBrush RandomBitmapBrush() + { +#if _D2DTRACE + Trace.WriteLine("SolidBrush:"); +#endif + BitmapInterpolationMode interpolationMode = Random.NextDouble() < 0.25 ? BitmapInterpolationMode.Linear : BitmapInterpolationMode.NearestNeighbor; +#if _D2DTRACE + Trace.WriteLine("BitmapInterpolationMode: " + interpolationMode); +#endif + BitmapBrush ret = RenderTarget.CreateBitmapBrush( + Bitmap, + new BitmapBrushProperties( + RandomExtendMode(), + RandomExtendMode(), + interpolationMode), + new BrushProperties( + RandomOpacity(), + RandomMatrix3x2())); + return ret; + } + #endregion + + #region RandomGradientStopCollection() + private GradientStopCollection RandomGradientStopCollection() + { + int stopsCount = Random.Next(2, 16); + var stopPoints = new List(); + for (int i = 0; i < stopsCount; i++) + stopPoints.Add((float)Random.NextDouble()); + stopPoints.Sort(); + var stops = new GradientStop[stopsCount]; + for (int i = 0; i < stopsCount; i++) + stops[i] = new GradientStop(stopPoints[i], RandomColor()); + Gamma gamma = Random.NextDouble() < 0.7 ? Gamma.StandardRgb : Gamma.Linear; +#if _D2DTRACE + Trace.WriteLine("GradientStopCollection:"); + Trace.WriteLine(" Gamma: " + gamma); + foreach (var stop in stops) + Trace.WriteLine(string.Format(" GradientStop: Stop: {0}, Color (RGBA): {1},{2},{3},{4}", stop.Position, stop.Color.R, stop.Color.G, stop.Color.B, stop.Color.A)); +#endif + return RenderTarget.CreateGradientStopCollection( + stops, + gamma, + RandomExtendMode()); + } + #endregion + + #region RandomExtendMode() + private ExtendMode RandomExtendMode() + { + double which = Random.NextDouble(); + ExtendMode ret = which < 0.33 ? ExtendMode.Wrap : which < 0.65 ? ExtendMode.Mirror : ExtendMode.Clamp; +#if _D2DTRACE + Trace.WriteLine(" ExtendMode:" + ret); +#endif + return ret; + } + #endregion + + #region RandomBrushProperties() + private BrushProperties RandomBrushProperties() + { + float opacity = (float)Random.NextDouble(); +#if _D2DTRACE + Trace.WriteLine("BrushProperties: Opacity: " + opacity); +#endif + return new BrushProperties( + opacity, + RandomMatrix3x2()); + } + #endregion + + #region RandomMatrix3x2() + protected internal Matrix3x2F RandomMatrix3x2() + { + var which = Random.NextDouble(); + //return Matrix3x2F.Skew(90, 0); //check for bug 730701 + Matrix3x2F ret; + if (which < 0.5) + { + ret = new Matrix3x2F( + 1.0f - (float) Random.NextDouble()*(float) Random.NextDouble(), + (float) Random.NextDouble()*(float) Random.NextDouble(), + (float) Random.NextDouble()*(float) Random.NextDouble(), + 1.0f - (float) Random.NextDouble()*(float) Random.NextDouble(), + (float) Random.NextDouble()*(float) Random.NextDouble(), + (float) Random.NextDouble()*(float) Random.NextDouble() + ); + TraceMatrix(ret); + return ret; + } + if (which < 0.8) + { + ret = Matrix3x2F.Identity; + TraceMatrix(ret); + return ret; + } + if (which < 0.85) + { + ret = Matrix3x2F.Translation( + Random.Next(-20, 20), + Random.Next(-20, 20)); + TraceMatrix(ret); + return ret; + } + if (which < 0.90) + { + ret = Matrix3x2F.Skew( + (float)(Random.NextDouble() * Random.NextDouble() * 89), + (float)(Random.NextDouble() * Random.NextDouble() * 89), + CoinFlip ? new Point2F(0, 0) : RandomPoint()); + TraceMatrix(ret); + return ret; + } + if (which < 0.95) + { + ret = Matrix3x2F.Scale( + 1 + (float)((Random.NextDouble() - 0.5) * Random.NextDouble()), + 1 + (float)((Random.NextDouble() - 0.5) * Random.NextDouble()), + CoinFlip ? new Point2F(0, 0) : RandomPoint()); + TraceMatrix(ret); + return ret; + } + ret = Matrix3x2F.Rotation( + (float)((Random.NextDouble() - 0.5) * Random.NextDouble() * 720), + CoinFlip ? new Point2F(0,0) : RandomPoint()); + TraceMatrix(ret); + return ret; + } + + private static void TraceMatrix(Matrix3x2F matrix) + { +#if _D2DTRACE + Trace.WriteLine(string.Format(" Matrix3x2: {0}, {1}", matrix.M11, matrix.M12)); + Trace.WriteLine(string.Format(" {0}, {1}", matrix.M21, matrix.M22)); + Trace.WriteLine(string.Format(" {0}, {1}", matrix.M31, matrix.M32)); +#endif + } + #endregion + + #region RandomColor() + protected internal ColorF RandomColor() + { + ColorF ret = new ColorF( + (float)Random.NextDouble(), + (float)Random.NextDouble(), + (float)Random.NextDouble(), + RandomOpacity()); +#if _D2DTRACE + Trace.WriteLine(string.Format("ColorF (RGBA): {0},{1},{2},{3}", ret.R, ret.G, ret.B, ret.A)); +#endif + return ret; + } + #endregion + + #region RandomStrokeStyle() + protected internal StrokeStyle RandomStrokeStyle() + { + var strokeStyleProperties = new StrokeStyleProperties( + RandomCapStyle(), + RandomCapStyle(), + RandomCapStyle(), + RandomLineJoin(), + 1.0f + 2.0f * (float)Random.NextDouble(), + RandomDashStyle(), + 5.0f * (float)Random.NextDouble()); + if (strokeStyleProperties.DashStyle == DashStyle.Custom) + return d2DFactory.CreateStrokeStyle(strokeStyleProperties, RandomDashes()); + else + return d2DFactory.CreateStrokeStyle(strokeStyleProperties); + } + #endregion + + #region RandomDashes() + private float[] RandomDashes() + { + var dashes = new float[Random.Next(2, 20)]; + for (int i = 0; i < dashes.Length; i++) + dashes[i] = 3.0f * (float)Random.NextDouble(); + return dashes; + } + #endregion + + #region RandomDashStyle() + private DashStyle RandomDashStyle() + { + double which = Random.NextDouble(); + if (!coolStrokes && which < 0.5) + return DashStyle.Solid; + if (which < 0.75) + return DashStyle.Custom; + return (DashStyle)(Random.Next((int)DashStyle.Dash, (int)DashStyle.DashDotDot)); + } + #endregion + + #region RandomLineJoin() + private LineJoin RandomLineJoin() + { + return (LineJoin)(Random.Next(0, 3)); + } + #endregion + + #region RandomCapStyle() + private CapStyle RandomCapStyle() + { + return (CapStyle)(Random.Next(0, 3)); + } + #endregion + + #region RandomEllipse() + protected internal Ellipse RandomEllipse() + { + return new Ellipse( + RandomPoint(), + (float)(0.5 * CanvasWidth * Random.NextDouble()), + (float)(0.5 * CanvasHeight * Random.NextDouble())); + } + #endregion + + #region RandomRoundedRect() + protected internal RoundedRect RandomRoundedRect() + { + return new RoundedRect( + RandomRect(CanvasWidth, CanvasHeight), + (float)(32 * Random.NextDouble()), + (float)(32 * Random.NextDouble())); + } + #endregion + #endregion + + #region CopyBrushToRenderTarget() + /// + /// Creates and returns a copy of the brush in the new render target. + /// Used for changing render targets. + /// A brush belongs to a render target, so when you want to draw with same brush in another render target + /// - you need to create a copy of the brush in the new render target. + /// + /// The brush. + /// The new render target. + /// + protected internal Brush CopyBrushToRenderTarget(Brush sourceBrush, RenderTarget newRenderTarget) + { + if (sourceBrush == null || newRenderTarget == null) + return null; + Brush newBrush; + if (sourceBrush is SolidColorBrush) + { + newBrush = newRenderTarget.CreateSolidColorBrush( + ((SolidColorBrush)sourceBrush).Color, + new BrushProperties(sourceBrush.Opacity, sourceBrush.Transform)); + sourceBrush.Dispose(); + return newBrush; + } + if (sourceBrush is LinearGradientBrush) + { + var oldGSC = ((LinearGradientBrush)sourceBrush).GradientStops; + var newGSC = newRenderTarget.CreateGradientStopCollection(oldGSC, oldGSC.ColorInterpolationGamma, oldGSC.ExtendMode); + oldGSC.Dispose(); + newBrush = newRenderTarget.CreateLinearGradientBrush( + new LinearGradientBrushProperties( + ((LinearGradientBrush)sourceBrush).StartPoint, + ((LinearGradientBrush)sourceBrush).EndPoint), + newGSC, + new BrushProperties(sourceBrush.Opacity, sourceBrush.Transform)); + sourceBrush.Dispose(); + return newBrush; + } + if (sourceBrush is RadialGradientBrush) + { + var oldGSC = ((RadialGradientBrush)sourceBrush).GradientStops; + var newGSC = newRenderTarget.CreateGradientStopCollection(oldGSC, oldGSC.ColorInterpolationGamma, oldGSC.ExtendMode); + oldGSC.Dispose(); + newBrush = newRenderTarget.CreateRadialGradientBrush( + new RadialGradientBrushProperties( + ((RadialGradientBrush)sourceBrush).Center, + ((RadialGradientBrush)sourceBrush).GradientOriginOffset, + ((RadialGradientBrush)sourceBrush).RadiusX, + ((RadialGradientBrush)sourceBrush).RadiusY), + newGSC, + new BrushProperties(sourceBrush.Opacity, sourceBrush.Transform)); + sourceBrush.Dispose(); + return newBrush; + } + if (sourceBrush is BitmapBrush) + { + newBrush = newRenderTarget.CreateBitmapBrush( + Bitmap, + new BitmapBrushProperties( + ((BitmapBrush)sourceBrush).ExtendModeX, + ((BitmapBrush)sourceBrush).ExtendModeY, + ((BitmapBrush)sourceBrush).InterpolationMode), + new BrushProperties(sourceBrush.Opacity, sourceBrush.Transform)); + sourceBrush.Dispose(); + return newBrush; + } + throw new NotImplementedException("Unknown brush type used"); + } + #endregion + + #region IDisposable.Dispose() + protected bool disposed; + public virtual void Dispose() + { + if (!disposed) + { + if (FillBrush != null) + { + FillBrush.Dispose(); + FillBrush = null; + } + if (PenBrush != null) + { + PenBrush.Dispose(); + PenBrush = null; + } + if (StrokeStyle != null) + { + StrokeStyle.Dispose(); + StrokeStyle = null; + } + } + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/EllipseShape.cs b/source/Samples/DirectX/CS/Direct2D/D2DShapes/EllipseShape.cs new file mode 100644 index 00000000..86573712 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/D2DShapes/EllipseShape.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; + +namespace D2DShapes +{ + internal class EllipseShape : DrawingShape + { + internal Ellipse ellipse; + + public EllipseShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap) + : base(initialRenderTarget, random, d2DFactory, bitmap) + { + ellipse = RandomEllipse(); + double which = Random.NextDouble(); + if (which < 0.67) + PenBrush = RandomBrush(); + if (which > 0.33) + FillBrush = RandomBrush(); + if (CoinFlip) + StrokeStyle = RandomStrokeStyle(); + StrokeWidth = RandomStrokeWidth(); + } + + protected internal override void ChangeRenderTarget(RenderTarget newRenderTarget) + { + PenBrush = CopyBrushToRenderTarget(PenBrush, newRenderTarget); + FillBrush = CopyBrushToRenderTarget(FillBrush, newRenderTarget); + } + + protected internal override void Draw(RenderTarget renderTarget) + { + if (FillBrush != null) + { + renderTarget.FillEllipse(ellipse, FillBrush); + } + if (PenBrush != null) + { + if (StrokeStyle != null) + renderTarget.DrawEllipse(ellipse, PenBrush, StrokeWidth, StrokeStyle); + else + renderTarget.DrawEllipse(ellipse, PenBrush, StrokeWidth); + } + } + + public override bool HitTest(Point2F point) + { + EllipseGeometry g = d2DFactory.CreateEllipseGeometry(ellipse); + bool ret = g.FillContainsPoint(point, 1); + g.Dispose(); + return ret; + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/GDIEllipsesShape.cs b/source/Samples/DirectX/CS/Direct2D/D2DShapes/GDIEllipsesShape.cs new file mode 100644 index 00000000..3648b4ca --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/D2DShapes/GDIEllipsesShape.cs @@ -0,0 +1,139 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Drawing; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; + +namespace D2DShapes +{ + internal class GDIEllipsesShape : DrawingShape + { + private struct GdiEllipse + { + public Pen pen; + public Rectangle rect; + }; + + readonly List ellipses = new List(); + private GdiInteropRenderTarget gdiRenderTarget; + + public GDIEllipsesShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap, int count) + : base(initialRenderTarget, random, d2DFactory, bitmap) + { + for(int i = 0; i < count; i++) + { + ellipses.Add(RandomGdiEllipse()); + } + + if (RenderTargetSupportsGDI(RenderTarget)) + { + gdiRenderTarget = RenderTarget.GdiInteropRenderTarget; + } + } + + private static bool RenderTargetSupportsGDI(RenderTarget rt) + { + var propertiesToSupport = new RenderTargetProperties( + RenderTargetType.Default, + new PixelFormat( + Format.B8G8R8A8UNorm, + AlphaMode.Ignore), + 96, + 96, + RenderTargetUsages.GdiCompatible, + FeatureLevel.Default); + if (rt.IsSupported(propertiesToSupport)) + return true; + propertiesToSupport = new RenderTargetProperties( + RenderTargetType.Default, + new PixelFormat( + Format.B8G8R8A8UNorm, + AlphaMode.Premultiplied), + 96, + 96, + RenderTargetUsages.GdiCompatible, + FeatureLevel.Default); + return rt.IsSupported(propertiesToSupport); + } + + private GdiEllipse RandomGdiEllipse() + { + return new GdiEllipse + { + pen = new Pen(Brushes.Black), + rect = RandomGdiRect() + }; + } + + private Rectangle RandomGdiRect() + { + int x1 = Random.Next(0, CanvasWidth); + int x2 = Random.Next(0, CanvasWidth); + int y1 = Random.Next(0, CanvasHeight); + int y2 = Random.Next(0, CanvasHeight); + return new Rectangle( + Math.Min(x1, x2), + Math.Min(y1, y2), + Math.Max(x1, x2) - Math.Min(x1, x2), + Math.Max(y1, y2) - Math.Min(y1, y2)); + } + + protected internal override void ChangeRenderTarget(RenderTarget newRenderTarget) + { + if (RenderTargetSupportsGDI(newRenderTarget)) + { + gdiRenderTarget = newRenderTarget.GdiInteropRenderTarget; + } + else if (gdiRenderTarget != null) + { + gdiRenderTarget.Dispose(); + gdiRenderTarget = null; + } + } + + protected internal override void Draw(RenderTarget renderTarget) + { + if (gdiRenderTarget != null) + { + IntPtr dc = gdiRenderTarget.GetDC(DCInitializeMode.Copy); + Graphics g = Graphics.FromHdc(dc); + foreach (var ellipse in ellipses) + { + g.DrawEllipse(ellipse.pen, ellipse.rect); + } + g.Dispose(); + gdiRenderTarget.ReleaseDC(); + } + } + + public override bool HitTest(Point2F point) + { + foreach (var ellipse in ellipses) + { + + EllipseGeometry g = d2DFactory.CreateEllipseGeometry(new Ellipse( + new Point2F( + (ellipse.rect.Left + ellipse.rect.Right) / 2, + (ellipse.rect.Top + ellipse.rect.Bottom) / 2), + ellipse.rect.Width / 2, + ellipse.rect.Height / 2)); + bool ret = g.FillContainsPoint(point, 1); + g.Dispose(); + if (ret) + return true; + } + return false; + } + + public override void Dispose() + { + if (gdiRenderTarget != null) + gdiRenderTarget.Dispose(); + gdiRenderTarget = null; + base.Dispose(); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/GeometryShape.cs b/source/Samples/DirectX/CS/Direct2D/D2DShapes/GeometryShape.cs new file mode 100644 index 00000000..6d512730 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/D2DShapes/GeometryShape.cs @@ -0,0 +1,330 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; + +namespace D2DShapes +{ + internal class GeometryShape : DrawingShape + { + private Geometry geometry; + internal PathGeometry geometryOutlined; + internal PathGeometry geometrySimplified; + internal PathGeometry geometryWidened; + internal Matrix3x2F? worldTransform; + + public GeometryShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap) + : base(initialRenderTarget, random, d2DFactory, bitmap) + { + coolStrokes = CoinFlip; + double which = Random.NextDouble(); + if (which < 0.67 || coolStrokes) + PenBrush = RandomBrush(); + if (!coolStrokes && which > 0.33) + FillBrush = RandomBrush(); + if (coolStrokes || CoinFlip) + StrokeStyle = RandomStrokeStyle(); + if (CoinFlip) + worldTransform = RandomMatrix3x2(); + StrokeWidth = RandomStrokeWidth(); + geometry = RandomGeometry(); + if (coolStrokes || Random.NextDouble() < 0.3) + ModifyGeometry(); + if (coolStrokes && CoinFlip) + { + ModifyGeometry(); + } + } + + [TypeConverter(typeof(ExpandableObjectConverter))] + public Geometry Geometry + { + get { return geometry; } + set { geometry = value; } + } + + private void ModifyGeometry() + { + GeometrySink geometrySink; + double which = Random.NextDouble(); + if (which < 0.33) + { + geometryOutlined = d2DFactory.CreatePathGeometry(); + geometrySink = geometryOutlined.Open(); + geometry.Outline(geometrySink, FlatteningTolerance); + geometrySink.Close(); + geometrySink.Dispose(); + geometry.Dispose(); + geometry = geometryOutlined; + } + else if (which < 0.67) + { + geometrySimplified = d2DFactory.CreatePathGeometry(); + geometrySink = geometrySimplified.Open(); + geometry.Simplify( + CoinFlip + ? GeometrySimplificationOption.Lines + : GeometrySimplificationOption.CubicsAndLines, + geometrySink, + FlatteningTolerance + ); + geometrySink.Close(); + geometrySink.Dispose(); + geometry.Dispose(); + geometry = geometrySimplified; + } + else + { + geometryWidened = d2DFactory.CreatePathGeometry(); + geometrySink = geometryWidened.Open(); + geometry.Widen( + RandomStrokeWidth(), //75 + RandomStrokeStyle(), + geometrySink, + FlatteningTolerance); + geometrySink.Close(); + geometrySink.Dispose(); + geometry.Dispose(); + geometry = geometryWidened; + } + } + + //this could be called recursively + public Geometry RandomGeometry() + { + return RandomGeometry(0); + } + + public Geometry RandomGeometry(int level) + { + Geometry g = null; + + while (g == null) + { + double which = Random.NextDouble(); + + if (which < 0.20) + g = RandomEllipseGeometry(); + else if (which < 0.40) + g = RandomRoundRectGeometry(); + else if (which < 0.60) + g = RandomRectangleGeometry(); + else if (which < 0.80) + g = RandomPathGeometry(); + else if (level < 3) + g = RandomGeometryGroup(level + 1); + } + + if (worldTransform.HasValue) + g = d2DFactory.CreateTransformedGeometry(g, worldTransform.Value); + + return g; + } + + private Geometry RandomTransformedGeometry() + { + Geometry start, ret; + start = RandomGeometry(); + ret = d2DFactory.CreateTransformedGeometry( + start, + RandomMatrix3x2()); + start.Dispose(); + return ret; + } + + private Geometry RandomGeometryGroup(int level) + { + var geometries = new List(); + int count = Random.Next(1, 5); + for (int i = 0; i < count; i++) + geometries.Add(RandomGeometry(level)); + GeometryGroup ret = d2DFactory.CreateGeometryGroup( + Random.NextDouble() < .5 ? FillMode.Winding : FillMode.Alternate, + geometries); + foreach (var g in geometries) + { + g.Dispose(); + } + return ret; + } + + private PathGeometry RandomPathGeometry() + { + PathGeometry g = d2DFactory.CreatePathGeometry(); + int totalSegmentCount = 0; + int figureCount = Random.Next(1, 2); + using (GeometrySink sink = g.Open()) + { + for (int f = 0; f < figureCount; f++) + { + int segmentCount = Random.Next(2, 20); + AddRandomFigure(sink, segmentCount); + totalSegmentCount += segmentCount; + } + sink.Close(); + } + System.Diagnostics.Debug.Assert(g.SegmentCount == totalSegmentCount); + System.Diagnostics.Debug.Assert(g.FigureCount == figureCount); + return g; + } + + private void AddRandomFigure(IGeometrySink sink, int segmentCount) + { + previousPoint = null; + sink.BeginFigure( + RandomNearPoint(), + CoinFlip ? FigureBegin.Filled : FigureBegin.Hollow); + FigureEnd end = CoinFlip ? FigureEnd.Closed : FigureEnd.Closed; + if (end == FigureEnd.Closed) + segmentCount--; + if (CoinFlip) + for (int i = 0; i < segmentCount; i++) + AddRandomSegment(sink); + else + { + double which = Random.NextDouble(); + if (which < 0.33) + sink.AddLines(RandomLines(segmentCount)); + else if (which < 0.67) + sink.AddQuadraticBeziers(RandomQuadraticBeziers(segmentCount)); + else + sink.AddBeziers(RandomBeziers(segmentCount)); + } + sink.EndFigure(end); + } + + private IEnumerable RandomLines(int segmentCount) + { + var lines = new List(); + for (int i = 0; i < segmentCount; i++) + lines.Add(RandomNearPoint()); + return lines; + } + + private IEnumerable RandomQuadraticBeziers(int segmentCount) + { + var beziers = new List(); + for (int i = 0; i < segmentCount; i++) + beziers.Add(new QuadraticBezierSegment( + RandomNearPoint(), + RandomNearPoint())); + return beziers; + } + + private IEnumerable RandomBeziers(int segmentCount) + { + var beziers = new List(); + for (int i = 0; i < segmentCount; i++) + beziers.Add(new BezierSegment( + RandomNearPoint(), + RandomNearPoint(), + RandomNearPoint())); + return beziers; + } + + private void AddRandomSegment(IGeometrySink sink) + { + double which = Random.NextDouble(); + if (which < 0.25) + sink.AddLine(RandomNearPoint()); + else if (which < 0.5) + sink.AddArc(RandomArc()); + else if (which < 0.75) + sink.AddBezier(RandomBezier()); + else if (which < 1.0) + sink.AddQuadraticBezier(RandomQuadraticBezier()); + } + + private QuadraticBezierSegment RandomQuadraticBezier() + { + return new QuadraticBezierSegment( + RandomNearPoint(), + RandomNearPoint()); + } + + private BezierSegment RandomBezier() + { + return new BezierSegment( + RandomNearPoint(), + RandomNearPoint(), + RandomNearPoint()); + } + + private ArcSegment RandomArc() + { + return new ArcSegment( + RandomNearPoint(), + RandomSize(), + (float)Random.NextDouble() * 360, + CoinFlip ? SweepDirection.Clockwise : SweepDirection.Counterclockwise, + CoinFlip ? ArcSize.Large : ArcSize.Small + ); + } + + private SizeF RandomSize() + { + return new SizeF( + (float)Random.NextDouble() * CanvasWidth, + (float)Random.NextDouble() * CanvasHeight); + } + + private RoundedRectangleGeometry RandomRoundRectGeometry() + { + return d2DFactory.CreateRoundedRectangleGeometry( + RandomRoundedRect()); + } + + private RectangleGeometry RandomRectangleGeometry() + { + return d2DFactory.CreateRectangleGeometry( + RandomRect(CanvasWidth, CanvasHeight)); + } + + private EllipseGeometry RandomEllipseGeometry() + { + return d2DFactory.CreateEllipseGeometry( + RandomEllipse()); + } + + protected internal override void ChangeRenderTarget(RenderTarget newRenderTarget) + { + PenBrush = CopyBrushToRenderTarget(PenBrush, newRenderTarget); + FillBrush = CopyBrushToRenderTarget(FillBrush, newRenderTarget); + } + + protected internal override void Draw(RenderTarget renderTarget) + { + Geometry g = geometry; + if (FillBrush != null) + { + renderTarget.FillGeometry(g, FillBrush, null); + } + if (PenBrush != null) + { + if (StrokeStyle != null) + { + renderTarget.DrawGeometry(g, PenBrush, StrokeWidth, StrokeStyle); + } + else + { + renderTarget.DrawGeometry(g, PenBrush, StrokeWidth); + } + } + } + + public override bool HitTest(Point2F point) + { + return geometry.FillContainsPoint(point, FlatteningTolerance); + } + + public override void Dispose() + { + if (geometry != null) + geometry.Dispose(); + geometry = null; + base.Dispose(); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/LayerShape.cs b/source/Samples/DirectX/CS/Direct2D/D2DShapes/LayerShape.cs new file mode 100644 index 00000000..9dc731f2 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/D2DShapes/LayerShape.cs @@ -0,0 +1,164 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; + +namespace D2DShapes +{ + internal class LayerShape : DrawingShape + { + #region Properties + private readonly List shapes = new List(); + public override List ChildShapes + { + get + { + return shapes; + } + } + + internal override sealed D2DBitmap Bitmap + { + get + { + return base.Bitmap; + } + set + { + base.Bitmap = value; + foreach (var shape in ChildShapes) + { + shape.Bitmap = value; + } + } + } + + private LayerParameters parameters; + [TypeConverter(typeof(ExpandableObjectConverter))] + public LayerParameters Parameters + { + get { return parameters; } + set { parameters = value; } + } + + [TypeConverter(typeof(ExpandableObjectConverter))] + public Layer Layer { get; set; } + + [TypeConverter(typeof(ExpandableObjectConverter))] + public GeometryShape GeometricMaskShape { get; set; } + #endregion + + public LayerShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap, int count) + : base(initialRenderTarget, random, d2DFactory, bitmap) + { + Parameters = new LayerParameters(); + parameters.ContentBounds = CoinFlip ? RandomRect(CanvasWidth, CanvasHeight) : new RectF(0, 0, CanvasWidth, CanvasHeight); + if (CoinFlip) + { + GeometricMaskShape = new GeometryShape(initialRenderTarget, random, d2DFactory, Bitmap); + parameters.GeometricMask = GeometricMaskShape.Geometry; + } + parameters.MaskAntiAliasMode = CoinFlip ? AntiAliasMode.Aliased : AntiAliasMode.PerPrimitive; + parameters.MaskTransform = RandomMatrix3x2(); + parameters.Opacity = RandomOpacity(); + if (CoinFlip) + parameters.OpacityBrush = RandomOpacityBrush(); + parameters.Options = CoinFlip ? LayerOptions.InitializeForClearType : LayerOptions.None; + + for(int i = 0; i < count; i++) + { + shapes.Add(RandomShape()); + } + } + + public override bool HitTest(Point2F point) + { + return parameters.ContentBounds.Top <= point.Y && + parameters.ContentBounds.Bottom >= point.Y && + parameters.ContentBounds.Left <= point.X && + parameters.ContentBounds.Right >= point.X && + (GeometricMaskShape != null ? GeometricMaskShape.Geometry.FillContainsPoint(point, 5) : true) && + parameters.Opacity > 0; + } + + private DrawingShape RandomShape() + { + double which = Random.NextDouble(); + //GDI does not work in layers + //return new GDIEllipsesShape(RenderTarget, Random, d2DFactory, Bitmap, 1); + //layers inside of layers can be really slow + //if (which < 0.01) + // return new LayerShape(RenderTarget, Random, d2DFactory, Bitmap, 1); + if (which < 0.1) + return new LineShape(RenderTarget, Random, d2DFactory, Bitmap); + if (which < 0.3) + return new RectangleShape(RenderTarget, Random, d2DFactory, Bitmap); + if (which < 0.5) + return new RoundRectangleShape(RenderTarget, Random, d2DFactory, Bitmap); + if (which < 0.6) + return new BitmapShape(RenderTarget, Random, d2DFactory, Bitmap); + if (which < 0.8) + return new EllipseShape(RenderTarget, Random, d2DFactory, Bitmap); + return new GeometryShape(RenderTarget, Random, d2DFactory, Bitmap); + } + + private Brush RandomOpacityBrush() + { + return CoinFlip ? (Brush) RandomRadialBrush() : RandomGradientBrush(); + } + + protected internal override void ChangeRenderTarget(RenderTarget newRenderTarget) + { + if (GeometricMaskShape != null) + { + GeometricMaskShape.Bitmap = Bitmap; + GeometricMaskShape.RenderTarget = newRenderTarget; + } + if (parameters.OpacityBrush != null) + parameters.OpacityBrush = CopyBrushToRenderTarget(parameters.OpacityBrush, newRenderTarget); + foreach (var shape in ChildShapes) + { + shape.Bitmap = Bitmap; + shape.RenderTarget = newRenderTarget; + } + Layer = null; + } + + protected internal override void Draw(RenderTarget renderTarget) + { + if (Layer == null || + Layer.Size.Width != renderTarget.Size.Width || + Layer.Size.Height != renderTarget.Size.Height) + { + if (Layer != null) + Layer.Dispose(); + Layer = renderTarget.CreateLayer(renderTarget.Size); + } + renderTarget.PushLayer(Parameters, Layer); + foreach(DrawingShape shape in shapes) + shape.Draw(renderTarget); + renderTarget.PopLayer(); + } + + public override void Dispose() + { + foreach (var shape in ChildShapes) + { + shape.Dispose(); + } + ChildShapes.Clear(); + if (parameters.OpacityBrush != null) + parameters.OpacityBrush.Dispose(); + if (GeometricMaskShape != null) + GeometricMaskShape.Dispose(); + GeometricMaskShape = null; + parameters.OpacityBrush = null; + if (Layer != null) + Layer.Dispose(); + Layer = null; + base.Dispose(); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/LineShape.cs b/source/Samples/DirectX/CS/Direct2D/D2DShapes/LineShape.cs new file mode 100644 index 00000000..d990e0eb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/D2DShapes/LineShape.cs @@ -0,0 +1,36 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; + +namespace D2DShapes +{ + internal class LineShape : DrawingShape + { + internal Point2F point0, point1; + + public LineShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap) + : base(initialRenderTarget, random, d2DFactory, bitmap) + { + point0 = RandomPoint(); + point1 = RandomPoint(); + PenBrush = RandomBrush(); + StrokeWidth = RandomStrokeWidth(); + if (CoinFlip) + StrokeStyle = RandomStrokeStyle(); + } + + protected internal override void ChangeRenderTarget(RenderTarget newRenderTarget) + { + PenBrush = CopyBrushToRenderTarget(PenBrush, newRenderTarget); + } + + protected internal override void Draw(RenderTarget renderTarget) + { + if (StrokeStyle != null) + renderTarget.DrawLine(point0, point1, PenBrush, StrokeWidth, StrokeStyle); + else + renderTarget.DrawLine(point0, point1, PenBrush, StrokeWidth); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/MeshShape.cs b/source/Samples/DirectX/CS/Direct2D/D2DShapes/MeshShape.cs new file mode 100644 index 00000000..e1efc5b3 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/D2DShapes/MeshShape.cs @@ -0,0 +1,190 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; + +namespace D2DShapes +{ + internal class MeshShape : DrawingShape + { + private Mesh mesh; + private List triangles; + private GeometryShape geometry; + + internal override D2DBitmap Bitmap + { + get + { + return base.Bitmap; + } + set + { + base.Bitmap = value; + if (geometry != null) + geometry.Bitmap = value; + } + } + + public MeshShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap) + : base(initialRenderTarget, random, d2DFactory, bitmap) + { + FillBrush = RandomBrush(); + + mesh = CoinFlip ? MeshFromRandomGeometry() : MeshFromRandomTriangles(); + } + + [TypeConverter(typeof(ExpandableObjectConverter))] + public Mesh Mesh + { + get { return mesh; } + set { mesh = value; } + } + + private Mesh MeshFromRandomTriangles() + { + Mesh m = RenderTarget.CreateMesh(); + using (TessellationSink sink = m.Open()) + { + int count = Random.Next(2, 20); + triangles = new List(); + CreateRandomTriangles(count); + + sink.AddTriangles(triangles); + sink.Close(); + } + return m; + } + + private void CreateRandomTriangles(int count) + { + var which = Random.NextDouble(); + if (which < 0.33) //random triangles + { + for (int i = 0; i < count; i++) + { + triangles.Add(new Triangle(RandomNearPoint(), RandomNearPoint(), RandomNearPoint())); + } + } + else if (which < 0.67) //fan of triangles + { + Point2F p1, p2, p3; + p1 = RandomPoint(); + p3 = RandomNearPoint(); + for (int i = 0; i < count; i++) + { + p2 = p3; + p3 = RandomNearPoint(); + triangles.Add(new Triangle(p1, p2, p3)); + } + } + else //triangle strip + { + Point2F p1, p2, p3; + p2 = RandomPoint(); + p3 = RandomNearPoint(); + for (int i = 0; i < count; i++) + { + p1 = p2; + p2 = p3; + p3 = RandomNearPoint(); + triangles.Add(new Triangle(p1, p2, p3)); + } + } + } + + private Mesh MeshFromRandomGeometry() + { + if (geometry != null) + geometry.Dispose(); + geometry = new GeometryShape(RenderTarget, Random, d2DFactory, Bitmap); + Mesh m = RenderTarget.CreateMesh(); + TessellationSink sink = m.Open(); + if (geometry.worldTransform.HasValue) + geometry.Geometry.Tessellate(sink, FlatteningTolerance, geometry.worldTransform.Value); + else + geometry.Geometry.Tessellate(sink, FlatteningTolerance); + sink.Close(); + sink.Dispose(); + return m; + } + + protected internal override void ChangeRenderTarget(RenderTarget newRenderTarget) + { + TessellationSink sink; + mesh.Dispose(); + mesh = newRenderTarget.CreateMesh(); + if (geometry != null) + { + geometry.RenderTarget = newRenderTarget; + sink = mesh.Open(); + if (geometry.worldTransform.HasValue) + geometry.Geometry.Tessellate(sink, FlatteningTolerance, geometry.worldTransform.Value); + else + geometry.Geometry.Tessellate(sink, FlatteningTolerance); + } + else + { + sink = mesh.Open(); + sink.AddTriangles(triangles); + } + sink.Close(); + sink.Dispose(); + FillBrush = CopyBrushToRenderTarget(FillBrush, newRenderTarget); + } + + protected internal override void Draw(RenderTarget renderTarget) + { + DrawingStateBlock stateBlock = d2DFactory.CreateDrawingStateBlock(); + renderTarget.SaveDrawingState(stateBlock); + //AntialiasMode push = RenderTarget.AntialiasMode; + renderTarget.AntiAliasMode = AntiAliasMode.Aliased; + renderTarget.FillMesh(mesh, FillBrush); + //RenderTarget.AntialiasMode = push; + renderTarget.RestoreDrawingState(stateBlock); + stateBlock.Dispose(); + } + + public override bool HitTest(Point2F point) + { + if (geometry != null) + { + return geometry.HitTest(point); + } + if (triangles != null) + { + foreach (var triangle in triangles) + { + if (IsPointInTriangle(triangle, point)) + return true; + } + } + return false; + } + + private static bool IsPointInTriangle(Triangle triangle, Point2F point) + { + //no time to implement the proper algorithm, so let's just use a bounding rectangle... + float left = Math.Min(triangle.Point1.X, Math.Min(triangle.Point2.X, triangle.Point3.X)); + float right = Math.Max(triangle.Point1.X, Math.Max(triangle.Point2.X, triangle.Point3.X)); + float top = Math.Min(triangle.Point1.Y, Math.Min(triangle.Point2.Y, triangle.Point3.Y)); + float bottom = Math.Max(triangle.Point1.Y, Math.Max(triangle.Point2.Y, triangle.Point3.Y)); + return point.X >= left && + point.X <= right && + point.Y >= top && + point.Y <= bottom; + } + + public override void Dispose() + { + if (geometry != null) + geometry.Dispose(); + geometry = null; + if (mesh != null) + mesh.Dispose(); + mesh = null; + base.Dispose(); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/Peacock.jpg b/source/Samples/DirectX/CS/Direct2D/D2DShapes/Peacock.jpg new file mode 100644 index 00000000..11b234b2 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct2D/D2DShapes/Peacock.jpg differ diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct2D/D2DShapes/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..3c1149d7 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/D2DShapes/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("D2DHelpers")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("dd5e88a9-f264-4317-a4a0-c1abba498c09")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/RectangleShape.cs b/source/Samples/DirectX/CS/Direct2D/D2DShapes/RectangleShape.cs new file mode 100644 index 00000000..f8ebef3d --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/D2DShapes/RectangleShape.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; + +namespace D2DShapes +{ + internal class RectangleShape : DrawingShape + { + internal RectF rect; + + public RectangleShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap) + : base(initialRenderTarget, random, d2DFactory, bitmap) + { + rect = RandomRect(CanvasWidth, CanvasHeight); + double which = Random.NextDouble(); + if (which < 0.67) + PenBrush = RandomBrush(); + if (which > 0.33) + FillBrush = RandomBrush(); + if (CoinFlip) + StrokeStyle = RandomStrokeStyle(); + StrokeWidth = RandomStrokeWidth(); + } + + protected internal override void ChangeRenderTarget(RenderTarget newRenderTarget) + { + PenBrush = CopyBrushToRenderTarget(PenBrush, newRenderTarget); + FillBrush = CopyBrushToRenderTarget(FillBrush, newRenderTarget); + } + + protected internal override void Draw(RenderTarget renderTarget) + { + if (FillBrush != null) + { + renderTarget.FillRectangle(rect, FillBrush); + } + if (PenBrush != null) + { + if (StrokeStyle != null) + renderTarget.DrawRectangle(rect, PenBrush, StrokeWidth, StrokeStyle); + else + renderTarget.DrawRectangle(rect, PenBrush, StrokeWidth); + } + } + + public override bool HitTest(Point2F point) + { + return point.X >= rect.Left && + point.X <= rect.Right && + point.Y >= rect.Top && + point.Y <= rect.Bottom; + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/RoundRectangleShape.cs b/source/Samples/DirectX/CS/Direct2D/D2DShapes/RoundRectangleShape.cs new file mode 100644 index 00000000..31770885 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/D2DShapes/RoundRectangleShape.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; + +namespace D2DShapes +{ + internal class RoundRectangleShape : DrawingShape + { + internal RoundedRect rect; + + public RoundRectangleShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap) + : base(initialRenderTarget, random, d2DFactory, bitmap) + { + rect = RandomRoundedRect(); + double which = Random.NextDouble(); + if (which < 0.67) + PenBrush = RandomBrush(); + if (which > 0.33) + FillBrush = RandomBrush(); + if (CoinFlip) + StrokeStyle = RandomStrokeStyle(); + StrokeWidth = RandomStrokeWidth(); + } + + protected internal override void ChangeRenderTarget(RenderTarget newRenderTarget) + { + PenBrush = CopyBrushToRenderTarget(PenBrush, newRenderTarget); + FillBrush = CopyBrushToRenderTarget(FillBrush, newRenderTarget); + } + + protected internal override void Draw(RenderTarget renderTarget) + { + if (FillBrush != null) + { + renderTarget.FillRoundedRectangle(rect, FillBrush); + } + if (PenBrush != null) + { + if (StrokeStyle != null) + renderTarget.DrawRoundedRectangle(rect, PenBrush, StrokeWidth, StrokeStyle); + else + renderTarget.DrawRoundedRectangle(rect, PenBrush, StrokeWidth); + } + } + + public override bool HitTest(Point2F point) + { + RoundedRectangleGeometry g = d2DFactory.CreateRoundedRectangleGeometry(rect); + bool ret = g.FillContainsPoint(point, 1); + g.Dispose(); + return ret; + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/TextLayoutShape.cs b/source/Samples/DirectX/CS/Direct2D/D2DShapes/TextLayoutShape.cs new file mode 100644 index 00000000..3e09def8 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/D2DShapes/TextLayoutShape.cs @@ -0,0 +1,92 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.ComponentModel; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; +using Microsoft.WindowsAPICodePack.DirectX.DirectWrite; +using System.Text; + +namespace D2DShapes +{ + internal class TextLayoutShape : TextShape + { + [TypeConverter(typeof(ExpandableObjectConverter))] + public TextLayout TextLayout { get; set; } + + [TypeConverter(typeof(ExpandableObjectConverter))] + public Point2F Point0 { get; set; } + + public TextLayoutShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap, DWriteFactory dwriteFactory) + : base(initialRenderTarget, random, d2DFactory, bitmap, dwriteFactory) + { + RandomizeTextLayout(); + Point0 = RandomPoint(); + } + + private void RandomizeTextLayout() + { + TextLayout = dwriteFactory.CreateTextLayout( + Text, + TextFormat, + Random.Next(50, Math.Max(100, CanvasWidth - (int)Point0.X)), + Random.Next(50, Math.Max(100, CanvasHeight - (int)Point0.Y))); + if (CoinFlip) + TextLayout.SetUnderline(true, RandomTextRange()); + if (CoinFlip) + TextLayout.SetStrikethrough(true, RandomTextRange()); + if (CoinFlip) + TextLayout.LineSpacing = RandomLineSpacing(TextFormat.FontSize); + if (NiceGabriola) + { + TypographySettingCollection t = dwriteFactory.CreateTypography(); + t.Add(new FontFeature(FontFeatureTag.StylisticSet07, 1)); + TextLayout.SetTypography(t, new TextRange(0, (uint)Text.Length)); + } + } + + private TextRange RandomTextRange() + { + var start = Random.Next(0, Text.Length - 5); + var length = Random.Next(1, Text.Length - start); + return new TextRange((uint)start, (uint)length); + } + + protected internal override void Draw(RenderTarget renderTarget) + { + DrawingStateBlock stateBlock = d2DFactory.CreateDrawingStateBlock(); + renderTarget.SaveDrawingState(stateBlock); + renderTarget.TextRenderingParams = RenderingParams; + + if (Options.HasValue) + { + renderTarget.DrawTextLayout( + Point0, TextLayout, FillBrush, Options.Value); + } + else + renderTarget.DrawTextLayout( + Point0, TextLayout, FillBrush); + renderTarget.RestoreDrawingState(stateBlock); + stateBlock.Dispose(); + } + + public override bool HitTest(Point2F point) + { + //bool isTrailingHit, isInside; + //TextLayout.HitTestPoint(point.X, point.Y, out isTrailingHit, out isInside); + //return (isTrailingHit || isInside); + //the method below checks the layout box hit test instead of the DirectWrite method + return point.X >= Point0.X && + point.Y >= Point0.Y && + point.X <= Point0.X + TextLayout.MaxWidth && + point.Y <= Point0.Y + TextLayout.MaxHeight; + } + + public override void Dispose() + { + if (TextLayout != null) + TextLayout.Dispose(); + TextLayout = null; + base.Dispose(); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/D2DShapes/TextShape.cs b/source/Samples/DirectX/CS/Direct2D/D2DShapes/TextShape.cs new file mode 100644 index 00000000..5fa5ab1e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/D2DShapes/TextShape.cs @@ -0,0 +1,210 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.ComponentModel; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; +using Microsoft.WindowsAPICodePack.DirectX.DirectWrite; +using System.Text; +using System.Globalization; + +namespace D2DShapes +{ + internal class TextShape : DrawingShape + { + private RectF layoutRect; + protected internal DWriteFactory dwriteFactory; + + [TypeConverter(typeof(ExpandableObjectConverter))] + public RenderingParams RenderingParams { get; set; } + + [TypeConverter(typeof (ExpandableObjectConverter))] + public DrawTextOptions? Options { get; set; } + + [TypeConverter(typeof(ExpandableObjectConverter))] + public TextFormat TextFormat { get; set; } + + public string Text { get; set; } + + protected bool NiceGabriola; + + public TextShape(RenderTarget initialRenderTarget, Random random, D2DFactory d2DFactory, D2DBitmap bitmap, DWriteFactory dwriteFactory) + : base(initialRenderTarget, random, d2DFactory, bitmap) + { + this.dwriteFactory = dwriteFactory; + layoutRect = RandomRect(CanvasWidth, CanvasHeight); + NiceGabriola = Random.NextDouble() < 0.25 && dwriteFactory.SystemFontFamilyCollection.Contains("Gabriola"); + TextFormat = dwriteFactory.CreateTextFormat( + RandomFontFamily(), + RandomFontSize(), + RandomFontWeight(), + RandomFontStyle(), + RandomFontStretch(), + System.Globalization.CultureInfo.CurrentUICulture); + if (CoinFlip) + TextFormat.LineSpacing = RandomLineSpacing(TextFormat.FontSize); + Text = RandomString(Random.Next(1000, 1000)); + + FillBrush = RandomBrush(); + RenderingParams = RandomRenderingParams(); + + if (CoinFlip) + { + Options = DrawTextOptions.None; + if (CoinFlip) + Options |= DrawTextOptions.Clip; + if (CoinFlip) + Options |= DrawTextOptions.NoSnap; + } + } + + protected internal RenderingParams RandomRenderingParams() + { + RenderingParams rp = dwriteFactory.CreateCustomRenderingParams( + (float)Math.Max(0.001, Math.Min(1, Random.NextDouble() * 2)), //gamma needs to be nonzero + (float)Math.Max(0, Math.Min(1, Random.NextDouble() * 3 - 1)), //equal chances for 0, 1 and something in between + (float)Math.Max(0, Math.Min(1, Random.NextDouble() * 3 - 1)), //equal chances for 0, 1 and something in between + RandomPixelGeometry(), + RandomRenderingMode()); + return rp; + } + + private PixelGeometry RandomPixelGeometry() + { + return (PixelGeometry) Random.Next(0, 2); + } + + private RenderingMode RandomRenderingMode() + { + return (RenderingMode)Random.Next(0, 6); + } + + protected internal LineSpacing RandomLineSpacing(float fontSize) + { + LineSpacingMethod method = CoinFlip + ? LineSpacingMethod.Default + : LineSpacingMethod.Uniform; + var spacing = (float)(Random.NextDouble()*fontSize*4 + 0.5); + var baseline = (float)Random.NextDouble(); + return new LineSpacing( + method, + spacing, + baseline); + } + + private string RandomFontFamily() + { + if (NiceGabriola) + return "Gabriola"; + if (CoinFlip) + { + //get random font out of the list of installed fonts + int i = Random.Next(0, dwriteFactory.SystemFontFamilyCollection.Count - 1); + FontFamily f = dwriteFactory.SystemFontFamilyCollection[i]; + string ret = null; + + if (f.FamilyNames.ContainsKey(CultureInfo.CurrentUICulture)) + ret = f.FamilyNames[CultureInfo.CurrentUICulture]; + else if (f.FamilyNames.ContainsKey(CultureInfo.InvariantCulture)) + ret = f.FamilyNames[CultureInfo.InvariantCulture]; + else if (f.FamilyNames.ContainsKey(CultureInfo.GetCultureInfo("EN-us"))) + ret = f.FamilyNames[CultureInfo.GetCultureInfo("EN-us")]; + else + { + foreach (var c in f.FamilyNames.Keys) + { + ret = f.FamilyNames[c]; + break; + } + } + f.Dispose(); + return ret; + } + //get one of the common fonts + return new[] {"Arial", + "Times New Roman", + "Courier New", + "Impact", + "Tahoma", + "Calibri", + "Consolas", + "Segoe", + "Cambria" + }[Random.Next(0, 8)]; + } + + private float RandomFontSize() + { + return 6 + (float)(138 * Random.NextDouble() * Random.NextDouble()); + } + + private FontWeight RandomFontWeight() + { + return (FontWeight)(Math.Min(950, 100 * Random.Next(1, 10))); + } + + private FontStyle RandomFontStyle() + { + return (FontStyle)Random.Next(0, 2); + } + + private FontStretch RandomFontStretch() + { + return (FontStretch) Random.Next(1, 9); + } + + private string RandomString(int size) + { + var builder = new StringBuilder(size + 1) { Length = size }; + builder[0] = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * Random.NextDouble() + 65))); + for (int i = 1; i < size - 1; i++) + { + builder[i] = Random.NextDouble() < 0.2 ? + ' ' : + Convert.ToChar(Convert.ToInt32(Math.Floor(26 * Random.NextDouble() + 97))); + } + builder[size - 1] = '.'; + return builder.ToString(); + } + + protected internal override void ChangeRenderTarget(RenderTarget newRenderTarget) + { + FillBrush = CopyBrushToRenderTarget(FillBrush, newRenderTarget); + } + + protected internal override void Draw(RenderTarget renderTarget) + { + DrawingStateBlock stateBlock = d2DFactory.CreateDrawingStateBlock(); + renderTarget.SaveDrawingState(stateBlock); + renderTarget.TextRenderingParams = RenderingParams; + + if (Options.HasValue) + { + renderTarget.DrawText(Text, TextFormat, layoutRect, FillBrush, Options.Value); + } + else + renderTarget.DrawText(Text, TextFormat, layoutRect, FillBrush); + + renderTarget.RestoreDrawingState(stateBlock); + stateBlock.Dispose(); + } + + public override bool HitTest(Point2F point) + { + return point.X >= layoutRect.Left && + point.Y >= layoutRect.Top && + point.X <= layoutRect.Right && + point.Y <= layoutRect.Bottom; + } + + public override void Dispose() + { + if (TextFormat != null) + TextFormat.Dispose(); + TextFormat = null; + if (RenderingParams != null) + RenderingParams.Dispose(); + RenderingParams = null; + base.Dispose(); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/BitmapShape.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/BitmapShape.cs new file mode 100644 index 00000000..e0f06ee7 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/BitmapShape.cs @@ -0,0 +1,36 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; + +namespace D2DPaint +{ + internal class BitmapShape : DrawingShape + { + internal RectF _rect; + internal D2DBitmap _bitmap; + internal float _transparency; + + internal BitmapShape(Paint2DForm parent, RectF rect, D2DBitmap bitmap, float transparency) + : base(parent) + { + _rect = rect; + _bitmap = bitmap; + _transparency = transparency; + } + + protected internal override void Draw(RenderTarget renderTarget) + { + renderTarget.DrawBitmap(_bitmap, _transparency, BitmapInterpolationMode.Linear, _rect); + } + + protected internal override Point2F EndPoint + { + set + { + _rect.Right = Math.Max(_rect.Left + 5, value.X); + _rect.Bottom = Math.Max(_rect.Top + 5, value.Y); + } + } + } +} \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/BitmapUtilities.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/BitmapUtilities.cs new file mode 100644 index 00000000..b55c2919 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/BitmapUtilities.cs @@ -0,0 +1,53 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; +using System.IO; + +namespace D2DPaint +{ + internal class BitmapUtilities + { + internal static D2DBitmap LoadBitmapFromFile( + RenderTarget renderTarget, + ImagingFactory wicFactory, + string fileName) + { + + BitmapDecoder decoder = wicFactory.CreateDecoderFromFileName(fileName, DesiredAccess.Read, DecodeMetadataCacheOption.OnLoad); + return CreateBitmapFromDecoder(renderTarget, wicFactory, decoder); + } + + internal static D2DBitmap LoadBitmapFromStream( + RenderTarget renderTarget, + ImagingFactory wicFactory, + Stream ioStream) + { + BitmapDecoder decoder = wicFactory.CreateDecoderFromStream(ioStream, DecodeMetadataCacheOption.OnLoad); + return CreateBitmapFromDecoder(renderTarget, wicFactory, decoder); + } + + private static D2DBitmap CreateBitmapFromDecoder(RenderTarget renderTarget, ImagingFactory wicFactory, BitmapDecoder decoder) + { + BitmapFrameDecode source; + FormatConverter converter; + // Create the initial frame. + source = decoder.GetFrame(0); + + // Convert the image format to 32bppPBGRA -- which Direct2D expects. + converter = wicFactory.CreateFormatConverter(); + converter.Initialize( + source.ToBitmapSource(), + PixelFormats.Pbgra32Bpp, + BitmapDitherType.None, + BitmapPaletteType.MedianCut + ); + + // Create a Direct2D bitmap from the WIC bitmap. + return renderTarget.CreateBitmapFromWicBitmap( + converter.ToBitmapSource()); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/BrushDialog.Designer.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/BrushDialog.Designer.cs new file mode 100644 index 00000000..d2d72fdc --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/BrushDialog.Designer.cs @@ -0,0 +1,656 @@ +namespace D2DPaint +{ + partial class BrushDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.Label gammaLabel; + System.Windows.Forms.Label label6; + System.Windows.Forms.Label label5; + System.Windows.Forms.Label label7; + this.transparencyValues = new System.Windows.Forms.ComboBox(); + this.transparency = new System.Windows.Forms.Label(); + this.solidColorButton = new System.Windows.Forms.Button(); + this.colorLabel = new System.Windows.Forms.Label(); + this.colorDialog1 = new System.Windows.Forms.ColorDialog(); + this.addBrushButton = new System.Windows.Forms.Button(); + this.brushesTabs = new System.Windows.Forms.TabControl(); + this.solidColorPage = new System.Windows.Forms.TabPage(); + this.bitmapBrushPage = new System.Windows.Forms.TabPage(); + this.imageFileLabel = new System.Windows.Forms.Label(); + this.extendedModeYComboBox = new System.Windows.Forms.ComboBox(); + this.extendedModeXComboBox = new System.Windows.Forms.ComboBox(); + this.comboBox2 = new System.Windows.Forms.ComboBox(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.addBitmapBrushBotton = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.linearBrushPage = new System.Windows.Forms.TabPage(); + this.button3 = new System.Windows.Forms.Button(); + this.gradBrushExtendModeCombo = new System.Windows.Forms.ComboBox(); + this.gammaComboBox = new System.Windows.Forms.ComboBox(); + this.gradBrushColor2Label = new System.Windows.Forms.Label(); + this.gradBrushColor1Label = new System.Windows.Forms.Label(); + this.gradiantBrushColor2Button = new System.Windows.Forms.Button(); + this.gradiantBrushColor1button = new System.Windows.Forms.Button(); + this.graidantBrushPage = new System.Windows.Forms.TabPage(); + this.button4 = new System.Windows.Forms.Button(); + this.radialExtendCombo = new System.Windows.Forms.ComboBox(); + this.radialGammaCombo = new System.Windows.Forms.ComboBox(); + this.radialBrushColor2Label = new System.Windows.Forms.Label(); + this.radialBrushColor1Label = new System.Windows.Forms.Label(); + this.SelectRadialColor2 = new System.Windows.Forms.Button(); + this.SelectRadialColor1 = new System.Windows.Forms.Button(); + this.brushesList = new System.Windows.Forms.ListBox(); + this.button1 = new System.Windows.Forms.Button(); + gammaLabel = new System.Windows.Forms.Label(); + label6 = new System.Windows.Forms.Label(); + label5 = new System.Windows.Forms.Label(); + label7 = new System.Windows.Forms.Label(); + this.brushesTabs.SuspendLayout(); + this.solidColorPage.SuspendLayout(); + this.bitmapBrushPage.SuspendLayout(); + this.linearBrushPage.SuspendLayout(); + this.graidantBrushPage.SuspendLayout(); + this.SuspendLayout(); + // + // gammaLabel + // + gammaLabel.AutoSize = true; + gammaLabel.Location = new System.Drawing.Point(16, 97); + gammaLabel.Name = "gammaLabel"; + gammaLabel.Size = new System.Drawing.Size(43, 13); + gammaLabel.TabIndex = 4; + gammaLabel.Text = "Gamma"; + // + // label6 + // + label6.AutoSize = true; + label6.Location = new System.Drawing.Point(16, 128); + label6.Name = "label6"; + label6.Size = new System.Drawing.Size(70, 13); + label6.TabIndex = 5; + label6.Text = "Extend Mode"; + // + // label5 + // + label5.AutoSize = true; + label5.Location = new System.Drawing.Point(43, 136); + label5.Name = "label5"; + label5.Size = new System.Drawing.Size(70, 13); + label5.TabIndex = 13; + label5.Text = "Extend Mode"; + // + // label7 + // + label7.AutoSize = true; + label7.Location = new System.Drawing.Point(43, 105); + label7.Name = "label7"; + label7.Size = new System.Drawing.Size(43, 13); + label7.TabIndex = 12; + label7.Text = "Gamma"; + // + // transparencyValues + // + this.transparencyValues.FormattingEnabled = true; + this.transparencyValues.Items.AddRange(new object[] { + "0.00", + "0.10", + "0.25", + "0.40", + "0.50", + "0.60", + "0.75", + "0.90", + "0.95", + "1.00"}); + this.transparencyValues.Location = new System.Drawing.Point(161, 67); + this.transparencyValues.Name = "transparencyValues"; + this.transparencyValues.Size = new System.Drawing.Size(121, 21); + this.transparencyValues.TabIndex = 3; + this.transparencyValues.Text = "1.00"; + this.transparencyValues.SelectedIndexChanged += new System.EventHandler(this.transparencyValues_SelectedIndexChanged); + // + // transparency + // + this.transparency.AutoSize = true; + this.transparency.BackColor = System.Drawing.SystemColors.ButtonHighlight; + this.transparency.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.transparency.Location = new System.Drawing.Point(24, 65); + this.transparency.MinimumSize = new System.Drawing.Size(113, 23); + this.transparency.Name = "transparency"; + this.transparency.Size = new System.Drawing.Size(113, 23); + this.transparency.TabIndex = 2; + this.transparency.Text = "Transparency"; + // + // solidColorButton + // + this.solidColorButton.Location = new System.Drawing.Point(24, 32); + this.solidColorButton.Name = "solidColorButton"; + this.solidColorButton.Size = new System.Drawing.Size(113, 23); + this.solidColorButton.TabIndex = 1; + this.solidColorButton.Text = "Select Color..."; + this.solidColorButton.UseVisualStyleBackColor = true; + this.solidColorButton.Click += new System.EventHandler(this.SelectColorClick); + // + // colorLabel + // + this.colorLabel.AutoSize = true; + this.colorLabel.BackColor = System.Drawing.SystemColors.ButtonHighlight; + this.colorLabel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.colorLabel.Location = new System.Drawing.Point(161, 32); + this.colorLabel.MinimumSize = new System.Drawing.Size(130, 23); + this.colorLabel.Name = "colorLabel"; + this.colorLabel.Size = new System.Drawing.Size(130, 23); + this.colorLabel.TabIndex = 0; + this.colorLabel.Text = "R = 0, G = 0, B = 0, A = 1"; + // + // addBrushButton + // + this.addBrushButton.Location = new System.Drawing.Point(114, 193); + this.addBrushButton.Name = "addBrushButton"; + this.addBrushButton.Size = new System.Drawing.Size(75, 23); + this.addBrushButton.TabIndex = 2; + this.addBrushButton.Text = "Add Brush"; + this.addBrushButton.UseVisualStyleBackColor = true; + this.addBrushButton.Click += new System.EventHandler(this.addBrushButton_Click); + // + // brushesTabs + // + this.brushesTabs.Controls.Add(this.solidColorPage); + this.brushesTabs.Controls.Add(this.bitmapBrushPage); + this.brushesTabs.Controls.Add(this.linearBrushPage); + this.brushesTabs.Controls.Add(this.graidantBrushPage); + this.brushesTabs.Location = new System.Drawing.Point(12, 12); + this.brushesTabs.Name = "brushesTabs"; + this.brushesTabs.SelectedIndex = 0; + this.brushesTabs.Size = new System.Drawing.Size(361, 248); + this.brushesTabs.TabIndex = 4; + // + // solidColorPage + // + this.solidColorPage.BackColor = System.Drawing.SystemColors.Control; + this.solidColorPage.Controls.Add(this.transparencyValues); + this.solidColorPage.Controls.Add(this.transparency); + this.solidColorPage.Controls.Add(this.addBrushButton); + this.solidColorPage.Controls.Add(this.colorLabel); + this.solidColorPage.Controls.Add(this.solidColorButton); + this.solidColorPage.Location = new System.Drawing.Point(4, 22); + this.solidColorPage.Name = "solidColorPage"; + this.solidColorPage.Padding = new System.Windows.Forms.Padding(3); + this.solidColorPage.Size = new System.Drawing.Size(353, 222); + this.solidColorPage.TabIndex = 0; + this.solidColorPage.Text = "Solid Color"; + // + // bitmapBrushPage + // + this.bitmapBrushPage.BackColor = System.Drawing.SystemColors.Control; + this.bitmapBrushPage.Controls.Add(this.imageFileLabel); + this.bitmapBrushPage.Controls.Add(this.extendedModeYComboBox); + this.bitmapBrushPage.Controls.Add(this.extendedModeXComboBox); + this.bitmapBrushPage.Controls.Add(this.comboBox2); + this.bitmapBrushPage.Controls.Add(this.label4); + this.bitmapBrushPage.Controls.Add(this.label3); + this.bitmapBrushPage.Controls.Add(this.comboBox1); + this.bitmapBrushPage.Controls.Add(this.label2); + this.bitmapBrushPage.Controls.Add(this.label1); + this.bitmapBrushPage.Controls.Add(this.addBitmapBrushBotton); + this.bitmapBrushPage.Controls.Add(this.button2); + this.bitmapBrushPage.Location = new System.Drawing.Point(4, 22); + this.bitmapBrushPage.Name = "bitmapBrushPage"; + this.bitmapBrushPage.Padding = new System.Windows.Forms.Padding(3); + this.bitmapBrushPage.Size = new System.Drawing.Size(353, 222); + this.bitmapBrushPage.TabIndex = 1; + this.bitmapBrushPage.Text = "Bitmap"; + // + // imageFileLabel + // + this.imageFileLabel.AutoSize = true; + this.imageFileLabel.BackColor = System.Drawing.SystemColors.ButtonHighlight; + this.imageFileLabel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.imageFileLabel.Location = new System.Drawing.Point(158, 29); + this.imageFileLabel.MinimumSize = new System.Drawing.Size(130, 23); + this.imageFileLabel.Name = "imageFileLabel"; + this.imageFileLabel.Size = new System.Drawing.Size(130, 23); + this.imageFileLabel.TabIndex = 7; + // + // extendedModeYComboBox + // + this.extendedModeYComboBox.FormattingEnabled = true; + this.extendedModeYComboBox.Items.AddRange(new object[] { + "Clamp", + "Wrap", + "Mirror"}); + this.extendedModeYComboBox.Location = new System.Drawing.Point(158, 152); + this.extendedModeYComboBox.Name = "extendedModeYComboBox"; + this.extendedModeYComboBox.Size = new System.Drawing.Size(121, 21); + this.extendedModeYComboBox.TabIndex = 6; + this.extendedModeYComboBox.Text = "Mirror"; + // + // extendedModeXComboBox + // + this.extendedModeXComboBox.FormattingEnabled = true; + this.extendedModeXComboBox.Items.AddRange(new object[] { + "Clamp", + "Wrap", + "Mirror"}); + this.extendedModeXComboBox.Location = new System.Drawing.Point(158, 114); + this.extendedModeXComboBox.Name = "extendedModeXComboBox"; + this.extendedModeXComboBox.Size = new System.Drawing.Size(121, 21); + this.extendedModeXComboBox.TabIndex = 6; + this.extendedModeXComboBox.Text = "Mirror"; + // + // comboBox2 + // + this.comboBox2.FormattingEnabled = true; + this.comboBox2.Items.AddRange(new object[] { + "0.00", + "0.10", + "0.25", + "0.40", + "0.50", + "0.60", + "0.75", + "0.90", + "0.95", + "1.00"}); + this.comboBox2.Location = new System.Drawing.Point(158, 77); + this.comboBox2.Name = "comboBox2"; + this.comboBox2.Size = new System.Drawing.Size(121, 21); + this.comboBox2.TabIndex = 6; + this.comboBox2.Text = "1.00"; + this.comboBox2.SelectedIndexChanged += new System.EventHandler(this.OpacityButtonClicked); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.BackColor = System.Drawing.SystemColors.ButtonHighlight; + this.label4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.label4.Location = new System.Drawing.Point(21, 150); + this.label4.MinimumSize = new System.Drawing.Size(113, 23); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(113, 23); + this.label4.TabIndex = 5; + this.label4.Text = "Extend Mode Y"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.BackColor = System.Drawing.SystemColors.ButtonHighlight; + this.label3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.label3.Location = new System.Drawing.Point(21, 112); + this.label3.MinimumSize = new System.Drawing.Size(113, 23); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(113, 23); + this.label3.TabIndex = 5; + this.label3.Text = "Extend Mode X"; + // + // comboBox1 + // + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Items.AddRange(new object[] { + "0.00", + "0.10", + "0.25", + "0.40", + "0.50", + "0.60", + "0.75", + "0.90", + "0.95", + "1.00"}); + this.comboBox1.Location = new System.Drawing.Point(158, 77); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(121, 21); + this.comboBox1.TabIndex = 6; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.BackColor = System.Drawing.SystemColors.ButtonHighlight; + this.label2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.label2.Location = new System.Drawing.Point(21, 75); + this.label2.MinimumSize = new System.Drawing.Size(113, 23); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(113, 23); + this.label2.TabIndex = 5; + this.label2.Text = "Transparency"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.BackColor = System.Drawing.SystemColors.ButtonHighlight; + this.label1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.label1.Location = new System.Drawing.Point(21, 75); + this.label1.MinimumSize = new System.Drawing.Size(113, 23); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(113, 23); + this.label1.TabIndex = 5; + this.label1.Text = "Transparency"; + // + // addBitmapBrushBotton + // + this.addBitmapBrushBotton.Location = new System.Drawing.Point(121, 193); + this.addBitmapBrushBotton.Name = "addBitmapBrushBotton"; + this.addBitmapBrushBotton.Size = new System.Drawing.Size(75, 23); + this.addBitmapBrushBotton.TabIndex = 4; + this.addBitmapBrushBotton.Text = "Add Brush"; + this.addBitmapBrushBotton.UseVisualStyleBackColor = true; + this.addBitmapBrushBotton.Click += new System.EventHandler(this.addBitmapBrushBotton_Click); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(21, 29); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(130, 23); + this.button2.TabIndex = 0; + this.button2.Text = "Select Image File..."; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // linearBrushPage + // + this.linearBrushPage.BackColor = System.Drawing.SystemColors.Control; + this.linearBrushPage.Controls.Add(this.button3); + this.linearBrushPage.Controls.Add(this.gradBrushExtendModeCombo); + this.linearBrushPage.Controls.Add(this.gammaComboBox); + this.linearBrushPage.Controls.Add(label6); + this.linearBrushPage.Controls.Add(gammaLabel); + this.linearBrushPage.Controls.Add(this.gradBrushColor2Label); + this.linearBrushPage.Controls.Add(this.gradBrushColor1Label); + this.linearBrushPage.Controls.Add(this.gradiantBrushColor2Button); + this.linearBrushPage.Controls.Add(this.gradiantBrushColor1button); + this.linearBrushPage.Location = new System.Drawing.Point(4, 22); + this.linearBrushPage.Name = "linearBrushPage"; + this.linearBrushPage.Size = new System.Drawing.Size(353, 222); + this.linearBrushPage.TabIndex = 2; + this.linearBrushPage.Text = "Linear Gradiant"; + // + // button3 + // + this.button3.Location = new System.Drawing.Point(101, 161); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 23); + this.button3.TabIndex = 7; + this.button3.Text = "Add Brush"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.LinearGradientBrushAddClicked); + // + // gradBrushExtendModeCombo + // + this.gradBrushExtendModeCombo.FormattingEnabled = true; + this.gradBrushExtendModeCombo.Items.AddRange(new object[] { + "Clamp", + "Wrap", + "Mirror"}); + this.gradBrushExtendModeCombo.Location = new System.Drawing.Point(153, 125); + this.gradBrushExtendModeCombo.Name = "gradBrushExtendModeCombo"; + this.gradBrushExtendModeCombo.Size = new System.Drawing.Size(121, 21); + this.gradBrushExtendModeCombo.TabIndex = 6; + this.gradBrushExtendModeCombo.Text = "Wrap"; + // + // gammaComboBox + // + this.gammaComboBox.FormattingEnabled = true; + this.gammaComboBox.Items.AddRange(new object[] { + "Linear (1.0)", + "StandardRgb (2.2)"}); + this.gammaComboBox.Location = new System.Drawing.Point(153, 94); + this.gammaComboBox.Name = "gammaComboBox"; + this.gammaComboBox.Size = new System.Drawing.Size(121, 21); + this.gammaComboBox.TabIndex = 6; + this.gammaComboBox.Text = "Linear (1.0)"; + // + // gradBrushColor2Label + // + this.gradBrushColor2Label.AutoSize = true; + this.gradBrushColor2Label.BackColor = System.Drawing.SystemColors.ButtonHighlight; + this.gradBrushColor2Label.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.gradBrushColor2Label.Location = new System.Drawing.Point(153, 51); + this.gradBrushColor2Label.MinimumSize = new System.Drawing.Size(130, 23); + this.gradBrushColor2Label.Name = "gradBrushColor2Label"; + this.gradBrushColor2Label.Size = new System.Drawing.Size(130, 23); + this.gradBrushColor2Label.TabIndex = 2; + this.gradBrushColor2Label.Text = "R = 1, G = 1, B = 1, A = 1"; + // + // gradBrushColor1Label + // + this.gradBrushColor1Label.AutoSize = true; + this.gradBrushColor1Label.BackColor = System.Drawing.SystemColors.ButtonHighlight; + this.gradBrushColor1Label.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.gradBrushColor1Label.Location = new System.Drawing.Point(153, 22); + this.gradBrushColor1Label.MinimumSize = new System.Drawing.Size(130, 23); + this.gradBrushColor1Label.Name = "gradBrushColor1Label"; + this.gradBrushColor1Label.Size = new System.Drawing.Size(130, 23); + this.gradBrushColor1Label.TabIndex = 2; + this.gradBrushColor1Label.Text = "R = 0, G = 0, B = 0, A = 1"; + // + // gradiantBrushColor2Button + // + this.gradiantBrushColor2Button.Location = new System.Drawing.Point(16, 51); + this.gradiantBrushColor2Button.Name = "gradiantBrushColor2Button"; + this.gradiantBrushColor2Button.Size = new System.Drawing.Size(113, 23); + this.gradiantBrushColor2Button.TabIndex = 3; + this.gradiantBrushColor2Button.Text = "Select Color 2..."; + this.gradiantBrushColor2Button.UseVisualStyleBackColor = true; + this.gradiantBrushColor2Button.Click += new System.EventHandler(this.gradiantBrushColor2Button_Click); + // + // gradiantBrushColor1button + // + this.gradiantBrushColor1button.Location = new System.Drawing.Point(16, 22); + this.gradiantBrushColor1button.Name = "gradiantBrushColor1button"; + this.gradiantBrushColor1button.Size = new System.Drawing.Size(113, 23); + this.gradiantBrushColor1button.TabIndex = 3; + this.gradiantBrushColor1button.Text = "Select Color 1..."; + this.gradiantBrushColor1button.UseVisualStyleBackColor = true; + this.gradiantBrushColor1button.Click += new System.EventHandler(this.gradiantBrushColor1button_Click); + // + // graidantBrushPage + // + this.graidantBrushPage.BackColor = System.Drawing.SystemColors.Control; + this.graidantBrushPage.Controls.Add(this.button4); + this.graidantBrushPage.Controls.Add(this.radialExtendCombo); + this.graidantBrushPage.Controls.Add(this.radialGammaCombo); + this.graidantBrushPage.Controls.Add(label5); + this.graidantBrushPage.Controls.Add(label7); + this.graidantBrushPage.Controls.Add(this.radialBrushColor2Label); + this.graidantBrushPage.Controls.Add(this.radialBrushColor1Label); + this.graidantBrushPage.Controls.Add(this.SelectRadialColor2); + this.graidantBrushPage.Controls.Add(this.SelectRadialColor1); + this.graidantBrushPage.Location = new System.Drawing.Point(4, 22); + this.graidantBrushPage.Name = "graidantBrushPage"; + this.graidantBrushPage.Size = new System.Drawing.Size(353, 222); + this.graidantBrushPage.TabIndex = 3; + this.graidantBrushPage.Text = "Radial Gradiant"; + // + // button4 + // + this.button4.Location = new System.Drawing.Point(128, 169); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(75, 23); + this.button4.TabIndex = 16; + this.button4.Text = "Add Brush"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.RadialGradientBrushAddClicked); + // + // radialExtendCombo + // + this.radialExtendCombo.FormattingEnabled = true; + this.radialExtendCombo.Items.AddRange(new object[] { + "Clamp", + "Wrap", + "Mirror"}); + this.radialExtendCombo.Location = new System.Drawing.Point(180, 133); + this.radialExtendCombo.Name = "radialExtendCombo"; + this.radialExtendCombo.Size = new System.Drawing.Size(121, 21); + this.radialExtendCombo.TabIndex = 14; + this.radialExtendCombo.Text = "Wrap"; + // + // radialGammaCombo + // + this.radialGammaCombo.FormattingEnabled = true; + this.radialGammaCombo.Items.AddRange(new object[] { + "Linear (1.0)", + "StandardRgb (2.2)"}); + this.radialGammaCombo.Location = new System.Drawing.Point(180, 102); + this.radialGammaCombo.Name = "radialGammaCombo"; + this.radialGammaCombo.Size = new System.Drawing.Size(121, 21); + this.radialGammaCombo.TabIndex = 15; + this.radialGammaCombo.Text = "Linear (1.0)"; + // + // radialBrushColor2Label + // + this.radialBrushColor2Label.AutoSize = true; + this.radialBrushColor2Label.BackColor = System.Drawing.SystemColors.ButtonHighlight; + this.radialBrushColor2Label.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.radialBrushColor2Label.Location = new System.Drawing.Point(180, 59); + this.radialBrushColor2Label.MinimumSize = new System.Drawing.Size(130, 23); + this.radialBrushColor2Label.Name = "radialBrushColor2Label"; + this.radialBrushColor2Label.Size = new System.Drawing.Size(130, 23); + this.radialBrushColor2Label.TabIndex = 9; + this.radialBrushColor2Label.Text = "R = 1, G = 1, B = 1, A = 1"; + // + // radialBrushColor1Label + // + this.radialBrushColor1Label.AutoSize = true; + this.radialBrushColor1Label.BackColor = System.Drawing.SystemColors.ButtonHighlight; + this.radialBrushColor1Label.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.radialBrushColor1Label.Location = new System.Drawing.Point(180, 30); + this.radialBrushColor1Label.MinimumSize = new System.Drawing.Size(130, 23); + this.radialBrushColor1Label.Name = "radialBrushColor1Label"; + this.radialBrushColor1Label.Size = new System.Drawing.Size(130, 23); + this.radialBrushColor1Label.TabIndex = 8; + this.radialBrushColor1Label.Text = "R = 0, G = 0, B = 0, A = 1"; + // + // SelectRadialColor2 + // + this.SelectRadialColor2.Location = new System.Drawing.Point(43, 59); + this.SelectRadialColor2.Name = "SelectRadialColor2"; + this.SelectRadialColor2.Size = new System.Drawing.Size(113, 23); + this.SelectRadialColor2.TabIndex = 11; + this.SelectRadialColor2.Text = "Select Color 2..."; + this.SelectRadialColor2.UseVisualStyleBackColor = true; + this.SelectRadialColor2.Click += new System.EventHandler(this.SelectRadialColor2_Click); + // + // SelectRadialColor1 + // + this.SelectRadialColor1.Location = new System.Drawing.Point(43, 30); + this.SelectRadialColor1.Name = "SelectRadialColor1"; + this.SelectRadialColor1.Size = new System.Drawing.Size(113, 23); + this.SelectRadialColor1.TabIndex = 10; + this.SelectRadialColor1.Text = "Select Color 1..."; + this.SelectRadialColor1.UseVisualStyleBackColor = true; + this.SelectRadialColor1.Click += new System.EventHandler(this.SelectRadialColor1_Click); + // + // brushesList + // + this.brushesList.FormattingEnabled = true; + this.brushesList.Location = new System.Drawing.Point(16, 266); + this.brushesList.Name = "brushesList"; + this.brushesList.Size = new System.Drawing.Size(353, 173); + this.brushesList.TabIndex = 5; + this.brushesList.SelectedIndexChanged += new System.EventHandler(this.listBox1_SelectedIndexChanged); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(114, 459); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(157, 23); + this.button1.TabIndex = 6; + this.button1.Text = "Close"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.CloseButtonClicked); + // + // BrushDialog + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(385, 494); + this.Controls.Add(this.button1); + this.Controls.Add(this.brushesList); + this.Controls.Add(this.brushesTabs); + this.Name = "BrushDialog"; + this.RightToLeftLayout = true; + this.Text = "Select Brush"; + this.brushesTabs.ResumeLayout(false); + this.solidColorPage.ResumeLayout(false); + this.solidColorPage.PerformLayout(); + this.bitmapBrushPage.ResumeLayout(false); + this.bitmapBrushPage.PerformLayout(); + this.linearBrushPage.ResumeLayout(false); + this.linearBrushPage.PerformLayout(); + this.graidantBrushPage.ResumeLayout(false); + this.graidantBrushPage.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ColorDialog colorDialog1; + private System.Windows.Forms.Label colorLabel; + private System.Windows.Forms.Button solidColorButton; + private System.Windows.Forms.Button addBrushButton; + private System.Windows.Forms.ComboBox transparencyValues; + private System.Windows.Forms.Label transparency; + private System.Windows.Forms.TabControl brushesTabs; + private System.Windows.Forms.TabPage solidColorPage; + private System.Windows.Forms.TabPage bitmapBrushPage; + private System.Windows.Forms.TabPage linearBrushPage; + private System.Windows.Forms.TabPage graidantBrushPage; + private System.Windows.Forms.ListBox brushesList; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Label imageFileLabel; + private System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button addBitmapBrushBotton; + private System.Windows.Forms.ComboBox extendedModeYComboBox; + private System.Windows.Forms.ComboBox extendedModeXComboBox; + private System.Windows.Forms.ComboBox comboBox2; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label gradBrushColor2Label; + private System.Windows.Forms.Label gradBrushColor1Label; + private System.Windows.Forms.Button gradiantBrushColor2Button; + private System.Windows.Forms.Button gradiantBrushColor1button; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.ComboBox gradBrushExtendModeCombo; + private System.Windows.Forms.ComboBox gammaComboBox; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.ComboBox radialExtendCombo; + private System.Windows.Forms.ComboBox radialGammaCombo; + private System.Windows.Forms.Label radialBrushColor2Label; + private System.Windows.Forms.Label radialBrushColor1Label; + private System.Windows.Forms.Button SelectRadialColor2; + private System.Windows.Forms.Button SelectRadialColor1; + } +} \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/BrushDialog.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/BrushDialog.cs new file mode 100644 index 00000000..2a9a549f --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/BrushDialog.cs @@ -0,0 +1,311 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; +using System; +using System.Globalization; +using System.IO; +using Microsoft.WindowsAPICodePack.DirectX; +using System.Drawing; +using Brush = Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Brush; + + +namespace D2DPaint +{ + enum BrushType + { + None, + Solid, + Bitmap, + LinearGradiant, + RadialGradient + } + + public partial class BrushDialog : Form + { + private readonly Paint2DForm parent; + private readonly RenderTarget renderTarget; + private ColorF color1 = new ColorF(Color.Black.ToArgb()); + private ColorF color2 = new ColorF(Color.White.ToArgb()); + private float opacity = 1.0f; + private string imageFilename; + + public BrushDialog(Paint2DForm parent, RenderTarget renderTarget) + { + this.renderTarget = renderTarget; + this.parent = parent; + InitializeComponent(); + for (int i = 0; i < transparencyValues.Items.Count; i++) + transparencyValues.Items[i] = ((string)transparencyValues.Items[i]).Replace(".", CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator); + FillBrushesListBox(); + } + + private void FillBrushesListBox() + { + this.brushesList.Items.Clear(); + foreach (Brush brush in parent.brushes) + { + if (brush is SolidColorBrush) + { + SolidColorBrush solidBrush = brush as SolidColorBrush; + this.brushesList.Items.Add( + string.Format("Solid: R={0}, G={1}, B={2}, A={3}, Opacity={4}", solidBrush.Color.Red, solidBrush.Color.Green, solidBrush.Color.Blue, solidBrush.Color.Alpha, solidBrush.Opacity)); + } + else if (brush is BitmapBrush) + { + BitmapBrush bitmapBrush = brush as BitmapBrush; + this.brushesList.Items.Add( + string.Format("Bitmap Brush: Extended Mode X={0}, Extended Mode Y={1}, Inter. Mode={2}", bitmapBrush.ExtendModeX, bitmapBrush.ExtendModeY, bitmapBrush.InterpolationMode)); + } + else + { + this.brushesList.Items.Add(brush); + } + } + brushesList.SelectedIndex = parent.currentBrushIndex; + + } + + private void SelectColorClick(object sender, EventArgs e) + { + colorDialog1.Color = System.Drawing.Color.Black; + if (colorDialog1.ShowDialog() != DialogResult.Cancel) + { + color1 = new ColorF( + colorDialog1.Color.R / 255F, + colorDialog1.Color.G / 255F, + colorDialog1.Color.B / 255F, + colorDialog1.Color.A / 255F); + + colorLabel.Text = string.Format("R = {0}, G = {1}, B = {2}, A = {3}", color1.Red, color1.Green, color1.Blue, color1.Alpha); + } + } + + private void addBrushButton_Click(object sender, EventArgs e) + { + parent.brushes.Add( + renderTarget.CreateSolidColorBrush( + color1, + new BrushProperties(opacity, Matrix3x2F.Identity))); + + parent.currentBrushIndex = parent.brushes.Count - 1; + + FillBrushesListBox(); + } + + private void transparencyValues_SelectedIndexChanged(object sender, EventArgs e) + { + float f; + if (float.TryParse(transparencyValues.Text, out f)) + { + + this.opacity = f; + } + } + + private void listBox1_SelectedIndexChanged(object sender, EventArgs e) + { + parent.currentBrushIndex = brushesList.SelectedIndex; + } + + private void button2_Click(object sender, EventArgs e) + { + OpenFileDialog dialog = new OpenFileDialog {DefaultExt = "*.jpg;*.png"}; + if (dialog.ShowDialog() == DialogResult.OK) + { + this.imageFilename = dialog.FileName; + imageFileLabel.Text = Path.GetFileName(imageFilename); + + } + } + + private void addBitmapBrushBotton_Click(object sender, EventArgs e) + { + ExtendMode ex = extendedModeXComboBox.SelectedIndex > 0 ? (ExtendMode)extendedModeXComboBox.SelectedIndex : ExtendMode.Wrap; + ExtendMode ey = extendedModeYComboBox.SelectedIndex > 0 ? (ExtendMode)extendedModeYComboBox.SelectedIndex : ExtendMode.Wrap; + + D2DBitmap brushBitmap = BitmapUtilities.LoadBitmapFromFile(renderTarget, parent.wicFactory, imageFilename); + BitmapBrush brush = renderTarget.CreateBitmapBrush( + brushBitmap, + new BitmapBrushProperties( + ex, ey, + BitmapInterpolationMode.NearestNeighbor), + new BrushProperties( + opacity, + Matrix3x2F.Identity)); + parent.brushes.Add(brush); + parent.currentBrushIndex = parent.brushes.Count - 1; + FillBrushesListBox(); + } + + private void CloseButtonClicked(object sender, EventArgs e) + { + this.Close(); + } + + private void OpacityButtonClicked(object sender, EventArgs e) + { + float f; + if (float.TryParse(comboBox2.Text, out f)) + { + this.opacity = f; + } + } + + private void gradiantBrushColor1button_Click(object sender, EventArgs e) + { + + colorDialog1.Color = System.Drawing.Color.Black; + if (colorDialog1.ShowDialog() != DialogResult.Cancel) + { + color1 = new ColorF( + colorDialog1.Color.R / 255F, + colorDialog1.Color.G / 255F, + colorDialog1.Color.B / 255F, + colorDialog1.Color.A / 255F); + + gradBrushColor1Label.Text = String.Format("R = {0}, G = {1}, B = {2}, A = {3}", color1.Red, color1.Green, color1.Blue, color1.Alpha); + } + } + + private void gradiantBrushColor2Button_Click(object sender, EventArgs e) + { + colorDialog1.Color = System.Drawing.Color.Black; + if (colorDialog1.ShowDialog() != DialogResult.Cancel) + { + color2 = new ColorF( + colorDialog1.Color.R / 255F, + colorDialog1.Color.G / 255F, + colorDialog1.Color.B / 255F, + colorDialog1.Color.A / 255F); + + gradBrushColor2Label.Text = string.Format("R = {0}, G = {1}, B = {2}, A = {3}", color2.Red, color2.Green, color2.Blue, color2.Alpha); + } + } + + private void LinearGradientBrushAddClicked(object sender, EventArgs e) + { + ExtendMode ex = gradBrushExtendModeCombo.SelectedIndex > 0 ? (ExtendMode)gradBrushExtendModeCombo.SelectedIndex : ExtendMode.Clamp; + Gamma gamma; + + switch (gammaComboBox.SelectedIndex) + { + case 0: + gamma = Gamma.Linear; + break; + case 1: + gamma = Gamma.StandardRgb; + break; + default: + throw new InvalidOperationException("Unknown gamma selected"); + } + + GradientStop[] stops = + { + new GradientStop(0.0f, color1), + new GradientStop(1.0f, color2), + }; + + GradientStopCollection stopCollection = renderTarget.CreateGradientStopCollection( + stops, gamma, ex); + + LinearGradientBrushProperties properties; + if (ex == ExtendMode.Clamp) + { + properties = new LinearGradientBrushProperties( + new Point2F(50, 50), new Point2F(600, 400)); + } + else + { + properties = new LinearGradientBrushProperties( + new Point2F(50, 50), new Point2F(0, 0)); + } + + + LinearGradientBrush brush = renderTarget.CreateLinearGradientBrush( + properties, stopCollection); + + parent.brushes.Add(brush); + parent.currentBrushIndex = parent.brushes.Count - 1; + FillBrushesListBox(); + + } + + private void RadialGradientBrushAddClicked(object sender, EventArgs e) + { + ExtendMode ex = radialExtendCombo.SelectedIndex > 0 ? (ExtendMode)radialExtendCombo.SelectedIndex : ExtendMode.Clamp; + Gamma gamma; + + switch (gammaComboBox.SelectedIndex) + { + case 0: + gamma = Gamma.Linear; + break; + case 1: + gamma = Gamma.StandardRgb; + break; + default: + throw new InvalidOperationException("Unknown gamma selected"); + } + + GradientStop[] stops = + { + new GradientStop(0, color1), + new GradientStop(1.0f, color2), + }; + + GradientStopCollection stopCollection = renderTarget.CreateGradientStopCollection( + stops, gamma, ex); + + RadialGradientBrushProperties properties; + + if (ex == ExtendMode.Clamp) + { + properties = new RadialGradientBrushProperties( + new Point2F(50, 50), new Point2F(600, 400), 600, 600); + } + else + { + properties = new RadialGradientBrushProperties( + new Point2F(50, 50), new Point2F(0, 0), 50, 50); + } + + RadialGradientBrush brush = renderTarget.CreateRadialGradientBrush( + properties, stopCollection); + + parent.brushes.Add(brush); + parent.currentBrushIndex = parent.brushes.Count - 1; + FillBrushesListBox(); + } + + private void SelectRadialColor1_Click(object sender, EventArgs e) + { + colorDialog1.Color = System.Drawing.Color.Black; + if (colorDialog1.ShowDialog() != DialogResult.Cancel) + { + color1 = new ColorF( + colorDialog1.Color.R / 255F, + colorDialog1.Color.G / 255F, + colorDialog1.Color.B / 255F, + colorDialog1.Color.A / 255F); + + radialBrushColor1Label.Text = String.Format("R = {0}, G = {1}, B = {2}, A = {3}", color1.Red, color1.Green, color1.Blue, color1.Alpha); + } + } + + private void SelectRadialColor2_Click(object sender, EventArgs e) + { + colorDialog1.Color = System.Drawing.Color.Black; + if (colorDialog1.ShowDialog() != DialogResult.Cancel) + { + color2 = new ColorF( + colorDialog1.Color.R / 255F, + colorDialog1.Color.G / 255F, + colorDialog1.Color.B / 255F, + colorDialog1.Color.A / 255F); + + radialBrushColor2Label.Text = String.Format("R = {0}, G = {1}, B = {2}, A = {3}", color2.Red, color2.Green, color2.Blue, color2.Alpha); + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/BrushDialog.resx b/source/Samples/DirectX/CS/Direct2D/Paint2D/BrushDialog.resx new file mode 100644 index 00000000..c020c6f2 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/BrushDialog.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + False + + + False + + + False + + + 17, 17 + + + 48 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/DrawingShape.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/DrawingShape.cs new file mode 100644 index 00000000..17b87ec2 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/DrawingShape.cs @@ -0,0 +1,31 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; + +namespace D2DPaint +{ + abstract class DrawingShape + { + protected Paint2DForm _parent; + protected bool _fill; + + protected internal abstract void Draw(RenderTarget renderTarget); + protected internal virtual void EndDraw() + { } + + protected internal abstract Point2F EndPoint + { + set; + } + + protected DrawingShape(Paint2DForm parent) + { + this._parent = parent; + } + + protected DrawingShape(Paint2DForm parent, bool fill) : this(parent) + { + this._fill = fill; + } + } +} \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/EllipseShape.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/EllipseShape.cs new file mode 100644 index 00000000..5ca8dc65 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/EllipseShape.cs @@ -0,0 +1,48 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; + +namespace D2DPaint +{ + internal class EllipseShape : DrawingShape + { + internal Ellipse _ellipse; + internal float _strokeWidth; + internal int _selectedBrushIndex; + Point2F _startPoint; + + + internal EllipseShape(Paint2DForm parent, Ellipse ellipse, float strokeWidth, int selectedBrush, bool fill) + : base(parent, fill) + { + _startPoint = ellipse.Point; + _ellipse = ellipse; + _strokeWidth = strokeWidth; + _selectedBrushIndex = selectedBrush; + } + + protected internal override void Draw(RenderTarget renderTarget) + { + if (_fill) + { + renderTarget.FillEllipse(_ellipse, _parent.brushes[_selectedBrushIndex]); + } + else + { + renderTarget.DrawEllipse(_ellipse, _parent.brushes[_selectedBrushIndex], _strokeWidth); + } + } + protected internal override Point2F EndPoint + { + set + { + _ellipse.RadiusX = (value.X - _startPoint.X) / 2f; + _ellipse.RadiusY = (value.Y - _startPoint.Y) / 2f; + + _ellipse.Point = new Point2F( + _startPoint.X + ((value.X - _startPoint.X) / 2f), + _startPoint.Y + ((value.Y - _startPoint.Y) / 2f)); + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/FontEnumComboBox.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/FontEnumComboBox.cs new file mode 100644 index 00000000..411256b7 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/FontEnumComboBox.cs @@ -0,0 +1,247 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Globalization; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; +using Microsoft.WindowsAPICodePack.DirectX.DirectWrite; +using DXGI = Microsoft.WindowsAPICodePack.DirectX.Graphics; +using FontFamily=Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontFamily; +using FontStyle=Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontStyle; + +namespace D2DPaint +{ + public class FontEnumComboBox : ComboBox + { + #region Fields + private readonly CultureInfo enUSCulture = new CultureInfo("en-US"); + private D2DFactory d2DFactory; + private DWriteFactory dwriteFactory; + private DCRenderTarget dcRenderTarget; + private SolidColorBrush brush; + List primaryNames = new List(); + private Dictionary layouts; + private float maxHeight; + #endregion + + #region Properties + private float dropDownFontSize = 18; + /// + /// Gets or sets the size of the font used in the drop down. + /// + /// The size of the drop down font. + [DefaultValue(18f)] + public float DropDownFontSize + { + get { return dropDownFontSize; } + set { dropDownFontSize = value; } + } + + /// + /// Gets or sets a value indicating whether all items should be of the same height (the height of the tallest font) or whether they should use the minimum size required for each font. + /// + /// true if item height should be fixed; otherwise, false. + [DefaultValue(true)] + public bool FixedItemHeight { get; set; } + #endregion + + #region FontEnumComboBox() + public FontEnumComboBox() + { + FixedItemHeight = true; + } + #endregion + + #region Initialize() + public void Initialize() + { + d2DFactory = D2DFactory.CreateFactory(D2DFactoryType.Multithreaded); + dwriteFactory = DWriteFactory.CreateFactory(); + InitializeRenderTarget(); + FillFontFamilies(); + if (FixedItemHeight) + DropDownHeight = (int)maxHeight * 10; + DrawMode = DrawMode.OwnerDrawVariable; + MeasureItem += FontEnumComboBox_MeasureItem; + DrawItem += FontEnumComboBox_DrawItem; + } + #endregion + + #region InitializeRenderTarget() + private void InitializeRenderTarget() + { + if (dcRenderTarget == null) + { + var props = new RenderTargetProperties + { + PixelFormat = new PixelFormat( + Microsoft.WindowsAPICodePack.DirectX.Graphics.Format.B8G8R8A8UNorm, + AlphaMode.Ignore), + Usage = RenderTargetUsages.GdiCompatible + }; + dcRenderTarget = d2DFactory.CreateDCRenderTarget(props); + brush = dcRenderTarget.CreateSolidColorBrush( + new ColorF( + ForeColor.R / 256f, + ForeColor.G / 256f, + ForeColor.B / 256f, + 1)); + } + } + #endregion + + #region FillFontFamilies() + private void FillFontFamilies() + { + maxHeight = 0; + primaryNames = new List(); + layouts = new Dictionary(); + foreach (FontFamily family in dwriteFactory.SystemFontFamilyCollection) + { + AddFontFamily(family); + } + primaryNames.Sort(); + Items.Clear(); + Items.AddRange(primaryNames.ToArray()); + } + #endregion + + #region AddFontFamily() + private void AddFontFamily(FontFamily family) + { + string familyName; + CultureInfo familyCulture; + + // First try getting a name in the user's language. + familyCulture = CultureInfo.CurrentUICulture; + family.FamilyNames.TryGetValue(familyCulture, out familyName); + + if (familyName == null) + { + // Fall back to en-US culture. This is somewhat arbitrary, but most fonts have English + // strings so this at least yields predictable fallback behavior in most cases. + familyCulture = enUSCulture; + family.FamilyNames.TryGetValue(familyCulture, out familyName); + } + + if (familyName == null) + { + // As a last resort, use the first name we find. This will just be the name associated + // with whatever locale name sorts first alphabetically. + foreach (KeyValuePair entry in family.FamilyNames) + { + familyCulture = entry.Key; + familyName = entry.Value; + } + } + + if (familyName == null) + return; + + //add info to list of structs used as a cache of text layouts + var displayFormats = new List(); + var format = dwriteFactory.CreateTextFormat( + family.Fonts[0].IsSymbolFont ? Font.FontFamily.Name : familyName, + DropDownFontSize, + FontWeight.Normal, + FontStyle.Normal, + FontStretch.Normal, + familyCulture); + format.WordWrapping = WordWrapping.NoWrap; + var layout = dwriteFactory.CreateTextLayout( + familyName, + format, + 10000, + 10000); + DropDownWidth = Math.Max(DropDownWidth, (int)layout.Metrics.Width); + maxHeight = Math.Max(maxHeight, layout.Metrics.Height); + displayFormats.Add(layout); + //add name to list + primaryNames.Add(familyName); + layouts.Add(familyName, layout); + } + #endregion + + #region FontEnumComboBox_MeasureItem() + void FontEnumComboBox_MeasureItem(object sender, MeasureItemEventArgs e) + { + //initialize the DC Render Target and a brush before first use + InitializeRenderTarget(); + var fontName = (string)Items[e.Index]; + e.ItemWidth = (int)layouts[fontName].Metrics.Width + 10; + e.ItemHeight = FixedItemHeight ? (int)maxHeight : (int)layouts[fontName].Metrics.Height; + } + #endregion + + #region FontEnumComboBox_DrawItem() + void FontEnumComboBox_DrawItem(object sender, DrawItemEventArgs e) + { + //initialize the DC Render Target and a brush before first use + InitializeRenderTarget(); + + //draw the background of the combo item + e.DrawBackground(); + + //set section of the DC to draw on + var subRect = new Rect( + e.Bounds.Left, + e.Bounds.Top, + e.Bounds.Right, + e.Bounds.Bottom); + + //bind the render target with the DC + dcRenderTarget.BindDC(e.Graphics.GetHdc(), subRect); + + //draw the text using D2D/DWrite + dcRenderTarget.BeginDraw(); + + var fontName = (string)Items[e.Index]; + //if ((e.State & DrawItemState.Selected & ~DrawItemState.NoFocusRect) != DrawItemState.None) + dcRenderTarget.DrawTextLayout( + new Point2F(5, (e.Bounds.Height - layouts[fontName].Metrics.Height) / 2), + layouts[fontName], + brush, + DrawTextOptions.Clip); + + dcRenderTarget.EndDraw(); + //release the DC + e.Graphics.ReleaseHdc(); + //drow focus rect for a focused item + e.DrawFocusRectangle(); + } + #endregion + + #region Dispose() + protected override void Dispose(bool disposing) + { + if (disposing) + { + //dispose of all layouts + while (layouts.Keys.Count > 0) + foreach (string key in layouts.Keys) + { + layouts[key].Dispose(); + layouts.Remove(key); + break; + } + + if (brush != null) + brush.Dispose(); + brush = null; + if (dcRenderTarget != null) + dcRenderTarget.Dispose(); + dcRenderTarget = null; + if (dwriteFactory != null) + dwriteFactory.Dispose(); + dwriteFactory = null; + if (d2DFactory != null) + d2DFactory.Dispose(); + d2DFactory = null; + } + base.Dispose(disposing); + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/GeometryShape.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/GeometryShape.cs new file mode 100644 index 00000000..96c6c1ef --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/GeometryShape.cs @@ -0,0 +1,101 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; + +namespace D2DPaint +{ + internal class GeometryShape : DrawingShape + { + internal List _points; + internal float _strokeWidth; + internal int _selectedBrushIndex; + internal Geometry _geometry; + + internal GeometryShape(Paint2DForm parent, Point2F point0, float strokeWidth, int selectedBrush, bool fill) + : base(parent) + { + _points = new List { point0 }; + _strokeWidth = strokeWidth; + _selectedBrushIndex = selectedBrush; + _fill = fill; + } + + protected internal override void Draw(RenderTarget renderTarget) + { + if (_geometry != null) + { + if (_fill) + renderTarget.FillGeometry(_geometry, _parent.brushes[_selectedBrushIndex]); + else + renderTarget.DrawGeometry(_geometry, _parent.brushes[_selectedBrushIndex], _strokeWidth, + _parent.d2dFactory.CreateStrokeStyle( + new StrokeStyleProperties( + CapStyle.Round, + CapStyle.Round, + CapStyle.Round, + LineJoin.Round, + 1, + DashStyle.Solid, + 0))); + } + } + + protected internal override Point2F EndPoint + { + set + { + _points.Add(value); + PathGeometry g = _parent.d2dFactory.CreatePathGeometry(); + var sink = g.Open(); + sink.BeginFigure(_points[0], _fill ? FigureBegin.Filled : FigureBegin.Hollow); + for ( int i = 1; i < _points.Count; i++) + { + //smoothing + if (i > 1 && i < _points.Count - 1) + { + Point2F cp1; + Point2F cp2; + GetSmoothingPoints(i, out cp1, out cp2); + sink.AddBezier( + new BezierSegment( + cp1, + cp2, + _points[i])); + } + else + { + sink.AddLine(_points[i]); + } + } + sink.EndFigure(_fill ? FigureEnd.Closed : FigureEnd.Open); + sink.Close(); + _geometry = g; + } + } + + private void GetSmoothingPoints(int i, out Point2F cp1, out Point2F cp2) + { + float smoothing = .25f; //0 - no smoothing + float lx = _points[i].X - _points[i - 1].X; + float ly = _points[i].Y - _points[i - 1].Y; + float l = (float)Math.Sqrt(lx * lx + ly * ly); // distance from previous point + float l1x = _points[i].X - _points[i - 2].X; + float l1y = _points[i].Y - _points[i - 2].Y; + float l1 = (float)Math.Sqrt(l1x * l1x + l1y * l1y); // distance between two points back and current point + float l2x = _points[i + 1].X - _points[i - 1].X; + float l2y = _points[i + 1].Y - _points[i - 1].Y; + float l2 = (float)Math.Sqrt(l2x * l2x + l2y * l2y); //distance between previous point and the next point + + cp1 = new Point2F( + _points[i - 1].X + (l1x == 0 ? 0 : (smoothing * l * l1x / l1)), + _points[i - 1].Y + (l1y == 0 ? 0 : (smoothing * l * l1y / l1)) + ); + cp2 = new Point2F( + _points[i].X - (l2x == 0 ? 0 : (smoothing * l * l2x / l2)), + _points[i].Y - (l2y == 0 ? 0 : (smoothing * l * l2y / l2)) + ); + } + } +} \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/LineShape.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/LineShape.cs new file mode 100644 index 00000000..57333e5c --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/LineShape.cs @@ -0,0 +1,35 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; + +namespace D2DPaint +{ + internal class LineShape : DrawingShape + { + internal Point2F _point0, _point1; + internal float _strokeWidth; + internal int _selectedBrushIndex; + + internal LineShape(Paint2DForm parent, Point2F point0, Point2F point1, float strokeWidth, int selectedBrush) : base(parent) + { + _point0 = point0; + _point1 = point1; + _strokeWidth = strokeWidth; + _selectedBrushIndex = selectedBrush; + + } + + protected internal override void Draw(RenderTarget renderTarget) + { + renderTarget.DrawLine(_point0, _point1, _parent.brushes[_selectedBrushIndex], _strokeWidth); + } + + protected internal override Point2F EndPoint + { + set + { + _point1 = value; + } + } + } +} \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/Paint2D.csproj b/source/Samples/DirectX/CS/Direct2D/Paint2D/Paint2D.csproj new file mode 100644 index 00000000..f1013745 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/Paint2D.csproj @@ -0,0 +1,132 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432} + WinExe + Properties + D2DPaint + D2DPaint + v3.5 + 512 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + + + + + + + + + + Form + + + BrushDialog.cs + + + + + Component + + + + Form + + + Paint2DForm.cs + + + + + BrushDialog.cs + Designer + + + Paint2DForm.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + TextDialog.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + Form + + + TextDialog.cs + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/Paint2D.sln b/source/Samples/DirectX/CS/Direct2D/Paint2D/Paint2D.sln new file mode 100644 index 00000000..36f448bc --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/Paint2D.sln @@ -0,0 +1,54 @@ +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Paint2D", "Paint2D.csproj", "{E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|Win32.ActiveCfg = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|Any CPU.Build.0 = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|Win32.ActiveCfg = Release|Any CPU + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/Paint2DForm.Designer.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/Paint2DForm.Designer.cs new file mode 100644 index 00000000..ed905c01 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/Paint2DForm.Designer.cs @@ -0,0 +1,370 @@ +namespace D2DPaint +{ + partial class Paint2DForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.ToolStripLabel toolStripLabel1; + System.Windows.Forms.ToolStripLabel toolStripLabel2; + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Paint2DForm)); + this.renderControl = new Microsoft.WindowsAPICodePack.DirectX.Controls.RenderControl(); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.arrowButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator7 = new System.Windows.Forms.ToolStripSeparator(); + this.strokeWidths = new System.Windows.Forms.ToolStripComboBox(); + this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); + this.fillButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.lineButton = new System.Windows.Forms.ToolStripButton(); + this.rectButton = new System.Windows.Forms.ToolStripButton(); + this.roundrectButton = new System.Windows.Forms.ToolStripButton(); + this.ellipseButton = new System.Windows.Forms.ToolStripButton(); + this.geometryButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.textButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.bitmapButton = new System.Windows.Forms.ToolStripButton(); + this.traparencyList = new System.Windows.Forms.ToolStripComboBox(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.brushButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.clearButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); + this.saveButton = new System.Windows.Forms.ToolStripButton(); + toolStripLabel1 = new System.Windows.Forms.ToolStripLabel(); + toolStripLabel2 = new System.Windows.Forms.ToolStripLabel(); + this.toolStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // toolStripLabel1 + // + toolStripLabel1.Name = "toolStripLabel1"; + toolStripLabel1.Size = new System.Drawing.Size(43, 22); + toolStripLabel1.Text = "Stroke:"; + // + // toolStripLabel2 + // + toolStripLabel2.Name = "toolStripLabel2"; + toolStripLabel2.Size = new System.Drawing.Size(81, 22); + toolStripLabel2.Text = "Transparency:"; + // + // renderControl + // + this.renderControl.AutoSize = true; + this.renderControl.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.renderControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.renderControl.Location = new System.Drawing.Point(0, 0); + this.renderControl.Name = "renderControl"; + this.renderControl.Size = new System.Drawing.Size(869, 605); + this.renderControl.TabIndex = 0; + this.renderControl.Load += new System.EventHandler(this.renderControl_Load); + this.renderControl.MouseMove += new System.Windows.Forms.MouseEventHandler(this.renderControl_MouseMove); + this.renderControl.MouseDown += new System.Windows.Forms.MouseEventHandler(this.renderControl_MouseDown); + this.renderControl.MouseUp += new System.Windows.Forms.MouseEventHandler(this.renderControl_MouseUp); + this.renderControl.SizeChanged += new System.EventHandler(this.renderControl_SizeChanged); + this.renderControl.MouseEnter += new System.EventHandler(this.renderControl_MouseEnter); + // + // toolStrip1 + // + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.arrowButton, + this.toolStripSeparator7, + toolStripLabel1, + this.strokeWidths, + this.toolStripSeparator6, + this.fillButton, + this.toolStripSeparator2, + this.lineButton, + this.rectButton, + this.roundrectButton, + this.ellipseButton, + this.geometryButton, + this.toolStripSeparator4, + this.textButton, + this.toolStripSeparator3, + this.bitmapButton, + toolStripLabel2, + this.traparencyList, + this.toolStripSeparator5, + this.brushButton, + this.toolStripSeparator1, + this.clearButton, + this.toolStripSeparator8, + this.saveButton}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(869, 25); + this.toolStrip1.TabIndex = 1; + this.toolStrip1.Text = "toolStrip1"; + this.toolStrip1.MouseEnter += new System.EventHandler(this.toolStrip1_MouseEnter); + // + // arrowButton + // + this.arrowButton.Checked = true; + this.arrowButton.CheckState = System.Windows.Forms.CheckState.Checked; + this.arrowButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.arrowButton.Image = ((System.Drawing.Image)(resources.GetObject("arrowButton.Image"))); + this.arrowButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.arrowButton.Name = "arrowButton"; + this.arrowButton.Size = new System.Drawing.Size(23, 22); + this.arrowButton.Click += new System.EventHandler(this.toolStripButton1_Click); + // + // toolStripSeparator7 + // + this.toolStripSeparator7.Name = "toolStripSeparator7"; + this.toolStripSeparator7.Size = new System.Drawing.Size(6, 25); + // + // strokeWidths + // + this.strokeWidths.AutoSize = false; + this.strokeWidths.DropDownHeight = 110; + this.strokeWidths.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.strokeWidths.DropDownWidth = 50; + this.strokeWidths.IntegralHeight = false; + this.strokeWidths.Items.AddRange(new object[] { + "1", + "2", + "4", + "6", + "8", + "10", + "12", + "16", + "24", + "36", + "42"}); + this.strokeWidths.Name = "strokeWidths"; + this.strokeWidths.Size = new System.Drawing.Size(42, 23); + this.strokeWidths.SelectedIndexChanged += new System.EventHandler(this.strokeWidths_SelectedIndexChanged); + // + // toolStripSeparator6 + // + this.toolStripSeparator6.Name = "toolStripSeparator6"; + this.toolStripSeparator6.Size = new System.Drawing.Size(6, 25); + // + // fillButton + // + this.fillButton.CheckOnClick = true; + this.fillButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.fillButton.Image = ((System.Drawing.Image)(resources.GetObject("fillButton.Image"))); + this.fillButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.fillButton.Name = "fillButton"; + this.fillButton.Size = new System.Drawing.Size(39, 22); + this.fillButton.Text = "Filled"; + this.fillButton.Click += new System.EventHandler(this.fillButton_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25); + // + // lineButton + // + this.lineButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.lineButton.Image = ((System.Drawing.Image)(resources.GetObject("lineButton.Image"))); + this.lineButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.lineButton.Name = "lineButton"; + this.lineButton.Size = new System.Drawing.Size(33, 22); + this.lineButton.Text = "Line"; + this.lineButton.Click += new System.EventHandler(this.lineButton_Click); + // + // rectButton + // + this.rectButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.rectButton.Image = ((System.Drawing.Image)(resources.GetObject("rectButton.Image"))); + this.rectButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.rectButton.Name = "rectButton"; + this.rectButton.Size = new System.Drawing.Size(34, 22); + this.rectButton.Text = "Rect"; + this.rectButton.Click += new System.EventHandler(this.rectButton_Click); + // + // roundrectButton + // + this.roundrectButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.roundrectButton.Image = ((System.Drawing.Image)(resources.GetObject("roundrectButton.Image"))); + this.roundrectButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.roundrectButton.Name = "roundrectButton"; + this.roundrectButton.Size = new System.Drawing.Size(69, 22); + this.roundrectButton.Text = "RoundRect"; + this.roundrectButton.Click += new System.EventHandler(this.roundrectButton_Click); + // + // ellipseButton + // + this.ellipseButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.ellipseButton.Image = ((System.Drawing.Image)(resources.GetObject("ellipseButton.Image"))); + this.ellipseButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.ellipseButton.Name = "ellipseButton"; + this.ellipseButton.Size = new System.Drawing.Size(44, 22); + this.ellipseButton.Text = "Ellipse"; + this.ellipseButton.Click += new System.EventHandler(this.ellipseButton_Click); + // + // geometryButton + // + this.geometryButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.geometryButton.Image = ((System.Drawing.Image)(resources.GetObject("geometryButton.Image"))); + this.geometryButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.geometryButton.Name = "geometryButton"; + this.geometryButton.Size = new System.Drawing.Size(63, 22); + this.geometryButton.Text = "Geometry"; + this.geometryButton.Click += new System.EventHandler(this.geometryButton_Click); + // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size(6, 25); + // + // textButton + // + this.textButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.textButton.Image = ((System.Drawing.Image)(resources.GetObject("textButton.Image"))); + this.textButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.textButton.Name = "textButton"; + this.textButton.Size = new System.Drawing.Size(33, 22); + this.textButton.Text = "Text"; + this.textButton.Click += new System.EventHandler(this.textButton_Click); + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(6, 25); + // + // bitmapButton + // + this.bitmapButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.bitmapButton.Image = ((System.Drawing.Image)(resources.GetObject("bitmapButton.Image"))); + this.bitmapButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.bitmapButton.Name = "bitmapButton"; + this.bitmapButton.Size = new System.Drawing.Size(49, 22); + this.bitmapButton.Text = "Bitmap"; + this.bitmapButton.Click += new System.EventHandler(this.bitmapButton_Click); + // + // traparencyList + // + this.traparencyList.AutoSize = false; + this.traparencyList.Items.AddRange(new object[] { + "1.0", + "0.9", + "0.75", + "0.5", + "0.25", + "0.2", + "0.1"}); + this.traparencyList.Name = "traparencyList"; + this.traparencyList.Size = new System.Drawing.Size(42, 23); + this.traparencyList.SelectedIndexChanged += new System.EventHandler(this.traparencyList_SelectedIndexChanged); + // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + this.toolStripSeparator5.Size = new System.Drawing.Size(6, 25); + // + // brushButton + // + this.brushButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.brushButton.Image = ((System.Drawing.Image)(resources.GetObject("brushButton.Image"))); + this.brushButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.brushButton.Name = "brushButton"; + this.brushButton.Size = new System.Drawing.Size(52, 22); + this.brushButton.Text = "Brushes"; + this.brushButton.Click += new System.EventHandler(this.brushButton_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25); + // + // clearButton + // + this.clearButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.clearButton.Image = ((System.Drawing.Image)(resources.GetObject("clearButton.Image"))); + this.clearButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.clearButton.Name = "clearButton"; + this.clearButton.Size = new System.Drawing.Size(38, 22); + this.clearButton.Text = "Clear"; + this.clearButton.ToolTipText = "Clear All"; + this.clearButton.Click += new System.EventHandler(this.clearButton_Click); + // + // toolStripSeparator8 + // + this.toolStripSeparator8.Name = "toolStripSeparator8"; + this.toolStripSeparator8.Size = new System.Drawing.Size(6, 25); + // + // saveButton + // + this.saveButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text; + this.saveButton.Image = ((System.Drawing.Image)(resources.GetObject("saveButton.Image"))); + this.saveButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.saveButton.Name = "saveButton"; + this.saveButton.Size = new System.Drawing.Size(44, 22); + this.saveButton.Text = "Save..."; + this.saveButton.Click += new System.EventHandler(this.saveButton_Click); + // + // Paint2DForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(869, 605); + this.Controls.Add(this.toolStrip1); + this.Controls.Add(this.renderControl); + this.Name = "Paint2DForm"; + this.Text = "D2D Paint Demo"; + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Microsoft.WindowsAPICodePack.DirectX.Controls.RenderControl renderControl; + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripButton brushButton; + private System.Windows.Forms.ToolStripButton lineButton; + private System.Windows.Forms.ToolStripButton bitmapButton; + private System.Windows.Forms.ToolStripButton roundrectButton; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripComboBox strokeWidths; + private System.Windows.Forms.ToolStripComboBox traparencyList; + private System.Windows.Forms.ToolStripButton clearButton; + private System.Windows.Forms.ToolStripButton rectButton; + private System.Windows.Forms.ToolStripButton ellipseButton; + private System.Windows.Forms.ToolStripButton textButton; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripButton fillButton; + private System.Windows.Forms.ToolStripButton geometryButton; + private System.Windows.Forms.ToolStripButton arrowButton; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator7; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator8; + private System.Windows.Forms.ToolStripButton saveButton; + } +} + diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/Paint2DForm.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/Paint2DForm.cs new file mode 100644 index 00000000..ebaac4d8 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/Paint2DForm.cs @@ -0,0 +1,478 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Threading; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; +using Microsoft.WindowsAPICodePack.DirectX.DirectWrite; +using Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent; +using Microsoft.WindowsAPICodePack.DirectX; +using System.Globalization; +using System.Drawing; +using Brush = Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Brush; + +namespace D2DPaint +{ + enum Shape + { + None, + Line, + Bitmap, + Rectangle, + RoundedRectangle, + Ellipse, + Text, + Geometry + } + + public partial class Paint2DForm : Form + { + #region Fields + internal List brushes = new List(); + internal int currentBrushIndex = -1; + + private Point2F startPoint; + private Point2F endPoint; + private BrushDialog brushDialog = null; + private List drawingShapes = new List(); + private D2DBitmap currentBitmap; + private Shape currentShapeType = Shape.None; + private DrawingShape currentShape = null; + private bool fill = false; + + internal StrokeStyle TextBoxStroke; + + internal D2DFactory d2dFactory; + internal ImagingFactory wicFactory; + internal DWriteFactory dwriteFactory; + private HwndRenderTarget renderTarget; + + private bool isDrawing = false; + private bool isDragging = false; + + private float currentStrokeSize = 2; + private float currentTransparency = 1; + + private readonly ColorF WhiteBackgroundColor = new ColorF(Color.White.ToArgb()); + private TextDialog textDialog; + private OpenFileDialog bitmapDialog; + + ToolStripButton currentButton = null; + + RenderTargetProperties renderProps = new RenderTargetProperties + { + PixelFormat = new PixelFormat( + Microsoft.WindowsAPICodePack.DirectX.Graphics.Format.B8G8R8A8UNorm, + AlphaMode.Ignore), + Usage = RenderTargetUsages.None, + RenderTargetType = RenderTargetType.Software // Software type is required to allow resource + // sharing between hardware (HwndRenderTarget) + // and software (WIC Bitmap render Target). + }; + + #endregion + + #region Paint2DForm() + public Paint2DForm() + { + InitializeComponent(); + for (int i = 0; i < traparencyList.Items.Count; i++) + traparencyList.Items[i] = ((string)traparencyList.Items[i]).Replace(".", CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator); + strokeWidths.SelectedItem = "2"; + traparencyList.SelectedIndex = 0; + } + #endregion + + #region renderControl_SizeChanged() + void renderControl_SizeChanged(object sender, EventArgs e) + { + if (renderTarget != null) + { + // Resize the render targrt to the actual host size + SizeU size = new SizeU((uint)renderControl.ClientSize.Width, (uint)renderControl.ClientSize.Height); + renderTarget.Resize(size); + } + } + #endregion + + #region CreateDeviceResources() + /// + /// This method creates the render target and associated D2D and DWrite resources + /// + void CreateDeviceResources() + { + // Only calls if resources have not been initialize before + if (renderTarget == null) + { + // Create the render target + SizeU size = new SizeU((uint)renderControl.ClientSize.Width, (uint)renderControl.ClientSize.Height); + HwndRenderTargetProperties hwndProps = new HwndRenderTargetProperties(renderControl.Handle, size, PresentOptions.RetainContents); + renderTarget = d2dFactory.CreateHwndRenderTarget(renderProps, hwndProps); + + // Create an initial black brush + brushes.Add(renderTarget.CreateSolidColorBrush(new ColorF(Color.Black.ToArgb()))); + currentBrushIndex = 0; + } + } + #endregion + + #region RenderScene() + private void RenderScene() + { + CreateDeviceResources(); + + if (renderTarget.IsOccluded) + return; + + renderTarget.BeginDraw(); + + renderTarget.Clear(WhiteBackgroundColor); + + foreach (DrawingShape shape in drawingShapes) + { + shape.Draw(renderTarget); + } + + renderTarget.EndDraw(); + } + #endregion + + #region renderControl_Load() + private void renderControl_Load(object sender, EventArgs e) + { + LoadDeviceIndependentResource(); + renderControl.Render = RenderScene; + currentButton = arrowButton; + } + + private void LoadDeviceIndependentResource() + { + // Create the D2D Factory + // This really needs to be set to type MultiThreaded if rendering is to be performed by multiple threads, + // such as if used in a control similar to DirectControl sample control where rendering is done by a dedicated render thread, + // especially if multiple such controls are used in one application, but also when multiple applications use D2D Factories. + // + // In this sample - SingleThreaded type is used because rendering is only done by the main/UI thread and only when required + // (when the surface gets invalidated) making the risk of synchronization problems - quite low. + d2dFactory = D2DFactory.CreateFactory(D2DFactoryType.Multithreaded); + + // Create the DWrite Factory + dwriteFactory = DWriteFactory.CreateFactory(); + + // Create the WIC Factory + wicFactory = ImagingFactory.Create(); + + TextBoxStroke = d2dFactory.CreateStrokeStyle( + new StrokeStyleProperties( + CapStyle.Flat, CapStyle.Flat, CapStyle.Round, + LineJoin.Miter, 5.0f, DashStyle.Dash, 3f), + null); + + } + #endregion + + #region renderControl_MouseDown() + private void renderControl_MouseDown(object sender, MouseEventArgs e) + { + if (!isDrawing) + return; + + isDragging = true; + startPoint.X = e.X; + startPoint.Y = e.Y; + endPoint = startPoint; + + switch (currentShapeType) + { + case Shape.Line: + currentShape = new LineShape(this, startPoint, startPoint, currentStrokeSize, currentBrushIndex); + drawingShapes.Add(currentShape); + break; + case Shape.Bitmap: + currentShape = new BitmapShape( + this, + new RectF(startPoint.X, startPoint.Y, startPoint.X + 5, startPoint.Y + 5), + currentBitmap, currentTransparency); + drawingShapes.Add(currentShape); + break; + case Shape.RoundedRectangle: + currentShape = new RoundRectangleShape(this, + new RoundedRect( + new RectF(startPoint.X, startPoint.Y, startPoint.X, startPoint.Y), + 20f, 20f), + currentStrokeSize, + currentBrushIndex, fill); + drawingShapes.Add(currentShape); + break; + case Shape.Rectangle: + currentShape = new RectangleShape(this, + new RectF(startPoint.X, startPoint.Y, startPoint.X, startPoint.Y), + currentStrokeSize, + currentBrushIndex, fill); + drawingShapes.Add(currentShape); + break; + case Shape.Ellipse: + currentShape = new EllipseShape(this, + new Ellipse(startPoint, 0, 0), + currentStrokeSize, + currentBrushIndex, fill); + drawingShapes.Add(currentShape); + break; + case Shape.Text: + currentShape = new TextShape(this, textDialog.TextLayout, startPoint, 100, 100, currentBrushIndex); + drawingShapes.Add(currentShape); + break; + case Shape.Geometry: + currentShape = new GeometryShape(this, startPoint, currentStrokeSize, currentBrushIndex, fill); + drawingShapes.Add(currentShape); + break; + } + Invalidate(); + } + #endregion + + #region renderControl_MouseMove() + private void renderControl_MouseMove(object sender, MouseEventArgs e) + { + if (!isDrawing || !isDragging) + return; + + endPoint.X = e.X; + endPoint.Y = e.Y; + + currentShape.EndPoint = endPoint; + renderControl.Invalidate(); + } + #endregion + + #region renderControl_MouseUp() + private void renderControl_MouseUp(object sender, MouseEventArgs e) + { + if (!isDragging || !isDrawing) + return; + currentShape.EndDraw(); + isDragging = false; + renderControl.Invalidate(); + } + #endregion + + #region SwitchDrawMode() + private void SwitchDrawMode(object currentModeButton) + { + + isDrawing = true; + + // Unselect the previous button + if (currentButton != null) + currentButton.Checked = false; + + // Select the new button + currentButton = currentModeButton as ToolStripButton; + if (currentButton != null) + currentButton.Checked = true; + } + #endregion + + #region lineButton_Click() + private void lineButton_Click(object sender, EventArgs e) + { + currentShapeType = Shape.Line; + SwitchDrawMode(sender); + } + #endregion + + #region rectButton_Click() + private void rectButton_Click(object sender, EventArgs e) + { + currentShapeType = Shape.Rectangle; + SwitchDrawMode(sender); + } + #endregion + + #region roundrectButton_Click() + private void roundrectButton_Click(object sender, EventArgs e) + { + currentShapeType = Shape.RoundedRectangle; + SwitchDrawMode(sender); + } + #endregion + + #region ellipseButton_Click() + private void ellipseButton_Click(object sender, EventArgs e) + { + currentShapeType = Shape.Ellipse; + SwitchDrawMode(sender); + } + #endregion + + #region bitmapButton_Click() + private void bitmapButton_Click(object sender, EventArgs e) + { + if (bitmapDialog == null) + { + bitmapDialog = new OpenFileDialog(); + bitmapDialog.DefaultExt = "*.jpg;*.png"; + } + if (bitmapDialog.ShowDialog() == DialogResult.OK) + { + string filename = bitmapDialog.FileName; + currentBitmap = BitmapUtilities.LoadBitmapFromFile(renderTarget, wicFactory, filename); + + currentShapeType = Shape.Bitmap; + SwitchDrawMode(sender); + } + } + #endregion + + #region textButton_Click() + private void textButton_Click(object sender, EventArgs e) + { + if (textDialog == null) + { + textDialog = new TextDialog(this); + } + + if (textDialog.ShowDialog() == DialogResult.OK) + { + currentShapeType = Shape.Text; + SwitchDrawMode(sender); + } + } + #endregion + + #region geometryButton_Click() + private void geometryButton_Click(object sender, EventArgs e) + { + currentShapeType = Shape.Geometry; + SwitchDrawMode(sender); + } + #endregion + + #region brushButton_Click() + private void brushButton_Click(object sender, EventArgs e) + { + if (brushDialog == null || brushDialog.IsDisposed) + brushDialog = new BrushDialog(this, renderTarget); + + brushDialog.Show(); + brushDialog.Activate(); + } + #endregion + + #region fillButton_Click() + private void fillButton_Click(object sender, EventArgs e) + { + fill = !fill; + } + #endregion + + #region strokeWidths_SelectedIndexChanged() + private void strokeWidths_SelectedIndexChanged(object sender, EventArgs e) + { + float f; + if (float.TryParse(strokeWidths.Text as string, out f)) + { + this.currentStrokeSize = f; + } + } + #endregion + + #region traparencyList_SelectedIndexChanged() + private void traparencyList_SelectedIndexChanged(object sender, EventArgs e) + { + float f; + if (float.TryParse(traparencyList.Text as string, out f)) + { + this.currentTransparency = f; + } + } + #endregion + + #region clearButton_Click() + private void clearButton_Click(object sender, EventArgs e) + { + drawingShapes.Clear(); + renderControl.Invalidate(); + } + #endregion + + private void toolStrip1_MouseEnter(object sender, EventArgs e) + { + this.Cursor = Cursors.Arrow; + } + + private void renderControl_MouseEnter(object sender, EventArgs e) + { + if (isDrawing) + { + this.Cursor = Cursors.Cross; + } + } + + private void toolStripButton1_Click(object sender, EventArgs e) + { + this.isDrawing = false; + this.currentShape = null; + + if (currentButton != null) + currentButton.Checked = false; + + currentButton = arrowButton; + arrowButton.Checked = true; + } + + private void saveButton_Click(object sender, EventArgs e) + { + if (renderTarget == null) + { + // Should not happen + MessageBox.Show("Unable to save file."); + return; + } + + SaveFileDialog saveDlg = new SaveFileDialog(); + saveDlg.Filter = "Bitmap image (*.bmp)|*.bmp|Png image (*.png)|*.png|Jpeg image (*.jpg)|*.jpg|Gif image (*.gif)|*.gif"; + if (DialogResult.OK == saveDlg.ShowDialog()) + { + SizeU size = new SizeU((uint)ClientSize.Width, (uint)ClientSize.Height); + + ImagingBitmap wicBitmap = wicFactory.CreateImagingBitmap( + size.Width, + size.Height, + PixelFormats.Bgr32Bpp, + BitmapCreateCacheOption.CacheOnLoad); + + D2DBitmap d2dBitmap = renderTarget.CreateBitmap(size, new BitmapProperties(new PixelFormat(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format.B8G8R8A8UNorm, AlphaMode.Ignore), renderTarget.Dpi.X, renderTarget.Dpi.Y)); + d2dBitmap.CopyFromRenderTarget(renderTarget); + + RenderTarget wicRenderTarget = + d2dFactory.CreateWicBitmapRenderTarget(wicBitmap, renderProps); + + wicRenderTarget.BeginDraw(); + + wicRenderTarget.DrawBitmap(d2dBitmap); + wicRenderTarget.EndDraw(); + + Guid fileType; + switch (saveDlg.FilterIndex) + { + case 1: fileType = ContainerFormats.Bmp; + break; + case 2: fileType = ContainerFormats.Png; + break; + case 3: fileType = ContainerFormats.Jpeg; + break; + case 4: fileType = ContainerFormats.Gif; + break; + default: fileType = ContainerFormats.Bmp; // default to bitmap files + break; + } + + wicBitmap.SaveToFile(wicFactory, fileType, saveDlg.FileName); + } + + } + + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/Paint2DForm.resx b/source/Samples/DirectX/CS/Direct2D/Paint2D/Paint2DForm.resx new file mode 100644 index 00000000..dee45bcf --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/Paint2DForm.resx @@ -0,0 +1,307 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + False + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABcAAAAYCAYAAAARfGZ1AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAE9SURBVEhLzdUxa8JAHAVwv0DBudCpm2Argjg5lFadSqe6 + uUi/QL+TTi7S4tBNnBpKG9qARGIphCZKhkCGQCCEV/9CSpBc7uIpeCBkCL/3eIGzgAOewgFtpOKnZ5d4 + Vd6lc5n4TeteOoCJW/YKsgFMnDaRDcjEZQO4uEyAEL5rgDAeRRFM8zfXRxbCCQ7DEEEQYPH9IxzAxZOw + 7/vwPA+zmS4UkImnwa7rwnEcqOonN4CJZ8G2ba/3N6Eob5sA1mHi8cY0xXxuIG5M2PYvN04fL4ZPiufo + D4agxs12B0/PL0KXGrN5EqYb8qJy9T8FPYscJk5TUOP46r2962I0GsMwDNCzSPtUnDZNwtSSQkrlBnRd + x2QyRaV6zS2f65+IGhOsaRpq9fZ+cctabtr3Hh7xoX7tF+dqWy/kmuWo8D+A9wvO0LsKkwAAAABJRU5E + rkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/Program.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/Program.cs new file mode 100644 index 00000000..510a82a8 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/Program.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; + +namespace D2DPaint +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Paint2DForm()); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..b096647f --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("D2DPaint")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("a7a6dba3-c09d-4818-89b4-816b53c07c01")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/Properties/Resources.Designer.cs new file mode 100644 index 00000000..df1bfa7d --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D2DPaint.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("D2DPaint.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct2D/Paint2D/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/Properties/Settings.Designer.cs new file mode 100644 index 00000000..956b0d75 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D2DPaint.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct2D/Paint2D/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/RectangleShape.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/RectangleShape.cs new file mode 100644 index 00000000..4f581448 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/RectangleShape.cs @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; + +namespace D2DPaint +{ + internal class RectangleShape : DrawingShape + { + internal RectF _rect; + internal float _strokeWidth; + internal int _selectedBrushIndex; + + + internal RectangleShape(Paint2DForm parent, RectF rect, float strokeWidth, int selectedBrush, bool fill) + : base(parent, fill) + { + _rect = rect; + _strokeWidth = strokeWidth; + _selectedBrushIndex = selectedBrush; + } + + protected internal override void Draw(RenderTarget renderTarget) + { + if (_fill) + { + renderTarget.FillRectangle(_rect, _parent.brushes[_selectedBrushIndex]); + } + else + { + renderTarget.DrawRectangle(_rect, _parent.brushes[_selectedBrushIndex], _strokeWidth); + } + } + protected internal override Point2F EndPoint + { + set + { + _rect.Right = value.X; + _rect.Bottom = value.Y; + } + } + } +} \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/RoundRectangleShape.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/RoundRectangleShape.cs new file mode 100644 index 00000000..e34021f6 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/RoundRectangleShape.cs @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; + +namespace D2DPaint +{ + internal class RoundRectangleShape : DrawingShape + { + internal RoundedRect _rect; + internal float _strokeWidth; + internal int _selectedBrushIndex; + + + internal RoundRectangleShape(Paint2DForm parent, RoundedRect rect, float strokeWidth, int selectedBrush, bool fill) + : base(parent, fill) + { + _rect = rect; + _strokeWidth = strokeWidth; + _selectedBrushIndex = selectedBrush; + } + + protected internal override void Draw(RenderTarget renderTarget) + { + if (_fill) + { + renderTarget.FillRoundedRectangle(_rect, _parent.brushes[_selectedBrushIndex]); + } + else + { + renderTarget.DrawRoundedRectangle(_rect, _parent.brushes[_selectedBrushIndex], _strokeWidth); + } + } + + protected internal override Point2F EndPoint + { + set + { + _rect.Rect = new RectF(_rect.Rect.Left, _rect.Rect.Top, value.X, value.Y); + } + } + } +} \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/TextDialog.Designer.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/TextDialog.Designer.cs new file mode 100644 index 00000000..e8f4e01e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/TextDialog.Designer.cs @@ -0,0 +1,270 @@ +namespace D2DPaint +{ + partial class TextDialog + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.Button CancelTextButton; + this.AddTextButton = new System.Windows.Forms.Button(); + this.underLineCheckBox = new System.Windows.Forms.CheckBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.sizeCombo = new System.Windows.Forms.ComboBox(); + this.styleCombo = new System.Windows.Forms.ComboBox(); + this.weightCombo = new System.Windows.Forms.ComboBox(); + this.stretchCombo = new System.Windows.Forms.ComboBox(); + this.textBox = new System.Windows.Forms.TextBox(); + this.strikethroughCheckBox = new System.Windows.Forms.CheckBox(); + this.fontFamilyCombo = new D2DPaint.FontEnumComboBox(); + CancelTextButton = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // CancelTextButton + // + CancelTextButton.Location = new System.Drawing.Point(287, 221); + CancelTextButton.Name = "CancelTextButton"; + CancelTextButton.Size = new System.Drawing.Size(138, 31); + CancelTextButton.TabIndex = 1; + CancelTextButton.Text = "Cancel"; + CancelTextButton.UseVisualStyleBackColor = true; + CancelTextButton.Click += new System.EventHandler(this.CancelButton_Click); + // + // AddTextButton + // + this.AddTextButton.Location = new System.Drawing.Point(99, 221); + this.AddTextButton.Name = "AddTextButton"; + this.AddTextButton.Size = new System.Drawing.Size(138, 31); + this.AddTextButton.TabIndex = 0; + this.AddTextButton.Text = "Add Text"; + this.AddTextButton.UseVisualStyleBackColor = true; + this.AddTextButton.Click += new System.EventHandler(this.AddTextButton_Click); + // + // underLineCheckBox + // + this.underLineCheckBox.AutoSize = true; + this.underLineCheckBox.Location = new System.Drawing.Point(37, 183); + this.underLineCheckBox.Name = "underLineCheckBox"; + this.underLineCheckBox.Size = new System.Drawing.Size(71, 17); + this.underLineCheckBox.TabIndex = 2; + this.underLineCheckBox.Text = "Underline"; + this.underLineCheckBox.UseVisualStyleBackColor = true; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(34, 30); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(59, 13); + this.label1.TabIndex = 3; + this.label1.Text = "Font Name"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(34, 58); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(51, 13); + this.label2.TabIndex = 4; + this.label2.Text = "Font Size"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(34, 86); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(54, 13); + this.label3.TabIndex = 4; + this.label3.Text = "Font Style"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(34, 114); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(65, 13); + this.label4.TabIndex = 4; + this.label4.Text = "Font Weight"; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(34, 142); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(65, 13); + this.label5.TabIndex = 4; + this.label5.Text = "Font Stretch"; + // + // sizeCombo + // + this.sizeCombo.FormattingEnabled = true; + this.sizeCombo.Items.AddRange(new object[] { + "4", + "6", + "8", + "10", + "12", + "14", + "20", + "24", + "32", + "36", + "42", + "60", + ""}); + this.sizeCombo.Location = new System.Drawing.Point(116, 58); + this.sizeCombo.Name = "sizeCombo"; + this.sizeCombo.Size = new System.Drawing.Size(121, 21); + this.sizeCombo.TabIndex = 5; + // + // styleCombo + // + this.styleCombo.FormattingEnabled = true; + this.styleCombo.Items.AddRange(new object[] { + "Normal", + "Oblique", + "Italic"}); + this.styleCombo.Location = new System.Drawing.Point(116, 86); + this.styleCombo.Name = "styleCombo"; + this.styleCombo.Size = new System.Drawing.Size(121, 21); + this.styleCombo.TabIndex = 5; + // + // weightCombo + // + this.weightCombo.FormattingEnabled = true; + this.weightCombo.Items.AddRange(new object[] { + "Thin", + "Extra Light", + "Light", + "Normal", + "Medium", + "Semi Bold", + "Bold", + "Extra Bold", + "Black"}); + this.weightCombo.Location = new System.Drawing.Point(116, 114); + this.weightCombo.Name = "weightCombo"; + this.weightCombo.Size = new System.Drawing.Size(121, 21); + this.weightCombo.TabIndex = 5; + // + // stretchCombo + // + this.stretchCombo.FormattingEnabled = true; + this.stretchCombo.Items.AddRange(new object[] { + "None", + "Ultra Condensed", + "Extra Condensed", + "Condensed", + "Semi Condensed", + "Normal", + "Semi Expanded", + "Expanded", + "Extra Expanded", + "Ultra Expanded"}); + this.stretchCombo.Location = new System.Drawing.Point(116, 142); + this.stretchCombo.Name = "stretchCombo"; + this.stretchCombo.Size = new System.Drawing.Size(121, 21); + this.stretchCombo.TabIndex = 5; + // + // textBox + // + this.textBox.AcceptsReturn = true; + this.textBox.Location = new System.Drawing.Point(268, 30); + this.textBox.Multiline = true; + this.textBox.Name = "textBox"; + this.textBox.Size = new System.Drawing.Size(200, 133); + this.textBox.TabIndex = 6; + this.textBox.Text = "Add Text Here"; + // + // strikethroughCheckBox + // + this.strikethroughCheckBox.AutoSize = true; + this.strikethroughCheckBox.Location = new System.Drawing.Point(131, 183); + this.strikethroughCheckBox.Name = "strikethroughCheckBox"; + this.strikethroughCheckBox.Size = new System.Drawing.Size(89, 17); + this.strikethroughCheckBox.TabIndex = 2; + this.strikethroughCheckBox.Text = "Strikethrough"; + this.strikethroughCheckBox.UseVisualStyleBackColor = true; + // + // fontFamilyCombo + // + this.fontFamilyCombo.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable; + this.fontFamilyCombo.DropDownHeight = 206; + this.fontFamilyCombo.FormattingEnabled = true; + this.fontFamilyCombo.IntegralHeight = false; + this.fontFamilyCombo.Location = new System.Drawing.Point(116, 27); + this.fontFamilyCombo.Name = "fontFamilyCombo"; + this.fontFamilyCombo.Size = new System.Drawing.Size(121, 21); + this.fontFamilyCombo.TabIndex = 7; + // + // TextDialog + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(512, 292); + this.Controls.Add(this.fontFamilyCombo); + this.Controls.Add(this.textBox); + this.Controls.Add(this.stretchCombo); + this.Controls.Add(this.weightCombo); + this.Controls.Add(this.styleCombo); + this.Controls.Add(this.sizeCombo); + this.Controls.Add(this.label5); + this.Controls.Add(this.label4); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.strikethroughCheckBox); + this.Controls.Add(this.underLineCheckBox); + this.Controls.Add(CancelTextButton); + this.Controls.Add(this.AddTextButton); + this.Name = "TextDialog"; + this.Text = "TextDialog"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button AddTextButton; + private System.Windows.Forms.CheckBox underLineCheckBox; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.ComboBox sizeCombo; + private System.Windows.Forms.ComboBox styleCombo; + private System.Windows.Forms.ComboBox weightCombo; + private System.Windows.Forms.ComboBox stretchCombo; + private System.Windows.Forms.TextBox textBox; + private System.Windows.Forms.CheckBox strikethroughCheckBox; + private FontEnumComboBox fontFamilyCombo; + } +} \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/TextDialog.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/TextDialog.cs new file mode 100644 index 00000000..986589fe --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/TextDialog.cs @@ -0,0 +1,68 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +using System; +using System.Windows.Forms; +using System.Globalization; +using Microsoft.WindowsAPICodePack.DirectX.DirectWrite; + +namespace D2DPaint +{ + public partial class TextDialog : Form + { + private Paint2DForm parent; + #region TextLayout + private TextLayout textLayout; + internal TextLayout TextLayout + { + get + { + TextFormat textFormat = parent.dwriteFactory.CreateTextFormat( + fontFamilyCombo.Text, + float.Parse(sizeCombo.Text), + (FontWeight)((weightCombo.SelectedIndex + 1) * 100), + (FontStyle)styleCombo.SelectedIndex, + (FontStretch)stretchCombo.SelectedIndex, CultureInfo.CurrentUICulture); + textLayout = parent.dwriteFactory.CreateTextLayout(textBox.Text, textFormat, 100, 100); + if (underLineCheckBox.Checked) + { + textLayout.SetUnderline(true, new TextRange(0, (uint)textBox.Text.Length)); + } + if (strikethroughCheckBox.Checked) + { + textLayout.SetStrikethrough(true, new TextRange(0, (uint)textBox.Text.Length)); + } + return textLayout; + } + set { textLayout = value; } + } + #endregion + + public TextDialog(Paint2DForm parent) + { + InitializeComponent(); + + this.parent = parent; + + if (!DesignMode) + { + fontFamilyCombo.Initialize(); + } + fontFamilyCombo.SelectedIndex = 0; // First Choice + sizeCombo.SelectedIndex = 7; // 24.0 + weightCombo.SelectedIndex = 3; // Normal + styleCombo.SelectedIndex = 0; // Normal + stretchCombo.SelectedIndex = 5; // Normal + } + + private void AddTextButton_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.OK; + Close(); + } + + private void CancelButton_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + Close(); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/TextDialog.resx b/source/Samples/DirectX/CS/Direct2D/Paint2D/TextDialog.resx new file mode 100644 index 00000000..b0e37157 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/TextDialog.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/Paint2D/TextShape.cs b/source/Samples/DirectX/CS/Direct2D/Paint2D/TextShape.cs new file mode 100644 index 00000000..38ec1c7b --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/Paint2D/TextShape.cs @@ -0,0 +1,58 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; +using Microsoft.WindowsAPICodePack.DirectX.DirectWrite; + +namespace D2DPaint +{ + internal class TextShape : DrawingShape + { + internal float _maxX; + internal float _maxY; + internal Point2F _point0; + internal TextLayout _textLayout; + internal int _selectedBrushIndex; + + private bool _drawBorder = true; + + internal TextShape(Paint2DForm parent, TextLayout textLayout, Point2F startPoint, float maxX, float maxY, int selectedBrush) + : base(parent) + { + _maxX = maxX; + _maxY = maxY; + _textLayout = textLayout; + _selectedBrushIndex = selectedBrush; + _point0 = startPoint; + } + + protected internal override void Draw(RenderTarget renderTarget) + { + if (_drawBorder) + { + + renderTarget.DrawRectangle( + new RectF(_point0.X, _point0.Y, _point0.X + _textLayout.MaxWidth, _point0.Y + _textLayout.MaxHeight), + _parent.brushes[0], + 1.5f, _parent.TextBoxStroke); + } + + renderTarget.DrawTextLayout( + _point0, _textLayout, _parent.brushes[_selectedBrushIndex], DrawTextOptions.Clip); + } + + protected internal override void EndDraw() + { + _drawBorder = false; + } + + protected internal override Point2F EndPoint + { + set + { + _textLayout.MaxWidth = Math.Max(5, value.X - _point0.X); + _textLayout.MaxHeight = Math.Max(5, value.Y - _point0.Y); + } + } + } +} \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/RandomShapes/Program.cs b/source/Samples/DirectX/CS/Direct2D/RandomShapes/Program.cs new file mode 100644 index 00000000..9d572019 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/RandomShapes/Program.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; + +namespace RandomShapes +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Window()); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/RandomShapes/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct2D/RandomShapes/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..2addf165 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/RandomShapes/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("RandomShapes")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("7e68ea6a-4d2c-4ba6-8995-9717286d0471")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct2D/RandomShapes/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct2D/RandomShapes/Properties/Resources.Designer.cs new file mode 100644 index 00000000..dae7c98f --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/RandomShapes/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4927 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace RandomShapesDemo.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("RandomShapesDemo.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/RandomShapes/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct2D/RandomShapes/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/RandomShapes/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/RandomShapes/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct2D/RandomShapes/Properties/Settings.Designer.cs new file mode 100644 index 00000000..2f5ec2df --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/RandomShapes/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4927 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace RandomShapesDemo.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/RandomShapes/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct2D/RandomShapes/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/RandomShapes/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct2D/RandomShapes/RandomShapesDemo.csproj b/source/Samples/DirectX/CS/Direct2D/RandomShapes/RandomShapesDemo.csproj new file mode 100644 index 00000000..0b78e3b0 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/RandomShapes/RandomShapesDemo.csproj @@ -0,0 +1,91 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {081B37CA-E9FF-4F68-94A5-57BB43145FDC} + WinExe + Properties + RandomShapesDemo + RandomShapesDemo + v3.5 + 512 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + + + + + + Form + + + Window.cs + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + Window.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + {32D3BC0C-7DCB-4132-866D-A5060E16066B} + D2DShapes + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/RandomShapes/RandomShapesDemo.sln b/source/Samples/DirectX/CS/Direct2D/RandomShapes/RandomShapesDemo.sln new file mode 100644 index 00000000..c124dcf7 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/RandomShapes/RandomShapesDemo.sln @@ -0,0 +1,55 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RandomShapesDemo", "RandomShapesDemo.csproj", "{081B37CA-E9FF-4F68-94A5-57BB43145FDC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D2DShapes", "..\D2DShapes\D2DShapes.csproj", "{32D3BC0C-7DCB-4132-866D-A5060E16066B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|Any CPU.Build.0 = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|Win32.ActiveCfg = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|Win32.ActiveCfg = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|Any CPU.Build.0 = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|Win32.ActiveCfg = Release|Any CPU + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/CS/Direct2D/RandomShapes/Window.Designer.cs b/source/Samples/DirectX/CS/Direct2D/RandomShapes/Window.Designer.cs new file mode 100644 index 00000000..8ca2edb5 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/RandomShapes/Window.Designer.cs @@ -0,0 +1,63 @@ +namespace RandomShapes +{ + partial class Window + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.d2DShapesControlWithButtons1 = new D2DShapes.D2DShapesControlWithButtons(); + this.SuspendLayout(); + // + // d2DShapesControlWithButtons1 + // + this.d2DShapesControlWithButtons1.BackColor = System.Drawing.Color.Bisque; + this.d2DShapesControlWithButtons1.Dock = System.Windows.Forms.DockStyle.Fill; + this.d2DShapesControlWithButtons1.Location = new System.Drawing.Point(0, 0); + this.d2DShapesControlWithButtons1.Name = "d2DShapesControlWithButtons1"; + this.d2DShapesControlWithButtons1.NumberOfShapesToAdd = 2; + this.d2DShapesControlWithButtons1.Size = new System.Drawing.Size(728, 465); + this.d2DShapesControlWithButtons1.TabIndex = 0; + // + // Window + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(728, 465); + this.Controls.Add(this.d2DShapesControlWithButtons1); + this.Name = "Window"; + this.Text = "Random Shapes"; + this.WindowState = System.Windows.Forms.FormWindowState.Maximized; + this.Load += new System.EventHandler(this.Window_Load); + this.ResumeLayout(false); + + } + + #endregion + + private D2DShapes.D2DShapesControlWithButtons d2DShapesControlWithButtons1; + } +} + diff --git a/source/Samples/DirectX/CS/Direct2D/RandomShapes/Window.cs b/source/Samples/DirectX/CS/Direct2D/RandomShapes/Window.cs new file mode 100644 index 00000000..f3480b2e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/RandomShapes/Window.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; + +using System.Windows.Forms; + +namespace RandomShapes +{ + public partial class Window : Form + { + public Window() + { + InitializeComponent(); + } + + private void Window_Load(object sender, EventArgs e) + { + d2DShapesControlWithButtons1.Initialize(); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/RandomShapes/Window.resx b/source/Samples/DirectX/CS/Direct2D/RandomShapes/Window.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/RandomShapes/Window.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/TextInlineImage/App.xaml b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/App.xaml new file mode 100644 index 00000000..6b5d29ab --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/App.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct2D/TextInlineImage/App.xaml.cs b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/App.xaml.cs new file mode 100644 index 00000000..5a73fc72 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/App.xaml.cs @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Windows; + +namespace Direct2D_Demo_WPF +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/TextInlineImage/BitmapUtilities.cs b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/BitmapUtilities.cs new file mode 100644 index 00000000..c9553502 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/BitmapUtilities.cs @@ -0,0 +1,53 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; +using System.IO; + +namespace Microsoft.WindowsAPICodePack.Samples +{ + internal class BitmapUtilities + { + internal static D2DBitmap LoadBitmapFromFile( + RenderTarget renderTarget, + ImagingFactory wicFactory, + string fileName) + { + + BitmapDecoder decoder = wicFactory.CreateDecoderFromFileName(fileName, DesiredAccess.Read, DecodeMetadataCacheOption.OnLoad); + return CreateBitmapFromDecoder(renderTarget, wicFactory, decoder); + } + + internal static D2DBitmap LoadBitmapFromStream( + RenderTarget renderTarget, + ImagingFactory wicFactory, + Stream ioStream) + { + BitmapDecoder decoder = wicFactory.CreateDecoderFromStream(ioStream, DecodeMetadataCacheOption.OnLoad); + return CreateBitmapFromDecoder(renderTarget, wicFactory, decoder); + } + + private static D2DBitmap CreateBitmapFromDecoder(RenderTarget renderTarget, ImagingFactory wicFactory, BitmapDecoder decoder) + { + BitmapFrameDecode source; + FormatConverter converter; + // Create the initial frame. + source = decoder.GetFrame(0); + + // Convert the image format to 32bppPBGRA -- which Direct2D expects. + converter = wicFactory.CreateFormatConverter(); + converter.Initialize( + source.ToBitmapSource(), + PixelFormats.Pbgra32Bpp, + BitmapDitherType.None, + BitmapPaletteType.MedianCut + ); + + // Create a Direct2D bitmap from the WIC bitmap. + return renderTarget.CreateBitmapFromWicBitmap( + converter.ToBitmapSource()); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/TextInlineImage/ImageInlineObject.cs b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/ImageInlineObject.cs new file mode 100644 index 00000000..055bcf64 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/ImageInlineObject.cs @@ -0,0 +1,82 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using Microsoft.WindowsAPICodePack.DirectX.DirectWrite; +using Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; +using Microsoft.WindowsAPICodePack.DirectX; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.ComTypes; +using System.IO; +using System.Windows; + +namespace Microsoft.WindowsAPICodePack.Samples +{ + /// + /// This class implements a custom Direct Write Inline Object (ICustomInlineObject) + /// that displays a given image + /// + public class ImageInlineObject : ICustomInlineObject + { + RenderTarget _renderTarget; + D2DBitmap _bitmap ; + SizeF _bitmapSize; + + public ImageInlineObject(RenderTarget renderTarget, ImagingFactory wicFactory, string resourceName) + { + _renderTarget = renderTarget; + + using (Stream stream = Application.ResourceAssembly.GetManifestResourceStream(resourceName)) + { + _bitmap = BitmapUtilities.LoadBitmapFromStream(renderTarget, wicFactory, stream); + + // Save the bitmap size, for faster access + _bitmapSize = _bitmap.Size; + } + } + + #region ICustomInlineObject Members + + public BreakCondition BreakConditionAfter + { + get + { + return BreakCondition.Neutral; + } + } + + public BreakCondition BreakConditionBefore + { + get + { + return BreakCondition.Neutral; + } + } + + public void Draw(float originX, float originY, bool isSideways, bool isRightToLeft, Brush clientDrawingEffect) + { + RectF imageRect = new RectF(originX, originY, originX + _bitmapSize.Width, originY + _bitmapSize.Height); + _renderTarget.DrawBitmap(_bitmap, 1, BitmapInterpolationMode.Linear, imageRect); + } + + public InlineObjectMetrics Metrics + { + // Simply return the image size + get + { + return new InlineObjectMetrics(_bitmapSize.Width, _bitmapSize.Height, _bitmapSize.Height, false); + } + } + + public OverhangMetrics OverhangMetrics + { + // No overhangs + get + { + return new OverhangMetrics(0, 0, 0, 0); + } + } + + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..2c1d6726 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Properties/AssemblyInfo.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("TextInlineImage")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Properties/Resources.Designer.cs new file mode 100644 index 00000000..071931cb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Direct2D_Demo_WPF.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Direct2D_Demo_WPF.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Properties/Settings.Designer.cs new file mode 100644 index 00000000..3dc64c32 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Direct2D_Demo_WPF.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/TextInlineImage/TextInlineImage.csproj b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/TextInlineImage.csproj new file mode 100644 index 00000000..45ed93b9 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/TextInlineImage.csproj @@ -0,0 +1,170 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {06E0C795-735A-425F-9864-1308612F19C1} + WinExe + Properties + TextInlineImage + TextInlineImage + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + + + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + + 3.5 + + + 3.5 + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + Window1.xaml + Code + + + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + + + + + + + False + .NET Framework Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + false + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D/TextInlineImage/TextInlineImage.sln b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/TextInlineImage.sln new file mode 100644 index 00000000..47aa9912 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/TextInlineImage.sln @@ -0,0 +1,53 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextInlineImage", "TextInlineImage.csproj", "{06E0C795-735A-425F-9864-1308612F19C1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release|Win32.ActiveCfg = Release|Any CPU + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Window1.xaml b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Window1.xaml new file mode 100644 index 00000000..68284542 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Window1.xaml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Window1.xaml.cs b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Window1.xaml.cs new file mode 100644 index 00000000..20fd4799 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/Window1.xaml.cs @@ -0,0 +1,133 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows; +using Microsoft.WindowsAPICodePack.DirectX.Controls; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; +using Microsoft.WindowsAPICodePack.DirectX.DirectWrite; + +using DWrite = Microsoft.WindowsAPICodePack.DirectX.DirectWrite; +using Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent; + +namespace Microsoft.WindowsAPICodePack.Samples +{ + /// + /// Interaction logic for Window1.xaml + /// + public partial class Window1 : Window + { + D2DFactory d2dFactory; + DWriteFactory dwriteFactory; + ImagingFactory wicFactory; + HwndRenderTarget renderTarget; + SolidColorBrush blackBrush; + ImageInlineObject inlineImage; + TextFormat textFormat; + TextLayout textLayout; + + public Window1() + { + InitializeComponent(); + host.Loaded += new RoutedEventHandler(host_Loaded); + host.SizeChanged += new SizeChangedEventHandler(host_SizeChanged); + } + + void host_SizeChanged(object sender, SizeChangedEventArgs e) + { + if (renderTarget != null) + { + // Resize the render targrt to the actual host size + renderTarget.Resize(new SizeU((uint)(host.ActualWidth), (uint)(host.ActualHeight))); + + // Resize the text layout max width and height as well + textLayout.MaxWidth = (float)host.ActualWidth; + textLayout.MaxHeight = (float)host.ActualHeight; + } + + InvalidateVisual(); + } + + void host_Loaded(object sender, RoutedEventArgs e) + { + CreateDeviceIndependentResources(); + + // Start rendering now + host.Render = Render; + host.InvalidateVisual(); + } + + private void CreateDeviceIndependentResources() + { + // Create the D2D Factory + d2dFactory = D2DFactory.CreateFactory(D2DFactoryType.SingleThreaded); + + // Create the DWrite Factory + dwriteFactory = DWriteFactory.CreateFactory(); + + wicFactory = ImagingFactory.Create(); + + string text = "Inline Object * Sample"; + + textFormat = dwriteFactory.CreateTextFormat("Gabriola", 72); + + textFormat.TextAlignment = DWrite.TextAlignment.Center; + textFormat.ParagraphAlignment = DWrite.ParagraphAlignment.Center; + + textLayout = dwriteFactory.CreateTextLayout( + text, + textFormat, + (float) host.ActualWidth, + (float) host.ActualHeight); + } + + + /// + /// This method creates the render target and all associated D2D and DWrite resources + /// + void CreateDeviceResources() + { + // Only calls if resources have not been initialize before + if (renderTarget == null) + { + // Create the render target + SizeU size = new SizeU((uint)host.ActualWidth, (uint)host.ActualHeight); + RenderTargetProperties props = new RenderTargetProperties(); + HwndRenderTargetProperties hwndProps = new HwndRenderTargetProperties(host.Handle, size, PresentOptions.None); + renderTarget = d2dFactory.CreateHwndRenderTarget(props, hwndProps); + + // Create the black brush for text + blackBrush = renderTarget.CreateSolidColorBrush(new ColorF(0 ,0, 0, 1)); + + inlineImage = new ImageInlineObject(renderTarget, wicFactory, "TextInlineImage.img1.jpg"); + + TextRange textRange = new TextRange(14, 1); + textLayout.SetInlineObject(inlineImage, textRange); + } + } + + private void Render() + { + + CreateDeviceResources(); + + if (renderTarget.IsOccluded) + return; + + SizeF renderTargetSize = renderTarget.Size; + + renderTarget.BeginDraw(); + + renderTarget.Clear(new ColorF(1, 1, 1, 0)); + + renderTarget.DrawTextLayout( + new Point2F(0,0), + textLayout, + blackBrush + ); + + renderTarget.EndDraw(); + + } + + } +} diff --git a/source/Samples/DirectX/CS/Direct2D/TextInlineImage/img1.jpg b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/img1.jpg new file mode 100644 index 00000000..4b124b7b Binary files /dev/null and b/source/Samples/DirectX/CS/Direct2D/TextInlineImage/img1.jpg differ diff --git a/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/App.xaml b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/App.xaml new file mode 100644 index 00000000..285a1ab0 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/App.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/App.xaml.cs b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/App.xaml.cs new file mode 100644 index 00000000..bed8c2d8 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/App.xaml.cs @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Windows; + +namespace Microsoft.WindowsAPICodePack.DirectX.Samples +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/BitmapUtilities.cs b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/BitmapUtilities.cs new file mode 100644 index 00000000..36a2d15a --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/BitmapUtilities.cs @@ -0,0 +1,53 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; +using System.IO; + +namespace Microsoft.WindowsAPICodePack.DirectX.Samples +{ + internal class BitmapUtilities + { + internal static D2DBitmap LoadBitmapFromFile( + RenderTarget renderTarget, + ImagingFactory wicFactory, + string fileName) + { + + BitmapDecoder decoder = wicFactory.CreateDecoderFromFileName(fileName, DesiredAccess.Read, DecodeMetadataCacheOption.OnLoad); + return CreateBitmapFromDecoder(renderTarget, wicFactory, decoder); + } + + internal static D2DBitmap LoadBitmapFromStream( + RenderTarget renderTarget, + ImagingFactory wicFactory, + Stream ioStream) + { + BitmapDecoder decoder = wicFactory.CreateDecoderFromStream(ioStream, DecodeMetadataCacheOption.OnLoad); + return CreateBitmapFromDecoder(renderTarget, wicFactory, decoder); + } + + private static D2DBitmap CreateBitmapFromDecoder(RenderTarget renderTarget, ImagingFactory wicFactory, BitmapDecoder decoder) + { + BitmapFrameDecode source; + FormatConverter converter; + // Create the initial frame. + source = decoder.GetFrame(0); + + // Convert the image format to 32bppPBGRA -- which Direct2D expects. + converter = wicFactory.CreateFormatConverter(); + converter.Initialize( + source.ToBitmapSource(), + PixelFormats.Pbgra32Bpp, + BitmapDitherType.None, + BitmapPaletteType.MedianCut + ); + + // Create a Direct2D bitmap from the WIC bitmap. + return renderTarget.CreateBitmapFromWicBitmap( + converter.ToBitmapSource()); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/D2D_D3D_Interop.csproj b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/D2D_D3D_Interop.csproj new file mode 100644 index 00000000..ebad0b4e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/D2D_D3D_Interop.csproj @@ -0,0 +1,131 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664} + WinExe + Properties + Microsoft.WindowsAPICodePack.DirectX.Samples + D2D_D3D_Interop + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + + + Client + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + Window1.xaml + Code + + + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/D2D_D3D_Interop.sln b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/D2D_D3D_Interop.sln new file mode 100644 index 00000000..fc70f478 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/D2D_D3D_Interop.sln @@ -0,0 +1,93 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D2D_D3D_Interop", "D2D_D3D_Interop.csproj", "{25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}" + ProjectSection(ProjectDependencies) = postProject + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} = {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} = {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} = {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Direct3DUtilities", "..\..\UtilitiesLibrary\D3DUtilities\Direct3DUtilities.csproj", "{8A152DCF-12AE-492B-9F24-060B90B2DDD0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{83039ABD-8E0C-427A-BB5B-D51B100C93E1}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|Any CPU.Build.0 = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|Win32.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|x64.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|Any CPU.ActiveCfg = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|Any CPU.Build.0 = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|Win32.ActiveCfg = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|x64.ActiveCfg = Release|Any CPU + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.Build.0 = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.ActiveCfg = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.Build.0 = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.ActiveCfg = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.Build.0 = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.ActiveCfg = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.Build.0 = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Win32.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Win32.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} = {83039ABD-8E0C-427A-BB5B-D51B100C93E1} + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} = {83039ABD-8E0C-427A-BB5B-D51B100C93E1} + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} = {83039ABD-8E0C-427A-BB5B-D51B100C93E1} + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/D3DStructs.cs b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/D3DStructs.cs new file mode 100644 index 00000000..70250a76 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/D3DStructs.cs @@ -0,0 +1,96 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Runtime.InteropServices; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; + +namespace Microsoft.WindowsAPICodePack.DirectX.Samples +{ + #region SimpleVertex + [StructLayout(LayoutKind.Sequential)] + public struct SimpleVertex + { + [MarshalAs(UnmanagedType.Struct)] + public Vector3F Pos; + [MarshalAs(UnmanagedType.Struct)] + public Vector2F Tex; + } + #endregion + + #region Vertex Array + public class VertexData + { + public VertexArray s_VertexArray = new VertexArray(); + public FacesIndexArray s_FacesIndexArray = new FacesIndexArray(); + + [StructLayout(LayoutKind.Sequential)] + public class VertexArray + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 24)] + private SimpleVertex[] vertices = + { + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + }; + } + + [StructLayout(LayoutKind.Sequential)] + public class FacesIndexArray + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 36)] + private ushort[] indices = + { + 3,1,0, + 2,1,3, + + 6,4,5, + 7,4,6, + + 11,9,8, + 10,9,11, + + 14,12,13, + 15,12,14, + + 19,17,16, + 18,17,19, + + 22,20,21, + 23,20,22 + }; + + public uint Length + { + get { return (uint)indices.Length; } + } + } + } + #endregion +} diff --git a/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..5d8a16e1 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Properties/AssemblyInfo.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("DXGIInterop")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Properties/Resources.Designer.cs new file mode 100644 index 00000000..e44a4c97 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4927 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace DXGIInterop.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DXGIInterop.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Properties/Settings.Designer.cs new file mode 100644 index 00000000..c7463b09 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4927 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace DXGIInterop.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Window1.xaml b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Window1.xaml new file mode 100644 index 00000000..7ee47306 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Window1.xaml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Window1.xaml.cs b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Window1.xaml.cs new file mode 100644 index 00000000..f3e2a756 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/Window1.xaml.cs @@ -0,0 +1,793 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.IO; +using System.Runtime.InteropServices; +using System.Windows; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.DirectWrite; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; +using Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent; +using Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; + +namespace Microsoft.WindowsAPICodePack.DirectX.Samples +{ + /// + /// Interaction logic for Window1.xaml + /// + public partial class Window1 + { + #region Fields + object syncObject = new object(); + const string HelloWorldText = "Hello, World!"; + D2DFactory d2DFactory; + ImagingFactory imagingFactory; + DWriteFactory dWriteFactory; + + float currentTicks; + int? startTime; + int lastTicks; + float fps; + + //Device-Dependent Resources + D3DDevice1 device; + SwapChain swapChain; + RasterizerState rasterizerState; + Texture2D depthStencil; + DepthStencilView depthStencilView; + RenderTargetView renderTargetView; + Texture2D offscreenTexture; + Effect shader; + D3DBuffer vertexBuffer; + InputLayout vertexLayout; + D3DBuffer facesIndexBuffer; + ShaderResourceView textureResourceView; + Surface textureSurface; + + RenderTarget backBufferRenderTarget; + SolidColorBrush backBufferTextBrush; + LinearGradientBrush backBufferGradientBrush; + BitmapBrush gridPatternBitmapBrush; + + RenderTarget textureRenderTarget; + LinearGradientBrush linearGradientBrush; + SolidColorBrush blackBrush; + D2DBitmap d2dBitmap; + + EffectTechnique technique; + EffectMatrixVariable worldVariable; + EffectMatrixVariable viewVariable; + EffectMatrixVariable projectionVariable; + EffectShaderResourceVariable diffuseVariable; + + // Device-Independent Resources + TextFormat textFormat; + TextFormat textFormatFps; + PathGeometry pathGeometry; + + Matrix4x4F worldMatrix; + Matrix4x4F viewMatrix; + Matrix4x4F projectionMatrix; + + #region Read-only initialization values + readonly VertexData vertexArray = new VertexData(); + + readonly InputElementDescription[] inputLayouts = + { + new InputElementDescription { SemanticName = "POSITION", SemanticIndex = 0, Format = Format.R32G32B32Float, InputSlot = 0, AlignedByteOffset = 0, InputSlotClass = InputClassification.PerVertexData, InstanceDataStepRate = 0 }, + new InputElementDescription { SemanticName = "TEXCOORD", SemanticIndex = 0, Format = Format.R32G32Float, InputSlot =0, AlignedByteOffset = 12, InputSlotClass = InputClassification.PerVertexData, InstanceDataStepRate = 0} + }; + + readonly RenderTargetProperties renderTargetProperties = + new RenderTargetProperties( + RenderTargetType.Default, + new PixelFormat(Format.Unknown, AlphaMode.Premultiplied), + 96, + 96, + RenderTargetUsages.None, + FeatureLevel.Default + ); + + readonly GradientStop[] stopsBackground = + { + new GradientStop(0.0f, new ColorF(GetColorValues(System.Windows.Media.Colors.Blue))), + new GradientStop(1.0f, new ColorF(GetColorValues(System.Windows.Media.Colors.Black))) + }; + + readonly GradientStop[] stopsGeometry = + { + new GradientStop(0.0f, new ColorF(GetColorValues(System.Windows.Media.Colors.LightBlue))), + new GradientStop(1.0f, new ColorF(GetColorValues(System.Windows.Media.Colors.Blue))), + }; + #endregion + #endregion + + // Helper method, because the built-in method that returns a float[], + // System.Windows.Media.Color.GetNativeColorValues(), requires that + // the color have a non-null ColorContext. This one doesn't. + private static float[] GetColorValues(System.Windows.Media.Color color) + { + return new float[] { color.ScR, color.ScG, color.ScB, color.ScA }; + } + + public Window1() + { + InitializeComponent(); + } + + void host_Loaded(object sender, RoutedEventArgs e) + { + CreateDeviceIndependentResources(); + host.SizeChanged += host_SizeChanged; + host.Render = RenderScene; + } + + #region RenderScene() + void RenderScene() + { + lock (syncObject) + { + //initialize D3D device and D2D render targets the first time we get here + if (device == null) + CreateDeviceResources(); + + //tick count is used to control animation and calculate FPS + int currentTime = Environment.TickCount; + if (!startTime.HasValue) + { + startTime = currentTime; + } + + currentTicks = currentTime - startTime.GetValueOrDefault(); + + float a = (currentTicks * 360.0f) * ((float)Math.PI / 180.0f) * 0.0001f; + worldMatrix = MatrixMath.MatrixRotationY(a); + + // Swap chain will tell us how big the back buffer is + SwapChainDescription swapDesc = swapChain.Description; + uint nWidth = swapDesc.BufferDescription.Width; + uint nHeight = swapDesc.BufferDescription.Height; + + device.ClearDepthStencilView( + depthStencilView, ClearOptions.Depth, + 1, 0 + ); + + // Draw a gradient background before we draw the cube + if (backBufferRenderTarget != null) + { + backBufferRenderTarget.BeginDraw(); + + backBufferGradientBrush.Transform = + Matrix3x2F.Scale( + backBufferRenderTarget.Size, + new Point2F(0.0f, 0.0f)); + + RectF rect = new RectF( + 0.0f, 0.0f, + nWidth, + nHeight); + + backBufferRenderTarget.FillRectangle(rect, backBufferGradientBrush); + backBufferRenderTarget.EndDraw(); + } + + diffuseVariable.Resource = null; + technique.GetPassByIndex(0).Apply(); + + // Draw the D2D content into a D3D surface. + RenderD2DContentIntoTexture(); + + // Pass the updated texture to the pixel shader + diffuseVariable.Resource = textureResourceView; + + // Update variables that change once per frame. + worldVariable.Matrix = worldMatrix; + + // Set the index buffer. + device.IA.IndexBuffer = new IndexBuffer(facesIndexBuffer, Format.R16UInt, 0); + + // Render the scene + technique.GetPassByIndex(0).Apply(); + + device.DrawIndexed(vertexArray.s_FacesIndexArray.Length, 0, 0); + + // Update fps + currentTime = Environment.TickCount; // Get the ticks again + currentTicks = currentTime - startTime.GetValueOrDefault(); + if ((currentTime - lastTicks) > 250) + { + fps = (swapChain.LastPresentCount) / (currentTicks / 1000f); + lastTicks = currentTime; + } + + backBufferRenderTarget.BeginDraw(); + + // Draw fps + backBufferRenderTarget.DrawText( + String.Format("Average FPS: {0:F1}", fps), + textFormatFps, + new RectF( + 10f, + nHeight - 32f, + nWidth, + nHeight + ), + backBufferTextBrush + ); + + backBufferRenderTarget.EndDraw(); + + swapChain.Present(0, Microsoft.WindowsAPICodePack.DirectX.Graphics.PresentOptions.None); + } + } + #endregion + + #region RenderD2DContentIntoTexture() + void RenderD2DContentIntoTexture() + { + SizeF rtSize = textureRenderTarget.Size; + + textureRenderTarget.BeginDraw(); + + textureRenderTarget.Transform = Matrix3x2F.Identity; + textureRenderTarget.Clear(new ColorF(GetColorValues(System.Windows.Media.Colors.White))); + + textureRenderTarget.FillRectangle( + new RectF(0.0f, 0.0f, rtSize.Width, rtSize.Height), + gridPatternBitmapBrush); + + SizeF size = d2dBitmap.Size; + + textureRenderTarget.DrawBitmap( + d2dBitmap, 1.0f, BitmapInterpolationMode.Linear, + new RectF( + 0.0f, + 0.0f, + size.Width, + size.Height) + ); + + // Draw the bitmap at the bottom corner of the window + textureRenderTarget.DrawBitmap( + d2dBitmap, 1.0f, BitmapInterpolationMode.Linear, + new RectF( + rtSize.Width - size.Width, + rtSize.Height - size.Height, + rtSize.Width, + rtSize.Height)); + + // Set the world transform to rotatate the drawing around the center of the render target + // and write "Hello World" + float angle = 0.1f * Environment.TickCount; + textureRenderTarget.Transform + = Matrix3x2F.Rotation( + angle, + new Point2F( + rtSize.Width / 2, + rtSize.Height / 2 + )); + + textureRenderTarget.DrawText( + HelloWorldText, + textFormat, + new RectF( + 0, + 0, + rtSize.Width, + rtSize.Height + ), + blackBrush + ); + + // Reset back to the identity transform + textureRenderTarget.Transform + = Matrix3x2F.Translation( + 0, + rtSize.Height - 200 + ); + + textureRenderTarget.FillGeometry( + pathGeometry, + linearGradientBrush); + + textureRenderTarget.Transform = + Matrix3x2F.Translation( + rtSize.Width - 200, + 0 + ); + + textureRenderTarget.FillGeometry( + pathGeometry, + linearGradientBrush + ); + + textureRenderTarget.EndDraw(); + } + #endregion + + #region host_SizeChanged() + void host_SizeChanged(object sender, SizeChangedEventArgs e) + { + lock (syncObject) + { + if (device != null) + { + uint nWidth = (uint)host.ActualWidth; + uint nHeight = (uint)host.ActualHeight; + + backBufferRenderTarget.Dispose(); + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { null }, null); + + //need to remove the reference to the swapchain's backbuffer to enable ResizeBuffers() call + renderTargetView.Dispose(); + depthStencilView.Dispose(); + depthStencil.Dispose(); + + device.RS.Viewports = null; + + SwapChainDescription sd = swapChain.Description; + //Change the swap chain's back buffer size, format, and number of buffers + swapChain.ResizeBuffers( + sd.BufferCount, + nWidth, + nHeight, + sd.BufferDescription.Format, + sd.Options); + + using (Texture2D pBuffer = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView(pBuffer); + } + + InitializeDepthStencil(nWidth, nHeight); + + // bind the views to the device + device.OM.RenderTargets = new OutputMergerRenderTargets(new[] { renderTargetView }, depthStencilView); + + SetViewport(nWidth, nHeight); + + CreateBackBufferD2DRenderTarget(); + + // update the aspect ratio + projectionMatrix = Camera.MatrixPerspectiveFovLH( + (float)Math.PI * 0.24f, // fovy + nWidth / (float)nHeight, // aspect + 0.1f, // zn + 100.0f // zf + ); + projectionVariable.Matrix = projectionMatrix; + + } + } + } + #endregion + + #region CreateDeviceResources() + void CreateDeviceResources() + { + uint nWidth = (uint)host.ActualWidth; + uint nHeight = (uint)host.ActualHeight; + + // Create D3D device and swap chain + SwapChainDescription swapDesc = new SwapChainDescription + { + BufferDescription = new ModeDescription + { + Width = nWidth, Height = nHeight, + Format = Format.R8G8B8A8UNorm, + RefreshRate = new Rational { Numerator = 60, Denominator = 1 } + }, + SampleDescription = new SampleDescription { Count = 1, Quality = 0 }, + BufferUsage = UsageOptions.RenderTargetOutput, + BufferCount = 1, + OutputWindowHandle = host.Handle, + Windowed = true + }; + + device = D3DDevice1.CreateDeviceAndSwapChain1( + null, + DriverType.Hardware, + null, + CreateDeviceOptions.SupportBgra, + FeatureLevel.NinePointThree, + swapDesc + ); + swapChain = device.SwapChain; + + using (Texture2D pBuffer = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView(pBuffer); + } + + MakeBothSidesRendered(); + InitializeDepthStencil(nWidth, nHeight); + + device.OM.RenderTargets = new OutputMergerRenderTargets(new[] { renderTargetView }, depthStencilView); + + // Set a new viewport based on the new dimensions + SetViewport(nWidth, nHeight); + + // Load pixel shader + shader = LoadResourceShader(device, "Microsoft.WindowsAPICodePack.DirectX.Samples.dxgisample.fxo"); + + // Obtain the technique + technique = shader.GetTechniqueByName("Render"); + + // Create the input layout + InitializeGeometryBuffers(); + + // Obtain the variables + Initialize3DTransformations(nWidth, nHeight); + + // Allocate a offscreen D3D surface for D2D to render our 2D content into + InitializeTextureRenderTarget(); + + // Create a D2D render target which can draw into the surface in the swap chain + CreateD2DRenderTargets(); + } + #endregion + + #region Initialize3DTransformations() + private void Initialize3DTransformations(uint nWidth, uint nHeight) + { + worldVariable = shader.GetVariableByName("World").AsMatrix; + viewVariable = shader.GetVariableByName("View").AsMatrix; + projectionVariable = shader.GetVariableByName("Projection").AsMatrix; + diffuseVariable = shader.GetVariableByName("txDiffuse").AsShaderResource; + + worldMatrix = Matrix4x4F.Identity; + + // Initialize the view matrix. + Vector3F eye = new Vector3F(0.0f, 2.0f, -6.0f); + Vector3F at = new Vector3F(0.0f, 0.0f, 0.0f); + Vector3F up = new Vector3F(0.0f, 1.0f, 0.0f); + viewMatrix = Camera.MatrixLookAtLH(eye, at, up); + viewVariable.Matrix = viewMatrix; + + // Initialize the projection matrix + projectionMatrix = Camera.MatrixPerspectiveFovLH( + (float)Math.PI * 0.24f, // fovy + nWidth / (float)nHeight, // aspect + 0.1f, // zn + 100.0f // zf + ); + projectionVariable.Matrix = projectionMatrix; + } + #endregion + + #region InitializeTextureRenderTarget() + private void InitializeTextureRenderTarget() + { + Texture2DDescription offscreenTextureDesc = new Texture2DDescription + { + ArraySize = 1, + BindingOptions = BindingOptions.RenderTarget | BindingOptions.ShaderResource, + CpuAccessOptions = CpuAccessOptions.None, + Format = Format.R8G8B8A8UNorm, + Height = 512, + Width = 512, + MipLevels = 1, + MiscellaneousResourceOptions = MiscellaneousResourceOptions.None, + SampleDescription = new SampleDescription + { + Count = 1, + Quality = 0 + }, + Usage = Usage.Default, + }; + + offscreenTexture = device.CreateTexture2D(offscreenTextureDesc); + // Convert the Direct2D texture into a Shader Resource View + textureResourceView = device.CreateShaderResourceView(offscreenTexture); + textureSurface = offscreenTexture.GraphicsSurface; + } + #endregion + + #region InitializeGeometryBuffers() + private void InitializeGeometryBuffers() + { + PassDescription PassDesc = technique.GetPassByIndex(0).Description; + + vertexLayout = device.CreateInputLayout( + inputLayouts, + PassDesc.InputAssemblerInputSignature, + PassDesc.InputAssemblerInputSignatureSize + ); + + // Set the input layout + device.IA.InputLayout = vertexLayout; + + + BufferDescription bd = new BufferDescription(); + bd.Usage = Usage.Default; + bd.ByteWidth = (uint)Marshal.SizeOf(vertexArray.s_VertexArray); + bd.BindingOptions = BindingOptions.VertexBuffer; + bd.CpuAccessOptions = CpuAccessOptions.None; + bd.MiscellaneousResourceOptions = MiscellaneousResourceOptions.None; + + IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(vertexArray.s_VertexArray)); + Marshal.StructureToPtr(vertexArray.s_VertexArray, ptr, true); + SubresourceData initData = new SubresourceData { SystemMemory = ptr }; + vertexBuffer = device.CreateBuffer(bd, initData); + Marshal.FreeHGlobal(ptr); + + // Set vertex buffer + uint stride = (uint)Marshal.SizeOf(typeof(SimpleVertex)); + uint offset = 0; + + device.IA.SetVertexBuffers( + 0, // StartSlot + new[] { vertexBuffer }, + new[] { stride }, + new[] { offset }); + + bd.Usage = Usage.Default; + bd.ByteWidth = (uint)Marshal.SizeOf(vertexArray.s_FacesIndexArray); + bd.BindingOptions = BindingOptions.IndexBuffer; + bd.CpuAccessOptions = CpuAccessOptions.None; + bd.MiscellaneousResourceOptions = MiscellaneousResourceOptions.None; + + ptr = Marshal.AllocHGlobal(Marshal.SizeOf(vertexArray.s_FacesIndexArray)); + Marshal.StructureToPtr(vertexArray.s_FacesIndexArray, ptr, true); + + initData.SystemMemory = ptr; + facesIndexBuffer = device.CreateBuffer(bd, initData); + + // Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList; + } + #endregion + + #region SetViewport() + private void SetViewport(uint nWidth, uint nHeight) + { + Viewport viewport = new Viewport + { + Width = nWidth, Height = nHeight, + TopLeftX = 0, TopLeftY = 0, + MinDepth = 0, MaxDepth = 1 + }; + + device.RS.Viewports = new[] { viewport }; + } + #endregion + + #region InitializeDepthStencil() + private void InitializeDepthStencil(uint nWidth, uint nHeight) + { + // Create depth stencil texture + Texture2DDescription descDepth = new Texture2DDescription() + { + Width = nWidth, + Height = nHeight, + MipLevels = 1, + ArraySize = 1, + Format = Format.D16UNorm, + SampleDescription = new SampleDescription() + { + Count = 1, + Quality = 0 + }, + BindingOptions = BindingOptions.DepthStencil, + }; + depthStencil = device.CreateTexture2D(descDepth); + + // Create the depth stencil view + DepthStencilViewDescription depthStencilViewDesc = new DepthStencilViewDescription() + { + Format = descDepth.Format, + ViewDimension = + DepthStencilViewDimension. + Texture2D + }; + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc); + } + #endregion + + #region MakeBothSidesRendered() + private void MakeBothSidesRendered() + { + RasterizerDescription rsDesc = new RasterizerDescription(); + rsDesc.AntiAliasedLineEnable = false; + rsDesc.CullMode = CullMode.None; + rsDesc.DepthBias = 0; + rsDesc.DepthBiasClamp = 0; + rsDesc.DepthClipEnable = true; + rsDesc.FillMode = Microsoft.WindowsAPICodePack.DirectX.Direct3D10.FillMode.Solid; + rsDesc.FrontCounterclockwise = false; // Must be FALSE for 10on9 + rsDesc.MultisampleEnable = false; + rsDesc.ScissorEnable = false; + rsDesc.SlopeScaledDepthBias = 0; + rasterizerState = device.CreateRasterizerState(rsDesc); + + device.RS.State = rasterizerState; + } + #endregion + + #region LoadResourceShader() + static Effect LoadResourceShader(D3DDevice device, string resourceName) + { + using (Stream stream = Application.ResourceAssembly.GetManifestResourceStream(resourceName)) + { + return device.CreateEffectFromCompiledBinary(stream); + } + } + #endregion + + #region CreateD2DRenderTargets() + private void CreateD2DRenderTargets() + { + // Create a D2D render target which can draw into our offscreen D3D surface + textureRenderTarget = d2DFactory.CreateGraphicsSurfaceRenderTarget( + textureSurface, + renderTargetProperties + ); + + // Create a linear gradient brush for the 2D geometry + GradientStopCollection gradientStops = textureRenderTarget.CreateGradientStopCollection(stopsGeometry, Gamma.StandardRgb, ExtendMode.Mirror); + linearGradientBrush = textureRenderTarget.CreateLinearGradientBrush( + new LinearGradientBrushProperties( + new Point2F(100, 0), + new Point2F(100, 200)), + gradientStops + ); + + // create a black brush + blackBrush = textureRenderTarget.CreateSolidColorBrush(new ColorF(GetColorValues(System.Windows.Media.Colors.Black))); + + using (Stream stream = Application.ResourceAssembly.GetManifestResourceStream("Microsoft.WindowsAPICodePack.DirectX.Samples.tulip.jpg")) + { + d2dBitmap = BitmapUtilities.LoadBitmapFromStream( + textureRenderTarget, + imagingFactory, + stream); + } + + gridPatternBitmapBrush = CreateGridPatternBrush(textureRenderTarget); + gridPatternBitmapBrush.Opacity = 0.5f; + + CreateBackBufferD2DRenderTarget(); + } + #endregion + + #region CreateBackBufferD2DRenderTarget() + private void CreateBackBufferD2DRenderTarget() + { + // Get a surface in the swap chain + using (Surface backBufferSurface = swapChain.GetBuffer(0)) + { + backBufferRenderTarget = d2DFactory.CreateGraphicsSurfaceRenderTarget( + backBufferSurface, + renderTargetProperties + ); + + GradientStopCollection stops = backBufferRenderTarget.CreateGradientStopCollection(stopsBackground, + Gamma.StandardRgb, + ExtendMode.Mirror); + backBufferGradientBrush = backBufferRenderTarget.CreateLinearGradientBrush( + new LinearGradientBrushProperties( + new Point2F(0.0f, 0.0f), + new Point2F(0.0f, 1.0f)), + stops); + + // Create a red brush for text drawn into the back buffer + backBufferTextBrush = backBufferRenderTarget.CreateSolidColorBrush(new ColorF(GetColorValues(System.Windows.Media.Colors.WhiteSmoke))); + } + } + #endregion + + #region CreateDeviceIndependentResources() + void CreateDeviceIndependentResources() + { + string msc_fontName = "Verdana"; + float msc_fontSize = 50; + + string fps_fontName = "Courier New"; + float fps_fontSize = 12; + + GeometrySink spSink; + + // Create D2D factory + d2DFactory = D2DFactory.CreateFactory(D2DFactoryType.SingleThreaded); + + // Create WIC factory + imagingFactory = ImagingFactory.Create(); + + // Create DWrite factory + dWriteFactory = DWriteFactory.CreateFactory(); + + // Create DWrite text format object + textFormat = dWriteFactory.CreateTextFormat( + msc_fontName, + msc_fontSize); + + textFormat.TextAlignment = Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextAlignment.Center; + textFormat.ParagraphAlignment = Microsoft.WindowsAPICodePack.DirectX.DirectWrite.ParagraphAlignment.Center; + + + // Create DWrite text format object + textFormatFps = dWriteFactory.CreateTextFormat( + fps_fontName, + fps_fontSize); + + textFormatFps.TextAlignment = Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextAlignment.Leading; + textFormatFps.ParagraphAlignment = Microsoft.WindowsAPICodePack.DirectX.DirectWrite.ParagraphAlignment.Near; + + // Create the path geometry. + pathGeometry = d2DFactory.CreatePathGeometry(); + + // Write to the path geometry using the geometry sink. We are going to create an + // hour glass. + spSink = pathGeometry.Open(); + + spSink.SetFillMode(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.FillMode.Alternate); + + spSink.BeginFigure( + new Point2F(0, 0), + FigureBegin.Filled + ); + + spSink.AddLine(new Point2F(200, 0)); + + spSink.AddBezier( + new BezierSegment( + new Point2F(150, 50), + new Point2F(150, 150), + new Point2F(200, 200) + )); + + spSink.AddLine( + new Point2F(0, + 200) + ); + + spSink.AddBezier( + new BezierSegment( + new Point2F(50, 150), + new Point2F(50, 50), + new Point2F(0, 0) + )); + + spSink.EndFigure( + FigureEnd.Closed + ); + + spSink.Close( + ); + } + #endregion + + #region CreateGridPatternBrush() + BitmapBrush CreateGridPatternBrush(RenderTarget pRenderTarget) + { + // Create a compatible render target. + BitmapRenderTarget spCompatibleRenderTarget = + pRenderTarget.CreateCompatibleRenderTarget(CompatibleRenderTargetOptions.None, (new SizeF(10.0f, 10.0f))); + + // Draw a pattern. + SolidColorBrush spGridBrush = + spCompatibleRenderTarget.CreateSolidColorBrush( + new ColorF(0.93f, 0.94f, 0.96f, 1.0f)); + + spCompatibleRenderTarget.BeginDraw(); + + spCompatibleRenderTarget.FillRectangle(new RectF(0.0f, 0.0f, 10.0f, 1.0f), spGridBrush); + spCompatibleRenderTarget.FillRectangle(new RectF(0.0f, 0.1f, 1.0f, 10.0f), spGridBrush); + spCompatibleRenderTarget.EndDraw(); + + // Retrieve the bitmap from the render target. + D2DBitmap spGridBitmap = spCompatibleRenderTarget.Bitmap; + + // Choose the tiling mode for the bitmap brush. + BitmapBrushProperties brushProperties = + new BitmapBrushProperties(ExtendMode.Wrap, ExtendMode.Wrap, BitmapInterpolationMode.Linear); + + // Create the bitmap brush. + return textureRenderTarget.CreateBitmapBrush(spGridBitmap, brushProperties); + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/app.config b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/app.config new file mode 100644 index 00000000..a8afe940 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/app.config @@ -0,0 +1,3 @@ + + + diff --git a/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/dxgisample.fx b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/dxgisample.fx new file mode 100644 index 00000000..9d529408 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/dxgisample.fx @@ -0,0 +1,88 @@ +// + +// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A +// PARTICULAR PURPOSE. +// +// Copyright (c) Microsoft Corporation. All rights reserved + +//-------------------------------------------------------------------------------------- +// File: dxgisample.fx +// +//-------------------------------------------------------------------------------------- + +//-------------------------------------------------------------------------------------- +// Constant Buffer Variables +//-------------------------------------------------------------------------------------- +Texture2D txDiffuse; +SamplerState samLinear +{ + Filter = MIN_MAG_MIP_LINEAR; + AddressU = Wrap; + AddressV = Wrap; +}; + +cbuffer cbNeverChanges +{ + matrix View; +}; + +cbuffer cbChangeOnResize +{ + matrix Projection; +}; + +cbuffer cbChangesEveryFrame +{ + matrix World; +}; + +struct VS_INPUT +{ + float4 Pos : POSITION; + float2 Tex : TEXCOORD; +}; + +struct PS_INPUT +{ + float4 Pos : SV_POSITION; + float2 Tex : TEXCOORD0; +}; + + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +PS_INPUT VS( VS_INPUT input ) +{ + PS_INPUT output = (PS_INPUT)0; + output.Pos = mul( input.Pos, World ); + output.Pos = mul( output.Pos, View ); + output.Pos = mul( output.Pos, Projection ); + output.Tex = input.Tex; + + return output; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( PS_INPUT input) : SV_Target +{ + return txDiffuse.Sample( samLinear, input.Tex ); +} + + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0_level_9_1, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0_level_9_1, PS() ) ); + } +} +// diff --git a/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/dxgisample.fxo b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/dxgisample.fxo new file mode 100644 index 00000000..c01b2ab5 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/dxgisample.fxo differ diff --git a/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/tulip.jpg b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/tulip.jpg new file mode 100644 index 00000000..6513fad6 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct2D_3D/D2D_D3D_Interop/tulip.jpg differ diff --git a/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/App.xaml b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/App.xaml new file mode 100644 index 00000000..abc66b9e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/App.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/App.xaml.cs b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/App.xaml.cs new file mode 100644 index 00000000..1bc93025 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/App.xaml.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Windows; + +namespace SciFiTextDemo +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/D3DStructs.cs b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/D3DStructs.cs new file mode 100644 index 00000000..0ee632e2 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/D3DStructs.cs @@ -0,0 +1,48 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Runtime.InteropServices; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; + +namespace SciFiTextDemo +{ + [StructLayout(LayoutKind.Sequential)] + public struct SimpleVertex + { + [MarshalAs(UnmanagedType.Struct)] + public Vector3F Pos; + [MarshalAs(UnmanagedType.Struct)] + public Vector2F Tex; + } + + + public class VertexData + { + public Vertices VerticesInstance = new Vertices(); + public Indices IndicesInstance = new Indices(); + + [StructLayout(LayoutKind.Sequential)] + public class Vertices + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] + private SimpleVertex[] vertices = + { + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 16.0f ), Tex = new Vector2F( 0.0f, 0.0f )}, // upper-left + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 16.0f ), Tex = new Vector2F( 1.0f, 0.0f )}, // upper-right + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 0.0f ), Tex = new Vector2F( 1.0f, 1.0f )}, // lower-right + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 0.0f ), Tex = new Vector2F( 0.0f, 1.0f )} // lower-left + }; + } + + [StructLayout(LayoutKind.Sequential)] + public class Indices + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] + private ushort[] indices = + { + 3,1,0, + 2,1,3, + }; + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..87920059 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Properties/AssemblyInfo.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SciFiTextDemo")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Properties/Resources.Designer.cs new file mode 100644 index 00000000..b023f7fc --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4927 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SciFiTextDemo.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SciFiTextDemo.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Properties/Settings.Designer.cs new file mode 100644 index 00000000..aaa1e997 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4927 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SciFiTextDemo.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/SciFiText.fx b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/SciFiText.fx new file mode 100644 index 00000000..509024e8 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/SciFiText.fx @@ -0,0 +1,83 @@ +// +// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A +// PARTICULAR PURPOSE. +// +// Copyright (c) Microsoft Corporation. All rights reserved + + +//-------------------------------------------------------------------------------------- +// Constant Buffer Variables +//-------------------------------------------------------------------------------------- +Texture2D txDiffuse; +SamplerState samLinear +{ + Filter = ANISOTROPIC; + AddressU = Clamp; + AddressV = Clamp; +}; + +cbuffer cbNeverChanges +{ + matrix View; +}; + +cbuffer cbChangeOnResize +{ + matrix Projection; +}; + +cbuffer cbChangesEveryFrame +{ + matrix World; +}; + +struct VS_INPUT +{ + float4 Pos : POSITION; + float2 Tex : TEXCOORD; +}; + +struct PS_INPUT +{ + float4 Pos : SV_POSITION; + float2 Tex : TEXCOORD0; +}; + + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +PS_INPUT VS( VS_INPUT input ) +{ + PS_INPUT output = (PS_INPUT)0; + output.Pos = mul( input.Pos, World ); + output.Pos = mul( output.Pos, View ); + output.Pos = mul( output.Pos, Projection ); + output.Tex = input.Tex; + + return output; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( PS_INPUT input) : SV_Target +{ + return txDiffuse.Sample( samLinear, input.Tex ); +} + + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0_level_9_1, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0_level_9_1, PS() ) ); + } +} +// diff --git a/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/SciFiText.fxo b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/SciFiText.fxo new file mode 100644 index 00000000..012f67e2 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/SciFiText.fxo differ diff --git a/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/SciFiTextDemo.csproj b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/SciFiTextDemo.csproj new file mode 100644 index 00000000..ab816bde --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/SciFiTextDemo.csproj @@ -0,0 +1,117 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E} + WinExe + Properties + SciFiTextDemo + SciFiTextDemo + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + + 3.5 + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + Window1.xaml + Code + + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/SciFiTextDemo.sln b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/SciFiTextDemo.sln new file mode 100644 index 00000000..2da4aa98 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/SciFiTextDemo.sln @@ -0,0 +1,83 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SciFiTextDemo", "SciFiTextDemo.csproj", "{E11236F6-99D5-49BA-BB07-8E66C4F85D0E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Direct3DUtilities", "..\..\UtilitiesLibrary\D3DUtilities\Direct3DUtilities.csproj", "{8A152DCF-12AE-492B-9F24-060B90B2DDD0}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|Win32.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|x64.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|Any CPU.Build.0 = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|Win32.ActiveCfg = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|x64.ActiveCfg = Release|Any CPU + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.ActiveCfg = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.Build.0 = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.ActiveCfg = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.Build.0 = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.Build.0 = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.ActiveCfg = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.Build.0 = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Win32.ActiveCfg = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.ActiveCfg = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.Build.0 = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Win32.ActiveCfg = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.ActiveCfg = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Window1.xaml b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Window1.xaml new file mode 100644 index 00000000..810acf09 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Window1.xaml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Window1.xaml.cs b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Window1.xaml.cs new file mode 100644 index 00000000..27e79a4f --- /dev/null +++ b/source/Samples/DirectX/CS/Direct2D_3D/SciFiTextDemo/Window1.xaml.cs @@ -0,0 +1,619 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.IO; +using System.Runtime.InteropServices; +using System.Windows; + +using Microsoft.WindowsAPICodePack.DirectX; +using Microsoft.WindowsAPICodePack.DirectX.Direct2D1; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.DirectWrite; +using Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; + +using D3D10 = Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using DWrite = Microsoft.WindowsAPICodePack.DirectX.DirectWrite; + +namespace SciFiTextDemo +{ + /// + /// Interaction logic for Window1.xaml + /// + public partial class Window1 + { + object syncObject = new object(); + + string text = + "Episode CCCXLVII:\nA Misguided Hope\n\n" + + "Not so long ago, in a cubicle not so far away...\n\n" + + "It is days before milestone lockdown. A small group of rebel developers toil through the weekend, relentlessly fixing bugs in defiance of familial obligations. Aside from pride in their work, their only reward will be takeout food and cinema gift certificates.\n\n" + + "Powered by coffee and soda, our hyper-caffeinated heroine stares at her screen with glazed-over eyes. She repeatedly slaps her face in a feeble attempt to stay awake. Lapsing into micro-naps, she reluctantly takes a break from debugging to replenish her caffeine levels.\n\n" + + "On her way to the kitchen she spots a fallen comrade, passed out on his keyboard and snoring loudly. After downing two coffees, she fills a pitcher with ice water and..."; + + // The factories + D2DFactory d2DFactory; + DWriteFactory dWriteFactory; + + bool pause; + int lastSavedDelta; + + //Device-Dependent Resources + D3DDevice1 device; + SwapChain swapChain; + RasterizerState rasterizerState; + Texture2D depthStencil; + DepthStencilView depthStencilView; + RenderTargetView renderTargetView; + Texture2D offscreenTexture; + Effect shader; + D3DBuffer vertexBuffer; + InputLayout vertexLayout; + D3DBuffer facesIndexBuffer; + ShaderResourceView textureResourceView; + + RenderTarget renderTarget; + LinearGradientBrush textBrush; + + BitmapRenderTarget opacityRenderTarget; + bool isOpacityRTPopulated; + + EffectTechnique technique; + EffectMatrixVariable worldMatrixVariable; + EffectMatrixVariable viewMatrixVariable; + EffectMatrixVariable projectionMarixVariable; + EffectShaderResourceVariable diffuseVariable; + + // Device-Independent Resources + TextFormat textFormat; + + Matrix4x4F worldMatrix; + Matrix4x4F viewMatrix; + Matrix4x4F projectionMatrix; + + ColorRgba backColor = new ColorRgba(GetColorValues(System.Windows.Media.Colors.Black)); + + float currentTimeVariation; + int startTime = Environment.TickCount; + + InputElementDescription[] inputLayoutDescriptions = + { + new InputElementDescription + { + SemanticName = "POSITION", + SemanticIndex = 0, + Format = Format.R32G32B32Float, + InputSlot = 0, + AlignedByteOffset = 0, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0 + }, + new InputElementDescription + { + SemanticName = "TEXCOORD", + SemanticIndex = 0, + Format = Format.R32G32Float, + InputSlot = 0, + AlignedByteOffset = 12, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0 + } + }; + + VertexData VertexArray = new VertexData(); + + private static float[] GetColorValues(System.Windows.Media.Color color) + { + return new float[] { color.ScR, color.ScG, color.ScB, color.ScA }; + } + + public Window1() + { + InitializeComponent(); + textBox.Text = text; + host.Loaded += new RoutedEventHandler(host_Loaded); + host.SizeChanged += new SizeChangedEventHandler(host_SizeChanged); + } + + void host_SizeChanged(object sender, SizeChangedEventArgs e) + { + lock (syncObject) + { + if (device == null) + return; + uint nWidth = (uint)host.ActualWidth; + uint nHeight = (uint)host.ActualHeight; + + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { null }, null); + //need to remove the reference to the swapchain's backbuffer to enable ResizeBuffers() call + renderTargetView.Dispose(); + depthStencilView.Dispose(); + depthStencil.Dispose(); + + device.RS.Viewports = null; + + SwapChainDescription sd = swapChain.Description; + //Change the swap chain's back buffer size, format, and number of buffers + swapChain.ResizeBuffers( + sd.BufferCount, + nWidth, + nHeight, + sd.BufferDescription.Format, + sd.Options); + + using (Texture2D pBuffer = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView(pBuffer); + } + + InitializeDepthStencil(nWidth, nHeight); + + // bind the views to the device + device.OM.RenderTargets = new OutputMergerRenderTargets(new[] { renderTargetView }, depthStencilView); + + SetViewport(nWidth, nHeight); + + // update the aspect ratio + projectionMatrix = Camera.MatrixPerspectiveFovLH( + (float)Math.PI * 0.1f, // fovy + nWidth / (float)nHeight, // aspect + 0.1f, // zn + 100.0f // zf + ); + projectionMarixVariable.Matrix = projectionMatrix; + } + } + + void host_Loaded(object sender, RoutedEventArgs e) + { + CreateDeviceIndependentResources(); + startTime = Environment.TickCount; + host.Render = RenderScene; + } + + static Effect LoadResourceShader(D3DDevice device, string resourceName) + { + using (Stream stream = Application.ResourceAssembly.GetManifestResourceStream(resourceName)) + { + return device.CreateEffectFromCompiledBinary(stream); + } + } + + void CreateDeviceIndependentResources() + { + // Create a Direct2D factory. + d2DFactory = D2DFactory.CreateFactory(D2DFactoryType.SingleThreaded); + + // Create a DirectWrite factory. + dWriteFactory = DWriteFactory.CreateFactory(); + + // Create a DirectWrite text format object. + textFormat = dWriteFactory.CreateTextFormat("Calibri", 50, DWrite.FontWeight.Bold, DWrite.FontStyle.Normal, DWrite.FontStretch.Normal); + + // Center the text both horizontally and vertically. + textFormat.TextAlignment = DWrite.TextAlignment.Leading; + textFormat.ParagraphAlignment = ParagraphAlignment.Near; + } + + void CreateDeviceResources() + { + uint width = (uint) host.ActualWidth; + uint height = (uint) host.ActualHeight; + + // If we don't have a device, need to create one now and all + // accompanying D3D resources. + CreateDevice(); + + Factory dxgiFactory = Factory.Create(); + + SwapChainDescription swapDesc = new SwapChainDescription + { + BufferDescription = new ModeDescription + { + Width = width, Height = height, + Format = Format.R8G8B8A8UNorm, + RefreshRate = new Rational { Numerator = 60, Denominator = 1 } + }, + SampleDescription = new SampleDescription { Count = 1, Quality = 0 }, + BufferUsage = UsageOptions.RenderTargetOutput, + BufferCount = 1, + OutputWindowHandle = host.Handle, + Windowed = true + }; + + swapChain = dxgiFactory.CreateSwapChain( + device, swapDesc); + + // Create rasterizer state object + RasterizerDescription rsDesc = new RasterizerDescription(); + rsDesc.AntiAliasedLineEnable = false; + rsDesc.CullMode = CullMode.None; + rsDesc.DepthBias = 0; + rsDesc.DepthBiasClamp = 0; + rsDesc.DepthClipEnable = true; + rsDesc.FillMode = D3D10.FillMode.Solid; + rsDesc.FrontCounterclockwise = false; // Must be FALSE for 10on9 + rsDesc.MultisampleEnable = false; + rsDesc.ScissorEnable = false; + rsDesc.SlopeScaledDepthBias = 0; + + rasterizerState = device.CreateRasterizerState( + rsDesc); + + device.RS.State = rasterizerState; + + // If we don't have a D2D render target, need to create all of the resources + // required to render to one here. + // Ensure that nobody is holding onto one of the old resources + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] {null}); + + InitializeDepthStencil(width, height); + + // Create views on the RT buffers and set them on the device + RenderTargetViewDescription renderDesc = new RenderTargetViewDescription(); + renderDesc.Format = Format.R8G8B8A8UNorm; + renderDesc.ViewDimension = RenderTargetViewDimension.Texture2D; + + Texture2DRenderTargetView renderView = renderDesc.Texture2D; + renderView.MipSlice = 0; + renderDesc.Texture2D = renderView; + + using (D3DResource spBackBufferResource = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView( + spBackBufferResource, + renderDesc); + } + + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] {renderTargetView}, depthStencilView); + + SetViewport(width, height); + + + // Create a D2D render target which can draw into the surface in the swap chain + RenderTargetProperties props = + new RenderTargetProperties( + RenderTargetType.Default, new PixelFormat(Format.Unknown, AlphaMode.Premultiplied), + 96, 96, RenderTargetUsages.None, FeatureLevel.Default); + + // Allocate a offscreen D3D surface for D2D to render our 2D content into + Texture2DDescription tex2DDescription = new Texture2DDescription + { + ArraySize = 1, + BindingOptions = BindingOptions.RenderTarget | BindingOptions.ShaderResource, + CpuAccessOptions = CpuAccessOptions.None, + Format = Format.R8G8B8A8UNorm, + Height = 4096, + Width = 512, + MipLevels = 1, + MiscellaneousResourceOptions = MiscellaneousResourceOptions.None, + SampleDescription = new SampleDescription { Count = 1, Quality = 0 }, + Usage = Usage.Default + }; + + offscreenTexture = device.CreateTexture2D(tex2DDescription); + + using (Surface dxgiSurface = offscreenTexture.GraphicsSurface) + { + // Create a D2D render target which can draw into our offscreen D3D surface + renderTarget = d2DFactory.CreateGraphicsSurfaceRenderTarget( + dxgiSurface, + props); + } + + PixelFormat alphaOnlyFormat = new PixelFormat(Format.A8UNorm, AlphaMode.Premultiplied); + + opacityRenderTarget = renderTarget.CreateCompatibleRenderTarget(CompatibleRenderTargetOptions.None, + alphaOnlyFormat); + + // Load pixel shader + // Open precompiled vertex shader + // This file was compiled using DirectX's SDK Shader compilation tool: + // fxc.exe /T fx_4_0 /Fo SciFiText.fxo SciFiText.fx + shader = LoadResourceShader(device, "SciFiTextDemo.SciFiText.fxo"); + + // Obtain the technique + technique = shader.GetTechniqueByName("Render"); + + // Obtain the variables + worldMatrixVariable = shader.GetVariableByName("World").AsMatrix; + viewMatrixVariable = shader.GetVariableByName("View").AsMatrix; + projectionMarixVariable = shader.GetVariableByName("Projection").AsMatrix; + diffuseVariable = shader.GetVariableByName("txDiffuse").AsShaderResource; + + // Create the input layout + PassDescription passDesc = new PassDescription(); + passDesc = technique.GetPassByIndex(0).Description; + + vertexLayout = device.CreateInputLayout( + inputLayoutDescriptions, + passDesc.InputAssemblerInputSignature, + passDesc.InputAssemblerInputSignatureSize + ); + + // Set the input layout + device.IA.InputLayout = vertexLayout; + + IntPtr verticesDataPtr = Marshal.AllocHGlobal(Marshal.SizeOf(VertexArray.VerticesInstance)); + Marshal.StructureToPtr(VertexArray.VerticesInstance, verticesDataPtr, true); + + BufferDescription bd = new BufferDescription(); + bd.Usage = Usage.Default; + bd.ByteWidth = (uint) Marshal.SizeOf(VertexArray.VerticesInstance); + bd.BindingOptions = BindingOptions.VertexBuffer; + bd.CpuAccessOptions = CpuAccessOptions.None; + bd.MiscellaneousResourceOptions = MiscellaneousResourceOptions.None; + + SubresourceData InitData = new SubresourceData { SystemMemory = verticesDataPtr }; + + vertexBuffer = device.CreateBuffer(bd, InitData); + + Marshal.FreeHGlobal(verticesDataPtr); + + // Set vertex buffer + uint stride = (uint) Marshal.SizeOf(typeof (SimpleVertex)); + uint offset = 0; + + device.IA.SetVertexBuffers( + 0, + new D3DBuffer[] {vertexBuffer}, + new uint[] {stride}, + new uint[] {offset} + ); + + IntPtr indicesDataPtr = Marshal.AllocHGlobal(Marshal.SizeOf(VertexArray.IndicesInstance)); + Marshal.StructureToPtr(VertexArray.IndicesInstance, indicesDataPtr, true); + + bd.Usage = Usage.Default; + bd.ByteWidth = (uint) Marshal.SizeOf(VertexArray.IndicesInstance); + bd.BindingOptions = BindingOptions.IndexBuffer; + bd.CpuAccessOptions = CpuAccessOptions.None; + bd.MiscellaneousResourceOptions = MiscellaneousResourceOptions.None; + + InitData.SystemMemory = indicesDataPtr; + + facesIndexBuffer = device.CreateBuffer( + bd, + InitData + ); + + Marshal.FreeHGlobal(indicesDataPtr); + + // Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList; + + // Convert the D2D texture into a Shader Resource View + textureResourceView = device.CreateShaderResourceView( + offscreenTexture); + + // Initialize the world matrices + worldMatrix = Matrix4x4F.Identity; + + // Initialize the view matrix + Vector3F Eye = new Vector3F(0.0f, 0.0f, 13.0f); + Vector3F At = new Vector3F(0.0f, -3.5f, 45.0f); + Vector3F Up = new Vector3F(0.0f, 1.0f, 0.0f); + + viewMatrix = Camera.MatrixLookAtLH(Eye, At, Up); + + // Initialize the projection matrix + projectionMatrix = Camera.MatrixPerspectiveFovLH( + (float) Math.PI*0.1f, + width/(float) height, + 0.1f, + 100.0f); + + // Update Variables that never change + viewMatrixVariable.Matrix = viewMatrix; + + projectionMarixVariable.Matrix = projectionMatrix; + + GradientStop[] gradientStops = + { + new GradientStop(0.0f, new ColorF(GetColorValues(System.Windows.Media.Colors.Yellow))), + new GradientStop(1.0f, new ColorF(GetColorValues(System.Windows.Media.Colors.Black))) + }; + + GradientStopCollection spGradientStopCollection = renderTarget.CreateGradientStopCollection( + gradientStops, Gamma.StandardRgb, ExtendMode.Clamp); + + // Create a linear gradient brush for text + textBrush = renderTarget.CreateLinearGradientBrush( + new LinearGradientBrushProperties(new Point2F(0, 0), new Point2F(0, -2048)), + spGradientStopCollection + ); + } + + private void CreateDevice() + { + try + { + // Create device + device = D3DDevice1.CreateDevice1( + null, + DriverType.Hardware, + null, + CreateDeviceOptions.SupportBgra, + FeatureLevel.Ten); + } + catch (Exception) + { + // if we can't create a hardware device, + // try the warp one + } + if (device == null) + { + device = D3DDevice1.CreateDevice1( + null, + DriverType.Software, + "d3d10warp.dll", + CreateDeviceOptions.SupportBgra, + FeatureLevel.Ten); + } + } + + void RenderScene() + { + lock (syncObject) + { + if (device == null) + CreateDeviceResources(); + + if (!pause) + { + if (lastSavedDelta != 0) + { + startTime = Environment.TickCount - lastSavedDelta; + lastSavedDelta = 0; + } + currentTimeVariation = (Environment.TickCount - startTime)/6000.0f; + worldMatrix = MatrixMath.MatrixTranslate(0, 0, currentTimeVariation); + textBrush.Transform = Matrix3x2F.Translation(0, (4096f/16f)*currentTimeVariation); + } + + device.ClearDepthStencilView( + depthStencilView, + ClearOptions.Depth, + 1, + 0 + ); + + // Clear the back buffer + device.ClearRenderTargetView(renderTargetView, backColor); + + diffuseVariable.Resource = null; + + technique.GetPassByIndex(0).Apply(); + + // Draw the D2D content into our D3D surface + RenderD2DContentIntoSurface(); + + diffuseVariable.Resource = textureResourceView; + + // Update variables + worldMatrixVariable.Matrix = worldMatrix; + + // Set index buffer + device.IA.IndexBuffer = new IndexBuffer(facesIndexBuffer, Format.R16UInt, 0); + + // Draw the scene + technique.GetPassByIndex(0).Apply(); + + device.DrawIndexed((uint) Marshal.SizeOf(VertexArray.VerticesInstance), 0, 0); + + swapChain.Present(0, Microsoft.WindowsAPICodePack.DirectX.Graphics.PresentOptions.None); + } + } + + void RenderD2DContentIntoSurface() + { + SizeF rtSize = renderTarget.Size; + + renderTarget.BeginDraw(); + + if (!isOpacityRTPopulated) + { + opacityRenderTarget.BeginDraw(); + + opacityRenderTarget.Transform = Matrix3x2F.Identity; + + opacityRenderTarget.Clear(new ColorF(GetColorValues(System.Windows.Media.Colors.Black), 0)); + + opacityRenderTarget.DrawText( + text, + textFormat, + new RectF( + 0, + 0, + rtSize.Width, + rtSize.Height + ), + textBrush + ); + + opacityRenderTarget.EndDraw(); + + isOpacityRTPopulated = true; + } + + renderTarget.Clear(new ColorF(GetColorValues(System.Windows.Media.Colors.Black))); + + renderTarget.AntiAliasMode = AntiAliasMode.Aliased; + + D2DBitmap spBitmap = opacityRenderTarget.Bitmap; + + renderTarget.FillOpacityMask( + spBitmap, + textBrush, + OpacityMaskContent.TextNatural, + new RectF(0, 0, rtSize.Width, rtSize.Height), + new RectF(0, 0, rtSize.Width, rtSize.Height) + ); + + renderTarget.EndDraw(); + } + + #region InitializeDepthStencil() + private void InitializeDepthStencil(uint nWidth, uint nHeight) + { + // Create depth stencil texture + Texture2DDescription descDepth = new Texture2DDescription() + { + Width = nWidth, Height = nHeight, + MipLevels = 1, + ArraySize = 1, + Format = Format.D16UNorm, + SampleDescription = new SampleDescription { Count = 1, Quality = 0 }, + BindingOptions = BindingOptions.DepthStencil, + }; + depthStencil = device.CreateTexture2D(descDepth); + + // Create the depth stencil view + DepthStencilViewDescription depthStencilViewDesc = new DepthStencilViewDescription() + { + Format = descDepth.Format, + ViewDimension = + DepthStencilViewDimension. + Texture2D + }; + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc); + } + #endregion + + #region SetViewport() + private void SetViewport(uint nWidth, uint nHeight) + { + Viewport viewport = new Viewport + { + Width = nWidth, + Height = nHeight, + TopLeftX = 0, + TopLeftY = 0, + MinDepth = 0, + MaxDepth = 1 + }; + device.RS.Viewports = new[] { viewport }; + } + #endregion + + private void Button_Click(object sender, RoutedEventArgs e) + { + pause = !pause; + + if (pause) + { + lastSavedDelta = Environment.TickCount - startTime; + actionText.Text = "Resume Text"; + } + else + actionText.Text = "Pause Text"; + } + + private void textBox_TextChanged(object sender, System.Windows.Controls.TextChangedEventArgs e) + { + text = textBox.Text; + isOpacityRTPopulated = false; + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/MeshBrowser.csproj b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/MeshBrowser.csproj new file mode 100644 index 00000000..b59c939c --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/MeshBrowser.csproj @@ -0,0 +1,126 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3} + WinExe + Properties + MeshBrowser + MeshBrowser + v3.5 + 512 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + 3.0 + + + + 3.5 + + + + 3.5 + + + + + + 3.5 + + + 3.0 + + + + + Form + + + MeshBrowserForm.cs + + + + + MeshBrowserForm.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {453FF234-24EC-4CC3-83DA-6D6C54388899} + Microsoft.WindowsAPICodePack.DirectX.Direct3DX10 + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + {B28ADA8B-BD7E-4C11-8298-C39F7C456365} + MeshLoader + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/MeshBrowser.sln b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/MeshBrowser.sln new file mode 100644 index 00000000..f53709b9 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/MeshBrowser.sln @@ -0,0 +1,122 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeshBrowser", "MeshBrowser.csproj", "{9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{6849EEC3-D88D-4E81-B2C1-8F7196A050F5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX.Direct3DX10", "..\..\..\UtilitiesLibrary\D3DX10Helpers\Direct3DX10.vcproj", "{453FF234-24EC-4CC3-83DA-6D6C54388899}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Direct3DUtilities", "..\..\UtilitiesLibrary\D3DUtilities\Direct3DUtilities.csproj", "{8A152DCF-12AE-492B-9F24-060B90B2DDD0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeshLoader", "..\..\UtilitiesLibrary\MeshLoader\MeshLoader.csproj", "{B28ADA8B-BD7E-4C11-8298-C39F7C456365}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|Win32.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|x64.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|Any CPU.Build.0 = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|Win32.ActiveCfg = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|x64.ActiveCfg = Release|Any CPU + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.ActiveCfg = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.Build.0 = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.ActiveCfg = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.Build.0 = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.Build.0 = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.ActiveCfg = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.Build.0 = Release|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Win32.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Win32.Build.0 = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|x64.ActiveCfg = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|x64.Build.0 = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Any CPU.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Mixed Platforms.Build.0 = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Win32.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Win32.Build.0 = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|x64.ActiveCfg = Release|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|x64.Build.0 = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Win32.ActiveCfg = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.ActiveCfg = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.Build.0 = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Win32.ActiveCfg = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.ActiveCfg = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.Build.0 = Release|x64 + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Win32.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|x64.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Any CPU.Build.0 = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Win32.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|x64.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} = {6849EEC3-D88D-4E81-B2C1-8F7196A050F5} + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} = {6849EEC3-D88D-4E81-B2C1-8F7196A050F5} + {453FF234-24EC-4CC3-83DA-6D6C54388899} = {6849EEC3-D88D-4E81-B2C1-8F7196A050F5} + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} = {6849EEC3-D88D-4E81-B2C1-8F7196A050F5} + {B28ADA8B-BD7E-4C11-8298-C39F7C456365} = {6849EEC3-D88D-4E81-B2C1-8F7196A050F5} + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/MeshBrowserForm.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/MeshBrowserForm.Designer.cs new file mode 100644 index 00000000..0371d001 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/MeshBrowserForm.Designer.cs @@ -0,0 +1,246 @@ +namespace MeshBrowser +{ + partial class MeshBrowserForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.directControl = new Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl(); + this.buttonOpen = new System.Windows.Forms.Button(); + this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.cbRotate = new System.Windows.Forms.CheckBox(); + this.cbWireframe = new System.Windows.Forms.CheckBox(); + this.buttonScanDXSDK = new System.Windows.Forms.Button(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.listBoxValid = new System.Windows.Forms.ListBox(); + this.label1 = new System.Windows.Forms.Label(); + this.listBoxInvalid = new System.Windows.Forms.ListBox(); + this.label2 = new System.Windows.Forms.Label(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.SuspendLayout(); + // + // directControl + // + this.directControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.directControl.Location = new System.Drawing.Point(3, 3); + this.directControl.Name = "directControl"; + this.directControl.Size = new System.Drawing.Size(640, 480); + this.directControl.TabIndex = 4; + this.directControl.MouseMove += new System.Windows.Forms.MouseEventHandler(this.directControl_MouseMove); + this.directControl.MouseDown += new System.Windows.Forms.MouseEventHandler(this.directControl_MouseDown); + this.directControl.MouseUp += new System.Windows.Forms.MouseEventHandler(this.directControl_MouseUp); + this.directControl.SizeChanged += new System.EventHandler(this.directControl_SizeChanged); + // + // buttonOpen + // + this.buttonOpen.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonOpen.Location = new System.Drawing.Point(12, 489); + this.buttonOpen.Name = "buttonOpen"; + this.buttonOpen.Size = new System.Drawing.Size(75, 23); + this.buttonOpen.TabIndex = 5; + this.buttonOpen.Text = "&Open"; + this.buttonOpen.UseVisualStyleBackColor = true; + this.buttonOpen.Click += new System.EventHandler(this.buttonOpen_Click); + // + // openFileDialog1 + // + this.openFileDialog1.FileName = "openFileDialog1"; + this.openFileDialog1.Filter = ".x files|*.x|All files|*.*"; + this.openFileDialog1.RestoreDirectory = true; + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.cbRotate); + this.splitContainer1.Panel1.Controls.Add(this.cbWireframe); + this.splitContainer1.Panel1.Controls.Add(this.buttonScanDXSDK); + this.splitContainer1.Panel1.Controls.Add(this.buttonOpen); + this.splitContainer1.Panel1.Controls.Add(this.directControl); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(838, 522); + this.splitContainer1.SplitterDistance = 645; + this.splitContainer1.TabIndex = 6; + // + // cbRotate + // + this.cbRotate.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.cbRotate.AutoSize = true; + this.cbRotate.Checked = true; + this.cbRotate.CheckState = System.Windows.Forms.CheckState.Checked; + this.cbRotate.Location = new System.Drawing.Point(324, 493); + this.cbRotate.Name = "cbRotate"; + this.cbRotate.Size = new System.Drawing.Size(58, 17); + this.cbRotate.TabIndex = 7; + this.cbRotate.Text = "Rotate"; + this.cbRotate.UseVisualStyleBackColor = true; + this.cbRotate.CheckedChanged += new System.EventHandler(this.cbWireframe_CheckedChanged); + // + // cbWireframe + // + this.cbWireframe.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.cbWireframe.AutoSize = true; + this.cbWireframe.Location = new System.Drawing.Point(244, 493); + this.cbWireframe.Name = "cbWireframe"; + this.cbWireframe.Size = new System.Drawing.Size(74, 17); + this.cbWireframe.TabIndex = 7; + this.cbWireframe.Text = "Wireframe"; + this.cbWireframe.UseVisualStyleBackColor = true; + this.cbWireframe.CheckedChanged += new System.EventHandler(this.cbWireframe_CheckedChanged); + // + // buttonScanDXSDK + // + this.buttonScanDXSDK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonScanDXSDK.Location = new System.Drawing.Point(93, 489); + this.buttonScanDXSDK.Name = "buttonScanDXSDK"; + this.buttonScanDXSDK.Size = new System.Drawing.Size(145, 23); + this.buttonScanDXSDK.TabIndex = 6; + this.buttonScanDXSDK.Text = "Scan DX SDK Samples"; + this.buttonScanDXSDK.UseVisualStyleBackColor = true; + this.buttonScanDXSDK.Click += new System.EventHandler(this.buttonScanDXSDK_Click); + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.listBoxValid); + this.splitContainer2.Panel1.Controls.Add(this.label1); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.listBoxInvalid); + this.splitContainer2.Panel2.Controls.Add(this.label2); + this.splitContainer2.Size = new System.Drawing.Size(189, 522); + this.splitContainer2.SplitterDistance = 357; + this.splitContainer2.TabIndex = 0; + // + // listBoxValid + // + this.listBoxValid.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxValid.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.listBoxValid.FormattingEnabled = true; + this.listBoxValid.HorizontalScrollbar = true; + this.listBoxValid.IntegralHeight = false; + this.listBoxValid.Location = new System.Drawing.Point(0, 13); + this.listBoxValid.Name = "listBoxValid"; + this.listBoxValid.Size = new System.Drawing.Size(189, 344); + this.listBoxValid.TabIndex = 1; + this.listBoxValid.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox_DrawItem); + this.listBoxValid.SelectedIndexChanged += new System.EventHandler(this.listBoxValid_SelectedIndexChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Dock = System.Windows.Forms.DockStyle.Top; + this.label1.Location = new System.Drawing.Point(0, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(51, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Valid files"; + // + // listBoxInvalid + // + this.listBoxInvalid.Dock = System.Windows.Forms.DockStyle.Fill; + this.listBoxInvalid.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed; + this.listBoxInvalid.FormattingEnabled = true; + this.listBoxInvalid.HorizontalScrollbar = true; + this.listBoxInvalid.IntegralHeight = false; + this.listBoxInvalid.Location = new System.Drawing.Point(0, 13); + this.listBoxInvalid.Name = "listBoxInvalid"; + this.listBoxInvalid.Size = new System.Drawing.Size(189, 148); + this.listBoxInvalid.TabIndex = 1; + this.listBoxInvalid.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox_DrawItem); + this.listBoxInvalid.SelectedIndexChanged += new System.EventHandler(this.listBoxInvalid_SelectedIndexChanged); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Dock = System.Windows.Forms.DockStyle.Top; + this.label2.Location = new System.Drawing.Point(0, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(59, 13); + this.label2.TabIndex = 0; + this.label2.Text = "Invalid files"; + // + // MeshBrowserForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(838, 522); + this.Controls.Add(this.splitContainer1); + this.Name = "MeshBrowserForm"; + this.Text = "Mesh Browser"; + this.Load += new System.EventHandler(this.Window_Load); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel1.PerformLayout(); + this.splitContainer2.Panel2.ResumeLayout(false); + this.splitContainer2.Panel2.PerformLayout(); + this.splitContainer2.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl directControl; + private System.Windows.Forms.Button buttonOpen; + private System.Windows.Forms.OpenFileDialog openFileDialog1; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.ListBox listBoxValid; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ListBox listBoxInvalid; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button buttonScanDXSDK; + private System.Windows.Forms.CheckBox cbWireframe; + private System.Windows.Forms.CheckBox cbRotate; + } +} \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/MeshBrowserForm.cs b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/MeshBrowserForm.cs new file mode 100644 index 00000000..fbd82dac --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/MeshBrowserForm.cs @@ -0,0 +1,508 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.IO; +using System.Linq; +using System.Xml.Linq; +using System.Xml.XPath; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; +using Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; +using dxUtil = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; + +namespace MeshBrowser +{ + /// + /// This application demonstrates how to use the library to implement a useful utility application + /// + /// Copyright (c) Microsoft Corporation. All rights reserved. + /// + public partial class MeshBrowserForm : Form + { + #region Fields + D3DDevice device; + SwapChain swapChain; + RenderTargetView renderTargetView; + Texture2D depthStencil; + DepthStencilView depthStencilView; + ColorRgba backColor = new ColorRgba ( 0.0F, 0.125F, 0.3F, 1.0F ); + + XMesh mesh; + XMeshManager meshManager; + + Matrix4x4F worldMatrix = Matrix4x4F.Identity; + XDocument knownFiles; + int dwLastTime = Environment.TickCount; + + bool isDrag = false; + System.Drawing.Point lastLocation = new System.Drawing.Point(int.MaxValue, int.MaxValue); + System.Drawing.Brush myBrush; + private object meshLock = new object(); + bool needsResizing; + #endregion + + #region MeshBrowserForm() + /// + /// Initializes a new instance of the class. + /// + public MeshBrowserForm() + { + InitializeComponent(); + } + #endregion + + #region Window_Load() + private void Window_Load(object sender, EventArgs e) + { + myBrush = new System.Drawing.SolidBrush(listBoxValid.ForeColor); + InitDevice(); + directControl.Render = this.RenderScene; + string dxsdkdir = Environment.GetEnvironmentVariable("DXSDK_DIR"); + if (!string.IsNullOrEmpty(dxsdkdir)) + openFileDialog1.InitialDirectory = System.IO.Path.Combine(dxsdkdir, "Samples\\Media"); + if (File.Exists("knownFiles.xml")) + LoadKnown(); + else + { + knownFiles = new XDocument( + new XElement("KnownFiles", + new XElement("Valid"), + new XElement("Invalid"))); + SaveKnown(); + } + } + #endregion + + #region directControl_SizeChanged() + private void directControl_SizeChanged(object sender, EventArgs e) + { + needsResizing = true; + } + #endregion + + #region InitDevice() + /// + /// Create Direct3D device and swap chain + /// + protected void InitDevice() + { + device = D3DDevice.CreateDeviceAndSwapChain(directControl.Handle); + swapChain = device.SwapChain; + + SetViews(); + + meshManager = new XMeshManager(device); + + InitMatrices(); + } + #endregion + + #region SetViews() + private void SetViews() + { + // Create a render target view + using (Texture2D pBuffer = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView(pBuffer); + } + + // Create depth stencil texture + Texture2DDescription descDepth = new Texture2DDescription() + { + Width = (uint)directControl.ClientSize.Width, + Height = (uint)directControl.ClientSize.Height, + MipLevels = 1, + ArraySize = 1, + Format = Format.D32Float, + SampleDescription = new SampleDescription() + { + Count = 1, + Quality = 0 + }, + BindingOptions = BindingOptions.DepthStencil, + }; + + depthStencil = device.CreateTexture2D(descDepth); + + // Create the depth stencil view + DepthStencilViewDescription depthStencilViewDesc = new DepthStencilViewDescription() + { + Format = descDepth.Format, + ViewDimension = DepthStencilViewDimension.Texture2D + }; + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc); + + //bind the views to the device + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { renderTargetView }, depthStencilView); + + // Setup the viewport + Viewport vp = new Viewport() + { + Width = (uint)directControl.ClientSize.Width, + Height = (uint)directControl.ClientSize.Height, + MinDepth = 0.0f, + MaxDepth = 1.0f, + TopLeftX = 0, + TopLeftY = 0 + }; + + device.RS.Viewports = new Viewport[] { vp }; + } + #endregion + + #region InitMatrices() + private void InitMatrices() + { + // Initialize the view matrix + Vector3F Eye = new Vector3F(0.0f, 3.0f, -15.0f); + Vector3F At = new Vector3F(0.0f, 0.0f, 0.0f); + Vector3F Up = new Vector3F(0.0f, 1.0f, 0.0f); + + Matrix4x4F viewMatrix; + Matrix4x4F projectionMatrix; + viewMatrix = dxUtil.Camera.MatrixLookAtLH(Eye, At, Up); + + // Initialize the projection matrix + projectionMatrix = dxUtil.Camera.MatrixPerspectiveFovLH( + (float)Math.PI * 0.25f, + (float)directControl.ClientSize.Width / (float)directControl.ClientSize.Height, + 0.5f, 1000.0f); + + meshManager.SetViewAndProjection( viewMatrix, projectionMatrix ); + } + #endregion + + #region RenderScene() + /// + /// Render the frame + /// + protected void RenderScene() + { + if (needsResizing) + { + needsResizing = false; + renderTargetView.Dispose(); + SwapChainDescription sd = swapChain.Description; + swapChain.ResizeBuffers( + sd.BufferCount, + (uint)directControl.ClientSize.Width, + (uint)directControl.ClientSize.Height, + sd.BufferDescription.Format, + sd.Options); + SetViews(); + // Update the projection matrix + InitMatrices(); + } + int dwCurrentTime = Environment.TickCount; + float t = (dwCurrentTime - dwLastTime) / 1000f; + dwLastTime = dwCurrentTime; + + // Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor); + + // Clear the depth buffer to 1.0 (max depth) + device.ClearDepthStencilView(depthStencilView, ClearOptions.Depth, 1.0f, (byte)0); + + lock (meshLock) + { + if (mesh != null) + { + if (cbRotate.Checked) + worldMatrix *= MatrixMath.MatrixRotationY(-t); + mesh.Render(worldMatrix); + } + } + + Microsoft.WindowsAPICodePack.DirectX.ErrorCode error; + swapChain.TryPresent(1, PresentOptions.None, out error); + } + #endregion + + #region Mesh loading + #region LoadMeshAndUpdateKnownFiles() + private void LoadMeshAndUpdateKnownFiles(string filename) + { + LoadMeshAndUpdateKnownFiles(filename, true); + } + + private void LoadMeshAndUpdateKnownFiles(string filename, bool showException) + { + try + { + LoadMesh(filename); + MarkFileValid(filename); + } + catch (Exception ex) + { + if (showException) + ShowTextInDialog(ex.ToString(), "Could not load mesh"); + MarkFileInvalid(filename); + } + } + #endregion + + #region LoadMesh() + private void LoadMesh(string filename) + { + lock (meshLock) + { + if (mesh != null) + { + mesh.Dispose(); + mesh = null; + } + + worldMatrix = Matrix4x4F.Identity; + + XMesh meshT = meshManager.Open(filename); + + meshT.ShowWireFrame = cbWireframe.Checked; + + mesh = meshT; + }; + } + #endregion + #endregion + + #region Known files list handling + #region MarkFileValid() + private void MarkFileValid(string filename) + { + var q1 = knownFiles.Root.XPathSelectElements("./Invalid/File") + .Where(file => (string)file.Attribute("path") == filename); + + if (q1.Count() > 0) + { + q1.Remove(); + } + + var q2 = knownFiles.Root.XPathSelectElements("./Valid/File") + .Where(file => (string)file.Attribute("path") == filename); + + if (q2.Count() == 0) + { + knownFiles.Root.XPathSelectElement("./Valid").Add( + new XElement("File", + new XAttribute("path", filename))); + } + + knownFiles.Save("knownFiles.xml"); + + if (!listBoxValid.Items.Contains(filename)) + listBoxValid.Items.Add(filename); + if (listBoxInvalid.Items.Contains(filename)) + listBoxInvalid.Items.Remove(filename); + } + #endregion + + #region MarkFileInvalid() + private void MarkFileInvalid(string filename) + { + var q1 = knownFiles.Root.XPathSelectElements("./Valid/File") + .Where(file => (string)file.Attribute("path") == filename); + + if (q1.Count() > 0) + { + q1.Remove(); + } + + var q2 = knownFiles.Root.XPathSelectElements("./Invalid/File") + .Where(file => (string)file.Attribute("path") == filename); + + if (q2.Count() == 0) + { + knownFiles.Root.XPathSelectElement("./Invalid").Add( + new XElement("File", + new XAttribute("path", filename))); + } + + knownFiles.Save("knownFiles.xml"); + + if (!listBoxInvalid.Items.Contains(filename)) + listBoxInvalid.Items.Add(filename); + if (listBoxValid.Items.Contains(filename)) + listBoxValid.Items.Remove(filename); + } + #endregion + + #region SaveKnown() + private void SaveKnown() + { + knownFiles.Save("knownFiles.xml"); + } + #endregion + + #region LoadKnown() + private void LoadKnown() + { + knownFiles = XDocument.Load("knownFiles.xml"); + listBoxInvalid.Items.Clear(); + listBoxValid.Items.Clear(); + foreach (XElement file in knownFiles.Root.XPathSelectElements("./Invalid/File")) + listBoxInvalid.Items.Add(file.Attribute("path").Value); + foreach (XElement file in knownFiles.Root.XPathSelectElements("./Valid/File")) + listBoxValid.Items.Add(file.Attribute("path").Value); + } + #endregion + #endregion + + #region event handlers + #region Mesh loading events + #region buttonOpen_Click() + private void buttonOpen_Click(object sender, EventArgs e) + { + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + LoadMeshAndUpdateKnownFiles(openFileDialog1.FileName); + } + } + #endregion + + #region buttonScanDXSDK_Click() + private void buttonScanDXSDK_Click(object sender, EventArgs e) + { + string dxsdkdir = Environment.GetEnvironmentVariable("DXSDK_DIR"); + if (string.IsNullOrEmpty(dxsdkdir)) + { + buttonScanDXSDK.Enabled = false; + MessageBox.Show("DirectX SDK not installed or environment variable DXSDK_DIR not set"); + } + else + { + string[] files = Directory.GetFiles(System.IO.Path.Combine(dxsdkdir, "Samples\\Media"), "*.x", SearchOption.AllDirectories); + foreach (string file in files) + LoadMeshAndUpdateKnownFiles(file, false); + } + } + #endregion + + #region listBoxValid_SelectedIndexChanged() + private void listBoxValid_SelectedIndexChanged(object sender, EventArgs e) + { + if (listBoxValid.SelectedIndex != -1) + { + LoadMeshAndUpdateKnownFiles(listBoxValid.SelectedItem.ToString()); + listBoxInvalid.SelectedIndex = -1; + } + } + #endregion + + #region listBoxInvalid_SelectedIndexChanged() + private void listBoxInvalid_SelectedIndexChanged(object sender, EventArgs e) + { + if (listBoxInvalid.SelectedIndex != -1) + { + LoadMeshAndUpdateKnownFiles(listBoxInvalid.SelectedItem.ToString()); + listBoxValid.SelectedIndex = -1; + } + } + #endregion + #endregion + + #region Camera operation events + #region directControl_MouseUp() + private void directControl_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + isDrag = true; + lastLocation = e.Location; + } + } + #endregion + + #region directControl_MouseUp() + private void directControl_MouseUp(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + isDrag = false; + } + } + #endregion + + #region directControl_MouseMove() + private void directControl_MouseMove(object sender, MouseEventArgs e) + { + if (isDrag) + { + worldMatrix *= MatrixMath.MatrixRotationX(0.01f * (lastLocation.Y - e.Y)); + worldMatrix *= MatrixMath.MatrixRotationY( 0.01f * (lastLocation.X - e.X) ); + lastLocation = e.Location; + cbRotate.Checked = false; + } + } + #endregion + + #region OnMouseWheel() + protected override void OnMouseWheel(MouseEventArgs e) + { + base.OnMouseWheel(e); + if (e.Delta != 0) + { + float scale; + if (e.Delta > 0) + scale = (0.01f * e.Delta); + else + scale = -100f / e.Delta; + worldMatrix *= MatrixMath.MatrixScale( scale, scale, scale ); + } + } + #endregion + #endregion + + #region listBox_DrawItem() + /// + /// Handles the DrawItem event of the listBox control. + /// Displays file names only instead of full file paths for known meshes. + /// + /// The source of the event. + /// The instance containing the event data. + private void listBox_DrawItem(object sender, DrawItemEventArgs e) + { + ListBox lb = sender as ListBox; + e.DrawBackground(); + e.Graphics.DrawString(Path.GetFileName((string)lb.Items[e.Index]), + e.Font, myBrush, e.Bounds, System.Drawing.StringFormat.GenericDefault); + e.DrawFocusRectangle(); + } + #endregion + + #region cbWireframe_CheckedChanged() + private void cbWireframe_CheckedChanged(object sender, EventArgs e) + { + lock (meshLock) + { + if (mesh != null) + mesh.ShowWireFrame = cbWireframe.Checked; + } + } + #endregion + #endregion + + #region ShowTextInDialog() + public static Form ShowTextInDialog(string text, string caption) + { + Form form = new Form() + { + WindowState = FormWindowState.Maximized, + Text = caption + }; + TextBox box = new TextBox() + { + Dock = DockStyle.Fill, + AcceptsReturn = true, + AcceptsTab = true, + Multiline = true, + Parent = form, + Text = text, + ScrollBars = ScrollBars.Both + }; + form.ShowDialog(); + return form; + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/MeshBrowserForm.resx b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/MeshBrowserForm.resx new file mode 100644 index 00000000..6e58fa8e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/MeshBrowserForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/Program.cs b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/Program.cs new file mode 100644 index 00000000..cda3e7cc --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/Program.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; + +namespace MeshBrowser +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new MeshBrowserForm()); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..41d0f182 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("MeshBrowser")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c4d21605-d6db-4779-a72c-4cca985fa5cf")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/Properties/Resources.Designer.cs new file mode 100644 index 00000000..ad53ee33 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MeshBrowser.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("D3D10Tutorial09_WinFormsControl.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/Properties/Settings.Designer.cs new file mode 100644 index 00000000..41352ad7 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace MeshBrowser.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/directx.ico b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/MeshBrowser/directx.ico differ diff --git a/source/Samples/DirectX/CS/Direct3D10/TextureSwap/App.xaml b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/App.xaml new file mode 100644 index 00000000..5b45c411 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/App.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D10/TextureSwap/App.xaml.cs b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/App.xaml.cs new file mode 100644 index 00000000..de74f428 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/App.xaml.cs @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Windows; + +namespace TextureSwap +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..ffc2837c --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Properties/AssemblyInfo.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle( "TextureSwap" )] +[assembly: AssemblyDescription( "" )] +[assembly: AssemblyConfiguration( "" )] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark( "" )] +[assembly: AssemblyCulture( "" )] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible( false )] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion( "1.0.0.0" )] +[assembly: AssemblyFileVersion( "1.0.0.0" )] diff --git a/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Properties/Resources.Designer.cs new file mode 100644 index 00000000..de8fe6c9 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace TextureSwap.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute( "System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0" )] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute( )] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute( )] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute( "Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode" )] + internal Resources( ) + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute( global::System.ComponentModel.EditorBrowsableState.Advanced )] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if( (resourceMan == null) ) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager( "TextureSwap.Properties.Resources", typeof( Resources ).Assembly ); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute( global::System.ComponentModel.EditorBrowsableState.Advanced )] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Properties/Settings.Designer.cs new file mode 100644 index 00000000..68f8ea15 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace TextureSwap.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute( )] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute( "Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0" )] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized( new Settings( ) ))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Resources/airplane 2.x b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Resources/airplane 2.x new file mode 100644 index 00000000..bc61ddda --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Resources/airplane 2.x @@ -0,0 +1,7084 @@ +xof 0303txt 0032 +template VertexDuplicationIndices { + + DWORD nIndices; + DWORD nOriginalVertices; + array DWORD indices[nIndices]; +} + +template FVFData { + + DWORD dwFVF; + DWORD nDWords; + array DWORD data[nDWords]; +} + +template EffectFloats { + + DWORD nFloats; + array FLOAT Floats[nFloats]; +} + +template EffectString { + + STRING Value; +} + +template EffectDWord { + <622c0ed0-956e-4da9-908a-2af94f3ce716> + DWORD Value; +} + +template EffectInstance { + + STRING EffectFilename; + [...] +} + +template AnimTicksPerSecond { + <9e415a43-7ba6-4a73-8743-b73d47e88476> + DWORD AnimTicksPerSecond; +} + +template VertexElement { + + DWORD Type; + DWORD Method; + DWORD Usage; + DWORD UsageIndex; +} + +template DeclData { + + DWORD nElements; + array VertexElement Elements[nElements]; + DWORD nDWords; + array DWORD data[nDWords]; +} + + +Frame SCENE_ROOT { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; + } + + Frame airplane_b { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; + } + + Mesh { + 245; + 0.350782;0.134766;-3.705020;, + -0.299976;0.134766;-3.705020;, + 0.350782;0.562877;-3.586500;, + -0.299976;0.562877;-3.586500;, + 0.435276;0.357646;-2.367070;, + -0.384470;0.357646;-2.367070;, + 0.390268;-0.269818;-2.919710;, + -0.339463;-0.269818;-2.919710;, + -0.226041;0.540056;-2.367070;, + 0.276847;0.540056;-2.367070;, + 0.438828;0.349993;-2.075790;, + 0.253892;0.646877;-2.075800;, + -0.203087;0.646877;-2.075800;, + -0.388023;0.349993;-2.075790;, + -0.380393;-0.399859;-2.164040;, + 0.431218;-0.400603;-2.164040;, + 0.417014;0.254447;-0.762626;, + 0.247847;0.503541;-0.762633;, + -0.197042;0.503541;-0.762633;, + -0.366208;0.254448;-0.762626;, + -0.375042;-0.511327;-1.030540;, + 0.425848;-0.511328;-1.030540;, + 0.127371;0.058052;2.965310;, + -0.076567;0.058052;2.965310;, + -0.076567;-0.267921;2.965320;, + 0.127371;-0.267921;2.965320;, + -0.377115;0.302220;-1.419208;, + -0.200065;0.575209;-1.419217;, + 0.250870;0.575209;-1.419217;, + 0.427921;0.302220;-1.419208;, + 0.208380;0.642622;-2.036815;, + -0.157575;0.642622;-2.036815;, + -0.155154;0.579488;-1.441064;, + 0.205959;0.579488;-1.441064;, + 0.205959;0.570954;-1.397582;, + -0.155154;0.570954;-1.397582;, + -0.152734;0.507819;-0.801831;, + 0.203539;0.507819;-0.801831;, + 0.356128;-0.048342;-2.036815;, + -0.305322;-0.048342;-2.036815;, + -0.305322;-0.104661;-1.441064;, + 0.356128;-0.104661;-1.441064;, + 0.356128;-0.113195;-1.397582;, + -0.305322;-0.113195;-1.397582;, + -0.305322;-0.176329;-0.780043;, + 0.356128;-0.176329;-0.780043;, + 0.356128;-0.267741;-1.908320;, + -0.305322;-0.267741;-1.908320;, + -0.305322;-0.296094;-1.608397;, + 0.356128;-0.296094;-1.608397;, + 0.356128;-0.334132;-1.265243;, + -0.305322;-0.334132;-1.265243;, + -0.305322;-0.365916;-0.954351;, + 0.356128;-0.365916;-0.954351;, + -0.385296;0.338050;-1.911644;, + -0.323268;0.453416;-1.889030;, + -0.253817;0.453416;-1.889030;, + -0.305322;-0.062422;-1.887877;, + -0.379842;0.314164;-1.583353;, + -0.320955;0.433134;-1.601430;, + -0.251964;0.433134;-1.601430;, + -0.305322;-0.090581;-1.590002;, + 0.436101;0.338050;-1.911644;, + 0.374073;0.453416;-1.889030;, + 0.304622;0.453416;-1.889030;, + 0.356128;-0.062422;-1.887877;, + 0.430648;0.314163;-1.583353;, + 0.371759;0.433134;-1.601430;, + 0.302769;0.433134;-1.601430;, + 0.356128;-0.090581;-1.590002;, + 0.425194;0.290277;-1.255062;, + 0.375180;0.384325;-1.236900;, + 0.305508;0.384325;-1.236900;, + 0.356128;-0.128978;-1.243197;, + 0.419741;0.266390;-0.926771;, + 0.372827;0.354953;-0.926779;, + 0.303624;0.354953;-0.926779;, + 0.356128;-0.160545;-0.934428;, + -0.368935;0.266391;-0.926771;, + -0.322022;0.354953;-0.926779;, + -0.252819;0.354953;-0.926779;, + -0.305322;-0.160545;-0.934428;, + -0.374389;0.290277;-1.255062;, + -0.324375;0.384325;-1.236900;, + -0.254703;0.384325;-1.236900;, + -0.305322;-0.128978;-1.243197;, + 0.350782;0.562877;-3.586500;, + 0.350782;0.134766;-3.705020;, + -0.339463;-0.269818;-2.919710;, + -0.299976;0.562877;-3.586500;, + 0.390268;-0.269818;-2.919710;, + 0.350782;0.134766;-3.705020;, + 0.350782;0.562877;-3.586500;, + -0.299976;0.562877;-3.586500;, + -0.384470;0.357646;-2.367070;, + 0.276847;0.540056;-2.367070;, + 0.350782;0.562877;-3.586500;, + -0.299976;0.562877;-3.586500;, + 0.127371;0.058052;2.965310;, + -0.076567;0.058052;2.965310;, + 0.276847;0.540056;-2.367070;, + 0.253892;0.646877;-2.075800;, + -0.384470;0.357646;-2.367070;, + -0.203087;0.646877;-2.075800;, + -0.339463;-0.269818;-2.919710;, + 0.390268;-0.269818;-2.919710;, + 0.431218;-0.400603;-2.164040;, + -0.203087;0.646877;-2.075800;, + -0.375042;-0.511327;-1.030540;, + 0.431218;-0.400603;-2.164040;, + 0.247847;0.503541;-0.762633;, + 0.127371;0.058052;2.965310;, + -0.076567;0.058052;2.965310;, + -0.076567;0.058052;2.965310;, + -0.375042;-0.511327;-1.030540;, + 0.127371;-0.267921;2.965320;, + 0.425848;-0.511328;-1.030540;, + 0.127371;-0.267921;2.965320;, + 0.253892;0.646877;-2.075800;, + -0.203087;0.646877;-2.075800;, + -0.323268;0.453416;-1.889030;, + 0.374073;0.453416;-1.889030;, + -0.324375;0.384325;-1.236900;, + 0.247847;0.503541;-0.762633;, + 0.375180;0.384325;-1.236900;, + 0.208380;0.642622;-2.036815;, + -0.253817;0.453416;-1.889030;, + -0.305322;-0.048342;-2.036815;, + 0.205959;0.579488;-1.441064;, + 0.205959;0.579488;-1.441064;, + 0.302769;0.433134;-1.601430;, + 0.205959;0.570954;-1.397582;, + -0.254703;0.384325;-1.236900;, + -0.305322;-0.113195;-1.397582;, + -0.152734;0.507819;-0.801831;, + 0.203539;0.507819;-0.801831;, + 0.203539;0.507819;-0.801831;, + 0.303624;0.354953;-0.926779;, + 0.356128;-0.048342;-2.036815;, + -0.305322;-0.048342;-2.036815;, + 0.356128;-0.267741;-1.908320;, + 0.356128;-0.104661;-1.441064;, + 0.356128;-0.296094;-1.608397;, + -0.305322;-0.296094;-1.608397;, + 0.356128;-0.104661;-1.441064;, + 0.356128;-0.296094;-1.608397;, + 0.356128;-0.113195;-1.397582;, + -0.305322;-0.113195;-1.397582;, + 0.356128;-0.334132;-1.265243;, + 0.356128;-0.176329;-0.780043;, + 0.356128;-0.365916;-0.954351;, + -0.305322;-0.365916;-0.954351;, + 0.356128;-0.176329;-0.780043;, + 0.356128;-0.365916;-0.954351;, + -0.324375;0.384325;-1.236900;, + 0.247847;0.503541;-0.762633;, + 0.372827;0.354953;-0.926779;, + 0.372827;0.354953;-0.926779;, + -0.323268;0.453416;-1.889030;, + 0.371759;0.433134;-1.601430;, + -0.253817;0.453416;-1.889030;, + -0.254703;0.384325;-1.236900;, + 0.303624;0.354953;-0.926779;, + 0.356128;-0.365916;-0.954351;, + 0.356128;-0.334132;-1.265243;, + 0.302769;0.433134;-1.601430;, + 0.356128;-0.296094;-1.608397;, + 0.356128;-0.267741;-1.908320;, + -0.320955;0.433134;-1.601430;, + -0.155154;0.579488;-1.441064;, + -0.155154;0.579488;-1.441064;, + -0.305322;-0.296094;-1.608397;, + 0.304622;0.453416;-1.889030;, + 0.374073;0.453416;-1.889030;, + 0.208380;0.642622;-2.036815;, + 0.356128;-0.048342;-2.036815;, + 0.356128;-0.267741;-1.908320;, + 0.356128;-0.048342;-2.036815;, + 0.375180;0.384325;-1.236900;, + 0.205959;0.570954;-1.397582;, + 0.356128;-0.113195;-1.397582;, + 0.356128;-0.334132;-1.265243;, + 0.356128;-0.113195;-1.397582;, + -0.322022;0.354953;-0.926779;, + -0.152734;0.507819;-0.801831;, + -0.152734;0.507819;-0.801831;, + -0.305322;-0.365916;-0.954351;, + 0.435276;0.357646;-2.367070;, + 0.435276;0.357646;-2.367070;, + 0.425848;-0.511328;-1.030540;, + 0.127371;-0.267921;2.965320;, + 0.127371;0.058052;2.965310;, + 0.371759;0.433134;-1.601430;, + 0.250870;0.575209;-1.419217;, + 0.250870;0.575209;-1.419217;, + 0.372827;0.354953;-0.926779;, + -0.200065;0.575209;-1.419217;, + 0.253892;0.646877;-2.075800;, + 0.304622;0.453416;-1.889030;, + -0.203087;0.646877;-2.075800;, + -0.320955;0.433134;-1.601430;, + -0.200065;0.575209;-1.419217;, + -0.322022;0.354953;-0.926779;, + -0.322022;0.354953;-0.926779;, + -0.197042;0.503541;-0.762633;, + 0.305508;0.384325;-1.236900;, + 0.305508;0.384325;-1.236900;, + 0.203539;0.507819;-0.801831;, + -0.299976;0.134766;-3.705020;, + -0.299976;0.562877;-3.586500;, + -0.226041;0.540056;-2.367070;, + -0.226041;0.540056;-2.367070;, + -0.157575;0.642622;-2.036815;, + -0.305322;-0.048342;-2.036815;, + -0.305322;-0.267741;-1.908320;, + -0.305322;-0.267741;-1.908320;, + -0.305322;-0.104661;-1.441064;, + -0.305322;-0.104661;-1.441064;, + -0.155154;0.570954;-1.397582;, + -0.305322;-0.113195;-1.397582;, + -0.305322;-0.334132;-1.265243;, + -0.305322;-0.334132;-1.265243;, + -0.305322;-0.176329;-0.780043;, + -0.305322;-0.176329;-0.780043;, + -0.197042;0.503541;-0.762633;, + -0.197042;0.503541;-0.762633;, + -0.076567;-0.267921;2.965320;, + -0.076567;-0.267921;2.965320;, + -0.380393;-0.399859;-2.164040;, + -0.380393;-0.399859;-2.164040;, + -0.299976;0.134766;-3.705020;, + -0.157575;0.642622;-2.036815;, + -0.251964;0.433134;-1.601430;, + -0.155154;0.579488;-1.441064;, + -0.251964;0.433134;-1.601430;, + -0.155154;0.570954;-1.397582;, + -0.252819;0.354953;-0.926779;, + -0.152734;0.507819;-0.801831;, + -0.252819;0.354953;-0.926779;, + 0.205959;0.579488;-1.441064;, + 0.356128;-0.104661;-1.441064;, + 0.203539;0.507819;-0.801831;, + 0.356128;-0.176329;-0.780043;, + -0.305322;-0.296094;-1.608397;, + -0.305322;-0.365916;-0.954351;; + 168; + 3;0,3,2;, + 3;86,9,4;, + 3;22,17,23;, + 3;6,7,87;, + 3;88,5,89;, + 3;90,91,92;, + 3;8,93,94;, + 3;95,96,97;, + 3;98,99,25;, + 3;4,11,10;, + 3;100,12,101;, + 3;8,102,103;, + 3;5,104,13;, + 3;7,6,15;, + 3;105,10,106;, + 3;63,66,62;, + 3;46,48,49;, + 3;107,13,55;, + 3;20,78,82;, + 3;15,21,108;, + 3;109,10,62;, + 3;16,110,111;, + 3;18,19,112;, + 3;19,24,113;, + 3;114,21,115;, + 3;116,16,117;, + 3;27,26,83;, + 3;50,52,53;, + 3;71,74,70;, + 3;118,119,30;, + 3;120,56,31;, + 3;34,28,33;, + 3;121,68,67;, + 3;122,84,35;, + 3;123,37,36;, + 3;124,76,75;, + 3;125,39,38;, + 3;126,57,127;, + 3;32,128,41;, + 3;129,130,69;, + 3;131,43,42;, + 3;132,85,133;, + 3;134,135,45;, + 3;136,137,77;, + 3;138,139,140;, + 3;127,57,47;, + 3;141,142,143;, + 3;144,69,145;, + 3;146,147,148;, + 3;133,85,51;, + 3;149,150,151;, + 3;152,77,153;, + 3;79,83,78;, + 3;80,84,154;, + 3;37,155,156;, + 3;157,16,74;, + 3;59,55,58;, + 3;60,56,158;, + 3;33,28,67;, + 3;159,29,66;, + 3;61,57,160;, + 3;47,57,61;, + 3;81,85,161;, + 3;51,85,81;, + 3;77,162,72;, + 3;163,77,164;, + 3;69,165,64;, + 3;166,69,167;, + 3;59,26,27;, + 3;60,168,169;, + 3;61,170,40;, + 3;171,61,40;, + 3;63,62,10;, + 3;172,173,30;, + 3;64,174,175;, + 3;176,65,177;, + 3;71,70,29;, + 3;178,28,34;, + 3;72,179,180;, + 3;181,73,182;, + 3;79,19,18;, + 3;80,183,184;, + 3;81,185,44;, + 3;186,81,44;, + 3;88,89,1;, + 3;13,88,14;, + 3;90,92,187;, + 3;10,90,188;, + 3;14,54,13;, + 3;14,58,54;, + 3;14,26,58;, + 3;20,26,14;, + 3;20,82,26;, + 3;78,20,19;, + 3;106,29,189;, + 3;66,106,62;, + 3;29,106,66;, + 3;116,70,74;, + 3;70,116,29;, + 3;116,74,16;, + 3;24,19,20;, + 3;190,16,191;, + 3;103,94,13;, + 3;11,4,9;, + 3;55,13,54;, + 3;58,55,54;, + 3;63,10,11;, + 3;66,63,192;, + 3;29,159,193;, + 3;71,29,194;, + 3;74,71,195;, + 3;26,59,58;, + 3;83,26,82;, + 3;78,83,82;, + 3;19,79,78;, + 3;16,157,110;, + 3;34,169,35;, + 3;169,34,33;, + 3;35,169,196;, + 3;30,121,197;, + 3;68,121,198;, + 3;120,31,199;, + 3;60,120,200;, + 3;33,67,68;, + 3;169,168,201;, + 3;122,35,196;, + 3;80,122,202;, + 3;36,203,204;, + 3;124,34,205;, + 3;76,124,206;, + 3;207,75,76;, + 3;3,0,208;, + 3;95,209,210;, + 3;12,95,211;, + 3;30,119,31;, + 3;39,125,212;, + 3;140,213,214;, + 3;48,46,215;, + 3;141,143,216;, + 3;32,41,217;, + 3;43,131,218;, + 3;148,219,220;, + 3;52,50,221;, + 3;149,151,222;, + 3;134,45,223;, + 3;123,36,224;, + 3;23,17,225;, + 3;25,99,226;, + 3;108,115,227;, + 3;15,108,228;, + 3;7,15,229;, + 3;87,7,230;, + 3;126,127,231;, + 3;61,126,232;, + 3;233,61,234;, + 3;132,133,235;, + 3;81,132,236;, + 3;237,81,238;, + 3;64,175,65;, + 3;69,64,65;, + 3;239,69,240;, + 3;72,180,73;, + 3;77,72,73;, + 3;241,77,242;, + 3;164,77,73;, + 3;167,69,65;, + 3;47,61,243;, + 3;51,81,244;; + + MeshNormals { + 245; + 0.000000;0.266808;-0.963750;, + -0.998959;0.012170;-0.043960;, + 0.000000;0.266808;-0.963750;, + 0.000000;0.266808;-0.963750;, + 0.777074;0.629327;0.010145;, + -0.997991;-0.018108;-0.060716;, + 0.000000;-0.944615;-0.328179;, + -0.000237;-0.947423;-0.319985;, + -0.754938;0.655688;0.011960;, + 0.754937;0.655688;0.011960;, + 0.996415;0.079394;-0.029230;, + 0.822045;0.567067;-0.051743;, + 0.000000;0.938853;-0.344317;, + -0.996412;0.079432;-0.029208;, + -0.999940;-0.004298;-0.010108;, + -0.000466;-0.992027;-0.126022;, + 0.989979;0.115716;0.080940;, + 0.000000;0.992935;0.118656;, + -0.823550;0.559299;0.094602;, + -0.989979;0.115715;0.080940;, + -0.998471;-0.009568;0.054440;, + -0.000001;-0.999666;0.025858;, + 0.000000;0.992935;0.118656;, + 0.000000;0.992935;0.118656;, + -0.997053;-0.010578;0.075983;, + 0.000000;0.000031;1.000000;, + -0.997843;0.064118;0.014072;, + -0.837228;0.542995;0.064850;, + 0.289480;0.946159;0.144857;, + 0.997844;0.064107;0.014083;, + 0.109412;0.900472;0.420927;, + -0.149218;0.834089;0.531065;, + 0.000000;0.000000;-1.000000;, + 0.093231;0.949373;-0.299999;, + 0.053670;0.887061;0.458521;, + -0.070806;0.838773;0.539857;, + -0.147861;0.987223;-0.059393;, + 0.238919;0.956807;-0.165642;, + 0.000000;0.000000;1.000000;, + 0.000000;0.000000;1.000000;, + 0.985984;-0.166102;-0.015703;, + 0.000000;0.000000;-1.000000;, + 0.000000;0.000000;1.000000;, + 0.000000;0.000000;1.000000;, + 0.985451;-0.169080;-0.017286;, + 0.000000;-0.031831;-0.999493;, + 0.000000;0.995561;0.094115;, + 1.000000;0.000000;0.000000;, + 0.000000;0.995561;0.094115;, + 0.000000;0.995561;0.094115;, + 0.000000;0.994815;0.101705;, + 1.000000;0.000000;0.000000;, + 0.000000;0.994815;0.101705;, + 0.000000;0.994815;0.101705;, + -0.997975;0.060060;0.020950;, + -0.873164;0.486615;0.028134;, + 0.000000;0.901116;0.433577;, + 0.997450;-0.071058;-0.006717;, + -0.995589;0.091093;0.022464;, + -0.864408;0.495225;0.086895;, + 0.000000;0.989893;-0.141816;, + 0.992556;-0.096346;-0.074495;, + 0.997977;0.060033;0.020946;, + 0.873163;0.486617;0.028135;, + -0.989858;-0.123422;0.070338;, + -0.997449;-0.071060;-0.006718;, + 0.995593;0.091045;0.022459;, + 0.087533;0.940546;-0.328195;, + 0.000000;0.989893;-0.141815;, + -0.992556;-0.096347;-0.074494;, + 0.997898;0.061299;0.021036;, + 0.866886;0.497720;0.027980;, + -0.989865;-0.124386;0.068523;, + -0.997521;-0.070000;-0.007156;, + 0.995837;0.088170;0.023112;, + 0.000000;0.961996;-0.273062;, + 0.000000;0.992194;-0.124703;, + -0.992624;-0.093847;-0.076743;, + -0.995837;0.088169;0.023114;, + -0.853004;0.514724;0.086275;, + 0.000000;0.992194;-0.124703;, + 0.992624;-0.093846;-0.076744;, + -0.997898;0.061298;0.021036;, + -0.866887;0.497719;0.027978;, + 0.000000;0.908907;0.417000;, + 0.997522;-0.069998;-0.007156;, + 0.753723;0.654633;0.057950;, + 0.000000;-0.888961;-0.457984;, + -0.998187;-0.003070;-0.060104;, + -0.998037;-0.002773;-0.062566;, + 0.998364;-0.010093;-0.056285;, + 0.998959;0.012170;-0.043959;, + 0.998037;-0.002774;-0.062566;, + -0.753723;0.654633;0.057950;, + -0.780194;0.623981;0.044103;, + 0.000000;0.999844;-0.017632;, + 0.000000;0.999825;0.018711;, + 0.000000;0.999825;0.018711;, + 0.000000;0.000031;1.000000;, + 0.000000;0.000031;1.000000;, + 0.000000;0.938853;-0.344317;, + 0.000000;0.938853;-0.344317;, + -0.742922;0.645252;-0.178094;, + -0.810819;0.580867;-0.071878;, + -0.998134;-0.059495;-0.013738;, + 0.998493;-0.003687;-0.054747;, + 0.999923;-0.003752;-0.011867;, + -0.848788;0.528730;0.001502;, + -0.000319;-0.998801;-0.048946;, + 0.999804;-0.011987;0.015738;, + 0.823550;0.559299;0.094603;, + 0.823639;0.559360;0.093461;, + -0.823640;0.559359;0.093461;, + -0.996995;0.000002;0.077461;, + -0.000001;-0.998150;0.060802;, + -0.000001;-0.998150;0.060802;, + 0.997693;-0.011877;0.066845;, + 0.997044;-0.014871;0.075382;, + 0.000000;0.994096;0.108500;, + 0.000000;0.994096;0.108500;, + -0.135252;0.867776;0.478196;, + 0.123156;0.967400;0.221293;, + -0.067228;0.872590;0.483805;, + 0.000000;0.994097;0.108494;, + 0.000000;0.953854;0.300270;, + 0.000000;0.000000;1.000000;, + 0.985155;-0.134238;0.106999;, + 0.974843;-0.137104;0.175737;, + 0.000000;0.000000;-1.000000;, + -0.889652;-0.100364;-0.445472;, + -0.889652;-0.100364;-0.445472;, + 0.000000;0.000000;1.000000;, + 0.985272;-0.135965;0.103693;, + 0.974812;-0.140714;0.173036;, + 0.000000;-0.031831;-0.999493;, + 0.000000;-0.031831;-0.999493;, + -0.821165;-0.075242;-0.565709;, + -0.821165;-0.075242;-0.565709;, + 0.000000;0.505373;0.862901;, + 0.000000;0.505373;0.862901;, + 0.000000;0.505373;0.862901;, + 0.000000;0.658124;-0.752910;, + 0.000000;0.658124;-0.752910;, + 0.000000;0.658124;-0.752910;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 0.000000;0.513858;0.857875;, + 0.000000;0.513858;0.857875;, + 0.000000;0.513858;0.857875;, + 0.000000;0.676821;-0.736148;, + 0.000000;0.676821;-0.736148;, + 0.000000;0.676821;-0.736148;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 0.000000;0.995545;0.094289;, + 0.432857;0.807272;-0.401182;, + 0.432857;0.807272;-0.401182;, + 0.837833;0.536170;0.102751;, + 0.000000;0.997523;0.070347;, + 0.849402;0.516334;0.109159;, + 0.995006;-0.099370;-0.009394;, + 0.995135;-0.098012;-0.010020;, + -0.994755;-0.101085;-0.015617;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -0.994728;-0.101645;-0.013577;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -0.141911;0.799824;-0.583218;, + -0.069126;0.983432;-0.167579;, + 0.976547;-0.214348;-0.020264;, + 1.000000;0.000000;0.000000;, + 0.000000;0.615561;0.788090;, + 0.000000;0.615561;0.788090;, + -0.917390;-0.196164;0.346287;, + -0.965892;-0.159283;0.204162;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 0.230131;0.746346;0.624505;, + -0.920142;-0.201969;0.335482;, + -0.966035;-0.163039;0.200486;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 0.000000;0.632861;-0.774266;, + 0.000000;0.632861;-0.774266;, + 0.975625;-0.218308;-0.022319;, + 1.000000;0.000000;0.000000;, + 0.997456;-0.009298;-0.070678;, + 0.998134;-0.059499;-0.013735;, + 0.999989;-0.000299;0.004708;, + 0.996995;0.000002;0.077462;, + 0.996995;0.000002;0.077462;, + 0.893188;0.448008;0.038781;, + 0.831739;0.539441;0.131204;, + 0.838991;0.544140;-0.002344;, + 0.882523;0.467499;0.050974;, + -0.205690;0.786930;0.581750;, + 0.385611;0.753550;0.532416;, + 0.000000;0.997523;0.070347;, + -0.385611;0.753550;0.532416;, + 0.000000;0.997523;0.070347;, + -0.300854;0.838548;-0.454229;, + 0.000000;0.995545;0.094289;, + -0.432857;0.807272;-0.401182;, + -0.432857;0.807272;-0.401182;, + 0.000000;0.652462;0.757821;, + 0.000000;0.995545;0.094289;, + 0.000000;0.632861;-0.774266;, + 0.000000;0.266808;-0.963750;, + 0.000000;0.999825;0.018711;, + 0.000000;0.999825;0.018711;, + 0.000000;0.938853;-0.344317;, + 0.000000;0.000000;1.000000;, + 0.000000;0.505373;0.862901;, + 0.000000;0.505373;0.862901;, + 0.000000;0.995561;0.094115;, + 0.000000;0.658124;-0.752910;, + 0.000000;0.000000;-1.000000;, + 0.000000;0.000000;1.000000;, + 0.000000;0.513858;0.857875;, + 0.000000;0.513858;0.857875;, + 0.000000;0.994815;0.101705;, + 0.000000;0.676821;-0.736148;, + 0.000000;-0.031831;-0.999493;, + 0.000000;0.994097;0.108494;, + 0.000000;0.992935;0.118656;, + 0.000000;0.000031;1.000000;, + 0.000000;-0.998150;0.060802;, + -0.000912;-0.995199;-0.097863;, + -0.000903;-0.985505;-0.169642;, + 0.000000;-0.888961;-0.457984;, + 0.917390;-0.196163;0.346288;, + 0.994728;-0.101643;-0.013577;, + 0.889652;-0.100362;-0.445474;, + 0.889652;-0.100362;-0.445474;, + 0.920141;-0.201967;0.335483;, + 0.994755;-0.101083;-0.015617;, + 0.821164;-0.075241;-0.565711;, + 0.821164;-0.075241;-0.565711;, + -0.976547;-0.214350;-0.020264;, + -0.976547;-0.214350;-0.020264;, + -0.975624;-0.218309;-0.022320;, + -0.975624;-0.218309;-0.022320;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;; + 168; + 3;0,3,2;, + 3;86,9,4;, + 3;22,17,23;, + 3;6,7,87;, + 3;88,5,89;, + 3;90,91,92;, + 3;8,93,94;, + 3;95,96,97;, + 3;98,99,25;, + 3;4,11,10;, + 3;100,12,101;, + 3;8,102,103;, + 3;5,104,13;, + 3;7,6,15;, + 3;105,10,106;, + 3;63,66,62;, + 3;46,48,49;, + 3;107,13,55;, + 3;20,78,82;, + 3;15,21,108;, + 3;109,10,62;, + 3;16,110,111;, + 3;18,19,112;, + 3;19,24,113;, + 3;114,21,115;, + 3;116,16,117;, + 3;27,26,83;, + 3;50,52,53;, + 3;71,74,70;, + 3;118,119,30;, + 3;120,56,31;, + 3;34,28,33;, + 3;121,68,67;, + 3;122,84,35;, + 3;123,37,36;, + 3;124,76,75;, + 3;125,39,38;, + 3;126,57,127;, + 3;32,128,41;, + 3;129,130,69;, + 3;131,43,42;, + 3;132,85,133;, + 3;134,135,45;, + 3;136,137,77;, + 3;138,139,140;, + 3;127,57,47;, + 3;141,142,143;, + 3;144,69,145;, + 3;146,147,148;, + 3;133,85,51;, + 3;149,150,151;, + 3;152,77,153;, + 3;79,83,78;, + 3;80,84,154;, + 3;37,155,156;, + 3;157,16,74;, + 3;59,55,58;, + 3;60,56,158;, + 3;33,28,67;, + 3;159,29,66;, + 3;61,57,160;, + 3;47,57,61;, + 3;81,85,161;, + 3;51,85,81;, + 3;77,162,72;, + 3;163,77,164;, + 3;69,165,64;, + 3;166,69,167;, + 3;59,26,27;, + 3;60,168,169;, + 3;61,170,40;, + 3;171,61,40;, + 3;63,62,10;, + 3;172,173,30;, + 3;64,174,175;, + 3;176,65,177;, + 3;71,70,29;, + 3;178,28,34;, + 3;72,179,180;, + 3;181,73,182;, + 3;79,19,18;, + 3;80,183,184;, + 3;81,185,44;, + 3;186,81,44;, + 3;88,89,1;, + 3;13,88,14;, + 3;90,92,187;, + 3;10,90,188;, + 3;14,54,13;, + 3;14,58,54;, + 3;14,26,58;, + 3;20,26,14;, + 3;20,82,26;, + 3;78,20,19;, + 3;106,29,189;, + 3;66,106,62;, + 3;29,106,66;, + 3;116,70,74;, + 3;70,116,29;, + 3;116,74,16;, + 3;24,19,20;, + 3;190,16,191;, + 3;103,94,13;, + 3;11,4,9;, + 3;55,13,54;, + 3;58,55,54;, + 3;63,10,11;, + 3;66,63,192;, + 3;29,159,193;, + 3;71,29,194;, + 3;74,71,195;, + 3;26,59,58;, + 3;83,26,82;, + 3;78,83,82;, + 3;19,79,78;, + 3;16,157,110;, + 3;34,169,35;, + 3;169,34,33;, + 3;35,169,196;, + 3;30,121,197;, + 3;68,121,198;, + 3;120,31,199;, + 3;60,120,200;, + 3;33,67,68;, + 3;169,168,201;, + 3;122,35,196;, + 3;80,122,202;, + 3;36,203,204;, + 3;124,34,205;, + 3;76,124,206;, + 3;207,75,76;, + 3;3,0,208;, + 3;95,209,210;, + 3;12,95,211;, + 3;30,119,31;, + 3;39,125,212;, + 3;140,213,214;, + 3;48,46,215;, + 3;141,143,216;, + 3;32,41,217;, + 3;43,131,218;, + 3;148,219,220;, + 3;52,50,221;, + 3;149,151,222;, + 3;134,45,223;, + 3;123,36,224;, + 3;23,17,225;, + 3;25,99,226;, + 3;108,115,227;, + 3;15,108,228;, + 3;7,15,229;, + 3;87,7,230;, + 3;126,127,231;, + 3;61,126,232;, + 3;233,61,234;, + 3;132,133,235;, + 3;81,132,236;, + 3;237,81,238;, + 3;64,175,65;, + 3;69,64,65;, + 3;239,69,240;, + 3;72,180,73;, + 3;77,72,73;, + 3;241,77,242;, + 3;164,77,73;, + 3;167,69,65;, + 3;47,61,243;, + 3;51,81,244;; + } + + MeshTextureCoords { + 245; + 0.830568;-0.996310;, + 0.858212;-0.998666;, + 0.829807;-0.954350;, + 0.668791;-0.954638;, + 0.688022;-0.799051;, + 0.814918;-0.798328;, + 0.825319;-0.881120;, + 0.694015;-0.881868;, + 0.780420;-0.798524;, + 0.718793;-0.798875;, + 0.686482;-0.755391;, + 0.736564;-0.755107;, + 0.717833;-0.755213;, + 0.816116;-0.754652;, + 0.958007;-0.767074;, + 0.832042;-0.767792;, + 0.669243;-0.558620;, + 0.797850;-0.557888;, + 0.785955;-0.557956;, + 0.833064;-0.557686;, + 0.978120;-0.597025;, + 0.830218;-0.617244;, + 0.772987;-0.158226;, + 0.736292;-0.158434;, + 0.928672;-0.157336;, + 0.000000;-3.000000;, + 0.824591;-0.656169;, + 0.772961;-0.656465;, + 0.727517;-0.689972;, + 0.677862;-0.657005;, + 0.731321;-0.650436;, + 0.766017;-0.650238;, + 0.766005;-0.688355;, + 0.731767;-0.688550;, + 0.731783;-0.691332;, + 0.766021;-0.691137;, + 0.766008;-0.729253;, + 0.732230;-0.729445;, + 0.717313;-0.650516;, + 0.780025;-0.650159;, + 0.780242;-0.688273;, + 0.717529;-0.688631;, + 0.717545;-0.691413;, + 0.780258;-0.691055;, + 0.780483;-0.730565;, + 0.717771;-0.730922;, + 0.717360;-0.658737;, + 0.780072;-0.658379;, + 0.780182;-0.677568;, + 0.717469;-0.677925;, + 0.717594;-0.699880;, + 0.780306;-0.699522;, + 0.780420;-0.719412;, + 0.717707;-0.719770;, + 0.818235;-0.730032;, + 0.796397;-0.726765;, + 0.775196;-0.659641;, + 0.780079;-0.659687;, + 0.822472;-0.680790;, + 0.799987;-0.683628;, + 0.775125;-0.678043;, + 0.780188;-0.678745;, + 0.684327;-0.730794;, + 0.703769;-0.727293;, + 0.722250;-0.659943;, + 0.717367;-0.660045;, + 0.680017;-0.681602;, + 0.715989;-0.678380;, + 0.722530;-0.678342;, + 0.717476;-0.679102;, + 0.675707;-0.632409;, + 0.691557;-0.629595;, + 0.722403;-0.701666;, + 0.717602;-0.701290;, + 0.671397;-0.583216;, + 0.716134;-0.721543;, + 0.722695;-0.721506;, + 0.717715;-0.721045;, + 0.830946;-0.582307;, + 0.814197;-0.582403;, + 0.775452;-0.721205;, + 0.780427;-0.720687;, + 0.826709;-0.631548;, + 0.808907;-0.628927;, + 0.775518;-0.701363;, + 0.780315;-0.700933;, + 0.723684;-0.981664;, + 0.818885;-0.998890;, + 0.934058;-0.880501;, + 0.777145;-0.981360;, + 0.582647;-0.882503;, + 0.651567;-0.999844;, + 0.723684;-0.981664;, + 0.777145;-0.981360;, + 0.814918;-0.798328;, + 0.804438;-0.798387;, + 0.818784;-0.981122;, + 0.701690;-0.981789;, + 0.000000;-2.000000;, + 1.000000;-2.000000;, + 0.804438;-0.798387;, + 0.800059;-0.754745;, + 0.814918;-0.798328;, + 0.759968;-0.754974;, + 0.934058;-0.880501;, + 0.582647;-0.882503;, + 0.559939;-0.769342;, + 0.759968;-0.754974;, + 0.686110;-0.618066;, + 0.559939;-0.769342;, + 0.711262;-0.558381;, + 0.632928;-0.159023;, + 0.867023;-0.157690;, + 0.867023;-0.157690;, + 0.686110;-0.618066;, + 0.772987;-0.158224;, + 0.540292;-0.599520;, + 0.577939;-0.159335;, + 0.726992;-0.647967;, + 0.770318;-0.647720;, + 0.781781;-0.659604;, + 0.715665;-0.659981;, + 0.782123;-0.701326;, + 0.728043;-0.731977;, + 0.715798;-0.701704;, + 0.731321;-0.650436;, + 0.775196;-0.659641;, + 0.780025;-0.650159;, + 0.731767;-0.688550;, + 0.731767;-0.688550;, + 0.722530;-0.678342;, + 0.731783;-0.691332;, + 0.775518;-0.701363;, + 0.780258;-0.691055;, + 0.766008;-0.729253;, + 0.732230;-0.729445;, + 0.732230;-0.729445;, + 0.722695;-0.721506;, + 0.717313;-0.650516;, + 0.780025;-0.650159;, + 0.717360;-0.658737;, + 0.717529;-0.688631;, + 0.717469;-0.677925;, + 0.780182;-0.677568;, + 0.717529;-0.688631;, + 0.717469;-0.677925;, + 0.717545;-0.691413;, + 0.780258;-0.691055;, + 0.717594;-0.699880;, + 0.717771;-0.730922;, + 0.717707;-0.719770;, + 0.780420;-0.719412;, + 0.717771;-0.730922;, + 0.717707;-0.719770;, + 0.782123;-0.701326;, + 0.728043;-0.731977;, + 0.716134;-0.721543;, + 0.686337;-0.583132;, + 0.781781;-0.659604;, + 0.700102;-0.684197;, + 0.775196;-0.659641;, + 0.775518;-0.701363;, + 0.722695;-0.721506;, + 0.717707;-0.719770;, + 0.717594;-0.699880;, + 0.722530;-0.678342;, + 0.717469;-0.677925;, + 0.717360;-0.658737;, + 0.781666;-0.678005;, + 0.766005;-0.688355;, + 0.766005;-0.688355;, + 0.780182;-0.677568;, + 0.722250;-0.659943;, + 0.715665;-0.659981;, + 0.731321;-0.650436;, + 0.717313;-0.650516;, + 0.717360;-0.658737;, + 0.717313;-0.650516;, + 0.715798;-0.701704;, + 0.731783;-0.691332;, + 0.717545;-0.691413;, + 0.717594;-0.699880;, + 0.717545;-0.691413;, + 0.782013;-0.721168;, + 0.766008;-0.729253;, + 0.766008;-0.729253;, + 0.780420;-0.719412;, + 0.688022;-0.799051;, + 0.688022;-0.799051;, + 0.540292;-0.599520;, + 0.577939;-0.159335;, + 0.632928;-0.159023;, + 0.700102;-0.684197;, + 0.723913;-0.656744;, + 0.723913;-0.656744;, + 0.686337;-0.583132;, + 0.770271;-0.689728;, + 0.726992;-0.647967;, + 0.722250;-0.659943;, + 0.770318;-0.647720;, + 0.781666;-0.678005;, + 0.770271;-0.689728;, + 0.782013;-0.721168;, + 0.782013;-0.721168;, + 0.770224;-0.731737;, + 0.722403;-0.701666;, + 0.722403;-0.701666;, + 0.732230;-0.729445;, + 0.669552;-0.996598;, + 0.701690;-0.981789;, + 0.713951;-0.798903;, + 0.713951;-0.798903;, + 0.766017;-0.650238;, + 0.780025;-0.650159;, + 0.780072;-0.658379;, + 0.780072;-0.658379;, + 0.780242;-0.688273;, + 0.780242;-0.688273;, + 0.766021;-0.691137;, + 0.780258;-0.691055;, + 0.780306;-0.699522;, + 0.780306;-0.699522;, + 0.780483;-0.730565;, + 0.780483;-0.730565;, + 0.770224;-0.731737;, + 0.717799;-0.558344;, + 1.000000;-3.000000;, + 0.736292;-0.158433;, + 0.686005;-0.768624;, + 0.686005;-0.768624;, + 0.701791;-0.999557;, + 0.766017;-0.650238;, + 0.775125;-0.678043;, + 0.766005;-0.688355;, + 0.775125;-0.678043;, + 0.766021;-0.691137;, + 0.775452;-0.721205;, + 0.766008;-0.729253;, + 0.775452;-0.721205;, + 0.731767;-0.688550;, + 0.717529;-0.688631;, + 0.732230;-0.729445;, + 0.717771;-0.730922;, + 0.780182;-0.677568;, + 0.780420;-0.719412;; + } + + MeshMaterialList { + 1; + 168; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0; + + Material { + 0.800000;0.800000;0.800000;0.000000;; + 0.000000; + 0.000000;0.000000;0.000000;; + 0.000000;0.000000;0.000000;; + + TextureFilename { + "bihull.bmp"; + } + } + } + + VertexDuplicationIndices { + 245; + 86; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 2, + 0, + 7, + 3, + 6, + 0, + 2, + 3, + 5, + 9, + 2, + 3, + 22, + 23, + 9, + 11, + 5, + 12, + 7, + 6, + 15, + 12, + 20, + 15, + 17, + 22, + 23, + 23, + 20, + 25, + 21, + 25, + 11, + 12, + 55, + 63, + 83, + 17, + 71, + 30, + 56, + 39, + 33, + 33, + 68, + 34, + 84, + 43, + 36, + 37, + 37, + 76, + 38, + 39, + 46, + 41, + 49, + 48, + 41, + 49, + 42, + 43, + 50, + 45, + 53, + 52, + 45, + 53, + 83, + 17, + 75, + 75, + 55, + 67, + 56, + 84, + 76, + 53, + 50, + 68, + 49, + 46, + 59, + 32, + 32, + 48, + 64, + 63, + 30, + 38, + 46, + 38, + 71, + 34, + 42, + 50, + 42, + 79, + 36, + 36, + 52, + 4, + 4, + 21, + 25, + 22, + 67, + 28, + 28, + 75, + 27, + 11, + 64, + 12, + 59, + 27, + 79, + 79, + 18, + 72, + 72, + 37, + 1, + 3, + 8, + 8, + 31, + 39, + 47, + 47, + 40, + 40, + 35, + 43, + 51, + 51, + 44, + 44, + 18, + 18, + 24, + 24, + 14, + 14, + 1, + 31, + 60, + 32, + 60, + 35, + 80, + 36, + 80, + 33, + 41, + 37, + 45, + 48, + 52; + } + } + } + + Frame wing_poles { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.102858,0.000000,1.000000;; + } + + Mesh { + 256; + 3.678300;-0.288631;-2.509480;, + 3.553570;1.099530;-2.604250;, + 3.553570;-0.288631;-2.509480;, + 3.678300;1.099530;-2.604250;, + 3.678300;-0.299920;-2.369920;, + 3.553570;-0.299920;-2.369920;, + 3.678300;1.081790;-2.474930;, + 3.553570;1.081790;-2.474930;, + 3.673010;-0.379267;-1.559630;, + 3.548290;1.013120;-1.654870;, + 3.548290;-0.379267;-1.559630;, + 3.673010;1.013120;-1.654870;, + 3.673010;-0.396630;-1.420710;, + 3.548290;-0.396630;-1.420710;, + 3.673010;0.997639;-1.525250;, + 3.548290;0.997639;-1.525250;, + 1.741860;-0.288631;-2.509480;, + 1.617140;1.099530;-2.604250;, + 1.617140;-0.288631;-2.509480;, + 1.741860;1.099530;-2.604250;, + 1.741860;-0.299920;-2.369920;, + 1.617140;-0.299920;-2.369920;, + 1.741860;1.081790;-2.474930;, + 1.617140;1.081790;-2.474930;, + 1.736570;-0.379267;-1.559630;, + 1.611850;1.013120;-1.654870;, + 1.611850;-0.379267;-1.559630;, + 1.736570;1.013120;-1.654870;, + 1.736570;-0.396630;-1.420710;, + 1.611850;-0.396630;-1.420710;, + 1.736570;0.997639;-1.525250;, + 1.611850;0.997639;-1.525250;, + -1.544050;-0.288631;-2.509480;, + -1.668770;1.099530;-2.604250;, + -1.668770;-0.288631;-2.509480;, + -1.544050;1.099530;-2.604250;, + -1.544050;-0.299920;-2.369920;, + -1.668770;-0.299920;-2.369920;, + -1.544050;1.081790;-2.474930;, + -1.668770;1.081790;-2.474930;, + -1.549350;-0.379267;-1.559630;, + -1.674070;1.013120;-1.654870;, + -1.674070;-0.379267;-1.559630;, + -1.549350;1.013120;-1.654870;, + -1.549350;-0.396629;-1.420710;, + -1.674070;-0.396629;-1.420710;, + -1.549350;0.997639;-1.525250;, + -1.674070;0.997639;-1.525250;, + -3.599630;-0.288630;-2.509480;, + -3.724350;1.099530;-2.604250;, + -3.724350;-0.288630;-2.509480;, + -3.599630;1.099530;-2.604250;, + -3.599630;-0.299919;-2.369920;, + -3.724350;-0.299919;-2.369920;, + -3.599630;1.081790;-2.474930;, + -3.724350;1.081790;-2.474930;, + -3.599630;-0.379267;-1.559630;, + -3.724350;1.013120;-1.654870;, + -3.724350;-0.379267;-1.559630;, + -3.599630;1.013120;-1.654870;, + -3.599630;-0.396629;-1.420710;, + -3.724350;-0.396629;-1.420710;, + -3.599630;0.997639;-1.525250;, + -3.724350;0.997639;-1.525250;, + 3.553570;-0.288631;-2.509480;, + 3.678300;-0.288631;-2.509480;, + 3.553570;-0.288631;-2.509480;, + 3.553570;-0.299920;-2.369920;, + 3.678300;-0.299920;-2.369920;, + 3.553570;-0.299920;-2.369920;, + 3.678300;1.099530;-2.604250;, + 3.553570;1.099530;-2.604250;, + 3.553570;1.081790;-2.474930;, + 3.678300;1.081790;-2.474930;, + 3.678300;1.099530;-2.604250;, + 3.553570;1.081790;-2.474930;, + 3.553570;-0.299920;-2.369920;, + 3.553570;1.081790;-2.474930;, + 3.553570;-0.288631;-2.509480;, + 3.553570;-0.288631;-2.509480;, + 3.553570;1.081790;-2.474930;, + 3.553570;1.099530;-2.604250;, + 3.678300;1.081790;-2.474930;, + 3.678300;-0.299920;-2.369920;, + 3.678300;-0.288631;-2.509480;, + 3.678300;1.081790;-2.474930;, + 3.678300;-0.288631;-2.509480;, + 3.678300;1.099530;-2.604250;, + 3.548290;-0.379267;-1.559630;, + 3.673010;-0.379267;-1.559630;, + 3.548290;-0.379267;-1.559630;, + 3.548290;-0.396630;-1.420710;, + 3.673010;-0.396630;-1.420710;, + 3.548290;-0.396630;-1.420710;, + 3.673010;1.013120;-1.654870;, + 3.548290;1.013120;-1.654870;, + 3.548290;0.997639;-1.525250;, + 3.673010;0.997639;-1.525250;, + 3.673010;1.013120;-1.654870;, + 3.548290;0.997639;-1.525250;, + 3.548290;-0.396630;-1.420710;, + 3.548290;0.997639;-1.525250;, + 3.548290;-0.379267;-1.559630;, + 3.548290;-0.379267;-1.559630;, + 3.548290;0.997639;-1.525250;, + 3.548290;1.013120;-1.654870;, + 3.673010;0.997639;-1.525250;, + 3.673010;-0.396630;-1.420710;, + 3.673010;-0.379267;-1.559630;, + 3.673010;0.997639;-1.525250;, + 3.673010;-0.379267;-1.559630;, + 3.673010;1.013120;-1.654870;, + 1.617140;-0.288631;-2.509480;, + 1.741860;-0.288631;-2.509480;, + 1.617140;-0.288631;-2.509480;, + 1.617140;-0.299920;-2.369920;, + 1.741860;-0.299920;-2.369920;, + 1.617140;-0.299920;-2.369920;, + 1.741860;1.099530;-2.604250;, + 1.617140;1.099530;-2.604250;, + 1.617140;1.081790;-2.474930;, + 1.741860;1.081790;-2.474930;, + 1.741860;1.099530;-2.604250;, + 1.617140;1.081790;-2.474930;, + 1.617140;-0.299920;-2.369920;, + 1.617140;1.081790;-2.474930;, + 1.617140;-0.288631;-2.509480;, + 1.617140;-0.288631;-2.509480;, + 1.617140;1.081790;-2.474930;, + 1.617140;1.099530;-2.604250;, + 1.741860;1.081790;-2.474930;, + 1.741860;-0.299920;-2.369920;, + 1.741860;-0.288631;-2.509480;, + 1.741860;1.081790;-2.474930;, + 1.741860;-0.288631;-2.509480;, + 1.741860;1.099530;-2.604250;, + 1.611850;-0.379267;-1.559630;, + 1.736570;-0.379267;-1.559630;, + 1.611850;-0.379267;-1.559630;, + 1.611850;-0.396630;-1.420710;, + 1.736570;-0.396630;-1.420710;, + 1.611850;-0.396630;-1.420710;, + 1.736570;1.013120;-1.654870;, + 1.611850;1.013120;-1.654870;, + 1.611850;0.997639;-1.525250;, + 1.736570;0.997639;-1.525250;, + 1.736570;1.013120;-1.654870;, + 1.611850;0.997639;-1.525250;, + 1.611850;-0.396630;-1.420710;, + 1.611850;0.997639;-1.525250;, + 1.611850;-0.379267;-1.559630;, + 1.611850;-0.379267;-1.559630;, + 1.611850;0.997639;-1.525250;, + 1.611850;1.013120;-1.654870;, + 1.736570;0.997639;-1.525250;, + 1.736570;-0.396630;-1.420710;, + 1.736570;-0.379267;-1.559630;, + 1.736570;0.997639;-1.525250;, + 1.736570;-0.379267;-1.559630;, + 1.736570;1.013120;-1.654870;, + -1.668770;-0.288631;-2.509480;, + -1.544050;-0.288631;-2.509480;, + -1.668770;-0.288631;-2.509480;, + -1.668770;-0.299920;-2.369920;, + -1.544050;-0.299920;-2.369920;, + -1.668770;-0.299920;-2.369920;, + -1.544050;1.099530;-2.604250;, + -1.668770;1.099530;-2.604250;, + -1.668770;1.081790;-2.474930;, + -1.544050;1.081790;-2.474930;, + -1.544050;1.099530;-2.604250;, + -1.668770;1.081790;-2.474930;, + -1.668770;-0.299920;-2.369920;, + -1.668770;1.081790;-2.474930;, + -1.668770;-0.288631;-2.509480;, + -1.668770;-0.288631;-2.509480;, + -1.668770;1.081790;-2.474930;, + -1.668770;1.099530;-2.604250;, + -1.544050;1.081790;-2.474930;, + -1.544050;-0.299920;-2.369920;, + -1.544050;-0.288631;-2.509480;, + -1.544050;1.081790;-2.474930;, + -1.544050;-0.288631;-2.509480;, + -1.544050;1.099530;-2.604250;, + -1.674070;-0.379267;-1.559630;, + -1.549350;-0.379267;-1.559630;, + -1.674070;-0.379267;-1.559630;, + -1.674070;-0.396629;-1.420710;, + -1.549350;-0.396629;-1.420710;, + -1.674070;-0.396629;-1.420710;, + -1.549350;1.013120;-1.654870;, + -1.674070;1.013120;-1.654870;, + -1.674070;0.997639;-1.525250;, + -1.549350;0.997639;-1.525250;, + -1.549350;1.013120;-1.654870;, + -1.674070;0.997639;-1.525250;, + -1.674070;-0.396629;-1.420710;, + -1.674070;0.997639;-1.525250;, + -1.674070;-0.379267;-1.559630;, + -1.674070;-0.379267;-1.559630;, + -1.674070;0.997639;-1.525250;, + -1.674070;1.013120;-1.654870;, + -1.549350;0.997639;-1.525250;, + -1.549350;-0.396629;-1.420710;, + -1.549350;-0.379267;-1.559630;, + -1.549350;0.997639;-1.525250;, + -1.549350;-0.379267;-1.559630;, + -1.549350;1.013120;-1.654870;, + -3.724350;-0.288630;-2.509480;, + -3.599630;-0.288630;-2.509480;, + -3.724350;-0.288630;-2.509480;, + -3.724350;-0.299919;-2.369920;, + -3.599630;-0.299919;-2.369920;, + -3.724350;-0.299919;-2.369920;, + -3.599630;1.099530;-2.604250;, + -3.724350;1.099530;-2.604250;, + -3.724350;1.081790;-2.474930;, + -3.599630;1.081790;-2.474930;, + -3.599630;1.099530;-2.604250;, + -3.724350;1.081790;-2.474930;, + -3.724350;-0.299919;-2.369920;, + -3.724350;1.081790;-2.474930;, + -3.724350;-0.288630;-2.509480;, + -3.724350;-0.288630;-2.509480;, + -3.724350;1.081790;-2.474930;, + -3.724350;1.099530;-2.604250;, + -3.599630;1.081790;-2.474930;, + -3.599630;-0.299919;-2.369920;, + -3.599630;-0.288630;-2.509480;, + -3.599630;1.081790;-2.474930;, + -3.599630;-0.288630;-2.509480;, + -3.599630;1.099530;-2.604250;, + -3.724350;-0.379267;-1.559630;, + -3.599630;-0.379267;-1.559630;, + -3.724350;-0.379267;-1.559630;, + -3.724350;-0.396629;-1.420710;, + -3.599630;-0.396629;-1.420710;, + -3.724350;-0.396629;-1.420710;, + -3.599630;1.013120;-1.654870;, + -3.724350;1.013120;-1.654870;, + -3.724350;0.997639;-1.525250;, + -3.599630;0.997639;-1.525250;, + -3.599630;1.013120;-1.654870;, + -3.724350;0.997639;-1.525250;, + -3.724350;-0.396629;-1.420710;, + -3.724350;0.997639;-1.525250;, + -3.724350;-0.379267;-1.559630;, + -3.724350;-0.379267;-1.559630;, + -3.724350;0.997639;-1.525250;, + -3.724350;1.013120;-1.654870;, + -3.599630;0.997639;-1.525250;, + -3.599630;-0.396629;-1.420710;, + -3.599630;-0.379267;-1.559630;, + -3.599630;0.997639;-1.525250;, + -3.599630;-0.379267;-1.559630;, + -3.599630;1.013120;-1.654870;; + 96; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,64;, + 3;65,4,66;, + 3;6,7,67;, + 3;68,6,69;, + 3;70,71,72;, + 3;73,74,75;, + 3;76,77,78;, + 3;79,80,81;, + 3;82,83,84;, + 3;85,86,87;, + 3;8,10,9;, + 3;11,8,9;, + 3;12,13,88;, + 3;89,12,90;, + 3;14,15,91;, + 3;92,14,93;, + 3;94,95,96;, + 3;97,98,99;, + 3;100,101,102;, + 3;103,104,105;, + 3;106,107,108;, + 3;109,110,111;, + 3;16,18,17;, + 3;19,16,17;, + 3;20,21,112;, + 3;113,20,114;, + 3;22,23,115;, + 3;116,22,117;, + 3;118,119,120;, + 3;121,122,123;, + 3;124,125,126;, + 3;127,128,129;, + 3;130,131,132;, + 3;133,134,135;, + 3;24,26,25;, + 3;27,24,25;, + 3;28,29,136;, + 3;137,28,138;, + 3;30,31,139;, + 3;140,30,141;, + 3;142,143,144;, + 3;145,146,147;, + 3;148,149,150;, + 3;151,152,153;, + 3;154,155,156;, + 3;157,158,159;, + 3;32,34,33;, + 3;35,32,33;, + 3;36,37,160;, + 3;161,36,162;, + 3;38,39,163;, + 3;164,38,165;, + 3;166,167,168;, + 3;169,170,171;, + 3;172,173,174;, + 3;175,176,177;, + 3;178,179,180;, + 3;181,182,183;, + 3;40,42,41;, + 3;43,40,41;, + 3;44,45,184;, + 3;185,44,186;, + 3;46,47,187;, + 3;188,46,189;, + 3;190,191,192;, + 3;193,194,195;, + 3;196,197,198;, + 3;199,200,201;, + 3;202,203,204;, + 3;205,206,207;, + 3;48,50,49;, + 3;51,48,49;, + 3;52,53,208;, + 3;209,52,210;, + 3;54,55,211;, + 3;212,54,213;, + 3;214,215,216;, + 3;217,218,219;, + 3;220,221,222;, + 3;223,224,225;, + 3;226,227,228;, + 3;229,230,231;, + 3;56,58,57;, + 3;59,56,57;, + 3;60,61,232;, + 3;233,60,234;, + 3;62,63,235;, + 3;236,62,237;, + 3;238,239,240;, + 3;241,242,243;, + 3;244,245,246;, + 3;247,248,249;, + 3;250,251,252;, + 3;253,254,255;; + + MeshNormals { + 256; + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.992280;-0.124020;, + 0.000000;-0.992280;-0.124020;, + 0.000000;0.074768;0.997201;, + 0.000000;0.074768;0.997201;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.992280;-0.124020;, + 0.000000;-0.992280;-0.124020;, + 0.000000;0.074768;0.997201;, + 0.000000;0.074768;0.997201;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.992280;-0.124014;, + 0.000000;-0.992280;-0.124014;, + 0.000000;0.074769;0.997201;, + 0.000000;0.074769;0.997201;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.992281;-0.124014;, + 0.000000;-0.992281;-0.124014;, + 0.000000;0.074769;0.997201;, + 0.000000;0.074769;0.997201;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 0.000000;-0.992280;-0.124020;, + 0.000000;-0.992280;-0.124020;, + 0.000000;-0.992280;-0.124020;, + 0.000000;0.074768;0.997201;, + 0.000000;0.074768;0.997201;, + 0.000000;0.074768;0.997201;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 0.000000;-0.992280;-0.124020;, + 0.000000;-0.992280;-0.124020;, + 0.000000;-0.992280;-0.124020;, + 0.000000;0.074768;0.997201;, + 0.000000;0.074768;0.997201;, + 0.000000;0.074768;0.997201;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 0.000000;-0.992280;-0.124014;, + 0.000000;-0.992280;-0.124014;, + 0.000000;-0.992280;-0.124014;, + 0.000000;0.074769;0.997201;, + 0.000000;0.074769;0.997201;, + 0.000000;0.074769;0.997201;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 0.000000;-0.992281;-0.124014;, + 0.000000;-0.992281;-0.124014;, + 0.000000;-0.992281;-0.124014;, + 0.000000;0.074769;0.997201;, + 0.000000;0.074769;0.997201;, + 0.000000;0.074769;0.997201;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;; + 96; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,64;, + 3;65,4,66;, + 3;6,7,67;, + 3;68,6,69;, + 3;70,71,72;, + 3;73,74,75;, + 3;76,77,78;, + 3;79,80,81;, + 3;82,83,84;, + 3;85,86,87;, + 3;8,10,9;, + 3;11,8,9;, + 3;12,13,88;, + 3;89,12,90;, + 3;14,15,91;, + 3;92,14,93;, + 3;94,95,96;, + 3;97,98,99;, + 3;100,101,102;, + 3;103,104,105;, + 3;106,107,108;, + 3;109,110,111;, + 3;16,18,17;, + 3;19,16,17;, + 3;20,21,112;, + 3;113,20,114;, + 3;22,23,115;, + 3;116,22,117;, + 3;118,119,120;, + 3;121,122,123;, + 3;124,125,126;, + 3;127,128,129;, + 3;130,131,132;, + 3;133,134,135;, + 3;24,26,25;, + 3;27,24,25;, + 3;28,29,136;, + 3;137,28,138;, + 3;30,31,139;, + 3;140,30,141;, + 3;142,143,144;, + 3;145,146,147;, + 3;148,149,150;, + 3;151,152,153;, + 3;154,155,156;, + 3;157,158,159;, + 3;32,34,33;, + 3;35,32,33;, + 3;36,37,160;, + 3;161,36,162;, + 3;38,39,163;, + 3;164,38,165;, + 3;166,167,168;, + 3;169,170,171;, + 3;172,173,174;, + 3;175,176,177;, + 3;178,179,180;, + 3;181,182,183;, + 3;40,42,41;, + 3;43,40,41;, + 3;44,45,184;, + 3;185,44,186;, + 3;46,47,187;, + 3;188,46,189;, + 3;190,191,192;, + 3;193,194,195;, + 3;196,197,198;, + 3;199,200,201;, + 3;202,203,204;, + 3;205,206,207;, + 3;48,50,49;, + 3;51,48,49;, + 3;52,53,208;, + 3;209,52,210;, + 3;54,55,211;, + 3;212,54,213;, + 3;214,215,216;, + 3;217,218,219;, + 3;220,221,222;, + 3;223,224,225;, + 3;226,227,228;, + 3;229,230,231;, + 3;56,58,57;, + 3;59,56,57;, + 3;60,61,232;, + 3;233,60,234;, + 3;62,63,235;, + 3;236,62,237;, + 3;238,239,240;, + 3;241,242,243;, + 3;244,245,246;, + 3;247,248,249;, + 3;250,251,252;, + 3;253,254,255;; + } + + MeshTextureCoords { + 256; + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.699814;-0.548370;, + 0.699814;-0.548370;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.278624;-0.542429;, + 0.278624;-0.542429;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.699814;-0.548370;, + 0.699814;-0.548370;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.278624;-0.542429;, + 0.278624;-0.542429;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.699814;-0.548370;, + 0.699814;-0.548370;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.278624;-0.542429;, + 0.278624;-0.542429;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.699814;-0.548370;, + 0.699814;-0.548370;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.278624;-0.542429;, + 0.278624;-0.542429;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.757168;-0.549623;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.699814;-0.548370;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.696424;-0.300613;, + 0.699814;-0.548370;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.699814;-0.548370;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.696424;-0.300613;, + 0.758321;-0.301410;, + 0.699814;-0.548370;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.336112;-0.543522;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.278624;-0.542429;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.275443;-0.293785;, + 0.278624;-0.542429;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.278624;-0.542429;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.275443;-0.293785;, + 0.337055;-0.295011;, + 0.278624;-0.542429;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.757168;-0.549623;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.699814;-0.548370;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.696424;-0.300613;, + 0.699814;-0.548370;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.699814;-0.548370;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.696424;-0.300613;, + 0.758321;-0.301410;, + 0.699814;-0.548370;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.336112;-0.543522;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.278624;-0.542429;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.275443;-0.293785;, + 0.278624;-0.542429;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.278624;-0.542429;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.275443;-0.293785;, + 0.337055;-0.295011;, + 0.278624;-0.542429;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.757168;-0.549623;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.699814;-0.548370;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.696424;-0.300613;, + 0.699814;-0.548370;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.699814;-0.548370;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.696424;-0.300613;, + 0.758321;-0.301410;, + 0.699814;-0.548370;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.336112;-0.543522;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.278624;-0.542429;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.275443;-0.293785;, + 0.278624;-0.542429;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.278624;-0.542429;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.275443;-0.293785;, + 0.337055;-0.295011;, + 0.278624;-0.542429;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.757168;-0.549623;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.699814;-0.548370;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.696424;-0.300613;, + 0.699814;-0.548370;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.699814;-0.548370;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.696424;-0.300613;, + 0.758321;-0.301410;, + 0.699814;-0.548370;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.336112;-0.543522;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.278624;-0.542429;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.275443;-0.293785;, + 0.278624;-0.542429;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.278624;-0.542429;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.275443;-0.293785;, + 0.337055;-0.295011;, + 0.278624;-0.542429;, + 0.337055;-0.295011;, + 0.336112;-0.543522;; + } + + MeshMaterialList { + 1; + 96; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0; + + Material { + 0.800000;0.800000;0.800000;0.000000;; + 0.000000; + 0.000000;0.000000;0.000000;; + 0.000000;0.000000;0.000000;; + + TextureFilename { + "bihull.bmp"; + } + } + } + + VertexDuplicationIndices { + 256; + 64; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 2, + 0, + 2, + 5, + 4, + 5, + 3, + 1, + 7, + 6, + 3, + 7, + 5, + 7, + 2, + 2, + 7, + 1, + 6, + 4, + 0, + 6, + 0, + 3, + 10, + 8, + 10, + 13, + 12, + 13, + 11, + 9, + 15, + 14, + 11, + 15, + 13, + 15, + 10, + 10, + 15, + 9, + 14, + 12, + 8, + 14, + 8, + 11, + 18, + 16, + 18, + 21, + 20, + 21, + 19, + 17, + 23, + 22, + 19, + 23, + 21, + 23, + 18, + 18, + 23, + 17, + 22, + 20, + 16, + 22, + 16, + 19, + 26, + 24, + 26, + 29, + 28, + 29, + 27, + 25, + 31, + 30, + 27, + 31, + 29, + 31, + 26, + 26, + 31, + 25, + 30, + 28, + 24, + 30, + 24, + 27, + 34, + 32, + 34, + 37, + 36, + 37, + 35, + 33, + 39, + 38, + 35, + 39, + 37, + 39, + 34, + 34, + 39, + 33, + 38, + 36, + 32, + 38, + 32, + 35, + 42, + 40, + 42, + 45, + 44, + 45, + 43, + 41, + 47, + 46, + 43, + 47, + 45, + 47, + 42, + 42, + 47, + 41, + 46, + 44, + 40, + 46, + 40, + 43, + 50, + 48, + 50, + 53, + 52, + 53, + 51, + 49, + 55, + 54, + 51, + 55, + 53, + 55, + 50, + 50, + 55, + 49, + 54, + 52, + 48, + 54, + 48, + 51, + 58, + 56, + 58, + 61, + 60, + 61, + 59, + 57, + 63, + 62, + 59, + 63, + 61, + 63, + 58, + 58, + 63, + 57, + 62, + 60, + 56, + 62, + 56, + 59; + } + } + } + + Frame wings { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.102858,0.000000,1.000000;; + } + + Mesh { + 232; + -4.473780;0.990354;-1.090251;, + -0.345427;0.933506;-1.140405;, + -4.473780;0.932796;-1.091078;, + -0.345427;0.991065;-1.139578;, + -4.641020;1.112137;-1.503675;, + -4.641020;1.054581;-1.504503;, + -4.766460;1.131689;-2.085040;, + -4.766460;1.074128;-2.085866;, + -4.543460;1.139982;-2.660581;, + -4.543460;1.082430;-2.661408;, + 0.027874;1.140218;-2.677020;, + 0.027874;1.082668;-2.677857;, + 4.543460;1.139982;-2.660581;, + 4.543460;1.082430;-2.661408;, + 4.766460;1.130975;-2.035712;, + 4.766460;1.073424;-2.036540;, + 4.710710;1.111661;-1.470787;, + 4.710710;1.054106;-1.471615;, + 4.529530;0.990117;-1.073802;, + 4.529530;0.932558;-1.074629;, + 0.393257;0.991065;-1.139578;, + 0.393257;0.933506;-1.140405;, + 0.013937;1.111899;-1.487227;, + 0.013937;1.054343;-1.488064;, + -4.301710;-0.500205;-1.103060;, + -0.332142;-0.553724;-1.156760;, + -4.301710;-0.557592;-1.107570;, + -0.332142;-0.496337;-1.152240;, + -4.462520;-0.352204;-1.507840;, + -4.462520;-0.409591;-1.512360;, + -4.583130;-0.295474;-2.086770;, + -4.583130;-0.352861;-2.091280;, + -4.368720;-0.250351;-2.660590;, + -4.368720;-0.307738;-2.665110;, + 0.026802;-0.249062;-2.676990;, + 0.026802;-0.306449;-2.681500;, + 4.368720;-0.250351;-2.660590;, + 4.368720;-0.307738;-2.665100;, + 4.583130;-0.299342;-2.037580;, + 4.583130;-0.356729;-2.042090;, + 4.529530;-0.354782;-1.475050;, + 4.529530;-0.412169;-1.479570;, + 4.355310;-0.501494;-1.086660;, + 4.355310;-0.558881;-1.091180;, + 0.378131;-0.496337;-1.152240;, + 0.378131;-0.553724;-1.156760;, + 0.013401;-0.353493;-1.491450;, + 0.013401;-0.410880;-1.495960;, + -4.473780;0.990354;-1.090251;, + -0.345427;0.933506;-1.140405;, + -4.473780;0.932796;-1.091078;, + -4.473780;0.990354;-1.090251;, + -4.641020;1.112137;-1.503675;, + -4.473780;0.932796;-1.091078;, + -4.641020;1.054581;-1.504503;, + -4.641020;1.112137;-1.503675;, + -4.766460;1.131689;-2.085040;, + -4.641020;1.054581;-1.504503;, + -4.766460;1.074128;-2.085866;, + -4.766460;1.131689;-2.085040;, + -4.543460;1.139982;-2.660581;, + -4.766460;1.074128;-2.085866;, + -4.543460;1.082430;-2.661408;, + -4.543460;1.139982;-2.660581;, + 0.027874;1.140218;-2.677020;, + -4.543460;1.082430;-2.661408;, + 0.027874;1.082668;-2.677857;, + 0.027874;1.140218;-2.677020;, + 4.543460;1.139982;-2.660581;, + 0.027874;1.082668;-2.677857;, + 4.543460;1.082430;-2.661408;, + 4.543460;1.139982;-2.660581;, + 4.766460;1.130975;-2.035712;, + 4.543460;1.082430;-2.661408;, + 4.766460;1.073424;-2.036540;, + 4.766460;1.130975;-2.035712;, + 4.710710;1.111661;-1.470787;, + 4.766460;1.073424;-2.036540;, + 4.710710;1.054106;-1.471615;, + 4.710710;1.111661;-1.470787;, + 4.529530;0.990117;-1.073802;, + 4.710710;1.054106;-1.471615;, + 4.529530;0.932558;-1.074629;, + 4.529530;0.990117;-1.073802;, + 0.393257;0.991065;-1.139578;, + 4.529530;0.932558;-1.074629;, + 0.393257;0.933506;-1.140405;, + 0.393257;0.991065;-1.139578;, + 0.013937;1.111899;-1.487227;, + 0.393257;0.933506;-1.140405;, + -0.345427;0.991065;-1.139578;, + -0.345427;0.933506;-1.140405;, + 0.013937;1.054343;-1.488064;, + 0.013937;1.111899;-1.487227;, + -0.345427;0.991065;-1.139578;, + 0.013937;1.054343;-1.488064;, + 4.543460;1.082430;-2.661408;, + 4.766460;1.073424;-2.036540;, + 0.027874;1.082668;-2.677857;, + 4.766460;1.073424;-2.036540;, + 4.710710;1.054106;-1.471615;, + 0.027874;1.082668;-2.677857;, + 4.710710;1.054106;-1.471615;, + 4.529530;0.932558;-1.074629;, + 4.529530;0.932558;-1.074629;, + 0.393257;0.933506;-1.140405;, + 0.393257;0.933506;-1.140405;, + 0.013937;1.054343;-1.488064;, + 0.013937;1.054343;-1.488064;, + -0.345427;0.933506;-1.140405;, + -4.473780;0.932796;-1.091078;, + -0.345427;0.933506;-1.140405;, + -4.473780;0.932796;-1.091078;, + -4.641020;1.054581;-1.504503;, + -4.766460;1.074128;-2.085866;, + -4.543460;1.082430;-2.661408;, + -4.641020;1.054581;-1.504503;, + -4.766460;1.074128;-2.085866;, + 4.766460;1.130975;-2.035712;, + 4.543460;1.139982;-2.660581;, + 0.027874;1.140218;-2.677020;, + 4.710710;1.111661;-1.470787;, + 4.766460;1.130975;-2.035712;, + 0.027874;1.140218;-2.677020;, + 4.529530;0.990117;-1.073802;, + 4.710710;1.111661;-1.470787;, + 0.393257;0.991065;-1.139578;, + 4.529530;0.990117;-1.073802;, + 0.013937;1.111899;-1.487227;, + 0.393257;0.991065;-1.139578;, + -4.766460;1.131689;-2.085040;, + -4.543460;1.139982;-2.660581;, + 0.013937;1.111899;-1.487227;, + -0.345427;0.991065;-1.139578;, + -0.345427;0.991065;-1.139578;, + -4.473780;0.990354;-1.090251;, + -4.766460;1.131689;-2.085040;, + -4.641020;1.112137;-1.503675;, + -4.641020;1.112137;-1.503675;, + -4.473780;0.990354;-1.090251;, + -4.301710;-0.500205;-1.103060;, + -0.332142;-0.553724;-1.156760;, + -4.301710;-0.557592;-1.107570;, + -4.301710;-0.500205;-1.103060;, + -4.462520;-0.352204;-1.507840;, + -4.301710;-0.557592;-1.107570;, + -4.462520;-0.409591;-1.512360;, + -4.462520;-0.352204;-1.507840;, + -4.583130;-0.295474;-2.086770;, + -4.462520;-0.409591;-1.512360;, + -4.583130;-0.352861;-2.091280;, + -4.583130;-0.295474;-2.086770;, + -4.368720;-0.250351;-2.660590;, + -4.583130;-0.352861;-2.091280;, + -4.368720;-0.307738;-2.665110;, + -4.368720;-0.250351;-2.660590;, + 0.026802;-0.249062;-2.676990;, + -4.368720;-0.307738;-2.665110;, + 0.026802;-0.306449;-2.681500;, + 0.026802;-0.249062;-2.676990;, + 4.368720;-0.250351;-2.660590;, + 0.026802;-0.306449;-2.681500;, + 4.368720;-0.307738;-2.665100;, + 4.368720;-0.250351;-2.660590;, + 4.583130;-0.299342;-2.037580;, + 4.368720;-0.307738;-2.665100;, + 4.583130;-0.356729;-2.042090;, + 4.583130;-0.299342;-2.037580;, + 4.529530;-0.354782;-1.475050;, + 4.583130;-0.356729;-2.042090;, + 4.529530;-0.412169;-1.479570;, + 4.529530;-0.354782;-1.475050;, + 4.355310;-0.501494;-1.086660;, + 4.529530;-0.412169;-1.479570;, + 4.355310;-0.558881;-1.091180;, + 4.355310;-0.501494;-1.086660;, + 0.378131;-0.496337;-1.152240;, + 4.355310;-0.558881;-1.091180;, + 0.378131;-0.553724;-1.156760;, + 0.378131;-0.496337;-1.152240;, + 0.013401;-0.353493;-1.491450;, + 0.378131;-0.553724;-1.156760;, + -0.332142;-0.496337;-1.152240;, + -0.332142;-0.553724;-1.156760;, + 0.013401;-0.410880;-1.495960;, + 0.013401;-0.353493;-1.491450;, + -0.332142;-0.496337;-1.152240;, + 0.013401;-0.410880;-1.495960;, + 4.368720;-0.307738;-2.665100;, + 4.583130;-0.356729;-2.042090;, + 0.026802;-0.306449;-2.681500;, + 4.583130;-0.356729;-2.042090;, + 4.529530;-0.412169;-1.479570;, + 0.026802;-0.306449;-2.681500;, + 4.529530;-0.412169;-1.479570;, + 4.355310;-0.558881;-1.091180;, + 4.355310;-0.558881;-1.091180;, + 0.378131;-0.553724;-1.156760;, + 0.378131;-0.553724;-1.156760;, + 0.013401;-0.410880;-1.495960;, + 0.013401;-0.410880;-1.495960;, + -0.332142;-0.553724;-1.156760;, + -4.301710;-0.557592;-1.107570;, + -0.332142;-0.553724;-1.156760;, + -4.301710;-0.557592;-1.107570;, + -4.462520;-0.409591;-1.512360;, + -4.583130;-0.352861;-2.091280;, + -4.368720;-0.307738;-2.665110;, + -4.462520;-0.409591;-1.512360;, + -4.583130;-0.352861;-2.091280;, + 4.583130;-0.299342;-2.037580;, + 4.368720;-0.250351;-2.660590;, + 0.026802;-0.249062;-2.676990;, + 4.529530;-0.354782;-1.475050;, + 4.583130;-0.299342;-2.037580;, + 0.026802;-0.249062;-2.676990;, + 4.355310;-0.501494;-1.086660;, + 4.529530;-0.354782;-1.475050;, + 0.378131;-0.496337;-1.152240;, + 4.355310;-0.501494;-1.086660;, + 0.013401;-0.353493;-1.491450;, + 0.378131;-0.496337;-1.152240;, + -4.583130;-0.295474;-2.086770;, + -4.368720;-0.250351;-2.660590;, + 0.013401;-0.353493;-1.491450;, + -0.332142;-0.496337;-1.152240;, + -0.332142;-0.496337;-1.152240;, + -4.301710;-0.500205;-1.103060;, + -4.583130;-0.295474;-2.086770;, + -4.462520;-0.352204;-1.507840;, + -4.462520;-0.352204;-1.507840;, + -4.301710;-0.500205;-1.103060;; + 88; + 3;0,2,1;, + 3;3,48,49;, + 3;4,5,50;, + 3;51,52,53;, + 3;6,7,54;, + 3;55,56,57;, + 3;8,9,58;, + 3;59,60,61;, + 3;10,11,62;, + 3;63,64,65;, + 3;12,13,66;, + 3;67,68,69;, + 3;14,15,70;, + 3;71,72,73;, + 3;16,17,74;, + 3;75,76,77;, + 3;18,19,78;, + 3;79,80,81;, + 3;20,21,82;, + 3;83,84,85;, + 3;22,23,86;, + 3;87,88,89;, + 3;90,91,92;, + 3;93,94,95;, + 3;96,97,98;, + 3;99,100,101;, + 3;102,103,98;, + 3;104,105,98;, + 3;106,107,98;, + 3;108,109,98;, + 3;110,98,111;, + 3;98,112,113;, + 3;98,114,115;, + 3;98,116,117;, + 3;118,119,120;, + 3;121,122,123;, + 3;124,125,120;, + 3;126,127,120;, + 3;128,129,120;, + 3;130,120,131;, + 3;132,120,133;, + 3;134,120,135;, + 3;136,137,120;, + 3;120,138,139;, + 3;24,26,25;, + 3;27,140,141;, + 3;28,29,142;, + 3;143,144,145;, + 3;30,31,146;, + 3;147,148,149;, + 3;32,33,150;, + 3;151,152,153;, + 3;34,35,154;, + 3;155,156,157;, + 3;36,37,158;, + 3;159,160,161;, + 3;38,39,162;, + 3;163,164,165;, + 3;40,41,166;, + 3;167,168,169;, + 3;42,43,170;, + 3;171,172,173;, + 3;44,45,174;, + 3;175,176,177;, + 3;46,47,178;, + 3;179,180,181;, + 3;182,183,184;, + 3;185,186,187;, + 3;188,189,190;, + 3;191,192,193;, + 3;194,195,190;, + 3;196,197,190;, + 3;198,199,190;, + 3;200,201,190;, + 3;202,190,203;, + 3;190,204,205;, + 3;190,206,207;, + 3;190,208,209;, + 3;210,211,212;, + 3;213,214,215;, + 3;216,217,212;, + 3;218,219,212;, + 3;220,221,212;, + 3;222,212,223;, + 3;224,212,225;, + 3;226,212,227;, + 3;228,229,212;, + 3;212,230,231;; + + MeshNormals { + 232; + 0.011949;-0.014367;0.999825;, + 0.011949;-0.014367;0.999825;, + 0.011949;-0.014367;0.999825;, + 0.011949;-0.014367;0.999825;, + -0.927560;-0.005375;0.373635;, + -0.927560;-0.005375;0.373635;, + -0.977521;-0.003025;0.210817;, + -0.977521;-0.003025;0.210817;, + -0.932466;0.005190;-0.361219;, + -0.932466;0.005190;-0.361219;, + -0.003599;0.014540;-0.999888;, + -0.003599;0.014540;-0.999888;, + 0.003643;0.014365;-0.999890;, + 0.003643;0.014365;-0.999890;, + 0.941833;0.004835;-0.336047;, + 0.941833;0.004835;-0.336047;, + 0.995170;-0.001412;0.098160;, + 0.995170;-0.001412;0.098160;, + 0.910404;-0.005943;0.413678;, + 0.910404;-0.005943;0.413678;, + -0.015902;-0.014366;0.999770;, + -0.015902;-0.014366;0.999770;, + -0.677482;-0.010696;0.735462;, + -0.677482;-0.010696;0.735462;, + 0.012429;-0.078342;0.996849;, + 0.012429;-0.078342;0.996849;, + 0.012429;-0.078342;0.996849;, + 0.012427;-0.078513;0.996836;, + -0.932491;-0.028361;0.360079;, + -0.932491;-0.028361;0.360079;, + -0.979166;-0.015909;0.202436;, + -0.979166;-0.015909;0.202436;, + -0.937098;0.027410;-0.347988;, + -0.937098;0.027410;-0.347988;, + -0.003740;0.078346;-0.996919;, + -0.003740;0.078346;-0.996919;, + 0.003789;0.078350;-0.996919;, + 0.003789;0.078350;-0.996919;, + 0.945878;0.025425;-0.323526;, + 0.945878;0.025425;-0.323526;, + 0.995532;-0.007414;0.094129;, + 0.995532;-0.007414;0.094129;, + 0.916339;-0.031439;0.399166;, + 0.916339;-0.031439;0.399166;, + -0.016538;-0.078509;0.996776;, + -0.016538;-0.078509;0.996776;, + -0.691715;-0.056581;0.719950;, + -0.691715;-0.056581;0.719950;, + 0.011949;-0.014367;0.999825;, + 0.011949;-0.014367;0.999825;, + -0.927560;-0.005375;0.373635;, + -0.927559;-0.005369;0.373638;, + -0.927559;-0.005369;0.373638;, + -0.927559;-0.005369;0.373638;, + -0.977521;-0.003025;0.210817;, + -0.977521;-0.003033;0.210816;, + -0.977521;-0.003033;0.210816;, + -0.977521;-0.003033;0.210816;, + -0.932466;0.005190;-0.361219;, + -0.932466;0.005183;-0.361220;, + -0.932466;0.005183;-0.361220;, + -0.932466;0.005183;-0.361220;, + -0.003599;0.014540;-0.999888;, + -0.003596;0.014365;-0.999890;, + -0.003596;0.014365;-0.999890;, + -0.003596;0.014365;-0.999890;, + 0.003643;0.014365;-0.999890;, + 0.003641;0.014540;-0.999888;, + 0.003641;0.014540;-0.999888;, + 0.003641;0.014540;-0.999888;, + 0.941833;0.004835;-0.336047;, + 0.941833;0.004828;-0.336047;, + 0.941833;0.004828;-0.336047;, + 0.941833;0.004828;-0.336047;, + 0.995170;-0.001412;0.098160;, + 0.995170;-0.001412;0.098161;, + 0.995170;-0.001412;0.098161;, + 0.995170;-0.001412;0.098161;, + 0.910404;-0.005943;0.413678;, + 0.910404;-0.005951;0.413677;, + 0.910404;-0.005951;0.413677;, + 0.910404;-0.005951;0.413677;, + -0.015902;-0.014366;0.999770;, + -0.015902;-0.014364;0.999770;, + -0.015902;-0.014364;0.999770;, + -0.015902;-0.014364;0.999770;, + -0.677482;-0.010696;0.735462;, + -0.677450;-0.010568;0.735493;, + -0.677450;-0.010568;0.735493;, + -0.677450;-0.010568;0.735493;, + 0.697055;-0.010302;0.716943;, + 0.697055;-0.010302;0.716943;, + 0.697055;-0.010302;0.716943;, + 0.697066;-0.010427;0.716931;, + 0.697066;-0.010427;0.716931;, + 0.697066;-0.010427;0.716931;, + -0.000000;-0.999896;-0.014411;, + -0.000000;-0.999896;-0.014411;, + -0.000020;-0.995155;-0.098319;, + 0.002640;-0.999421;-0.033915;, + 0.002640;-0.999421;-0.033915;, + 0.002640;-0.999421;-0.033915;, + 0.062636;-0.961952;-0.265941;, + 0.062636;-0.961952;-0.265941;, + 0.001312;-0.995296;-0.096874;, + 0.001312;-0.995296;-0.096874;, + -0.281605;-0.959175;-0.026133;, + -0.281605;-0.959175;-0.026133;, + 0.301962;-0.953128;-0.019154;, + 0.301962;-0.953128;-0.019154;, + -0.000985;-0.995303;-0.096803;, + -0.000985;-0.995303;-0.096803;, + -0.059505;-0.963815;-0.259846;, + -0.059505;-0.963815;-0.259846;, + 0.000000;-0.999896;-0.014423;, + 0.000000;-0.999896;-0.014423;, + -0.002308;-0.999449;-0.033106;, + -0.002308;-0.999449;-0.033106;, + -0.000000;0.999896;0.014413;, + -0.000000;0.999896;0.014413;, + 0.000021;0.995155;0.098314;, + -0.002640;0.999421;0.033908;, + -0.002640;0.999421;0.033908;, + -0.002640;0.999421;0.033908;, + -0.062635;0.961954;0.265933;, + -0.062635;0.961954;0.265933;, + -0.001312;0.995296;0.096869;, + -0.001312;0.995296;0.096869;, + 0.281602;0.959175;0.026129;, + 0.281602;0.959175;0.026129;, + 0.000000;0.999896;0.014408;, + 0.000000;0.999896;0.014408;, + -0.301959;0.953129;0.019149;, + -0.301959;0.953129;0.019149;, + 0.000985;0.995304;0.096797;, + 0.000985;0.995304;0.096797;, + 0.002311;0.999449;0.033114;, + 0.002311;0.999449;0.033114;, + 0.059504;0.963816;0.259842;, + 0.059504;0.963816;0.259842;, + 0.012427;-0.078513;0.996836;, + 0.012427;-0.078513;0.996836;, + -0.932491;-0.028361;0.360079;, + -0.932482;-0.028301;0.360106;, + -0.932482;-0.028301;0.360106;, + -0.932482;-0.028301;0.360106;, + -0.979166;-0.015909;0.202436;, + -0.979167;-0.015944;0.202430;, + -0.979167;-0.015944;0.202430;, + -0.979167;-0.015944;0.202430;, + -0.937098;0.027410;-0.347988;, + -0.937096;0.027348;-0.347999;, + -0.937096;0.027348;-0.347999;, + -0.937096;0.027348;-0.347999;, + -0.003740;0.078346;-0.996919;, + -0.003743;0.078523;-0.996905;, + -0.003743;0.078523;-0.996905;, + -0.003743;0.078523;-0.996905;, + 0.003789;0.078350;-0.996919;, + 0.003789;0.078346;-0.996919;, + 0.003789;0.078346;-0.996919;, + 0.003789;0.078346;-0.996919;, + 0.945878;0.025425;-0.323526;, + 0.945878;0.025427;-0.323526;, + 0.945878;0.025427;-0.323526;, + 0.945878;0.025427;-0.323526;, + 0.995532;-0.007414;0.094129;, + 0.995533;-0.007397;0.094129;, + 0.995533;-0.007397;0.094129;, + 0.995533;-0.007397;0.094129;, + 0.916339;-0.031439;0.399166;, + 0.916339;-0.031440;0.399166;, + 0.916339;-0.031440;0.399166;, + 0.916339;-0.031440;0.399166;, + -0.016538;-0.078509;0.996776;, + -0.016538;-0.078509;0.996776;, + -0.016538;-0.078509;0.996776;, + -0.016538;-0.078509;0.996776;, + -0.691715;-0.056581;0.719950;, + -0.691746;-0.056702;0.719911;, + -0.691746;-0.056702;0.719911;, + -0.691746;-0.056702;0.719911;, + 0.710989;-0.055215;0.701032;, + 0.710989;-0.055215;0.701032;, + 0.710989;-0.055215;0.701032;, + 0.710979;-0.055096;0.701052;, + 0.710979;-0.055096;0.701052;, + 0.710979;-0.055096;0.701052;, + 0.000000;-0.996922;-0.078394;, + 0.000000;-0.996922;-0.078394;, + -0.000021;-0.986820;-0.161823;, + 0.002746;-0.995200;-0.097822;, + 0.002746;-0.995200;-0.097822;, + 0.002746;-0.995200;-0.097822;, + 0.065131;-0.942804;-0.326923;, + 0.065131;-0.942804;-0.326923;, + 0.001365;-0.987053;-0.160390;, + 0.001365;-0.987053;-0.160390;, + -0.291928;-0.952457;-0.087199;, + -0.291928;-0.952457;-0.087199;, + 0.312879;-0.946432;-0.079832;, + 0.312879;-0.946432;-0.079832;, + -0.001025;-0.987065;-0.160319;, + -0.001025;-0.987065;-0.160319;, + -0.061874;-0.945069;-0.320960;, + -0.061874;-0.945069;-0.320960;, + 0.000000;-0.996923;-0.078393;, + 0.000000;-0.996923;-0.078393;, + -0.002403;-0.995279;-0.097030;, + -0.002403;-0.995279;-0.097030;, + -0.000000;0.996922;0.078394;, + -0.000000;0.996922;0.078394;, + 0.000021;0.986820;0.161822;, + -0.002745;0.995200;0.097820;, + -0.002745;0.995200;0.097820;, + -0.002745;0.995200;0.097820;, + -0.065131;0.942804;0.326923;, + -0.065131;0.942804;0.326923;, + -0.001365;0.987053;0.160389;, + -0.001365;0.987053;0.160389;, + 0.291926;0.952458;0.087199;, + 0.291926;0.952458;0.087199;, + 0.000000;0.996922;0.078394;, + 0.000000;0.996922;0.078394;, + -0.312877;0.946433;0.079832;, + -0.312877;0.946433;0.079832;, + 0.001024;0.987065;0.160318;, + 0.001024;0.987065;0.160318;, + 0.002402;0.995279;0.097028;, + 0.002402;0.995279;0.097028;, + 0.061876;0.945067;0.320966;, + 0.061876;0.945067;0.320966;; + 88; + 3;0,2,1;, + 3;3,48,49;, + 3;4,5,50;, + 3;51,52,53;, + 3;6,7,54;, + 3;55,56,57;, + 3;8,9,58;, + 3;59,60,61;, + 3;10,11,62;, + 3;63,64,65;, + 3;12,13,66;, + 3;67,68,69;, + 3;14,15,70;, + 3;71,72,73;, + 3;16,17,74;, + 3;75,76,77;, + 3;18,19,78;, + 3;79,80,81;, + 3;20,21,82;, + 3;83,84,85;, + 3;22,23,86;, + 3;87,88,89;, + 3;90,91,92;, + 3;93,94,95;, + 3;96,97,98;, + 3;99,100,101;, + 3;102,103,98;, + 3;104,105,98;, + 3;106,107,98;, + 3;108,109,98;, + 3;110,98,111;, + 3;98,112,113;, + 3;98,114,115;, + 3;98,116,117;, + 3;118,119,120;, + 3;121,122,123;, + 3;124,125,120;, + 3;126,127,120;, + 3;128,129,120;, + 3;130,120,131;, + 3;132,120,133;, + 3;134,120,135;, + 3;136,137,120;, + 3;120,138,139;, + 3;24,26,25;, + 3;27,140,141;, + 3;28,29,142;, + 3;143,144,145;, + 3;30,31,146;, + 3;147,148,149;, + 3;32,33,150;, + 3;151,152,153;, + 3;34,35,154;, + 3;155,156,157;, + 3;36,37,158;, + 3;159,160,161;, + 3;38,39,162;, + 3;163,164,165;, + 3;40,41,166;, + 3;167,168,169;, + 3;42,43,170;, + 3;171,172,173;, + 3;44,45,174;, + 3;175,176,177;, + 3;46,47,178;, + 3;179,180,181;, + 3;182,183,184;, + 3;185,186,187;, + 3;188,189,190;, + 3;191,192,193;, + 3;194,195,190;, + 3;196,197,190;, + 3;198,199,190;, + 3;200,201,190;, + 3;202,190,203;, + 3;190,204,205;, + 3;190,206,207;, + 3;190,208,209;, + 3;210,211,212;, + 3;213,214,215;, + 3;216,217,212;, + 3;218,219,212;, + 3;220,221,212;, + 3;222,212,223;, + 3;224,212,225;, + 3;226,212,227;, + 3;228,229,212;, + 3;212,230,231;; + } + + MeshTextureCoords { + 232; + 0.030702;-0.010231;, + 0.463765;-0.041427;, + 0.030702;-0.010746;, + 0.463765;-0.040913;, + 0.013159;-0.267384;, + 0.013159;-0.267899;, + 0.000000;-0.628997;, + 0.000000;-0.629511;, + 0.023393;-0.986988;, + 0.023393;-0.987503;, + 0.502924;-0.997213;, + 0.502924;-0.997734;, + 0.976607;-0.986988;, + 0.976607;-0.987503;, + 1.000000;-0.598315;, + 1.000000;-0.598830;, + 0.994152;-0.246928;, + 0.994152;-0.247442;, + 0.975146;0.000000;, + 0.975146;-0.000514;, + 0.541252;-0.040913;, + 0.541252;-0.041427;, + 0.501462;-0.257153;, + 0.501462;-0.257674;, + 0.048752;-0.018199;, + 0.465158;-0.051600;, + 0.048752;-0.021004;, + 0.465158;-0.048789;, + 0.031883;-0.269975;, + 0.031883;-0.272786;, + 0.019231;-0.630073;, + 0.019231;-0.632879;, + 0.041723;-0.986994;, + 0.041723;-0.989805;, + 0.502812;-0.997195;, + 0.502812;-1.000000;, + 0.958277;-0.986994;, + 0.958277;-0.989799;, + 0.980769;-0.599477;, + 0.980769;-0.602282;, + 0.975146;-0.249579;, + 0.975146;-0.252391;, + 0.956871;-0.007998;, + 0.956871;-0.010809;, + 0.539666;-0.048789;, + 0.539666;-0.051600;, + 0.501406;-0.259780;, + 0.501406;-0.262585;, + 0.030702;-0.010231;, + 0.463765;-0.041427;, + 0.030702;-0.010746;, + 0.030702;-0.010231;, + 0.013159;-0.267384;, + 0.030702;-0.010746;, + 0.013159;-0.267899;, + 0.013159;-0.267384;, + 0.000000;-0.628997;, + 0.013159;-0.267899;, + 0.000000;-0.629511;, + 0.000000;-0.628997;, + 0.023393;-0.986988;, + 0.000000;-0.629511;, + 0.023393;-0.987503;, + 0.023393;-0.986988;, + 0.502924;-0.997213;, + 0.023393;-0.987503;, + 0.502924;-0.997734;, + 0.502924;-0.997213;, + 0.976607;-0.986988;, + 0.502924;-0.997734;, + 0.976607;-0.987503;, + 0.976607;-0.986988;, + 1.000000;-0.598315;, + 0.976607;-0.987503;, + 1.000000;-0.598830;, + 1.000000;-0.598315;, + 0.994152;-0.246928;, + 1.000000;-0.598830;, + 0.994152;-0.247442;, + 0.994152;-0.246928;, + 0.975146;0.000000;, + 0.994152;-0.247442;, + 0.975146;-0.000514;, + 0.975146;0.000000;, + 0.541252;-0.040913;, + 0.975146;-0.000514;, + 0.541252;-0.041427;, + 0.541252;-0.040913;, + 0.501462;-0.257153;, + 0.541252;-0.041427;, + 0.463765;-0.040913;, + 0.463765;-0.041427;, + 0.501462;-0.257674;, + 0.501462;-0.257153;, + 0.463765;-0.040913;, + 0.501462;-0.257674;, + 0.976607;-0.987503;, + 1.000000;-0.598830;, + 0.502924;-0.997734;, + 1.000000;-0.598830;, + 0.994152;-0.247442;, + 0.502924;-0.997734;, + 0.994152;-0.247442;, + 0.975146;-0.000514;, + 0.975146;-0.000514;, + 0.541252;-0.041427;, + 0.541252;-0.041427;, + 0.501462;-0.257674;, + 0.501462;-0.257674;, + 0.463765;-0.041427;, + 0.030702;-0.010746;, + 0.463765;-0.041427;, + 0.030702;-0.010746;, + 0.013159;-0.267899;, + 0.000000;-0.629511;, + 0.023393;-0.987503;, + 0.013159;-0.267899;, + 0.000000;-0.629511;, + 1.000000;-0.598315;, + 0.976607;-0.986988;, + 0.502924;-0.997213;, + 0.994152;-0.246928;, + 1.000000;-0.598315;, + 0.502924;-0.997213;, + 0.975146;0.000000;, + 0.994152;-0.246928;, + 0.541252;-0.040913;, + 0.975146;0.000000;, + 0.501462;-0.257153;, + 0.541252;-0.040913;, + 0.000000;-0.628997;, + 0.023393;-0.986988;, + 0.501462;-0.257153;, + 0.463765;-0.040913;, + 0.463765;-0.040913;, + 0.030702;-0.010231;, + 0.000000;-0.628997;, + 0.013159;-0.267384;, + 0.013159;-0.267384;, + 0.030702;-0.010231;, + 0.048752;-0.018199;, + 0.465158;-0.051600;, + 0.048752;-0.021004;, + 0.048752;-0.018199;, + 0.031883;-0.269975;, + 0.048752;-0.021004;, + 0.031883;-0.272786;, + 0.031883;-0.269975;, + 0.019231;-0.630073;, + 0.031883;-0.272786;, + 0.019231;-0.632879;, + 0.019231;-0.630073;, + 0.041723;-0.986994;, + 0.019231;-0.632879;, + 0.041723;-0.989805;, + 0.041723;-0.986994;, + 0.502812;-0.997195;, + 0.041723;-0.989805;, + 0.502812;-1.000000;, + 0.502812;-0.997195;, + 0.958277;-0.986994;, + 0.502812;-1.000000;, + 0.958277;-0.989799;, + 0.958277;-0.986994;, + 0.980769;-0.599477;, + 0.958277;-0.989799;, + 0.980769;-0.602282;, + 0.980769;-0.599477;, + 0.975146;-0.249579;, + 0.980769;-0.602282;, + 0.975146;-0.252391;, + 0.975146;-0.249579;, + 0.956871;-0.007998;, + 0.975146;-0.252391;, + 0.956871;-0.010809;, + 0.956871;-0.007998;, + 0.539666;-0.048789;, + 0.956871;-0.010809;, + 0.539666;-0.051600;, + 0.539666;-0.048789;, + 0.501406;-0.259780;, + 0.539666;-0.051600;, + 0.465158;-0.048789;, + 0.465158;-0.051600;, + 0.501406;-0.262585;, + 0.501406;-0.259780;, + 0.465158;-0.048789;, + 0.501406;-0.262585;, + 0.958277;-0.989799;, + 0.980769;-0.602282;, + 0.502812;-1.000000;, + 0.980769;-0.602282;, + 0.975146;-0.252391;, + 0.502812;-1.000000;, + 0.975146;-0.252391;, + 0.956871;-0.010809;, + 0.956871;-0.010809;, + 0.539666;-0.051600;, + 0.539666;-0.051600;, + 0.501406;-0.262585;, + 0.501406;-0.262585;, + 0.465158;-0.051600;, + 0.048752;-0.021004;, + 0.465158;-0.051600;, + 0.048752;-0.021004;, + 0.031883;-0.272786;, + 0.019231;-0.632879;, + 0.041723;-0.989805;, + 0.031883;-0.272786;, + 0.019231;-0.632879;, + 0.980769;-0.599477;, + 0.958277;-0.986994;, + 0.502812;-0.997195;, + 0.975146;-0.249579;, + 0.980769;-0.599477;, + 0.502812;-0.997195;, + 0.956871;-0.007998;, + 0.975146;-0.249579;, + 0.539666;-0.048789;, + 0.956871;-0.007998;, + 0.501406;-0.259780;, + 0.539666;-0.048789;, + 0.019231;-0.630073;, + 0.041723;-0.986994;, + 0.501406;-0.259780;, + 0.465158;-0.048789;, + 0.465158;-0.048789;, + 0.048752;-0.018199;, + 0.019231;-0.630073;, + 0.031883;-0.269975;, + 0.031883;-0.269975;, + 0.048752;-0.018199;; + } + + MeshMaterialList { + 1; + 88; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0; + + Material { + 0.800000;0.800000;0.800000;0.000000;; + 0.000000; + 0.000000;0.000000;0.000000;; + 0.000000;0.000000;0.000000;; + + TextureFilename { + "wings.bmp"; + } + } + } + + VertexDuplicationIndices { + 232; + 48; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 0, + 1, + 2, + 0, + 4, + 2, + 5, + 4, + 6, + 5, + 7, + 6, + 8, + 7, + 9, + 8, + 10, + 9, + 11, + 10, + 12, + 11, + 13, + 12, + 14, + 13, + 15, + 14, + 16, + 15, + 17, + 16, + 18, + 17, + 19, + 18, + 20, + 19, + 21, + 20, + 22, + 21, + 3, + 1, + 23, + 22, + 3, + 23, + 13, + 15, + 11, + 15, + 17, + 11, + 17, + 19, + 19, + 21, + 21, + 23, + 23, + 1, + 2, + 1, + 2, + 5, + 7, + 9, + 5, + 7, + 14, + 12, + 10, + 16, + 14, + 10, + 18, + 16, + 20, + 18, + 22, + 20, + 6, + 8, + 22, + 3, + 3, + 0, + 6, + 4, + 4, + 0, + 24, + 25, + 26, + 24, + 28, + 26, + 29, + 28, + 30, + 29, + 31, + 30, + 32, + 31, + 33, + 32, + 34, + 33, + 35, + 34, + 36, + 35, + 37, + 36, + 38, + 37, + 39, + 38, + 40, + 39, + 41, + 40, + 42, + 41, + 43, + 42, + 44, + 43, + 45, + 44, + 46, + 45, + 27, + 25, + 47, + 46, + 27, + 47, + 37, + 39, + 35, + 39, + 41, + 35, + 41, + 43, + 43, + 45, + 45, + 47, + 47, + 25, + 26, + 25, + 26, + 29, + 31, + 33, + 29, + 31, + 38, + 36, + 34, + 40, + 38, + 34, + 42, + 40, + 44, + 42, + 46, + 44, + 30, + 32, + 46, + 27, + 27, + 24, + 30, + 28, + 28, + 24; + } + } + } + + Frame elevator { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; + } + + Mesh { + 130; + -0.128434;-0.037724;3.371460;, + -0.066407;-0.031770;2.810290;, + -0.128434;-0.094919;3.364950;, + -0.066407;0.025424;2.816800;, + -0.397218;-0.084501;3.782320;, + -0.397218;-0.141695;3.775810;, + -1.197060;-0.086840;3.802860;, + -1.197060;-0.144034;3.796350;, + -1.548550;-0.035385;3.350910;, + -1.548550;-0.092580;3.344400;, + -1.569220;0.002036;3.022230;, + -1.569220;-0.055158;3.015720;, + -1.321120;0.044135;2.652450;, + -1.321120;-0.013059;2.645940;, + -0.831407;0.088573;2.262140;, + -0.831407;0.031378;2.255630;, + -0.045731;0.142366;1.789650;, + -0.045731;0.085171;1.783140;, + 0.164738;-0.037724;3.371460;, + 0.164738;-0.094919;3.364950;, + 0.102711;-0.031770;2.810290;, + 0.102711;0.025424;2.816800;, + 0.433521;-0.084501;3.782320;, + 0.433521;-0.141695;3.775810;, + 1.233360;-0.086840;3.802860;, + 1.233360;-0.144034;3.796350;, + 1.584850;-0.035385;3.350920;, + 1.584850;-0.092580;3.344400;, + 1.605530;0.002036;3.022230;, + 1.605530;-0.055158;3.015720;, + 1.357420;0.044135;2.652450;, + 1.357420;-0.013059;2.645940;, + 0.867711;0.088573;2.262140;, + 0.867711;0.031378;2.255630;, + 0.082035;0.142366;1.789650;, + 0.082035;0.085171;1.783140;, + -0.397218;-0.141695;3.775810;, + -0.397218;-0.084501;3.782320;, + -0.397218;-0.141695;3.775810;, + -1.197060;-0.144034;3.796350;, + -1.197060;-0.086840;3.802860;, + -1.197060;-0.144034;3.796350;, + -1.548550;-0.092580;3.344400;, + -1.548550;-0.035385;3.350910;, + -1.548550;-0.092580;3.344400;, + -1.569220;-0.055158;3.015720;, + -1.569220;0.002036;3.022230;, + -1.569220;-0.055158;3.015720;, + -0.045731;0.085171;1.783140;, + -0.045731;0.142366;1.789650;, + -0.045731;0.085171;1.783140;, + -0.045731;0.085171;1.783140;, + -0.066407;-0.031770;2.810290;, + -0.831407;0.031378;2.255630;, + -0.831407;0.031378;2.255630;, + -0.066407;-0.031770;2.810290;, + -1.321120;-0.013059;2.645940;, + -0.128434;-0.094919;3.364950;, + -1.321120;-0.013059;2.645940;, + -0.128434;-0.094919;3.364950;, + -1.569220;-0.055158;3.015720;, + -1.569220;-0.055158;3.015720;, + -1.548550;-0.092580;3.344400;, + -1.548550;-0.092580;3.344400;, + -1.197060;-0.144034;3.796350;, + -1.197060;-0.144034;3.796350;, + -0.397218;-0.141695;3.775810;, + -0.066407;0.025424;2.816800;, + -0.045731;0.142366;1.789650;, + -0.831407;0.088573;2.262140;, + -0.066407;0.025424;2.816800;, + -0.831407;0.088573;2.262140;, + -1.321120;0.044135;2.652450;, + -0.128434;-0.037724;3.371460;, + -1.321120;0.044135;2.652450;, + -0.128434;-0.037724;3.371460;, + -1.569220;0.002036;3.022230;, + -1.569220;0.002036;3.022230;, + -1.548550;-0.035385;3.350910;, + -1.548550;-0.035385;3.350910;, + -1.197060;-0.086840;3.802860;, + -1.197060;-0.086840;3.802860;, + -0.397218;-0.084501;3.782320;, + 0.433521;-0.141695;3.775810;, + 0.433521;-0.084501;3.782320;, + 0.433521;-0.141695;3.775810;, + 1.233360;-0.144034;3.796350;, + 1.233360;-0.086840;3.802860;, + 1.233360;-0.144034;3.796350;, + 1.584850;-0.092580;3.344400;, + 1.584850;-0.035385;3.350920;, + 1.584850;-0.092580;3.344400;, + 1.605530;-0.055158;3.015720;, + 1.605530;0.002036;3.022230;, + 1.605530;-0.055158;3.015720;, + 0.082035;0.085171;1.783140;, + 0.082035;0.142366;1.789650;, + 0.082035;0.085171;1.783140;, + 0.082035;0.085171;1.783140;, + 0.867711;0.031378;2.255630;, + 0.102711;-0.031770;2.810290;, + 0.867711;0.031378;2.255630;, + 1.357420;-0.013059;2.645940;, + 0.102711;-0.031770;2.810290;, + 1.357420;-0.013059;2.645940;, + 0.164738;-0.094919;3.364950;, + 1.605530;-0.055158;3.015720;, + 0.164738;-0.094919;3.364950;, + 1.605530;-0.055158;3.015720;, + 1.584850;-0.092580;3.344400;, + 1.584850;-0.092580;3.344400;, + 1.233360;-0.144034;3.796350;, + 1.233360;-0.144034;3.796350;, + 0.433521;-0.141695;3.775810;, + 0.102711;0.025424;2.816800;, + 0.867711;0.088573;2.262140;, + 0.082035;0.142366;1.789650;, + 0.102711;0.025424;2.816800;, + 1.357420;0.044135;2.652450;, + 0.867711;0.088573;2.262140;, + 0.164738;-0.037724;3.371460;, + 1.357420;0.044135;2.652450;, + 0.164738;-0.037724;3.371460;, + 1.605530;0.002036;3.022230;, + 1.584850;-0.035385;3.350920;, + 1.605530;0.002036;3.022230;, + 1.233360;-0.086840;3.802860;, + 1.584850;-0.035385;3.350920;, + 0.433521;-0.084501;3.782320;, + 1.233360;-0.086840;3.802860;; + 64; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,2;, + 3;0,4,2;, + 3;6,7,36;, + 3;37,6,38;, + 3;8,9,39;, + 3;40,8,41;, + 3;10,11,42;, + 3;43,10,44;, + 3;12,13,45;, + 3;46,12,47;, + 3;14,15,13;, + 3;12,14,13;, + 3;16,17,15;, + 3;14,16,15;, + 3;3,1,48;, + 3;49,3,50;, + 3;51,52,53;, + 3;54,55,56;, + 3;52,57,58;, + 3;56,59,60;, + 3;61,57,62;, + 3;63,57,64;, + 3;65,57,66;, + 3;67,68,69;, + 3;70,71,72;, + 3;73,67,74;, + 3;75,72,76;, + 3;73,77,78;, + 3;73,79,80;, + 3;73,81,82;, + 3;18,20,19;, + 3;21,20,18;, + 3;22,19,23;, + 3;18,19,22;, + 3;24,83,25;, + 3;84,85,24;, + 3;26,86,27;, + 3;87,88,26;, + 3;28,89,29;, + 3;90,91,28;, + 3;30,92,31;, + 3;93,94,30;, + 3;32,31,33;, + 3;30,31,32;, + 3;34,33,35;, + 3;32,33,34;, + 3;21,95,20;, + 3;96,97,21;, + 3;98,99,100;, + 3;101,102,103;, + 3;100,104,105;, + 3;102,106,107;, + 3;108,109,105;, + 3;110,111,105;, + 3;112,113,105;, + 3;114,115,116;, + 3;117,118,119;, + 3;120,121,114;, + 3;122,123,118;, + 3;120,124,125;, + 3;120,126,127;, + 3;120,128,129;; + + MeshNormals { + 130; + 0.968583;-0.028125;0.247096;, + 0.997742;-0.007595;0.066725;, + 0.917723;-0.044923;0.394674;, + 0.999226;-0.004449;0.039087;, + 0.838444;-0.061634;0.541492;, + 0.838444;-0.061634;0.541492;, + 0.025837;-0.113055;0.993253;, + 0.025837;-0.113055;0.993253;, + -0.791285;-0.069150;0.607525;, + -0.791285;-0.069149;0.607525;, + -0.998053;-0.007053;0.061962;, + -0.998053;-0.007053;0.061962;, + -0.755569;0.074084;-0.650867;, + -0.686154;0.082270;-0.722790;, + -0.581366;0.092016;-0.808422;, + -0.546195;0.094732;-0.832284;, + -0.517804;0.096749;-0.850011;, + -0.517804;0.096749;-0.850011;, + -0.968583;-0.028125;0.247095;, + -0.917723;-0.044923;0.394673;, + -0.997742;-0.007595;0.066725;, + -0.999226;-0.004449;0.039087;, + -0.838445;-0.061634;0.541490;, + -0.838445;-0.061634;0.541490;, + -0.025838;-0.113055;0.993253;, + -0.025838;-0.113055;0.993253;, + 0.791282;-0.069203;0.607523;, + 0.791285;-0.069254;0.607513;, + 0.998052;-0.007061;0.061991;, + 0.998052;-0.007056;0.061993;, + 0.755563;0.074085;-0.650873;, + 0.686153;0.082270;-0.722790;, + 0.581367;0.092016;-0.808421;, + 0.546195;0.094732;-0.832284;, + 0.517804;0.096749;-0.850011;, + 0.517804;0.096749;-0.850011;, + 0.025837;-0.113055;0.993253;, + 0.025837;-0.113055;0.993253;, + 0.025837;-0.113055;0.993253;, + -0.791285;-0.069149;0.607525;, + -0.791285;-0.069151;0.607524;, + -0.791285;-0.069151;0.607524;, + -0.998053;-0.007053;0.061962;, + -0.998053;-0.007053;0.061962;, + -0.998053;-0.007053;0.061962;, + -0.832063;0.062731;-0.551122;, + -0.832063;0.062731;-0.551122;, + -0.832063;0.062731;-0.551122;, + 0.999800;-0.002261;0.019868;, + 0.999800;-0.002261;0.019868;, + 0.999800;-0.002261;0.019868;, + 0.000000;-0.993581;-0.113119;, + 0.000000;-0.993581;-0.113120;, + 0.000000;-0.993581;-0.113119;, + 0.000000;-0.993581;-0.113119;, + 0.000000;-0.993581;-0.113119;, + -0.000000;-0.993581;-0.113119;, + 0.000000;-0.993581;-0.113121;, + 0.000000;-0.993581;-0.113121;, + -0.000001;-0.993581;-0.113119;, + -0.000001;-0.993581;-0.113119;, + 0.000001;-0.993581;-0.113125;, + 0.000001;-0.993581;-0.113125;, + 0.000000;-0.993581;-0.113118;, + 0.000000;-0.993581;-0.113118;, + 0.000001;-0.993582;-0.113118;, + 0.000001;-0.993582;-0.113118;, + 0.000000;0.993581;0.113120;, + 0.000001;0.993581;0.113120;, + 0.000001;0.993581;0.113120;, + -0.000001;0.993581;0.113122;, + -0.000001;0.993581;0.113122;, + -0.000000;0.993581;0.113120;, + -0.000000;0.993581;0.113120;, + -0.000000;0.993581;0.113119;, + 0.000000;0.993582;0.113118;, + 0.000000;0.993582;0.113118;, + -0.000000;0.993581;0.113122;, + -0.000000;0.993581;0.113122;, + -0.000000;0.993581;0.113121;, + -0.000000;0.993581;0.113121;, + -0.000001;0.993581;0.113120;, + -0.000001;0.993581;0.113120;, + -0.025838;-0.113055;0.993253;, + -0.025838;-0.113055;0.993253;, + -0.025838;-0.113055;0.993253;, + 0.791285;-0.069254;0.607513;, + 0.791279;-0.069151;0.607533;, + 0.791279;-0.069151;0.607533;, + 0.998052;-0.007056;0.061993;, + 0.998052;-0.007067;0.061990;, + 0.998052;-0.007067;0.061990;, + 0.832053;0.062732;-0.551138;, + 0.832053;0.062732;-0.551138;, + 0.832053;0.062732;-0.551138;, + -0.999800;-0.002261;0.019868;, + -0.999800;-0.002261;0.019868;, + -0.999800;-0.002261;0.019868;, + -0.000000;-0.993581;-0.113119;, + -0.000000;-0.993581;-0.113119;, + -0.000000;-0.993581;-0.113120;, + -0.000000;-0.993581;-0.113119;, + 0.000000;-0.993581;-0.113119;, + -0.000000;-0.993581;-0.113119;, + -0.000000;-0.993581;-0.113121;, + -0.000000;-0.993581;-0.113121;, + 0.000001;-0.993581;-0.113119;, + 0.000001;-0.993581;-0.113119;, + -0.000001;-0.993581;-0.113125;, + -0.000001;-0.993581;-0.113125;, + -0.000000;-0.993581;-0.113118;, + -0.000000;-0.993581;-0.113118;, + -0.000001;-0.993582;-0.113118;, + -0.000001;-0.993582;-0.113118;, + -0.000000;0.993581;0.113120;, + -0.000001;0.993581;0.113120;, + -0.000001;0.993581;0.113120;, + 0.000001;0.993581;0.113122;, + 0.000000;0.993581;0.113120;, + 0.000001;0.993581;0.113122;, + -0.000000;0.993581;0.113120;, + 0.000000;0.993581;0.113119;, + -0.000000;0.993582;0.113118;, + -0.000000;0.993582;0.113118;, + -0.000000;0.993582;0.113118;, + -0.000000;0.993582;0.113118;, + -0.000000;0.993581;0.113123;, + -0.000000;0.993581;0.113123;, + 0.000001;0.993581;0.113120;, + 0.000001;0.993581;0.113120;; + 64; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,2;, + 3;0,4,2;, + 3;6,7,36;, + 3;37,6,38;, + 3;8,9,39;, + 3;40,8,41;, + 3;10,11,42;, + 3;43,10,44;, + 3;12,13,45;, + 3;46,12,47;, + 3;14,15,13;, + 3;12,14,13;, + 3;16,17,15;, + 3;14,16,15;, + 3;3,1,48;, + 3;49,3,50;, + 3;51,52,53;, + 3;54,55,56;, + 3;52,57,58;, + 3;56,59,60;, + 3;61,57,62;, + 3;63,57,64;, + 3;65,57,66;, + 3;67,68,69;, + 3;70,71,72;, + 3;73,67,74;, + 3;75,72,76;, + 3;73,77,78;, + 3;73,79,80;, + 3;73,81,82;, + 3;18,20,19;, + 3;21,20,18;, + 3;22,19,23;, + 3;18,19,22;, + 3;24,83,25;, + 3;84,85,24;, + 3;26,86,27;, + 3;87,88,26;, + 3;28,89,29;, + 3;90,91,28;, + 3;30,92,31;, + 3;93,94,30;, + 3;32,31,33;, + 3;30,31,32;, + 3;34,33,35;, + 3;32,33,34;, + 3;21,95,20;, + 3;96,97,21;, + 3;98,99,100;, + 3;101,102,103;, + 3;100,104,105;, + 3;102,106,107;, + 3;108,109,105;, + 3;110,111,105;, + 3;112,113,105;, + 3;114,115,116;, + 3;117,118,119;, + 3;120,121,114;, + 3;122,123,118;, + 3;120,124,125;, + 3;120,126,127;, + 3;120,128,129;; + } + + MeshTextureCoords { + 130; + 0.728944;-0.039637;, + 0.735880;-0.078113;, + 0.728944;-0.040083;, + 0.735880;-0.077667;, + 0.698889;-0.011466;, + 0.698889;-0.011913;, + 0.609451;-0.010058;, + 0.609451;-0.010504;, + 0.570147;-0.041046;, + 0.570147;-0.041492;, + 0.567836;-0.063581;, + 0.567836;-0.064028;, + 0.595578;-0.088935;, + 0.595578;-0.089381;, + 0.650338;-0.115697;, + 0.650338;-0.116143;, + 0.738192;-0.148093;, + 0.738192;-0.148539;, + 0.761727;-0.039637;, + 0.761727;-0.040083;, + 0.754791;-0.078113;, + 0.754791;-0.077667;, + 0.791782;-0.011466;, + 0.791782;-0.011913;, + 0.881220;-0.010058;, + 0.881220;-0.010504;, + 0.920524;-0.041045;, + 0.920524;-0.041492;, + 0.922836;-0.063581;, + 0.922836;-0.064028;, + 0.895092;-0.088935;, + 0.895092;-0.089381;, + 0.840333;-0.115697;, + 0.840333;-0.116143;, + 0.752479;-0.148093;, + 0.752479;-0.148539;, + 0.698889;-0.011913;, + 0.698889;-0.011466;, + 0.698889;-0.011913;, + 0.609451;-0.010504;, + 0.609451;-0.010058;, + 0.609451;-0.010504;, + 0.570147;-0.041492;, + 0.570147;-0.041046;, + 0.570147;-0.041492;, + 0.567836;-0.064028;, + 0.567836;-0.063581;, + 0.567836;-0.064028;, + 0.738192;-0.148539;, + 0.738192;-0.148093;, + 0.738192;-0.148539;, + 0.738192;-0.148539;, + 0.735880;-0.078113;, + 0.650338;-0.116143;, + 0.650338;-0.116143;, + 0.735880;-0.078113;, + 0.595578;-0.089381;, + 0.728944;-0.040083;, + 0.595578;-0.089381;, + 0.728944;-0.040083;, + 0.567836;-0.064028;, + 0.567836;-0.064028;, + 0.570147;-0.041492;, + 0.570147;-0.041492;, + 0.609451;-0.010504;, + 0.609451;-0.010504;, + 0.698889;-0.011913;, + 0.735880;-0.077667;, + 0.738192;-0.148093;, + 0.650338;-0.115697;, + 0.735880;-0.077667;, + 0.650338;-0.115697;, + 0.595578;-0.088935;, + 0.728944;-0.039637;, + 0.595578;-0.088935;, + 0.728944;-0.039637;, + 0.567836;-0.063581;, + 0.567836;-0.063581;, + 0.570147;-0.041046;, + 0.570147;-0.041046;, + 0.609451;-0.010058;, + 0.609451;-0.010058;, + 0.698889;-0.011466;, + 0.791782;-0.011913;, + 0.791782;-0.011466;, + 0.791782;-0.011913;, + 0.881220;-0.010504;, + 0.881220;-0.010058;, + 0.881220;-0.010504;, + 0.920524;-0.041492;, + 0.920524;-0.041045;, + 0.920524;-0.041492;, + 0.922836;-0.064028;, + 0.922836;-0.063581;, + 0.922836;-0.064028;, + 0.752479;-0.148539;, + 0.752479;-0.148093;, + 0.752479;-0.148539;, + 0.752479;-0.148539;, + 0.840333;-0.116143;, + 0.754791;-0.078113;, + 0.840333;-0.116143;, + 0.895092;-0.089381;, + 0.754791;-0.078113;, + 0.895092;-0.089381;, + 0.761727;-0.040083;, + 0.922836;-0.064028;, + 0.761727;-0.040083;, + 0.922836;-0.064028;, + 0.920524;-0.041492;, + 0.920524;-0.041492;, + 0.881220;-0.010504;, + 0.881220;-0.010504;, + 0.791782;-0.011913;, + 0.754791;-0.077667;, + 0.840333;-0.115697;, + 0.752479;-0.148093;, + 0.754791;-0.077667;, + 0.895092;-0.088935;, + 0.840333;-0.115697;, + 0.761727;-0.039637;, + 0.895092;-0.088935;, + 0.761727;-0.039637;, + 0.922836;-0.063581;, + 0.920524;-0.041045;, + 0.922836;-0.063581;, + 0.881220;-0.010058;, + 0.920524;-0.041045;, + 0.791782;-0.011466;, + 0.881220;-0.010058;; + } + + MeshMaterialList { + 1; + 64; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0; + + Material { + 0.800000;0.800000;0.800000;0.000000;; + 0.000000; + 0.000000;0.000000;0.000000;; + 0.000000;0.000000;0.000000;; + + TextureFilename { + "bihull.bmp"; + } + } + } + + VertexDuplicationIndices { + 130; + 36; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 5, + 4, + 5, + 7, + 6, + 7, + 9, + 8, + 9, + 11, + 10, + 11, + 17, + 16, + 17, + 17, + 1, + 15, + 15, + 1, + 13, + 2, + 13, + 2, + 11, + 11, + 9, + 9, + 7, + 7, + 5, + 3, + 16, + 14, + 3, + 14, + 12, + 0, + 12, + 0, + 10, + 10, + 8, + 8, + 6, + 6, + 4, + 23, + 22, + 23, + 25, + 24, + 25, + 27, + 26, + 27, + 29, + 28, + 29, + 35, + 34, + 35, + 35, + 33, + 20, + 33, + 31, + 20, + 31, + 19, + 29, + 19, + 29, + 27, + 27, + 25, + 25, + 23, + 21, + 32, + 34, + 21, + 30, + 32, + 18, + 30, + 18, + 28, + 26, + 28, + 24, + 26, + 22, + 24; + } + } + } + + Frame landing_ge { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; + } + + Mesh { + 115; + -0.332232;-0.839157;-2.205240;, + -0.301452;-0.399248;-1.389050;, + -0.466850;-0.782954;-2.205250;, + -0.166834;-0.455451;-1.389050;, + -0.118593;-0.343572;-2.500480;, + -0.253211;-0.287369;-2.500480;, + -0.104810;-0.311602;-2.622040;, + -0.239428;-0.255398;-2.622040;, + -0.366690;-0.919094;-2.309440;, + -0.501308;-0.862891;-2.309440;, + -0.373581;-0.935075;-2.092360;, + -0.508199;-0.878872;-2.092360;, + -0.184063;-0.495413;-1.206710;, + -0.318681;-0.439210;-1.206710;, + 0.350102;-0.839157;-2.205240;, + 0.484721;-0.782954;-2.205250;, + 0.319323;-0.399248;-1.389050;, + 0.184705;-0.455451;-1.389050;, + 0.136464;-0.343572;-2.500480;, + 0.271082;-0.287369;-2.500480;, + 0.122681;-0.311602;-2.622040;, + 0.257299;-0.255398;-2.622040;, + 0.384560;-0.919094;-2.309440;, + 0.519178;-0.862891;-2.309440;, + 0.391452;-0.935075;-2.092360;, + 0.526070;-0.878872;-2.092360;, + 0.201934;-0.495413;-1.206710;, + 0.336552;-0.439210;-1.206710;, + 0.477166;-0.784128;-2.245480;, + -0.472640;-0.875959;-2.086410;, + -0.472640;-0.784128;-2.245480;, + 0.477166;-0.875959;-2.086410;, + 0.477166;-0.967799;-2.245470;, + -0.472640;-0.967799;-2.245470;, + -0.466850;-0.782954;-2.205250;, + -0.332232;-0.839157;-2.205240;, + -0.466850;-0.782954;-2.205250;, + -0.501308;-0.862891;-2.309440;, + -0.366690;-0.919094;-2.309440;, + -0.501308;-0.862891;-2.309440;, + -0.508199;-0.878872;-2.092360;, + -0.373581;-0.935075;-2.092360;, + -0.508199;-0.878872;-2.092360;, + -0.318681;-0.439210;-1.206710;, + -0.301452;-0.399248;-1.389050;, + -0.508199;-0.878872;-2.092360;, + -0.301452;-0.399248;-1.389050;, + -0.466850;-0.782954;-2.205250;, + -0.508199;-0.878872;-2.092360;, + -0.466850;-0.782954;-2.205250;, + -0.501308;-0.862891;-2.309440;, + -0.239428;-0.255398;-2.622040;, + -0.501308;-0.862891;-2.309440;, + -0.253211;-0.287369;-2.500480;, + -0.253211;-0.287369;-2.500480;, + -0.166834;-0.455451;-1.389050;, + -0.184063;-0.495413;-1.206710;, + -0.373581;-0.935075;-2.092360;, + -0.332232;-0.839157;-2.205240;, + -0.166834;-0.455451;-1.389050;, + -0.373581;-0.935075;-2.092360;, + -0.332232;-0.839157;-2.205240;, + -0.366690;-0.919094;-2.309440;, + -0.366690;-0.919094;-2.309440;, + -0.104810;-0.311602;-2.622040;, + -0.118593;-0.343572;-2.500480;, + -0.118593;-0.343572;-2.500480;, + 0.484721;-0.782954;-2.205250;, + 0.350102;-0.839157;-2.205240;, + 0.484721;-0.782954;-2.205250;, + 0.519178;-0.862891;-2.309440;, + 0.384560;-0.919094;-2.309440;, + 0.519178;-0.862891;-2.309440;, + 0.526070;-0.878872;-2.092360;, + 0.391452;-0.935075;-2.092360;, + 0.526070;-0.878872;-2.092360;, + 0.336552;-0.439210;-1.206710;, + 0.526070;-0.878872;-2.092360;, + 0.319323;-0.399248;-1.389050;, + 0.319323;-0.399248;-1.389050;, + 0.526070;-0.878872;-2.092360;, + 0.484721;-0.782954;-2.205250;, + 0.519178;-0.862891;-2.309440;, + 0.484721;-0.782954;-2.205250;, + 0.257299;-0.255398;-2.622040;, + 0.271082;-0.287369;-2.500480;, + 0.519178;-0.862891;-2.309440;, + 0.271082;-0.287369;-2.500480;, + 0.184705;-0.455451;-1.389050;, + 0.391452;-0.935075;-2.092360;, + 0.201934;-0.495413;-1.206710;, + 0.350102;-0.839157;-2.205240;, + 0.391452;-0.935075;-2.092360;, + 0.184705;-0.455451;-1.389050;, + 0.350102;-0.839157;-2.205240;, + 0.384560;-0.919094;-2.309440;, + 0.384560;-0.919094;-2.309440;, + 0.136464;-0.343572;-2.500480;, + 0.122681;-0.311602;-2.622040;, + 0.136464;-0.343572;-2.500480;, + -0.472640;-0.784128;-2.245480;, + 0.477166;-0.784128;-2.245480;, + -0.472640;-0.784128;-2.245480;, + 0.477166;-0.875959;-2.086410;, + -0.472640;-0.875959;-2.086410;, + -0.472640;-0.967799;-2.245470;, + 0.477166;-0.967799;-2.245470;, + 0.477166;-0.875959;-2.086410;, + -0.472640;-0.967799;-2.245470;, + -0.472640;-0.784128;-2.245480;, + -0.472640;-0.967799;-2.245470;, + -0.472640;-0.875959;-2.086410;, + 0.477166;-0.967799;-2.245470;, + 0.477166;-0.784128;-2.245480;, + 0.477166;-0.875959;-2.086410;; + 48; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,34;, + 3;35,4,36;, + 3;8,9,7;, + 3;6,8,7;, + 3;10,11,37;, + 3;38,10,39;, + 3;12,13,40;, + 3;41,12,42;, + 3;43,44,45;, + 3;46,47,48;, + 3;45,49,50;, + 3;51,52,53;, + 3;54,50,47;, + 3;55,56,57;, + 3;58,59,60;, + 3;61,57,62;, + 3;63,64,65;, + 3;62,66,58;, + 3;14,16,15;, + 3;17,16,14;, + 3;18,67,19;, + 3;68,69,18;, + 3;22,21,23;, + 3;20,21,22;, + 3;24,70,25;, + 3;71,72,24;, + 3;26,73,27;, + 3;74,75,26;, + 3;76,77,78;, + 3;79,80,81;, + 3;77,82,83;, + 3;84,85,86;, + 3;87,81,82;, + 3;88,89,90;, + 3;91,92,93;, + 3;94,95,89;, + 3;96,97,98;, + 3;95,91,99;, + 3;28,30,29;, + 3;31,28,29;, + 3;32,33,100;, + 3;101,32,102;, + 3;103,104,105;, + 3;106,107,108;, + 3;109,110,111;, + 3;112,113,114;; + + MeshNormals { + 115; + 0.342963;0.821428;-0.455666;, + 0.342963;0.821428;-0.455666;, + 0.342978;0.821423;-0.455664;, + 0.342948;0.821433;-0.455668;, + 0.184888;0.442924;0.877288;, + 0.184914;0.442907;0.877292;, + -0.164614;-0.394279;-0.904127;, + -0.164613;-0.394279;-0.904127;, + -0.164613;-0.394279;-0.904127;, + -0.164612;-0.394279;-0.904128;, + -0.384038;-0.919853;-0.079908;, + -0.384038;-0.919853;-0.079908;, + -0.338924;-0.811793;0.475523;, + -0.338924;-0.811794;0.475523;, + -0.342962;0.821429;-0.455666;, + -0.342976;0.821424;-0.455664;, + -0.342962;0.821429;-0.455666;, + -0.342948;0.821434;-0.455668;, + -0.184888;0.442925;0.877288;, + -0.184914;0.442907;0.877292;, + 0.164614;-0.394279;-0.904127;, + 0.164613;-0.394279;-0.904127;, + 0.164613;-0.394279;-0.904127;, + 0.164612;-0.394279;-0.904127;, + 0.384038;-0.919853;-0.079910;, + 0.384038;-0.919853;-0.079910;, + 0.338924;-0.811793;0.475523;, + 0.338924;-0.811794;0.475523;, + 0.000000;0.866045;0.499967;, + 0.000000;0.866045;0.499967;, + 0.000000;0.866045;0.499967;, + 0.000000;0.866045;0.499967;, + 0.000000;-0.000055;-1.000000;, + 0.000000;-0.000055;-1.000000;, + 0.184914;0.442907;0.877292;, + 0.184863;0.442942;0.877284;, + 0.184863;0.442942;0.877284;, + -0.384038;-0.919853;-0.079908;, + -0.384038;-0.919853;-0.079909;, + -0.384038;-0.919853;-0.079909;, + -0.338924;-0.811794;0.475523;, + -0.338924;-0.811793;0.475523;, + -0.338924;-0.811793;0.475523;, + -0.918309;0.395863;-0.000011;, + -0.918309;0.395863;-0.000011;, + -0.918310;0.395863;-0.000011;, + -0.918311;0.395861;-0.000009;, + -0.918310;0.395862;-0.000009;, + -0.918311;0.395861;-0.000009;, + -0.918310;0.395862;-0.000008;, + -0.918310;0.395863;-0.000009;, + -0.918309;0.395864;-0.000007;, + -0.918309;0.395864;-0.000007;, + -0.918309;0.395864;-0.000007;, + -0.918309;0.395863;-0.000010;, + 0.918309;-0.395864;0.000011;, + 0.918309;-0.395864;0.000011;, + 0.918310;-0.395863;0.000011;, + 0.918310;-0.395862;0.000009;, + 0.918310;-0.395861;0.000009;, + 0.918310;-0.395861;0.000009;, + 0.918310;-0.395862;0.000008;, + 0.918310;-0.395863;0.000009;, + 0.918310;-0.395863;0.000011;, + 0.918310;-0.395863;0.000011;, + 0.918310;-0.395863;0.000011;, + 0.918309;-0.395863;0.000010;, + -0.184914;0.442907;0.877292;, + -0.184862;0.442943;0.877284;, + -0.184862;0.442943;0.877284;, + 0.384038;-0.919853;-0.079910;, + 0.384038;-0.919853;-0.079910;, + 0.384038;-0.919853;-0.079910;, + 0.338924;-0.811794;0.475523;, + 0.338924;-0.811793;0.475523;, + 0.338924;-0.811793;0.475523;, + 0.918309;0.395863;-0.000011;, + 0.918310;0.395863;-0.000012;, + 0.918309;0.395863;-0.000011;, + 0.918310;0.395861;-0.000009;, + 0.918310;0.395861;-0.000009;, + 0.918311;0.395861;-0.000012;, + 0.918311;0.395859;-0.000016;, + 0.918312;0.395857;-0.000013;, + 0.918310;0.395862;-0.000008;, + 0.918310;0.395862;-0.000008;, + 0.918310;0.395862;-0.000008;, + 0.918311;0.395860;-0.000016;, + -0.918309;-0.395863;0.000011;, + -0.918309;-0.395864;0.000011;, + -0.918309;-0.395863;0.000011;, + -0.918309;-0.395864;0.000011;, + -0.918308;-0.395865;0.000013;, + -0.918308;-0.395865;0.000013;, + -0.918308;-0.395866;0.000012;, + -0.918310;-0.395863;0.000010;, + -0.918310;-0.395861;0.000012;, + -0.918310;-0.395861;0.000012;, + -0.918310;-0.395861;0.000012;, + -0.918310;-0.395862;0.000009;, + 0.000000;-0.000055;-1.000000;, + 0.000000;-0.000055;-1.000000;, + 0.000000;-0.000055;-1.000000;, + 0.000000;-0.866010;0.500027;, + 0.000000;-0.866010;0.500027;, + 0.000000;-0.866010;0.500027;, + 0.000000;-0.866010;0.500027;, + 0.000000;-0.866010;0.500027;, + 0.000000;-0.866010;0.500027;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;; + 48; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,34;, + 3;35,4,36;, + 3;8,9,7;, + 3;6,8,7;, + 3;10,11,37;, + 3;38,10,39;, + 3;12,13,40;, + 3;41,12,42;, + 3;43,44,45;, + 3;46,47,48;, + 3;45,49,50;, + 3;51,52,53;, + 3;54,50,47;, + 3;55,56,57;, + 3;58,59,60;, + 3;61,57,62;, + 3;63,64,65;, + 3;62,66,58;, + 3;14,16,15;, + 3;17,16,14;, + 3;18,67,19;, + 3;68,69,18;, + 3;22,21,23;, + 3;20,21,22;, + 3;24,70,25;, + 3;71,72,24;, + 3;26,73,27;, + 3;74,75,26;, + 3;76,77,78;, + 3;79,80,81;, + 3;77,82,83;, + 3;84,85,86;, + 3;87,81,82;, + 3;88,89,90;, + 3;91,92,93;, + 3;94,95,89;, + 3;96,97,98;, + 3;95,91,99;, + 3;28,30,29;, + 3;31,28,29;, + 3;32,33,100;, + 3;101,32,102;, + 3;103,104,105;, + 3;106,107,108;, + 3;109,110,111;, + 3;112,113,114;; + } + + MeshTextureCoords { + 115; + 0.765075;-0.667283;, + 0.719267;-0.701212;, + 0.765075;-0.671618;, + 0.719267;-0.696878;, + 0.781645;-0.705506;, + 0.781645;-0.709841;, + 0.788467;-0.707972;, + 0.788467;-0.712307;, + 0.770923;-0.661118;, + 0.770923;-0.665453;, + 0.758739;-0.659886;, + 0.758739;-0.664221;, + 0.709033;-0.693795;, + 0.709033;-0.698130;, + 0.765075;-0.667283;, + 0.765075;-0.671618;, + 0.719267;-0.701212;, + 0.719267;-0.696878;, + 0.781645;-0.705506;, + 0.781645;-0.709841;, + 0.788467;-0.707972;, + 0.788467;-0.712307;, + 0.770923;-0.661118;, + 0.770923;-0.665453;, + 0.758739;-0.659886;, + 0.758739;-0.664221;, + 0.709033;-0.693795;, + 0.709033;-0.698130;, + 0.767333;-0.671528;, + 0.758405;-0.664445;, + 0.767333;-0.671528;, + 0.758405;-0.664445;, + 0.767332;-0.657362;, + 0.767332;-0.657362;, + 0.765075;-0.671618;, + 0.765075;-0.667283;, + 0.765075;-0.671618;, + 0.770923;-0.665453;, + 0.770923;-0.661118;, + 0.770923;-0.665453;, + 0.758739;-0.664221;, + 0.758739;-0.659886;, + 0.758739;-0.664221;, + 0.709033;-0.698130;, + 0.719267;-0.701212;, + 0.758739;-0.664221;, + 0.719267;-0.701212;, + 0.765075;-0.671618;, + 0.758739;-0.664221;, + 0.765075;-0.671618;, + 0.770923;-0.665453;, + 0.788467;-0.712307;, + 0.770923;-0.665453;, + 0.781645;-0.709841;, + 0.781645;-0.709841;, + 0.719267;-0.696878;, + 0.709033;-0.693795;, + 0.758739;-0.659886;, + 0.765075;-0.667283;, + 0.719267;-0.696878;, + 0.758739;-0.659886;, + 0.765075;-0.667283;, + 0.770923;-0.661118;, + 0.770923;-0.661118;, + 0.788467;-0.707972;, + 0.781645;-0.705506;, + 0.781645;-0.705506;, + 0.765075;-0.671618;, + 0.765075;-0.667283;, + 0.765075;-0.671618;, + 0.770923;-0.665453;, + 0.770923;-0.661118;, + 0.770923;-0.665453;, + 0.758739;-0.664221;, + 0.758739;-0.659886;, + 0.758739;-0.664221;, + 0.709033;-0.698130;, + 0.758739;-0.664221;, + 0.719267;-0.701212;, + 0.719267;-0.701212;, + 0.758739;-0.664221;, + 0.765075;-0.671618;, + 0.770923;-0.665453;, + 0.765075;-0.671618;, + 0.788467;-0.712307;, + 0.781645;-0.709841;, + 0.770923;-0.665453;, + 0.781645;-0.709841;, + 0.719267;-0.696878;, + 0.758739;-0.659886;, + 0.709033;-0.693795;, + 0.765075;-0.667283;, + 0.758739;-0.659886;, + 0.719267;-0.696878;, + 0.765075;-0.667283;, + 0.770923;-0.661118;, + 0.770923;-0.661118;, + 0.781645;-0.705506;, + 0.788467;-0.707972;, + 0.781645;-0.705506;, + 0.767333;-0.671528;, + 0.767333;-0.671528;, + 0.767333;-0.671528;, + 0.758405;-0.664445;, + 0.758405;-0.664445;, + 0.767332;-0.657362;, + 0.767332;-0.657362;, + 0.758405;-0.664445;, + 0.767332;-0.657362;, + 0.767333;-0.671528;, + 0.767332;-0.657362;, + 0.758405;-0.664445;, + 0.767332;-0.657362;, + 0.767333;-0.671528;, + 0.758405;-0.664445;; + } + + MeshMaterialList { + 1; + 48; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0; + + Material { + 0.800000;0.800000;0.800000;0.000000;; + 0.000000; + 0.000000;0.000000;0.000000;; + 0.000000;0.000000;0.000000;; + + TextureFilename { + "bihull.bmp"; + } + } + } + + VertexDuplicationIndices { + 115; + 34; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 2, + 0, + 2, + 9, + 8, + 9, + 11, + 10, + 11, + 13, + 1, + 11, + 1, + 2, + 11, + 2, + 9, + 7, + 9, + 5, + 5, + 3, + 12, + 10, + 0, + 3, + 10, + 0, + 8, + 8, + 6, + 4, + 4, + 15, + 14, + 15, + 23, + 22, + 23, + 25, + 24, + 25, + 27, + 25, + 16, + 16, + 25, + 15, + 23, + 15, + 21, + 19, + 23, + 19, + 17, + 24, + 26, + 14, + 24, + 17, + 14, + 22, + 22, + 18, + 20, + 18, + 30, + 28, + 30, + 31, + 29, + 33, + 32, + 31, + 33, + 30, + 33, + 29, + 32, + 28, + 31; + } + } + } + + Frame propeller { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; + } + + Mesh { + 126; + 0.028211;0.340125;-3.703910;, + -0.500602;-0.266123;-3.935770;, + -0.500602;-0.282022;-3.891560;, + 0.028211;0.359467;-3.742510;, + -0.704121;-0.324004;-3.948780;, + -0.704121;-0.339903;-3.916290;, + -0.773006;-0.205283;-3.934830;, + -0.773006;-0.227069;-3.861230;, + -0.674174;-0.021319;-3.880370;, + -0.674175;-0.043106;-3.806770;, + -0.042034;0.423927;-3.730310;, + -0.042034;0.404586;-3.691700;, + 0.765492;0.896056;-3.528760;, + 0.765492;0.917842;-3.602350;, + 0.110126;0.406971;-3.691250;, + 0.110126;0.426312;-3.729860;, + 0.837510;1.110660;-3.470300;, + 0.837510;1.120700;-3.526240;, + 0.722281;1.162050;-3.461600;, + 0.722281;1.183810;-3.494090;, + 0.527832;1.068700;-3.477651;, + 0.527832;1.090480;-3.551250;, + 0.045309;0.476535;-3.678090;, + 0.045309;0.495876;-3.716690;, + 0.041230;0.468197;-3.464810;, + 0.041230;0.575044;-3.803820;, + 0.141430;0.369703;-3.499430;, + 0.141430;0.477488;-3.841010;, + -0.058970;0.369703;-3.499430;, + -0.058970;0.477488;-3.841010;, + 0.041230;0.271208;-3.534050;, + 0.041230;0.379933;-3.878200;, + -0.500602;-0.282022;-3.891560;, + -0.500602;-0.282022;-3.891560;, + -0.500602;-0.266123;-3.935770;, + -0.704121;-0.339903;-3.916290;, + -0.704121;-0.339903;-3.916290;, + -0.704121;-0.324004;-3.948780;, + -0.773006;-0.227069;-3.861230;, + -0.773006;-0.227069;-3.861230;, + -0.773006;-0.205283;-3.934830;, + -0.042034;0.404586;-3.691700;, + 0.028211;0.340125;-3.703910;, + 0.028211;0.359467;-3.742510;, + -0.042034;0.404586;-3.691700;, + 0.028211;0.359467;-3.742510;, + -0.042034;0.423927;-3.730310;, + -0.042034;0.404586;-3.691700;, + -0.500602;-0.282022;-3.891560;, + 0.028211;0.340125;-3.703910;, + -0.674175;-0.043106;-3.806770;, + -0.500602;-0.282022;-3.891560;, + -0.042034;0.404586;-3.691700;, + -0.773006;-0.227069;-3.861230;, + -0.674175;-0.043106;-3.806770;, + -0.773006;-0.227069;-3.861230;, + -0.704121;-0.339903;-3.916290;, + -0.042034;0.423927;-3.730310;, + 0.028211;0.359467;-3.742510;, + -0.500602;-0.266123;-3.935770;, + -0.674174;-0.021319;-3.880370;, + -0.042034;0.423927;-3.730310;, + -0.500602;-0.266123;-3.935770;, + -0.773006;-0.205283;-3.934830;, + -0.674174;-0.021319;-3.880370;, + -0.773006;-0.205283;-3.934830;, + -0.704121;-0.324004;-3.948780;, + 0.765492;0.896056;-3.528760;, + 0.765492;0.896056;-3.528760;, + 0.765492;0.917842;-3.602350;, + 0.837510;1.110660;-3.470300;, + 0.837510;1.110660;-3.470300;, + 0.837510;1.120700;-3.526240;, + 0.722281;1.162050;-3.461600;, + 0.722281;1.162050;-3.461600;, + 0.722281;1.183810;-3.494090;, + 0.110126;0.406971;-3.691250;, + 0.045309;0.476535;-3.678090;, + 0.110126;0.426312;-3.729860;, + 0.110126;0.426312;-3.729860;, + 0.045309;0.476535;-3.678090;, + 0.045309;0.495876;-3.716690;, + 0.765492;0.896056;-3.528760;, + 0.045309;0.476535;-3.678090;, + 0.110126;0.406971;-3.691250;, + 0.765492;0.896056;-3.528760;, + 0.527832;1.068700;-3.477651;, + 0.045309;0.476535;-3.678090;, + 0.722281;1.162050;-3.461600;, + 0.527832;1.068700;-3.477651;, + 0.837510;1.110660;-3.470300;, + 0.722281;1.162050;-3.461600;, + 0.110126;0.426312;-3.729860;, + 0.045309;0.495876;-3.716690;, + 0.765492;0.917842;-3.602350;, + 0.045309;0.495876;-3.716690;, + 0.527832;1.090480;-3.551250;, + 0.765492;0.917842;-3.602350;, + 0.527832;1.090480;-3.551250;, + 0.722281;1.183810;-3.494090;, + 0.722281;1.183810;-3.494090;, + 0.837510;1.120700;-3.526240;, + 0.041230;0.468197;-3.464810;, + 0.041230;0.468197;-3.464810;, + 0.041230;0.575044;-3.803820;, + -0.058970;0.369703;-3.499430;, + -0.058970;0.369703;-3.499430;, + -0.058970;0.477488;-3.841010;, + 0.141430;0.369703;-3.499430;, + 0.041230;0.271208;-3.534050;, + 0.141430;0.477488;-3.841010;, + 0.141430;0.477488;-3.841010;, + 0.041230;0.271208;-3.534050;, + 0.041230;0.379933;-3.878200;, + 0.041230;0.271208;-3.534050;, + 0.041230;0.468197;-3.464810;, + -0.058970;0.369703;-3.499430;, + 0.041230;0.271208;-3.534050;, + 0.141430;0.369703;-3.499430;, + 0.041230;0.468197;-3.464810;, + -0.058970;0.477488;-3.841010;, + 0.041230;0.575044;-3.803820;, + 0.041230;0.379933;-3.878200;, + 0.041230;0.575044;-3.803820;, + 0.141430;0.477488;-3.841010;, + 0.041230;0.379933;-3.878200;; + 52; + 3;0,2,1;, + 3;0,1,3;, + 3;32,5,4;, + 3;33,4,34;, + 3;35,7,6;, + 3;36,6,37;, + 3;38,9,8;, + 3;39,8,40;, + 3;9,11,10;, + 3;9,10,8;, + 3;41,42,43;, + 3;44,45,46;, + 3;47,48,49;, + 3;50,51,52;, + 3;53,48,54;, + 3;55,56,48;, + 3;57,58,59;, + 3;60,61,62;, + 3;63,64,59;, + 3;65,59,66;, + 3;12,14,13;, + 3;13,14,15;, + 3;16,67,17;, + 3;17,68,69;, + 3;18,70,19;, + 3;19,71,72;, + 3;20,73,21;, + 3;21,74,75;, + 3;22,20,23;, + 3;23,20,21;, + 3;76,77,78;, + 3;79,80,81;, + 3;82,83,84;, + 3;85,86,87;, + 3;82,88,89;, + 3;90,91,82;, + 3;92,93,94;, + 3;95,96,97;, + 3;98,99,94;, + 3;94,100,101;, + 3;24,26,25;, + 3;25,26,27;, + 3;28,102,29;, + 3;29,103,104;, + 3;30,105,31;, + 3;31,106,107;, + 3;108,109,110;, + 3;111,112,113;, + 3;114,115,116;, + 3;117,118,119;, + 3;120,121,122;, + 3;123,124,125;; + + MeshNormals { + 126; + 0.775058;-0.581430;-0.247436;, + 0.775058;-0.581430;-0.247436;, + 0.775209;-0.594435;-0.213773;, + 0.773742;-0.566373;-0.283803;, + 0.285789;-0.885233;-0.366997;, + 0.295109;-0.858217;-0.419969;, + -0.868420;-0.467227;-0.165967;, + -0.873871;-0.466163;-0.137987;, + -0.716883;0.668521;0.197887;, + -0.645648;0.718503;0.258633;, + -0.592399;0.756437;0.277250;, + -0.581483;0.727398;0.364378;, + 0.617941;-0.753882;-0.223183;, + 0.614338;-0.740842;-0.271556;, + 0.614338;-0.740842;-0.271556;, + 0.603930;-0.712626;-0.356978;, + 0.951019;-0.304272;-0.054610;, + 0.949850;-0.303673;-0.074613;, + 0.381383;0.768069;0.514409;, + 0.466572;0.832304;0.299302;, + -0.746148;0.628060;0.220917;, + -0.704705;0.672146;0.227180;, + -0.788789;0.549538;0.275353;, + -0.789213;0.576613;0.211329;, + 0.721289;0.660600;0.208204;, + 0.721090;0.660763;0.208379;, + 0.721090;0.660763;0.208379;, + 0.720891;0.660925;0.208554;, + -0.721293;0.660526;0.208428;, + -0.721090;0.660763;0.208379;, + -0.721300;-0.660448;-0.208651;, + -0.721095;-0.660687;-0.208603;, + 0.295109;-0.858217;-0.419969;, + 0.277863;-0.903944;-0.325081;, + 0.277863;-0.903944;-0.325081;, + -0.873871;-0.466163;-0.137987;, + -0.853381;-0.468231;-0.229129;, + -0.853381;-0.468231;-0.229129;, + -0.888981;0.439113;0.129974;, + -0.888980;0.439113;0.129980;, + -0.888980;0.439113;0.129980;, + 0.668263;0.665097;0.333273;, + 0.668263;0.665097;0.333273;, + 0.668263;0.665097;0.333273;, + 0.668244;0.665153;0.333197;, + 0.668244;0.665153;0.333197;, + 0.668244;0.665153;0.333197;, + -0.055995;-0.244388;0.968059;, + -0.009023;-0.299842;0.953946;, + -0.055995;-0.244388;0.968059;, + 0.043524;-0.305908;0.951066;, + 0.043524;-0.305908;0.951066;, + 0.043524;-0.305908;0.951066;, + 0.044301;-0.305389;0.951196;, + 0.044301;-0.305389;0.951196;, + 0.013269;-0.431954;0.901798;, + 0.013269;-0.431954;0.901798;, + 0.059789;0.248151;-0.966874;, + 0.059789;0.248151;-0.966874;, + 0.052087;0.231567;-0.971424;, + 0.050236;0.254194;-0.965848;, + 0.050236;0.254194;-0.965848;, + 0.050236;0.254194;-0.965848;, + 0.053994;0.256665;-0.964991;, + 0.053994;0.256665;-0.964991;, + 0.025950;0.131500;-0.990977;, + 0.025950;0.131500;-0.990977;, + 0.951019;-0.304272;-0.054610;, + 0.948712;-0.303138;-0.089743;, + 0.948712;-0.303138;-0.089743;, + 0.381383;0.768069;0.514409;, + 0.507104;0.848330;0.152257;, + 0.507104;0.848330;0.152257;, + -0.435483;0.863194;0.255443;, + -0.490176;0.724204;0.485031;, + -0.490176;0.724204;0.485031;, + -0.724305;-0.616460;-0.308805;, + -0.724305;-0.616460;-0.308805;, + -0.724305;-0.616460;-0.308805;, + -0.724317;-0.616416;-0.308863;, + -0.724317;-0.616416;-0.308863;, + -0.724317;-0.616416;-0.308863;, + -0.024055;-0.241918;0.969998;, + -0.061008;-0.240125;0.968823;, + -0.061008;-0.240125;0.968823;, + -0.018431;-0.307055;0.951513;, + -0.018431;-0.307055;0.951513;, + -0.018431;-0.307055;0.951513;, + 0.034805;-0.239337;0.970313;, + 0.034805;-0.239337;0.970313;, + -0.038695;-0.250525;0.967336;, + -0.038695;-0.250525;0.967336;, + 0.030220;0.213045;-0.976575;, + 0.030220;0.213045;-0.976575;, + 0.034132;0.304299;-0.951965;, + -0.007806;0.273919;-0.961721;, + -0.007806;0.273919;-0.961721;, + -0.007806;0.273919;-0.961721;, + 0.083968;0.387347;-0.918102;, + 0.083968;0.387347;-0.918102;, + -0.057116;0.368416;-0.927905;, + -0.057116;0.368416;-0.927905;, + -0.721293;0.660526;0.208428;, + -0.720884;0.661003;0.208331;, + -0.720884;0.661003;0.208331;, + -0.721300;-0.660448;-0.208651;, + -0.720888;-0.660928;-0.208555;, + -0.720888;-0.660928;-0.208555;, + 0.721296;-0.660522;-0.208427;, + 0.721296;-0.660522;-0.208427;, + 0.721296;-0.660522;-0.208427;, + 0.720895;-0.660850;-0.208778;, + 0.720895;-0.660850;-0.208778;, + 0.720895;-0.660850;-0.208778;, + -0.000002;-0.331604;0.943419;, + -0.000002;-0.331604;0.943419;, + -0.000002;-0.331604;0.943419;, + 0.000002;-0.331604;0.943419;, + 0.000002;-0.331604;0.943419;, + 0.000002;-0.331604;0.943419;, + -0.000001;0.356214;-0.934405;, + -0.000001;0.356214;-0.934405;, + -0.000001;0.356214;-0.934405;, + 0.000001;0.356213;-0.934405;, + 0.000001;0.356213;-0.934405;, + 0.000001;0.356213;-0.934405;; + 52; + 3;0,2,1;, + 3;0,1,3;, + 3;32,5,4;, + 3;33,4,34;, + 3;35,7,6;, + 3;36,6,37;, + 3;38,9,8;, + 3;39,8,40;, + 3;9,11,10;, + 3;9,10,8;, + 3;41,42,43;, + 3;44,45,46;, + 3;47,48,49;, + 3;50,51,52;, + 3;53,48,54;, + 3;55,56,48;, + 3;57,58,59;, + 3;60,61,62;, + 3;63,64,59;, + 3;65,59,66;, + 3;12,14,13;, + 3;13,14,15;, + 3;16,67,17;, + 3;17,68,69;, + 3;18,70,19;, + 3;19,71,72;, + 3;20,73,21;, + 3;21,74,75;, + 3;22,20,23;, + 3;23,20,21;, + 3;76,77,78;, + 3;79,80,81;, + 3;82,83,84;, + 3;85,86,87;, + 3;82,88,89;, + 3;90,91,82;, + 3;92,93,94;, + 3;95,96,97;, + 3;98,99,94;, + 3;94,100,101;, + 3;24,26,25;, + 3;25,26,27;, + 3;28,102,29;, + 3;29,103,104;, + 3;30,105,31;, + 3;31,106,107;, + 3;108,109,110;, + 3;111,112,113;, + 3;114,115,116;, + 3;117,118,119;, + 3;120,121,122;, + 3;123,124,125;; + } + + MeshMaterialList { + 1; + 52; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0; + + Material { + 0.800000;0.599216;0.401569;0.000000;; + 20.000000; + 0.500000;0.500000;0.500000;; + 0.000000;0.000000;0.000000;; + } + } + + VertexDuplicationIndices { + 126; + 32; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 2, + 2, + 1, + 5, + 5, + 4, + 7, + 7, + 6, + 11, + 0, + 3, + 11, + 3, + 10, + 11, + 2, + 0, + 9, + 2, + 11, + 7, + 9, + 7, + 5, + 10, + 3, + 1, + 8, + 10, + 1, + 6, + 8, + 6, + 4, + 12, + 12, + 13, + 16, + 16, + 17, + 18, + 18, + 19, + 14, + 22, + 15, + 15, + 22, + 23, + 12, + 22, + 14, + 12, + 20, + 22, + 18, + 20, + 16, + 18, + 15, + 23, + 13, + 23, + 21, + 13, + 21, + 19, + 19, + 17, + 24, + 24, + 25, + 28, + 28, + 29, + 26, + 30, + 27, + 27, + 30, + 31, + 30, + 24, + 28, + 30, + 26, + 24, + 29, + 25, + 31, + 25, + 27, + 31; + } + } + } + + Frame rudder { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; + } + + Mesh { + 78; + 0.061133;0.101338;3.037190;, + -0.015619;0.040559;2.809300;, + -0.015619;0.101338;3.037190;, + 0.061133;0.040559;2.809300;, + 0.061133;-0.521583;3.052400;, + -0.015619;-0.521583;3.052400;, + 0.061133;-0.430417;3.341070;, + -0.015619;-0.430417;3.341070;, + 0.061133;-0.065769;3.751280;, + -0.015619;-0.065769;3.751280;, + 0.061133;0.298873;3.948780;, + -0.015619;0.298873;3.948780;, + 0.061133;0.678702;3.903190;, + -0.015619;0.678702;3.903190;, + 0.061133;0.952174;3.660090;, + -0.015619;0.952174;3.660090;, + 0.061133;0.967358;3.341040;, + -0.015619;0.967358;3.341040;, + 0.061133;0.845805;3.052370;, + -0.015619;0.845805;3.052370;, + 0.061133;0.086118;2.049640;, + -0.015619;0.086118;2.049640;, + -0.015619;0.101338;3.037190;, + 0.061133;0.101338;3.037190;, + -0.015619;0.101338;3.037190;, + -0.015619;-0.521583;3.052400;, + 0.061133;-0.521583;3.052400;, + -0.015619;-0.521583;3.052400;, + -0.015619;0.298873;3.948780;, + 0.061133;0.298873;3.948780;, + -0.015619;0.298873;3.948780;, + -0.015619;0.678702;3.903190;, + 0.061133;0.678702;3.903190;, + -0.015619;0.678702;3.903190;, + -0.015619;0.952174;3.660090;, + 0.061133;0.952174;3.660090;, + -0.015619;0.952174;3.660090;, + -0.015619;0.086118;2.049640;, + 0.061133;0.086118;2.049640;, + -0.015619;0.086118;2.049640;, + -0.015619;0.086118;2.049640;, + -0.015619;0.040559;2.809300;, + -0.015619;0.845805;3.052370;, + -0.015619;0.040559;2.809300;, + -0.015619;0.101338;3.037190;, + -0.015619;0.845805;3.052370;, + -0.015619;-0.521583;3.052400;, + -0.015619;-0.430417;3.341070;, + -0.015619;0.101338;3.037190;, + -0.015619;-0.430417;3.341070;, + -0.015619;-0.065769;3.751280;, + -0.015619;-0.065769;3.751280;, + -0.015619;0.298873;3.948780;, + -0.015619;0.298873;3.948780;, + -0.015619;0.678702;3.903190;, + -0.015619;0.678702;3.903190;, + -0.015619;0.967358;3.341040;, + -0.015619;0.952174;3.660090;, + -0.015619;0.967358;3.341040;, + 0.061133;0.040559;2.809300;, + 0.061133;0.086118;2.049640;, + 0.061133;0.845805;3.052370;, + 0.061133;0.101338;3.037190;, + 0.061133;0.040559;2.809300;, + 0.061133;0.845805;3.052370;, + 0.061133;-0.430417;3.341070;, + 0.061133;-0.521583;3.052400;, + 0.061133;0.101338;3.037190;, + 0.061133;-0.065769;3.751280;, + 0.061133;-0.430417;3.341070;, + 0.061133;-0.065769;3.751280;, + 0.061133;0.298873;3.948780;, + 0.061133;0.678702;3.903190;, + 0.061133;0.298873;3.948780;, + 0.061133;0.678702;3.903190;, + 0.061133;0.967358;3.341040;, + 0.061133;0.952174;3.660090;, + 0.061133;0.967358;3.341040;; + 40; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,22;, + 3;23,4,24;, + 3;6,7,25;, + 3;26,6,27;, + 3;8,9,7;, + 3;6,8,7;, + 3;10,11,9;, + 3;8,10,9;, + 3;12,13,28;, + 3;29,12,30;, + 3;14,15,31;, + 3;32,14,33;, + 3;16,17,34;, + 3;35,16,36;, + 3;18,19,17;, + 3;16,18,17;, + 3;20,21,19;, + 3;18,20,19;, + 3;3,1,37;, + 3;38,3,39;, + 3;40,41,42;, + 3;43,44,45;, + 3;46,47,48;, + 3;49,50,44;, + 3;44,51,42;, + 3;50,52,42;, + 3;53,54,42;, + 3;42,55,56;, + 3;54,57,58;, + 3;59,60,61;, + 3;62,63,64;, + 3;65,66,67;, + 3;68,69,62;, + 3;70,62,61;, + 3;71,68,61;, + 3;72,73,61;, + 3;74,61,75;, + 3;76,72,77;; + + MeshNormals { + 78; + 0.000000;-0.966226;0.257696;, + 0.000000;-0.998051;0.062406;, + 0.000000;-0.966226;0.257696;, + 0.000000;-0.999849;-0.017362;, + 0.000000;-0.024410;-0.999702;, + 0.000000;-0.024410;-0.999702;, + 0.000000;-0.874780;0.484520;, + 0.000000;-0.803934;0.594719;, + 0.000000;-0.681213;0.732085;, + 0.000000;-0.592796;0.805353;, + 0.000000;-0.476256;0.879306;, + 0.000000;-0.476256;0.879306;, + 0.000000;0.119173;0.992873;, + 0.000000;0.119173;0.992873;, + 0.000000;0.664385;0.747391;, + 0.000000;0.664385;0.747391;, + 0.000000;0.995195;-0.097917;, + 0.000000;0.969162;-0.246426;, + 0.000000;0.844316;-0.535846;, + 0.000000;0.813354;-0.581769;, + 0.000000;0.797076;-0.603879;, + 0.000000;0.797076;-0.603879;, + 0.000000;-0.024410;-0.999702;, + 0.000000;-0.024410;-0.999702;, + 0.000000;-0.024410;-0.999702;, + 0.000000;-0.953576;0.301153;, + 0.000000;-0.953576;0.301153;, + 0.000000;-0.953576;0.301153;, + 0.000000;0.119173;0.992873;, + 0.000000;0.119173;0.992873;, + 0.000000;0.119173;0.992873;, + 0.000000;0.664385;0.747391;, + 0.000000;0.664385;0.747391;, + 0.000000;0.664385;0.747391;, + 0.000000;0.998869;0.047537;, + 0.000000;0.998869;0.047537;, + 0.000000;0.998869;0.047537;, + 0.000000;-0.998206;-0.059865;, + 0.000000;-0.998206;-0.059865;, + 0.000000;-0.998206;-0.059865;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;; + 40; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,22;, + 3;23,4,24;, + 3;6,7,25;, + 3;26,6,27;, + 3;8,9,7;, + 3;6,8,7;, + 3;10,11,9;, + 3;8,10,9;, + 3;12,13,28;, + 3;29,12,30;, + 3;14,15,31;, + 3;32,14,33;, + 3;16,17,34;, + 3;35,16,36;, + 3;18,19,17;, + 3;16,18,17;, + 3;20,21,19;, + 3;18,20,19;, + 3;3,1,37;, + 3;38,3,39;, + 3;40,41,42;, + 3;43,44,45;, + 3;46,47,48;, + 3;49,50,44;, + 3;44,51,42;, + 3;50,52,42;, + 3;53,54,42;, + 3;42,55,56;, + 3;54,57,58;, + 3;59,60,61;, + 3;62,63,64;, + 3;65,66,67;, + 3;68,69,62;, + 3;70,62,61;, + 3;71,68,61;, + 3;72,73,61;, + 3;74,61,75;, + 3;76,72,77;; + } + + MeshTextureCoords { + 78; + 0.309227;-0.075001;, + 0.317107;-0.090309;, + 0.309227;-0.075001;, + 0.317107;-0.090309;, + 0.389982;-0.073979;, + 0.389982;-0.073979;, + 0.378164;-0.054587;, + 0.378164;-0.054587;, + 0.330891;-0.027031;, + 0.330891;-0.027031;, + 0.283619;-0.013764;, + 0.283619;-0.013764;, + 0.234379;-0.016826;, + 0.234379;-0.016826;, + 0.198926;-0.033157;, + 0.198926;-0.033157;, + 0.196958;-0.054589;, + 0.196958;-0.054589;, + 0.212716;-0.073981;, + 0.212716;-0.073981;, + 0.311200;-0.141340;, + 0.311200;-0.141340;, + 0.309227;-0.075001;, + 0.309227;-0.075001;, + 0.309227;-0.075001;, + 0.389982;-0.073979;, + 0.389982;-0.073979;, + 0.389982;-0.073979;, + 0.283619;-0.013764;, + 0.283619;-0.013764;, + 0.283619;-0.013764;, + 0.234379;-0.016826;, + 0.234379;-0.016826;, + 0.234379;-0.016826;, + 0.198926;-0.033157;, + 0.198926;-0.033157;, + 0.198926;-0.033157;, + 0.311200;-0.141340;, + 0.311200;-0.141340;, + 0.311200;-0.141340;, + 0.311200;-0.141340;, + 0.317107;-0.090309;, + 0.212716;-0.073981;, + 0.317107;-0.090309;, + 0.309227;-0.075001;, + 0.212716;-0.073981;, + 0.389982;-0.073979;, + 0.378164;-0.054587;, + 0.309227;-0.075001;, + 0.378164;-0.054587;, + 0.330891;-0.027031;, + 0.330891;-0.027031;, + 0.283619;-0.013764;, + 0.283619;-0.013764;, + 0.234379;-0.016826;, + 0.234379;-0.016826;, + 0.196958;-0.054589;, + 0.198926;-0.033157;, + 0.196958;-0.054589;, + 0.317107;-0.090309;, + 0.311200;-0.141340;, + 0.212716;-0.073981;, + 0.309227;-0.075001;, + 0.317107;-0.090309;, + 0.212716;-0.073981;, + 0.378164;-0.054587;, + 0.389982;-0.073979;, + 0.309227;-0.075001;, + 0.330891;-0.027031;, + 0.378164;-0.054587;, + 0.330891;-0.027031;, + 0.283619;-0.013764;, + 0.234379;-0.016826;, + 0.283619;-0.013764;, + 0.234379;-0.016826;, + 0.196958;-0.054589;, + 0.198926;-0.033157;, + 0.196958;-0.054589;; + } + + MeshMaterialList { + 1; + 40; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0; + + Material { + 0.800000;0.800000;0.800000;0.000000;; + 0.000000; + 0.000000;0.000000;0.000000;; + 0.000000;0.000000;0.000000;; + + TextureFilename { + "bihull.bmp"; + } + } + } + + VertexDuplicationIndices { + 78; + 22; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 2, + 0, + 2, + 5, + 4, + 5, + 11, + 10, + 11, + 13, + 12, + 13, + 15, + 14, + 15, + 21, + 20, + 21, + 21, + 1, + 19, + 1, + 2, + 19, + 5, + 7, + 2, + 7, + 9, + 9, + 11, + 11, + 13, + 13, + 17, + 15, + 17, + 3, + 20, + 18, + 0, + 3, + 18, + 6, + 4, + 0, + 8, + 6, + 8, + 10, + 12, + 10, + 12, + 16, + 14, + 16; + } + } + } + + Frame wheels { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; + } + + Mesh { + 100; + 0.769060;-0.602981;-2.024790;, + 0.490834;-0.893387;-1.857120;, + 0.490834;-0.602981;-2.024790;, + 0.769060;-0.893387;-1.857120;, + 0.769060;-0.602990;-2.360130;, + 0.490834;-0.602990;-2.360130;, + 0.769060;-0.893404;-2.527790;, + 0.490834;-0.893404;-2.527790;, + 0.769060;-1.183810;-2.360110;, + 0.490834;-1.183810;-2.360110;, + 0.769060;-1.183800;-2.024780;, + 0.490834;-1.183800;-2.024780;, + -0.411969;-0.602981;-2.024790;, + -0.690195;-0.893387;-1.857120;, + -0.690195;-0.602981;-2.024790;, + -0.411969;-0.893387;-1.857120;, + -0.411969;-0.602990;-2.360130;, + -0.690195;-0.602990;-2.360130;, + -0.411969;-0.893404;-2.527790;, + -0.690195;-0.893404;-2.527790;, + -0.411969;-1.183810;-2.360110;, + -0.690195;-1.183810;-2.360110;, + -0.411969;-1.183800;-2.024780;, + -0.690195;-1.183800;-2.024780;, + 0.490834;-0.602981;-2.024790;, + 0.769060;-0.602981;-2.024790;, + 0.490834;-0.602981;-2.024790;, + 0.490834;-0.602990;-2.360130;, + 0.769060;-0.602990;-2.360130;, + 0.490834;-0.602990;-2.360130;, + 0.490834;-0.893404;-2.527790;, + 0.769060;-0.893404;-2.527790;, + 0.490834;-0.893404;-2.527790;, + 0.490834;-1.183810;-2.360110;, + 0.769060;-1.183810;-2.360110;, + 0.490834;-1.183810;-2.360110;, + 0.769060;-0.893387;-1.857120;, + 0.490834;-0.893387;-1.857120;, + 0.490834;-1.183800;-2.024780;, + 0.769060;-1.183800;-2.024780;, + 0.769060;-0.893387;-1.857120;, + 0.490834;-1.183800;-2.024780;, + 0.490834;-0.602981;-2.024790;, + 0.490834;-0.602990;-2.360130;, + 0.490834;-0.893387;-1.857120;, + 0.490834;-0.602990;-2.360130;, + 0.490834;-0.893404;-2.527790;, + 0.490834;-0.893387;-1.857120;, + 0.490834;-0.893404;-2.527790;, + 0.490834;-1.183810;-2.360110;, + 0.490834;-1.183810;-2.360110;, + 0.490834;-1.183800;-2.024780;, + 0.769060;-0.602990;-2.360130;, + 0.769060;-0.602981;-2.024790;, + 0.769060;-0.893387;-1.857120;, + 0.769060;-0.893404;-2.527790;, + 0.769060;-0.602990;-2.360130;, + 0.769060;-0.893387;-1.857120;, + 0.769060;-1.183810;-2.360110;, + 0.769060;-0.893404;-2.527790;, + 0.769060;-1.183800;-2.024780;, + 0.769060;-1.183810;-2.360110;, + -0.690195;-0.602981;-2.024790;, + -0.411969;-0.602981;-2.024790;, + -0.690195;-0.602981;-2.024790;, + -0.690195;-0.602990;-2.360130;, + -0.411969;-0.602990;-2.360130;, + -0.690195;-0.602990;-2.360130;, + -0.690195;-0.893404;-2.527790;, + -0.411969;-0.893404;-2.527790;, + -0.690195;-0.893404;-2.527790;, + -0.690195;-1.183810;-2.360110;, + -0.411969;-1.183810;-2.360110;, + -0.690195;-1.183810;-2.360110;, + -0.411969;-0.893387;-1.857120;, + -0.690195;-0.893387;-1.857120;, + -0.690195;-1.183800;-2.024780;, + -0.411969;-1.183800;-2.024780;, + -0.411969;-0.893387;-1.857120;, + -0.690195;-1.183800;-2.024780;, + -0.690195;-0.602981;-2.024790;, + -0.690195;-0.602990;-2.360130;, + -0.690195;-0.893387;-1.857120;, + -0.690195;-0.602990;-2.360130;, + -0.690195;-0.893404;-2.527790;, + -0.690195;-0.893387;-1.857120;, + -0.690195;-0.893404;-2.527790;, + -0.690195;-1.183810;-2.360110;, + -0.690195;-1.183810;-2.360110;, + -0.690195;-1.183800;-2.024780;, + -0.411969;-0.602990;-2.360130;, + -0.411969;-0.602981;-2.024790;, + -0.411969;-0.893387;-1.857120;, + -0.411969;-0.893404;-2.527790;, + -0.411969;-0.602990;-2.360130;, + -0.411969;-0.893387;-1.857120;, + -0.411969;-1.183810;-2.360110;, + -0.411969;-0.893404;-2.527790;, + -0.411969;-1.183800;-2.024780;, + -0.411969;-1.183810;-2.360110;; + 40; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,24;, + 3;25,4,26;, + 3;6,7,27;, + 3;28,6,29;, + 3;8,9,30;, + 3;31,8,32;, + 3;10,11,33;, + 3;34,10,35;, + 3;36,37,38;, + 3;39,40,41;, + 3;42,43,44;, + 3;45,46,47;, + 3;48,49,44;, + 3;50,51,44;, + 3;52,53,54;, + 3;55,56,57;, + 3;58,59,54;, + 3;60,61,54;, + 3;12,14,13;, + 3;15,12,13;, + 3;16,17,62;, + 3;63,16,64;, + 3;18,19,65;, + 3;66,18,67;, + 3;20,21,68;, + 3;69,20,70;, + 3;22,23,71;, + 3;72,22,73;, + 3;74,75,76;, + 3;77,78,79;, + 3;80,81,82;, + 3;83,84,85;, + 3;86,87,82;, + 3;88,89,82;, + 3;90,91,92;, + 3;93,94,95;, + 3;96,97,92;, + 3;98,99,92;; + + MeshNormals { + 100; + 0.000000;0.500009;0.866020;, + 0.000000;0.500009;0.866020;, + 0.000000;0.500009;0.866020;, + 0.000000;0.500009;0.866020;, + 0.000000;1.000000;-0.000027;, + 0.000000;1.000000;-0.000027;, + 0.000000;0.499976;-0.866039;, + 0.000000;0.499976;-0.866039;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-1.000000;0.000030;, + 0.000000;-1.000000;0.000030;, + 0.000000;0.500009;0.866020;, + 0.000000;0.500009;0.866020;, + 0.000000;0.500009;0.866020;, + 0.000000;0.500009;0.866020;, + 0.000000;1.000000;-0.000027;, + 0.000000;1.000000;-0.000027;, + 0.000000;0.499976;-0.866039;, + 0.000000;0.499976;-0.866039;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-1.000000;0.000030;, + 0.000000;-1.000000;0.000030;, + 0.000000;1.000000;-0.000027;, + 0.000000;1.000000;-0.000027;, + 0.000000;1.000000;-0.000027;, + 0.000000;0.499976;-0.866039;, + 0.000000;0.499976;-0.866039;, + 0.000000;0.499976;-0.866039;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-1.000000;0.000030;, + 0.000000;-1.000000;0.000030;, + 0.000000;-1.000000;0.000030;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 0.000000;1.000000;-0.000027;, + 0.000000;1.000000;-0.000027;, + 0.000000;1.000000;-0.000027;, + 0.000000;0.499976;-0.866039;, + 0.000000;0.499976;-0.866039;, + 0.000000;0.499976;-0.866039;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-1.000000;0.000030;, + 0.000000;-1.000000;0.000030;, + 0.000000;-1.000000;0.000030;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;; + 40; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,24;, + 3;25,4,26;, + 3;6,7,27;, + 3;28,6,29;, + 3;8,9,30;, + 3;31,8,32;, + 3;10,11,33;, + 3;34,10,35;, + 3;36,37,38;, + 3;39,40,41;, + 3;42,43,44;, + 3;45,46,47;, + 3;48,49,44;, + 3;50,51,44;, + 3;52,53,54;, + 3;55,56,57;, + 3;58,59,54;, + 3;60,61,54;, + 3;12,14,13;, + 3;15,12,13;, + 3;16,17,62;, + 3;63,16,64;, + 3;18,19,65;, + 3;66,18,67;, + 3;20,21,68;, + 3;69,20,70;, + 3;22,23,71;, + 3;72,22,73;, + 3;74,75,76;, + 3;77,78,79;, + 3;80,81,82;, + 3;83,84,85;, + 3;86,87,82;, + 3;88,89,82;, + 3;90,91,92;, + 3;93,94,95;, + 3;96,97,92;, + 3;98,99,92;; + } + + MeshMaterialList { + 1; + 40; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0; + + Material { + 0.000000;0.000000;0.000000;0.000000;; + 20.000000; + 0.256863;0.256863;0.256863;; + 0.000000;0.000000;0.000000;; + } + } + + VertexDuplicationIndices { + 100; + 24; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 2, + 0, + 2, + 5, + 4, + 5, + 7, + 6, + 7, + 9, + 8, + 9, + 3, + 1, + 11, + 10, + 3, + 11, + 2, + 5, + 1, + 5, + 7, + 1, + 7, + 9, + 9, + 11, + 4, + 0, + 3, + 6, + 4, + 3, + 8, + 6, + 10, + 8, + 14, + 12, + 14, + 17, + 16, + 17, + 19, + 18, + 19, + 21, + 20, + 21, + 15, + 13, + 23, + 22, + 15, + 23, + 14, + 17, + 13, + 17, + 19, + 13, + 19, + 21, + 21, + 23, + 16, + 12, + 15, + 18, + 16, + 15, + 20, + 18, + 22, + 20; + } + } + } +} \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Resources/bihull.bmp b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Resources/bihull.bmp new file mode 100644 index 00000000..6b22f938 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Resources/bihull.bmp differ diff --git a/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Resources/wings.bmp b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Resources/wings.bmp new file mode 100644 index 00000000..cbb5fbec Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/Resources/wings.bmp differ diff --git a/source/Samples/DirectX/CS/Direct3D10/TextureSwap/TextureSwap.csproj b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/TextureSwap.csproj new file mode 100644 index 00000000..dd619c3c --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/TextureSwap.csproj @@ -0,0 +1,156 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {318D173C-3D21-472C-905F-C37D7E7A66EC} + WinExe + Properties + TextureSwap + TextureSwap + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + + 3.5 + + + + 3.5 + + + 3.5 + + + + + 3.0 + + + 3.0 + + + 3.0 + + + 3.0 + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + TexturizerDemo.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + PreserveNewest + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + {B28ADA8B-BD7E-4C11-8298-C39F7C456365} + MeshLoader + + + + + PreserveNewest + + + PreserveNewest + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/TextureSwap/TextureSwap.sln b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/TextureSwap.sln new file mode 100644 index 00000000..2e15b0e4 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/TextureSwap.sln @@ -0,0 +1,123 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TextureSwap", "TextureSwap.csproj", "{318D173C-3D21-472C-905F-C37D7E7A66EC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX.Direct3DX10", "..\..\..\UtilitiesLibrary\D3DX10Helpers\Direct3DX10.vcproj", "{453FF234-24EC-4CC3-83DA-6D6C54388899}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{BC405E41-0754-4D33-9CB7-49F27B9E0332}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utilities", "Utilities", "{5A188328-DBCC-442F-B0FA-48CEB925F110}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Direct3DUtilities", "..\..\UtilitiesLibrary\D3DUtilities\Direct3DUtilities.csproj", "{8A152DCF-12AE-492B-9F24-060B90B2DDD0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeshLoader", "..\..\UtilitiesLibrary\MeshLoader\MeshLoader.csproj", "{B28ADA8B-BD7E-4C11-8298-C39F7C456365}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|x64.ActiveCfg = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release|Win32.ActiveCfg = Release|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release|x64.ActiveCfg = Release|Any CPU + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.ActiveCfg = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.Build.0 = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.ActiveCfg = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.Build.0 = Release|x64 + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Win32.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|x64.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Win32.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|x64.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Win32.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|x64.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Win32.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|x64.ActiveCfg = Release|Any CPU + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.Build.0 = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.ActiveCfg = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.Build.0 = Release|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Win32.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Win32.Build.0 = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|x64.ActiveCfg = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|x64.Build.0 = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Mixed Platforms.Build.0 = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Win32.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Win32.Build.0 = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|x64.ActiveCfg = Release|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|x64.Build.0 = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Win32.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Win32.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Win32.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|x64.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Win32.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|x64.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} = {BC405E41-0754-4D33-9CB7-49F27B9E0332} + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} = {BC405E41-0754-4D33-9CB7-49F27B9E0332} + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} = {BC405E41-0754-4D33-9CB7-49F27B9E0332} + {453FF234-24EC-4CC3-83DA-6D6C54388899} = {5A188328-DBCC-442F-B0FA-48CEB925F110} + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} = {5A188328-DBCC-442F-B0FA-48CEB925F110} + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} = {5A188328-DBCC-442F-B0FA-48CEB925F110} + {B28ADA8B-BD7E-4C11-8298-C39F7C456365} = {5A188328-DBCC-442F-B0FA-48CEB925F110} + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/CS/Direct3D10/TextureSwap/TexturizerDemo.xaml b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/TexturizerDemo.xaml new file mode 100644 index 00000000..08bc634c --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/TexturizerDemo.xaml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Show one texture at a time. + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D10/TextureSwap/TexturizerDemo.xaml.cs b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/TexturizerDemo.xaml.cs new file mode 100644 index 00000000..14feaf34 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/TextureSwap/TexturizerDemo.xaml.cs @@ -0,0 +1,294 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Media.Media3D; +using System.Windows.Threading; +using Microsoft.WindowsAPICodePack.Controls; +using Microsoft.WindowsAPICodePack.DirectX.Controls; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; +using Microsoft.WindowsAPICodePack.Shell; +using Microsoft.WindowsAPICodePack.DirectX; + +namespace TextureSwap +{ + /// + /// Interaction logic for Window1.xaml + /// + public partial class TexturizerDemo : Window + { + #region instance data + D3DDevice device; + SwapChain swapChain; + RenderTargetView renderTargetView; + Texture2D depthStencil; + DepthStencilView depthStencilView; + ColorRgba backgroundColor = new ColorRgba(GetColorValues(System.Windows.Media.Colors.LightSteelBlue)); + PerspectiveCamera camera = null; + + XMeshManager meshManager; + Texturizer mesh; + + Transform3DGroup modelTransformGroup = new Transform3DGroup(); + AxisAngleRotation3D xAxisRotation = new AxisAngleRotation3D(new Vector3D(1, 0, 0), 0); + AxisAngleRotation3D yAxisRotation = new AxisAngleRotation3D(new Vector3D(0, 1, 0), 0); + AxisAngleRotation3D zAxisRotation = new AxisAngleRotation3D(new Vector3D(0, 0, 1), 0); + ScaleTransform3D modelZoom = new ScaleTransform3D(); + + DispatcherTimer timer = new DispatcherTimer(); + #endregion + + private static float[] GetColorValues(System.Windows.Media.Color color) + { + return new float[] { color.ScR, color.ScG, color.ScB, color.ScA }; + } + + #region construction + public TexturizerDemo() + { + InitializeComponent(); + + this.Loaded += new RoutedEventHandler(Window1_Loaded); + this.SizeChanged += new SizeChangedEventHandler(Window1_SizeChanged); + } + #endregion + + #region D3D Device Initialization + void InitDevice() + { + // create Direct 3D device + device = D3DDevice.CreateDeviceAndSwapChain(renderHost.Handle); + swapChain = device.SwapChain; + + // Create a render target view + using (Texture2D pBuffer = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView(pBuffer); + } + + // Create depth stencil texture + Texture2DDescription descDepth = new Texture2DDescription() + { + Width = (uint)renderHost.ActualWidth, + Height = (uint)renderHost.ActualHeight, + MipLevels = 1, + ArraySize = 1, + Format = Format.D32Float, + SampleDescription = new SampleDescription() + { + Count = 1, + Quality = 0 + }, + BindingOptions = BindingOptions.DepthStencil, + }; + + depthStencil = device.CreateTexture2D(descDepth); + + // Create the depth stencil view + DepthStencilViewDescription depthStencilViewDesc = new DepthStencilViewDescription() + { + Format = descDepth.Format, + ViewDimension = DepthStencilViewDimension.Texture2D + }; + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc); + + // bind the views to the device + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { renderTargetView }, depthStencilView); + + // Setup the viewport + Viewport vp = new Viewport() + { + Width = (uint)renderHost.ActualWidth, + Height = (uint)renderHost.ActualHeight, + MinDepth = 0.0f, + MaxDepth = 1.0f, + TopLeftX = 0, + TopLeftY = 0 + }; + + device.RS.Viewports = new Viewport[] { vp }; + } + #endregion + + #region Scene Initialization + void InitScene() + { + // load mesh + meshManager = new XMeshManager(device); + mesh = meshManager.Open(@"Resources\airplane 2.x"); + // initialize camera + camera = new PerspectiveCamera( + new Point3D(0, 0, -10), + new Vector3D(0, 1, 0), + new Vector3D(0, 1, 0), + 45); + camera.NearPlaneDistance = .1; + camera.FarPlaneDistance = 500; + + // initialize camera transforms + modelTransformGroup.Children.Add(modelZoom); + modelTransformGroup.Children.Add(new RotateTransform3D(yAxisRotation)); + modelTransformGroup.Children.Add(new RotateTransform3D(xAxisRotation)); + modelTransformGroup.Children.Add(new RotateTransform3D(zAxisRotation)); + } + #endregion + + #region Rendering + void timer_Tick(object sender, EventArgs e) + { + RenderScene(); + } + + protected void RenderScene() + { + // update view variables + xAxisRotation.Angle = XAxisSlider.Value; + yAxisRotation.Angle = -YAxisSlider.Value; + zAxisRotation.Angle = ZAxisSlider.Value; + modelZoom.ScaleX = ZoomSlider.Value / 2; + modelZoom.ScaleY = ZoomSlider.Value / 2; + modelZoom.ScaleZ = ZoomSlider.Value / 2; + + // update view + meshManager.SetViewAndProjection( + camera.ToViewLH().ToMatrix4x4F(), + camera.ToPerspectiveLH(renderHost.ActualWidth / renderHost.ActualHeight).ToMatrix4x4F()); + + // clear render target + device.ClearRenderTargetView(renderTargetView, backgroundColor); + + // Clear the depth buffer to 1.0 (max depth) + device.ClearDepthStencilView(depthStencilView, ClearOptions.Depth, 1.0f, (byte)0); + + // render mesh + mesh.LightIntensity = 2.5f; + mesh.Render(modelTransformGroup.Value); + + // present back buffer + swapChain.Present(1, PresentOptions.None); + } + #endregion + + #region UI event handlers + void Window1_Loaded(object sender, RoutedEventArgs e) + { + InitDevice(); + InitScene(); + PartsList.ItemsSource = mesh.GetParts(); + PartsList.SelectedIndex = 0; + + TextureBrowser.NavigationPane = PaneVisibilityState.Show; + TextureBrowser.NavigationTarget = (ShellObject)KnownFolders.PicturesLibrary; + + timer.Interval = TimeSpan.FromMilliseconds(30); + timer.Tick += new EventHandler(timer_Tick); + timer.Start(); + + ShowOneTextureCheck.IsChecked = true; + } + + void Window1_SizeChanged(object sender, SizeChangedEventArgs e) + { + if(device != null) + { + //need to remove the reference to the swapchain's backbuffer to enable ResizeBuffers() call + renderTargetView.Dispose(); + SwapChainDescription sd = swapChain.Description; + swapChain.ResizeBuffers( + sd.BufferCount, + (uint)renderHost.ActualWidth, + (uint)renderHost.ActualHeight, + sd.BufferDescription.Format, + sd.Options); + + using(Texture2D pBuffer = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView(pBuffer); + } + + // Create depth stencil texture + Texture2DDescription descDepth = new Texture2DDescription() + { + Width = (uint)renderHost.ActualWidth, + Height = (uint)renderHost.ActualHeight, + MipLevels = 1, + ArraySize = 1, + Format = Format.D32Float, + SampleDescription = new SampleDescription() + { + Count = 1, + Quality = 0 + }, + BindingOptions = BindingOptions.DepthStencil, + }; + + depthStencil = device.CreateTexture2D(descDepth); + + // Create the depth stencil view + DepthStencilViewDescription depthStencilViewDesc = new DepthStencilViewDescription() + { + Format = descDepth.Format, + ViewDimension = DepthStencilViewDimension.Texture2D + }; + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc); + + // bind the views to the device + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[ ] { renderTargetView }, depthStencilView); + + // Setup the viewport + Viewport vp = new Viewport() + { + Width = (uint)renderHost.ActualWidth, + Height = (uint)renderHost.ActualHeight, + MinDepth = 0.0f, + MaxDepth = 1.0f, + TopLeftX = 0, + TopLeftY = 0 + }; + + device.RS.Viewports = new Viewport[ ] { vp }; + } + } + + private void PartsList_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + mesh.PartToTexture((string)PartsList.SelectedItem); + } + + private void Button_Click(object sender, RoutedEventArgs e) + { + if (TextureBrowser.SelectedItems.Count > 0) + { + ShellObject item = TextureBrowser.SelectedItems[0]; + try + { + ShellFile file = (ShellFile)item; + if (file.Path == null) + { + MessageBox.Show("Unable to obtain file path."); + } + mesh.SwapTexture((string)PartsList.SelectedItem, file.Path); + } + catch(InvalidCastException castException) + { + MessageBox.Show(castException.Message, "Invalid Object selected."); + } + } + } + + private void RevertTextures_Click(object sender, RoutedEventArgs e) + { + mesh.RevertTextures(); + } + + private void ShowOneTexture_Click(object sender, RoutedEventArgs e) + { + mesh.ShowOneTexture = (bool)ShowOneTextureCheck.IsChecked; + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/App.xaml b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/App.xaml new file mode 100644 index 00000000..735442c6 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/App.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/App.xaml.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/App.xaml.cs new file mode 100644 index 00000000..f726aca6 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/App.xaml.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Windows; + +namespace D3D10Tutorial09_WPF +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/D3D10Tutorial09_WPF.csproj b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/D3D10Tutorial09_WPF.csproj new file mode 100644 index 00000000..b5735b38 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/D3D10Tutorial09_WPF.csproj @@ -0,0 +1,127 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {790B3091-7B27-4062-B790-6FDE8C69EB7C} + WinExe + Properties + D3D10Tutorial09_WPF + D3D10Tutorial09_WPF + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + TutorialWindow.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + {B28ADA8B-BD7E-4C11-8298-C39F7C456365} + MeshLoader + + + + + PreserveNewest + + + PreserveNewest + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Media/Tiger/tiger.bmp b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Media/Tiger/tiger.bmp new file mode 100644 index 00000000..17a2f609 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Media/Tiger/tiger.bmp differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Media/Tiger/tiger.x b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Media/Tiger/tiger.x new file mode 100644 index 00000000..a727b50c --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Media/Tiger/tiger.x @@ -0,0 +1,1371 @@ +xof 0302txt 0064 +template Header { + <3D82AB43-62DA-11cf-AB39-0020AF71E433> + WORD major; + WORD minor; + DWORD flags; +} + +template Vector { + <3D82AB5E-62DA-11cf-AB39-0020AF71E433> + FLOAT x; + FLOAT y; + FLOAT z; +} + +template Coords2d { + + FLOAT u; + FLOAT v; +} + +template Matrix4x4 { + + array FLOAT matrix[16]; +} + +template ColorRGBA { + <35FF44E0-6C7C-11cf-8F52-0040333594A3> + FLOAT red; + FLOAT green; + FLOAT blue; + FLOAT alpha; +} + +template ColorRGB { + + FLOAT red; + FLOAT green; + FLOAT blue; +} + +template IndexedColor { + <1630B820-7842-11cf-8F52-0040333594A3> + DWORD index; + ColorRGBA indexColor; +} + +template Boolean { + <4885AE61-78E8-11cf-8F52-0040333594A3> + WORD truefalse; +} + +template Boolean2d { + <4885AE63-78E8-11cf-8F52-0040333594A3> + Boolean u; + Boolean v; +} + +template MaterialWrap { + <4885AE60-78E8-11cf-8F52-0040333594A3> + Boolean u; + Boolean v; +} + +template TextureFilename { + + STRING filename; +} + +template Material { + <3D82AB4D-62DA-11cf-AB39-0020AF71E433> + ColorRGBA faceColor; + FLOAT power; + ColorRGB specularColor; + ColorRGB emissiveColor; + [...] +} + +template MeshFace { + <3D82AB5F-62DA-11cf-AB39-0020AF71E433> + DWORD nFaceVertexIndices; + array DWORD faceVertexIndices[nFaceVertexIndices]; +} + +template MeshFaceWraps { + <4885AE62-78E8-11cf-8F52-0040333594A3> + DWORD nFaceWrapValues; + Boolean2d faceWrapValues; +} + +template MeshTextureCoords { + + DWORD nTextureCoords; + array Coords2d textureCoords[nTextureCoords]; +} + +template MeshMaterialList { + + DWORD nMaterials; + DWORD nFaceIndexes; + array DWORD faceIndexes[nFaceIndexes]; + [Material] +} + +template MeshNormals { + + DWORD nNormals; + array Vector normals[nNormals]; + DWORD nFaceNormals; + array MeshFace faceNormals[nFaceNormals]; +} + +template MeshVertexColors { + <1630B821-7842-11cf-8F52-0040333594A3> + DWORD nVertexColors; + array IndexedColor vertexColors[nVertexColors]; +} + +template Mesh { + <3D82AB44-62DA-11cf-AB39-0020AF71E433> + DWORD nVertices; + array Vector vertices[nVertices]; + DWORD nFaces; + array MeshFace faces[nFaces]; + [...] +} + +template FrameTransformMatrix { + + Matrix4x4 frameMatrix; +} + +template Frame { + <3D82AB46-62DA-11cf-AB39-0020AF71E433> + [...] +} + +Header { + 1; + 0; + 1; +} + +Mesh Body1 { + 303; + 0.000000;-0.061426;0.938846;, + -0.049693;0.200773;0.692165;, + 0.000000;-0.031454;1.283610;, + 0.049693;-0.023019;0.950530;, + 0.032306;0.045667;0.971424;, + 0.000000;0.053280;0.973741;, + -0.032306;0.269459;0.713059;, + -0.023241;0.009165;1.505100;, + 0.000000;0.277072;0.715376;, + 0.000000;0.014811;1.504150;, + 0.049693;-0.111196;1.282310;, + 0.032306;-0.039411;1.283480;, + 0.023242;0.009165;1.505100;, + 0.035751;-0.041767;1.513680;, + 0.032306;0.269459;0.713059;, + 0.049693;0.200773;0.692165;, + 0.000000;0.162366;0.680481;, + -0.032306;0.045667;0.971424;, + -0.049693;-0.023019;0.950530;, + 0.000000;-0.151335;1.281660;, + 0.000000;-0.070246;1.518480;, + -0.049693;-0.111196;1.282310;, + -0.035750;-0.041767;1.513680;, + -0.032306;-0.039411;1.283480;, + 0.000000;-0.139499;-0.804149;, + 0.000000;-0.196023;-0.643914;, + 0.000000;0.207794;-1.162700;, + 0.000000;0.342375;-1.510260;, + 0.000000;-0.232522;-0.216349;, + 0.109118;-0.119018;0.100709;, + -0.109118;-0.119018;0.100709;, + 0.000000;-0.154873;0.103656;, + 0.030101;-0.105174;0.316078;, + 0.000000;-0.112314;0.317509;, + 0.000000;0.112303;0.506078;, + -0.030101;-0.105174;0.316078;, + -0.028761;-0.037815;0.439801;, + 0.028761;-0.037815;0.439801;, + 0.081739;-0.203143;0.439706;, + 0.065936;-0.238012;0.335711;, + 0.020142;-0.108242;0.303668;, + 0.114666;-0.167257;0.149229;, + 0.116086;-0.276934;0.217803;, + 0.090034;-0.382159;0.456303;, + -0.114666;-0.167257;0.149229;, + -0.116086;-0.276934;0.217803;, + -0.020142;-0.108242;0.303668;, + -0.090034;-0.382159;0.456303;, + -0.081739;-0.203143;0.439706;, + -0.076865;-0.377381;0.378108;, + -0.065936;-0.238012;0.335711;, + 0.076865;-0.377381;0.378108;, + -0.077999;-0.438418;0.363464;, + -0.094725;-0.687984;0.346619;, + -0.119790;-0.424686;0.304048;, + -0.160820;-0.602659;0.286432;, + -0.190992;-0.614722;0.342338;, + -0.168141;-0.687707;0.257272;, + -0.151771;-0.687980;0.349147;, + -0.203745;-0.687917;0.313177;, + -0.128500;-0.687445;0.237457;, + -0.079186;-0.687932;0.310966;, + -0.165267;-0.602291;0.204563;, + -0.076312;-0.617099;0.236559;, + -0.125626;-0.603366;0.203812;, + -0.127225;-0.603735;0.285509;, + -0.085434;-0.617617;0.340127;, + -0.068939;-0.687414;0.212852;, + -0.118657;-0.370966;0.289767;, + -0.153385;-0.423611;0.305410;, + -0.215919;-0.687399;0.214649;, + -0.200870;-0.614472;0.257455;, + -0.204332;-0.687587;0.149699;, + -0.191896;-0.646208;0.173407;, + -0.162472;-0.639473;0.139614;, + -0.173907;-0.687338;0.180856;, + -0.169612;-0.687553;0.115905;, + -0.129710;-0.640081;0.138863;, + -0.127130;-0.687344;0.180105;, + -0.130953;-0.687556;0.115154;, + -0.088955;-0.647844;0.171610;, + -0.082862;-0.687595;0.147901;, + -0.091167;-0.448646;0.416058;, + -0.146947;-0.626975;0.378308;, + -0.098602;-0.627845;0.375781;, + -0.183557;-0.435523;0.366725;, + -0.139512;-0.447776;0.419786;, + -0.036911;-0.131458;-0.800774;, + -0.114132;-0.130986;-0.893785;, + -0.218544;-0.657847;-0.902645;, + -0.171757;-0.532488;-0.896119;, + -0.073996;0.255722;-1.483520;, + -0.051230;0.326389;-1.504150;, + -0.065011;0.221538;-1.464050;, + 0.104586;-0.228675;-0.692703;, + 0.091167;-0.448646;0.416057;, + 0.077999;-0.438418;0.363464;, + 0.098603;-0.627845;0.375781;, + 0.094725;-0.687984;0.346619;, + 0.119790;-0.424686;0.304048;, + 0.165267;-0.602291;0.204563;, + 0.085434;-0.617617;0.340127;, + 0.127225;-0.603735;0.285508;, + 0.125626;-0.603366;0.203812;, + 0.076312;-0.617099;0.236559;, + 0.118657;-0.370966;0.289767;, + 0.204332;-0.687587;0.149699;, + 0.162472;-0.639473;0.139614;, + 0.191896;-0.646208;0.173407;, + 0.169612;-0.687553;0.115905;, + 0.129710;-0.640081;0.138863;, + 0.068939;-0.687414;0.212852;, + 0.127130;-0.687344;0.180104;, + 0.082862;-0.687595;0.147901;, + 0.088955;-0.647844;0.171610;, + 0.130953;-0.687556;0.115154;, + 0.153385;-0.423611;0.305410;, + 0.160820;-0.602659;0.286432;, + 0.168141;-0.687707;0.257271;, + 0.128500;-0.687445;0.237457;, + 0.079186;-0.687932;0.310966;, + 0.203745;-0.687917;0.313177;, + 0.173907;-0.687338;0.180856;, + 0.215919;-0.687399;0.214649;, + 0.200870;-0.614472;0.257455;, + 0.190992;-0.614722;0.342338;, + 0.146947;-0.626975;0.378308;, + 0.151771;-0.687979;0.349147;, + 0.183557;-0.435523;0.366725;, + 0.139512;-0.447776;0.419786;, + 0.113246;-0.558335;-0.752050;, + -0.113029;-0.558335;-0.752050;, + -0.058263;-0.180258;-0.792372;, + -0.104586;-0.228675;-0.692703;, + 0.058263;-0.180258;-0.792372;, + 0.114132;-0.130986;-0.893785;, + 0.036911;-0.131458;-0.800774;, + 0.000000;-0.004469;-0.968083;, + 0.000000;0.159119;-1.080890;, + 0.055861;-0.654043;-0.907268;, + 0.079285;-0.545055;-0.826090;, + -0.189298;-0.627377;-1.035100;, + -0.177878;-0.680291;-1.082760;, + -0.214254;-0.664213;-1.040040;, + -0.161256;-0.660443;-1.077820;, + -0.124653;-0.659096;-1.077490;, + -0.108039;-0.624876;-1.034770;, + -0.052024;-0.654043;-0.907268;, + -0.078756;-0.545055;-0.826090;, + -0.111125;-0.618182;-0.950786;, + -0.184997;-0.620703;-0.947721;, + -0.120091;-0.531540;-0.901424;, + -0.093467;-0.697089;-1.086940;, + -0.177140;-0.697089;-1.086940;, + -0.095368;-0.678258;-1.082250;, + -0.184330;-0.689285;-0.864494;, + -0.228502;-0.695391;-1.044220;, + -0.042748;-0.695391;-1.044220;, + -0.054974;-0.660441;-1.039530;, + -0.101027;-0.689285;-0.864498;, + 0.065548;-0.695391;-1.044220;, + 0.092340;-0.696620;-1.085760;, + 0.102919;-0.689285;-0.864498;, + 0.192799;-0.696619;-1.085760;, + 0.099554;-0.677289;-1.081080;, + 0.127676;-0.657618;-1.076310;, + 0.072960;-0.660441;-1.039310;, + 0.120245;-0.531540;-0.901424;, + 0.112616;-0.618182;-0.950786;, + 0.109653;-0.624877;-1.034770;, + 0.187687;-0.627377;-1.035100;, + 0.178790;-0.679375;-1.081580;, + 0.162827;-0.659001;-1.076650;, + 0.000000;0.194767;-1.453810;, + 0.073996;0.255722;-1.483520;, + 0.000000;0.286217;-1.518480;, + 0.051230;0.326388;-1.504150;, + 0.000000;0.213784;-1.355750;, + 0.065011;0.221538;-1.464050;, + 0.182916;-0.689285;-0.864494;, + 0.171441;-0.532488;-0.896119;, + 0.183557;-0.620703;-0.947721;, + 0.215773;-0.657847;-0.902646;, + 0.220422;-0.695391;-1.044220;, + 0.212566;-0.664214;-1.039820;, + 0.067091;-0.158537;-0.643915;, + 0.130206;-0.193912;-0.216350;, + 0.077416;0.007999;-0.964709;, + 0.183964;-0.134440;-0.886644;, + 0.170979;-0.558332;-0.752044;, + 0.194691;-0.546486;-0.818088;, + 0.096383;0.183917;-1.077510;, + 0.102550;0.289818;-1.155630;, + -0.067091;-0.158537;-0.643915;, + -0.130206;-0.193912;-0.216350;, + -0.077416;0.007999;-0.964709;, + 0.000000;0.216114;-1.244810;, + 0.000000;0.218816;-1.313860;, + -0.183964;-0.134440;-0.886644;, + -0.195220;-0.546486;-0.818088;, + -0.171291;-0.558332;-0.752044;, + -0.102550;0.289818;-1.155630;, + -0.096383;0.183918;-1.077510;, + -0.203324;-0.000186;-0.216355;, + 0.000000;0.461380;-0.216367;, + -0.132354;0.415323;-0.216366;, + 0.000000;0.483721;-1.426860;, + 0.000000;0.505008;0.184315;, + -0.083623;0.454487;-1.419150;, + -0.097980;0.599269;-1.043210;, + -0.150776;0.396113;-1.068880;, + 0.000000;0.668371;-1.244740;, + 0.000000;0.660052;-1.123730;, + 0.083623;0.454486;-1.419150;, + 0.000000;0.601379;-1.384240;, + 0.000000;0.628851;-1.039190;, + 0.097980;0.599268;-1.043210;, + 0.150776;0.396113;-1.068880;, + 0.000000;0.588297;-0.907439;, + 0.132354;0.415323;-0.216366;, + 0.203324;-0.000186;-0.216355;, + 0.215676;-0.176166;-0.795945;, + 0.177974;0.258210;-0.971413;, + 0.115772;0.548952;-0.911464;, + 0.143614;0.490599;-0.781781;, + 0.183334;-0.228667;-0.692694;, + 0.215131;0.109326;-0.825489;, + 0.115870;0.444022;-0.665901;, + 0.178124;0.029546;-0.643920;, + 0.160357;0.437455;-1.137120;, + 0.226298;0.365261;-1.243240;, + 0.105258;0.370388;-1.397000;, + 0.104248;0.611072;-1.127950;, + 0.082255;0.262741;-1.368650;, + 0.192870;0.403955;-1.341710;, + 0.166988;0.246562;-1.244800;, + 0.153069;0.277384;-1.326760;, + 0.089221;0.645525;-1.244750;, + 0.139971;0.697089;-1.334440;, + 0.177051;0.542720;-1.241680;, + 0.126150;0.594872;-1.338400;, + 0.041587;0.120377;0.505592;, + 0.067583;0.283180;0.536543;, + 0.104568;0.447773;0.443333;, + 0.000000;0.391487;0.530735;, + 0.043936;0.380679;0.531314;, + 0.149273;0.477514;0.293496;, + 0.172353;-0.275740;0.220239;, + 0.139752;-0.200327;0.446770;, + 0.152251;-0.370463;0.291793;, + 0.192606;-0.235087;0.341477;, + 0.138378;-0.381752;0.461846;, + 0.182423;-0.376028;0.382956;, + 0.160847;0.216311;0.499174;, + 0.116618;-0.015705;0.448978;, + 0.110923;0.461129;0.163966;, + 0.229189;0.099215;0.308897;, + 0.213423;-0.066057;0.311063;, + 0.176064;-0.153352;0.152359;, + 0.170561;0.060886;0.085922;, + -0.215676;-0.176166;-0.795945;, + -0.177974;0.258210;-0.971413;, + -0.115772;0.548952;-0.911464;, + -0.143614;0.490599;-0.781781;, + 0.000000;0.488737;-0.665903;, + 0.000000;0.534271;-0.777755;, + -0.183334;-0.228667;-0.692694;, + -0.215131;0.109326;-0.825489;, + -0.178124;0.029546;-0.643920;, + -0.115870;0.444022;-0.665901;, + -0.160357;0.437455;-1.137120;, + -0.226298;0.365261;-1.243240;, + -0.105258;0.370388;-1.397000;, + -0.104248;0.611072;-1.127950;, + -0.166988;0.246562;-1.244800;, + -0.192870;0.403955;-1.341710;, + -0.082255;0.262741;-1.368650;, + -0.153069;0.277384;-1.326760;, + -0.089221;0.645525;-1.244750;, + -0.139971;0.697089;-1.334440;, + -0.126150;0.594872;-1.338400;, + -0.177051;0.542720;-1.241680;, + -0.041587;0.120377;0.505592;, + 0.000000;0.228662;0.539467;, + 0.000000;0.519446;0.291789;, + -0.149273;0.477514;0.293496;, + -0.172353;-0.275740;0.220239;, + -0.139752;-0.200327;0.446770;, + -0.138378;-0.381752;0.461846;, + -0.192606;-0.235087;0.341477;, + -0.152251;-0.370463;0.291794;, + -0.182423;-0.376028;0.382957;, + -0.116618;-0.015705;0.448978;, + -0.160847;0.216311;0.499174;, + 0.000000;0.469387;0.442753;, + -0.104568;0.447772;0.443333;, + -0.067583;0.283180;0.536543;, + -0.043936;0.380679;0.531314;, + -0.110923;0.461129;0.163966;, + -0.229189;0.099215;0.308897;, + -0.170561;0.060886;0.085922;, + -0.176064;-0.153352;0.152359;, + -0.213423;-0.066057;0.311063;; + + 599; + 3;300,301,302;, + 3;299,300,302;, + 3;298,300,299;, + 3;295,296,297;, + 3;294,295,297;, + 3;299,292,293;, + 3;302,292,299;, + 3;289,290,291;, + 3;288,289,291;, + 3;287,289,288;, + 3;286,290,289;, + 3;287,292,302;, + 3;289,287,302;, + 3;286,302,301;, + 3;289,302,286;, + 3;284,298,285;, + 3;294,284,285;, + 3;293,282,283;, + 3;296,293,283;, + 3;295,294,285;, + 3;292,282,293;, + 3;295,293,296;, + 3;293,295,285;, + 3;285,299,293;, + 3;298,299,285;, + 3;279,280,281;, + 3;278,280,279;, + 3;281,278,279;, + 3;275,276,277;, + 3;274,275,277;, + 3;273,278,281;, + 3;272,276,275;, + 3;271,275,274;, + 3;280,272,275;, + 3;270,271,274;, + 3;270,273,281;, + 3;281,280,275;, + 3;271,270,281;, + 3;275,271,281;, + 3;267,268,269;, + 3;266,268,267;, + 3;263,264,265;, + 3;262,263,265;, + 3;269,264,263;, + 3;261,263,262;, + 3;260,266,267;, + 3;267,269,263;, + 3;261,260,267;, + 3;263,261,267;, + 3;257,258,259;, + 3;256,257,259;, + 3;255,256,259;, + 3;256,253,254;, + 3;257,256,254;, + 3;250,251,252;, + 3;249,250,252;, + 3;248,251,250;, + 3;247,250,249;, + 3;247,258,257;, + 3;248,257,254;, + 3;250,257,248;, + 3;250,247,257;, + 3;246,255,284;, + 3;294,246,284;, + 3;243,244,245;, + 3;294,244,243;, + 3;253,245,242;, + 3;241,253,242;, + 3;246,294,243;, + 3;254,253,241;, + 3;243,245,253;, + 3;253,246,243;, + 3;246,253,256;, + 3;255,246,256;, + 3;238,239,240;, + 3;237,238,240;, + 3;239,238,237;, + 3;234,235,236;, + 3;233,234,236;, + 3;232,239,237;, + 3;231,234,233;, + 3;240,234,231;, + 3;230,235,234;, + 3;229,235,230;, + 3;229,239,232;, + 3;239,234,240;, + 3;230,239,229;, + 3;230,234,239;, + 3;226,227,228;, + 3;225,226,228;, + 3;224,265,264;, + 3;227,224,264;, + 3;223,265,224;, + 3;222,223,224;, + 3;221,226,225;, + 3;226,224,227;, + 3;222,226,221;, + 3;224,226,222;, + 3;219,220,228;, + 3;218,265,223;, + 3;217,223,222;, + 3;216,223,217;, + 3;229,216,217;, + 3;216,215,218;, + 3;232,215,216;, + 3;232,216,229;, + 3;223,216,218;, + 3;213,214,240;, + 3;231,213,240;, + 3;237,211,212;, + 3;211,240,214;, + 3;237,240,211;, + 3;212,215,232;, + 3;237,212,232;, + 3;209,270,210;, + 3;209,215,273;, + 3;273,270,209;, + 3;208,272,280;, + 3;278,212,211;, + 3;214,208,280;, + 3;280,278,211;, + 3;212,273,215;, + 3;278,273,212;, + 3;207,298,284;, + 3;207,284,255;, + 3;206,208,214;, + 3;213,206,214;, + 3;218,262,265;, + 3;209,262,218;, + 3;215,209,218;, + 3;210,262,209;, + 3;261,262,210;, + 3;214,280,211;, + 3;297,244,294;, + 3;219,207,255;, + 3;205,298,207;, + 3;204,207,219;, + 3;204,205,207;, + 3;227,204,219;, + 3;228,227,219;, + 3;205,268,203;, + 3;269,268,205;, + 3;269,205,204;, + 3;210,201,202;, + 3;261,210,202;, + 3;199,200,260;, + 3;198,199,260;, + 3;270,201,210;, + 3;197,277,276;, + 3;274,197,196;, + 3;201,274,196;, + 3;277,197,274;, + 3;270,274,201;, + 3;195,261,202;, + 3;266,260,200;, + 3;198,261,195;, + 3;203,193,194;, + 3;300,203,194;, + 3;268,193,203;, + 3;260,261,198;, + 3;229,217,192;, + 3;191,192,217;, + 3;222,191,217;, + 3;221,189,190;, + 3;188,221,190;, + 3;197,233,236;, + 3;235,196,197;, + 3;192,196,235;, + 3;236,235,197;, + 3;229,192,235;, + 3;187,191,222;, + 3;225,189,221;, + 3;188,187,222;, + 3;220,259,186;, + 3;185,220,186;, + 3;228,220,185;, + 3;221,188,222;, + 3;182,183,184;, + 3;181,182,184;, + 3;180,182,181;, + 3;190,179,182;, + 3;190,182,180;, + 3;233,177,178;, + 3;231,233,178;, + 3;174,175,176;, + 3;173,178,177;, + 3;175,178,173;, + 3;174,213,231;, + 3;176,213,174;, + 3;174,178,175;, + 3;178,174,231;, + 3;170,171,172;, + 3;169,170,172;, + 3;184,171,170;, + 3;170,168,181;, + 3;169,168,170;, + 3;170,181,184;, + 3;167,181,168;, + 3;180,181,167;, + 3;165,166,169;, + 3;164,166,165;, + 3;172,165,169;, + 3;163,184,183;, + 3;171,184,163;, + 3;179,189,162;, + 3;163,161,164;, + 3;165,172,171;, + 3;164,165,171;, + 3;163,164,171;, + 3;183,161,163;, + 3;160,161,183;, + 3;190,189,179;, + 3;179,160,183;, + 3;162,160,179;, + 3;179,183,182;, + 3;157,158,159;, + 3;166,160,162;, + 3;157,155,156;, + 3;159,155,157;, + 3;152,153,154;, + 3;157,154,158;, + 3;152,154,157;, + 3;149,150,151;, + 3;148,149,151;, + 3;147,149,148;, + 3;145,146,158;, + 3;154,145,158;, + 3;145,144,146;, + 3;142,153,143;, + 3;141,142,143;, + 3;156,143,153;, + 3;144,142,141;, + 3;141,150,149;, + 3;146,144,141;, + 3;142,154,153;, + 3;145,154,142;, + 3;144,145,142;, + 3;149,146,141;, + 3;146,147,158;, + 3;149,147,146;, + 3;159,158,147;, + 3;168,139,140;, + 3;169,139,168;, + 3;166,139,169;, + 3;167,168,140;, + 3;162,139,166;, + 3;164,161,160;, + 3;166,164,160;, + 3;187,137,138;, + 3;191,187,138;, + 4;152,157,156,153;, + 3;136,137,187;, + 3;135,136,187;, + 3;187,188,135;, + 3;135,188,180;, + 3;134,185,136;, + 3;135,134,136;, + 3;148,132,133;, + 3;131,148,133;, + 3;151,132,148;, + 3;130,139,162;, + 3;140,139,130;, + 3;159,131,200;, + 3;155,159,200;, + 3;147,131,159;, + 3;148,131,147;, + 3;129,252,251;, + 3;128,249,252;, + 3;128,252,129;, + 3;125,126,127;, + 3;125,123,124;, + 3;121,122,123;, + 3;121,127,120;, + 3;119,121,120;, + 3;118,121,119;, + 3;122,121,118;, + 3;125,121,123;, + 3;117,125,124;, + 3;116,125,117;, + 3;128,125,116;, + 3;125,127,121;, + 3;126,125,128;, + 3;113,114,115;, + 3;112,113,115;, + 3;111,113,112;, + 3;110,115,114;, + 3;109,115,110;, + 3;115,109,122;, + 3;122,112,115;, + 3;106,107,108;, + 3;109,107,106;, + 3;106,124,123;, + 3;108,124,106;, + 3;110,107,109;, + 3;123,122,109;, + 3;109,106,123;, + 3;116,249,128;, + 3;105,249,116;, + 3;103,110,104;, + 3;103,101,102;, + 3;104,101,103;, + 3;103,100,107;, + 3;110,103,107;, + 3;100,103,102;, + 3;119,111,112;, + 3;114,104,110;, + 3;108,107,100;, + 3;112,122,118;, + 3;118,119,112;, + 3;117,100,102;, + 3;124,100,117;, + 3;100,124,108;, + 3;99,105,116;, + 3;120,101,104;, + 3;111,104,114;, + 3;111,119,120;, + 3;111,114,113;, + 3;104,111,120;, + 3;98,120,127;, + 3;97,120,98;, + 3;101,120,97;, + 3;101,95,96;, + 3;97,95,101;, + 3;102,101,96;, + 3;126,97,98;, + 3;126,98,127;, + 3;129,95,97;, + 3;99,102,96;, + 3;117,102,99;, + 3;126,129,97;, + 3;116,117,99;, + 3;128,129,126;, + 3;185,134,94;, + 3;94,228,185;, + 3;228,94,225;, + 3;140,130,94;, + 3;130,162,189;, + 3;130,225,94;, + 3;225,130,189;, + 3;167,140,134;, + 3;134,140,94;, + 3;134,135,167;, + 3;167,135,180;, + 3;190,180,188;, + 3;199,155,200;, + 3;93,177,276;, + 3;272,93,276;, + 3;91,92,175;, + 3;173,177,93;, + 3;175,173,93;, + 3;91,272,208;, + 3;92,91,208;, + 3;91,175,93;, + 3;93,272,91;, + 3;90,151,150;, + 3;90,89,199;, + 3;89,90,150;, + 3;141,143,150;, + 3;143,89,150;, + 3;156,89,143;, + 3;89,155,199;, + 3;155,89,156;, + 3;198,88,90;, + 3;151,90,88;, + 3;199,198,90;, + 3;138,137,195;, + 3;202,138,195;, + 3;87,195,137;, + 3;88,195,87;, + 3;88,198,195;, + 3;87,193,132;, + 3;88,87,132;, + 3;86,288,291;, + 3;85,86,291;, + 3;85,291,290;, + 3;86,83,84;, + 3;82,86,84;, + 3;85,83,86;, + 3;79,80,81;, + 3;78,79,81;, + 3;77,80,79;, + 3;76,77,79;, + 3;75,79,78;, + 3;76,79,75;, + 3;72,73,74;, + 3;76,72,74;, + 3;77,76,74;, + 3;72,70,71;, + 3;73,72,71;, + 3;76,75,70;, + 3;72,76,70;, + 3;69,85,290;, + 3;68,69,290;, + 3;67,78,81;, + 3;64,65,66;, + 3;63,64,66;, + 3;77,64,63;, + 3;64,74,62;, + 3;77,74,64;, + 3;62,65,64;, + 3;80,77,63;, + 3;59,60,61;, + 3;58,59,61;, + 3;57,60,59;, + 3;74,73,62;, + 3;56,59,58;, + 3;55,65,62;, + 3;78,60,57;, + 3;75,78,57;, + 3;67,60,78;, + 3;71,55,62;, + 3;56,55,71;, + 3;73,71,62;, + 3;56,70,59;, + 3;71,70,56;, + 3;59,75,57;, + 3;70,75,59;, + 3;54,69,68;, + 3;81,80,67;, + 3;61,63,66;, + 3;67,61,60;, + 3;63,61,67;, + 3;80,63,67;, + 3;61,84,53;, + 3;58,61,53;, + 3;66,84,61;, + 3;82,84,66;, + 3;52,82,66;, + 3;65,52,66;, + 3;83,56,58;, + 3;83,58,53;, + 3;84,83,53;, + 3;54,52,65;, + 3;55,54,65;, + 3;69,54,55;, + 3;56,69,55;, + 3;85,69,56;, + 3;56,83,85;, + 3;133,132,193;, + 3;193,268,133;, + 3;266,133,268;, + 3;266,131,133;, + 3;200,131,266;, + 3;132,151,88;, + 3;51,105,99;, + 3;49,68,50;, + 3;47,48,287;, + 3;288,47,287;, + 3;82,47,288;, + 3;49,52,54;, + 3;68,49,54;, + 3;82,52,47;, + 3;49,48,47;, + 3;50,48,49;, + 3;49,47,52;, + 3;96,51,99;, + 3;45,46,50;, + 3;44,46,45;, + 3;44,286,301;, + 3;45,286,44;, + 3;45,290,286;, + 3;68,290,45;, + 3;68,45,50;, + 3;86,82,288;, + 3;95,251,43;, + 3;96,95,43;, + 3;51,96,43;, + 3;129,251,95;, + 3;40,41,42;, + 3;39,40,42;, + 3;247,42,41;, + 3;249,42,247;, + 3;105,42,249;, + 3;105,39,42;, + 3;258,247,41;, + 3;51,38,39;, + 3;43,38,51;, + 3;105,51,39;, + 3;248,38,43;, + 3;251,248,43;, + 3;38,248,254;, + 3;37,38,254;, + 3;37,40,39;, + 3;38,37,39;, + 3;36,48,50;, + 3;46,36,50;, + 3;35,46,44;, + 3;282,36,46;, + 3;33,34,282;, + 3;241,34,33;, + 3;32,241,33;, + 3;35,282,46;, + 3;33,282,35;, + 3;31,32,33;, + 3;35,31,33;, + 3;30,31,35;, + 3;292,48,36;, + 3;44,301,30;, + 3;30,301,300;, + 3;287,48,292;, + 3;44,30,35;, + 3;32,41,40;, + 3;28,29,31;, + 3;241,40,37;, + 3;32,40,241;, + 3;32,31,29;, + 3;28,31,30;, + 3;29,259,258;, + 3;258,41,29;, + 3;29,41,32;, + 3;186,29,28;, + 3;29,186,259;, + 3;254,241,37;, + 3;282,292,36;, + 3;27,176,175;, + 3;92,27,175;, + 3;27,92,206;, + 3;176,27,206;, + 3;197,177,233;, + 3;177,197,276;, + 3;208,206,92;, + 3;213,176,206;, + 3;26,196,192;, + 3;26,201,196;, + 3;191,26,192;, + 3;138,26,191;, + 3;26,138,202;, + 3;202,201,26;, + 3;24,185,25;, + 3;193,24,25;, + 3;136,185,24;, + 3;87,24,193;, + 3;24,87,137;, + 3;137,136,24;, + 3;194,30,300;, + 3;194,28,30;, + 3;25,28,194;, + 3;21,22,23;, + 3;20,22,21;, + 3;19,20,21;, + 3;19,21,18;, + 3;21,17,18;, + 3;23,17,21;, + 3;15,16,283;, + 3;283,241,242;, + 3;14,242,245;, + 3;15,242,14;, + 3;283,242,15;, + 3;13,22,20;, + 3;19,13,20;, + 3;10,11,12;, + 3;11,9,12;, + 3;8,245,244;, + 3;14,245,8;, + 4;12,7,22,13;, + 3;9,7,12;, + 3;12,13,10;, + 3;10,13,19;, + 3;6,244,297;, + 3;8,6,17;, + 3;5,8,17;, + 3;14,5,4;, + 3;8,5,14;, + 3;244,6,8;, + 3;3,15,4;, + 3;4,15,14;, + 3;3,16,15;, + 3;4,2,11;, + 3;5,2,4;, + 3;3,4,11;, + 3;16,296,283;, + 3;1,296,16;, + 3;1,297,296;, + 3;6,297,1;, + 3;2,7,9;, + 3;23,7,2;, + 3;22,7,23;, + 3;0,18,1;, + 3;16,0,1;, + 4;17,6,1,18;, + 3;3,0,16;, + 3;34,241,283;, + 3;282,34,283;, + 3;11,2,9;, + 3;23,2,5;, + 3;23,5,17;, + 3;10,3,11;, + 3;18,0,19;, + 3;0,3,10;, + 3;19,0,10;, + 3;25,185,186;, + 3;28,25,186;, + 3;193,25,194;, + 3;264,269,204;, + 3;227,264,204;, + 3;255,220,219;, + 3;259,220,255;, + 3;298,205,203;, + 3;300,298,203;; + + MeshMaterialList { + 1; + 1; + 0;; + Material { + 0.694118;0.694118;0.694118;1.000000;; + 50.000000; + 1.000000;1.000000;1.000000;; + 0.000000;0.000000;0.000000;; + TextureFilename { + "tiger.bmp"; + } + } + } + MeshTextureCoords { + 303; + 0.190860;-0.544059;, + 0.272086;-0.355992;, + 0.077337;-0.522561;, + 0.187013;-0.516511;, + 0.180133;-0.467245;, + 0.179370;-0.461784;, + 0.265206;-0.306726;, + 0.004406;-0.493426;, + 0.264443;-0.301265;, + 0.004719;-0.489377;, + 0.077765;-0.579757;, + 0.077380;-0.528268;, + 0.004406;-0.493426;, + 0.001581;-0.529958;, + 0.265206;-0.306726;, + 0.272086;-0.355992;, + 0.275933;-0.383540;, + 0.180133;-0.467245;, + 0.187013;-0.516511;, + 0.077979;-0.608548;, + 0.000000;-0.550385;, + 0.077765;-0.579757;, + 0.001581;-0.529958;, + 0.077380;-0.528268;, + 0.764787;-0.600058;, + 0.712026;-0.640601;, + 0.882850;-0.350956;, + 0.997293;-0.254425;, + 0.571239;-0.666781;, + 0.466839;-0.585368;, + 0.466839;-0.585368;, + 0.465868;-0.611086;, + 0.395923;-0.575438;, + 0.395452;-0.580559;, + 0.333360;-0.419449;, + 0.395923;-0.575438;, + 0.355184;-0.527123;, + 0.355184;-0.527123;, + 0.355215;-0.645708;, + 0.389458;-0.670719;, + 0.400009;-0.577639;, + 0.450862;-0.619968;, + 0.428283;-0.698636;, + 0.349750;-0.774111;, + 0.450862;-0.619968;, + 0.428283;-0.698636;, + 0.400009;-0.577639;, + 0.349750;-0.774111;, + 0.355215;-0.645708;, + 0.375498;-0.770684;, + 0.389458;-0.670719;, + 0.375498;-0.770684;, + 0.380320;-0.814463;, + 0.385866;-0.993469;, + 0.399884;-0.804614;, + 0.405685;-0.932268;, + 0.387276;-0.940921;, + 0.415286;-0.993271;, + 0.385034;-0.993466;, + 0.396878;-0.993421;, + 0.421811;-0.993083;, + 0.397606;-0.993432;, + 0.432642;-0.932004;, + 0.422107;-0.942626;, + 0.432889;-0.932775;, + 0.405989;-0.933040;, + 0.388004;-0.942997;, + 0.429913;-0.993060;, + 0.404586;-0.766082;, + 0.399436;-0.803843;, + 0.429321;-0.993050;, + 0.415226;-0.940741;, + 0.450708;-0.993185;, + 0.442901;-0.963505;, + 0.454028;-0.958674;, + 0.440448;-0.993006;, + 0.461835;-0.993160;, + 0.454276;-0.959110;, + 0.440696;-0.993010;, + 0.462082;-0.993162;, + 0.443493;-0.964678;, + 0.451300;-0.993190;, + 0.363002;-0.821800;, + 0.375432;-0.949709;, + 0.376264;-0.950333;, + 0.379246;-0.812387;, + 0.361774;-0.821176;, + 0.763676;-0.594291;, + 0.794303;-0.593952;, + 0.797220;-0.971853;, + 0.795071;-0.881937;, + 0.988489;-0.316579;, + 0.995281;-0.265891;, + 0.982078;-0.341098;, + 0.728091;-0.664021;, + 0.363002;-0.821800;, + 0.380320;-0.814463;, + 0.376264;-0.950333;, + 0.385866;-0.993469;, + 0.399884;-0.804614;, + 0.432642;-0.932004;, + 0.388004;-0.942997;, + 0.405989;-0.933040;, + 0.432889;-0.932775;, + 0.422107;-0.942626;, + 0.404586;-0.766082;, + 0.450708;-0.993185;, + 0.454028;-0.958674;, + 0.442901;-0.963505;, + 0.461835;-0.993160;, + 0.454276;-0.959110;, + 0.429913;-0.993060;, + 0.440696;-0.993010;, + 0.451300;-0.993190;, + 0.443493;-0.964678;, + 0.462082;-0.993162;, + 0.399436;-0.803843;, + 0.405685;-0.932268;, + 0.415287;-0.993271;, + 0.421811;-0.993083;, + 0.397606;-0.993432;, + 0.396878;-0.993421;, + 0.440448;-0.993006;, + 0.429321;-0.993050;, + 0.415226;-0.940741;, + 0.387276;-0.940921;, + 0.375432;-0.949709;, + 0.385034;-0.993466;, + 0.379246;-0.812387;, + 0.361774;-0.821176;, + 0.747633;-0.900476;, + 0.747633;-0.900476;, + 0.760910;-0.629293;, + 0.728091;-0.664021;, + 0.760910;-0.629293;, + 0.794303;-0.593952;, + 0.763676;-0.594291;, + 0.818767;-0.503206;, + 0.855912;-0.385869;, + 0.798742;-0.969124;, + 0.772012;-0.890951;, + 0.840834;-0.949998;, + 0.856528;-0.987951;, + 0.842461;-0.976419;, + 0.854901;-0.973715;, + 0.854792;-0.972749;, + 0.840726;-0.948204;, + 0.798742;-0.969124;, + 0.772012;-0.890951;, + 0.813072;-0.943402;, + 0.812062;-0.945211;, + 0.796818;-0.881257;, + 0.857904;-1.000000;, + 0.857904;-1.000000;, + 0.856360;-0.986493;, + 0.784658;-0.994402;, + 0.843837;-0.998782;, + 0.843837;-0.998782;, + 0.842293;-0.973714;, + 0.784659;-0.994402;, + 0.843837;-0.998782;, + 0.857515;-0.999664;, + 0.784659;-0.994402;, + 0.857515;-0.999663;, + 0.855974;-0.985798;, + 0.854404;-0.971689;, + 0.842221;-0.973714;, + 0.796818;-0.881257;, + 0.813072;-0.943402;, + 0.840726;-0.948205;, + 0.840834;-0.949998;, + 0.856139;-0.987294;, + 0.854516;-0.972681;, + 0.978706;-0.360300;, + 0.988489;-0.316579;, + 1.000000;-0.294706;, + 0.995281;-0.265892;, + 0.946417;-0.346659;, + 0.982078;-0.341098;, + 0.784658;-0.994402;, + 0.795071;-0.881937;, + 0.812062;-0.945211;, + 0.797220;-0.971853;, + 0.843837;-0.998782;, + 0.842388;-0.976420;, + 0.712026;-0.613714;, + 0.571239;-0.639087;, + 0.817656;-0.494263;, + 0.791951;-0.596430;, + 0.747631;-0.900474;, + 0.769377;-0.891977;, + 0.854799;-0.368082;, + 0.880522;-0.292123;, + 0.712026;-0.613714;, + 0.571239;-0.639087;, + 0.817656;-0.494263;, + 0.909887;-0.344988;, + 0.932623;-0.343050;, + 0.791951;-0.596430;, + 0.769377;-0.891977;, + 0.747631;-0.900474;, + 0.880522;-0.292123;, + 0.854799;-0.368081;, + 0.571241;-0.500134;, + 0.571245;-0.169067;, + 0.571244;-0.202102;, + 0.969832;-0.153042;, + 0.439309;-0.137774;, + 0.967293;-0.174011;, + 0.843505;-0.070163;, + 0.851957;-0.215881;, + 0.909864;-0.020599;, + 0.870018;-0.026565;, + 0.967293;-0.174011;, + 0.955798;-0.068650;, + 0.842181;-0.048945;, + 0.843505;-0.070164;, + 0.851957;-0.215881;, + 0.798798;-0.078033;, + 0.571244;-0.202102;, + 0.571241;-0.500134;, + 0.762086;-0.626358;, + 0.819864;-0.314794;, + 0.800124;-0.106254;, + 0.757422;-0.148109;, + 0.728088;-0.664016;, + 0.771814;-0.421584;, + 0.719266;-0.181517;, + 0.712028;-0.478808;, + 0.874427;-0.186227;, + 0.909370;-0.238010;, + 0.959999;-0.234332;, + 0.871408;-0.061697;, + 0.950664;-0.311544;, + 0.941794;-0.210256;, + 0.909884;-0.323149;, + 0.936871;-0.301041;, + 0.909867;-0.036985;, + 0.939400;-0.000000;, + 0.908856;-0.110724;, + 0.940704;-0.073317;, + 0.333520;-0.413657;, + 0.323329;-0.296884;, + 0.354021;-0.178827;, + 0.325241;-0.219199;, + 0.325051;-0.226951;, + 0.403359;-0.157494;, + 0.427480;-0.697780;, + 0.352889;-0.643688;, + 0.403919;-0.765721;, + 0.387560;-0.668621;, + 0.347925;-0.773819;, + 0.373902;-0.769713;, + 0.335634;-0.344847;, + 0.352162;-0.511265;, + 0.446010;-0.169247;, + 0.398287;-0.428836;, + 0.397574;-0.547381;, + 0.449832;-0.609995;, + 0.471708;-0.456328;, + 0.762086;-0.626358;, + 0.819864;-0.314794;, + 0.800124;-0.106254;, + 0.757422;-0.148109;, + 0.719266;-0.149444;, + 0.756097;-0.116784;, + 0.728088;-0.664016;, + 0.771814;-0.421584;, + 0.712028;-0.478808;, + 0.719266;-0.181517;, + 0.874427;-0.186227;, + 0.909370;-0.238010;, + 0.959999;-0.234332;, + 0.871408;-0.061697;, + 0.909884;-0.323149;, + 0.941794;-0.210256;, + 0.950664;-0.311544;, + 0.936871;-0.301041;, + 0.909867;-0.036985;, + 0.939400;-0.000000;, + 0.940704;-0.073317;, + 0.908856;-0.110724;, + 0.333520;-0.413657;, + 0.322366;-0.335988;, + 0.403921;-0.127418;, + 0.403359;-0.157494;, + 0.427480;-0.697780;, + 0.352889;-0.643688;, + 0.347925;-0.773819;, + 0.387560;-0.668621;, + 0.403919;-0.765721;, + 0.373901;-0.769713;, + 0.352162;-0.511265;, + 0.335634;-0.344847;, + 0.354212;-0.163323;, + 0.354021;-0.178827;, + 0.323329;-0.296884;, + 0.325051;-0.226951;, + 0.446010;-0.169247;, + 0.398287;-0.428836;, + 0.471708;-0.456328;, + 0.449832;-0.609995;, + 0.397574;-0.547381;; + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..9bab7a97 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Properties/AssemblyInfo.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("D3D10Tutorial09_WPF")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Properties/Resources.Designer.cs new file mode 100644 index 00000000..23662656 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial09_WPF.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("D3D10Tutorial09_WPF.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Properties/Settings.Designer.cs new file mode 100644 index 00000000..6187f67f --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial09_WPF.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/TutorialWindow.xaml b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/TutorialWindow.xaml new file mode 100644 index 00000000..61816b1a --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/TutorialWindow.xaml @@ -0,0 +1,13 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/TutorialWindow.xaml.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/TutorialWindow.xaml.cs new file mode 100644 index 00000000..58113142 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/TutorialWindow.xaml.cs @@ -0,0 +1,204 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows; +using System.Windows.Media.Media3D; +using Microsoft.WindowsAPICodePack.DirectX.Controls; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; +using Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; + +using DXUtil = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; + +namespace D3D10Tutorial09_WPF +{ + /// + /// This application demonstrates the use of meshes + /// + /// http://msdn.microsoft.com/en-us/library/bb172493(VS.85).aspx + /// + /// Copyright (c) Microsoft Corporation. All rights reserved. + /// + public partial class TutorialWindow : Window + { + #region Fields + DirectHost host; + D3DDevice device; + SwapChain swapChain; + RenderTargetView renderTargetView; + Texture2D depthStencil; + DepthStencilView depthStencilView; + ColorRgba backColor = new ColorRgba (0.0F, 0.125F, 0.3F, 1.0F ); + + XMesh mesh; + XMeshManager meshManager; + + float t = 0f; + uint dwTimeStart = (uint)Environment.TickCount; + bool needsResizing; + #endregion + + #region TutorialWindow() + /// + /// Initializes a new instance of the class. + /// + public TutorialWindow() + { + InitializeComponent(); + host = new DirectHost(/*ControlHostElement.ActualWidth, ControlHostElement.ActualHeight*/); + ControlHostElement.Child = host; + } + #endregion + + #region Window_Loaded() + /// + /// Handles the Loaded event of the window. + /// + /// The source of the event. + /// The instance containing the event data. + private void Window_Loaded(object sender, RoutedEventArgs e) + { + InitDevice(); + host.Render = this.RenderScene; + } + #endregion + + #region ControlHostElement_SizeChanged() + private void ControlHostElement_SizeChanged(object sender, SizeChangedEventArgs e) + { + if (device != null) + { + needsResizing = true; + } + } + #endregion + + #region InitDevice() + /// + /// Create Direct3D device and swap chain + /// + public void InitDevice() + { + device = D3DDevice.CreateDeviceAndSwapChain(host.Handle); + swapChain = device.SwapChain; + + SetViews(); + + meshManager = new XMeshManager(device); + mesh = meshManager.Open("Media\\Tiger\\tiger.x"); + + InitMatrices(); + needsResizing = false; + } + #endregion + + #region SetViews() + private void SetViews() + { + // Create a render target view + using (Texture2D pBuffer = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView(pBuffer); + } + + // Create depth stencil texture + Texture2DDescription descDepth = new Texture2DDescription() + { + Width = (uint)host.ActualWidth, + Height = (uint)host.ActualHeight, + MipLevels = 1, + ArraySize = 1, + Format = Format.D32Float, + SampleDescription = new SampleDescription() + { + Count = 1, + Quality = 0 + }, + BindingOptions = BindingOptions.DepthStencil, + }; + + depthStencil = device.CreateTexture2D(descDepth); + + // Create the depth stencil view + DepthStencilViewDescription depthStencilViewDesc = new DepthStencilViewDescription() + { + Format = descDepth.Format, + ViewDimension = DepthStencilViewDimension.Texture2D + }; + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc); + + //bind the views to the device + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { renderTargetView }, depthStencilView); + + // Setup the viewport + Viewport vp = new Viewport() + { + Width = (uint)host.ActualWidth, + Height = (uint)host.ActualHeight, + MinDepth = 0.0f, + MaxDepth = 1.0f, + TopLeftX = 0, + TopLeftY = 0 + }; + + device.RS.Viewports = new Viewport[] { vp }; + } + #endregion + + #region InitMatrices() + private void InitMatrices() + { + // Initialize the view matrix + Vector3F Eye = new Vector3F(0.0f, 1.0f, -5.0f); + Vector3F At = new Vector3F(0.0f, 0.0f, 0.0f); + Vector3F Up = new Vector3F(0.0f, 1.0f, 0.0f); + + Matrix4x4F viewMatrix; + Matrix4x4F projectionMatrix; + viewMatrix = DXUtil.Camera.MatrixLookAtLH(Eye, At, Up); + + // Initialize the projection matrix + projectionMatrix = DXUtil.Camera.MatrixPerspectiveFovLH((float)Math.PI * 0.25f, ((float)host.ActualWidth / (float)host.ActualHeight), 0.5f, 1000.0f); + + meshManager.SetViewAndProjection( viewMatrix, projectionMatrix); + } + #endregion + + #region RenderScene() + /// + /// Render the frame + /// + protected void RenderScene() + { + if (needsResizing) + { + needsResizing = false; + renderTargetView.Dispose(); + SwapChainDescription sd = swapChain.Description; + swapChain.ResizeBuffers(sd.BufferCount, (uint)host.ActualWidth, (uint)host.ActualHeight, sd.BufferDescription.Format, sd.Options); + SetViews(); + // Update the projection matrix + InitMatrices(); + } + t = (Environment.TickCount - dwTimeStart) / 1000.0f; + + //WPF transforms used here use degrees as opposed to D3DX which uses radians in the native tutorial + //360 degrees == 2 * Math.PI + //world matrix rotates the first cube by t degrees + RotateTransform3D rt1 = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), t * 60)); + + // Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor); + + // Clear the depth buffer to 1.0 (max depth) + device.ClearDepthStencilView(depthStencilView, ClearOptions.Depth, 1.0f, (byte)0); + + mesh.Render( rt1.Value.ToMatrix4x4F() ); + + Microsoft.WindowsAPICodePack.DirectX.ErrorCode error; + swapChain.TryPresent(1, PresentOptions.None, out error); + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/directx.ico b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/directx.ico differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/D3D10Tutorial09_WinFormsControl.csproj b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/D3D10Tutorial09_WinFormsControl.csproj new file mode 100644 index 00000000..d6d9dc5a --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/D3D10Tutorial09_WinFormsControl.csproj @@ -0,0 +1,117 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {63FAFC43-88BA-48F6-80A6-F164B618A72A} + WinExe + Properties + D3D10Tutorial09_WinFormsControl + D3D10Tutorial09_WinFormsControl + v3.5 + 512 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + 3.0 + + + + + + 3.0 + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + TutorialWindow.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + Form + + + TutorialWindow.cs + + + + + + Always + + + Always + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + {B28ADA8B-BD7E-4C11-8298-C39F7C456365} + MeshLoader + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Media/Tiger/tiger.bmp b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Media/Tiger/tiger.bmp new file mode 100644 index 00000000..17a2f609 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Media/Tiger/tiger.bmp differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Media/Tiger/tiger.x b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Media/Tiger/tiger.x new file mode 100644 index 00000000..a727b50c --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Media/Tiger/tiger.x @@ -0,0 +1,1371 @@ +xof 0302txt 0064 +template Header { + <3D82AB43-62DA-11cf-AB39-0020AF71E433> + WORD major; + WORD minor; + DWORD flags; +} + +template Vector { + <3D82AB5E-62DA-11cf-AB39-0020AF71E433> + FLOAT x; + FLOAT y; + FLOAT z; +} + +template Coords2d { + + FLOAT u; + FLOAT v; +} + +template Matrix4x4 { + + array FLOAT matrix[16]; +} + +template ColorRGBA { + <35FF44E0-6C7C-11cf-8F52-0040333594A3> + FLOAT red; + FLOAT green; + FLOAT blue; + FLOAT alpha; +} + +template ColorRGB { + + FLOAT red; + FLOAT green; + FLOAT blue; +} + +template IndexedColor { + <1630B820-7842-11cf-8F52-0040333594A3> + DWORD index; + ColorRGBA indexColor; +} + +template Boolean { + <4885AE61-78E8-11cf-8F52-0040333594A3> + WORD truefalse; +} + +template Boolean2d { + <4885AE63-78E8-11cf-8F52-0040333594A3> + Boolean u; + Boolean v; +} + +template MaterialWrap { + <4885AE60-78E8-11cf-8F52-0040333594A3> + Boolean u; + Boolean v; +} + +template TextureFilename { + + STRING filename; +} + +template Material { + <3D82AB4D-62DA-11cf-AB39-0020AF71E433> + ColorRGBA faceColor; + FLOAT power; + ColorRGB specularColor; + ColorRGB emissiveColor; + [...] +} + +template MeshFace { + <3D82AB5F-62DA-11cf-AB39-0020AF71E433> + DWORD nFaceVertexIndices; + array DWORD faceVertexIndices[nFaceVertexIndices]; +} + +template MeshFaceWraps { + <4885AE62-78E8-11cf-8F52-0040333594A3> + DWORD nFaceWrapValues; + Boolean2d faceWrapValues; +} + +template MeshTextureCoords { + + DWORD nTextureCoords; + array Coords2d textureCoords[nTextureCoords]; +} + +template MeshMaterialList { + + DWORD nMaterials; + DWORD nFaceIndexes; + array DWORD faceIndexes[nFaceIndexes]; + [Material] +} + +template MeshNormals { + + DWORD nNormals; + array Vector normals[nNormals]; + DWORD nFaceNormals; + array MeshFace faceNormals[nFaceNormals]; +} + +template MeshVertexColors { + <1630B821-7842-11cf-8F52-0040333594A3> + DWORD nVertexColors; + array IndexedColor vertexColors[nVertexColors]; +} + +template Mesh { + <3D82AB44-62DA-11cf-AB39-0020AF71E433> + DWORD nVertices; + array Vector vertices[nVertices]; + DWORD nFaces; + array MeshFace faces[nFaces]; + [...] +} + +template FrameTransformMatrix { + + Matrix4x4 frameMatrix; +} + +template Frame { + <3D82AB46-62DA-11cf-AB39-0020AF71E433> + [...] +} + +Header { + 1; + 0; + 1; +} + +Mesh Body1 { + 303; + 0.000000;-0.061426;0.938846;, + -0.049693;0.200773;0.692165;, + 0.000000;-0.031454;1.283610;, + 0.049693;-0.023019;0.950530;, + 0.032306;0.045667;0.971424;, + 0.000000;0.053280;0.973741;, + -0.032306;0.269459;0.713059;, + -0.023241;0.009165;1.505100;, + 0.000000;0.277072;0.715376;, + 0.000000;0.014811;1.504150;, + 0.049693;-0.111196;1.282310;, + 0.032306;-0.039411;1.283480;, + 0.023242;0.009165;1.505100;, + 0.035751;-0.041767;1.513680;, + 0.032306;0.269459;0.713059;, + 0.049693;0.200773;0.692165;, + 0.000000;0.162366;0.680481;, + -0.032306;0.045667;0.971424;, + -0.049693;-0.023019;0.950530;, + 0.000000;-0.151335;1.281660;, + 0.000000;-0.070246;1.518480;, + -0.049693;-0.111196;1.282310;, + -0.035750;-0.041767;1.513680;, + -0.032306;-0.039411;1.283480;, + 0.000000;-0.139499;-0.804149;, + 0.000000;-0.196023;-0.643914;, + 0.000000;0.207794;-1.162700;, + 0.000000;0.342375;-1.510260;, + 0.000000;-0.232522;-0.216349;, + 0.109118;-0.119018;0.100709;, + -0.109118;-0.119018;0.100709;, + 0.000000;-0.154873;0.103656;, + 0.030101;-0.105174;0.316078;, + 0.000000;-0.112314;0.317509;, + 0.000000;0.112303;0.506078;, + -0.030101;-0.105174;0.316078;, + -0.028761;-0.037815;0.439801;, + 0.028761;-0.037815;0.439801;, + 0.081739;-0.203143;0.439706;, + 0.065936;-0.238012;0.335711;, + 0.020142;-0.108242;0.303668;, + 0.114666;-0.167257;0.149229;, + 0.116086;-0.276934;0.217803;, + 0.090034;-0.382159;0.456303;, + -0.114666;-0.167257;0.149229;, + -0.116086;-0.276934;0.217803;, + -0.020142;-0.108242;0.303668;, + -0.090034;-0.382159;0.456303;, + -0.081739;-0.203143;0.439706;, + -0.076865;-0.377381;0.378108;, + -0.065936;-0.238012;0.335711;, + 0.076865;-0.377381;0.378108;, + -0.077999;-0.438418;0.363464;, + -0.094725;-0.687984;0.346619;, + -0.119790;-0.424686;0.304048;, + -0.160820;-0.602659;0.286432;, + -0.190992;-0.614722;0.342338;, + -0.168141;-0.687707;0.257272;, + -0.151771;-0.687980;0.349147;, + -0.203745;-0.687917;0.313177;, + -0.128500;-0.687445;0.237457;, + -0.079186;-0.687932;0.310966;, + -0.165267;-0.602291;0.204563;, + -0.076312;-0.617099;0.236559;, + -0.125626;-0.603366;0.203812;, + -0.127225;-0.603735;0.285509;, + -0.085434;-0.617617;0.340127;, + -0.068939;-0.687414;0.212852;, + -0.118657;-0.370966;0.289767;, + -0.153385;-0.423611;0.305410;, + -0.215919;-0.687399;0.214649;, + -0.200870;-0.614472;0.257455;, + -0.204332;-0.687587;0.149699;, + -0.191896;-0.646208;0.173407;, + -0.162472;-0.639473;0.139614;, + -0.173907;-0.687338;0.180856;, + -0.169612;-0.687553;0.115905;, + -0.129710;-0.640081;0.138863;, + -0.127130;-0.687344;0.180105;, + -0.130953;-0.687556;0.115154;, + -0.088955;-0.647844;0.171610;, + -0.082862;-0.687595;0.147901;, + -0.091167;-0.448646;0.416058;, + -0.146947;-0.626975;0.378308;, + -0.098602;-0.627845;0.375781;, + -0.183557;-0.435523;0.366725;, + -0.139512;-0.447776;0.419786;, + -0.036911;-0.131458;-0.800774;, + -0.114132;-0.130986;-0.893785;, + -0.218544;-0.657847;-0.902645;, + -0.171757;-0.532488;-0.896119;, + -0.073996;0.255722;-1.483520;, + -0.051230;0.326389;-1.504150;, + -0.065011;0.221538;-1.464050;, + 0.104586;-0.228675;-0.692703;, + 0.091167;-0.448646;0.416057;, + 0.077999;-0.438418;0.363464;, + 0.098603;-0.627845;0.375781;, + 0.094725;-0.687984;0.346619;, + 0.119790;-0.424686;0.304048;, + 0.165267;-0.602291;0.204563;, + 0.085434;-0.617617;0.340127;, + 0.127225;-0.603735;0.285508;, + 0.125626;-0.603366;0.203812;, + 0.076312;-0.617099;0.236559;, + 0.118657;-0.370966;0.289767;, + 0.204332;-0.687587;0.149699;, + 0.162472;-0.639473;0.139614;, + 0.191896;-0.646208;0.173407;, + 0.169612;-0.687553;0.115905;, + 0.129710;-0.640081;0.138863;, + 0.068939;-0.687414;0.212852;, + 0.127130;-0.687344;0.180104;, + 0.082862;-0.687595;0.147901;, + 0.088955;-0.647844;0.171610;, + 0.130953;-0.687556;0.115154;, + 0.153385;-0.423611;0.305410;, + 0.160820;-0.602659;0.286432;, + 0.168141;-0.687707;0.257271;, + 0.128500;-0.687445;0.237457;, + 0.079186;-0.687932;0.310966;, + 0.203745;-0.687917;0.313177;, + 0.173907;-0.687338;0.180856;, + 0.215919;-0.687399;0.214649;, + 0.200870;-0.614472;0.257455;, + 0.190992;-0.614722;0.342338;, + 0.146947;-0.626975;0.378308;, + 0.151771;-0.687979;0.349147;, + 0.183557;-0.435523;0.366725;, + 0.139512;-0.447776;0.419786;, + 0.113246;-0.558335;-0.752050;, + -0.113029;-0.558335;-0.752050;, + -0.058263;-0.180258;-0.792372;, + -0.104586;-0.228675;-0.692703;, + 0.058263;-0.180258;-0.792372;, + 0.114132;-0.130986;-0.893785;, + 0.036911;-0.131458;-0.800774;, + 0.000000;-0.004469;-0.968083;, + 0.000000;0.159119;-1.080890;, + 0.055861;-0.654043;-0.907268;, + 0.079285;-0.545055;-0.826090;, + -0.189298;-0.627377;-1.035100;, + -0.177878;-0.680291;-1.082760;, + -0.214254;-0.664213;-1.040040;, + -0.161256;-0.660443;-1.077820;, + -0.124653;-0.659096;-1.077490;, + -0.108039;-0.624876;-1.034770;, + -0.052024;-0.654043;-0.907268;, + -0.078756;-0.545055;-0.826090;, + -0.111125;-0.618182;-0.950786;, + -0.184997;-0.620703;-0.947721;, + -0.120091;-0.531540;-0.901424;, + -0.093467;-0.697089;-1.086940;, + -0.177140;-0.697089;-1.086940;, + -0.095368;-0.678258;-1.082250;, + -0.184330;-0.689285;-0.864494;, + -0.228502;-0.695391;-1.044220;, + -0.042748;-0.695391;-1.044220;, + -0.054974;-0.660441;-1.039530;, + -0.101027;-0.689285;-0.864498;, + 0.065548;-0.695391;-1.044220;, + 0.092340;-0.696620;-1.085760;, + 0.102919;-0.689285;-0.864498;, + 0.192799;-0.696619;-1.085760;, + 0.099554;-0.677289;-1.081080;, + 0.127676;-0.657618;-1.076310;, + 0.072960;-0.660441;-1.039310;, + 0.120245;-0.531540;-0.901424;, + 0.112616;-0.618182;-0.950786;, + 0.109653;-0.624877;-1.034770;, + 0.187687;-0.627377;-1.035100;, + 0.178790;-0.679375;-1.081580;, + 0.162827;-0.659001;-1.076650;, + 0.000000;0.194767;-1.453810;, + 0.073996;0.255722;-1.483520;, + 0.000000;0.286217;-1.518480;, + 0.051230;0.326388;-1.504150;, + 0.000000;0.213784;-1.355750;, + 0.065011;0.221538;-1.464050;, + 0.182916;-0.689285;-0.864494;, + 0.171441;-0.532488;-0.896119;, + 0.183557;-0.620703;-0.947721;, + 0.215773;-0.657847;-0.902646;, + 0.220422;-0.695391;-1.044220;, + 0.212566;-0.664214;-1.039820;, + 0.067091;-0.158537;-0.643915;, + 0.130206;-0.193912;-0.216350;, + 0.077416;0.007999;-0.964709;, + 0.183964;-0.134440;-0.886644;, + 0.170979;-0.558332;-0.752044;, + 0.194691;-0.546486;-0.818088;, + 0.096383;0.183917;-1.077510;, + 0.102550;0.289818;-1.155630;, + -0.067091;-0.158537;-0.643915;, + -0.130206;-0.193912;-0.216350;, + -0.077416;0.007999;-0.964709;, + 0.000000;0.216114;-1.244810;, + 0.000000;0.218816;-1.313860;, + -0.183964;-0.134440;-0.886644;, + -0.195220;-0.546486;-0.818088;, + -0.171291;-0.558332;-0.752044;, + -0.102550;0.289818;-1.155630;, + -0.096383;0.183918;-1.077510;, + -0.203324;-0.000186;-0.216355;, + 0.000000;0.461380;-0.216367;, + -0.132354;0.415323;-0.216366;, + 0.000000;0.483721;-1.426860;, + 0.000000;0.505008;0.184315;, + -0.083623;0.454487;-1.419150;, + -0.097980;0.599269;-1.043210;, + -0.150776;0.396113;-1.068880;, + 0.000000;0.668371;-1.244740;, + 0.000000;0.660052;-1.123730;, + 0.083623;0.454486;-1.419150;, + 0.000000;0.601379;-1.384240;, + 0.000000;0.628851;-1.039190;, + 0.097980;0.599268;-1.043210;, + 0.150776;0.396113;-1.068880;, + 0.000000;0.588297;-0.907439;, + 0.132354;0.415323;-0.216366;, + 0.203324;-0.000186;-0.216355;, + 0.215676;-0.176166;-0.795945;, + 0.177974;0.258210;-0.971413;, + 0.115772;0.548952;-0.911464;, + 0.143614;0.490599;-0.781781;, + 0.183334;-0.228667;-0.692694;, + 0.215131;0.109326;-0.825489;, + 0.115870;0.444022;-0.665901;, + 0.178124;0.029546;-0.643920;, + 0.160357;0.437455;-1.137120;, + 0.226298;0.365261;-1.243240;, + 0.105258;0.370388;-1.397000;, + 0.104248;0.611072;-1.127950;, + 0.082255;0.262741;-1.368650;, + 0.192870;0.403955;-1.341710;, + 0.166988;0.246562;-1.244800;, + 0.153069;0.277384;-1.326760;, + 0.089221;0.645525;-1.244750;, + 0.139971;0.697089;-1.334440;, + 0.177051;0.542720;-1.241680;, + 0.126150;0.594872;-1.338400;, + 0.041587;0.120377;0.505592;, + 0.067583;0.283180;0.536543;, + 0.104568;0.447773;0.443333;, + 0.000000;0.391487;0.530735;, + 0.043936;0.380679;0.531314;, + 0.149273;0.477514;0.293496;, + 0.172353;-0.275740;0.220239;, + 0.139752;-0.200327;0.446770;, + 0.152251;-0.370463;0.291793;, + 0.192606;-0.235087;0.341477;, + 0.138378;-0.381752;0.461846;, + 0.182423;-0.376028;0.382956;, + 0.160847;0.216311;0.499174;, + 0.116618;-0.015705;0.448978;, + 0.110923;0.461129;0.163966;, + 0.229189;0.099215;0.308897;, + 0.213423;-0.066057;0.311063;, + 0.176064;-0.153352;0.152359;, + 0.170561;0.060886;0.085922;, + -0.215676;-0.176166;-0.795945;, + -0.177974;0.258210;-0.971413;, + -0.115772;0.548952;-0.911464;, + -0.143614;0.490599;-0.781781;, + 0.000000;0.488737;-0.665903;, + 0.000000;0.534271;-0.777755;, + -0.183334;-0.228667;-0.692694;, + -0.215131;0.109326;-0.825489;, + -0.178124;0.029546;-0.643920;, + -0.115870;0.444022;-0.665901;, + -0.160357;0.437455;-1.137120;, + -0.226298;0.365261;-1.243240;, + -0.105258;0.370388;-1.397000;, + -0.104248;0.611072;-1.127950;, + -0.166988;0.246562;-1.244800;, + -0.192870;0.403955;-1.341710;, + -0.082255;0.262741;-1.368650;, + -0.153069;0.277384;-1.326760;, + -0.089221;0.645525;-1.244750;, + -0.139971;0.697089;-1.334440;, + -0.126150;0.594872;-1.338400;, + -0.177051;0.542720;-1.241680;, + -0.041587;0.120377;0.505592;, + 0.000000;0.228662;0.539467;, + 0.000000;0.519446;0.291789;, + -0.149273;0.477514;0.293496;, + -0.172353;-0.275740;0.220239;, + -0.139752;-0.200327;0.446770;, + -0.138378;-0.381752;0.461846;, + -0.192606;-0.235087;0.341477;, + -0.152251;-0.370463;0.291794;, + -0.182423;-0.376028;0.382957;, + -0.116618;-0.015705;0.448978;, + -0.160847;0.216311;0.499174;, + 0.000000;0.469387;0.442753;, + -0.104568;0.447772;0.443333;, + -0.067583;0.283180;0.536543;, + -0.043936;0.380679;0.531314;, + -0.110923;0.461129;0.163966;, + -0.229189;0.099215;0.308897;, + -0.170561;0.060886;0.085922;, + -0.176064;-0.153352;0.152359;, + -0.213423;-0.066057;0.311063;; + + 599; + 3;300,301,302;, + 3;299,300,302;, + 3;298,300,299;, + 3;295,296,297;, + 3;294,295,297;, + 3;299,292,293;, + 3;302,292,299;, + 3;289,290,291;, + 3;288,289,291;, + 3;287,289,288;, + 3;286,290,289;, + 3;287,292,302;, + 3;289,287,302;, + 3;286,302,301;, + 3;289,302,286;, + 3;284,298,285;, + 3;294,284,285;, + 3;293,282,283;, + 3;296,293,283;, + 3;295,294,285;, + 3;292,282,293;, + 3;295,293,296;, + 3;293,295,285;, + 3;285,299,293;, + 3;298,299,285;, + 3;279,280,281;, + 3;278,280,279;, + 3;281,278,279;, + 3;275,276,277;, + 3;274,275,277;, + 3;273,278,281;, + 3;272,276,275;, + 3;271,275,274;, + 3;280,272,275;, + 3;270,271,274;, + 3;270,273,281;, + 3;281,280,275;, + 3;271,270,281;, + 3;275,271,281;, + 3;267,268,269;, + 3;266,268,267;, + 3;263,264,265;, + 3;262,263,265;, + 3;269,264,263;, + 3;261,263,262;, + 3;260,266,267;, + 3;267,269,263;, + 3;261,260,267;, + 3;263,261,267;, + 3;257,258,259;, + 3;256,257,259;, + 3;255,256,259;, + 3;256,253,254;, + 3;257,256,254;, + 3;250,251,252;, + 3;249,250,252;, + 3;248,251,250;, + 3;247,250,249;, + 3;247,258,257;, + 3;248,257,254;, + 3;250,257,248;, + 3;250,247,257;, + 3;246,255,284;, + 3;294,246,284;, + 3;243,244,245;, + 3;294,244,243;, + 3;253,245,242;, + 3;241,253,242;, + 3;246,294,243;, + 3;254,253,241;, + 3;243,245,253;, + 3;253,246,243;, + 3;246,253,256;, + 3;255,246,256;, + 3;238,239,240;, + 3;237,238,240;, + 3;239,238,237;, + 3;234,235,236;, + 3;233,234,236;, + 3;232,239,237;, + 3;231,234,233;, + 3;240,234,231;, + 3;230,235,234;, + 3;229,235,230;, + 3;229,239,232;, + 3;239,234,240;, + 3;230,239,229;, + 3;230,234,239;, + 3;226,227,228;, + 3;225,226,228;, + 3;224,265,264;, + 3;227,224,264;, + 3;223,265,224;, + 3;222,223,224;, + 3;221,226,225;, + 3;226,224,227;, + 3;222,226,221;, + 3;224,226,222;, + 3;219,220,228;, + 3;218,265,223;, + 3;217,223,222;, + 3;216,223,217;, + 3;229,216,217;, + 3;216,215,218;, + 3;232,215,216;, + 3;232,216,229;, + 3;223,216,218;, + 3;213,214,240;, + 3;231,213,240;, + 3;237,211,212;, + 3;211,240,214;, + 3;237,240,211;, + 3;212,215,232;, + 3;237,212,232;, + 3;209,270,210;, + 3;209,215,273;, + 3;273,270,209;, + 3;208,272,280;, + 3;278,212,211;, + 3;214,208,280;, + 3;280,278,211;, + 3;212,273,215;, + 3;278,273,212;, + 3;207,298,284;, + 3;207,284,255;, + 3;206,208,214;, + 3;213,206,214;, + 3;218,262,265;, + 3;209,262,218;, + 3;215,209,218;, + 3;210,262,209;, + 3;261,262,210;, + 3;214,280,211;, + 3;297,244,294;, + 3;219,207,255;, + 3;205,298,207;, + 3;204,207,219;, + 3;204,205,207;, + 3;227,204,219;, + 3;228,227,219;, + 3;205,268,203;, + 3;269,268,205;, + 3;269,205,204;, + 3;210,201,202;, + 3;261,210,202;, + 3;199,200,260;, + 3;198,199,260;, + 3;270,201,210;, + 3;197,277,276;, + 3;274,197,196;, + 3;201,274,196;, + 3;277,197,274;, + 3;270,274,201;, + 3;195,261,202;, + 3;266,260,200;, + 3;198,261,195;, + 3;203,193,194;, + 3;300,203,194;, + 3;268,193,203;, + 3;260,261,198;, + 3;229,217,192;, + 3;191,192,217;, + 3;222,191,217;, + 3;221,189,190;, + 3;188,221,190;, + 3;197,233,236;, + 3;235,196,197;, + 3;192,196,235;, + 3;236,235,197;, + 3;229,192,235;, + 3;187,191,222;, + 3;225,189,221;, + 3;188,187,222;, + 3;220,259,186;, + 3;185,220,186;, + 3;228,220,185;, + 3;221,188,222;, + 3;182,183,184;, + 3;181,182,184;, + 3;180,182,181;, + 3;190,179,182;, + 3;190,182,180;, + 3;233,177,178;, + 3;231,233,178;, + 3;174,175,176;, + 3;173,178,177;, + 3;175,178,173;, + 3;174,213,231;, + 3;176,213,174;, + 3;174,178,175;, + 3;178,174,231;, + 3;170,171,172;, + 3;169,170,172;, + 3;184,171,170;, + 3;170,168,181;, + 3;169,168,170;, + 3;170,181,184;, + 3;167,181,168;, + 3;180,181,167;, + 3;165,166,169;, + 3;164,166,165;, + 3;172,165,169;, + 3;163,184,183;, + 3;171,184,163;, + 3;179,189,162;, + 3;163,161,164;, + 3;165,172,171;, + 3;164,165,171;, + 3;163,164,171;, + 3;183,161,163;, + 3;160,161,183;, + 3;190,189,179;, + 3;179,160,183;, + 3;162,160,179;, + 3;179,183,182;, + 3;157,158,159;, + 3;166,160,162;, + 3;157,155,156;, + 3;159,155,157;, + 3;152,153,154;, + 3;157,154,158;, + 3;152,154,157;, + 3;149,150,151;, + 3;148,149,151;, + 3;147,149,148;, + 3;145,146,158;, + 3;154,145,158;, + 3;145,144,146;, + 3;142,153,143;, + 3;141,142,143;, + 3;156,143,153;, + 3;144,142,141;, + 3;141,150,149;, + 3;146,144,141;, + 3;142,154,153;, + 3;145,154,142;, + 3;144,145,142;, + 3;149,146,141;, + 3;146,147,158;, + 3;149,147,146;, + 3;159,158,147;, + 3;168,139,140;, + 3;169,139,168;, + 3;166,139,169;, + 3;167,168,140;, + 3;162,139,166;, + 3;164,161,160;, + 3;166,164,160;, + 3;187,137,138;, + 3;191,187,138;, + 4;152,157,156,153;, + 3;136,137,187;, + 3;135,136,187;, + 3;187,188,135;, + 3;135,188,180;, + 3;134,185,136;, + 3;135,134,136;, + 3;148,132,133;, + 3;131,148,133;, + 3;151,132,148;, + 3;130,139,162;, + 3;140,139,130;, + 3;159,131,200;, + 3;155,159,200;, + 3;147,131,159;, + 3;148,131,147;, + 3;129,252,251;, + 3;128,249,252;, + 3;128,252,129;, + 3;125,126,127;, + 3;125,123,124;, + 3;121,122,123;, + 3;121,127,120;, + 3;119,121,120;, + 3;118,121,119;, + 3;122,121,118;, + 3;125,121,123;, + 3;117,125,124;, + 3;116,125,117;, + 3;128,125,116;, + 3;125,127,121;, + 3;126,125,128;, + 3;113,114,115;, + 3;112,113,115;, + 3;111,113,112;, + 3;110,115,114;, + 3;109,115,110;, + 3;115,109,122;, + 3;122,112,115;, + 3;106,107,108;, + 3;109,107,106;, + 3;106,124,123;, + 3;108,124,106;, + 3;110,107,109;, + 3;123,122,109;, + 3;109,106,123;, + 3;116,249,128;, + 3;105,249,116;, + 3;103,110,104;, + 3;103,101,102;, + 3;104,101,103;, + 3;103,100,107;, + 3;110,103,107;, + 3;100,103,102;, + 3;119,111,112;, + 3;114,104,110;, + 3;108,107,100;, + 3;112,122,118;, + 3;118,119,112;, + 3;117,100,102;, + 3;124,100,117;, + 3;100,124,108;, + 3;99,105,116;, + 3;120,101,104;, + 3;111,104,114;, + 3;111,119,120;, + 3;111,114,113;, + 3;104,111,120;, + 3;98,120,127;, + 3;97,120,98;, + 3;101,120,97;, + 3;101,95,96;, + 3;97,95,101;, + 3;102,101,96;, + 3;126,97,98;, + 3;126,98,127;, + 3;129,95,97;, + 3;99,102,96;, + 3;117,102,99;, + 3;126,129,97;, + 3;116,117,99;, + 3;128,129,126;, + 3;185,134,94;, + 3;94,228,185;, + 3;228,94,225;, + 3;140,130,94;, + 3;130,162,189;, + 3;130,225,94;, + 3;225,130,189;, + 3;167,140,134;, + 3;134,140,94;, + 3;134,135,167;, + 3;167,135,180;, + 3;190,180,188;, + 3;199,155,200;, + 3;93,177,276;, + 3;272,93,276;, + 3;91,92,175;, + 3;173,177,93;, + 3;175,173,93;, + 3;91,272,208;, + 3;92,91,208;, + 3;91,175,93;, + 3;93,272,91;, + 3;90,151,150;, + 3;90,89,199;, + 3;89,90,150;, + 3;141,143,150;, + 3;143,89,150;, + 3;156,89,143;, + 3;89,155,199;, + 3;155,89,156;, + 3;198,88,90;, + 3;151,90,88;, + 3;199,198,90;, + 3;138,137,195;, + 3;202,138,195;, + 3;87,195,137;, + 3;88,195,87;, + 3;88,198,195;, + 3;87,193,132;, + 3;88,87,132;, + 3;86,288,291;, + 3;85,86,291;, + 3;85,291,290;, + 3;86,83,84;, + 3;82,86,84;, + 3;85,83,86;, + 3;79,80,81;, + 3;78,79,81;, + 3;77,80,79;, + 3;76,77,79;, + 3;75,79,78;, + 3;76,79,75;, + 3;72,73,74;, + 3;76,72,74;, + 3;77,76,74;, + 3;72,70,71;, + 3;73,72,71;, + 3;76,75,70;, + 3;72,76,70;, + 3;69,85,290;, + 3;68,69,290;, + 3;67,78,81;, + 3;64,65,66;, + 3;63,64,66;, + 3;77,64,63;, + 3;64,74,62;, + 3;77,74,64;, + 3;62,65,64;, + 3;80,77,63;, + 3;59,60,61;, + 3;58,59,61;, + 3;57,60,59;, + 3;74,73,62;, + 3;56,59,58;, + 3;55,65,62;, + 3;78,60,57;, + 3;75,78,57;, + 3;67,60,78;, + 3;71,55,62;, + 3;56,55,71;, + 3;73,71,62;, + 3;56,70,59;, + 3;71,70,56;, + 3;59,75,57;, + 3;70,75,59;, + 3;54,69,68;, + 3;81,80,67;, + 3;61,63,66;, + 3;67,61,60;, + 3;63,61,67;, + 3;80,63,67;, + 3;61,84,53;, + 3;58,61,53;, + 3;66,84,61;, + 3;82,84,66;, + 3;52,82,66;, + 3;65,52,66;, + 3;83,56,58;, + 3;83,58,53;, + 3;84,83,53;, + 3;54,52,65;, + 3;55,54,65;, + 3;69,54,55;, + 3;56,69,55;, + 3;85,69,56;, + 3;56,83,85;, + 3;133,132,193;, + 3;193,268,133;, + 3;266,133,268;, + 3;266,131,133;, + 3;200,131,266;, + 3;132,151,88;, + 3;51,105,99;, + 3;49,68,50;, + 3;47,48,287;, + 3;288,47,287;, + 3;82,47,288;, + 3;49,52,54;, + 3;68,49,54;, + 3;82,52,47;, + 3;49,48,47;, + 3;50,48,49;, + 3;49,47,52;, + 3;96,51,99;, + 3;45,46,50;, + 3;44,46,45;, + 3;44,286,301;, + 3;45,286,44;, + 3;45,290,286;, + 3;68,290,45;, + 3;68,45,50;, + 3;86,82,288;, + 3;95,251,43;, + 3;96,95,43;, + 3;51,96,43;, + 3;129,251,95;, + 3;40,41,42;, + 3;39,40,42;, + 3;247,42,41;, + 3;249,42,247;, + 3;105,42,249;, + 3;105,39,42;, + 3;258,247,41;, + 3;51,38,39;, + 3;43,38,51;, + 3;105,51,39;, + 3;248,38,43;, + 3;251,248,43;, + 3;38,248,254;, + 3;37,38,254;, + 3;37,40,39;, + 3;38,37,39;, + 3;36,48,50;, + 3;46,36,50;, + 3;35,46,44;, + 3;282,36,46;, + 3;33,34,282;, + 3;241,34,33;, + 3;32,241,33;, + 3;35,282,46;, + 3;33,282,35;, + 3;31,32,33;, + 3;35,31,33;, + 3;30,31,35;, + 3;292,48,36;, + 3;44,301,30;, + 3;30,301,300;, + 3;287,48,292;, + 3;44,30,35;, + 3;32,41,40;, + 3;28,29,31;, + 3;241,40,37;, + 3;32,40,241;, + 3;32,31,29;, + 3;28,31,30;, + 3;29,259,258;, + 3;258,41,29;, + 3;29,41,32;, + 3;186,29,28;, + 3;29,186,259;, + 3;254,241,37;, + 3;282,292,36;, + 3;27,176,175;, + 3;92,27,175;, + 3;27,92,206;, + 3;176,27,206;, + 3;197,177,233;, + 3;177,197,276;, + 3;208,206,92;, + 3;213,176,206;, + 3;26,196,192;, + 3;26,201,196;, + 3;191,26,192;, + 3;138,26,191;, + 3;26,138,202;, + 3;202,201,26;, + 3;24,185,25;, + 3;193,24,25;, + 3;136,185,24;, + 3;87,24,193;, + 3;24,87,137;, + 3;137,136,24;, + 3;194,30,300;, + 3;194,28,30;, + 3;25,28,194;, + 3;21,22,23;, + 3;20,22,21;, + 3;19,20,21;, + 3;19,21,18;, + 3;21,17,18;, + 3;23,17,21;, + 3;15,16,283;, + 3;283,241,242;, + 3;14,242,245;, + 3;15,242,14;, + 3;283,242,15;, + 3;13,22,20;, + 3;19,13,20;, + 3;10,11,12;, + 3;11,9,12;, + 3;8,245,244;, + 3;14,245,8;, + 4;12,7,22,13;, + 3;9,7,12;, + 3;12,13,10;, + 3;10,13,19;, + 3;6,244,297;, + 3;8,6,17;, + 3;5,8,17;, + 3;14,5,4;, + 3;8,5,14;, + 3;244,6,8;, + 3;3,15,4;, + 3;4,15,14;, + 3;3,16,15;, + 3;4,2,11;, + 3;5,2,4;, + 3;3,4,11;, + 3;16,296,283;, + 3;1,296,16;, + 3;1,297,296;, + 3;6,297,1;, + 3;2,7,9;, + 3;23,7,2;, + 3;22,7,23;, + 3;0,18,1;, + 3;16,0,1;, + 4;17,6,1,18;, + 3;3,0,16;, + 3;34,241,283;, + 3;282,34,283;, + 3;11,2,9;, + 3;23,2,5;, + 3;23,5,17;, + 3;10,3,11;, + 3;18,0,19;, + 3;0,3,10;, + 3;19,0,10;, + 3;25,185,186;, + 3;28,25,186;, + 3;193,25,194;, + 3;264,269,204;, + 3;227,264,204;, + 3;255,220,219;, + 3;259,220,255;, + 3;298,205,203;, + 3;300,298,203;; + + MeshMaterialList { + 1; + 1; + 0;; + Material { + 0.694118;0.694118;0.694118;1.000000;; + 50.000000; + 1.000000;1.000000;1.000000;; + 0.000000;0.000000;0.000000;; + TextureFilename { + "tiger.bmp"; + } + } + } + MeshTextureCoords { + 303; + 0.190860;-0.544059;, + 0.272086;-0.355992;, + 0.077337;-0.522561;, + 0.187013;-0.516511;, + 0.180133;-0.467245;, + 0.179370;-0.461784;, + 0.265206;-0.306726;, + 0.004406;-0.493426;, + 0.264443;-0.301265;, + 0.004719;-0.489377;, + 0.077765;-0.579757;, + 0.077380;-0.528268;, + 0.004406;-0.493426;, + 0.001581;-0.529958;, + 0.265206;-0.306726;, + 0.272086;-0.355992;, + 0.275933;-0.383540;, + 0.180133;-0.467245;, + 0.187013;-0.516511;, + 0.077979;-0.608548;, + 0.000000;-0.550385;, + 0.077765;-0.579757;, + 0.001581;-0.529958;, + 0.077380;-0.528268;, + 0.764787;-0.600058;, + 0.712026;-0.640601;, + 0.882850;-0.350956;, + 0.997293;-0.254425;, + 0.571239;-0.666781;, + 0.466839;-0.585368;, + 0.466839;-0.585368;, + 0.465868;-0.611086;, + 0.395923;-0.575438;, + 0.395452;-0.580559;, + 0.333360;-0.419449;, + 0.395923;-0.575438;, + 0.355184;-0.527123;, + 0.355184;-0.527123;, + 0.355215;-0.645708;, + 0.389458;-0.670719;, + 0.400009;-0.577639;, + 0.450862;-0.619968;, + 0.428283;-0.698636;, + 0.349750;-0.774111;, + 0.450862;-0.619968;, + 0.428283;-0.698636;, + 0.400009;-0.577639;, + 0.349750;-0.774111;, + 0.355215;-0.645708;, + 0.375498;-0.770684;, + 0.389458;-0.670719;, + 0.375498;-0.770684;, + 0.380320;-0.814463;, + 0.385866;-0.993469;, + 0.399884;-0.804614;, + 0.405685;-0.932268;, + 0.387276;-0.940921;, + 0.415286;-0.993271;, + 0.385034;-0.993466;, + 0.396878;-0.993421;, + 0.421811;-0.993083;, + 0.397606;-0.993432;, + 0.432642;-0.932004;, + 0.422107;-0.942626;, + 0.432889;-0.932775;, + 0.405989;-0.933040;, + 0.388004;-0.942997;, + 0.429913;-0.993060;, + 0.404586;-0.766082;, + 0.399436;-0.803843;, + 0.429321;-0.993050;, + 0.415226;-0.940741;, + 0.450708;-0.993185;, + 0.442901;-0.963505;, + 0.454028;-0.958674;, + 0.440448;-0.993006;, + 0.461835;-0.993160;, + 0.454276;-0.959110;, + 0.440696;-0.993010;, + 0.462082;-0.993162;, + 0.443493;-0.964678;, + 0.451300;-0.993190;, + 0.363002;-0.821800;, + 0.375432;-0.949709;, + 0.376264;-0.950333;, + 0.379246;-0.812387;, + 0.361774;-0.821176;, + 0.763676;-0.594291;, + 0.794303;-0.593952;, + 0.797220;-0.971853;, + 0.795071;-0.881937;, + 0.988489;-0.316579;, + 0.995281;-0.265891;, + 0.982078;-0.341098;, + 0.728091;-0.664021;, + 0.363002;-0.821800;, + 0.380320;-0.814463;, + 0.376264;-0.950333;, + 0.385866;-0.993469;, + 0.399884;-0.804614;, + 0.432642;-0.932004;, + 0.388004;-0.942997;, + 0.405989;-0.933040;, + 0.432889;-0.932775;, + 0.422107;-0.942626;, + 0.404586;-0.766082;, + 0.450708;-0.993185;, + 0.454028;-0.958674;, + 0.442901;-0.963505;, + 0.461835;-0.993160;, + 0.454276;-0.959110;, + 0.429913;-0.993060;, + 0.440696;-0.993010;, + 0.451300;-0.993190;, + 0.443493;-0.964678;, + 0.462082;-0.993162;, + 0.399436;-0.803843;, + 0.405685;-0.932268;, + 0.415287;-0.993271;, + 0.421811;-0.993083;, + 0.397606;-0.993432;, + 0.396878;-0.993421;, + 0.440448;-0.993006;, + 0.429321;-0.993050;, + 0.415226;-0.940741;, + 0.387276;-0.940921;, + 0.375432;-0.949709;, + 0.385034;-0.993466;, + 0.379246;-0.812387;, + 0.361774;-0.821176;, + 0.747633;-0.900476;, + 0.747633;-0.900476;, + 0.760910;-0.629293;, + 0.728091;-0.664021;, + 0.760910;-0.629293;, + 0.794303;-0.593952;, + 0.763676;-0.594291;, + 0.818767;-0.503206;, + 0.855912;-0.385869;, + 0.798742;-0.969124;, + 0.772012;-0.890951;, + 0.840834;-0.949998;, + 0.856528;-0.987951;, + 0.842461;-0.976419;, + 0.854901;-0.973715;, + 0.854792;-0.972749;, + 0.840726;-0.948204;, + 0.798742;-0.969124;, + 0.772012;-0.890951;, + 0.813072;-0.943402;, + 0.812062;-0.945211;, + 0.796818;-0.881257;, + 0.857904;-1.000000;, + 0.857904;-1.000000;, + 0.856360;-0.986493;, + 0.784658;-0.994402;, + 0.843837;-0.998782;, + 0.843837;-0.998782;, + 0.842293;-0.973714;, + 0.784659;-0.994402;, + 0.843837;-0.998782;, + 0.857515;-0.999664;, + 0.784659;-0.994402;, + 0.857515;-0.999663;, + 0.855974;-0.985798;, + 0.854404;-0.971689;, + 0.842221;-0.973714;, + 0.796818;-0.881257;, + 0.813072;-0.943402;, + 0.840726;-0.948205;, + 0.840834;-0.949998;, + 0.856139;-0.987294;, + 0.854516;-0.972681;, + 0.978706;-0.360300;, + 0.988489;-0.316579;, + 1.000000;-0.294706;, + 0.995281;-0.265892;, + 0.946417;-0.346659;, + 0.982078;-0.341098;, + 0.784658;-0.994402;, + 0.795071;-0.881937;, + 0.812062;-0.945211;, + 0.797220;-0.971853;, + 0.843837;-0.998782;, + 0.842388;-0.976420;, + 0.712026;-0.613714;, + 0.571239;-0.639087;, + 0.817656;-0.494263;, + 0.791951;-0.596430;, + 0.747631;-0.900474;, + 0.769377;-0.891977;, + 0.854799;-0.368082;, + 0.880522;-0.292123;, + 0.712026;-0.613714;, + 0.571239;-0.639087;, + 0.817656;-0.494263;, + 0.909887;-0.344988;, + 0.932623;-0.343050;, + 0.791951;-0.596430;, + 0.769377;-0.891977;, + 0.747631;-0.900474;, + 0.880522;-0.292123;, + 0.854799;-0.368081;, + 0.571241;-0.500134;, + 0.571245;-0.169067;, + 0.571244;-0.202102;, + 0.969832;-0.153042;, + 0.439309;-0.137774;, + 0.967293;-0.174011;, + 0.843505;-0.070163;, + 0.851957;-0.215881;, + 0.909864;-0.020599;, + 0.870018;-0.026565;, + 0.967293;-0.174011;, + 0.955798;-0.068650;, + 0.842181;-0.048945;, + 0.843505;-0.070164;, + 0.851957;-0.215881;, + 0.798798;-0.078033;, + 0.571244;-0.202102;, + 0.571241;-0.500134;, + 0.762086;-0.626358;, + 0.819864;-0.314794;, + 0.800124;-0.106254;, + 0.757422;-0.148109;, + 0.728088;-0.664016;, + 0.771814;-0.421584;, + 0.719266;-0.181517;, + 0.712028;-0.478808;, + 0.874427;-0.186227;, + 0.909370;-0.238010;, + 0.959999;-0.234332;, + 0.871408;-0.061697;, + 0.950664;-0.311544;, + 0.941794;-0.210256;, + 0.909884;-0.323149;, + 0.936871;-0.301041;, + 0.909867;-0.036985;, + 0.939400;-0.000000;, + 0.908856;-0.110724;, + 0.940704;-0.073317;, + 0.333520;-0.413657;, + 0.323329;-0.296884;, + 0.354021;-0.178827;, + 0.325241;-0.219199;, + 0.325051;-0.226951;, + 0.403359;-0.157494;, + 0.427480;-0.697780;, + 0.352889;-0.643688;, + 0.403919;-0.765721;, + 0.387560;-0.668621;, + 0.347925;-0.773819;, + 0.373902;-0.769713;, + 0.335634;-0.344847;, + 0.352162;-0.511265;, + 0.446010;-0.169247;, + 0.398287;-0.428836;, + 0.397574;-0.547381;, + 0.449832;-0.609995;, + 0.471708;-0.456328;, + 0.762086;-0.626358;, + 0.819864;-0.314794;, + 0.800124;-0.106254;, + 0.757422;-0.148109;, + 0.719266;-0.149444;, + 0.756097;-0.116784;, + 0.728088;-0.664016;, + 0.771814;-0.421584;, + 0.712028;-0.478808;, + 0.719266;-0.181517;, + 0.874427;-0.186227;, + 0.909370;-0.238010;, + 0.959999;-0.234332;, + 0.871408;-0.061697;, + 0.909884;-0.323149;, + 0.941794;-0.210256;, + 0.950664;-0.311544;, + 0.936871;-0.301041;, + 0.909867;-0.036985;, + 0.939400;-0.000000;, + 0.940704;-0.073317;, + 0.908856;-0.110724;, + 0.333520;-0.413657;, + 0.322366;-0.335988;, + 0.403921;-0.127418;, + 0.403359;-0.157494;, + 0.427480;-0.697780;, + 0.352889;-0.643688;, + 0.347925;-0.773819;, + 0.387560;-0.668621;, + 0.403919;-0.765721;, + 0.373901;-0.769713;, + 0.352162;-0.511265;, + 0.335634;-0.344847;, + 0.354212;-0.163323;, + 0.354021;-0.178827;, + 0.323329;-0.296884;, + 0.325051;-0.226951;, + 0.446010;-0.169247;, + 0.398287;-0.428836;, + 0.471708;-0.456328;, + 0.449832;-0.609995;, + 0.397574;-0.547381;; + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Program.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Program.cs new file mode 100644 index 00000000..14ada83b --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Program.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; + +namespace D3D10Tutorial09_WinFormsControl +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new TutorialWindow()); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..1bad839d --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("D3D10Tutorial09_WinFormsControl")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c4d21605-d6db-4779-a72c-4cca985fa5cf")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Properties/Resources.Designer.cs new file mode 100644 index 00000000..3baddf79 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial09_WinFormsControl.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("D3D10Tutorial09_WinFormsControl.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Properties/Settings.Designer.cs new file mode 100644 index 00000000..431db0f9 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial09_WinFormsControl.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/TutorialWindow.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/TutorialWindow.Designer.cs new file mode 100644 index 00000000..cea17df5 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/TutorialWindow.Designer.cs @@ -0,0 +1,63 @@ +namespace D3D10Tutorial09_WinFormsControl +{ + partial class TutorialWindow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TutorialWindow)); + this.directControl = new Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl(); + this.SuspendLayout(); + // + // directControl + // + this.directControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.directControl.Location = new System.Drawing.Point(0, 0); + this.directControl.Name = "directControl"; + this.directControl.Size = new System.Drawing.Size(624, 442); + this.directControl.TabIndex = 4; + this.directControl.SizeChanged += new System.EventHandler(this.directControl_SizeChanged); + // + // TutorialWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(624, 442); + this.Controls.Add(this.directControl); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "TutorialWindow"; + this.Text = "Direct3D 10 Tutorial 9: Meshes"; + this.Load += new System.EventHandler(this.TutorialWindow_Load); + this.ResumeLayout(false); + + } + + #endregion + + private Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl directControl; + } +} + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/TutorialWindow.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/TutorialWindow.cs new file mode 100644 index 00000000..01075d78 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/TutorialWindow.cs @@ -0,0 +1,191 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; +using System.Windows.Media.Media3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; +using Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; + +using DXUtil = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; + +namespace D3D10Tutorial09_WinFormsControl +{ + /// + /// This application demonstrates the use of meshes + /// + /// http://msdn.microsoft.com/en-us/library/bb172493(VS.85).aspx + /// + /// Copyright (c) Microsoft Corporation. All rights reserved. + /// + public partial class TutorialWindow : Form + { + #region Fields + D3DDevice device; + SwapChain swapChain; + RenderTargetView renderTargetView; + Texture2D depthStencil; + DepthStencilView depthStencilView; + ColorRgba backColor = new ColorRgba(0.0F, 0.125F, 0.3F, 1.0F); + + XMesh mesh; + XMeshManager meshManager; + + float t = 0f; + uint dwTimeStart = (uint)Environment.TickCount; + bool needsResizing; + #endregion + + #region TutorialWindow() + /// + /// Initializes a new instance of the class. + /// + public TutorialWindow() + { + InitializeComponent(); + } + #endregion + + #region TutorialWindow_Load() + private void TutorialWindow_Load(object sender, EventArgs e) + { + InitDevice(); + directControl.Render = this.RenderScene; + } + #endregion + + #region directControl_SizeChanged() + private void directControl_SizeChanged(object sender, EventArgs e) + { + needsResizing = true; + } + #endregion + + #region InitDevice() + /// + /// Create Direct3D device and swap chain + /// + protected void InitDevice() + { + device = D3DDevice.CreateDeviceAndSwapChain(directControl.Handle); + swapChain = device.SwapChain; + + SetViews(); + + meshManager = new XMeshManager(device); + mesh = meshManager.Open("Media\\Tiger\\tiger.x"); + + InitMatrices(); + } + #endregion + + #region SetViews() + private void SetViews() + { + // Create a render target view + using (Texture2D pBuffer = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView(pBuffer); + } + + // Create depth stencil texture + Texture2DDescription descDepth = new Texture2DDescription() + { + Width = (uint)directControl.ClientSize.Width, + Height = (uint)directControl.ClientSize.Height, + MipLevels = 1, + ArraySize = 1, + Format = Format.D32Float, + SampleDescription = new SampleDescription() + { + Count = 1, + Quality = 0 + }, + BindingOptions = BindingOptions.DepthStencil, + }; + + depthStencil = device.CreateTexture2D(descDepth); + + // Create the depth stencil view + DepthStencilViewDescription depthStencilViewDesc = new DepthStencilViewDescription() + { + Format = descDepth.Format, + ViewDimension = DepthStencilViewDimension.Texture2D + }; + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc); + + //bind the views to the device + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { renderTargetView }, depthStencilView); + + // Setup the viewport + Viewport vp = new Viewport() + { + Width = (uint)directControl.ClientSize.Width, + Height = (uint)directControl.ClientSize.Height, + MinDepth = 0.0f, + MaxDepth = 1.0f, + TopLeftX = 0, + TopLeftY = 0 + }; + + device.RS.Viewports = new Viewport[] { vp }; + } + #endregion + + #region InitMatrices() + private void InitMatrices() + { + // Initialize the view matrix + Vector3F Eye = new Vector3F( 0.0f, 1.0f, -5.0f ); + Vector3F At = new Vector3F( 0.0f, 0.0f, 0.0f ); + Vector3F Up = new Vector3F( 0.0f, 1.0f, 0.0f ); + + Matrix4x4F viewMatrix; + Matrix4x4F projectionMatrix; + viewMatrix = DXUtil.Camera.MatrixLookAtLH(Eye, At, Up); + + // Initialize the projection matrix + projectionMatrix = DXUtil.Camera.MatrixPerspectiveFovLH((float)Math.PI * 0.25f, ((float)this.ClientSize.Width / (float)this.ClientSize.Height), 0.5f, 1000.0f); + + meshManager.SetViewAndProjection( viewMatrix, projectionMatrix ); + } + #endregion + + #region RenderScene() + /// + /// Render the frame + /// + protected void RenderScene() + { + if (needsResizing) + { + needsResizing = false; + renderTargetView.Dispose(); + SwapChainDescription sd = swapChain.Description; + swapChain.ResizeBuffers(sd.BufferCount, (uint)directControl.ClientSize.Width, (uint)directControl.ClientSize.Height, sd.BufferDescription.Format, sd.Options); + SetViews(); + // Update the projection matrix + InitMatrices(); + } + t = (Environment.TickCount - dwTimeStart) / 1000.0f; + + //WPF transforms used here use degrees as opposed to D3DX which uses radians in the native tutorial + //360 degrees == 2 * Math.PI + //world matrix rotates the first cube by t degrees + RotateTransform3D rt1 = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), t * 60)); + + // Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor); + + // Clear the depth buffer to 1.0 (max depth) + device.ClearDepthStencilView(depthStencilView, ClearOptions.Depth, 1.0f, (byte)0); + + mesh.Render( rt1.Value.ToMatrix4x4F() ); + + Microsoft.WindowsAPICodePack.DirectX.ErrorCode error; + swapChain.TryPresent(1, PresentOptions.None, out error); + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/TutorialWindow.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/TutorialWindow.resx new file mode 100644 index 00000000..0dd393c3 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/TutorialWindow.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAAABABoBgAAlgAAACAgEAAAAAQA6AIAAP4GAAAQEBAAAAAEACgBAADmCQAAMDAAAAAA + CACoDgAADgsAACAgAAAAAAgAqAgAALYZAAAQEAAAAAAIAGgFAABeIgAAMDAAAAAAIACoJQAAxicAACAg + AAAAACAAqBAAAG5NAAAQEAAAAAAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAAAA + AAD//wAA////AACAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMy2t7a2bMzMzMzMzMzMzMzMzMzMzMzMu7a3tnd2d2ZszMzMzMzMzMzMzMzMzMy7t7tr + a2dnZmZmbMzMzMzMzMzMzMzMzLu7e2tnZnZmZmZmZmzMzMzMzMzMzMzMy7u3u7e2tmdmZmZmZmbMzMzM + zMzMzMzMt7e7u3tra2Z2ZmZmZmZszMzMzMzMzMzLu7u7u7u7d7Z2ZmZmZmZmzMzMzMzMzMx7O7u7s3N7 + trd2tmZmZuZmbMzMzMzMzMu7u7uzNye7e2trZmd3ZmZmZszMzMzMzLO7u7MzqmZ3t7Z3ZrdyZmbmZmzM + zMzMy7u7s7MKqqZre2t2t3AqpmZmZmbMzMzMx7OzuzIqqqpnt7a3ZzIqamZm5mbMzMzMO7u7syKqqqpm + e3trYzKqqmZmZmZszMzMu7OzMiqqqqpqe7a2syKqqmpmZmZszMzLszszIiqqqqqmd7t7cCqqqqamZmZm + zMzHu7swAiKqqqqqZ3u3MCqqqqpqZmZmzMzLMzMzACIqKqqqZ7t7Aqqqqqqqd2ZmzMzLO7szMAIiqqqq + anszIqqqqqoid2ZmzMxzszOzMwAiIqqqpmMyKqqqqqIie2ZnbMy7O7OzszAAIiqqqqd6qqqqoiIzd2Zm + bMw3szs7OzMwAiKqqqqqqqqqIDN3tmZ2bMy7M7OzuzszACKqqqqqqqoiA3trZrZmvMxzOzOzs7O7MAIq + qqqqqqcjN7a3t2ZnfMw7M7Ozs7s7MwIqqqqqqqoje3t3a3d2fMx7OzM7O7O7MzAqqqqqqqpnt7e7trZ3 + fMy3MzOzuzuzswKqqqqqqqqme7tra2dnfMx7M7M7M7O7MwKqqqqqqqpqZ7u7u7a2vMx3szszs7OzMqqq + qqqqqqqmpnu7t7tnfMzLczM7OzswKqqqqqoqKqqqpme7u7e7zMzHOzOzMzMCqqqqqqIiKqqqpqZ7u7e2 + zMzLc7MzMzKqqqqqqiIAIiqqqmpnu7t7zMzMtzMzMCKqqqqqqgMwACIqqqqne7e8zMzMN7MzAiqqqqqq + ojMzACIqqqqnO3u8zMzMxzszACKqqqqqIDszMwIiqqIjO7vMzMzMy3MzAAIiqqqqA7O7MwAiIqIDu3vM + zMzMzHtzMwAioqqiM7s7szMCIiAzu7zMzMzMzMe3MwAiKqojM7O7O7MAIgO7u8zMzMzMzMx7MzAAIqID + O7OzuzMwAzO7vMzMzMzMzMzHdzMAAiIzszuzs7MzM7t7zMzMzMzMzMzMtzcwACMzOzM7OzuzM3u8zMzM + zMzMzMzMx7s3MDMzs7Ozs7Ozu7vMzMzMzMzMzMzMzHdzMzOzMzs7Ozs7t7zMzMzMzMzMzMzMzMy3d7cz + s7M7O3u3vMzMzMzMzMzMzMzMzMzMt3t7e3t7e7e8zMzMzMzMzMzMzMzMzMzMzMe3t7e3t8zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz///////8AAP///////wAA///AH///AAD//AAB//8AAP/w + AAB//wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/AAD8AAAAAf8AAPgAAAAA/wAA8AAAAAB/ + AADgAAAAAD8AAOAAAAAAPwAAwAAAAAAfAADAAAAAAB8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAIAA + AAAADwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAADAAAAAAB8AAMAA + AAAAHwAA4AAAAAA/AADgAAAAAD8AAPAAAAAAfwAA+AAAAAD/AAD8AAAAAf8AAP4AAAAD/wAA/wAAAAf/ + AAD/gAAAD/8AAP/AAAAf/wAA//AAAH//AAD//AAB//8AAP//gA///wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgIAAgAAAAIAAgACAgAAAwMDAAICA + gAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzLe2tmbMzMzMzMzMzMzMy3dnZ2ZmZmzMzMzMzMzMzHu7t3ZmZmZmzMzMzMzMzHu7u7 + t7a2ZmZmbMzMzMzMu7uzd3trZmZ2ZmbMzMzMy7uzMqZ7tnd3dmZmbMzMzMuzMCqma2t2cKpmZmzMzMy7 + MyKqqqe2tzKqpmZmzMzLszIqqqpmu3cKqqamZmzMyzMCIqqqpndzKqqqZmZszMszACIqqqprMKqqqqp2 + bMxzszACIiqqpzKqqqoidmbMOzszACIqqqqqqqqiA3ZmzLs7MzAAIqqqqqqiA3dmZsxzM7MzMAKqqqqq + I3trdmfMu7M7OzMAqqqqqqO3trdmzHMzs7MzAqqqqqqqe3t3a8x7OzszMqqqqqqqpme7trbMtzMzMCqq + qqqiqqqmZ7trzMtzMwKqqqqiAiKqqqZ7fMzHszAqqqqqoAAiqqqiu7zMw3MwIiqqqiMwAiqqI7e8zMy3 + MAIiqqIzMwIiIjO7zMzMx3MAIiogM7MAIiM7vMzMzMNzcAIiIzszMAIDu7zMzMzMdzMwIgM7OzMzO3vM + zMzMzMt3MwMzs7OzM7u8zMzMzMzMx3c3Mzs7O7e8zMzMzMzMzMw3e3t7e7e7zMzMzMzMzMzMzMN7e3t8 + zMzMzMzM////////////4B///wAD//4AAf/4AAB/8AAAP+AAAB/gAAAfwAAAD4AAAAeAAAAHgAAABwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AAAAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gA + AH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzM + zMzMzMzMzMzLZmbMzMzMy7e2ZmbMzMyzB3dndmzMyzKqe3CmZszDCqpnMqpmzLMyqqcKqqZsOzAqqqqi + dmwzszCqqie2bDMzMqqqZ7tsMzAqqqqme7zDAqqiAqqrzMcyqqMwojvMzHMqCzAjvMzMxzIzMzvMzMzM + xze7zMzM//+zMPg/a2vgD6pmwAfMzIADMyKAA6e2AAGqpgABzMwAATIqAAFmuwABqqaAA2zMgAMCIsAH + pnfgD6qq+D9szCgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWAAAA0QAAAM4A + AADNAAAAywAAAMgAAADGAAAAxQAAAMIAAADBAAAAvgAAALwAAAC6AAAAtwAAALUAAACzAAAAsAAAAK0A + AACpAAAApgAAAJwAAABzAAAAZwAAADwAAACiAQEAkgEBAN0CAgDAAgIAvQICAH0BAQBWAQEAzgMDAMMD + AwC/AwMAsAMDALQEBACGAwMA5wYGACUBAQDTBgYAxQYGAKQFBQDXBwcAuQcHAMAICABIAwMAMgICALQI + CACtCAgAoQcHAMcKCgD5Dg4AvgsLAOEODgDMDAwAmgoKANIPDwDFEREArQ8PAPoXFwDpFxcApBERANwY + GADJGRkA/iEhALcYGAD0IyMA1B4eAOQiIgBjDw8A7SUlABoEBAD9KioAlxkZAAwCAgClHR0A9SwsADMJ + CQDXJycAuSIiAMYoKAD+NDQAiRwcAPQ0NADnNDQA2jIyAP47OwCqKSkA9j09AP5CQgD+RkYA9ENDAP9J + SQC6NjYAyzw8AGYfHwA1EBAA/05OAPhNTQDlR0cA/1FRAKg3NwD/VVUAu0BAAEkZGQCKMDAA/1paAPZX + VwD2WloA/15eAMhLSwC3RUUA/2FhAG4qKgC/TEwA/2ZmALFHRwDoX18A9mZmALVLSwD/bGwAtk5OAMxZ + WQDmZWUAr01NAKBHRwD/cnIAt1JSADMXFwD2c3MA/3h4ACkUFAD/fX0A/4GBAOl3dwD/hoYA+oODAPaG + hgD/jY0AqF1dAGY5OQD/k5MA5oaGAMVzcwD/mZkA8JOTAP+engD/oqIA+6GhAKNpaQCEVVUA/6amAMuF + hQD/rKwA8KamAP+ysgD0q6sA/7a2APuzswD/ubkA+bW1AP++vgDgqakA/8LCAP/FxQD/yckA6Lm5AP/O + zgCOc3MA/M3NAOzCwgDDq6sAMy0tAAD+/gAA/f0AAPv7AAD5+QAA9/cAAPT0AADx8QAA7+8AAO3tAADp + 6QAA5uYAAOTkAADg4AAA398AANraAADT0wAAyckAAI6OAAB9fQABzs4AAcbGAAHCwgABuroAAbS0AAGt + rQABpKQAAZubAAGHhwAC+fkAAvf3AAF1dQAD//8AA/v7AAX19QAG//8ABubmAAJSUgAJ//8ADP//AAnA + wAAIj48ABmhoAAMxMQAQ8/MAEf7+AAqBgQAGSUkAFv7+AA+qqgAW6+sADH5+AAQoKAAWysoAHf7+ABzX + 1wAo/v4AJujoADT//wAt19cAMuLiADf29gA7/v4ABhgYAEf9/QBU/v4AUPDwAD2wsAAYREQAFj09ABAs + LABO1NQAZPDwAGr29gB29fUAPHx8AC9dXQBarq4Ac93dAIC+vgBDYmIAltTUAIeYmAAAAAAA//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////XGRqcHh+hIeK//// + //////////////////////////////////////////9ISFZaZGpzfoKEh4qNjZCSk/////////////// + ////////////////////////QEBIVlxmc36Eh4qNkJKSk5eXl5mZ//////////////////////////// + /////0xCSEhRWWFteIKHipCSk5mZm5ubm5ubm5v/////////////////////////////QkJMTFFRVllk + anN+hIqNkpmbnaGhoaGfn52d//////////////////////////9GRkxMTEhASFNYWmRteIKHjZKXm6Gj + pKSko6Gfn////////////////////////0ZGRkJCOzszPENVU1lhanN+hYqQl5uho6WlpaSjoZ////// + ////////////////REREPDwzMzMqPWllVVZcZnB4goeKkJecoqaqqaelpKGf//////////////////9E + Pjw8NSUlJRAe/PmoXlhaZG1zfoSHipGYqKirpqmnpaShn////////////////04+PjUlJSUBJKzU5e77 + lWNZYWpzeIKFiY+W+O/7q6qpp6WjoZ3/////////////TkM+NRoaGgQV8MCx4uz0+3JbYWZweH6Ehous + 397u/auqqaeloZ+b////////////Qz44KhoaBB3xw7Kt3Obt+otjWmRqc3iBeozww8rq9f2rqqmnpJ+b + //////////9OQzgnAAAEJPDCtLCt2eTs9P5uW1xkanN7fYDHubDk7fb9q6qppaGdm/////////9DPzYf + AgsW8MS6s7Ct0uLm7fqVY1lcZmx6cfLDtq/c5u32/auqpKOdmf///////1A/OSgHEhbxvsO8t7KuzNnk + 7PT+blhZXGNlgMu8tK/S4urt9v2rpqGfmZf//////1A/MigMGRfr1sfEwLizr8/i5u37i1RRWF5f8cK3 + sq6t0+Lm7PT7q6afmZP//////1A/LBsNGR5H68vHxcG7tbDT5Oz0/mdMVFdg1ru0sK6urrDO3uj5/qKg + mZL//////085LBsKESQeR+vWvsbDvLax2ebt+n1QT0Xww7WxsLCytLe7wd33qKKemZL/////UE9BKxwJ + Cg8ZHiZK27/HxMC3sOLq7v5pX/C9tbGwsbO3u8HH1vGMj5qbmZKN////UE9BKwwKCAcLFBUXSuDWvsXA + ts3k6vPv7+Gyrq+wsrfAxcjxgIyLjpSZl5CK////UE9BIw0LCQcFBxAkHiZK277Eu7PT5OTk4tnPra2v + tsDI8oBxfXqGiI2Tk42H////XU86Ig8NCggFAgIHExUXStHHvbev09zc2dPSz9LQxNaDX2VudXZ+goeQ + ko2E////XU86IhAODAoHBAEAAQ0dLkrLw7myrdLT0s/S09nh+GhpXmNrbXBzeISKkIqC////XU86EREP + DQsIBQIBAAARFibXxrmyrq3MzMzP2eLn92leW1xhZGZqbX6Fiod+////Z1c6EhIRDwwKBwQBAAAEGRfg + xrexrq2tra3P2eLp85ZeWFlZWlxcZHCCh4V4////b109KRMREA4MCQYDAQADGS7WwLOwra2trq2t0+Lm + 7vuLVFFRVlZWWWZ4hYJz////b11LMRMTERANCwgFAgIOHtvBtbGvra6vsbGwrtnk7PX7ckhISEhRUVpw + fnhw////b2dXPSkTEhEPDQoICRIX38CzsK+urrCztri3tLDc5u31+15AQEBASFZmc3Bw/////29XPTEY + ExIRDw0OGWDFt7Kvrq2tsLO6vcK9u7ax3Obt9ftvOzM7O1Fcamb//////29lSz0UGBMSERgW8MKzr6+t + ra2usrvG1svHw8C4sdzm7fX6lTwzM0hWYWT//////29vVz0xFBQUHS3WvLKvrq2tra2xt8bxSuvRyMW9 + uLHc5uzt+qhDM0BRWWT///////93ZUs3GR0eg9bBt7Kvra2tra+zvfEXLSZK28jFvbix2eTq7vlpPkhR + Vv////////90b1dJJB4m0cfCu7Wwra2trrG61S0UFBUuStvIxb24ssnY4/dSPkxWWv//////////d2VX + Uh4m4L/Gwru1sK2usLXFYBIEBREVF0rRyMW9urfA2i06PExW////////////dHdlSUUuSuC/xsK7tbCw + tL3xGQUBAQMQHRdK277FwcLfTRk+RlNi/////////////3d0ZVJFLkrgy8bCu7W0u9YWCgQCAQEDDh0X + StG+x9ZNJDg8TFj///////////////95dGVSRS5K17/Gwru7xhcTCQcFBAMBAw4VLuvW1k0kNjxGU/// + ////////////////f3RlUkUuSte/xsPF8R0OCwoIBwUEAwUTFi5HTR0yPkRU//////////////////// + /393ZVJFTUrXy77bHhMPDQwKCQgHBQQJFBUWJDQ+RFT///////////////////////9/eWVpX2BH8tsX + GRIRDw4NCwoJBwYFITA6OUNEVP//////////////////////////eXl0aXFoYC0dGBMSERAPDQwLCiAo + Mjk/Q05V/////////////////////////////3d/fH1pcVJLPTowMDAvLys0NDk/P05OVVX///////// + ////////////////////////d398dGVlV1dPQUFBQU9PUFBQUFVV//////////////////////////// + //////////90eX95b2dnZ11dXV5eXl5eXv////////////////////////////////////////////9v + cnJycnJubm5eXv////////////////////////////////////////////////////////////////// + ////////////////////////////////AAD///////8AAP//wB///wAA//wAAf//AAD/8AAAf/8AAP/A + AAAf/wAA/4AAAA//AAD/AAAAB/8AAP4AAAAD/wAA/AAAAAH/AAD4AAAAAP8AAPAAAAAAfwAA4AAAAAA/ + AADgAAAAAD8AAMAAAAAAHwAAwAAAAAAfAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAAAA + AAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAgAAAAAAPAACAAAAAAA8AAIAAAAAADwAAwAAAAAAfAADAAAAAAB8AAOAA + AAAAPwAA4AAAAAA/AADwAAAAAH8AAPgAAAAA/wAA/AAAAAH/AAD+AAAAA/8AAP8AAAAH/wAA/4AAAA// + AAD/wAAAH/8AAP/wAAB//wAA//wAAf//AAD//4AP//8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAC9AAAAuwAAALkAAAC2AAAAswAAALEAAAClAAAAowAAAKEA + AACcAAAAkQAAAG0AAABpAAAAZAAAAF0AAABYAAAANgAAADAAAAAqAAAAIgAAABMAAAAHAAAAhgEBAL8C + AgC8AgIAqAICAKECAgBPAQEAQgEBALsDAwCyAwMArQMDAH0CAgC3BAQAiwMDALMFBQC8BwcA3AkJAKUH + BwBVBAQAzgsLALwKCgCqCQkAOwMDAOgNDQAPAQEAXQcHAJcMDACgDg4AvBISAPkaGgDNFhYAWwoKAOcb + GwC2FhYA2hwcAKsXFwDDGxsAuxwcALUbGwDKICAA8ycnAJMZGQBFDAwA0yYmAOUtLQC2JCQA/TQ0APAy + MgDGLCwA+Do6AKwoKAD/PDwA1TMzAP8+PgDpOjoA/0REAPBAQADIOTkAwDc3AP9KSgC3NTUATRcXANdC + QgD/T08A+E1NAM1AQAAqDQ0A5khIACYMDADxTU0Avj09AKw5OQCVMTEA/1VVAMFCQgC6QUEAsT4+AP9b + WwDISUkAvkZGALFCQgBpJycAzU1NAAgDAwD/YmIANBQUAOhcXAD/ZmYAu0tLAPhnZwD/a2sAs0xMALxR + UQD/cnIAkUFBAHk2NgCkS0sA/3Z2AJtISAC2VVUAzmNjAP98fADodXUASyYmAP+EhAD2gYEAqFlZABYM + DAD/jIwAm1hYAGc7OwD+k5MAqmNjANJ9fQD/mpoA/56eAP+iogD/qKgA/6qqAN6WlgD/ra0A+6qqAP+w + sABzUVEA/7i4AOurqwD/u7sA/729APK3twCFZWUA/8PDAL6RkQD/ysoA16urAPXExAD3ysoAwqamAMyx + sQAhHR0AKScnAB0cHAAA//8AAP39AAD7+wAA+PgAAPb2AAD19QAA8/MAAPHxAADv7wAA7e0AAOrqAADm + 5gAA5OQAAOPjAADh4QAA398AAN3dAADY2AAA19cAAM3NAADLywAAx8cAAMPDAADBwQAAtbUAALCwAACt + rQAAqakAAKamAACjowAAlZUAAJKSAABmZgAAZGQAAY2NAAGCggACvLwAA/7+AAPs7AADwsIAApycAAT8 + /AAEtLQABK6uAAJcXAAEl5cAB/n5AAf09AAG2NgABaKiAASRkQADbGwACPX1AAR4eAAJ/v4ADv//AAZm + ZgAQ+voACpycABT//wALiooAFfT0ABz9/QAe6OgAI/39AAk6OgAs/f0ALu7uACKurgAz/f0AHo+PADz8 + /AA86+sAPNXVAEn9/QBG7+8AInBwAFL+/gA2oaEAVPX1AF/9/QAECgoAYOTkAFzT0wBr8fEAaM7OAGO8 + vABx1dUAgN7eAHzIyACQ5eUAfpeXAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////9janB3foKFiP////////////// + /////////////0lJUWNzfoWIiouMjI6Q//////////////////////9ERERJUWNwe4KJjpKUlZSS//// + //////////////9FPj4zMzZKTlVqc36IjJSYmpiVlP//////////////QjY2LSkwdf5XTV9te4KFjZmb + nJqYlP///////////0I2LSYfHOfr9YBOX213f4eR8fienZqYlP//////////OCYZIWvH3Ojz/GhVanN8 + g6HT6vufnZqV/////////zgpGx3ftqrZ5fD3hltjb3p91a3j8/2fnZiS//////9BNCAc1ry3r6bh6vP8 + aF9sdKK3q9rq8/2fnJKQ/////z0yIxPPwby3rqbj7feDWWR90LCqpOHq8vuelo7/////PSoXERbDwr24 + sajl8PliXqK0rKmoqcni7P6bjP///0Y6KgkNExbExb+6s9Lo7pF9yqioqa2zts3pl5OMif//RjolBAoO + ExbPxsC5sNzl5uLZo6WpsLrGoISHj4uF//9GOyIDBAoMERX02Lu0qdrh3trZzK7Uon10en+JioL//1A8 + JAQCAwcXDxMWxbWrpNna2t7g71NeaGxvd4KIfv//XEMgBgQBAAMJDRTktaqlo8jZ3uPsdVRWX19qe4V3 + //9lQysgBgMBAAkQgb2tqKamqKjR4er2dk5LTVVwfnP//2VSORogBgYLHd20q6emp6ywsq7S5fD6gFdF + SWNzbf//YWE5JwcHIRLOrKempaars7rHuLLX6PD3/GZFUWpj////bkgxFxBay7OrpqSkqLDL5Ma/urHR + 5e3y+UZLVf////9uYj8o5MW8tq+opaaruIEUFtbAuK+o4OLxQ0RL/////2JxXlMu1sG8tq+pqa/fEA0T + 9Ma+uLS01DU4RE3//////3F2Z1gWw8G8t7Kx1B0ICA8Vz8K+u9UdMj5H/////////3l4Z1hpw8G9usdY + CwACFxEWw8LYLCs2Rf//////////Ynl4Z1hpw8LA2A4FAAAHDBMu5CwnOEVO////////////Znl4Z2uB + z9sRCwQBAAIKDBwvMThCTP//////////////Znl2dX1rQCEaHyIZGB4rMTxBQkz///////////////// + /3GAeHReSDw3NzI6Oj1GSkr//////////////////////11xeXJuZWBcT1dXV0pK//////////////// + ////////////XGVlZGRkV0//////////////////////////////4B///wAD//4AAf/4AAB/8AAAP+AA + AB/gAAAfwAAAD4AAAAeAAAAHgAAABwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AA + AAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gAAH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvAAAALsAAAC6AAAAsgAAALEAAACwAAAArQAAAKcAAACfAAAAkwAAAH4A + AABtAAAAPAAAAKgEBAChBQUAYAMDADsCAgBVBAQAOwMDAKIMDAC0Dg4Avg8PANEWFgBoCwsA5xoaALsV + FQDFGBgAsxYWADwICACoFxcAgBISAPYuLgDfKSkA4y0tAJwfHwCyJCQAzy0tAOAxMQDzNzcA8zk5APA5 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAJGRkYLISEhHxwcHEB+FxeKtB4exd8o + KOr/ODj//0VF//9QUP//W1v//2Zm//9wcP//eHj//39///+Ghv//jIz//5GR//+Wlv//mZn/2YaG7aNo + aNJZOjquAAAAfwAAAF8AAAA7AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BZmZmBT09PRUwMDA1jB4eiMQa + Gs/0Hh75/ysr//86Ov//SEj//1ZW//9lZf//cXH//319//+Ghv//jo7//5OT//+Zmf//nZ3//6Cg//+k + pP//pqb//6en//+oqP/0oqL5tHl53F9BQbMAAAB9AAAAVgAAAC0AAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wGSkpIHSkpKH3Qp + KV66Hx++6yEh9fsmJv/9Li7//zU1//9DQ///T0///11d//9tbf//enr//4aG//+Pj///l5f//56e//+k + pP//qqr//66u//+wsP//s7P//7Oz//+zs///s7P//7Oz/+6np/ahcXHUNCYmngICAmwAAAA8AAAAFwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////AoCA + gAhEREQimyQkhNAgINz0JSX/9y0t//kvL//8MjL//zQ0//86Ov//RET//1BQ//9aWv//aGj//3R0//9/ + f///ior//5aW//+goP//qqr//7Ky//+3t///vLz//76+//++vv//vb3//7u7//+5uf//t7f/y5GR52VJ + SbcCAgJ5BAQERwAAABoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8DqqqqCU5OTiSsJSWW3CIi7O8lJf/yKir/9Ssr//cqKv/7KCj//iUl//0nJ//4MTH/9zk5//1F + Rf//UVH//19f//9ra///eHj//4WF//+Skv//np7//6mp//+zs///vLz//8LC///Fxf//xsb//8XF///C + wv//vr7//7u7/+KkpPKAXFzDAgICgAAAAEoAAAAaAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wOzs7MKWlpaIrAkJJrfISHz7CUl/+4kJP/wIiL/9B4e//YaGv/5FRX/+BER/+sS + Ev/WICD/3C0t//Q1Nf/+QkL//05O//9bW///Z2f//3V1//+Bgf//jY3//5ub//+mpv//srL//7y8//7D + w//9yMj//svL///Kyv//x8f//8LC//++vv/ura33iGNjxwQEBIAAAABGAAAAFwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////A9XV1QZsbGwariYmkNseHvPnISH/6SAg/+saGv/tFRX/8Q8P//UM + DP/xCQn/1QcH/6EPD/+KLS3/qzk5/983N//7PT3//0lJ//9WVv//YmL//2xs//94eP//hIT//4+P//+a + mv/9paX/9Kur/+Wrq//js7P/7sLC//vMzP/+zs7//8nJ///ExP//v7//7q2t94FeXsMCAgJ5AAAAPAAA + ABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Bo6OjhKoLCxz0iAg6uIbG//kGhr/5hUV/+gP + D//sCQn/7QQE/+MEBP+vAQH/WAcH/0NiYv9anJz/iG5u/8dAQP/1PT3//0ZG//9SUv//Xl7//2ho//9z + c///fHz//4aG//2QkP/wk5P/y4WF/5Rqav+QgYH/u56e/+a+vv/7zs7//8/P///Ly///xMT//76+/+Ol + pfJnSkq3AgICbAAAAC0AAAAIAAAAAAAAAAAAAAAAAAAAAP///wH///8Ev7+/DJg8PEPGISHU3Rsb/98V + Ff/hDg7/4wkJ/+YFBf/kAwP/0AEB/4MBAf8qNTX/CcDA/ybo6P9L6ur/ccDA/6NkZP/hQkL//END//9P + T///Wlr//2Rk//9ubv//eXn//4KC//aGhv/Penr/f09P/zdXV/8/u7v/esXF/7mqqv/pwcH//M7O///P + z///ysr//8PD//+9vf/LkpLnNicnngMDA1cAAAAbAAAAAwAAAAAAAAAAAAAAAP///wL///8HgICAFrch + IajZHR3/2hYW/9sNDf/dBgb/4AIC/98CAv/LAQH/cAAA/x5AQP8Dzc3/APf3/x7///9C/f3/Y/Hx/4S5 + uf/DTk7/9END//5MTP//VVX//2Bg//9qav//c3P//Hx8/+d6ev+eWVn/PCQk/w9/f/8X5ub/VvLy/4vZ + 2f/CsLD/68PD//zOzv//zs7//8jI///AwP//uLj/oXJy1AYGBn8AAAA7AAAACwAAAAAAAAAAAAAAAP// + /wTMzMwKqykpYc0eHvHVFhb/1g4O/9gGBv/aAgL/3AAA/8sAAP9+AAD/GkBA/wO8vP8A8/P/AP7+/xb/ + //81////Vf///3Lh4f+oXl7/5kRE//xGRv//UFD//1pa//9kZP//bW3/9nNz/8lmZv9kNjb/EUdH/wK5 + uf8C9/f/Ov7+/2v39/+X1NT/xrCw/+zDw//9zs7//8zM///Fxf//u7v/7qio92NGRrQDAwNgAAAAHgAA + AAIAAAAAAAAAAP///wZxcXESuyEht9EaGv/RERH/0wYG/9QBAf/XAQH/ywAA/4kAAP8YRkb/AsPD/wDv + 7/8A+fn/AP7+/xD///8o////Rv///2Px8f+JmZn/x01N//RDQ///Skr//1NT//9cXP/8ZWX/5mVl/5tJ + Sf8vGBj/A5ub/wHh4f8A+fn/Jf///0////91+Pj/mdXV/8awsP/swsL//MvL///IyP//v7///7W1/7d+ + ft0GBgaBAAAAOgAAAAoAAAAAAAAAAP///weqJiZVyR0d9MwVFf/ODAz/zgMD/84AAP+7AAD/awAA/xdD + Q/8CsrL/AN/f/wDw8P8A+fn/AP7+/wn///8c////Nv///1X9/f9y39//o2pq/+NDQ//8Q0P//0tL//9U + VP/2Wlr/y1JS/2cuLv8TKyv/ALy8/wDp6f8A+vr/FP///zX///9X////efPz/5vW1v/JsLD/7sLC//zH + x///wcH//7a2//SmpvldPz+vAwMDVwAAABYAAAAAAAAAALOzswq3IyOfyhwc/8kREf/JBwf/xQEB/6kA + AP9hAAD/Ez4+/wKNjf8AuLj/ANHR/wDm5v8A9PT/APz8/wL///8R////KP///0X///9j8vL/ipWV/8xH + R//2PDz//0FB//1JSf/pTEz/oTo6/zQVFf8FeHj/ANbW/wDv7/8A+/v/CP///x////84////V////3X1 + 9f+Zzs7/x6ys/+u9vf/8wMD//ri4//+srP+mbW3TBwcHcQYGBikAAAADAAAAAIVHRxm9ISHaxhkZ/8UM + DP/EBQX/ugAA/40AAP9BAAD/DB0d/wFqav8AnJz/ALa2/wDPz/8A4+P/APLy/wD7+/8G////G////zb/ + //9V+fn/dsLC/6lcXP/kOzv//Tc3//c+Pv/MOTn/aCEh/xI9Pf8Bv7//AObm/wD09P8A/Pz/Af///w3/ + //8a/v7/L/39/0n5+f9o7u7/j8TE/8Ojo//tt7f//Li4//+urv/bjIztFxISiwQEBD4AAAAKAAAAAKgk + JFXFIyP/wxcX/8EJCf/AAgL/twAA/5QAAP9UAAD/GgAA/wMfH/8AcnL/AJaW/wCvr/8Ax8f/ANzc/wDs + 7P8A+Pj/C/7+/yb///9G/f3/Ze3t/4WoqP/DQUH/7i8v/+cwMP+hJyf/OA8P/wZubv8A29v/AO/v/wD4 + +P8A/Pz/AP39/wD8/P8A+fn/BfX1/xXv7/8y4uL/XLq6/5qTk//drKz/+bW1//+trf//n5//ZD8/sQYG + BlEAAAASAAAAALIlJYnCISH/vhQU/74HB/+/AgL/vgAA/60AAP+FAAD/TwAA/xsAAP8DFxf/AGdn/wCM + jP8Apqb/AL29/wDT0/8A6Oj/APf3/xP+/v8z////Uv39/23c3P+eTk7/xyws/7YjI/9dEhL/E0RE/wG4 + uP8A7e3/APb2/wD5+f8A+fn/APX1/wDv7/8A5ub/ANra/wPGxv8Pqqr/N319/41sbP/epKT/+7Oz//+s + rP//np7/mFtbygoKCmIAAAAZAAAAALcoKLG/ISH/uxMT/7sHB/+9AgL/wAAA/78AAP+yAAD/jwAA/1sA + AP8nAAD/CAIC/wFHR/8Afn7/AJub/wC0tP8Az8//AObm/wD5+f8d/v7/Pf///1X09P9wjo7/gjs7/2Qg + IP8gSkr/AsvL/wDt7f8A9/f/APj4/wD39/8A8fH/AOfn/wDZ2f8Ax8f/AZub/whfX/8fOjr/Xjw8/7h5 + ef/wpqb//rGx//+qqv//nZ3/vG1t3RAQEG8AAAAgAAAAALcpKdG8IiL/uRMT/7gGBv+5AQH/vgAA/8MA + AP/EAAD/uwAA/54AAP9uAAD/PAAA/xIAAP8CKyv/AGVl/wCPj/8Ar6//AM/P/wDp6f8D+/v/Jf7+/z39 + /f9I3d3/R7Cw/zGmpv8Sy8v/APX1/wD8/P8A+/v/APn5/wDz8/8A5+f/ANDQ/wCtrf8DhIT/Ej09/zYb + G/9vODj/smFh/+aGhv/7oaH//6ur//+np///mpr/13Z26w8PD3gAAAAlAAAAALksLOe6IyP/thIS/7QE + BP+2AQH/uwAA/8AAAP/FAAD/yQAA/8UAAP+xAAD/iQAA/1cAAP8pAAD/CgAA/wFHR/8Ajo7/ALa2/wDY + 2P8A8PD/DP39/yP///8u/f3/LPj4/yD4+P8R/f3/Bf///wD///8A////APv7/wDq6v8AzMz/BISE/xIt + Lf8xFRX/ZCsr/55HR//MX1//63Nz//qDg///lpb//6Oj//+jo///lpb/63t79RQUFIAGBgYpAAAAALsx + Mfe3IiL/shAQ/7EDA/+zAQH/uAAA/70AAP/CAAD/yAAA/84AAP/OAAD/xAAA/6YAAP91AAD/OQAA/wwA + AP8BUVH/AJub/wDIyP8A5+f/APr6/w3///8Y////Gf///xP///8N////CP///wf///8I////Bubm/wKx + sf8MYWH/KxUV/2IiIv+bOjr/yU9P/+hfX//2Zmb//HBw//94eP//iYn//5mZ//+dnf//kpL/+Hx8+xUV + FYQGBgYrAAAAALs0NP60IiL/rw4O/64DA/+wAAD/tQAA/7oAAP+/AAD/xQAA/8sAAP/RAAD/1QAA/9IA + AP+2AAD/egAA/zEAAP8HDAz/AHd3/wC6uv8A4OD/APX1/wD///8J////C////wr///8H////CP///w3/ + //8T/f3/GsnJ/yZiYv9KGRn/iSgo/8Y+Pv/nTU3/9ldX//xdXf//YGD//2Rk//9tbf//fX3//46O//+X + l///jIz//nh4/xgYGIEGBgYpAAAAALo4OPezJSX/rA8P/6sCAv+tAAD/sgAA/7cAAP+8AAD/wgAA/8gA + AP/OAAD/0wAA/9gAAP/UAAD/rgAA/2gAAP8fAAD/AzU1/wChof8A4OD/APT0/wD9/f8B////A////wP/ + //8E////B////xD///8d/f3/LdfX/0h9ff+FMDD/zTc3//NDQ//9S0v//09P//9SUv//VVX//1hY//9e + Xv//cHD//4OD//+QkP//hob/+G5u/BkZGXsHBwcmAAAAALg+PuizKyv/qhIS/6gCAv+qAAD/rgAA/7MA + AP+5AAD/vgAA/8QAAP/KAAD/0AAA/9YAAP/aAAD/ygAA/5MAAP86AAD/CCUl/wCgoP8A5eX/APb2/wD9 + /f8A////AP///wD///8B////Bv///xD///8h////N/b2/1PKyv+IWlr/zz4+//k9Pf//QED//0ND//9G + Rv//SEj//0pK//9QUP//YmL//3h4//+IiP//gID/7GJi9RsbG3IICAghAAAAALZBQdOzMDD/qRUV/6UE + BP+nAQH/qwAA/7AAAP+1AAD/ugAA/8AAAP/GAAD/zAAA/9IAAP/XAAD/zQAA/5UAAP8xAAD/BWpq/wDM + zP8A8PD/APn5/wD+/v8A/v7/AP///wD9/f8A/v7/Af7+/wv///8d////N////1Ly8v9zvr7/qVtb/+g6 + Ov//NDT//zc3//86Ov//Ozv//z4+//9CQv//VVX//2tr//+AgP//eHj/3FdX6R4eHmcKCgoaAAAAALRD + Q7S0ODj/qhwc/6QICP+lAgL/pwAA/6wAAP+xAAD/tgAA/7wAAP/CAAD/yAAA/84AAP/OAAD/tAAA/1EA + AP8PTEz/AcfH/wDt7f8A9/f/APv7/wD+/v8A/f3/APv7/wD39/8A9vb/APj4/wD8/P8R/v7/Kv///0f9 + /f9k9fX/hL+//71PT//6Kir//yoq//8rK///Li7//zAw//82Nv//R0f//2Ji//91df//bm7/xUxM2iMj + I1gAAAASAAAAALFBQYq2QED/rCcn/6QPD/+jBQX/pAAA/6gAAP+tAAD/sgAA/7cAAP+9AAD/wgAA/8EA + AP+oAAD/QQAA/wx/f/8B0ND/APHx/wD4+P8A+/v/AP39/wD9/f8A+Pj/APHx/wDp6f8A5OT/AObm/wDu + 7v8A+fn/FP7+/zH///9P////bPX1/4y6uv/OQED/+x4e//8dHf//Hx///yIi//8oKP//PDz//1VV//9m + Zv//YGD/qkJCwykpKUUAAAAKAAAAALE9PU+3R0f/rS8v/6MVFf+hCAj/oQEB/6QAAP+pAAD/rQAA/7MA + AP+3AAD/tQAA/44AAP8wDw//Bqys/wDn5/8A9fX/APr6/wD8/P8A/v7/AP7+/wD5+f8A8PD/AN/f/wDL + y/8Aw8P/AMjI/wDX1/8A6Oj/APf3/xb9/f80////Uv///2719f+Ltrb/vkZG//UVFf//EBD//xUV//8b + G///MTH//0hI//9bW///Vlb/iDw8nzU1NTBAQEAEAAAAALEzMwqzRUXZsDo6/6YfH/+gDQ3/ngEB/6EA + AP+kAAD/qQAA/6sAAP+iAAD/agAA/xtDQ/8DwsL/APDw/wD6+v8A+/v/AP7+/wD+/v8A/v7/APz8/wD0 + 9P8A29v/AaWl/wFtbf8Ac3P/AJ6e/wC3t/8Azs7/AOTk/wD39/8W/v7/Nf///1H///9p9/f/f9jY/6Rt + bf/qERH//wcH//8REf//Jyf//z4+//9OTv/jSUntSzw8ak1NTR7///8B////AQAAAACwQkKbtEVF/6kq + Kv+hFBT/nQUF/5wAAP+dAAD/mAAA/4AAAP9DAAD/D2pq/wHR0f8A8/P/APv7/wD9/f8A/v7/AP///wD/ + //8A/v7/APf3/wDl5f8CoqL/Cj8//xAFBf8HERH/AVBQ/wCHh/8Ara3/AMrK/wDk5P8A9/f/Fv7+/zH/ + //9L////Xv39/27f3/+LfHz/0Rwc//oPD///IiL//zU1//9BQf+/Pz/MRkZGSWlpaRH///8B////AQAA + AACuPT1LtktL8602Nv+kHx//mgoK/5EBAf9+AAD/UgAA/yYSEv8Jb2//AcbG/wDn5/8A9fX/APv7/wD+ + /v8A////AP///wD+/v8A+/v/APHx/wHJyf8TQUH/PAAA/0oAAP8qAAD/CgEB/wFISP8AiIj/AKur/wDI + yP8A5OT/APb2/xD9/f8n/v7/Ofv7/0bv7/9XtbX/kDQ0/94aGv/6KSn//Tc3//U4OPmVQUGWXV1dLL+/ + vwgAAAAAAAAAAAAAAAAAAAAAsUZGr7JDQ/+nLS3/mxQU/4IGBv9bAQH/JQIC/wdRUf8BmJj/AMHB/wDZ + 2f8A7Oz/APj4/wD+/v8A////AP///wD9/f8A9vb/AN/f/wiPj/9MAAD/lwAA/5sAAP9wAAD/NAAA/wsA + AP8BR0f/AImJ/wCrq/8AyMj/AOTk/wD09P8C+fn/EPPz/xzX1/81e3v/iRkZ/9wbG//3Kyv/+zg4/8w5 + OdVYWFhRi4uLFv///wQAAAAAAAAAAAAAAAAAAAAArT4+UrNLS+6uPT3/nyUl/4MQEP9VBgb/IQEB/wUh + If8Aenr/AKWl/wDCwv8A29v/AO3t/wD4+P8A/v7/AP39/wD5+f8A6+v/BKqq/zMREf+pAAD/ywAA/8gA + AP+sAAD/dwAA/zcAAP8KAAD/AVFR/wCIiP8ArKz/AMnJ/wDf3/8A5ub/Ac7O/wqBgf9JBwf/sA8P/+kd + Hf/3Ly//7TY29p9CQpR0dHQus7OzCv///wMAAAAAAAAAAAAAAAAAAAAAAAAAAK9FRZu0Skr/qDY2/5Ie + Hv9sDg7/NgMD/w8AAP8CKir/AH19/wClpf8AwsL/ANzc/wDt7f8A+Pj/APn5/wDv7/8Bycn/HTs7/5UA + AP/JAAD/0gAA/9MAAP/MAAD/sQAA/3oAAP86AAD/DAAA/wFKSv8AjIz/AK+v/wDFxf8AwcH/CHx8/zUJ + Cf+SBgb/2RMT//AlJf/1MzP/wjw8xGtra0WmpqYX////BP///wEAAAAAAAAAAAAAAAAAAAAAAAAAAKo5 + OSiwSUnKsUhI/6UzM/+MHh7/YwwM/zMEBP8PAQH/Aisr/wB1df8ApaX/AMLC/wDb2/8A6+v/AO7u/wDa + 2v8Oamr/ZgAA/74AAP/LAAD/zgAA/9AAAP/RAAD/zQAA/7QAAP99AAD/PQAA/wsAAP8AWVn/AJCQ/wCe + nv8Ia2v/MwkJ/4kDA//QDQ3/6hwc//AsLP/UODjgjlJSa5WVlSTo6OgL////Av///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACtPz9ZtE9P47FHR/+kMzP/ihwc/2MODv8yBQX/DgEB/wMuLv8Afn7/AKam/wDB + wf8A19f/ANra/wSlpf88AAD/pQAA/8EAAP/FAAD/yAAA/8sAAP/NAAD/0AAA/80AAP+0AAD/dwAA/zEA + AP8GFBT/AmNj/wZhYf8wCwv/hAQE/8oLC//kGBj/7CYm/90xMe6pRESNi4uLLtLS0hH///8F////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0REdLRQUO+xSEj/ozIy/4kcHP9hDg7/MAQE/w0B + Af8CMDD/AH9//wCkpP8Aubn/Aa6u/xo8PP9+AAD/tQAA/7wAAP+/AAD/wgAA/8UAAP/IAAD/ywAA/80A + AP/JAAD/pwAA/2YAAP8tAAD/GggI/zIGBv9/AwP/xgoK/+AWFv/nJSX/4S8v9LQ8PJ6MjIwz3NzcFv// + /wr///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALBHR361U1PwskpK/6Q1 + Nf+NIiL/YxER/zMICP8QBAT/AzEx/wB0dP8Bj4//Dk1N/1sAAP+lAAD/swAA/7cAAP+6AAD/vQAA/8AA + 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 + yf+AAU3/wANP/+AHYf8= + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/directx.ico b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/directx.ico differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorial09/Tutorial09.sln b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/Tutorial09.sln new file mode 100644 index 00000000..6da8701f --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorial09/Tutorial09.sln @@ -0,0 +1,142 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial09_WinFormsControl", "D3D10Tutorial09_WinFormsControl\D3D10Tutorial09_WinFormsControl.csproj", "{63FAFC43-88BA-48F6-80A6-F164B618A72A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial09_WPF", "D3D10Tutorial09_WPF\D3D10Tutorial09_WPF.csproj", "{790B3091-7B27-4062-B790-6FDE8C69EB7C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX.Direct3DX10", "..\..\..\UtilitiesLibrary\D3DX10Helpers\Direct3DX10.vcproj", "{453FF234-24EC-4CC3-83DA-6D6C54388899}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Library", "Library", "{496A2AA1-DFEC-43FA-9BFA-57E8F9D47901}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utilities", "Utilities", "{F177D56C-726F-405A-B4FB-4C2777793FD9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Direct3DUtilities", "..\..\UtilitiesLibrary\D3DUtilities\Direct3DUtilities.csproj", "{8A152DCF-12AE-492B-9F24-060B90B2DDD0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MeshLoader", "..\..\UtilitiesLibrary\MeshLoader\MeshLoader.csproj", "{B28ADA8B-BD7E-4C11-8298-C39F7C456365}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|Win32.ActiveCfg = Debug|x64 + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|x64.ActiveCfg = Debug|x64 + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|x64.Build.0 = Debug|x64 + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|Any CPU.Build.0 = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|Win32.ActiveCfg = Release|x64 + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|x64.ActiveCfg = Release|x64 + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|x64.Build.0 = Release|x64 + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|Win32.ActiveCfg = Debug|x64 + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|x64.ActiveCfg = Debug|x64 + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|x64.Build.0 = Debug|x64 + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|Any CPU.Build.0 = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|Win32.ActiveCfg = Release|x64 + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|x64.ActiveCfg = Release|x64 + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|x64.Build.0 = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.Build.0 = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.ActiveCfg = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.Build.0 = Release|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Any CPU.ActiveCfg = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Win32.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Win32.Build.0 = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|x64.ActiveCfg = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|x64.Build.0 = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Any CPU.ActiveCfg = Release|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Mixed Platforms.Build.0 = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Win32.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Win32.Build.0 = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|x64.ActiveCfg = Release|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|x64.Build.0 = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.ActiveCfg = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.Build.0 = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.ActiveCfg = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.Build.0 = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Win32.ActiveCfg = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.ActiveCfg = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.Build.0 = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Win32.ActiveCfg = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.ActiveCfg = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.Build.0 = Release|x64 + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Win32.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|x64.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Any CPU.Build.0 = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Win32.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|x64.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {453FF234-24EC-4CC3-83DA-6D6C54388899} = {F177D56C-726F-405A-B4FB-4C2777793FD9} + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} = {F177D56C-726F-405A-B4FB-4C2777793FD9} + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} = {F177D56C-726F-405A-B4FB-4C2777793FD9} + {B28ADA8B-BD7E-4C11-8298-C39F7C456365} = {F177D56C-726F-405A-B4FB-4C2777793FD9} + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} = {496A2AA1-DFEC-43FA-9BFA-57E8F9D47901} + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/App.xaml b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/App.xaml new file mode 100644 index 00000000..1927a486 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/App.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/App.xaml.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/App.xaml.cs new file mode 100644 index 00000000..14306637 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/App.xaml.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Windows; + +namespace D3D10Tutorial01_WPF +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/D3D10Tutorial01_WPF.csproj b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/D3D10Tutorial01_WPF.csproj new file mode 100644 index 00000000..c34f656f --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/D3D10Tutorial01_WPF.csproj @@ -0,0 +1,111 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {980315C4-115D-482E-A484-4AFDD0A4B569} + WinExe + Properties + D3D10Tutorial01_WPF + D3D10Tutorial01_WPF + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + TutorialWindow.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..473dbb0b --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Properties/AssemblyInfo.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("D3D10Tutorial01_WPF")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Properties/Resources.Designer.cs new file mode 100644 index 00000000..3a25f660 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial01_WPF.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("D3D10Tutorial01_WPF.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Properties/Settings.Designer.cs new file mode 100644 index 00000000..329b9ec1 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial01_WPF.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/TutorialWindow.xaml b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/TutorialWindow.xaml new file mode 100644 index 00000000..553aaaea --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/TutorialWindow.xaml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/TutorialWindow.xaml.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/TutorialWindow.xaml.cs new file mode 100644 index 00000000..26b68bd2 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/TutorialWindow.xaml.cs @@ -0,0 +1,96 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Windows; +using Microsoft.WindowsAPICodePack.DirectX.Controls; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; + +namespace D3D10Tutorial01_WPF +{ + /// + /// This application demonstrates creating a Direct3D 10 device + /// + /// http://msdn.microsoft.com/en-us/library/bb172485(VS.85).aspx + /// + /// Copyright (c) Microsoft Corporation. All rights reserved. + /// + public partial class TutorialWindow : Window + { + #region Fields + DirectHost host; + D3DDevice device; + SwapChain swapChain; + RenderTargetView renderTargetView; + ColorRgba backColor = new ColorRgba ( 0.0F, 0.125F, 0.3F, 1.0F ); + #endregion + + #region TutorialWindow() + /// + /// Initializes a new instance of the class. + /// + public TutorialWindow() + { + InitializeComponent(); + host = new DirectHost(/*ControlHostElement.ActualWidth, ControlHostElement.ActualHeight*/); + ControlHostElement.Child = host; + } + #endregion + + #region Window_Loaded() + /// + /// Handles the Loaded event of the window. + /// + /// The source of the event. + /// The instance containing the event data. + private void Window_Loaded(object sender, RoutedEventArgs e) + { + InitDevice(); + host.Render = RenderScene; + } + #endregion + + #region InitDevice() + /// + /// Create Direct3D device and swap chain + /// + public void InitDevice() + { + device = D3DDevice.CreateDeviceAndSwapChain(host.Handle); + swapChain = device.SwapChain; + + // Create a render target view + using (Texture2D pBuffer = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView(pBuffer); + } + + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { renderTargetView }, null); + + // Setup the viewport + Viewport vp = new Viewport() + { + Width = (uint)host.ActualWidth, + Height = (uint)host.ActualHeight, + MinDepth = 0.0f, + MaxDepth = 1.0f, + TopLeftX = 0, + TopLeftY = 0 + }; + + device.RS.Viewports = new Viewport[] { vp }; + } + #endregion + + #region RenderScene() + /// + /// Render the frame + /// + protected void RenderScene() + { + // Just clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor); + swapChain.Present(0, PresentOptions.None); + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/directx.ico b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WPF/directx.ico differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/D3D10Tutorial01_WinFormsControl.csproj b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/D3D10Tutorial01_WinFormsControl.csproj new file mode 100644 index 00000000..66fff45b --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/D3D10Tutorial01_WinFormsControl.csproj @@ -0,0 +1,100 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {9AE5997A-8072-41C0-9324-BC886BFD6C66} + WinExe + Properties + D3D10Tutorial01_WinFormsControl + D3D10Tutorial01_WinFormsControl + v3.5 + 512 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + + + + 3.0 + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + TutorialWindow.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + Form + + + TutorialWindow.cs + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Program.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Program.cs new file mode 100644 index 00000000..ce67116a --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Program.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; + +namespace D3D10Tutorial01_WinFormsControl +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new TutorialWindow()); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..6f56bd4a --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("D3D10Tutorial01_WinFormsControl")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c4d21605-d6db-4779-a72c-4cca985fa5cf")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Properties/Resources.Designer.cs new file mode 100644 index 00000000..eaaa13bc --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial01_WinFormsControl.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("D3D10Tutorial01_WinFormsControl.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Properties/Settings.Designer.cs new file mode 100644 index 00000000..afbbeb0f --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial01_WinFormsControl.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/TutorialWindow.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/TutorialWindow.Designer.cs new file mode 100644 index 00000000..052b87df --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/TutorialWindow.Designer.cs @@ -0,0 +1,63 @@ +namespace D3D10Tutorial01_WinFormsControl +{ + partial class TutorialWindow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TutorialWindow)); + this.directControl = new Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl(); + this.SuspendLayout(); + // + // directControl + // + this.directControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.directControl.Location = new System.Drawing.Point(0, 0); + this.directControl.Name = "directControl"; + this.directControl.Size = new System.Drawing.Size(624, 442); + this.directControl.TabIndex = 4; + // + // TutorialWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(624, 442); + this.Controls.Add(this.directControl); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "TutorialWindow"; + this.Text = "Direct3D 10 Tutorial 1: Direct3D 10 Basics"; + this.Load += new System.EventHandler(this.TutorialWindow_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.TutorialWindow_FormClosing); + this.ResumeLayout(false); + + } + + #endregion + + private Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl directControl; + } +} + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/TutorialWindow.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/TutorialWindow.cs new file mode 100644 index 00000000..6435b35e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/TutorialWindow.cs @@ -0,0 +1,96 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; + +namespace D3D10Tutorial01_WinFormsControl +{ + /// + /// This application demonstrates creating a Direct3D 10 device + /// + /// http://msdn.microsoft.com/en-us/library/bb172485(VS.85).aspx + /// + /// Copyright (c) Microsoft Corporation. All rights reserved. + /// + public partial class TutorialWindow : Form + { + #region Fields + D3DDevice device; + SwapChain swapChain; + RenderTargetView renderTargetView; + ColorRgba backColor = new ColorRgba(0.0F, 0.125F, 0.3F, 1.0F); + #endregion + + #region TutorialWindow() + /// + /// Initializes a new instance of the class. + /// + public TutorialWindow() + { + InitializeComponent(); + } + #endregion + + #region TutorialWindow_Load() + private void TutorialWindow_Load(object sender, EventArgs e) + { + InitDevice(); + directControl.Render = this.RenderScene; + } + #endregion + + #region TutorialWindow_FormClosing() + private void TutorialWindow_FormClosing(object sender, FormClosingEventArgs e) + { + directControl.Render = null; + device.ClearState(); + } + #endregion + + #region InitDevice() + /// + /// Create Direct3D device and swap chain + /// + protected void InitDevice() + { + device = D3DDevice.CreateDeviceAndSwapChain(directControl.Handle); + swapChain = device.SwapChain; + + // Create a render target view + using (Texture2D pBuffer = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView(pBuffer); + } + + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { renderTargetView }); + + // Setup the viewport + Viewport vp = new Viewport() + { + Width = (uint)directControl.ClientSize.Width, + Height = (uint)directControl.ClientSize.Height, + MinDepth = 0.0f, + MaxDepth = 1.0f, + TopLeftX = 0, + TopLeftY = 0 + }; + + device.RS.Viewports = new Viewport[] { vp }; + } + #endregion + + #region RenderScene() + /// + /// Render the frame + /// + protected void RenderScene() + { + // Just clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor); + swapChain.Present(0, PresentOptions.None); + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/TutorialWindow.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/TutorialWindow.resx new file mode 100644 index 00000000..0dd393c3 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/TutorialWindow.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAAABABoBgAAlgAAACAgEAAAAAQA6AIAAP4GAAAQEBAAAAAEACgBAADmCQAAMDAAAAAA + CACoDgAADgsAACAgAAAAAAgAqAgAALYZAAAQEAAAAAAIAGgFAABeIgAAMDAAAAAAIACoJQAAxicAACAg + AAAAACAAqBAAAG5NAAAQEAAAAAAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAAAA + AAD//wAA////AACAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMy2t7a2bMzMzMzMzMzMzMzMzMzMzMzMu7a3tnd2d2ZszMzMzMzMzMzMzMzMzMy7t7tr + a2dnZmZmbMzMzMzMzMzMzMzMzLu7e2tnZnZmZmZmZmzMzMzMzMzMzMzMy7u3u7e2tmdmZmZmZmbMzMzM + zMzMzMzMt7e7u3tra2Z2ZmZmZmZszMzMzMzMzMzLu7u7u7u7d7Z2ZmZmZmZmzMzMzMzMzMx7O7u7s3N7 + trd2tmZmZuZmbMzMzMzMzMu7u7uzNye7e2trZmd3ZmZmZszMzMzMzLO7u7MzqmZ3t7Z3ZrdyZmbmZmzM + zMzMy7u7s7MKqqZre2t2t3AqpmZmZmbMzMzMx7OzuzIqqqpnt7a3ZzIqamZm5mbMzMzMO7u7syKqqqpm + e3trYzKqqmZmZmZszMzMu7OzMiqqqqpqe7a2syKqqmpmZmZszMzLszszIiqqqqqmd7t7cCqqqqamZmZm + zMzHu7swAiKqqqqqZ3u3MCqqqqpqZmZmzMzLMzMzACIqKqqqZ7t7Aqqqqqqqd2ZmzMzLO7szMAIiqqqq + anszIqqqqqoid2ZmzMxzszOzMwAiIqqqpmMyKqqqqqIie2ZnbMy7O7OzszAAIiqqqqd6qqqqoiIzd2Zm + bMw3szs7OzMwAiKqqqqqqqqqIDN3tmZ2bMy7M7OzuzszACKqqqqqqqoiA3trZrZmvMxzOzOzs7O7MAIq + qqqqqqcjN7a3t2ZnfMw7M7Ozs7s7MwIqqqqqqqoje3t3a3d2fMx7OzM7O7O7MzAqqqqqqqpnt7e7trZ3 + fMy3MzOzuzuzswKqqqqqqqqme7tra2dnfMx7M7M7M7O7MwKqqqqqqqpqZ7u7u7a2vMx3szszs7OzMqqq + qqqqqqqmpnu7t7tnfMzLczM7OzswKqqqqqoqKqqqpme7u7e7zMzHOzOzMzMCqqqqqqIiKqqqpqZ7u7e2 + zMzLc7MzMzKqqqqqqiIAIiqqqmpnu7t7zMzMtzMzMCKqqqqqqgMwACIqqqqne7e8zMzMN7MzAiqqqqqq + ojMzACIqqqqnO3u8zMzMxzszACKqqqqqIDszMwIiqqIjO7vMzMzMy3MzAAIiqqqqA7O7MwAiIqIDu3vM + zMzMzHtzMwAioqqiM7s7szMCIiAzu7zMzMzMzMe3MwAiKqojM7O7O7MAIgO7u8zMzMzMzMx7MzAAIqID + O7OzuzMwAzO7vMzMzMzMzMzHdzMAAiIzszuzs7MzM7t7zMzMzMzMzMzMtzcwACMzOzM7OzuzM3u8zMzM + zMzMzMzMx7s3MDMzs7Ozs7Ozu7vMzMzMzMzMzMzMzHdzMzOzMzs7Ozs7t7zMzMzMzMzMzMzMzMy3d7cz + s7M7O3u3vMzMzMzMzMzMzMzMzMzMt3t7e3t7e7e8zMzMzMzMzMzMzMzMzMzMzMe3t7e3t8zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz///////8AAP///////wAA///AH///AAD//AAB//8AAP/w + AAB//wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/AAD8AAAAAf8AAPgAAAAA/wAA8AAAAAB/ + AADgAAAAAD8AAOAAAAAAPwAAwAAAAAAfAADAAAAAAB8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAIAA + AAAADwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAADAAAAAAB8AAMAA + AAAAHwAA4AAAAAA/AADgAAAAAD8AAPAAAAAAfwAA+AAAAAD/AAD8AAAAAf8AAP4AAAAD/wAA/wAAAAf/ + AAD/gAAAD/8AAP/AAAAf/wAA//AAAH//AAD//AAB//8AAP//gA///wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgIAAgAAAAIAAgACAgAAAwMDAAICA + gAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzLe2tmbMzMzMzMzMzMzMy3dnZ2ZmZmzMzMzMzMzMzHu7t3ZmZmZmzMzMzMzMzHu7u7 + t7a2ZmZmbMzMzMzMu7uzd3trZmZ2ZmbMzMzMy7uzMqZ7tnd3dmZmbMzMzMuzMCqma2t2cKpmZmzMzMy7 + MyKqqqe2tzKqpmZmzMzLszIqqqpmu3cKqqamZmzMyzMCIqqqpndzKqqqZmZszMszACIqqqprMKqqqqp2 + bMxzszACIiqqpzKqqqoidmbMOzszACIqqqqqqqqiA3ZmzLs7MzAAIqqqqqqiA3dmZsxzM7MzMAKqqqqq + I3trdmfMu7M7OzMAqqqqqqO3trdmzHMzs7MzAqqqqqqqe3t3a8x7OzszMqqqqqqqpme7trbMtzMzMCqq + qqqiqqqmZ7trzMtzMwKqqqqiAiKqqqZ7fMzHszAqqqqqoAAiqqqiu7zMw3MwIiqqqiMwAiqqI7e8zMy3 + MAIiqqIzMwIiIjO7zMzMx3MAIiogM7MAIiM7vMzMzMNzcAIiIzszMAIDu7zMzMzMdzMwIgM7OzMzO3vM + zMzMzMt3MwMzs7OzM7u8zMzMzMzMx3c3Mzs7O7e8zMzMzMzMzMw3e3t7e7e7zMzMzMzMzMzMzMN7e3t8 + zMzMzMzM////////////4B///wAD//4AAf/4AAB/8AAAP+AAAB/gAAAfwAAAD4AAAAeAAAAHgAAABwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AAAAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gA + AH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzM + zMzMzMzMzMzLZmbMzMzMy7e2ZmbMzMyzB3dndmzMyzKqe3CmZszDCqpnMqpmzLMyqqcKqqZsOzAqqqqi + dmwzszCqqie2bDMzMqqqZ7tsMzAqqqqme7zDAqqiAqqrzMcyqqMwojvMzHMqCzAjvMzMxzIzMzvMzMzM + xze7zMzM//+zMPg/a2vgD6pmwAfMzIADMyKAA6e2AAGqpgABzMwAATIqAAFmuwABqqaAA2zMgAMCIsAH + pnfgD6qq+D9szCgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWAAAA0QAAAM4A + AADNAAAAywAAAMgAAADGAAAAxQAAAMIAAADBAAAAvgAAALwAAAC6AAAAtwAAALUAAACzAAAAsAAAAK0A + AACpAAAApgAAAJwAAABzAAAAZwAAADwAAACiAQEAkgEBAN0CAgDAAgIAvQICAH0BAQBWAQEAzgMDAMMD + AwC/AwMAsAMDALQEBACGAwMA5wYGACUBAQDTBgYAxQYGAKQFBQDXBwcAuQcHAMAICABIAwMAMgICALQI + CACtCAgAoQcHAMcKCgD5Dg4AvgsLAOEODgDMDAwAmgoKANIPDwDFEREArQ8PAPoXFwDpFxcApBERANwY + GADJGRkA/iEhALcYGAD0IyMA1B4eAOQiIgBjDw8A7SUlABoEBAD9KioAlxkZAAwCAgClHR0A9SwsADMJ + CQDXJycAuSIiAMYoKAD+NDQAiRwcAPQ0NADnNDQA2jIyAP47OwCqKSkA9j09AP5CQgD+RkYA9ENDAP9J + SQC6NjYAyzw8AGYfHwA1EBAA/05OAPhNTQDlR0cA/1FRAKg3NwD/VVUAu0BAAEkZGQCKMDAA/1paAPZX + VwD2WloA/15eAMhLSwC3RUUA/2FhAG4qKgC/TEwA/2ZmALFHRwDoX18A9mZmALVLSwD/bGwAtk5OAMxZ + WQDmZWUAr01NAKBHRwD/cnIAt1JSADMXFwD2c3MA/3h4ACkUFAD/fX0A/4GBAOl3dwD/hoYA+oODAPaG + hgD/jY0AqF1dAGY5OQD/k5MA5oaGAMVzcwD/mZkA8JOTAP+engD/oqIA+6GhAKNpaQCEVVUA/6amAMuF + hQD/rKwA8KamAP+ysgD0q6sA/7a2APuzswD/ubkA+bW1AP++vgDgqakA/8LCAP/FxQD/yckA6Lm5AP/O + zgCOc3MA/M3NAOzCwgDDq6sAMy0tAAD+/gAA/f0AAPv7AAD5+QAA9/cAAPT0AADx8QAA7+8AAO3tAADp + 6QAA5uYAAOTkAADg4AAA398AANraAADT0wAAyckAAI6OAAB9fQABzs4AAcbGAAHCwgABuroAAbS0AAGt + rQABpKQAAZubAAGHhwAC+fkAAvf3AAF1dQAD//8AA/v7AAX19QAG//8ABubmAAJSUgAJ//8ADP//AAnA + wAAIj48ABmhoAAMxMQAQ8/MAEf7+AAqBgQAGSUkAFv7+AA+qqgAW6+sADH5+AAQoKAAWysoAHf7+ABzX + 1wAo/v4AJujoADT//wAt19cAMuLiADf29gA7/v4ABhgYAEf9/QBU/v4AUPDwAD2wsAAYREQAFj09ABAs + LABO1NQAZPDwAGr29gB29fUAPHx8AC9dXQBarq4Ac93dAIC+vgBDYmIAltTUAIeYmAAAAAAA//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////XGRqcHh+hIeK//// + //////////////////////////////////////////9ISFZaZGpzfoKEh4qNjZCSk/////////////// + ////////////////////////QEBIVlxmc36Eh4qNkJKSk5eXl5mZ//////////////////////////// + /////0xCSEhRWWFteIKHipCSk5mZm5ubm5ubm5v/////////////////////////////QkJMTFFRVllk + anN+hIqNkpmbnaGhoaGfn52d//////////////////////////9GRkxMTEhASFNYWmRteIKHjZKXm6Gj + pKSko6Gfn////////////////////////0ZGRkJCOzszPENVU1lhanN+hYqQl5uho6WlpaSjoZ////// + ////////////////REREPDwzMzMqPWllVVZcZnB4goeKkJecoqaqqaelpKGf//////////////////9E + Pjw8NSUlJRAe/PmoXlhaZG1zfoSHipGYqKirpqmnpaShn////////////////04+PjUlJSUBJKzU5e77 + lWNZYWpzeIKFiY+W+O/7q6qpp6WjoZ3/////////////TkM+NRoaGgQV8MCx4uz0+3JbYWZweH6Ehous + 397u/auqqaeloZ+b////////////Qz44KhoaBB3xw7Kt3Obt+otjWmRqc3iBeozww8rq9f2rqqmnpJ+b + //////////9OQzgnAAAEJPDCtLCt2eTs9P5uW1xkanN7fYDHubDk7fb9q6qppaGdm/////////9DPzYf + AgsW8MS6s7Ct0uLm7fqVY1lcZmx6cfLDtq/c5u32/auqpKOdmf///////1A/OSgHEhbxvsO8t7KuzNnk + 7PT+blhZXGNlgMu8tK/S4urt9v2rpqGfmZf//////1A/MigMGRfr1sfEwLizr8/i5u37i1RRWF5f8cK3 + sq6t0+Lm7PT7q6afmZP//////1A/LBsNGR5H68vHxcG7tbDT5Oz0/mdMVFdg1ru0sK6urrDO3uj5/qKg + mZL//////085LBsKESQeR+vWvsbDvLax2ebt+n1QT0Xww7WxsLCytLe7wd33qKKemZL/////UE9BKxwJ + Cg8ZHiZK27/HxMC3sOLq7v5pX/C9tbGwsbO3u8HH1vGMj5qbmZKN////UE9BKwwKCAcLFBUXSuDWvsXA + ts3k6vPv7+Gyrq+wsrfAxcjxgIyLjpSZl5CK////UE9BIw0LCQcFBxAkHiZK277Eu7PT5OTk4tnPra2v + tsDI8oBxfXqGiI2Tk42H////XU86Ig8NCggFAgIHExUXStHHvbev09zc2dPSz9LQxNaDX2VudXZ+goeQ + ko2E////XU86IhAODAoHBAEAAQ0dLkrLw7myrdLT0s/S09nh+GhpXmNrbXBzeISKkIqC////XU86EREP + DQsIBQIBAAARFibXxrmyrq3MzMzP2eLn92leW1xhZGZqbX6Fiod+////Z1c6EhIRDwwKBwQBAAAEGRfg + xrexrq2tra3P2eLp85ZeWFlZWlxcZHCCh4V4////b109KRMREA4MCQYDAQADGS7WwLOwra2trq2t0+Lm + 7vuLVFFRVlZWWWZ4hYJz////b11LMRMTERANCwgFAgIOHtvBtbGvra6vsbGwrtnk7PX7ckhISEhRUVpw + fnhw////b2dXPSkTEhEPDQoICRIX38CzsK+urrCztri3tLDc5u31+15AQEBASFZmc3Bw/////29XPTEY + ExIRDw0OGWDFt7Kvrq2tsLO6vcK9u7ax3Obt9ftvOzM7O1Fcamb//////29lSz0UGBMSERgW8MKzr6+t + ra2usrvG1svHw8C4sdzm7fX6lTwzM0hWYWT//////29vVz0xFBQUHS3WvLKvrq2tra2xt8bxSuvRyMW9 + uLHc5uzt+qhDM0BRWWT///////93ZUs3GR0eg9bBt7Kvra2tra+zvfEXLSZK28jFvbix2eTq7vlpPkhR + Vv////////90b1dJJB4m0cfCu7Wwra2trrG61S0UFBUuStvIxb24ssnY4/dSPkxWWv//////////d2VX + Uh4m4L/Gwru1sK2usLXFYBIEBREVF0rRyMW9urfA2i06PExW////////////dHdlSUUuSuC/xsK7tbCw + tL3xGQUBAQMQHRdK277FwcLfTRk+RlNi/////////////3d0ZVJFLkrgy8bCu7W0u9YWCgQCAQEDDh0X + StG+x9ZNJDg8TFj///////////////95dGVSRS5K17/Gwru7xhcTCQcFBAMBAw4VLuvW1k0kNjxGU/// + ////////////////f3RlUkUuSte/xsPF8R0OCwoIBwUEAwUTFi5HTR0yPkRU//////////////////// + /393ZVJFTUrXy77bHhMPDQwKCQgHBQQJFBUWJDQ+RFT///////////////////////9/eWVpX2BH8tsX + GRIRDw4NCwoJBwYFITA6OUNEVP//////////////////////////eXl0aXFoYC0dGBMSERAPDQwLCiAo + Mjk/Q05V/////////////////////////////3d/fH1pcVJLPTowMDAvLys0NDk/P05OVVX///////// + ////////////////////////d398dGVlV1dPQUFBQU9PUFBQUFVV//////////////////////////// + //////////90eX95b2dnZ11dXV5eXl5eXv////////////////////////////////////////////9v + cnJycnJubm5eXv////////////////////////////////////////////////////////////////// + ////////////////////////////////AAD///////8AAP//wB///wAA//wAAf//AAD/8AAAf/8AAP/A + AAAf/wAA/4AAAA//AAD/AAAAB/8AAP4AAAAD/wAA/AAAAAH/AAD4AAAAAP8AAPAAAAAAfwAA4AAAAAA/ + AADgAAAAAD8AAMAAAAAAHwAAwAAAAAAfAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAAAA + AAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAgAAAAAAPAACAAAAAAA8AAIAAAAAADwAAwAAAAAAfAADAAAAAAB8AAOAA + AAAAPwAA4AAAAAA/AADwAAAAAH8AAPgAAAAA/wAA/AAAAAH/AAD+AAAAA/8AAP8AAAAH/wAA/4AAAA// + AAD/wAAAH/8AAP/wAAB//wAA//wAAf//AAD//4AP//8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAC9AAAAuwAAALkAAAC2AAAAswAAALEAAAClAAAAowAAAKEA + AACcAAAAkQAAAG0AAABpAAAAZAAAAF0AAABYAAAANgAAADAAAAAqAAAAIgAAABMAAAAHAAAAhgEBAL8C + AgC8AgIAqAICAKECAgBPAQEAQgEBALsDAwCyAwMArQMDAH0CAgC3BAQAiwMDALMFBQC8BwcA3AkJAKUH + BwBVBAQAzgsLALwKCgCqCQkAOwMDAOgNDQAPAQEAXQcHAJcMDACgDg4AvBISAPkaGgDNFhYAWwoKAOcb + GwC2FhYA2hwcAKsXFwDDGxsAuxwcALUbGwDKICAA8ycnAJMZGQBFDAwA0yYmAOUtLQC2JCQA/TQ0APAy + MgDGLCwA+Do6AKwoKAD/PDwA1TMzAP8+PgDpOjoA/0REAPBAQADIOTkAwDc3AP9KSgC3NTUATRcXANdC + QgD/T08A+E1NAM1AQAAqDQ0A5khIACYMDADxTU0Avj09AKw5OQCVMTEA/1VVAMFCQgC6QUEAsT4+AP9b + WwDISUkAvkZGALFCQgBpJycAzU1NAAgDAwD/YmIANBQUAOhcXAD/ZmYAu0tLAPhnZwD/a2sAs0xMALxR + UQD/cnIAkUFBAHk2NgCkS0sA/3Z2AJtISAC2VVUAzmNjAP98fADodXUASyYmAP+EhAD2gYEAqFlZABYM + DAD/jIwAm1hYAGc7OwD+k5MAqmNjANJ9fQD/mpoA/56eAP+iogD/qKgA/6qqAN6WlgD/ra0A+6qqAP+w + sABzUVEA/7i4AOurqwD/u7sA/729APK3twCFZWUA/8PDAL6RkQD/ysoA16urAPXExAD3ysoAwqamAMyx + sQAhHR0AKScnAB0cHAAA//8AAP39AAD7+wAA+PgAAPb2AAD19QAA8/MAAPHxAADv7wAA7e0AAOrqAADm + 5gAA5OQAAOPjAADh4QAA398AAN3dAADY2AAA19cAAM3NAADLywAAx8cAAMPDAADBwQAAtbUAALCwAACt + rQAAqakAAKamAACjowAAlZUAAJKSAABmZgAAZGQAAY2NAAGCggACvLwAA/7+AAPs7AADwsIAApycAAT8 + /AAEtLQABK6uAAJcXAAEl5cAB/n5AAf09AAG2NgABaKiAASRkQADbGwACPX1AAR4eAAJ/v4ADv//AAZm + ZgAQ+voACpycABT//wALiooAFfT0ABz9/QAe6OgAI/39AAk6OgAs/f0ALu7uACKurgAz/f0AHo+PADz8 + /AA86+sAPNXVAEn9/QBG7+8AInBwAFL+/gA2oaEAVPX1AF/9/QAECgoAYOTkAFzT0wBr8fEAaM7OAGO8 + vABx1dUAgN7eAHzIyACQ5eUAfpeXAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////9janB3foKFiP////////////// + /////////////0lJUWNzfoWIiouMjI6Q//////////////////////9ERERJUWNwe4KJjpKUlZSS//// + //////////////9FPj4zMzZKTlVqc36IjJSYmpiVlP//////////////QjY2LSkwdf5XTV9te4KFjZmb + nJqYlP///////////0I2LSYfHOfr9YBOX213f4eR8fienZqYlP//////////OCYZIWvH3Ojz/GhVanN8 + g6HT6vufnZqV/////////zgpGx3ftqrZ5fD3hltjb3p91a3j8/2fnZiS//////9BNCAc1ry3r6bh6vP8 + aF9sdKK3q9rq8/2fnJKQ/////z0yIxPPwby3rqbj7feDWWR90LCqpOHq8vuelo7/////PSoXERbDwr24 + sajl8PliXqK0rKmoqcni7P6bjP///0Y6KgkNExbExb+6s9Lo7pF9yqioqa2zts3pl5OMif//RjolBAoO + ExbPxsC5sNzl5uLZo6WpsLrGoISHj4uF//9GOyIDBAoMERX02Lu0qdrh3trZzK7Uon10en+JioL//1A8 + JAQCAwcXDxMWxbWrpNna2t7g71NeaGxvd4KIfv//XEMgBgQBAAMJDRTktaqlo8jZ3uPsdVRWX19qe4V3 + //9lQysgBgMBAAkQgb2tqKamqKjR4er2dk5LTVVwfnP//2VSORogBgYLHd20q6emp6ywsq7S5fD6gFdF + SWNzbf//YWE5JwcHIRLOrKempaars7rHuLLX6PD3/GZFUWpj////bkgxFxBay7OrpqSkqLDL5Ma/urHR + 5e3y+UZLVf////9uYj8o5MW8tq+opaaruIEUFtbAuK+o4OLxQ0RL/////2JxXlMu1sG8tq+pqa/fEA0T + 9Ma+uLS01DU4RE3//////3F2Z1gWw8G8t7Kx1B0ICA8Vz8K+u9UdMj5H/////////3l4Z1hpw8G9usdY + CwACFxEWw8LYLCs2Rf//////////Ynl4Z1hpw8LA2A4FAAAHDBMu5CwnOEVO////////////Znl4Z2uB + z9sRCwQBAAIKDBwvMThCTP//////////////Znl2dX1rQCEaHyIZGB4rMTxBQkz///////////////// + /3GAeHReSDw3NzI6Oj1GSkr//////////////////////11xeXJuZWBcT1dXV0pK//////////////// + ////////////XGVlZGRkV0//////////////////////////////4B///wAD//4AAf/4AAB/8AAAP+AA + AB/gAAAfwAAAD4AAAAeAAAAHgAAABwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AA + AAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gAAH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvAAAALsAAAC6AAAAsgAAALEAAACwAAAArQAAAKcAAACfAAAAkwAAAH4A + AABtAAAAPAAAAKgEBAChBQUAYAMDADsCAgBVBAQAOwMDAKIMDAC0Dg4Avg8PANEWFgBoCwsA5xoaALsV + FQDFGBgAsxYWADwICACoFxcAgBISAPYuLgDfKSkA4y0tAJwfHwCyJCQAzy0tAOAxMQDzNzcA8zk5APA5 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAJGRkYLISEhHxwcHEB+FxeKtB4exd8o + KOr/ODj//0VF//9QUP//W1v//2Zm//9wcP//eHj//39///+Ghv//jIz//5GR//+Wlv//mZn/2YaG7aNo + aNJZOjquAAAAfwAAAF8AAAA7AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BZmZmBT09PRUwMDA1jB4eiMQa + Gs/0Hh75/ysr//86Ov//SEj//1ZW//9lZf//cXH//319//+Ghv//jo7//5OT//+Zmf//nZ3//6Cg//+k + pP//pqb//6en//+oqP/0oqL5tHl53F9BQbMAAAB9AAAAVgAAAC0AAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wGSkpIHSkpKH3Qp + KV66Hx++6yEh9fsmJv/9Li7//zU1//9DQ///T0///11d//9tbf//enr//4aG//+Pj///l5f//56e//+k + pP//qqr//66u//+wsP//s7P//7Oz//+zs///s7P//7Oz/+6np/ahcXHUNCYmngICAmwAAAA8AAAAFwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////AoCA + gAhEREQimyQkhNAgINz0JSX/9y0t//kvL//8MjL//zQ0//86Ov//RET//1BQ//9aWv//aGj//3R0//9/ + f///ior//5aW//+goP//qqr//7Ky//+3t///vLz//76+//++vv//vb3//7u7//+5uf//t7f/y5GR52VJ + SbcCAgJ5BAQERwAAABoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8DqqqqCU5OTiSsJSWW3CIi7O8lJf/yKir/9Ssr//cqKv/7KCj//iUl//0nJ//4MTH/9zk5//1F + Rf//UVH//19f//9ra///eHj//4WF//+Skv//np7//6mp//+zs///vLz//8LC///Fxf//xsb//8XF///C + wv//vr7//7u7/+KkpPKAXFzDAgICgAAAAEoAAAAaAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wOzs7MKWlpaIrAkJJrfISHz7CUl/+4kJP/wIiL/9B4e//YaGv/5FRX/+BER/+sS + Ev/WICD/3C0t//Q1Nf/+QkL//05O//9bW///Z2f//3V1//+Bgf//jY3//5ub//+mpv//srL//7y8//7D + w//9yMj//svL///Kyv//x8f//8LC//++vv/ura33iGNjxwQEBIAAAABGAAAAFwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////A9XV1QZsbGwariYmkNseHvPnISH/6SAg/+saGv/tFRX/8Q8P//UM + DP/xCQn/1QcH/6EPD/+KLS3/qzk5/983N//7PT3//0lJ//9WVv//YmL//2xs//94eP//hIT//4+P//+a + mv/9paX/9Kur/+Wrq//js7P/7sLC//vMzP/+zs7//8nJ///ExP//v7//7q2t94FeXsMCAgJ5AAAAPAAA + ABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Bo6OjhKoLCxz0iAg6uIbG//kGhr/5hUV/+gP + D//sCQn/7QQE/+MEBP+vAQH/WAcH/0NiYv9anJz/iG5u/8dAQP/1PT3//0ZG//9SUv//Xl7//2ho//9z + c///fHz//4aG//2QkP/wk5P/y4WF/5Rqav+QgYH/u56e/+a+vv/7zs7//8/P///Ly///xMT//76+/+Ol + pfJnSkq3AgICbAAAAC0AAAAIAAAAAAAAAAAAAAAAAAAAAP///wH///8Ev7+/DJg8PEPGISHU3Rsb/98V + Ff/hDg7/4wkJ/+YFBf/kAwP/0AEB/4MBAf8qNTX/CcDA/ybo6P9L6ur/ccDA/6NkZP/hQkL//END//9P + T///Wlr//2Rk//9ubv//eXn//4KC//aGhv/Penr/f09P/zdXV/8/u7v/esXF/7mqqv/pwcH//M7O///P + z///ysr//8PD//+9vf/LkpLnNicnngMDA1cAAAAbAAAAAwAAAAAAAAAAAAAAAP///wL///8HgICAFrch + IajZHR3/2hYW/9sNDf/dBgb/4AIC/98CAv/LAQH/cAAA/x5AQP8Dzc3/APf3/x7///9C/f3/Y/Hx/4S5 + uf/DTk7/9END//5MTP//VVX//2Bg//9qav//c3P//Hx8/+d6ev+eWVn/PCQk/w9/f/8X5ub/VvLy/4vZ + 2f/CsLD/68PD//zOzv//zs7//8jI///AwP//uLj/oXJy1AYGBn8AAAA7AAAACwAAAAAAAAAAAAAAAP// + /wTMzMwKqykpYc0eHvHVFhb/1g4O/9gGBv/aAgL/3AAA/8sAAP9+AAD/GkBA/wO8vP8A8/P/AP7+/xb/ + //81////Vf///3Lh4f+oXl7/5kRE//xGRv//UFD//1pa//9kZP//bW3/9nNz/8lmZv9kNjb/EUdH/wK5 + uf8C9/f/Ov7+/2v39/+X1NT/xrCw/+zDw//9zs7//8zM///Fxf//u7v/7qio92NGRrQDAwNgAAAAHgAA + AAIAAAAAAAAAAP///wZxcXESuyEht9EaGv/RERH/0wYG/9QBAf/XAQH/ywAA/4kAAP8YRkb/AsPD/wDv + 7/8A+fn/AP7+/xD///8o////Rv///2Px8f+JmZn/x01N//RDQ///Skr//1NT//9cXP/8ZWX/5mVl/5tJ + Sf8vGBj/A5ub/wHh4f8A+fn/Jf///0////91+Pj/mdXV/8awsP/swsL//MvL///IyP//v7///7W1/7d+ + ft0GBgaBAAAAOgAAAAoAAAAAAAAAAP///weqJiZVyR0d9MwVFf/ODAz/zgMD/84AAP+7AAD/awAA/xdD + Q/8CsrL/AN/f/wDw8P8A+fn/AP7+/wn///8c////Nv///1X9/f9y39//o2pq/+NDQ//8Q0P//0tL//9U + VP/2Wlr/y1JS/2cuLv8TKyv/ALy8/wDp6f8A+vr/FP///zX///9X////efPz/5vW1v/JsLD/7sLC//zH + x///wcH//7a2//SmpvldPz+vAwMDVwAAABYAAAAAAAAAALOzswq3IyOfyhwc/8kREf/JBwf/xQEB/6kA + AP9hAAD/Ez4+/wKNjf8AuLj/ANHR/wDm5v8A9PT/APz8/wL///8R////KP///0X///9j8vL/ipWV/8xH + R//2PDz//0FB//1JSf/pTEz/oTo6/zQVFf8FeHj/ANbW/wDv7/8A+/v/CP///x////84////V////3X1 + 9f+Zzs7/x6ys/+u9vf/8wMD//ri4//+srP+mbW3TBwcHcQYGBikAAAADAAAAAIVHRxm9ISHaxhkZ/8UM + DP/EBQX/ugAA/40AAP9BAAD/DB0d/wFqav8AnJz/ALa2/wDPz/8A4+P/APLy/wD7+/8G////G////zb/ + //9V+fn/dsLC/6lcXP/kOzv//Tc3//c+Pv/MOTn/aCEh/xI9Pf8Bv7//AObm/wD09P8A/Pz/Af///w3/ + //8a/v7/L/39/0n5+f9o7u7/j8TE/8Ojo//tt7f//Li4//+urv/bjIztFxISiwQEBD4AAAAKAAAAAKgk + JFXFIyP/wxcX/8EJCf/AAgL/twAA/5QAAP9UAAD/GgAA/wMfH/8AcnL/AJaW/wCvr/8Ax8f/ANzc/wDs + 7P8A+Pj/C/7+/yb///9G/f3/Ze3t/4WoqP/DQUH/7i8v/+cwMP+hJyf/OA8P/wZubv8A29v/AO/v/wD4 + +P8A/Pz/AP39/wD8/P8A+fn/BfX1/xXv7/8y4uL/XLq6/5qTk//drKz/+bW1//+trf//n5//ZD8/sQYG + BlEAAAASAAAAALIlJYnCISH/vhQU/74HB/+/AgL/vgAA/60AAP+FAAD/TwAA/xsAAP8DFxf/AGdn/wCM + jP8Apqb/AL29/wDT0/8A6Oj/APf3/xP+/v8z////Uv39/23c3P+eTk7/xyws/7YjI/9dEhL/E0RE/wG4 + uP8A7e3/APb2/wD5+f8A+fn/APX1/wDv7/8A5ub/ANra/wPGxv8Pqqr/N319/41sbP/epKT/+7Oz//+s + rP//np7/mFtbygoKCmIAAAAZAAAAALcoKLG/ISH/uxMT/7sHB/+9AgL/wAAA/78AAP+yAAD/jwAA/1sA + AP8nAAD/CAIC/wFHR/8Afn7/AJub/wC0tP8Az8//AObm/wD5+f8d/v7/Pf///1X09P9wjo7/gjs7/2Qg + IP8gSkr/AsvL/wDt7f8A9/f/APj4/wD39/8A8fH/AOfn/wDZ2f8Ax8f/AZub/whfX/8fOjr/Xjw8/7h5 + ef/wpqb//rGx//+qqv//nZ3/vG1t3RAQEG8AAAAgAAAAALcpKdG8IiL/uRMT/7gGBv+5AQH/vgAA/8MA + AP/EAAD/uwAA/54AAP9uAAD/PAAA/xIAAP8CKyv/AGVl/wCPj/8Ar6//AM/P/wDp6f8D+/v/Jf7+/z39 + /f9I3d3/R7Cw/zGmpv8Sy8v/APX1/wD8/P8A+/v/APn5/wDz8/8A5+f/ANDQ/wCtrf8DhIT/Ej09/zYb + G/9vODj/smFh/+aGhv/7oaH//6ur//+np///mpr/13Z26w8PD3gAAAAlAAAAALksLOe6IyP/thIS/7QE + BP+2AQH/uwAA/8AAAP/FAAD/yQAA/8UAAP+xAAD/iQAA/1cAAP8pAAD/CgAA/wFHR/8Ajo7/ALa2/wDY + 2P8A8PD/DP39/yP///8u/f3/LPj4/yD4+P8R/f3/Bf///wD///8A////APv7/wDq6v8AzMz/BISE/xIt + Lf8xFRX/ZCsr/55HR//MX1//63Nz//qDg///lpb//6Oj//+jo///lpb/63t79RQUFIAGBgYpAAAAALsx + Mfe3IiL/shAQ/7EDA/+zAQH/uAAA/70AAP/CAAD/yAAA/84AAP/OAAD/xAAA/6YAAP91AAD/OQAA/wwA + AP8BUVH/AJub/wDIyP8A5+f/APr6/w3///8Y////Gf///xP///8N////CP///wf///8I////Bubm/wKx + sf8MYWH/KxUV/2IiIv+bOjr/yU9P/+hfX//2Zmb//HBw//94eP//iYn//5mZ//+dnf//kpL/+Hx8+xUV + FYQGBgYrAAAAALs0NP60IiL/rw4O/64DA/+wAAD/tQAA/7oAAP+/AAD/xQAA/8sAAP/RAAD/1QAA/9IA + AP+2AAD/egAA/zEAAP8HDAz/AHd3/wC6uv8A4OD/APX1/wD///8J////C////wr///8H////CP///w3/ + //8T/f3/GsnJ/yZiYv9KGRn/iSgo/8Y+Pv/nTU3/9ldX//xdXf//YGD//2Rk//9tbf//fX3//46O//+X + l///jIz//nh4/xgYGIEGBgYpAAAAALo4OPezJSX/rA8P/6sCAv+tAAD/sgAA/7cAAP+8AAD/wgAA/8gA + AP/OAAD/0wAA/9gAAP/UAAD/rgAA/2gAAP8fAAD/AzU1/wChof8A4OD/APT0/wD9/f8B////A////wP/ + //8E////B////xD///8d/f3/LdfX/0h9ff+FMDD/zTc3//NDQ//9S0v//09P//9SUv//VVX//1hY//9e + Xv//cHD//4OD//+QkP//hob/+G5u/BkZGXsHBwcmAAAAALg+PuizKyv/qhIS/6gCAv+qAAD/rgAA/7MA + AP+5AAD/vgAA/8QAAP/KAAD/0AAA/9YAAP/aAAD/ygAA/5MAAP86AAD/CCUl/wCgoP8A5eX/APb2/wD9 + /f8A////AP///wD///8B////Bv///xD///8h////N/b2/1PKyv+IWlr/zz4+//k9Pf//QED//0ND//9G + Rv//SEj//0pK//9QUP//YmL//3h4//+IiP//gID/7GJi9RsbG3IICAghAAAAALZBQdOzMDD/qRUV/6UE + BP+nAQH/qwAA/7AAAP+1AAD/ugAA/8AAAP/GAAD/zAAA/9IAAP/XAAD/zQAA/5UAAP8xAAD/BWpq/wDM + zP8A8PD/APn5/wD+/v8A/v7/AP///wD9/f8A/v7/Af7+/wv///8d////N////1Ly8v9zvr7/qVtb/+g6 + Ov//NDT//zc3//86Ov//Ozv//z4+//9CQv//VVX//2tr//+AgP//eHj/3FdX6R4eHmcKCgoaAAAAALRD + Q7S0ODj/qhwc/6QICP+lAgL/pwAA/6wAAP+xAAD/tgAA/7wAAP/CAAD/yAAA/84AAP/OAAD/tAAA/1EA + AP8PTEz/AcfH/wDt7f8A9/f/APv7/wD+/v8A/f3/APv7/wD39/8A9vb/APj4/wD8/P8R/v7/Kv///0f9 + /f9k9fX/hL+//71PT//6Kir//yoq//8rK///Li7//zAw//82Nv//R0f//2Ji//91df//bm7/xUxM2iMj + I1gAAAASAAAAALFBQYq2QED/rCcn/6QPD/+jBQX/pAAA/6gAAP+tAAD/sgAA/7cAAP+9AAD/wgAA/8EA + AP+oAAD/QQAA/wx/f/8B0ND/APHx/wD4+P8A+/v/AP39/wD9/f8A+Pj/APHx/wDp6f8A5OT/AObm/wDu + 7v8A+fn/FP7+/zH///9P////bPX1/4y6uv/OQED/+x4e//8dHf//Hx///yIi//8oKP//PDz//1VV//9m + Zv//YGD/qkJCwykpKUUAAAAKAAAAALE9PU+3R0f/rS8v/6MVFf+hCAj/oQEB/6QAAP+pAAD/rQAA/7MA + AP+3AAD/tQAA/44AAP8wDw//Bqys/wDn5/8A9fX/APr6/wD8/P8A/v7/AP7+/wD5+f8A8PD/AN/f/wDL + y/8Aw8P/AMjI/wDX1/8A6Oj/APf3/xb9/f80////Uv///2719f+Ltrb/vkZG//UVFf//EBD//xUV//8b + G///MTH//0hI//9bW///Vlb/iDw8nzU1NTBAQEAEAAAAALEzMwqzRUXZsDo6/6YfH/+gDQ3/ngEB/6EA + AP+kAAD/qQAA/6sAAP+iAAD/agAA/xtDQ/8DwsL/APDw/wD6+v8A+/v/AP7+/wD+/v8A/v7/APz8/wD0 + 9P8A29v/AaWl/wFtbf8Ac3P/AJ6e/wC3t/8Azs7/AOTk/wD39/8W/v7/Nf///1H///9p9/f/f9jY/6Rt + bf/qERH//wcH//8REf//Jyf//z4+//9OTv/jSUntSzw8ak1NTR7///8B////AQAAAACwQkKbtEVF/6kq + Kv+hFBT/nQUF/5wAAP+dAAD/mAAA/4AAAP9DAAD/D2pq/wHR0f8A8/P/APv7/wD9/f8A/v7/AP///wD/ + //8A/v7/APf3/wDl5f8CoqL/Cj8//xAFBf8HERH/AVBQ/wCHh/8Ara3/AMrK/wDk5P8A9/f/Fv7+/zH/ + //9L////Xv39/27f3/+LfHz/0Rwc//oPD///IiL//zU1//9BQf+/Pz/MRkZGSWlpaRH///8B////AQAA + AACuPT1LtktL8602Nv+kHx//mgoK/5EBAf9+AAD/UgAA/yYSEv8Jb2//AcbG/wDn5/8A9fX/APv7/wD+ + /v8A////AP///wD+/v8A+/v/APHx/wHJyf8TQUH/PAAA/0oAAP8qAAD/CgEB/wFISP8AiIj/AKur/wDI + yP8A5OT/APb2/xD9/f8n/v7/Ofv7/0bv7/9XtbX/kDQ0/94aGv/6KSn//Tc3//U4OPmVQUGWXV1dLL+/ + vwgAAAAAAAAAAAAAAAAAAAAAsUZGr7JDQ/+nLS3/mxQU/4IGBv9bAQH/JQIC/wdRUf8BmJj/AMHB/wDZ + 2f8A7Oz/APj4/wD+/v8A////AP///wD9/f8A9vb/AN/f/wiPj/9MAAD/lwAA/5sAAP9wAAD/NAAA/wsA + AP8BR0f/AImJ/wCrq/8AyMj/AOTk/wD09P8C+fn/EPPz/xzX1/81e3v/iRkZ/9wbG//3Kyv/+zg4/8w5 + OdVYWFhRi4uLFv///wQAAAAAAAAAAAAAAAAAAAAArT4+UrNLS+6uPT3/nyUl/4MQEP9VBgb/IQEB/wUh + If8Aenr/AKWl/wDCwv8A29v/AO3t/wD4+P8A/v7/AP39/wD5+f8A6+v/BKqq/zMREf+pAAD/ywAA/8gA + AP+sAAD/dwAA/zcAAP8KAAD/AVFR/wCIiP8ArKz/AMnJ/wDf3/8A5ub/Ac7O/wqBgf9JBwf/sA8P/+kd + Hf/3Ly//7TY29p9CQpR0dHQus7OzCv///wMAAAAAAAAAAAAAAAAAAAAAAAAAAK9FRZu0Skr/qDY2/5Ie + Hv9sDg7/NgMD/w8AAP8CKir/AH19/wClpf8AwsL/ANzc/wDt7f8A+Pj/APn5/wDv7/8Bycn/HTs7/5UA + AP/JAAD/0gAA/9MAAP/MAAD/sQAA/3oAAP86AAD/DAAA/wFKSv8AjIz/AK+v/wDFxf8AwcH/CHx8/zUJ + Cf+SBgb/2RMT//AlJf/1MzP/wjw8xGtra0WmpqYX////BP///wEAAAAAAAAAAAAAAAAAAAAAAAAAAKo5 + OSiwSUnKsUhI/6UzM/+MHh7/YwwM/zMEBP8PAQH/Aisr/wB1df8ApaX/AMLC/wDb2/8A6+v/AO7u/wDa + 2v8Oamr/ZgAA/74AAP/LAAD/zgAA/9AAAP/RAAD/zQAA/7QAAP99AAD/PQAA/wsAAP8AWVn/AJCQ/wCe + nv8Ia2v/MwkJ/4kDA//QDQ3/6hwc//AsLP/UODjgjlJSa5WVlSTo6OgL////Av///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACtPz9ZtE9P47FHR/+kMzP/ihwc/2MODv8yBQX/DgEB/wMuLv8Afn7/AKam/wDB + wf8A19f/ANra/wSlpf88AAD/pQAA/8EAAP/FAAD/yAAA/8sAAP/NAAD/0AAA/80AAP+0AAD/dwAA/zEA + AP8GFBT/AmNj/wZhYf8wCwv/hAQE/8oLC//kGBj/7CYm/90xMe6pRESNi4uLLtLS0hH///8F////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0REdLRQUO+xSEj/ozIy/4kcHP9hDg7/MAQE/w0B + Af8CMDD/AH9//wCkpP8Aubn/Aa6u/xo8PP9+AAD/tQAA/7wAAP+/AAD/wgAA/8UAAP/IAAD/ywAA/80A + AP/JAAD/pwAA/2YAAP8tAAD/GggI/zIGBv9/AwP/xgoK/+AWFv/nJSX/4S8v9LQ8PJ6MjIwz3NzcFv// + /wr///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALBHR361U1PwskpK/6Q1 + Nf+NIiL/YxER/zMICP8QBAT/AzEx/wB0dP8Bj4//Dk1N/1sAAP+lAAD/swAA/7cAAP+6AAD/vQAA/8AA + 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 + yf+AAU3/wANP/+AHYf8= + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/directx.ico b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/directx.ico differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/D3D10Tutorial01_WinFormsWindow.csproj b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/D3D10Tutorial01_WinFormsWindow.csproj new file mode 100644 index 00000000..d621e73a --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/D3D10Tutorial01_WinFormsWindow.csproj @@ -0,0 +1,100 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA} + WinExe + Properties + D3D10Tutorial01_WinFormsWindow + D3D10Tutorial01_WinFormsWindow + v3.5 + 512 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + + + + 3.0 + + + + + Form + + + TutorialWindow.cs + + + + + TutorialWindow.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Program.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Program.cs new file mode 100644 index 00000000..1ac4b900 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Program.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; + +namespace D3D10Tutorial01_WinFormsWindow +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new TutorialWindow()); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..ed3c85a6 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("D3D10Tutorial01_WinFormsWindow")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("7c899ee7-8423-4830-8e0e-d222eec3f824")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Properties/Resources.Designer.cs new file mode 100644 index 00000000..67064749 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial01_WinFormsWindow.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("D3D10Tutorial01_WinFormsWindow.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Properties/Settings.Designer.cs new file mode 100644 index 00000000..ab8a63dc --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial01_WinFormsWindow.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/TutorialWindow.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/TutorialWindow.Designer.cs new file mode 100644 index 00000000..ab0bc7e0 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/TutorialWindow.Designer.cs @@ -0,0 +1,52 @@ +namespace D3D10Tutorial01_WinFormsWindow +{ + partial class TutorialWindow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TutorialWindow)); + this.SuspendLayout(); + // + // TutorialWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(624, 442); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "TutorialWindow"; + this.Text = "Direct3D 10 Tutorial 1: Direct3D 10 Basics"; + this.Load += new System.EventHandler(this.TutorialWindow_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.TutorialWindow_FormClosing); + this.ResumeLayout(false); + + } + + #endregion + + } +} + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/TutorialWindow.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/TutorialWindow.cs new file mode 100644 index 00000000..b3fe3580 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/TutorialWindow.cs @@ -0,0 +1,143 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; + +namespace D3D10Tutorial01_WinFormsWindow +{ + /// + /// This application demonstrates creating a Direct3D 10 device + /// + /// http://msdn.microsoft.com/en-us/library/bb172485(VS.85).aspx + /// + /// Copyright (c) Microsoft Corporation. All rights reserved. + /// + public partial class TutorialWindow : Form + { + #region Fields + D3DDevice device; + SwapChain swapChain; + RenderTargetView renderTargetView; + ColorRgba backColor = new ColorRgba(0.0F, 0.125F, 0.3F, 1.0F); + bool active = false; + #endregion + + #region TutorialWindow() + /// + /// Initializes a new instance of the class. + /// + public TutorialWindow() + { + InitializeComponent(); + } + #endregion + + #region TutorialWindow_Load() + /// + /// Handles the Load event of the form. + /// + /// The source of the event. + /// The instance containing the event data. + private void TutorialWindow_Load(object sender, EventArgs e) + { + if (!active) + { + InitDevice(); + active = true; + } + } + #endregion + + #region TutorialWindow_FormClosing() + /// + /// Handles the FormClosing event of the form. + /// + /// The source of the event. + /// The instance containing the event data. + private void TutorialWindow_FormClosing(object sender, FormClosingEventArgs e) + { + device.ClearState(); + } + #endregion + + #region WndProc() + /// + /// The Window Procedure (message loop callback). + /// + /// The m. + protected override void WndProc(ref System.Windows.Forms.Message m) + { + Invalidate(); + base.WndProc(ref m); + } + #endregion + + #region OnPaintBackground() + /// + /// Paints the background of the control. + /// + /// A that contains the event data. + protected override void OnPaintBackground(PaintEventArgs e) + { + // Leave empty so that invalidate does not redraw the background causing flickering + } + #endregion + + #region OnPaint() + /// + /// Handles painting of the window + /// + /// A that contains the event data. + protected override void OnPaint(PaintEventArgs e) + { + if (active) + RenderScene(); + } + #endregion + + #region InitDevice() + /// + /// Create Direct3D device and swap chain + /// + protected void InitDevice() + { + device = D3DDevice.CreateDeviceAndSwapChain(this.Handle); + swapChain = device.SwapChain; + + // Create a render target view + using (Texture2D pBuffer = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView(pBuffer); + } + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { renderTargetView }, null); + + // Setup the viewport + Viewport vp = new Viewport() + { + Width = (uint)this.ClientSize.Width, + Height = (uint)this.ClientSize.Height, + MinDepth = 0.0f, + MaxDepth = 1.0f, + TopLeftX = 0, + TopLeftY = 0 + }; + + device.RS.Viewports = new Viewport[] { vp }; + } + #endregion + + #region RenderScene() + /// + /// Render the frame + /// + protected void RenderScene() + { + // Just clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor); + swapChain.Present(0, PresentOptions.None); + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/TutorialWindow.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/TutorialWindow.resx new file mode 100644 index 00000000..0dd393c3 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/TutorialWindow.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAAABABoBgAAlgAAACAgEAAAAAQA6AIAAP4GAAAQEBAAAAAEACgBAADmCQAAMDAAAAAA + CACoDgAADgsAACAgAAAAAAgAqAgAALYZAAAQEAAAAAAIAGgFAABeIgAAMDAAAAAAIACoJQAAxicAACAg + AAAAACAAqBAAAG5NAAAQEAAAAAAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAAAA + AAD//wAA////AACAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMy2t7a2bMzMzMzMzMzMzMzMzMzMzMzMu7a3tnd2d2ZszMzMzMzMzMzMzMzMzMy7t7tr + a2dnZmZmbMzMzMzMzMzMzMzMzLu7e2tnZnZmZmZmZmzMzMzMzMzMzMzMy7u3u7e2tmdmZmZmZmbMzMzM + zMzMzMzMt7e7u3tra2Z2ZmZmZmZszMzMzMzMzMzLu7u7u7u7d7Z2ZmZmZmZmzMzMzMzMzMx7O7u7s3N7 + trd2tmZmZuZmbMzMzMzMzMu7u7uzNye7e2trZmd3ZmZmZszMzMzMzLO7u7MzqmZ3t7Z3ZrdyZmbmZmzM + zMzMy7u7s7MKqqZre2t2t3AqpmZmZmbMzMzMx7OzuzIqqqpnt7a3ZzIqamZm5mbMzMzMO7u7syKqqqpm + e3trYzKqqmZmZmZszMzMu7OzMiqqqqpqe7a2syKqqmpmZmZszMzLszszIiqqqqqmd7t7cCqqqqamZmZm + zMzHu7swAiKqqqqqZ3u3MCqqqqpqZmZmzMzLMzMzACIqKqqqZ7t7Aqqqqqqqd2ZmzMzLO7szMAIiqqqq + anszIqqqqqoid2ZmzMxzszOzMwAiIqqqpmMyKqqqqqIie2ZnbMy7O7OzszAAIiqqqqd6qqqqoiIzd2Zm + bMw3szs7OzMwAiKqqqqqqqqqIDN3tmZ2bMy7M7OzuzszACKqqqqqqqoiA3trZrZmvMxzOzOzs7O7MAIq + qqqqqqcjN7a3t2ZnfMw7M7Ozs7s7MwIqqqqqqqoje3t3a3d2fMx7OzM7O7O7MzAqqqqqqqpnt7e7trZ3 + fMy3MzOzuzuzswKqqqqqqqqme7tra2dnfMx7M7M7M7O7MwKqqqqqqqpqZ7u7u7a2vMx3szszs7OzMqqq + qqqqqqqmpnu7t7tnfMzLczM7OzswKqqqqqoqKqqqpme7u7e7zMzHOzOzMzMCqqqqqqIiKqqqpqZ7u7e2 + zMzLc7MzMzKqqqqqqiIAIiqqqmpnu7t7zMzMtzMzMCKqqqqqqgMwACIqqqqne7e8zMzMN7MzAiqqqqqq + ojMzACIqqqqnO3u8zMzMxzszACKqqqqqIDszMwIiqqIjO7vMzMzMy3MzAAIiqqqqA7O7MwAiIqIDu3vM + zMzMzHtzMwAioqqiM7s7szMCIiAzu7zMzMzMzMe3MwAiKqojM7O7O7MAIgO7u8zMzMzMzMx7MzAAIqID + O7OzuzMwAzO7vMzMzMzMzMzHdzMAAiIzszuzs7MzM7t7zMzMzMzMzMzMtzcwACMzOzM7OzuzM3u8zMzM + zMzMzMzMx7s3MDMzs7Ozs7Ozu7vMzMzMzMzMzMzMzHdzMzOzMzs7Ozs7t7zMzMzMzMzMzMzMzMy3d7cz + s7M7O3u3vMzMzMzMzMzMzMzMzMzMt3t7e3t7e7e8zMzMzMzMzMzMzMzMzMzMzMe3t7e3t8zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz///////8AAP///////wAA///AH///AAD//AAB//8AAP/w + AAB//wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/AAD8AAAAAf8AAPgAAAAA/wAA8AAAAAB/ + AADgAAAAAD8AAOAAAAAAPwAAwAAAAAAfAADAAAAAAB8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAIAA + AAAADwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAADAAAAAAB8AAMAA + AAAAHwAA4AAAAAA/AADgAAAAAD8AAPAAAAAAfwAA+AAAAAD/AAD8AAAAAf8AAP4AAAAD/wAA/wAAAAf/ + AAD/gAAAD/8AAP/AAAAf/wAA//AAAH//AAD//AAB//8AAP//gA///wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgIAAgAAAAIAAgACAgAAAwMDAAICA + gAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzLe2tmbMzMzMzMzMzMzMy3dnZ2ZmZmzMzMzMzMzMzHu7t3ZmZmZmzMzMzMzMzHu7u7 + t7a2ZmZmbMzMzMzMu7uzd3trZmZ2ZmbMzMzMy7uzMqZ7tnd3dmZmbMzMzMuzMCqma2t2cKpmZmzMzMy7 + MyKqqqe2tzKqpmZmzMzLszIqqqpmu3cKqqamZmzMyzMCIqqqpndzKqqqZmZszMszACIqqqprMKqqqqp2 + bMxzszACIiqqpzKqqqoidmbMOzszACIqqqqqqqqiA3ZmzLs7MzAAIqqqqqqiA3dmZsxzM7MzMAKqqqqq + I3trdmfMu7M7OzMAqqqqqqO3trdmzHMzs7MzAqqqqqqqe3t3a8x7OzszMqqqqqqqpme7trbMtzMzMCqq + qqqiqqqmZ7trzMtzMwKqqqqiAiKqqqZ7fMzHszAqqqqqoAAiqqqiu7zMw3MwIiqqqiMwAiqqI7e8zMy3 + MAIiqqIzMwIiIjO7zMzMx3MAIiogM7MAIiM7vMzMzMNzcAIiIzszMAIDu7zMzMzMdzMwIgM7OzMzO3vM + zMzMzMt3MwMzs7OzM7u8zMzMzMzMx3c3Mzs7O7e8zMzMzMzMzMw3e3t7e7e7zMzMzMzMzMzMzMN7e3t8 + zMzMzMzM////////////4B///wAD//4AAf/4AAB/8AAAP+AAAB/gAAAfwAAAD4AAAAeAAAAHgAAABwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AAAAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gA + AH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzM + zMzMzMzMzMzLZmbMzMzMy7e2ZmbMzMyzB3dndmzMyzKqe3CmZszDCqpnMqpmzLMyqqcKqqZsOzAqqqqi + dmwzszCqqie2bDMzMqqqZ7tsMzAqqqqme7zDAqqiAqqrzMcyqqMwojvMzHMqCzAjvMzMxzIzMzvMzMzM + xze7zMzM//+zMPg/a2vgD6pmwAfMzIADMyKAA6e2AAGqpgABzMwAATIqAAFmuwABqqaAA2zMgAMCIsAH + pnfgD6qq+D9szCgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWAAAA0QAAAM4A + AADNAAAAywAAAMgAAADGAAAAxQAAAMIAAADBAAAAvgAAALwAAAC6AAAAtwAAALUAAACzAAAAsAAAAK0A + AACpAAAApgAAAJwAAABzAAAAZwAAADwAAACiAQEAkgEBAN0CAgDAAgIAvQICAH0BAQBWAQEAzgMDAMMD + AwC/AwMAsAMDALQEBACGAwMA5wYGACUBAQDTBgYAxQYGAKQFBQDXBwcAuQcHAMAICABIAwMAMgICALQI + CACtCAgAoQcHAMcKCgD5Dg4AvgsLAOEODgDMDAwAmgoKANIPDwDFEREArQ8PAPoXFwDpFxcApBERANwY + GADJGRkA/iEhALcYGAD0IyMA1B4eAOQiIgBjDw8A7SUlABoEBAD9KioAlxkZAAwCAgClHR0A9SwsADMJ + CQDXJycAuSIiAMYoKAD+NDQAiRwcAPQ0NADnNDQA2jIyAP47OwCqKSkA9j09AP5CQgD+RkYA9ENDAP9J + SQC6NjYAyzw8AGYfHwA1EBAA/05OAPhNTQDlR0cA/1FRAKg3NwD/VVUAu0BAAEkZGQCKMDAA/1paAPZX + VwD2WloA/15eAMhLSwC3RUUA/2FhAG4qKgC/TEwA/2ZmALFHRwDoX18A9mZmALVLSwD/bGwAtk5OAMxZ + WQDmZWUAr01NAKBHRwD/cnIAt1JSADMXFwD2c3MA/3h4ACkUFAD/fX0A/4GBAOl3dwD/hoYA+oODAPaG + hgD/jY0AqF1dAGY5OQD/k5MA5oaGAMVzcwD/mZkA8JOTAP+engD/oqIA+6GhAKNpaQCEVVUA/6amAMuF + hQD/rKwA8KamAP+ysgD0q6sA/7a2APuzswD/ubkA+bW1AP++vgDgqakA/8LCAP/FxQD/yckA6Lm5AP/O + zgCOc3MA/M3NAOzCwgDDq6sAMy0tAAD+/gAA/f0AAPv7AAD5+QAA9/cAAPT0AADx8QAA7+8AAO3tAADp + 6QAA5uYAAOTkAADg4AAA398AANraAADT0wAAyckAAI6OAAB9fQABzs4AAcbGAAHCwgABuroAAbS0AAGt + rQABpKQAAZubAAGHhwAC+fkAAvf3AAF1dQAD//8AA/v7AAX19QAG//8ABubmAAJSUgAJ//8ADP//AAnA + wAAIj48ABmhoAAMxMQAQ8/MAEf7+AAqBgQAGSUkAFv7+AA+qqgAW6+sADH5+AAQoKAAWysoAHf7+ABzX + 1wAo/v4AJujoADT//wAt19cAMuLiADf29gA7/v4ABhgYAEf9/QBU/v4AUPDwAD2wsAAYREQAFj09ABAs + LABO1NQAZPDwAGr29gB29fUAPHx8AC9dXQBarq4Ac93dAIC+vgBDYmIAltTUAIeYmAAAAAAA//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////XGRqcHh+hIeK//// + //////////////////////////////////////////9ISFZaZGpzfoKEh4qNjZCSk/////////////// + ////////////////////////QEBIVlxmc36Eh4qNkJKSk5eXl5mZ//////////////////////////// + /////0xCSEhRWWFteIKHipCSk5mZm5ubm5ubm5v/////////////////////////////QkJMTFFRVllk + anN+hIqNkpmbnaGhoaGfn52d//////////////////////////9GRkxMTEhASFNYWmRteIKHjZKXm6Gj + pKSko6Gfn////////////////////////0ZGRkJCOzszPENVU1lhanN+hYqQl5uho6WlpaSjoZ////// + ////////////////REREPDwzMzMqPWllVVZcZnB4goeKkJecoqaqqaelpKGf//////////////////9E + Pjw8NSUlJRAe/PmoXlhaZG1zfoSHipGYqKirpqmnpaShn////////////////04+PjUlJSUBJKzU5e77 + lWNZYWpzeIKFiY+W+O/7q6qpp6WjoZ3/////////////TkM+NRoaGgQV8MCx4uz0+3JbYWZweH6Ehous + 397u/auqqaeloZ+b////////////Qz44KhoaBB3xw7Kt3Obt+otjWmRqc3iBeozww8rq9f2rqqmnpJ+b + //////////9OQzgnAAAEJPDCtLCt2eTs9P5uW1xkanN7fYDHubDk7fb9q6qppaGdm/////////9DPzYf + AgsW8MS6s7Ct0uLm7fqVY1lcZmx6cfLDtq/c5u32/auqpKOdmf///////1A/OSgHEhbxvsO8t7KuzNnk + 7PT+blhZXGNlgMu8tK/S4urt9v2rpqGfmZf//////1A/MigMGRfr1sfEwLizr8/i5u37i1RRWF5f8cK3 + sq6t0+Lm7PT7q6afmZP//////1A/LBsNGR5H68vHxcG7tbDT5Oz0/mdMVFdg1ru0sK6urrDO3uj5/qKg + mZL//////085LBsKESQeR+vWvsbDvLax2ebt+n1QT0Xww7WxsLCytLe7wd33qKKemZL/////UE9BKxwJ + Cg8ZHiZK27/HxMC3sOLq7v5pX/C9tbGwsbO3u8HH1vGMj5qbmZKN////UE9BKwwKCAcLFBUXSuDWvsXA + ts3k6vPv7+Gyrq+wsrfAxcjxgIyLjpSZl5CK////UE9BIw0LCQcFBxAkHiZK277Eu7PT5OTk4tnPra2v + tsDI8oBxfXqGiI2Tk42H////XU86Ig8NCggFAgIHExUXStHHvbev09zc2dPSz9LQxNaDX2VudXZ+goeQ + ko2E////XU86IhAODAoHBAEAAQ0dLkrLw7myrdLT0s/S09nh+GhpXmNrbXBzeISKkIqC////XU86EREP + DQsIBQIBAAARFibXxrmyrq3MzMzP2eLn92leW1xhZGZqbX6Fiod+////Z1c6EhIRDwwKBwQBAAAEGRfg + xrexrq2tra3P2eLp85ZeWFlZWlxcZHCCh4V4////b109KRMREA4MCQYDAQADGS7WwLOwra2trq2t0+Lm + 7vuLVFFRVlZWWWZ4hYJz////b11LMRMTERANCwgFAgIOHtvBtbGvra6vsbGwrtnk7PX7ckhISEhRUVpw + fnhw////b2dXPSkTEhEPDQoICRIX38CzsK+urrCztri3tLDc5u31+15AQEBASFZmc3Bw/////29XPTEY + ExIRDw0OGWDFt7Kvrq2tsLO6vcK9u7ax3Obt9ftvOzM7O1Fcamb//////29lSz0UGBMSERgW8MKzr6+t + ra2usrvG1svHw8C4sdzm7fX6lTwzM0hWYWT//////29vVz0xFBQUHS3WvLKvrq2tra2xt8bxSuvRyMW9 + uLHc5uzt+qhDM0BRWWT///////93ZUs3GR0eg9bBt7Kvra2tra+zvfEXLSZK28jFvbix2eTq7vlpPkhR + Vv////////90b1dJJB4m0cfCu7Wwra2trrG61S0UFBUuStvIxb24ssnY4/dSPkxWWv//////////d2VX + Uh4m4L/Gwru1sK2usLXFYBIEBREVF0rRyMW9urfA2i06PExW////////////dHdlSUUuSuC/xsK7tbCw + tL3xGQUBAQMQHRdK277FwcLfTRk+RlNi/////////////3d0ZVJFLkrgy8bCu7W0u9YWCgQCAQEDDh0X + StG+x9ZNJDg8TFj///////////////95dGVSRS5K17/Gwru7xhcTCQcFBAMBAw4VLuvW1k0kNjxGU/// + ////////////////f3RlUkUuSte/xsPF8R0OCwoIBwUEAwUTFi5HTR0yPkRU//////////////////// + /393ZVJFTUrXy77bHhMPDQwKCQgHBQQJFBUWJDQ+RFT///////////////////////9/eWVpX2BH8tsX + GRIRDw4NCwoJBwYFITA6OUNEVP//////////////////////////eXl0aXFoYC0dGBMSERAPDQwLCiAo + Mjk/Q05V/////////////////////////////3d/fH1pcVJLPTowMDAvLys0NDk/P05OVVX///////// + ////////////////////////d398dGVlV1dPQUFBQU9PUFBQUFVV//////////////////////////// + //////////90eX95b2dnZ11dXV5eXl5eXv////////////////////////////////////////////9v + cnJycnJubm5eXv////////////////////////////////////////////////////////////////// + ////////////////////////////////AAD///////8AAP//wB///wAA//wAAf//AAD/8AAAf/8AAP/A + AAAf/wAA/4AAAA//AAD/AAAAB/8AAP4AAAAD/wAA/AAAAAH/AAD4AAAAAP8AAPAAAAAAfwAA4AAAAAA/ + AADgAAAAAD8AAMAAAAAAHwAAwAAAAAAfAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAAAA + AAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAgAAAAAAPAACAAAAAAA8AAIAAAAAADwAAwAAAAAAfAADAAAAAAB8AAOAA + AAAAPwAA4AAAAAA/AADwAAAAAH8AAPgAAAAA/wAA/AAAAAH/AAD+AAAAA/8AAP8AAAAH/wAA/4AAAA// + AAD/wAAAH/8AAP/wAAB//wAA//wAAf//AAD//4AP//8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAC9AAAAuwAAALkAAAC2AAAAswAAALEAAAClAAAAowAAAKEA + AACcAAAAkQAAAG0AAABpAAAAZAAAAF0AAABYAAAANgAAADAAAAAqAAAAIgAAABMAAAAHAAAAhgEBAL8C + AgC8AgIAqAICAKECAgBPAQEAQgEBALsDAwCyAwMArQMDAH0CAgC3BAQAiwMDALMFBQC8BwcA3AkJAKUH + BwBVBAQAzgsLALwKCgCqCQkAOwMDAOgNDQAPAQEAXQcHAJcMDACgDg4AvBISAPkaGgDNFhYAWwoKAOcb + GwC2FhYA2hwcAKsXFwDDGxsAuxwcALUbGwDKICAA8ycnAJMZGQBFDAwA0yYmAOUtLQC2JCQA/TQ0APAy + MgDGLCwA+Do6AKwoKAD/PDwA1TMzAP8+PgDpOjoA/0REAPBAQADIOTkAwDc3AP9KSgC3NTUATRcXANdC + QgD/T08A+E1NAM1AQAAqDQ0A5khIACYMDADxTU0Avj09AKw5OQCVMTEA/1VVAMFCQgC6QUEAsT4+AP9b + WwDISUkAvkZGALFCQgBpJycAzU1NAAgDAwD/YmIANBQUAOhcXAD/ZmYAu0tLAPhnZwD/a2sAs0xMALxR + UQD/cnIAkUFBAHk2NgCkS0sA/3Z2AJtISAC2VVUAzmNjAP98fADodXUASyYmAP+EhAD2gYEAqFlZABYM + DAD/jIwAm1hYAGc7OwD+k5MAqmNjANJ9fQD/mpoA/56eAP+iogD/qKgA/6qqAN6WlgD/ra0A+6qqAP+w + sABzUVEA/7i4AOurqwD/u7sA/729APK3twCFZWUA/8PDAL6RkQD/ysoA16urAPXExAD3ysoAwqamAMyx + sQAhHR0AKScnAB0cHAAA//8AAP39AAD7+wAA+PgAAPb2AAD19QAA8/MAAPHxAADv7wAA7e0AAOrqAADm + 5gAA5OQAAOPjAADh4QAA398AAN3dAADY2AAA19cAAM3NAADLywAAx8cAAMPDAADBwQAAtbUAALCwAACt + rQAAqakAAKamAACjowAAlZUAAJKSAABmZgAAZGQAAY2NAAGCggACvLwAA/7+AAPs7AADwsIAApycAAT8 + /AAEtLQABK6uAAJcXAAEl5cAB/n5AAf09AAG2NgABaKiAASRkQADbGwACPX1AAR4eAAJ/v4ADv//AAZm + ZgAQ+voACpycABT//wALiooAFfT0ABz9/QAe6OgAI/39AAk6OgAs/f0ALu7uACKurgAz/f0AHo+PADz8 + /AA86+sAPNXVAEn9/QBG7+8AInBwAFL+/gA2oaEAVPX1AF/9/QAECgoAYOTkAFzT0wBr8fEAaM7OAGO8 + vABx1dUAgN7eAHzIyACQ5eUAfpeXAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////9janB3foKFiP////////////// + /////////////0lJUWNzfoWIiouMjI6Q//////////////////////9ERERJUWNwe4KJjpKUlZSS//// + //////////////9FPj4zMzZKTlVqc36IjJSYmpiVlP//////////////QjY2LSkwdf5XTV9te4KFjZmb + nJqYlP///////////0I2LSYfHOfr9YBOX213f4eR8fienZqYlP//////////OCYZIWvH3Ojz/GhVanN8 + g6HT6vufnZqV/////////zgpGx3ftqrZ5fD3hltjb3p91a3j8/2fnZiS//////9BNCAc1ry3r6bh6vP8 + aF9sdKK3q9rq8/2fnJKQ/////z0yIxPPwby3rqbj7feDWWR90LCqpOHq8vuelo7/////PSoXERbDwr24 + sajl8PliXqK0rKmoqcni7P6bjP///0Y6KgkNExbExb+6s9Lo7pF9yqioqa2zts3pl5OMif//RjolBAoO + ExbPxsC5sNzl5uLZo6WpsLrGoISHj4uF//9GOyIDBAoMERX02Lu0qdrh3trZzK7Uon10en+JioL//1A8 + JAQCAwcXDxMWxbWrpNna2t7g71NeaGxvd4KIfv//XEMgBgQBAAMJDRTktaqlo8jZ3uPsdVRWX19qe4V3 + //9lQysgBgMBAAkQgb2tqKamqKjR4er2dk5LTVVwfnP//2VSORogBgYLHd20q6emp6ywsq7S5fD6gFdF + SWNzbf//YWE5JwcHIRLOrKempaars7rHuLLX6PD3/GZFUWpj////bkgxFxBay7OrpqSkqLDL5Ma/urHR + 5e3y+UZLVf////9uYj8o5MW8tq+opaaruIEUFtbAuK+o4OLxQ0RL/////2JxXlMu1sG8tq+pqa/fEA0T + 9Ma+uLS01DU4RE3//////3F2Z1gWw8G8t7Kx1B0ICA8Vz8K+u9UdMj5H/////////3l4Z1hpw8G9usdY + CwACFxEWw8LYLCs2Rf//////////Ynl4Z1hpw8LA2A4FAAAHDBMu5CwnOEVO////////////Znl4Z2uB + z9sRCwQBAAIKDBwvMThCTP//////////////Znl2dX1rQCEaHyIZGB4rMTxBQkz///////////////// + /3GAeHReSDw3NzI6Oj1GSkr//////////////////////11xeXJuZWBcT1dXV0pK//////////////// + ////////////XGVlZGRkV0//////////////////////////////4B///wAD//4AAf/4AAB/8AAAP+AA + AB/gAAAfwAAAD4AAAAeAAAAHgAAABwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AA + AAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gAAH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvAAAALsAAAC6AAAAsgAAALEAAACwAAAArQAAAKcAAACfAAAAkwAAAH4A + AABtAAAAPAAAAKgEBAChBQUAYAMDADsCAgBVBAQAOwMDAKIMDAC0Dg4Avg8PANEWFgBoCwsA5xoaALsV + FQDFGBgAsxYWADwICACoFxcAgBISAPYuLgDfKSkA4y0tAJwfHwCyJCQAzy0tAOAxMQDzNzcA8zk5APA5 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAJGRkYLISEhHxwcHEB+FxeKtB4exd8o + KOr/ODj//0VF//9QUP//W1v//2Zm//9wcP//eHj//39///+Ghv//jIz//5GR//+Wlv//mZn/2YaG7aNo + aNJZOjquAAAAfwAAAF8AAAA7AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BZmZmBT09PRUwMDA1jB4eiMQa + Gs/0Hh75/ysr//86Ov//SEj//1ZW//9lZf//cXH//319//+Ghv//jo7//5OT//+Zmf//nZ3//6Cg//+k + pP//pqb//6en//+oqP/0oqL5tHl53F9BQbMAAAB9AAAAVgAAAC0AAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wGSkpIHSkpKH3Qp + KV66Hx++6yEh9fsmJv/9Li7//zU1//9DQ///T0///11d//9tbf//enr//4aG//+Pj///l5f//56e//+k + pP//qqr//66u//+wsP//s7P//7Oz//+zs///s7P//7Oz/+6np/ahcXHUNCYmngICAmwAAAA8AAAAFwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////AoCA + gAhEREQimyQkhNAgINz0JSX/9y0t//kvL//8MjL//zQ0//86Ov//RET//1BQ//9aWv//aGj//3R0//9/ + f///ior//5aW//+goP//qqr//7Ky//+3t///vLz//76+//++vv//vb3//7u7//+5uf//t7f/y5GR52VJ + SbcCAgJ5BAQERwAAABoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8DqqqqCU5OTiSsJSWW3CIi7O8lJf/yKir/9Ssr//cqKv/7KCj//iUl//0nJ//4MTH/9zk5//1F + Rf//UVH//19f//9ra///eHj//4WF//+Skv//np7//6mp//+zs///vLz//8LC///Fxf//xsb//8XF///C + wv//vr7//7u7/+KkpPKAXFzDAgICgAAAAEoAAAAaAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wOzs7MKWlpaIrAkJJrfISHz7CUl/+4kJP/wIiL/9B4e//YaGv/5FRX/+BER/+sS + Ev/WICD/3C0t//Q1Nf/+QkL//05O//9bW///Z2f//3V1//+Bgf//jY3//5ub//+mpv//srL//7y8//7D + w//9yMj//svL///Kyv//x8f//8LC//++vv/ura33iGNjxwQEBIAAAABGAAAAFwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////A9XV1QZsbGwariYmkNseHvPnISH/6SAg/+saGv/tFRX/8Q8P//UM + DP/xCQn/1QcH/6EPD/+KLS3/qzk5/983N//7PT3//0lJ//9WVv//YmL//2xs//94eP//hIT//4+P//+a + mv/9paX/9Kur/+Wrq//js7P/7sLC//vMzP/+zs7//8nJ///ExP//v7//7q2t94FeXsMCAgJ5AAAAPAAA + ABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Bo6OjhKoLCxz0iAg6uIbG//kGhr/5hUV/+gP + D//sCQn/7QQE/+MEBP+vAQH/WAcH/0NiYv9anJz/iG5u/8dAQP/1PT3//0ZG//9SUv//Xl7//2ho//9z + c///fHz//4aG//2QkP/wk5P/y4WF/5Rqav+QgYH/u56e/+a+vv/7zs7//8/P///Ly///xMT//76+/+Ol + pfJnSkq3AgICbAAAAC0AAAAIAAAAAAAAAAAAAAAAAAAAAP///wH///8Ev7+/DJg8PEPGISHU3Rsb/98V + Ff/hDg7/4wkJ/+YFBf/kAwP/0AEB/4MBAf8qNTX/CcDA/ybo6P9L6ur/ccDA/6NkZP/hQkL//END//9P + T///Wlr//2Rk//9ubv//eXn//4KC//aGhv/Penr/f09P/zdXV/8/u7v/esXF/7mqqv/pwcH//M7O///P + z///ysr//8PD//+9vf/LkpLnNicnngMDA1cAAAAbAAAAAwAAAAAAAAAAAAAAAP///wL///8HgICAFrch + IajZHR3/2hYW/9sNDf/dBgb/4AIC/98CAv/LAQH/cAAA/x5AQP8Dzc3/APf3/x7///9C/f3/Y/Hx/4S5 + uf/DTk7/9END//5MTP//VVX//2Bg//9qav//c3P//Hx8/+d6ev+eWVn/PCQk/w9/f/8X5ub/VvLy/4vZ + 2f/CsLD/68PD//zOzv//zs7//8jI///AwP//uLj/oXJy1AYGBn8AAAA7AAAACwAAAAAAAAAAAAAAAP// + /wTMzMwKqykpYc0eHvHVFhb/1g4O/9gGBv/aAgL/3AAA/8sAAP9+AAD/GkBA/wO8vP8A8/P/AP7+/xb/ + //81////Vf///3Lh4f+oXl7/5kRE//xGRv//UFD//1pa//9kZP//bW3/9nNz/8lmZv9kNjb/EUdH/wK5 + uf8C9/f/Ov7+/2v39/+X1NT/xrCw/+zDw//9zs7//8zM///Fxf//u7v/7qio92NGRrQDAwNgAAAAHgAA + AAIAAAAAAAAAAP///wZxcXESuyEht9EaGv/RERH/0wYG/9QBAf/XAQH/ywAA/4kAAP8YRkb/AsPD/wDv + 7/8A+fn/AP7+/xD///8o////Rv///2Px8f+JmZn/x01N//RDQ///Skr//1NT//9cXP/8ZWX/5mVl/5tJ + Sf8vGBj/A5ub/wHh4f8A+fn/Jf///0////91+Pj/mdXV/8awsP/swsL//MvL///IyP//v7///7W1/7d+ + ft0GBgaBAAAAOgAAAAoAAAAAAAAAAP///weqJiZVyR0d9MwVFf/ODAz/zgMD/84AAP+7AAD/awAA/xdD + Q/8CsrL/AN/f/wDw8P8A+fn/AP7+/wn///8c////Nv///1X9/f9y39//o2pq/+NDQ//8Q0P//0tL//9U + VP/2Wlr/y1JS/2cuLv8TKyv/ALy8/wDp6f8A+vr/FP///zX///9X////efPz/5vW1v/JsLD/7sLC//zH + x///wcH//7a2//SmpvldPz+vAwMDVwAAABYAAAAAAAAAALOzswq3IyOfyhwc/8kREf/JBwf/xQEB/6kA + AP9hAAD/Ez4+/wKNjf8AuLj/ANHR/wDm5v8A9PT/APz8/wL///8R////KP///0X///9j8vL/ipWV/8xH + R//2PDz//0FB//1JSf/pTEz/oTo6/zQVFf8FeHj/ANbW/wDv7/8A+/v/CP///x////84////V////3X1 + 9f+Zzs7/x6ys/+u9vf/8wMD//ri4//+srP+mbW3TBwcHcQYGBikAAAADAAAAAIVHRxm9ISHaxhkZ/8UM + DP/EBQX/ugAA/40AAP9BAAD/DB0d/wFqav8AnJz/ALa2/wDPz/8A4+P/APLy/wD7+/8G////G////zb/ + //9V+fn/dsLC/6lcXP/kOzv//Tc3//c+Pv/MOTn/aCEh/xI9Pf8Bv7//AObm/wD09P8A/Pz/Af///w3/ + //8a/v7/L/39/0n5+f9o7u7/j8TE/8Ojo//tt7f//Li4//+urv/bjIztFxISiwQEBD4AAAAKAAAAAKgk + JFXFIyP/wxcX/8EJCf/AAgL/twAA/5QAAP9UAAD/GgAA/wMfH/8AcnL/AJaW/wCvr/8Ax8f/ANzc/wDs + 7P8A+Pj/C/7+/yb///9G/f3/Ze3t/4WoqP/DQUH/7i8v/+cwMP+hJyf/OA8P/wZubv8A29v/AO/v/wD4 + +P8A/Pz/AP39/wD8/P8A+fn/BfX1/xXv7/8y4uL/XLq6/5qTk//drKz/+bW1//+trf//n5//ZD8/sQYG + BlEAAAASAAAAALIlJYnCISH/vhQU/74HB/+/AgL/vgAA/60AAP+FAAD/TwAA/xsAAP8DFxf/AGdn/wCM + jP8Apqb/AL29/wDT0/8A6Oj/APf3/xP+/v8z////Uv39/23c3P+eTk7/xyws/7YjI/9dEhL/E0RE/wG4 + uP8A7e3/APb2/wD5+f8A+fn/APX1/wDv7/8A5ub/ANra/wPGxv8Pqqr/N319/41sbP/epKT/+7Oz//+s + rP//np7/mFtbygoKCmIAAAAZAAAAALcoKLG/ISH/uxMT/7sHB/+9AgL/wAAA/78AAP+yAAD/jwAA/1sA + AP8nAAD/CAIC/wFHR/8Afn7/AJub/wC0tP8Az8//AObm/wD5+f8d/v7/Pf///1X09P9wjo7/gjs7/2Qg + IP8gSkr/AsvL/wDt7f8A9/f/APj4/wD39/8A8fH/AOfn/wDZ2f8Ax8f/AZub/whfX/8fOjr/Xjw8/7h5 + ef/wpqb//rGx//+qqv//nZ3/vG1t3RAQEG8AAAAgAAAAALcpKdG8IiL/uRMT/7gGBv+5AQH/vgAA/8MA + AP/EAAD/uwAA/54AAP9uAAD/PAAA/xIAAP8CKyv/AGVl/wCPj/8Ar6//AM/P/wDp6f8D+/v/Jf7+/z39 + /f9I3d3/R7Cw/zGmpv8Sy8v/APX1/wD8/P8A+/v/APn5/wDz8/8A5+f/ANDQ/wCtrf8DhIT/Ej09/zYb + G/9vODj/smFh/+aGhv/7oaH//6ur//+np///mpr/13Z26w8PD3gAAAAlAAAAALksLOe6IyP/thIS/7QE + BP+2AQH/uwAA/8AAAP/FAAD/yQAA/8UAAP+xAAD/iQAA/1cAAP8pAAD/CgAA/wFHR/8Ajo7/ALa2/wDY + 2P8A8PD/DP39/yP///8u/f3/LPj4/yD4+P8R/f3/Bf///wD///8A////APv7/wDq6v8AzMz/BISE/xIt + Lf8xFRX/ZCsr/55HR//MX1//63Nz//qDg///lpb//6Oj//+jo///lpb/63t79RQUFIAGBgYpAAAAALsx + Mfe3IiL/shAQ/7EDA/+zAQH/uAAA/70AAP/CAAD/yAAA/84AAP/OAAD/xAAA/6YAAP91AAD/OQAA/wwA + AP8BUVH/AJub/wDIyP8A5+f/APr6/w3///8Y////Gf///xP///8N////CP///wf///8I////Bubm/wKx + sf8MYWH/KxUV/2IiIv+bOjr/yU9P/+hfX//2Zmb//HBw//94eP//iYn//5mZ//+dnf//kpL/+Hx8+xUV + FYQGBgYrAAAAALs0NP60IiL/rw4O/64DA/+wAAD/tQAA/7oAAP+/AAD/xQAA/8sAAP/RAAD/1QAA/9IA + AP+2AAD/egAA/zEAAP8HDAz/AHd3/wC6uv8A4OD/APX1/wD///8J////C////wr///8H////CP///w3/ + //8T/f3/GsnJ/yZiYv9KGRn/iSgo/8Y+Pv/nTU3/9ldX//xdXf//YGD//2Rk//9tbf//fX3//46O//+X + l///jIz//nh4/xgYGIEGBgYpAAAAALo4OPezJSX/rA8P/6sCAv+tAAD/sgAA/7cAAP+8AAD/wgAA/8gA + AP/OAAD/0wAA/9gAAP/UAAD/rgAA/2gAAP8fAAD/AzU1/wChof8A4OD/APT0/wD9/f8B////A////wP/ + //8E////B////xD///8d/f3/LdfX/0h9ff+FMDD/zTc3//NDQ//9S0v//09P//9SUv//VVX//1hY//9e + Xv//cHD//4OD//+QkP//hob/+G5u/BkZGXsHBwcmAAAAALg+PuizKyv/qhIS/6gCAv+qAAD/rgAA/7MA + AP+5AAD/vgAA/8QAAP/KAAD/0AAA/9YAAP/aAAD/ygAA/5MAAP86AAD/CCUl/wCgoP8A5eX/APb2/wD9 + /f8A////AP///wD///8B////Bv///xD///8h////N/b2/1PKyv+IWlr/zz4+//k9Pf//QED//0ND//9G + Rv//SEj//0pK//9QUP//YmL//3h4//+IiP//gID/7GJi9RsbG3IICAghAAAAALZBQdOzMDD/qRUV/6UE + BP+nAQH/qwAA/7AAAP+1AAD/ugAA/8AAAP/GAAD/zAAA/9IAAP/XAAD/zQAA/5UAAP8xAAD/BWpq/wDM + zP8A8PD/APn5/wD+/v8A/v7/AP///wD9/f8A/v7/Af7+/wv///8d////N////1Ly8v9zvr7/qVtb/+g6 + Ov//NDT//zc3//86Ov//Ozv//z4+//9CQv//VVX//2tr//+AgP//eHj/3FdX6R4eHmcKCgoaAAAAALRD + Q7S0ODj/qhwc/6QICP+lAgL/pwAA/6wAAP+xAAD/tgAA/7wAAP/CAAD/yAAA/84AAP/OAAD/tAAA/1EA + AP8PTEz/AcfH/wDt7f8A9/f/APv7/wD+/v8A/f3/APv7/wD39/8A9vb/APj4/wD8/P8R/v7/Kv///0f9 + /f9k9fX/hL+//71PT//6Kir//yoq//8rK///Li7//zAw//82Nv//R0f//2Ji//91df//bm7/xUxM2iMj + I1gAAAASAAAAALFBQYq2QED/rCcn/6QPD/+jBQX/pAAA/6gAAP+tAAD/sgAA/7cAAP+9AAD/wgAA/8EA + AP+oAAD/QQAA/wx/f/8B0ND/APHx/wD4+P8A+/v/AP39/wD9/f8A+Pj/APHx/wDp6f8A5OT/AObm/wDu + 7v8A+fn/FP7+/zH///9P////bPX1/4y6uv/OQED/+x4e//8dHf//Hx///yIi//8oKP//PDz//1VV//9m + Zv//YGD/qkJCwykpKUUAAAAKAAAAALE9PU+3R0f/rS8v/6MVFf+hCAj/oQEB/6QAAP+pAAD/rQAA/7MA + AP+3AAD/tQAA/44AAP8wDw//Bqys/wDn5/8A9fX/APr6/wD8/P8A/v7/AP7+/wD5+f8A8PD/AN/f/wDL + y/8Aw8P/AMjI/wDX1/8A6Oj/APf3/xb9/f80////Uv///2719f+Ltrb/vkZG//UVFf//EBD//xUV//8b + G///MTH//0hI//9bW///Vlb/iDw8nzU1NTBAQEAEAAAAALEzMwqzRUXZsDo6/6YfH/+gDQ3/ngEB/6EA + AP+kAAD/qQAA/6sAAP+iAAD/agAA/xtDQ/8DwsL/APDw/wD6+v8A+/v/AP7+/wD+/v8A/v7/APz8/wD0 + 9P8A29v/AaWl/wFtbf8Ac3P/AJ6e/wC3t/8Azs7/AOTk/wD39/8W/v7/Nf///1H///9p9/f/f9jY/6Rt + bf/qERH//wcH//8REf//Jyf//z4+//9OTv/jSUntSzw8ak1NTR7///8B////AQAAAACwQkKbtEVF/6kq + Kv+hFBT/nQUF/5wAAP+dAAD/mAAA/4AAAP9DAAD/D2pq/wHR0f8A8/P/APv7/wD9/f8A/v7/AP///wD/ + //8A/v7/APf3/wDl5f8CoqL/Cj8//xAFBf8HERH/AVBQ/wCHh/8Ara3/AMrK/wDk5P8A9/f/Fv7+/zH/ + //9L////Xv39/27f3/+LfHz/0Rwc//oPD///IiL//zU1//9BQf+/Pz/MRkZGSWlpaRH///8B////AQAA + AACuPT1LtktL8602Nv+kHx//mgoK/5EBAf9+AAD/UgAA/yYSEv8Jb2//AcbG/wDn5/8A9fX/APv7/wD+ + /v8A////AP///wD+/v8A+/v/APHx/wHJyf8TQUH/PAAA/0oAAP8qAAD/CgEB/wFISP8AiIj/AKur/wDI + yP8A5OT/APb2/xD9/f8n/v7/Ofv7/0bv7/9XtbX/kDQ0/94aGv/6KSn//Tc3//U4OPmVQUGWXV1dLL+/ + vwgAAAAAAAAAAAAAAAAAAAAAsUZGr7JDQ/+nLS3/mxQU/4IGBv9bAQH/JQIC/wdRUf8BmJj/AMHB/wDZ + 2f8A7Oz/APj4/wD+/v8A////AP///wD9/f8A9vb/AN/f/wiPj/9MAAD/lwAA/5sAAP9wAAD/NAAA/wsA + AP8BR0f/AImJ/wCrq/8AyMj/AOTk/wD09P8C+fn/EPPz/xzX1/81e3v/iRkZ/9wbG//3Kyv/+zg4/8w5 + OdVYWFhRi4uLFv///wQAAAAAAAAAAAAAAAAAAAAArT4+UrNLS+6uPT3/nyUl/4MQEP9VBgb/IQEB/wUh + If8Aenr/AKWl/wDCwv8A29v/AO3t/wD4+P8A/v7/AP39/wD5+f8A6+v/BKqq/zMREf+pAAD/ywAA/8gA + AP+sAAD/dwAA/zcAAP8KAAD/AVFR/wCIiP8ArKz/AMnJ/wDf3/8A5ub/Ac7O/wqBgf9JBwf/sA8P/+kd + Hf/3Ly//7TY29p9CQpR0dHQus7OzCv///wMAAAAAAAAAAAAAAAAAAAAAAAAAAK9FRZu0Skr/qDY2/5Ie + Hv9sDg7/NgMD/w8AAP8CKir/AH19/wClpf8AwsL/ANzc/wDt7f8A+Pj/APn5/wDv7/8Bycn/HTs7/5UA + AP/JAAD/0gAA/9MAAP/MAAD/sQAA/3oAAP86AAD/DAAA/wFKSv8AjIz/AK+v/wDFxf8AwcH/CHx8/zUJ + Cf+SBgb/2RMT//AlJf/1MzP/wjw8xGtra0WmpqYX////BP///wEAAAAAAAAAAAAAAAAAAAAAAAAAAKo5 + OSiwSUnKsUhI/6UzM/+MHh7/YwwM/zMEBP8PAQH/Aisr/wB1df8ApaX/AMLC/wDb2/8A6+v/AO7u/wDa + 2v8Oamr/ZgAA/74AAP/LAAD/zgAA/9AAAP/RAAD/zQAA/7QAAP99AAD/PQAA/wsAAP8AWVn/AJCQ/wCe + nv8Ia2v/MwkJ/4kDA//QDQ3/6hwc//AsLP/UODjgjlJSa5WVlSTo6OgL////Av///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACtPz9ZtE9P47FHR/+kMzP/ihwc/2MODv8yBQX/DgEB/wMuLv8Afn7/AKam/wDB + wf8A19f/ANra/wSlpf88AAD/pQAA/8EAAP/FAAD/yAAA/8sAAP/NAAD/0AAA/80AAP+0AAD/dwAA/zEA + AP8GFBT/AmNj/wZhYf8wCwv/hAQE/8oLC//kGBj/7CYm/90xMe6pRESNi4uLLtLS0hH///8F////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0REdLRQUO+xSEj/ozIy/4kcHP9hDg7/MAQE/w0B + Af8CMDD/AH9//wCkpP8Aubn/Aa6u/xo8PP9+AAD/tQAA/7wAAP+/AAD/wgAA/8UAAP/IAAD/ywAA/80A + AP/JAAD/pwAA/2YAAP8tAAD/GggI/zIGBv9/AwP/xgoK/+AWFv/nJSX/4S8v9LQ8PJ6MjIwz3NzcFv// + /wr///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALBHR361U1PwskpK/6Q1 + Nf+NIiL/YxER/zMICP8QBAT/AzEx/wB0dP8Bj4//Dk1N/1sAAP+lAAD/swAA/7cAAP+6AAD/vQAA/8AA + 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 + yf+AAU3/wANP/+AHYf8= + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/directx.ico b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/directx.ico differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/D3D10Tutorial02_WinFormsControl.csproj b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/D3D10Tutorial02_WinFormsControl.csproj new file mode 100644 index 00000000..7bf94c8b --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/D3D10Tutorial02_WinFormsControl.csproj @@ -0,0 +1,111 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6} + WinExe + Properties + D3D10Tutorial02_WinFormsControl + D3D10Tutorial02_WinFormsControl + v3.5 + 512 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + + + + 3.0 + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + TutorialWindow.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + PreserveNewest + + + PreserveNewest + + + True + Settings.settings + True + + + Form + + + TutorialWindow.cs + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Program.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Program.cs new file mode 100644 index 00000000..f5e6e258 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Program.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; + +namespace D3D10Tutorial02_WinFormsControl +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new TutorialWindow()); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..b2435008 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("D3D10Tutorial02_WinFormsControl")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c4d21605-d6db-4779-a72c-4cca985fa5cf")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Properties/Resources.Designer.cs new file mode 100644 index 00000000..6fb807f7 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial02_WinFormsControl.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("D3D10Tutorial02_WinFormsControl.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Properties/Settings.Designer.cs new file mode 100644 index 00000000..4371821f --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial02_WinFormsControl.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Tutorial02.fx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Tutorial02.fx new file mode 100644 index 00000000..db8bd6a9 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Tutorial02.fx @@ -0,0 +1,34 @@ +//-------------------------------------------------------------------------------------- +// File: Tutorial02.fx +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +float4 VS( float4 Pos : POSITION ) : SV_POSITION +{ + return Pos; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( float4 Pos : SV_POSITION ) : SV_Target +{ + return float4( 1.0f, 1.0f, 0.0f, 1.0f ); // Yellow, with Alpha = 1 +} + + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS() ) ); + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Tutorial02.fxo b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Tutorial02.fxo new file mode 100644 index 00000000..358ac457 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Tutorial02.fxo differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/TutorialWindow.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/TutorialWindow.Designer.cs new file mode 100644 index 00000000..822117fe --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/TutorialWindow.Designer.cs @@ -0,0 +1,64 @@ +namespace D3D10Tutorial02_WinFormsControl +{ + partial class TutorialWindow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TutorialWindow)); + this.directControl = new Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl(); + this.SuspendLayout(); + // + // directControl + // + this.directControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.directControl.Location = new System.Drawing.Point(0, 0); + this.directControl.Name = "directControl"; + this.directControl.Size = new System.Drawing.Size(624, 442); + this.directControl.TabIndex = 4; + this.directControl.SizeChanged += new System.EventHandler(this.directControl_SizeChanged); + // + // TutorialWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(624, 442); + this.Controls.Add(this.directControl); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "TutorialWindow"; + this.Text = "Direct3D 10 Tutorial 2: Rendering a Triangle"; + this.Load += new System.EventHandler(this.TutorialWindow_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.TutorialWindow_FormClosing); + this.ResumeLayout(false); + + } + + #endregion + + private Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl directControl; + } +} + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/TutorialWindow.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/TutorialWindow.cs new file mode 100644 index 00000000..227933a4 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/TutorialWindow.cs @@ -0,0 +1,239 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.IO; +using System.Collections.ObjectModel; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; +using Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; + +namespace D3D10Tutorial02_WinFormsControl +{ + /// + /// This application displays a triangle using Direct3D 10 + /// + /// http://msdn.microsoft.com/en-us/library/bb172486(VS.85).aspx + /// http://msdn.microsoft.com/en-us/library/bb172487(VS.85).aspx + /// + /// Copyright (c) Microsoft Corporation. All rights reserved. + /// + public partial class TutorialWindow : Form + { + #region Fields + D3DDevice device; + SwapChain swapChain; + RenderTargetView renderTargetView; + ColorRgba backColor = new ColorRgba(0.0F, 0.125F, 0.3F, 1.0F); + + Effect effect; + EffectTechnique technique; + InputLayout vertexLayout; + D3DBuffer vertexBuffer; + bool needsResizing; + #endregion + + #region Structs + [StructLayout(LayoutKind.Sequential)] + private class SimpleVertexArray + { + // An array of 3 Vectors + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] + public Vector3F[] vertices = + { + new Vector3F() + { + X = 0.0F, + Y = 0.5F, + Z = 0.5F + }, + new Vector3F() + { + X = 0.5F, + Y = -0.5F, + Z = 0.5F + }, + new Vector3F() + { + X = -0.5F, + Y = -0.5F, + Z = 0.5F + } + }; + } + #endregion + + #region TutorialWindow() + /// + /// Initializes a new instance of the class. + /// + public TutorialWindow() + { + InitializeComponent(); + } + #endregion + + #region TutorialWindow_Load() + private void TutorialWindow_Load(object sender, EventArgs e) + { + InitDevice(); + directControl.Render = this.RenderScene; + } + #endregion + + #region directControl_SizeChanged() + private void directControl_SizeChanged(object sender, EventArgs e) + { + needsResizing = true; + } + #endregion + + #region TutorialWindow_FormClosing() + private void TutorialWindow_FormClosing(object sender, FormClosingEventArgs e) + { + directControl.Render = null; + device.ClearState(); + } + #endregion + + #region InitDevice() + /// + /// Create Direct3D device and swap chain + /// + protected void InitDevice() + { + device = D3DDevice.CreateDeviceAndSwapChain(directControl.Handle); + swapChain = device.SwapChain; + + SetViews(); + + // Create the effect + using (FileStream effectStream = File.OpenRead("Tutorial02.fxo")) + { + effect = device.CreateEffectFromCompiledBinary(new BinaryReader(effectStream)); + } + + // Obtain the technique + technique = effect.GetTechniqueByName("Render"); + + // Define the input layout + InputElementDescription[] layout = + { + new InputElementDescription() + { + SemanticName = "POSITION", + SemanticIndex = 0, + Format = Format.R32G32B32Float, + InputSlot = 0, + AlignedByteOffset = 0, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0 + } + }; + + PassDescription passDesc = technique.GetPassByIndex(0).Description; + + vertexLayout = device.CreateInputLayout( + layout, + passDesc.InputAssemblerInputSignature, + passDesc.InputAssemblerInputSignatureSize); + + device.IA.InputLayout = vertexLayout; + + SimpleVertexArray vertex = new SimpleVertexArray(); + + BufferDescription bd = new BufferDescription() + { + Usage = Usage.Default, + ByteWidth = (uint)Marshal.SizeOf(vertex), + BindingOptions = BindingOptions.VertexBuffer, + CpuAccessOptions = CpuAccessOptions.None, + MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + }; + + IntPtr vertexData = Marshal.AllocCoTaskMem(Marshal.SizeOf(vertex)); + Marshal.StructureToPtr(vertex, vertexData, false); + + SubresourceData InitData = new SubresourceData() + { + SystemMemory = vertexData, + SystemMemoryPitch = 0, + SystemMemorySlicePitch = 0 + }; + + //D3DBuffer buffer = null; + vertexBuffer = device.CreateBuffer(bd, InitData); + + // Set vertex buffer + uint stride = (uint)Marshal.SizeOf(typeof(Vector3F)); + uint offset = 0; + device.IA.SetVertexBuffers(0, new Collection() + { + vertexBuffer + }, + new uint[] { stride }, new uint[] { offset }); + + // Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList; + Marshal.FreeCoTaskMem(vertexData); + } + #endregion + + #region SetViews() + private void SetViews() + { + // Create a render target view + using (Texture2D pBuffer = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView(pBuffer); + } + + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { renderTargetView }, null); + + // Setup the viewport + Viewport vp = new Viewport() + { + Width = (uint)directControl.ClientSize.Width, + Height = (uint)directControl.ClientSize.Height, + MinDepth = 0.0f, + MaxDepth = 1.0f, + TopLeftX = 0, + TopLeftY = 0 + }; + + device.RS.Viewports = new Viewport[] { vp }; + } + #endregion + + #region RenderScene() + /// + /// Render the frame + /// + protected void RenderScene() + { + if (needsResizing) + { + needsResizing = false; + renderTargetView.Dispose(); + SwapChainDescription sd = swapChain.Description; + swapChain.ResizeBuffers(sd.BufferCount, (uint)directControl.ClientSize.Width, (uint)directControl.ClientSize.Height, sd.BufferDescription.Format, sd.Options); + SetViews(); + } + // Just clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor); + + TechniqueDescription techDesc = technique.Description; + + for (uint p = 0; p < techDesc.Passes; ++p) + { + technique.GetPassByIndex(p).Apply(); + device.Draw(3, 0); + } + + swapChain.Present(0, PresentOptions.None); + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/TutorialWindow.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/TutorialWindow.resx new file mode 100644 index 00000000..0dd393c3 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/TutorialWindow.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAAABABoBgAAlgAAACAgEAAAAAQA6AIAAP4GAAAQEBAAAAAEACgBAADmCQAAMDAAAAAA + CACoDgAADgsAACAgAAAAAAgAqAgAALYZAAAQEAAAAAAIAGgFAABeIgAAMDAAAAAAIACoJQAAxicAACAg + AAAAACAAqBAAAG5NAAAQEAAAAAAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAAAA + AAD//wAA////AACAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMy2t7a2bMzMzMzMzMzMzMzMzMzMzMzMu7a3tnd2d2ZszMzMzMzMzMzMzMzMzMy7t7tr + a2dnZmZmbMzMzMzMzMzMzMzMzLu7e2tnZnZmZmZmZmzMzMzMzMzMzMzMy7u3u7e2tmdmZmZmZmbMzMzM + zMzMzMzMt7e7u3tra2Z2ZmZmZmZszMzMzMzMzMzLu7u7u7u7d7Z2ZmZmZmZmzMzMzMzMzMx7O7u7s3N7 + trd2tmZmZuZmbMzMzMzMzMu7u7uzNye7e2trZmd3ZmZmZszMzMzMzLO7u7MzqmZ3t7Z3ZrdyZmbmZmzM + zMzMy7u7s7MKqqZre2t2t3AqpmZmZmbMzMzMx7OzuzIqqqpnt7a3ZzIqamZm5mbMzMzMO7u7syKqqqpm + e3trYzKqqmZmZmZszMzMu7OzMiqqqqpqe7a2syKqqmpmZmZszMzLszszIiqqqqqmd7t7cCqqqqamZmZm + zMzHu7swAiKqqqqqZ3u3MCqqqqpqZmZmzMzLMzMzACIqKqqqZ7t7Aqqqqqqqd2ZmzMzLO7szMAIiqqqq + anszIqqqqqoid2ZmzMxzszOzMwAiIqqqpmMyKqqqqqIie2ZnbMy7O7OzszAAIiqqqqd6qqqqoiIzd2Zm + bMw3szs7OzMwAiKqqqqqqqqqIDN3tmZ2bMy7M7OzuzszACKqqqqqqqoiA3trZrZmvMxzOzOzs7O7MAIq + qqqqqqcjN7a3t2ZnfMw7M7Ozs7s7MwIqqqqqqqoje3t3a3d2fMx7OzM7O7O7MzAqqqqqqqpnt7e7trZ3 + fMy3MzOzuzuzswKqqqqqqqqme7tra2dnfMx7M7M7M7O7MwKqqqqqqqpqZ7u7u7a2vMx3szszs7OzMqqq + qqqqqqqmpnu7t7tnfMzLczM7OzswKqqqqqoqKqqqpme7u7e7zMzHOzOzMzMCqqqqqqIiKqqqpqZ7u7e2 + zMzLc7MzMzKqqqqqqiIAIiqqqmpnu7t7zMzMtzMzMCKqqqqqqgMwACIqqqqne7e8zMzMN7MzAiqqqqqq + ojMzACIqqqqnO3u8zMzMxzszACKqqqqqIDszMwIiqqIjO7vMzMzMy3MzAAIiqqqqA7O7MwAiIqIDu3vM + zMzMzHtzMwAioqqiM7s7szMCIiAzu7zMzMzMzMe3MwAiKqojM7O7O7MAIgO7u8zMzMzMzMx7MzAAIqID + O7OzuzMwAzO7vMzMzMzMzMzHdzMAAiIzszuzs7MzM7t7zMzMzMzMzMzMtzcwACMzOzM7OzuzM3u8zMzM + zMzMzMzMx7s3MDMzs7Ozs7Ozu7vMzMzMzMzMzMzMzHdzMzOzMzs7Ozs7t7zMzMzMzMzMzMzMzMy3d7cz + s7M7O3u3vMzMzMzMzMzMzMzMzMzMt3t7e3t7e7e8zMzMzMzMzMzMzMzMzMzMzMe3t7e3t8zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz///////8AAP///////wAA///AH///AAD//AAB//8AAP/w + AAB//wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/AAD8AAAAAf8AAPgAAAAA/wAA8AAAAAB/ + AADgAAAAAD8AAOAAAAAAPwAAwAAAAAAfAADAAAAAAB8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAIAA + AAAADwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAADAAAAAAB8AAMAA + AAAAHwAA4AAAAAA/AADgAAAAAD8AAPAAAAAAfwAA+AAAAAD/AAD8AAAAAf8AAP4AAAAD/wAA/wAAAAf/ + AAD/gAAAD/8AAP/AAAAf/wAA//AAAH//AAD//AAB//8AAP//gA///wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgIAAgAAAAIAAgACAgAAAwMDAAICA + gAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzLe2tmbMzMzMzMzMzMzMy3dnZ2ZmZmzMzMzMzMzMzHu7t3ZmZmZmzMzMzMzMzHu7u7 + t7a2ZmZmbMzMzMzMu7uzd3trZmZ2ZmbMzMzMy7uzMqZ7tnd3dmZmbMzMzMuzMCqma2t2cKpmZmzMzMy7 + MyKqqqe2tzKqpmZmzMzLszIqqqpmu3cKqqamZmzMyzMCIqqqpndzKqqqZmZszMszACIqqqprMKqqqqp2 + bMxzszACIiqqpzKqqqoidmbMOzszACIqqqqqqqqiA3ZmzLs7MzAAIqqqqqqiA3dmZsxzM7MzMAKqqqqq + I3trdmfMu7M7OzMAqqqqqqO3trdmzHMzs7MzAqqqqqqqe3t3a8x7OzszMqqqqqqqpme7trbMtzMzMCqq + qqqiqqqmZ7trzMtzMwKqqqqiAiKqqqZ7fMzHszAqqqqqoAAiqqqiu7zMw3MwIiqqqiMwAiqqI7e8zMy3 + MAIiqqIzMwIiIjO7zMzMx3MAIiogM7MAIiM7vMzMzMNzcAIiIzszMAIDu7zMzMzMdzMwIgM7OzMzO3vM + zMzMzMt3MwMzs7OzM7u8zMzMzMzMx3c3Mzs7O7e8zMzMzMzMzMw3e3t7e7e7zMzMzMzMzMzMzMN7e3t8 + zMzMzMzM////////////4B///wAD//4AAf/4AAB/8AAAP+AAAB/gAAAfwAAAD4AAAAeAAAAHgAAABwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AAAAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gA + AH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzM + zMzMzMzMzMzLZmbMzMzMy7e2ZmbMzMyzB3dndmzMyzKqe3CmZszDCqpnMqpmzLMyqqcKqqZsOzAqqqqi + dmwzszCqqie2bDMzMqqqZ7tsMzAqqqqme7zDAqqiAqqrzMcyqqMwojvMzHMqCzAjvMzMxzIzMzvMzMzM + xze7zMzM//+zMPg/a2vgD6pmwAfMzIADMyKAA6e2AAGqpgABzMwAATIqAAFmuwABqqaAA2zMgAMCIsAH + pnfgD6qq+D9szCgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWAAAA0QAAAM4A + AADNAAAAywAAAMgAAADGAAAAxQAAAMIAAADBAAAAvgAAALwAAAC6AAAAtwAAALUAAACzAAAAsAAAAK0A + AACpAAAApgAAAJwAAABzAAAAZwAAADwAAACiAQEAkgEBAN0CAgDAAgIAvQICAH0BAQBWAQEAzgMDAMMD + AwC/AwMAsAMDALQEBACGAwMA5wYGACUBAQDTBgYAxQYGAKQFBQDXBwcAuQcHAMAICABIAwMAMgICALQI + CACtCAgAoQcHAMcKCgD5Dg4AvgsLAOEODgDMDAwAmgoKANIPDwDFEREArQ8PAPoXFwDpFxcApBERANwY + GADJGRkA/iEhALcYGAD0IyMA1B4eAOQiIgBjDw8A7SUlABoEBAD9KioAlxkZAAwCAgClHR0A9SwsADMJ + CQDXJycAuSIiAMYoKAD+NDQAiRwcAPQ0NADnNDQA2jIyAP47OwCqKSkA9j09AP5CQgD+RkYA9ENDAP9J + SQC6NjYAyzw8AGYfHwA1EBAA/05OAPhNTQDlR0cA/1FRAKg3NwD/VVUAu0BAAEkZGQCKMDAA/1paAPZX + VwD2WloA/15eAMhLSwC3RUUA/2FhAG4qKgC/TEwA/2ZmALFHRwDoX18A9mZmALVLSwD/bGwAtk5OAMxZ + WQDmZWUAr01NAKBHRwD/cnIAt1JSADMXFwD2c3MA/3h4ACkUFAD/fX0A/4GBAOl3dwD/hoYA+oODAPaG + hgD/jY0AqF1dAGY5OQD/k5MA5oaGAMVzcwD/mZkA8JOTAP+engD/oqIA+6GhAKNpaQCEVVUA/6amAMuF + hQD/rKwA8KamAP+ysgD0q6sA/7a2APuzswD/ubkA+bW1AP++vgDgqakA/8LCAP/FxQD/yckA6Lm5AP/O + zgCOc3MA/M3NAOzCwgDDq6sAMy0tAAD+/gAA/f0AAPv7AAD5+QAA9/cAAPT0AADx8QAA7+8AAO3tAADp + 6QAA5uYAAOTkAADg4AAA398AANraAADT0wAAyckAAI6OAAB9fQABzs4AAcbGAAHCwgABuroAAbS0AAGt + rQABpKQAAZubAAGHhwAC+fkAAvf3AAF1dQAD//8AA/v7AAX19QAG//8ABubmAAJSUgAJ//8ADP//AAnA + wAAIj48ABmhoAAMxMQAQ8/MAEf7+AAqBgQAGSUkAFv7+AA+qqgAW6+sADH5+AAQoKAAWysoAHf7+ABzX + 1wAo/v4AJujoADT//wAt19cAMuLiADf29gA7/v4ABhgYAEf9/QBU/v4AUPDwAD2wsAAYREQAFj09ABAs + LABO1NQAZPDwAGr29gB29fUAPHx8AC9dXQBarq4Ac93dAIC+vgBDYmIAltTUAIeYmAAAAAAA//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////XGRqcHh+hIeK//// + //////////////////////////////////////////9ISFZaZGpzfoKEh4qNjZCSk/////////////// + ////////////////////////QEBIVlxmc36Eh4qNkJKSk5eXl5mZ//////////////////////////// + /////0xCSEhRWWFteIKHipCSk5mZm5ubm5ubm5v/////////////////////////////QkJMTFFRVllk + anN+hIqNkpmbnaGhoaGfn52d//////////////////////////9GRkxMTEhASFNYWmRteIKHjZKXm6Gj + pKSko6Gfn////////////////////////0ZGRkJCOzszPENVU1lhanN+hYqQl5uho6WlpaSjoZ////// + ////////////////REREPDwzMzMqPWllVVZcZnB4goeKkJecoqaqqaelpKGf//////////////////9E + Pjw8NSUlJRAe/PmoXlhaZG1zfoSHipGYqKirpqmnpaShn////////////////04+PjUlJSUBJKzU5e77 + lWNZYWpzeIKFiY+W+O/7q6qpp6WjoZ3/////////////TkM+NRoaGgQV8MCx4uz0+3JbYWZweH6Ehous + 397u/auqqaeloZ+b////////////Qz44KhoaBB3xw7Kt3Obt+otjWmRqc3iBeozww8rq9f2rqqmnpJ+b + //////////9OQzgnAAAEJPDCtLCt2eTs9P5uW1xkanN7fYDHubDk7fb9q6qppaGdm/////////9DPzYf + AgsW8MS6s7Ct0uLm7fqVY1lcZmx6cfLDtq/c5u32/auqpKOdmf///////1A/OSgHEhbxvsO8t7KuzNnk + 7PT+blhZXGNlgMu8tK/S4urt9v2rpqGfmZf//////1A/MigMGRfr1sfEwLizr8/i5u37i1RRWF5f8cK3 + sq6t0+Lm7PT7q6afmZP//////1A/LBsNGR5H68vHxcG7tbDT5Oz0/mdMVFdg1ru0sK6urrDO3uj5/qKg + mZL//////085LBsKESQeR+vWvsbDvLax2ebt+n1QT0Xww7WxsLCytLe7wd33qKKemZL/////UE9BKxwJ + Cg8ZHiZK27/HxMC3sOLq7v5pX/C9tbGwsbO3u8HH1vGMj5qbmZKN////UE9BKwwKCAcLFBUXSuDWvsXA + ts3k6vPv7+Gyrq+wsrfAxcjxgIyLjpSZl5CK////UE9BIw0LCQcFBxAkHiZK277Eu7PT5OTk4tnPra2v + tsDI8oBxfXqGiI2Tk42H////XU86Ig8NCggFAgIHExUXStHHvbev09zc2dPSz9LQxNaDX2VudXZ+goeQ + ko2E////XU86IhAODAoHBAEAAQ0dLkrLw7myrdLT0s/S09nh+GhpXmNrbXBzeISKkIqC////XU86EREP + DQsIBQIBAAARFibXxrmyrq3MzMzP2eLn92leW1xhZGZqbX6Fiod+////Z1c6EhIRDwwKBwQBAAAEGRfg + xrexrq2tra3P2eLp85ZeWFlZWlxcZHCCh4V4////b109KRMREA4MCQYDAQADGS7WwLOwra2trq2t0+Lm + 7vuLVFFRVlZWWWZ4hYJz////b11LMRMTERANCwgFAgIOHtvBtbGvra6vsbGwrtnk7PX7ckhISEhRUVpw + fnhw////b2dXPSkTEhEPDQoICRIX38CzsK+urrCztri3tLDc5u31+15AQEBASFZmc3Bw/////29XPTEY + ExIRDw0OGWDFt7Kvrq2tsLO6vcK9u7ax3Obt9ftvOzM7O1Fcamb//////29lSz0UGBMSERgW8MKzr6+t + ra2usrvG1svHw8C4sdzm7fX6lTwzM0hWYWT//////29vVz0xFBQUHS3WvLKvrq2tra2xt8bxSuvRyMW9 + uLHc5uzt+qhDM0BRWWT///////93ZUs3GR0eg9bBt7Kvra2tra+zvfEXLSZK28jFvbix2eTq7vlpPkhR + Vv////////90b1dJJB4m0cfCu7Wwra2trrG61S0UFBUuStvIxb24ssnY4/dSPkxWWv//////////d2VX + Uh4m4L/Gwru1sK2usLXFYBIEBREVF0rRyMW9urfA2i06PExW////////////dHdlSUUuSuC/xsK7tbCw + tL3xGQUBAQMQHRdK277FwcLfTRk+RlNi/////////////3d0ZVJFLkrgy8bCu7W0u9YWCgQCAQEDDh0X + StG+x9ZNJDg8TFj///////////////95dGVSRS5K17/Gwru7xhcTCQcFBAMBAw4VLuvW1k0kNjxGU/// + ////////////////f3RlUkUuSte/xsPF8R0OCwoIBwUEAwUTFi5HTR0yPkRU//////////////////// + /393ZVJFTUrXy77bHhMPDQwKCQgHBQQJFBUWJDQ+RFT///////////////////////9/eWVpX2BH8tsX + GRIRDw4NCwoJBwYFITA6OUNEVP//////////////////////////eXl0aXFoYC0dGBMSERAPDQwLCiAo + Mjk/Q05V/////////////////////////////3d/fH1pcVJLPTowMDAvLys0NDk/P05OVVX///////// + ////////////////////////d398dGVlV1dPQUFBQU9PUFBQUFVV//////////////////////////// + //////////90eX95b2dnZ11dXV5eXl5eXv////////////////////////////////////////////9v + cnJycnJubm5eXv////////////////////////////////////////////////////////////////// + ////////////////////////////////AAD///////8AAP//wB///wAA//wAAf//AAD/8AAAf/8AAP/A + AAAf/wAA/4AAAA//AAD/AAAAB/8AAP4AAAAD/wAA/AAAAAH/AAD4AAAAAP8AAPAAAAAAfwAA4AAAAAA/ + AADgAAAAAD8AAMAAAAAAHwAAwAAAAAAfAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAAAA + AAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAgAAAAAAPAACAAAAAAA8AAIAAAAAADwAAwAAAAAAfAADAAAAAAB8AAOAA + AAAAPwAA4AAAAAA/AADwAAAAAH8AAPgAAAAA/wAA/AAAAAH/AAD+AAAAA/8AAP8AAAAH/wAA/4AAAA// + AAD/wAAAH/8AAP/wAAB//wAA//wAAf//AAD//4AP//8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAC9AAAAuwAAALkAAAC2AAAAswAAALEAAAClAAAAowAAAKEA + AACcAAAAkQAAAG0AAABpAAAAZAAAAF0AAABYAAAANgAAADAAAAAqAAAAIgAAABMAAAAHAAAAhgEBAL8C + AgC8AgIAqAICAKECAgBPAQEAQgEBALsDAwCyAwMArQMDAH0CAgC3BAQAiwMDALMFBQC8BwcA3AkJAKUH + BwBVBAQAzgsLALwKCgCqCQkAOwMDAOgNDQAPAQEAXQcHAJcMDACgDg4AvBISAPkaGgDNFhYAWwoKAOcb + GwC2FhYA2hwcAKsXFwDDGxsAuxwcALUbGwDKICAA8ycnAJMZGQBFDAwA0yYmAOUtLQC2JCQA/TQ0APAy + MgDGLCwA+Do6AKwoKAD/PDwA1TMzAP8+PgDpOjoA/0REAPBAQADIOTkAwDc3AP9KSgC3NTUATRcXANdC + QgD/T08A+E1NAM1AQAAqDQ0A5khIACYMDADxTU0Avj09AKw5OQCVMTEA/1VVAMFCQgC6QUEAsT4+AP9b + WwDISUkAvkZGALFCQgBpJycAzU1NAAgDAwD/YmIANBQUAOhcXAD/ZmYAu0tLAPhnZwD/a2sAs0xMALxR + UQD/cnIAkUFBAHk2NgCkS0sA/3Z2AJtISAC2VVUAzmNjAP98fADodXUASyYmAP+EhAD2gYEAqFlZABYM + DAD/jIwAm1hYAGc7OwD+k5MAqmNjANJ9fQD/mpoA/56eAP+iogD/qKgA/6qqAN6WlgD/ra0A+6qqAP+w + sABzUVEA/7i4AOurqwD/u7sA/729APK3twCFZWUA/8PDAL6RkQD/ysoA16urAPXExAD3ysoAwqamAMyx + sQAhHR0AKScnAB0cHAAA//8AAP39AAD7+wAA+PgAAPb2AAD19QAA8/MAAPHxAADv7wAA7e0AAOrqAADm + 5gAA5OQAAOPjAADh4QAA398AAN3dAADY2AAA19cAAM3NAADLywAAx8cAAMPDAADBwQAAtbUAALCwAACt + rQAAqakAAKamAACjowAAlZUAAJKSAABmZgAAZGQAAY2NAAGCggACvLwAA/7+AAPs7AADwsIAApycAAT8 + /AAEtLQABK6uAAJcXAAEl5cAB/n5AAf09AAG2NgABaKiAASRkQADbGwACPX1AAR4eAAJ/v4ADv//AAZm + ZgAQ+voACpycABT//wALiooAFfT0ABz9/QAe6OgAI/39AAk6OgAs/f0ALu7uACKurgAz/f0AHo+PADz8 + /AA86+sAPNXVAEn9/QBG7+8AInBwAFL+/gA2oaEAVPX1AF/9/QAECgoAYOTkAFzT0wBr8fEAaM7OAGO8 + vABx1dUAgN7eAHzIyACQ5eUAfpeXAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////9janB3foKFiP////////////// + /////////////0lJUWNzfoWIiouMjI6Q//////////////////////9ERERJUWNwe4KJjpKUlZSS//// + //////////////9FPj4zMzZKTlVqc36IjJSYmpiVlP//////////////QjY2LSkwdf5XTV9te4KFjZmb + nJqYlP///////////0I2LSYfHOfr9YBOX213f4eR8fienZqYlP//////////OCYZIWvH3Ojz/GhVanN8 + g6HT6vufnZqV/////////zgpGx3ftqrZ5fD3hltjb3p91a3j8/2fnZiS//////9BNCAc1ry3r6bh6vP8 + aF9sdKK3q9rq8/2fnJKQ/////z0yIxPPwby3rqbj7feDWWR90LCqpOHq8vuelo7/////PSoXERbDwr24 + sajl8PliXqK0rKmoqcni7P6bjP///0Y6KgkNExbExb+6s9Lo7pF9yqioqa2zts3pl5OMif//RjolBAoO + ExbPxsC5sNzl5uLZo6WpsLrGoISHj4uF//9GOyIDBAoMERX02Lu0qdrh3trZzK7Uon10en+JioL//1A8 + JAQCAwcXDxMWxbWrpNna2t7g71NeaGxvd4KIfv//XEMgBgQBAAMJDRTktaqlo8jZ3uPsdVRWX19qe4V3 + //9lQysgBgMBAAkQgb2tqKamqKjR4er2dk5LTVVwfnP//2VSORogBgYLHd20q6emp6ywsq7S5fD6gFdF + SWNzbf//YWE5JwcHIRLOrKempaars7rHuLLX6PD3/GZFUWpj////bkgxFxBay7OrpqSkqLDL5Ma/urHR + 5e3y+UZLVf////9uYj8o5MW8tq+opaaruIEUFtbAuK+o4OLxQ0RL/////2JxXlMu1sG8tq+pqa/fEA0T + 9Ma+uLS01DU4RE3//////3F2Z1gWw8G8t7Kx1B0ICA8Vz8K+u9UdMj5H/////////3l4Z1hpw8G9usdY + CwACFxEWw8LYLCs2Rf//////////Ynl4Z1hpw8LA2A4FAAAHDBMu5CwnOEVO////////////Znl4Z2uB + z9sRCwQBAAIKDBwvMThCTP//////////////Znl2dX1rQCEaHyIZGB4rMTxBQkz///////////////// + /3GAeHReSDw3NzI6Oj1GSkr//////////////////////11xeXJuZWBcT1dXV0pK//////////////// + ////////////XGVlZGRkV0//////////////////////////////4B///wAD//4AAf/4AAB/8AAAP+AA + AB/gAAAfwAAAD4AAAAeAAAAHgAAABwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AA + AAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gAAH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvAAAALsAAAC6AAAAsgAAALEAAACwAAAArQAAAKcAAACfAAAAkwAAAH4A + AABtAAAAPAAAAKgEBAChBQUAYAMDADsCAgBVBAQAOwMDAKIMDAC0Dg4Avg8PANEWFgBoCwsA5xoaALsV + FQDFGBgAsxYWADwICACoFxcAgBISAPYuLgDfKSkA4y0tAJwfHwCyJCQAzy0tAOAxMQDzNzcA8zk5APA5 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAJGRkYLISEhHxwcHEB+FxeKtB4exd8o + KOr/ODj//0VF//9QUP//W1v//2Zm//9wcP//eHj//39///+Ghv//jIz//5GR//+Wlv//mZn/2YaG7aNo + aNJZOjquAAAAfwAAAF8AAAA7AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BZmZmBT09PRUwMDA1jB4eiMQa + Gs/0Hh75/ysr//86Ov//SEj//1ZW//9lZf//cXH//319//+Ghv//jo7//5OT//+Zmf//nZ3//6Cg//+k + pP//pqb//6en//+oqP/0oqL5tHl53F9BQbMAAAB9AAAAVgAAAC0AAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wGSkpIHSkpKH3Qp + KV66Hx++6yEh9fsmJv/9Li7//zU1//9DQ///T0///11d//9tbf//enr//4aG//+Pj///l5f//56e//+k + pP//qqr//66u//+wsP//s7P//7Oz//+zs///s7P//7Oz/+6np/ahcXHUNCYmngICAmwAAAA8AAAAFwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////AoCA + gAhEREQimyQkhNAgINz0JSX/9y0t//kvL//8MjL//zQ0//86Ov//RET//1BQ//9aWv//aGj//3R0//9/ + f///ior//5aW//+goP//qqr//7Ky//+3t///vLz//76+//++vv//vb3//7u7//+5uf//t7f/y5GR52VJ + SbcCAgJ5BAQERwAAABoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8DqqqqCU5OTiSsJSWW3CIi7O8lJf/yKir/9Ssr//cqKv/7KCj//iUl//0nJ//4MTH/9zk5//1F + Rf//UVH//19f//9ra///eHj//4WF//+Skv//np7//6mp//+zs///vLz//8LC///Fxf//xsb//8XF///C + wv//vr7//7u7/+KkpPKAXFzDAgICgAAAAEoAAAAaAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wOzs7MKWlpaIrAkJJrfISHz7CUl/+4kJP/wIiL/9B4e//YaGv/5FRX/+BER/+sS + Ev/WICD/3C0t//Q1Nf/+QkL//05O//9bW///Z2f//3V1//+Bgf//jY3//5ub//+mpv//srL//7y8//7D + w//9yMj//svL///Kyv//x8f//8LC//++vv/ura33iGNjxwQEBIAAAABGAAAAFwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////A9XV1QZsbGwariYmkNseHvPnISH/6SAg/+saGv/tFRX/8Q8P//UM + DP/xCQn/1QcH/6EPD/+KLS3/qzk5/983N//7PT3//0lJ//9WVv//YmL//2xs//94eP//hIT//4+P//+a + mv/9paX/9Kur/+Wrq//js7P/7sLC//vMzP/+zs7//8nJ///ExP//v7//7q2t94FeXsMCAgJ5AAAAPAAA + ABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Bo6OjhKoLCxz0iAg6uIbG//kGhr/5hUV/+gP + D//sCQn/7QQE/+MEBP+vAQH/WAcH/0NiYv9anJz/iG5u/8dAQP/1PT3//0ZG//9SUv//Xl7//2ho//9z + c///fHz//4aG//2QkP/wk5P/y4WF/5Rqav+QgYH/u56e/+a+vv/7zs7//8/P///Ly///xMT//76+/+Ol + pfJnSkq3AgICbAAAAC0AAAAIAAAAAAAAAAAAAAAAAAAAAP///wH///8Ev7+/DJg8PEPGISHU3Rsb/98V + Ff/hDg7/4wkJ/+YFBf/kAwP/0AEB/4MBAf8qNTX/CcDA/ybo6P9L6ur/ccDA/6NkZP/hQkL//END//9P + T///Wlr//2Rk//9ubv//eXn//4KC//aGhv/Penr/f09P/zdXV/8/u7v/esXF/7mqqv/pwcH//M7O///P + z///ysr//8PD//+9vf/LkpLnNicnngMDA1cAAAAbAAAAAwAAAAAAAAAAAAAAAP///wL///8HgICAFrch + IajZHR3/2hYW/9sNDf/dBgb/4AIC/98CAv/LAQH/cAAA/x5AQP8Dzc3/APf3/x7///9C/f3/Y/Hx/4S5 + uf/DTk7/9END//5MTP//VVX//2Bg//9qav//c3P//Hx8/+d6ev+eWVn/PCQk/w9/f/8X5ub/VvLy/4vZ + 2f/CsLD/68PD//zOzv//zs7//8jI///AwP//uLj/oXJy1AYGBn8AAAA7AAAACwAAAAAAAAAAAAAAAP// + /wTMzMwKqykpYc0eHvHVFhb/1g4O/9gGBv/aAgL/3AAA/8sAAP9+AAD/GkBA/wO8vP8A8/P/AP7+/xb/ + //81////Vf///3Lh4f+oXl7/5kRE//xGRv//UFD//1pa//9kZP//bW3/9nNz/8lmZv9kNjb/EUdH/wK5 + uf8C9/f/Ov7+/2v39/+X1NT/xrCw/+zDw//9zs7//8zM///Fxf//u7v/7qio92NGRrQDAwNgAAAAHgAA + AAIAAAAAAAAAAP///wZxcXESuyEht9EaGv/RERH/0wYG/9QBAf/XAQH/ywAA/4kAAP8YRkb/AsPD/wDv + 7/8A+fn/AP7+/xD///8o////Rv///2Px8f+JmZn/x01N//RDQ///Skr//1NT//9cXP/8ZWX/5mVl/5tJ + Sf8vGBj/A5ub/wHh4f8A+fn/Jf///0////91+Pj/mdXV/8awsP/swsL//MvL///IyP//v7///7W1/7d+ + ft0GBgaBAAAAOgAAAAoAAAAAAAAAAP///weqJiZVyR0d9MwVFf/ODAz/zgMD/84AAP+7AAD/awAA/xdD + Q/8CsrL/AN/f/wDw8P8A+fn/AP7+/wn///8c////Nv///1X9/f9y39//o2pq/+NDQ//8Q0P//0tL//9U + VP/2Wlr/y1JS/2cuLv8TKyv/ALy8/wDp6f8A+vr/FP///zX///9X////efPz/5vW1v/JsLD/7sLC//zH + x///wcH//7a2//SmpvldPz+vAwMDVwAAABYAAAAAAAAAALOzswq3IyOfyhwc/8kREf/JBwf/xQEB/6kA + AP9hAAD/Ez4+/wKNjf8AuLj/ANHR/wDm5v8A9PT/APz8/wL///8R////KP///0X///9j8vL/ipWV/8xH + R//2PDz//0FB//1JSf/pTEz/oTo6/zQVFf8FeHj/ANbW/wDv7/8A+/v/CP///x////84////V////3X1 + 9f+Zzs7/x6ys/+u9vf/8wMD//ri4//+srP+mbW3TBwcHcQYGBikAAAADAAAAAIVHRxm9ISHaxhkZ/8UM + DP/EBQX/ugAA/40AAP9BAAD/DB0d/wFqav8AnJz/ALa2/wDPz/8A4+P/APLy/wD7+/8G////G////zb/ + //9V+fn/dsLC/6lcXP/kOzv//Tc3//c+Pv/MOTn/aCEh/xI9Pf8Bv7//AObm/wD09P8A/Pz/Af///w3/ + //8a/v7/L/39/0n5+f9o7u7/j8TE/8Ojo//tt7f//Li4//+urv/bjIztFxISiwQEBD4AAAAKAAAAAKgk + JFXFIyP/wxcX/8EJCf/AAgL/twAA/5QAAP9UAAD/GgAA/wMfH/8AcnL/AJaW/wCvr/8Ax8f/ANzc/wDs + 7P8A+Pj/C/7+/yb///9G/f3/Ze3t/4WoqP/DQUH/7i8v/+cwMP+hJyf/OA8P/wZubv8A29v/AO/v/wD4 + +P8A/Pz/AP39/wD8/P8A+fn/BfX1/xXv7/8y4uL/XLq6/5qTk//drKz/+bW1//+trf//n5//ZD8/sQYG + BlEAAAASAAAAALIlJYnCISH/vhQU/74HB/+/AgL/vgAA/60AAP+FAAD/TwAA/xsAAP8DFxf/AGdn/wCM + jP8Apqb/AL29/wDT0/8A6Oj/APf3/xP+/v8z////Uv39/23c3P+eTk7/xyws/7YjI/9dEhL/E0RE/wG4 + uP8A7e3/APb2/wD5+f8A+fn/APX1/wDv7/8A5ub/ANra/wPGxv8Pqqr/N319/41sbP/epKT/+7Oz//+s + rP//np7/mFtbygoKCmIAAAAZAAAAALcoKLG/ISH/uxMT/7sHB/+9AgL/wAAA/78AAP+yAAD/jwAA/1sA + AP8nAAD/CAIC/wFHR/8Afn7/AJub/wC0tP8Az8//AObm/wD5+f8d/v7/Pf///1X09P9wjo7/gjs7/2Qg + IP8gSkr/AsvL/wDt7f8A9/f/APj4/wD39/8A8fH/AOfn/wDZ2f8Ax8f/AZub/whfX/8fOjr/Xjw8/7h5 + ef/wpqb//rGx//+qqv//nZ3/vG1t3RAQEG8AAAAgAAAAALcpKdG8IiL/uRMT/7gGBv+5AQH/vgAA/8MA + AP/EAAD/uwAA/54AAP9uAAD/PAAA/xIAAP8CKyv/AGVl/wCPj/8Ar6//AM/P/wDp6f8D+/v/Jf7+/z39 + /f9I3d3/R7Cw/zGmpv8Sy8v/APX1/wD8/P8A+/v/APn5/wDz8/8A5+f/ANDQ/wCtrf8DhIT/Ej09/zYb + G/9vODj/smFh/+aGhv/7oaH//6ur//+np///mpr/13Z26w8PD3gAAAAlAAAAALksLOe6IyP/thIS/7QE + BP+2AQH/uwAA/8AAAP/FAAD/yQAA/8UAAP+xAAD/iQAA/1cAAP8pAAD/CgAA/wFHR/8Ajo7/ALa2/wDY + 2P8A8PD/DP39/yP///8u/f3/LPj4/yD4+P8R/f3/Bf///wD///8A////APv7/wDq6v8AzMz/BISE/xIt + Lf8xFRX/ZCsr/55HR//MX1//63Nz//qDg///lpb//6Oj//+jo///lpb/63t79RQUFIAGBgYpAAAAALsx + Mfe3IiL/shAQ/7EDA/+zAQH/uAAA/70AAP/CAAD/yAAA/84AAP/OAAD/xAAA/6YAAP91AAD/OQAA/wwA + AP8BUVH/AJub/wDIyP8A5+f/APr6/w3///8Y////Gf///xP///8N////CP///wf///8I////Bubm/wKx + sf8MYWH/KxUV/2IiIv+bOjr/yU9P/+hfX//2Zmb//HBw//94eP//iYn//5mZ//+dnf//kpL/+Hx8+xUV + FYQGBgYrAAAAALs0NP60IiL/rw4O/64DA/+wAAD/tQAA/7oAAP+/AAD/xQAA/8sAAP/RAAD/1QAA/9IA + AP+2AAD/egAA/zEAAP8HDAz/AHd3/wC6uv8A4OD/APX1/wD///8J////C////wr///8H////CP///w3/ + //8T/f3/GsnJ/yZiYv9KGRn/iSgo/8Y+Pv/nTU3/9ldX//xdXf//YGD//2Rk//9tbf//fX3//46O//+X + l///jIz//nh4/xgYGIEGBgYpAAAAALo4OPezJSX/rA8P/6sCAv+tAAD/sgAA/7cAAP+8AAD/wgAA/8gA + AP/OAAD/0wAA/9gAAP/UAAD/rgAA/2gAAP8fAAD/AzU1/wChof8A4OD/APT0/wD9/f8B////A////wP/ + //8E////B////xD///8d/f3/LdfX/0h9ff+FMDD/zTc3//NDQ//9S0v//09P//9SUv//VVX//1hY//9e + Xv//cHD//4OD//+QkP//hob/+G5u/BkZGXsHBwcmAAAAALg+PuizKyv/qhIS/6gCAv+qAAD/rgAA/7MA + AP+5AAD/vgAA/8QAAP/KAAD/0AAA/9YAAP/aAAD/ygAA/5MAAP86AAD/CCUl/wCgoP8A5eX/APb2/wD9 + /f8A////AP///wD///8B////Bv///xD///8h////N/b2/1PKyv+IWlr/zz4+//k9Pf//QED//0ND//9G + Rv//SEj//0pK//9QUP//YmL//3h4//+IiP//gID/7GJi9RsbG3IICAghAAAAALZBQdOzMDD/qRUV/6UE + BP+nAQH/qwAA/7AAAP+1AAD/ugAA/8AAAP/GAAD/zAAA/9IAAP/XAAD/zQAA/5UAAP8xAAD/BWpq/wDM + zP8A8PD/APn5/wD+/v8A/v7/AP///wD9/f8A/v7/Af7+/wv///8d////N////1Ly8v9zvr7/qVtb/+g6 + Ov//NDT//zc3//86Ov//Ozv//z4+//9CQv//VVX//2tr//+AgP//eHj/3FdX6R4eHmcKCgoaAAAAALRD + Q7S0ODj/qhwc/6QICP+lAgL/pwAA/6wAAP+xAAD/tgAA/7wAAP/CAAD/yAAA/84AAP/OAAD/tAAA/1EA + AP8PTEz/AcfH/wDt7f8A9/f/APv7/wD+/v8A/f3/APv7/wD39/8A9vb/APj4/wD8/P8R/v7/Kv///0f9 + /f9k9fX/hL+//71PT//6Kir//yoq//8rK///Li7//zAw//82Nv//R0f//2Ji//91df//bm7/xUxM2iMj + I1gAAAASAAAAALFBQYq2QED/rCcn/6QPD/+jBQX/pAAA/6gAAP+tAAD/sgAA/7cAAP+9AAD/wgAA/8EA + AP+oAAD/QQAA/wx/f/8B0ND/APHx/wD4+P8A+/v/AP39/wD9/f8A+Pj/APHx/wDp6f8A5OT/AObm/wDu + 7v8A+fn/FP7+/zH///9P////bPX1/4y6uv/OQED/+x4e//8dHf//Hx///yIi//8oKP//PDz//1VV//9m + Zv//YGD/qkJCwykpKUUAAAAKAAAAALE9PU+3R0f/rS8v/6MVFf+hCAj/oQEB/6QAAP+pAAD/rQAA/7MA + AP+3AAD/tQAA/44AAP8wDw//Bqys/wDn5/8A9fX/APr6/wD8/P8A/v7/AP7+/wD5+f8A8PD/AN/f/wDL + y/8Aw8P/AMjI/wDX1/8A6Oj/APf3/xb9/f80////Uv///2719f+Ltrb/vkZG//UVFf//EBD//xUV//8b + G///MTH//0hI//9bW///Vlb/iDw8nzU1NTBAQEAEAAAAALEzMwqzRUXZsDo6/6YfH/+gDQ3/ngEB/6EA + AP+kAAD/qQAA/6sAAP+iAAD/agAA/xtDQ/8DwsL/APDw/wD6+v8A+/v/AP7+/wD+/v8A/v7/APz8/wD0 + 9P8A29v/AaWl/wFtbf8Ac3P/AJ6e/wC3t/8Azs7/AOTk/wD39/8W/v7/Nf///1H///9p9/f/f9jY/6Rt + bf/qERH//wcH//8REf//Jyf//z4+//9OTv/jSUntSzw8ak1NTR7///8B////AQAAAACwQkKbtEVF/6kq + Kv+hFBT/nQUF/5wAAP+dAAD/mAAA/4AAAP9DAAD/D2pq/wHR0f8A8/P/APv7/wD9/f8A/v7/AP///wD/ + //8A/v7/APf3/wDl5f8CoqL/Cj8//xAFBf8HERH/AVBQ/wCHh/8Ara3/AMrK/wDk5P8A9/f/Fv7+/zH/ + //9L////Xv39/27f3/+LfHz/0Rwc//oPD///IiL//zU1//9BQf+/Pz/MRkZGSWlpaRH///8B////AQAA + AACuPT1LtktL8602Nv+kHx//mgoK/5EBAf9+AAD/UgAA/yYSEv8Jb2//AcbG/wDn5/8A9fX/APv7/wD+ + /v8A////AP///wD+/v8A+/v/APHx/wHJyf8TQUH/PAAA/0oAAP8qAAD/CgEB/wFISP8AiIj/AKur/wDI + yP8A5OT/APb2/xD9/f8n/v7/Ofv7/0bv7/9XtbX/kDQ0/94aGv/6KSn//Tc3//U4OPmVQUGWXV1dLL+/ + vwgAAAAAAAAAAAAAAAAAAAAAsUZGr7JDQ/+nLS3/mxQU/4IGBv9bAQH/JQIC/wdRUf8BmJj/AMHB/wDZ + 2f8A7Oz/APj4/wD+/v8A////AP///wD9/f8A9vb/AN/f/wiPj/9MAAD/lwAA/5sAAP9wAAD/NAAA/wsA + AP8BR0f/AImJ/wCrq/8AyMj/AOTk/wD09P8C+fn/EPPz/xzX1/81e3v/iRkZ/9wbG//3Kyv/+zg4/8w5 + OdVYWFhRi4uLFv///wQAAAAAAAAAAAAAAAAAAAAArT4+UrNLS+6uPT3/nyUl/4MQEP9VBgb/IQEB/wUh + If8Aenr/AKWl/wDCwv8A29v/AO3t/wD4+P8A/v7/AP39/wD5+f8A6+v/BKqq/zMREf+pAAD/ywAA/8gA + AP+sAAD/dwAA/zcAAP8KAAD/AVFR/wCIiP8ArKz/AMnJ/wDf3/8A5ub/Ac7O/wqBgf9JBwf/sA8P/+kd + Hf/3Ly//7TY29p9CQpR0dHQus7OzCv///wMAAAAAAAAAAAAAAAAAAAAAAAAAAK9FRZu0Skr/qDY2/5Ie + Hv9sDg7/NgMD/w8AAP8CKir/AH19/wClpf8AwsL/ANzc/wDt7f8A+Pj/APn5/wDv7/8Bycn/HTs7/5UA + AP/JAAD/0gAA/9MAAP/MAAD/sQAA/3oAAP86AAD/DAAA/wFKSv8AjIz/AK+v/wDFxf8AwcH/CHx8/zUJ + Cf+SBgb/2RMT//AlJf/1MzP/wjw8xGtra0WmpqYX////BP///wEAAAAAAAAAAAAAAAAAAAAAAAAAAKo5 + OSiwSUnKsUhI/6UzM/+MHh7/YwwM/zMEBP8PAQH/Aisr/wB1df8ApaX/AMLC/wDb2/8A6+v/AO7u/wDa + 2v8Oamr/ZgAA/74AAP/LAAD/zgAA/9AAAP/RAAD/zQAA/7QAAP99AAD/PQAA/wsAAP8AWVn/AJCQ/wCe + nv8Ia2v/MwkJ/4kDA//QDQ3/6hwc//AsLP/UODjgjlJSa5WVlSTo6OgL////Av///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACtPz9ZtE9P47FHR/+kMzP/ihwc/2MODv8yBQX/DgEB/wMuLv8Afn7/AKam/wDB + wf8A19f/ANra/wSlpf88AAD/pQAA/8EAAP/FAAD/yAAA/8sAAP/NAAD/0AAA/80AAP+0AAD/dwAA/zEA + AP8GFBT/AmNj/wZhYf8wCwv/hAQE/8oLC//kGBj/7CYm/90xMe6pRESNi4uLLtLS0hH///8F////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0REdLRQUO+xSEj/ozIy/4kcHP9hDg7/MAQE/w0B + Af8CMDD/AH9//wCkpP8Aubn/Aa6u/xo8PP9+AAD/tQAA/7wAAP+/AAD/wgAA/8UAAP/IAAD/ywAA/80A + AP/JAAD/pwAA/2YAAP8tAAD/GggI/zIGBv9/AwP/xgoK/+AWFv/nJSX/4S8v9LQ8PJ6MjIwz3NzcFv// + /wr///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALBHR361U1PwskpK/6Q1 + Nf+NIiL/YxER/zMICP8QBAT/AzEx/wB0dP8Bj4//Dk1N/1sAAP+lAAD/swAA/7cAAP+6AAD/vQAA/8AA + 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 + yf+AAU3/wANP/+AHYf8= + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/directx.ico b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/directx.ico differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/D3D10Tutorial04_WinFormsControl.csproj b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/D3D10Tutorial04_WinFormsControl.csproj new file mode 100644 index 00000000..c1274fef --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/D3D10Tutorial04_WinFormsControl.csproj @@ -0,0 +1,114 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {D0E3965D-10DF-45FC-A05F-39D67EDA760E} + WinExe + Properties + D3D10Tutorial04_WinFormsControl + D3D10Tutorial04_WinFormsControl + v3.5 + 512 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + 3.0 + + + + + + 3.0 + + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + TutorialWindow.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + PreserveNewest + + + PreserveNewest + + + True + Settings.settings + True + + + Form + + + TutorialWindow.cs + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/D3DStructs.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/D3DStructs.cs new file mode 100644 index 00000000..27ecee53 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/D3DStructs.cs @@ -0,0 +1,70 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Runtime.InteropServices; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; + +namespace D3D10Tutorial04_WinFormsControl +{ + #region SimpleVertex + [StructLayout(LayoutKind.Sequential)] + public struct SimpleVertex + { + [MarshalAs(UnmanagedType.Struct)] + public Vector3F Pos; + [MarshalAs(UnmanagedType.Struct)] + public Vector4F Color; + } + #endregion + + #region Cube + public class Cube + { + public CubeVertices Vertices = new CubeVertices(); + public CubeIndices Indices = new CubeIndices(); + + [StructLayout(LayoutKind.Sequential)] + public class CubeVertices + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + private SimpleVertex[] vertices = + { + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Color = new Vector4F ( 0.0f, 1.0f, 0.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Color = new Vector4F ( 0.0f, 1.0f, 0.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Color = new Vector4F ( 0.0f, 1.0f, 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Color = new Vector4F ( 1.0f, 0.0f, 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Color = new Vector4F ( 1.0f, 0.0f, 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Color = new Vector4F ( 1.0f, 1.0f, 0.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Color = new Vector4F ( 1.0f, 1.0f, 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Color = new Vector4F ( 0.0f, 0.0f, 0.0f, 1.0f ) }, + }; + } + + [StructLayout(LayoutKind.Sequential)] + public class CubeIndices + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 36)] + private uint[] indices = + { + 3,1,0, + 2,1,3, + + 0,5,4, + 1,5,0, + + 3,4,7, + 0,4,3, + + 1,6,5, + 2,6,1, + + 2,7,6, + 3,7,2, + + 6,4,5, + 7,4,6 + }; + } + } + #endregion +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Program.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Program.cs new file mode 100644 index 00000000..3c6dc5ca --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Program.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; + +namespace D3D10Tutorial04_WinFormsControl +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new TutorialWindow()); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..85754259 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("D3D10Tutorial04_WinFormsControl")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c4d21605-d6db-4779-a72c-4cca985fa5cf")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Properties/Resources.Designer.cs new file mode 100644 index 00000000..3ad7193e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial04_WinFormsControl.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("D3D10Tutorial04_WinFormsControl.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Properties/Settings.Designer.cs new file mode 100644 index 00000000..bb2f4d7b --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial04_WinFormsControl.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Tutorial04.fx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Tutorial04.fx new file mode 100644 index 00000000..e30071ed --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Tutorial04.fx @@ -0,0 +1,55 @@ +//-------------------------------------------------------------------------------------- +// File: Tutorial04.fx +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + +//-------------------------------------------------------------------------------------- +// Constant Buffer Variables +//-------------------------------------------------------------------------------------- +matrix World; +matrix View; +matrix Projection; + + +//-------------------------------------------------------------------------------------- +struct VS_OUTPUT +{ + float4 Pos : SV_POSITION; + float4 Color : COLOR0; +}; + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +VS_OUTPUT VS( float4 Pos : POSITION, float4 Color : COLOR ) +{ + VS_OUTPUT output = (VS_OUTPUT)0; + output.Pos = mul( Pos, World ); + output.Pos = mul( output.Pos, View ); + output.Pos = mul( output.Pos, Projection ); + output.Color = Color; + return output; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( VS_OUTPUT input ) : SV_Target +{ + return input.Color; +} + + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS() ) ); + } +} + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Tutorial04.fxo b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Tutorial04.fxo new file mode 100644 index 00000000..34736379 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Tutorial04.fxo differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/TutorialWindow.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/TutorialWindow.Designer.cs new file mode 100644 index 00000000..6bee27b9 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/TutorialWindow.Designer.cs @@ -0,0 +1,64 @@ +namespace D3D10Tutorial04_WinFormsControl +{ + partial class TutorialWindow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TutorialWindow)); + this.directControl = new Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl(); + this.SuspendLayout(); + // + // directControl + // + this.directControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.directControl.Location = new System.Drawing.Point(0, 0); + this.directControl.Name = "directControl"; + this.directControl.Size = new System.Drawing.Size(624, 442); + this.directControl.TabIndex = 4; + this.directControl.SizeChanged += new System.EventHandler(this.directControl_SizeChanged); + // + // TutorialWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(624, 442); + this.Controls.Add(this.directControl); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "TutorialWindow"; + this.Text = "Direct3D 10 Tutorial 4: 3D Spaces"; + this.Load += new System.EventHandler(this.TutorialWindow_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.TutorialWindow_FormClosing); + this.ResumeLayout(false); + + } + + #endregion + + private Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl directControl; + } +} + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/TutorialWindow.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/TutorialWindow.cs new file mode 100644 index 00000000..26ec69e8 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/TutorialWindow.cs @@ -0,0 +1,319 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.IO; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using System.Windows.Media.Media3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; +using Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; +using DXUtil = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; + +namespace D3D10Tutorial04_WinFormsControl +{ + /// + /// This application displays a 3D cube using Direct3D 10 + /// + /// http://msdn.microsoft.com/en-us/library/bb172488(VS.85).aspx + /// + /// Copyright (c) Microsoft Corporation. All rights reserved. + /// + public partial class TutorialWindow : Form + { + #region Fields + D3DDevice device; + SwapChain swapChain; + RenderTargetView renderTargetView; + ColorRgba backColor = new ColorRgba(0.0F, 0.125F, 0.3F, 1.0F); + + Effect effect; + EffectTechnique technique; + InputLayout vertexLayout; + D3DBuffer vertexBuffer; + D3DBuffer indexBuffer; + + EffectMatrixVariable worldVariable; + EffectMatrixVariable viewVariable; + EffectMatrixVariable projectionVariable; + + Matrix4x4F worldMatrix; + Matrix4x4F viewMatrix; + Matrix4x4F projectionMatrix; + + float t = 0f; + uint dwTimeStart = (uint)Environment.TickCount; + bool needsResizing; + #endregion + + #region TutorialWindow() + /// + /// Initializes a new instance of the class. + /// + public TutorialWindow() + { + InitializeComponent(); + } + #endregion + + #region TutorialWindow_Load() + private void TutorialWindow_Load(object sender, EventArgs e) + { + InitDevice(); + directControl.Render = this.RenderScene; + } + #endregion + + #region directControl_SizeChanged() + private void directControl_SizeChanged(object sender, EventArgs e) + { + needsResizing = true; + } + #endregion + + #region TutorialWindow_FormClosing() + private void TutorialWindow_FormClosing(object sender, FormClosingEventArgs e) + { + directControl.Render = null; + device.ClearState(); + } + #endregion + + #region InitDevice() + /// + /// Create Direct3D device and swap chain + /// + protected void InitDevice() + { + device = D3DDevice.CreateDeviceAndSwapChain(directControl.Handle); + swapChain = device.SwapChain; + + SetViews(); + + // Create the effect + using (FileStream effectStream = File.OpenRead("Tutorial04.fxo")) + { + effect = device.CreateEffectFromCompiledBinary(new BinaryReader(effectStream)); + } + + // Obtain the technique + technique = effect.GetTechniqueByName("Render"); + + // Obtain the variables + worldVariable = effect.GetVariableByName("World").AsMatrix; + viewVariable = effect.GetVariableByName("View").AsMatrix; + projectionVariable = effect.GetVariableByName("Projection").AsMatrix; + + InitVertexLayout(); + InitVertexBuffer(); + InitIndexBuffer(); + + // Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList; + + InitMatrices(); + needsResizing = false; + } + #endregion + + #region SetViews() + private void SetViews() + { + // Create a render target view + using (Texture2D pBuffer = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView(pBuffer); + } + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { renderTargetView }); + + // Setup the viewport + Viewport vp = new Viewport() + { + Width = (uint)directControl.ClientSize.Width, + Height = (uint)directControl.ClientSize.Height, + MinDepth = 0.0f, + MaxDepth = 1.0f, + TopLeftX = 0, + TopLeftY = 0 + }; + + device.RS.Viewports = new Viewport[] { vp }; + } + #endregion + + #region InitVertexLayout() + private void InitVertexLayout() + { + // Define the input layout + // The layout determines the stride in the vertex buffer, + // so changes in layout need to be reflected in SetVertexBuffers + InputElementDescription[] layout = + { + new InputElementDescription() + { + SemanticName = "POSITION", + SemanticIndex = 0, + Format = Format.R32G32B32Float, + InputSlot = 0, + AlignedByteOffset = 0, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0 + }, + new InputElementDescription() + { + SemanticName = "COLOR", + SemanticIndex = 0, + Format = Format.R32G32B32A32Float, + InputSlot = 0, + AlignedByteOffset = 12, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0 + }, + }; + + PassDescription passDesc = technique.GetPassByIndex(0).Description; + + vertexLayout = device.CreateInputLayout( + layout, + passDesc.InputAssemblerInputSignature, + passDesc.InputAssemblerInputSignatureSize); + + device.IA.InputLayout = vertexLayout; + } + #endregion + + #region InitVertexBuffer() + private void InitVertexBuffer() + { + Cube cube = new Cube(); + + IntPtr verticesData = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Vertices)); + Marshal.StructureToPtr(cube.Vertices, verticesData, true); + + BufferDescription bufferDesc = new BufferDescription() + { + Usage = Usage.Default, + ByteWidth = (uint)Marshal.SizeOf(cube.Vertices), + BindingOptions = BindingOptions.VertexBuffer, + CpuAccessOptions = CpuAccessOptions.None, + MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + }; + + SubresourceData InitData = new SubresourceData() + { + SystemMemory = verticesData + }; + + //D3DBuffer buffer = null; + vertexBuffer = device.CreateBuffer(bufferDesc, InitData); + + // Set vertex buffer + uint stride = (uint)Marshal.SizeOf(typeof(SimpleVertex)); + uint offset = 0; + device.IA.SetVertexBuffers( + 0, + new D3DBuffer[] { vertexBuffer }, + new uint[] { stride }, + new uint[] { offset }); + Marshal.FreeCoTaskMem(verticesData); + } + #endregion + + #region InitIndexBuffer() + private void InitIndexBuffer() + { + Cube cube = new Cube(); + + IntPtr indicesData = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Indices)); + Marshal.StructureToPtr(cube.Indices, indicesData, true); + + BufferDescription bufferDesc = new BufferDescription() + { + Usage = Usage.Default, + ByteWidth = (uint)Marshal.SizeOf(cube.Indices), + BindingOptions = BindingOptions.IndexBuffer, + CpuAccessOptions = CpuAccessOptions.None, + MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + }; + + SubresourceData initData = new SubresourceData() + { + SystemMemory = indicesData + }; + + indexBuffer = device.CreateBuffer(bufferDesc, initData); + device.IA.IndexBuffer = new IndexBuffer(indexBuffer, Format.R32UInt, 0); + Marshal.FreeCoTaskMem(indicesData); + } + #endregion + + #region InitMatrices() + private void InitMatrices() + { + // Initialize the world matrices + worldMatrix = Matrix4x4F.Identity; + + // Initialize the view matrix + Vector3F Eye = new Vector3F( 0.0f, 2.0f, -5.0f ); + Vector3F At = new Vector3F( 0.0f, 0.0f, 0.0f ); + Vector3F Up = new Vector3F( 0.0f, 1.0f, 0.0f ); + + viewMatrix = DXUtil.Camera.MatrixLookAtLH(Eye, At, Up); + + // Initialize the projection matrix + projectionMatrix = DXUtil.Camera.MatrixPerspectiveFovLH((float)Math.PI * 0.5f, ((float)this.ClientSize.Width / (float)this.ClientSize.Height), 0.1f, 100.0f); + + // Update Variables that never change + viewVariable.Matrix = viewMatrix; + projectionVariable.Matrix = projectionMatrix; + } + #endregion + + #region RenderScene() + /// + /// Render the frame + /// + protected void RenderScene() + { + if (needsResizing) + { + needsResizing = false; + renderTargetView.Dispose(); + SwapChainDescription sd = swapChain.Description; + swapChain.ResizeBuffers(sd.BufferCount, (uint)directControl.ClientSize.Width, (uint)directControl.ClientSize.Height, sd.BufferDescription.Format, sd.Options); + SetViews(); + // Update the projection matrix + projectionMatrix = DXUtil.Camera.MatrixPerspectiveFovLH((float)Math.PI * 0.5f, ((float)directControl.ClientSize.Width / (float)directControl.ClientSize.Height), 0.1f, 100.0f); + projectionVariable.Matrix = projectionMatrix; + } + t = (Environment.TickCount - dwTimeStart) / 50; + + // Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor); + + // Rotate the cube + RotateTransform3D rt = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), t)); + worldMatrix = rt.Value.ToMatrix4x4F(); + + // + // Update variables that change once per frame + // + worldVariable.Matrix = worldMatrix; + + // + // Render the cube + // + TechniqueDescription techDesc = technique.Description; + + for (uint p = 0; p < techDesc.Passes; ++p) + { + technique.GetPassByIndex(p).Apply(); + device.DrawIndexed(36, 0, 0); + } + + swapChain.Present(0, PresentOptions.None); + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/TutorialWindow.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/TutorialWindow.resx new file mode 100644 index 00000000..0dd393c3 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/TutorialWindow.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAAABABoBgAAlgAAACAgEAAAAAQA6AIAAP4GAAAQEBAAAAAEACgBAADmCQAAMDAAAAAA + CACoDgAADgsAACAgAAAAAAgAqAgAALYZAAAQEAAAAAAIAGgFAABeIgAAMDAAAAAAIACoJQAAxicAACAg + AAAAACAAqBAAAG5NAAAQEAAAAAAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAAAA + AAD//wAA////AACAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMy2t7a2bMzMzMzMzMzMzMzMzMzMzMzMu7a3tnd2d2ZszMzMzMzMzMzMzMzMzMy7t7tr + a2dnZmZmbMzMzMzMzMzMzMzMzLu7e2tnZnZmZmZmZmzMzMzMzMzMzMzMy7u3u7e2tmdmZmZmZmbMzMzM + zMzMzMzMt7e7u3tra2Z2ZmZmZmZszMzMzMzMzMzLu7u7u7u7d7Z2ZmZmZmZmzMzMzMzMzMx7O7u7s3N7 + trd2tmZmZuZmbMzMzMzMzMu7u7uzNye7e2trZmd3ZmZmZszMzMzMzLO7u7MzqmZ3t7Z3ZrdyZmbmZmzM + zMzMy7u7s7MKqqZre2t2t3AqpmZmZmbMzMzMx7OzuzIqqqpnt7a3ZzIqamZm5mbMzMzMO7u7syKqqqpm + e3trYzKqqmZmZmZszMzMu7OzMiqqqqpqe7a2syKqqmpmZmZszMzLszszIiqqqqqmd7t7cCqqqqamZmZm + zMzHu7swAiKqqqqqZ3u3MCqqqqpqZmZmzMzLMzMzACIqKqqqZ7t7Aqqqqqqqd2ZmzMzLO7szMAIiqqqq + anszIqqqqqoid2ZmzMxzszOzMwAiIqqqpmMyKqqqqqIie2ZnbMy7O7OzszAAIiqqqqd6qqqqoiIzd2Zm + bMw3szs7OzMwAiKqqqqqqqqqIDN3tmZ2bMy7M7OzuzszACKqqqqqqqoiA3trZrZmvMxzOzOzs7O7MAIq + qqqqqqcjN7a3t2ZnfMw7M7Ozs7s7MwIqqqqqqqoje3t3a3d2fMx7OzM7O7O7MzAqqqqqqqpnt7e7trZ3 + fMy3MzOzuzuzswKqqqqqqqqme7tra2dnfMx7M7M7M7O7MwKqqqqqqqpqZ7u7u7a2vMx3szszs7OzMqqq + qqqqqqqmpnu7t7tnfMzLczM7OzswKqqqqqoqKqqqpme7u7e7zMzHOzOzMzMCqqqqqqIiKqqqpqZ7u7e2 + zMzLc7MzMzKqqqqqqiIAIiqqqmpnu7t7zMzMtzMzMCKqqqqqqgMwACIqqqqne7e8zMzMN7MzAiqqqqqq + ojMzACIqqqqnO3u8zMzMxzszACKqqqqqIDszMwIiqqIjO7vMzMzMy3MzAAIiqqqqA7O7MwAiIqIDu3vM + zMzMzHtzMwAioqqiM7s7szMCIiAzu7zMzMzMzMe3MwAiKqojM7O7O7MAIgO7u8zMzMzMzMx7MzAAIqID + O7OzuzMwAzO7vMzMzMzMzMzHdzMAAiIzszuzs7MzM7t7zMzMzMzMzMzMtzcwACMzOzM7OzuzM3u8zMzM + zMzMzMzMx7s3MDMzs7Ozs7Ozu7vMzMzMzMzMzMzMzHdzMzOzMzs7Ozs7t7zMzMzMzMzMzMzMzMy3d7cz + s7M7O3u3vMzMzMzMzMzMzMzMzMzMt3t7e3t7e7e8zMzMzMzMzMzMzMzMzMzMzMe3t7e3t8zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz///////8AAP///////wAA///AH///AAD//AAB//8AAP/w + AAB//wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/AAD8AAAAAf8AAPgAAAAA/wAA8AAAAAB/ + AADgAAAAAD8AAOAAAAAAPwAAwAAAAAAfAADAAAAAAB8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAIAA + AAAADwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAADAAAAAAB8AAMAA + AAAAHwAA4AAAAAA/AADgAAAAAD8AAPAAAAAAfwAA+AAAAAD/AAD8AAAAAf8AAP4AAAAD/wAA/wAAAAf/ + AAD/gAAAD/8AAP/AAAAf/wAA//AAAH//AAD//AAB//8AAP//gA///wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgIAAgAAAAIAAgACAgAAAwMDAAICA + gAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzLe2tmbMzMzMzMzMzMzMy3dnZ2ZmZmzMzMzMzMzMzHu7t3ZmZmZmzMzMzMzMzHu7u7 + t7a2ZmZmbMzMzMzMu7uzd3trZmZ2ZmbMzMzMy7uzMqZ7tnd3dmZmbMzMzMuzMCqma2t2cKpmZmzMzMy7 + MyKqqqe2tzKqpmZmzMzLszIqqqpmu3cKqqamZmzMyzMCIqqqpndzKqqqZmZszMszACIqqqprMKqqqqp2 + bMxzszACIiqqpzKqqqoidmbMOzszACIqqqqqqqqiA3ZmzLs7MzAAIqqqqqqiA3dmZsxzM7MzMAKqqqqq + I3trdmfMu7M7OzMAqqqqqqO3trdmzHMzs7MzAqqqqqqqe3t3a8x7OzszMqqqqqqqpme7trbMtzMzMCqq + qqqiqqqmZ7trzMtzMwKqqqqiAiKqqqZ7fMzHszAqqqqqoAAiqqqiu7zMw3MwIiqqqiMwAiqqI7e8zMy3 + MAIiqqIzMwIiIjO7zMzMx3MAIiogM7MAIiM7vMzMzMNzcAIiIzszMAIDu7zMzMzMdzMwIgM7OzMzO3vM + zMzMzMt3MwMzs7OzM7u8zMzMzMzMx3c3Mzs7O7e8zMzMzMzMzMw3e3t7e7e7zMzMzMzMzMzMzMN7e3t8 + zMzMzMzM////////////4B///wAD//4AAf/4AAB/8AAAP+AAAB/gAAAfwAAAD4AAAAeAAAAHgAAABwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AAAAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gA + AH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzM + zMzMzMzMzMzLZmbMzMzMy7e2ZmbMzMyzB3dndmzMyzKqe3CmZszDCqpnMqpmzLMyqqcKqqZsOzAqqqqi + dmwzszCqqie2bDMzMqqqZ7tsMzAqqqqme7zDAqqiAqqrzMcyqqMwojvMzHMqCzAjvMzMxzIzMzvMzMzM + xze7zMzM//+zMPg/a2vgD6pmwAfMzIADMyKAA6e2AAGqpgABzMwAATIqAAFmuwABqqaAA2zMgAMCIsAH + pnfgD6qq+D9szCgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWAAAA0QAAAM4A + AADNAAAAywAAAMgAAADGAAAAxQAAAMIAAADBAAAAvgAAALwAAAC6AAAAtwAAALUAAACzAAAAsAAAAK0A + AACpAAAApgAAAJwAAABzAAAAZwAAADwAAACiAQEAkgEBAN0CAgDAAgIAvQICAH0BAQBWAQEAzgMDAMMD + AwC/AwMAsAMDALQEBACGAwMA5wYGACUBAQDTBgYAxQYGAKQFBQDXBwcAuQcHAMAICABIAwMAMgICALQI + CACtCAgAoQcHAMcKCgD5Dg4AvgsLAOEODgDMDAwAmgoKANIPDwDFEREArQ8PAPoXFwDpFxcApBERANwY + GADJGRkA/iEhALcYGAD0IyMA1B4eAOQiIgBjDw8A7SUlABoEBAD9KioAlxkZAAwCAgClHR0A9SwsADMJ + CQDXJycAuSIiAMYoKAD+NDQAiRwcAPQ0NADnNDQA2jIyAP47OwCqKSkA9j09AP5CQgD+RkYA9ENDAP9J + SQC6NjYAyzw8AGYfHwA1EBAA/05OAPhNTQDlR0cA/1FRAKg3NwD/VVUAu0BAAEkZGQCKMDAA/1paAPZX + VwD2WloA/15eAMhLSwC3RUUA/2FhAG4qKgC/TEwA/2ZmALFHRwDoX18A9mZmALVLSwD/bGwAtk5OAMxZ + WQDmZWUAr01NAKBHRwD/cnIAt1JSADMXFwD2c3MA/3h4ACkUFAD/fX0A/4GBAOl3dwD/hoYA+oODAPaG + hgD/jY0AqF1dAGY5OQD/k5MA5oaGAMVzcwD/mZkA8JOTAP+engD/oqIA+6GhAKNpaQCEVVUA/6amAMuF + hQD/rKwA8KamAP+ysgD0q6sA/7a2APuzswD/ubkA+bW1AP++vgDgqakA/8LCAP/FxQD/yckA6Lm5AP/O + zgCOc3MA/M3NAOzCwgDDq6sAMy0tAAD+/gAA/f0AAPv7AAD5+QAA9/cAAPT0AADx8QAA7+8AAO3tAADp + 6QAA5uYAAOTkAADg4AAA398AANraAADT0wAAyckAAI6OAAB9fQABzs4AAcbGAAHCwgABuroAAbS0AAGt + rQABpKQAAZubAAGHhwAC+fkAAvf3AAF1dQAD//8AA/v7AAX19QAG//8ABubmAAJSUgAJ//8ADP//AAnA + wAAIj48ABmhoAAMxMQAQ8/MAEf7+AAqBgQAGSUkAFv7+AA+qqgAW6+sADH5+AAQoKAAWysoAHf7+ABzX + 1wAo/v4AJujoADT//wAt19cAMuLiADf29gA7/v4ABhgYAEf9/QBU/v4AUPDwAD2wsAAYREQAFj09ABAs + LABO1NQAZPDwAGr29gB29fUAPHx8AC9dXQBarq4Ac93dAIC+vgBDYmIAltTUAIeYmAAAAAAA//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////XGRqcHh+hIeK//// + //////////////////////////////////////////9ISFZaZGpzfoKEh4qNjZCSk/////////////// + ////////////////////////QEBIVlxmc36Eh4qNkJKSk5eXl5mZ//////////////////////////// + /////0xCSEhRWWFteIKHipCSk5mZm5ubm5ubm5v/////////////////////////////QkJMTFFRVllk + anN+hIqNkpmbnaGhoaGfn52d//////////////////////////9GRkxMTEhASFNYWmRteIKHjZKXm6Gj + pKSko6Gfn////////////////////////0ZGRkJCOzszPENVU1lhanN+hYqQl5uho6WlpaSjoZ////// + ////////////////REREPDwzMzMqPWllVVZcZnB4goeKkJecoqaqqaelpKGf//////////////////9E + Pjw8NSUlJRAe/PmoXlhaZG1zfoSHipGYqKirpqmnpaShn////////////////04+PjUlJSUBJKzU5e77 + lWNZYWpzeIKFiY+W+O/7q6qpp6WjoZ3/////////////TkM+NRoaGgQV8MCx4uz0+3JbYWZweH6Ehous + 397u/auqqaeloZ+b////////////Qz44KhoaBB3xw7Kt3Obt+otjWmRqc3iBeozww8rq9f2rqqmnpJ+b + //////////9OQzgnAAAEJPDCtLCt2eTs9P5uW1xkanN7fYDHubDk7fb9q6qppaGdm/////////9DPzYf + AgsW8MS6s7Ct0uLm7fqVY1lcZmx6cfLDtq/c5u32/auqpKOdmf///////1A/OSgHEhbxvsO8t7KuzNnk + 7PT+blhZXGNlgMu8tK/S4urt9v2rpqGfmZf//////1A/MigMGRfr1sfEwLizr8/i5u37i1RRWF5f8cK3 + sq6t0+Lm7PT7q6afmZP//////1A/LBsNGR5H68vHxcG7tbDT5Oz0/mdMVFdg1ru0sK6urrDO3uj5/qKg + mZL//////085LBsKESQeR+vWvsbDvLax2ebt+n1QT0Xww7WxsLCytLe7wd33qKKemZL/////UE9BKxwJ + Cg8ZHiZK27/HxMC3sOLq7v5pX/C9tbGwsbO3u8HH1vGMj5qbmZKN////UE9BKwwKCAcLFBUXSuDWvsXA + ts3k6vPv7+Gyrq+wsrfAxcjxgIyLjpSZl5CK////UE9BIw0LCQcFBxAkHiZK277Eu7PT5OTk4tnPra2v + tsDI8oBxfXqGiI2Tk42H////XU86Ig8NCggFAgIHExUXStHHvbev09zc2dPSz9LQxNaDX2VudXZ+goeQ + ko2E////XU86IhAODAoHBAEAAQ0dLkrLw7myrdLT0s/S09nh+GhpXmNrbXBzeISKkIqC////XU86EREP + DQsIBQIBAAARFibXxrmyrq3MzMzP2eLn92leW1xhZGZqbX6Fiod+////Z1c6EhIRDwwKBwQBAAAEGRfg + xrexrq2tra3P2eLp85ZeWFlZWlxcZHCCh4V4////b109KRMREA4MCQYDAQADGS7WwLOwra2trq2t0+Lm + 7vuLVFFRVlZWWWZ4hYJz////b11LMRMTERANCwgFAgIOHtvBtbGvra6vsbGwrtnk7PX7ckhISEhRUVpw + fnhw////b2dXPSkTEhEPDQoICRIX38CzsK+urrCztri3tLDc5u31+15AQEBASFZmc3Bw/////29XPTEY + ExIRDw0OGWDFt7Kvrq2tsLO6vcK9u7ax3Obt9ftvOzM7O1Fcamb//////29lSz0UGBMSERgW8MKzr6+t + ra2usrvG1svHw8C4sdzm7fX6lTwzM0hWYWT//////29vVz0xFBQUHS3WvLKvrq2tra2xt8bxSuvRyMW9 + uLHc5uzt+qhDM0BRWWT///////93ZUs3GR0eg9bBt7Kvra2tra+zvfEXLSZK28jFvbix2eTq7vlpPkhR + Vv////////90b1dJJB4m0cfCu7Wwra2trrG61S0UFBUuStvIxb24ssnY4/dSPkxWWv//////////d2VX + Uh4m4L/Gwru1sK2usLXFYBIEBREVF0rRyMW9urfA2i06PExW////////////dHdlSUUuSuC/xsK7tbCw + tL3xGQUBAQMQHRdK277FwcLfTRk+RlNi/////////////3d0ZVJFLkrgy8bCu7W0u9YWCgQCAQEDDh0X + StG+x9ZNJDg8TFj///////////////95dGVSRS5K17/Gwru7xhcTCQcFBAMBAw4VLuvW1k0kNjxGU/// + ////////////////f3RlUkUuSte/xsPF8R0OCwoIBwUEAwUTFi5HTR0yPkRU//////////////////// + /393ZVJFTUrXy77bHhMPDQwKCQgHBQQJFBUWJDQ+RFT///////////////////////9/eWVpX2BH8tsX + GRIRDw4NCwoJBwYFITA6OUNEVP//////////////////////////eXl0aXFoYC0dGBMSERAPDQwLCiAo + Mjk/Q05V/////////////////////////////3d/fH1pcVJLPTowMDAvLys0NDk/P05OVVX///////// + ////////////////////////d398dGVlV1dPQUFBQU9PUFBQUFVV//////////////////////////// + //////////90eX95b2dnZ11dXV5eXl5eXv////////////////////////////////////////////9v + cnJycnJubm5eXv////////////////////////////////////////////////////////////////// + ////////////////////////////////AAD///////8AAP//wB///wAA//wAAf//AAD/8AAAf/8AAP/A + AAAf/wAA/4AAAA//AAD/AAAAB/8AAP4AAAAD/wAA/AAAAAH/AAD4AAAAAP8AAPAAAAAAfwAA4AAAAAA/ + AADgAAAAAD8AAMAAAAAAHwAAwAAAAAAfAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAAAA + AAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAgAAAAAAPAACAAAAAAA8AAIAAAAAADwAAwAAAAAAfAADAAAAAAB8AAOAA + AAAAPwAA4AAAAAA/AADwAAAAAH8AAPgAAAAA/wAA/AAAAAH/AAD+AAAAA/8AAP8AAAAH/wAA/4AAAA// + AAD/wAAAH/8AAP/wAAB//wAA//wAAf//AAD//4AP//8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAC9AAAAuwAAALkAAAC2AAAAswAAALEAAAClAAAAowAAAKEA + AACcAAAAkQAAAG0AAABpAAAAZAAAAF0AAABYAAAANgAAADAAAAAqAAAAIgAAABMAAAAHAAAAhgEBAL8C + AgC8AgIAqAICAKECAgBPAQEAQgEBALsDAwCyAwMArQMDAH0CAgC3BAQAiwMDALMFBQC8BwcA3AkJAKUH + BwBVBAQAzgsLALwKCgCqCQkAOwMDAOgNDQAPAQEAXQcHAJcMDACgDg4AvBISAPkaGgDNFhYAWwoKAOcb + GwC2FhYA2hwcAKsXFwDDGxsAuxwcALUbGwDKICAA8ycnAJMZGQBFDAwA0yYmAOUtLQC2JCQA/TQ0APAy + MgDGLCwA+Do6AKwoKAD/PDwA1TMzAP8+PgDpOjoA/0REAPBAQADIOTkAwDc3AP9KSgC3NTUATRcXANdC + QgD/T08A+E1NAM1AQAAqDQ0A5khIACYMDADxTU0Avj09AKw5OQCVMTEA/1VVAMFCQgC6QUEAsT4+AP9b + WwDISUkAvkZGALFCQgBpJycAzU1NAAgDAwD/YmIANBQUAOhcXAD/ZmYAu0tLAPhnZwD/a2sAs0xMALxR + UQD/cnIAkUFBAHk2NgCkS0sA/3Z2AJtISAC2VVUAzmNjAP98fADodXUASyYmAP+EhAD2gYEAqFlZABYM + DAD/jIwAm1hYAGc7OwD+k5MAqmNjANJ9fQD/mpoA/56eAP+iogD/qKgA/6qqAN6WlgD/ra0A+6qqAP+w + sABzUVEA/7i4AOurqwD/u7sA/729APK3twCFZWUA/8PDAL6RkQD/ysoA16urAPXExAD3ysoAwqamAMyx + sQAhHR0AKScnAB0cHAAA//8AAP39AAD7+wAA+PgAAPb2AAD19QAA8/MAAPHxAADv7wAA7e0AAOrqAADm + 5gAA5OQAAOPjAADh4QAA398AAN3dAADY2AAA19cAAM3NAADLywAAx8cAAMPDAADBwQAAtbUAALCwAACt + rQAAqakAAKamAACjowAAlZUAAJKSAABmZgAAZGQAAY2NAAGCggACvLwAA/7+AAPs7AADwsIAApycAAT8 + /AAEtLQABK6uAAJcXAAEl5cAB/n5AAf09AAG2NgABaKiAASRkQADbGwACPX1AAR4eAAJ/v4ADv//AAZm + ZgAQ+voACpycABT//wALiooAFfT0ABz9/QAe6OgAI/39AAk6OgAs/f0ALu7uACKurgAz/f0AHo+PADz8 + /AA86+sAPNXVAEn9/QBG7+8AInBwAFL+/gA2oaEAVPX1AF/9/QAECgoAYOTkAFzT0wBr8fEAaM7OAGO8 + vABx1dUAgN7eAHzIyACQ5eUAfpeXAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////9janB3foKFiP////////////// + /////////////0lJUWNzfoWIiouMjI6Q//////////////////////9ERERJUWNwe4KJjpKUlZSS//// + //////////////9FPj4zMzZKTlVqc36IjJSYmpiVlP//////////////QjY2LSkwdf5XTV9te4KFjZmb + nJqYlP///////////0I2LSYfHOfr9YBOX213f4eR8fienZqYlP//////////OCYZIWvH3Ojz/GhVanN8 + g6HT6vufnZqV/////////zgpGx3ftqrZ5fD3hltjb3p91a3j8/2fnZiS//////9BNCAc1ry3r6bh6vP8 + aF9sdKK3q9rq8/2fnJKQ/////z0yIxPPwby3rqbj7feDWWR90LCqpOHq8vuelo7/////PSoXERbDwr24 + sajl8PliXqK0rKmoqcni7P6bjP///0Y6KgkNExbExb+6s9Lo7pF9yqioqa2zts3pl5OMif//RjolBAoO + ExbPxsC5sNzl5uLZo6WpsLrGoISHj4uF//9GOyIDBAoMERX02Lu0qdrh3trZzK7Uon10en+JioL//1A8 + JAQCAwcXDxMWxbWrpNna2t7g71NeaGxvd4KIfv//XEMgBgQBAAMJDRTktaqlo8jZ3uPsdVRWX19qe4V3 + //9lQysgBgMBAAkQgb2tqKamqKjR4er2dk5LTVVwfnP//2VSORogBgYLHd20q6emp6ywsq7S5fD6gFdF + SWNzbf//YWE5JwcHIRLOrKempaars7rHuLLX6PD3/GZFUWpj////bkgxFxBay7OrpqSkqLDL5Ma/urHR + 5e3y+UZLVf////9uYj8o5MW8tq+opaaruIEUFtbAuK+o4OLxQ0RL/////2JxXlMu1sG8tq+pqa/fEA0T + 9Ma+uLS01DU4RE3//////3F2Z1gWw8G8t7Kx1B0ICA8Vz8K+u9UdMj5H/////////3l4Z1hpw8G9usdY + CwACFxEWw8LYLCs2Rf//////////Ynl4Z1hpw8LA2A4FAAAHDBMu5CwnOEVO////////////Znl4Z2uB + z9sRCwQBAAIKDBwvMThCTP//////////////Znl2dX1rQCEaHyIZGB4rMTxBQkz///////////////// + /3GAeHReSDw3NzI6Oj1GSkr//////////////////////11xeXJuZWBcT1dXV0pK//////////////// + ////////////XGVlZGRkV0//////////////////////////////4B///wAD//4AAf/4AAB/8AAAP+AA + AB/gAAAfwAAAD4AAAAeAAAAHgAAABwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AA + AAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gAAH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvAAAALsAAAC6AAAAsgAAALEAAACwAAAArQAAAKcAAACfAAAAkwAAAH4A + AABtAAAAPAAAAKgEBAChBQUAYAMDADsCAgBVBAQAOwMDAKIMDAC0Dg4Avg8PANEWFgBoCwsA5xoaALsV + FQDFGBgAsxYWADwICACoFxcAgBISAPYuLgDfKSkA4y0tAJwfHwCyJCQAzy0tAOAxMQDzNzcA8zk5APA5 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAJGRkYLISEhHxwcHEB+FxeKtB4exd8o + KOr/ODj//0VF//9QUP//W1v//2Zm//9wcP//eHj//39///+Ghv//jIz//5GR//+Wlv//mZn/2YaG7aNo + aNJZOjquAAAAfwAAAF8AAAA7AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BZmZmBT09PRUwMDA1jB4eiMQa + Gs/0Hh75/ysr//86Ov//SEj//1ZW//9lZf//cXH//319//+Ghv//jo7//5OT//+Zmf//nZ3//6Cg//+k + pP//pqb//6en//+oqP/0oqL5tHl53F9BQbMAAAB9AAAAVgAAAC0AAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wGSkpIHSkpKH3Qp + KV66Hx++6yEh9fsmJv/9Li7//zU1//9DQ///T0///11d//9tbf//enr//4aG//+Pj///l5f//56e//+k + pP//qqr//66u//+wsP//s7P//7Oz//+zs///s7P//7Oz/+6np/ahcXHUNCYmngICAmwAAAA8AAAAFwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////AoCA + gAhEREQimyQkhNAgINz0JSX/9y0t//kvL//8MjL//zQ0//86Ov//RET//1BQ//9aWv//aGj//3R0//9/ + f///ior//5aW//+goP//qqr//7Ky//+3t///vLz//76+//++vv//vb3//7u7//+5uf//t7f/y5GR52VJ + SbcCAgJ5BAQERwAAABoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8DqqqqCU5OTiSsJSWW3CIi7O8lJf/yKir/9Ssr//cqKv/7KCj//iUl//0nJ//4MTH/9zk5//1F + Rf//UVH//19f//9ra///eHj//4WF//+Skv//np7//6mp//+zs///vLz//8LC///Fxf//xsb//8XF///C + wv//vr7//7u7/+KkpPKAXFzDAgICgAAAAEoAAAAaAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wOzs7MKWlpaIrAkJJrfISHz7CUl/+4kJP/wIiL/9B4e//YaGv/5FRX/+BER/+sS + Ev/WICD/3C0t//Q1Nf/+QkL//05O//9bW///Z2f//3V1//+Bgf//jY3//5ub//+mpv//srL//7y8//7D + w//9yMj//svL///Kyv//x8f//8LC//++vv/ura33iGNjxwQEBIAAAABGAAAAFwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////A9XV1QZsbGwariYmkNseHvPnISH/6SAg/+saGv/tFRX/8Q8P//UM + DP/xCQn/1QcH/6EPD/+KLS3/qzk5/983N//7PT3//0lJ//9WVv//YmL//2xs//94eP//hIT//4+P//+a + mv/9paX/9Kur/+Wrq//js7P/7sLC//vMzP/+zs7//8nJ///ExP//v7//7q2t94FeXsMCAgJ5AAAAPAAA + ABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Bo6OjhKoLCxz0iAg6uIbG//kGhr/5hUV/+gP + D//sCQn/7QQE/+MEBP+vAQH/WAcH/0NiYv9anJz/iG5u/8dAQP/1PT3//0ZG//9SUv//Xl7//2ho//9z + c///fHz//4aG//2QkP/wk5P/y4WF/5Rqav+QgYH/u56e/+a+vv/7zs7//8/P///Ly///xMT//76+/+Ol + pfJnSkq3AgICbAAAAC0AAAAIAAAAAAAAAAAAAAAAAAAAAP///wH///8Ev7+/DJg8PEPGISHU3Rsb/98V + Ff/hDg7/4wkJ/+YFBf/kAwP/0AEB/4MBAf8qNTX/CcDA/ybo6P9L6ur/ccDA/6NkZP/hQkL//END//9P + T///Wlr//2Rk//9ubv//eXn//4KC//aGhv/Penr/f09P/zdXV/8/u7v/esXF/7mqqv/pwcH//M7O///P + z///ysr//8PD//+9vf/LkpLnNicnngMDA1cAAAAbAAAAAwAAAAAAAAAAAAAAAP///wL///8HgICAFrch + IajZHR3/2hYW/9sNDf/dBgb/4AIC/98CAv/LAQH/cAAA/x5AQP8Dzc3/APf3/x7///9C/f3/Y/Hx/4S5 + uf/DTk7/9END//5MTP//VVX//2Bg//9qav//c3P//Hx8/+d6ev+eWVn/PCQk/w9/f/8X5ub/VvLy/4vZ + 2f/CsLD/68PD//zOzv//zs7//8jI///AwP//uLj/oXJy1AYGBn8AAAA7AAAACwAAAAAAAAAAAAAAAP// + /wTMzMwKqykpYc0eHvHVFhb/1g4O/9gGBv/aAgL/3AAA/8sAAP9+AAD/GkBA/wO8vP8A8/P/AP7+/xb/ + //81////Vf///3Lh4f+oXl7/5kRE//xGRv//UFD//1pa//9kZP//bW3/9nNz/8lmZv9kNjb/EUdH/wK5 + uf8C9/f/Ov7+/2v39/+X1NT/xrCw/+zDw//9zs7//8zM///Fxf//u7v/7qio92NGRrQDAwNgAAAAHgAA + AAIAAAAAAAAAAP///wZxcXESuyEht9EaGv/RERH/0wYG/9QBAf/XAQH/ywAA/4kAAP8YRkb/AsPD/wDv + 7/8A+fn/AP7+/xD///8o////Rv///2Px8f+JmZn/x01N//RDQ///Skr//1NT//9cXP/8ZWX/5mVl/5tJ + Sf8vGBj/A5ub/wHh4f8A+fn/Jf///0////91+Pj/mdXV/8awsP/swsL//MvL///IyP//v7///7W1/7d+ + ft0GBgaBAAAAOgAAAAoAAAAAAAAAAP///weqJiZVyR0d9MwVFf/ODAz/zgMD/84AAP+7AAD/awAA/xdD + Q/8CsrL/AN/f/wDw8P8A+fn/AP7+/wn///8c////Nv///1X9/f9y39//o2pq/+NDQ//8Q0P//0tL//9U + VP/2Wlr/y1JS/2cuLv8TKyv/ALy8/wDp6f8A+vr/FP///zX///9X////efPz/5vW1v/JsLD/7sLC//zH + x///wcH//7a2//SmpvldPz+vAwMDVwAAABYAAAAAAAAAALOzswq3IyOfyhwc/8kREf/JBwf/xQEB/6kA + AP9hAAD/Ez4+/wKNjf8AuLj/ANHR/wDm5v8A9PT/APz8/wL///8R////KP///0X///9j8vL/ipWV/8xH + R//2PDz//0FB//1JSf/pTEz/oTo6/zQVFf8FeHj/ANbW/wDv7/8A+/v/CP///x////84////V////3X1 + 9f+Zzs7/x6ys/+u9vf/8wMD//ri4//+srP+mbW3TBwcHcQYGBikAAAADAAAAAIVHRxm9ISHaxhkZ/8UM + DP/EBQX/ugAA/40AAP9BAAD/DB0d/wFqav8AnJz/ALa2/wDPz/8A4+P/APLy/wD7+/8G////G////zb/ + //9V+fn/dsLC/6lcXP/kOzv//Tc3//c+Pv/MOTn/aCEh/xI9Pf8Bv7//AObm/wD09P8A/Pz/Af///w3/ + //8a/v7/L/39/0n5+f9o7u7/j8TE/8Ojo//tt7f//Li4//+urv/bjIztFxISiwQEBD4AAAAKAAAAAKgk + JFXFIyP/wxcX/8EJCf/AAgL/twAA/5QAAP9UAAD/GgAA/wMfH/8AcnL/AJaW/wCvr/8Ax8f/ANzc/wDs + 7P8A+Pj/C/7+/yb///9G/f3/Ze3t/4WoqP/DQUH/7i8v/+cwMP+hJyf/OA8P/wZubv8A29v/AO/v/wD4 + +P8A/Pz/AP39/wD8/P8A+fn/BfX1/xXv7/8y4uL/XLq6/5qTk//drKz/+bW1//+trf//n5//ZD8/sQYG + BlEAAAASAAAAALIlJYnCISH/vhQU/74HB/+/AgL/vgAA/60AAP+FAAD/TwAA/xsAAP8DFxf/AGdn/wCM + jP8Apqb/AL29/wDT0/8A6Oj/APf3/xP+/v8z////Uv39/23c3P+eTk7/xyws/7YjI/9dEhL/E0RE/wG4 + uP8A7e3/APb2/wD5+f8A+fn/APX1/wDv7/8A5ub/ANra/wPGxv8Pqqr/N319/41sbP/epKT/+7Oz//+s + rP//np7/mFtbygoKCmIAAAAZAAAAALcoKLG/ISH/uxMT/7sHB/+9AgL/wAAA/78AAP+yAAD/jwAA/1sA + AP8nAAD/CAIC/wFHR/8Afn7/AJub/wC0tP8Az8//AObm/wD5+f8d/v7/Pf///1X09P9wjo7/gjs7/2Qg + IP8gSkr/AsvL/wDt7f8A9/f/APj4/wD39/8A8fH/AOfn/wDZ2f8Ax8f/AZub/whfX/8fOjr/Xjw8/7h5 + ef/wpqb//rGx//+qqv//nZ3/vG1t3RAQEG8AAAAgAAAAALcpKdG8IiL/uRMT/7gGBv+5AQH/vgAA/8MA + AP/EAAD/uwAA/54AAP9uAAD/PAAA/xIAAP8CKyv/AGVl/wCPj/8Ar6//AM/P/wDp6f8D+/v/Jf7+/z39 + /f9I3d3/R7Cw/zGmpv8Sy8v/APX1/wD8/P8A+/v/APn5/wDz8/8A5+f/ANDQ/wCtrf8DhIT/Ej09/zYb + G/9vODj/smFh/+aGhv/7oaH//6ur//+np///mpr/13Z26w8PD3gAAAAlAAAAALksLOe6IyP/thIS/7QE + BP+2AQH/uwAA/8AAAP/FAAD/yQAA/8UAAP+xAAD/iQAA/1cAAP8pAAD/CgAA/wFHR/8Ajo7/ALa2/wDY + 2P8A8PD/DP39/yP///8u/f3/LPj4/yD4+P8R/f3/Bf///wD///8A////APv7/wDq6v8AzMz/BISE/xIt + Lf8xFRX/ZCsr/55HR//MX1//63Nz//qDg///lpb//6Oj//+jo///lpb/63t79RQUFIAGBgYpAAAAALsx + Mfe3IiL/shAQ/7EDA/+zAQH/uAAA/70AAP/CAAD/yAAA/84AAP/OAAD/xAAA/6YAAP91AAD/OQAA/wwA + AP8BUVH/AJub/wDIyP8A5+f/APr6/w3///8Y////Gf///xP///8N////CP///wf///8I////Bubm/wKx + sf8MYWH/KxUV/2IiIv+bOjr/yU9P/+hfX//2Zmb//HBw//94eP//iYn//5mZ//+dnf//kpL/+Hx8+xUV + FYQGBgYrAAAAALs0NP60IiL/rw4O/64DA/+wAAD/tQAA/7oAAP+/AAD/xQAA/8sAAP/RAAD/1QAA/9IA + AP+2AAD/egAA/zEAAP8HDAz/AHd3/wC6uv8A4OD/APX1/wD///8J////C////wr///8H////CP///w3/ + //8T/f3/GsnJ/yZiYv9KGRn/iSgo/8Y+Pv/nTU3/9ldX//xdXf//YGD//2Rk//9tbf//fX3//46O//+X + l///jIz//nh4/xgYGIEGBgYpAAAAALo4OPezJSX/rA8P/6sCAv+tAAD/sgAA/7cAAP+8AAD/wgAA/8gA + AP/OAAD/0wAA/9gAAP/UAAD/rgAA/2gAAP8fAAD/AzU1/wChof8A4OD/APT0/wD9/f8B////A////wP/ + //8E////B////xD///8d/f3/LdfX/0h9ff+FMDD/zTc3//NDQ//9S0v//09P//9SUv//VVX//1hY//9e + Xv//cHD//4OD//+QkP//hob/+G5u/BkZGXsHBwcmAAAAALg+PuizKyv/qhIS/6gCAv+qAAD/rgAA/7MA + AP+5AAD/vgAA/8QAAP/KAAD/0AAA/9YAAP/aAAD/ygAA/5MAAP86AAD/CCUl/wCgoP8A5eX/APb2/wD9 + /f8A////AP///wD///8B////Bv///xD///8h////N/b2/1PKyv+IWlr/zz4+//k9Pf//QED//0ND//9G + Rv//SEj//0pK//9QUP//YmL//3h4//+IiP//gID/7GJi9RsbG3IICAghAAAAALZBQdOzMDD/qRUV/6UE + BP+nAQH/qwAA/7AAAP+1AAD/ugAA/8AAAP/GAAD/zAAA/9IAAP/XAAD/zQAA/5UAAP8xAAD/BWpq/wDM + zP8A8PD/APn5/wD+/v8A/v7/AP///wD9/f8A/v7/Af7+/wv///8d////N////1Ly8v9zvr7/qVtb/+g6 + Ov//NDT//zc3//86Ov//Ozv//z4+//9CQv//VVX//2tr//+AgP//eHj/3FdX6R4eHmcKCgoaAAAAALRD + Q7S0ODj/qhwc/6QICP+lAgL/pwAA/6wAAP+xAAD/tgAA/7wAAP/CAAD/yAAA/84AAP/OAAD/tAAA/1EA + AP8PTEz/AcfH/wDt7f8A9/f/APv7/wD+/v8A/f3/APv7/wD39/8A9vb/APj4/wD8/P8R/v7/Kv///0f9 + /f9k9fX/hL+//71PT//6Kir//yoq//8rK///Li7//zAw//82Nv//R0f//2Ji//91df//bm7/xUxM2iMj + I1gAAAASAAAAALFBQYq2QED/rCcn/6QPD/+jBQX/pAAA/6gAAP+tAAD/sgAA/7cAAP+9AAD/wgAA/8EA + AP+oAAD/QQAA/wx/f/8B0ND/APHx/wD4+P8A+/v/AP39/wD9/f8A+Pj/APHx/wDp6f8A5OT/AObm/wDu + 7v8A+fn/FP7+/zH///9P////bPX1/4y6uv/OQED/+x4e//8dHf//Hx///yIi//8oKP//PDz//1VV//9m + Zv//YGD/qkJCwykpKUUAAAAKAAAAALE9PU+3R0f/rS8v/6MVFf+hCAj/oQEB/6QAAP+pAAD/rQAA/7MA + AP+3AAD/tQAA/44AAP8wDw//Bqys/wDn5/8A9fX/APr6/wD8/P8A/v7/AP7+/wD5+f8A8PD/AN/f/wDL + y/8Aw8P/AMjI/wDX1/8A6Oj/APf3/xb9/f80////Uv///2719f+Ltrb/vkZG//UVFf//EBD//xUV//8b + G///MTH//0hI//9bW///Vlb/iDw8nzU1NTBAQEAEAAAAALEzMwqzRUXZsDo6/6YfH/+gDQ3/ngEB/6EA + AP+kAAD/qQAA/6sAAP+iAAD/agAA/xtDQ/8DwsL/APDw/wD6+v8A+/v/AP7+/wD+/v8A/v7/APz8/wD0 + 9P8A29v/AaWl/wFtbf8Ac3P/AJ6e/wC3t/8Azs7/AOTk/wD39/8W/v7/Nf///1H///9p9/f/f9jY/6Rt + bf/qERH//wcH//8REf//Jyf//z4+//9OTv/jSUntSzw8ak1NTR7///8B////AQAAAACwQkKbtEVF/6kq + Kv+hFBT/nQUF/5wAAP+dAAD/mAAA/4AAAP9DAAD/D2pq/wHR0f8A8/P/APv7/wD9/f8A/v7/AP///wD/ + //8A/v7/APf3/wDl5f8CoqL/Cj8//xAFBf8HERH/AVBQ/wCHh/8Ara3/AMrK/wDk5P8A9/f/Fv7+/zH/ + //9L////Xv39/27f3/+LfHz/0Rwc//oPD///IiL//zU1//9BQf+/Pz/MRkZGSWlpaRH///8B////AQAA + AACuPT1LtktL8602Nv+kHx//mgoK/5EBAf9+AAD/UgAA/yYSEv8Jb2//AcbG/wDn5/8A9fX/APv7/wD+ + /v8A////AP///wD+/v8A+/v/APHx/wHJyf8TQUH/PAAA/0oAAP8qAAD/CgEB/wFISP8AiIj/AKur/wDI + yP8A5OT/APb2/xD9/f8n/v7/Ofv7/0bv7/9XtbX/kDQ0/94aGv/6KSn//Tc3//U4OPmVQUGWXV1dLL+/ + vwgAAAAAAAAAAAAAAAAAAAAAsUZGr7JDQ/+nLS3/mxQU/4IGBv9bAQH/JQIC/wdRUf8BmJj/AMHB/wDZ + 2f8A7Oz/APj4/wD+/v8A////AP///wD9/f8A9vb/AN/f/wiPj/9MAAD/lwAA/5sAAP9wAAD/NAAA/wsA + AP8BR0f/AImJ/wCrq/8AyMj/AOTk/wD09P8C+fn/EPPz/xzX1/81e3v/iRkZ/9wbG//3Kyv/+zg4/8w5 + OdVYWFhRi4uLFv///wQAAAAAAAAAAAAAAAAAAAAArT4+UrNLS+6uPT3/nyUl/4MQEP9VBgb/IQEB/wUh + If8Aenr/AKWl/wDCwv8A29v/AO3t/wD4+P8A/v7/AP39/wD5+f8A6+v/BKqq/zMREf+pAAD/ywAA/8gA + AP+sAAD/dwAA/zcAAP8KAAD/AVFR/wCIiP8ArKz/AMnJ/wDf3/8A5ub/Ac7O/wqBgf9JBwf/sA8P/+kd + Hf/3Ly//7TY29p9CQpR0dHQus7OzCv///wMAAAAAAAAAAAAAAAAAAAAAAAAAAK9FRZu0Skr/qDY2/5Ie + Hv9sDg7/NgMD/w8AAP8CKir/AH19/wClpf8AwsL/ANzc/wDt7f8A+Pj/APn5/wDv7/8Bycn/HTs7/5UA + AP/JAAD/0gAA/9MAAP/MAAD/sQAA/3oAAP86AAD/DAAA/wFKSv8AjIz/AK+v/wDFxf8AwcH/CHx8/zUJ + Cf+SBgb/2RMT//AlJf/1MzP/wjw8xGtra0WmpqYX////BP///wEAAAAAAAAAAAAAAAAAAAAAAAAAAKo5 + OSiwSUnKsUhI/6UzM/+MHh7/YwwM/zMEBP8PAQH/Aisr/wB1df8ApaX/AMLC/wDb2/8A6+v/AO7u/wDa + 2v8Oamr/ZgAA/74AAP/LAAD/zgAA/9AAAP/RAAD/zQAA/7QAAP99AAD/PQAA/wsAAP8AWVn/AJCQ/wCe + nv8Ia2v/MwkJ/4kDA//QDQ3/6hwc//AsLP/UODjgjlJSa5WVlSTo6OgL////Av///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACtPz9ZtE9P47FHR/+kMzP/ihwc/2MODv8yBQX/DgEB/wMuLv8Afn7/AKam/wDB + wf8A19f/ANra/wSlpf88AAD/pQAA/8EAAP/FAAD/yAAA/8sAAP/NAAD/0AAA/80AAP+0AAD/dwAA/zEA + AP8GFBT/AmNj/wZhYf8wCwv/hAQE/8oLC//kGBj/7CYm/90xMe6pRESNi4uLLtLS0hH///8F////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0REdLRQUO+xSEj/ozIy/4kcHP9hDg7/MAQE/w0B + Af8CMDD/AH9//wCkpP8Aubn/Aa6u/xo8PP9+AAD/tQAA/7wAAP+/AAD/wgAA/8UAAP/IAAD/ywAA/80A + AP/JAAD/pwAA/2YAAP8tAAD/GggI/zIGBv9/AwP/xgoK/+AWFv/nJSX/4S8v9LQ8PJ6MjIwz3NzcFv// + /wr///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALBHR361U1PwskpK/6Q1 + Nf+NIiL/YxER/zMICP8QBAT/AzEx/wB0dP8Bj4//Dk1N/1sAAP+lAAD/swAA/7cAAP+6AAD/vQAA/8AA + AP/DAAD/xQAA/8gAAP/LAAD/wQAA/50AAP90AQH/ZgMD/4UHB/+/DAz/3BcX/+MjI//eLi70tzo6oYeH + hzHV1dUY////C////wT///8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACwRkZ1tVJS5LRNTf+oPDz/jygo/2gaGv85ERH/FwkJ/wssLP8NSEj/OwEB/5MBAf+qAAD/rgAA/7IA + AP+1AAD/uAAA/7sAAP++AAD/wQAA/8QAAP/GAAD/xwEB/74DA/+uBwf/rQwM/8ASEv/XGxv/3iQk/9Qs + LOu1NzeUgoKCK9vb2xX///8L////Bf///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAr0REWrNOTsu2UFD/q0JC/5MyMv9wJSX/SBgY/zYREf9FCgr/fgUF/6ID + A/+nAQH/qgAA/60AAP+wAQH/swEB/7YAAP+5AAD/vAAA/78AAP/DAwP/xgYG/8gJCf/JEhL/zBoa/9Uh + If/bKir/ySws1a04OHeSkpIj29vbFf///wz///8H////Av///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK0+PimxSkqctVJS77BNTf+fQkL/hzQ0/3sp + Kf+IISH/oBgY/6cREf+pDQ3/qgkJ/60ICP+wCAj/sggI/7UICP+5CQn/vAoK/78MDP/DEBD/xxYW/8sb + G//QJCT/1Sws/9AtLfG8Ly+snERERri4uBnw8PAR////DP///wf///8CAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsEREU7FK + SrKyUFD1rUxM/6lDQ/+tPDz/sDMz/68qKv+vJSX/ryAg/7EdHf+zHBz/thwc/7kcHP+8Hh7/vyEh/8Mj + I//HJSX/yioq/84uLv/OMTH1viwsuq0wMGOLi4sW0tLSEf///w7///8L////Bv///wMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACrPDxMsEZGnbRMTNq6UVH/ukxM/7lGRv+5QkL/uj4+/7s8PP+9Ojr/vjg4/8A3 + N//EOjr/xjw8/8o9Pf/MPT3/wzY23LswMKKtLi5XaWlpEdXV1Qz///8M////C////wn///8G////A/// + /wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALEzMwqzQEBQskNDirVGRrW5SEjUvEpK6sFN + TfjDTU3+xEtL+MNJSerBRETWvj09t7k5OY+uMTFYejc3F5+fnwj///8H////CP///wn///8I////Bv// + /wT///8C////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////Af///wL///8E////BP///wb///8H////B/// + /wb///8E////Av///wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + AAH//wAA//gAAD//AAD/wAAAD/8AAP+AAAAD/wAA/gAAAAH/AAD4AAAAAP8AAOAAAAAAfwAA4AAAAAA/ + AADAAAAAAB8AAIAAAAAADwAAgAAAAAAPAAAAAAAAAAcAAAAAAAAABwAAAAAAAAADAAAAAAAAAAMAAAAA + AAAAAwAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAB + AAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAA + AAAAAQAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAwAAwAAAAAADAADAAAAAAAMAAOAAAAAAAwAA4AAAAAAD + AADwAAAAAAcAAPgAAAAADwAA/AAAAAAPAAD+AAAAAB8AAP8AAAAAHwAA/4AAAAB/AAD/4AAAAP8AAP/4 + AAAA/wAA//4AAAH/AAD///8AB/8AACgAAAAgAAAAQAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABBQUFA0AAAAUAAAAGgAA + AB8AAAAiAAAAIgAAAB8AAAAaAAAAFAAAAAwAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAgIACICAgCCEhIRceHh4qGBgYPxYW + FlATExNcEhISZhEREWsODg5rDQ0NZQsLC1oDAwNMBAQEOwAAACYAAAAUAAAABwAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BgICABkNDQxc8PDwzbDQ0Zac6 + OqLHRkbJ4FdX4vFnZ/L8dnb8/H9//PCEhPPbgIDkvHNzzo1aWrA9KiqFBQUFYQQEBEcAAAApAAAAEQAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BgICAAnR0dAtVVVUnkDg4bsUu + LrrsOTnr/0tL//9cXP//cnL//4OD//+Rkf//m5v//6Ki//+oqP//qqr//6ur/+ienu2veHjHVDw8kwUF + BWIAAAA+AAAAGwAAAAYAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AaqqqgN3d3cPX1paM7wy + MqLlMDDo/DAw//8yMv//PT3//0lJ//9ZWf//amr//3x8//+Ojv//n5///6ys//+3t///vLz//729//+6 + uv/kpKTsmW5uuwsKCnQDAwNMAAAAIgAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAP///wH///8DmZmZD5FI + SEfILi678iUl//YkJP/4HBz/+RcX/+UdHf/SMjL/7zw8//9OTv//YWH//3R0//+Hh///mZn//6qq//+6 + uv//w8P//8fH///ExP//vb3/t4aGzzYpKYYDAwNQAAAAIgAAAAYAAAAAAAAAAAAAAAAAAAAA////A7m5 + uQubSUk/yiYmvusfH//tFRX/6w0N/84ICP+XDAz/dzAw/3mCgv/KPz///0RE//9XV///aGj//3p6//6J + if/5lpb/3paW/76Rkf/SrKz/9MbG///Kyv//wcH/wI6O1DYpKYYDAwNMAAAAGwAAAAMAAAAAAAAAAP// + /wHf398Ifnh4IMMmJrHkFhb/5Q0N/94HB/+yAwP/TwEB/yKurv886+v/YOTk/6VZWf/xRET//1NT//9l + Zf//dnb/+ICA/9h9ff9+UVH/MaKi/2jOzv/Cp6f/9srK///Ly///wcH/t4aGzwsKCnQEBAQ/AAAAEQAA + AAEAAAAA////BJaWlhG7JSWJ3RcX/9kKCv+8AgL/egEB/zUQEP8FvLz/Efr6/zX+/v9Z/f3/fcnJ/9BN + Tf//T0///2Fh//5ycv/odXX/l1RU/yknJ/8G2Nj/Ofj4/37h4f/LsLD/98vL///Kyv//vb3/mW5uuwUF + BWIAAAApAAAABwAAAADf398Iqi8vRswcHN7NDQ3/oQIC/0cAAP8LiIj/Ac3N/wDx8f8H/v7/Kv///0// + //9u8fH/qmNj//FNTf//XFz/+Glp/8tiYv9OKSn/BJGR/wHq6v8h/Pz/XP39/5Hl5f/PtLT/98jI///F + xf/kpKTsVDw8kwQEBEcAAAAUAAAAAaKiogu9IiKczRYW/6wGBv9PAAD/B2tr/wCvr/8Ay8v/AOTk/wD4 + +P8Z/v7/Pv///2D9/f99ysr/zE5O//5VVf/oW1v/kkJC/x0dHf8Aycn/AO/v/w7+/v8/////aP39/4/k + 5P/LsLD/9cLC//+5uf+veHjHCAgIYgAAACYAAAAEozMzLcYeHt/ADw//iwMD/ysAAP8CX1//AJaW/wCw + sP8Ay8v/AOXl/wD4+P8l/f3/TP7+/2jx8f+fW1v/5khI/8tISP9OICD/BJeX/wDj4/8A8fH/AP39/x38 + /P84+vr/V/b2/4Lb2//BpaX/8re3/+ienu09KiqFBAQEOwAAAAy1JSVuyR8f/7wKCv+IAQH/NwAA/wcA + AP8AZmb/AJOT/wCtrf8Ax8f/AODg/wH19f8u/Pz/UP39/2XExP+wOzv/lTAw/x0cHP8A2Nj/AO3t/wDz + 8/8A9PT/APLy/wPs7P8Y5OT/P9zc/4Krq//cqan//6ur/41aWrADAwNMAAAAFLsmJqTEGxv/vAkJ/6AB + Af9oAAD/KQAA/wYAAP8AZGT/AI+P/wClpf8AwMD/ANzc/wf09P8x/f3/Ru/v/2dQUP9BLS3/A8LC/wD0 + 9P8A9fX/APLy/wDp6f8A3d3/AMzM/wS0tP8ej4//hWVl/+urq///qqr/vHNzzgsLC1oAAAAavioqzMEd + Hf+8Bwf/tQAA/5sAAP9mAAD/KgAA/wcAAP8AWFj/AIKC/wCjo/8Aw8P/AOPj/w75+f8q/Pz/Lu7u/x/u + 7v8J/f3/AP7+/wD6+v8A8/P/AOPj/wDAwP8EgoL/IR0d/2c7O//LfX3/+6qq//+oqP/bgIDkDQ0NZQAA + AB+/Ly/puxwc/7cFBf+5AAD/tgAA/5wAAP9rAAD/NQAA/xMAAP8ECgr/AHZ2/wC0tP8A2Nj/APPz/xD+ + /v8b////F////w7///8I////BPz8/wDm5v8Eo6P/HRsb/04jI/+TRET/0WRk//OCgv/+np7//6Ki//CE + hPMRERFrAAAAIr83N/m3Ghr/swUF/7YAAP+7AAD/uAAA/6QAAP+FAAD/XAAA/yoAAP8HAAD/AI+P/wDW + 1v8A7+//AP39/wv///8N////Dv///xL///8X9fX/InBw/0weHv+TNTX/y01N/+hcXP/4ZWX//nV1//+O + jv//m5v//ICA/BEREWsAAAAivz4++rYhIf+vBQX/sQAA/7YAAP+8AAD/vwAA/7kAAP+hAAD/aAAA/yIA + AP8CPT3/ANfX/wDx8f8A+/v/AP///wP+/v8I/v7/E/7+/yP9/f85zc3/fTY2/9dCQv/4TU3//lNT//9X + V///YWH//319//+QkP/8d3f8EhISZgAAAB++RkbqtCcn/6sICP+sAAD/sQAA/7gAAP++AAD/vwAA/6EA + AP9YAAD/GQ8P/wGtrf8A6+v/APT0/wD5+f8A+Pj/APX1/wD19f8H+fn/H/z8/zz8/P9c09P/qUpK//BA + QP//QED//0RE//9OTv//a2v//4WF//FpafITExNcAAAAGrlFRc+3NTX/qhER/6gCAv+sAAD/sQAA/7AA + AP+PAAD/PwAA/wqcnP8B2dn/AO/v/wD29v8A+Pj/APb2/wDt7f8A4+P/AN/f/wDm5v8H9PT/Lvz8/1H9 + /f9x1dX/qFtb/9BCQv/wNTX//zs7//9bW///c3P/4FlZ4hYWFlAAAAAUtUBApLlBQf+rHBz/pQUF/6YA + AP+kAAD/fwAA/zAAAP8Erq7/AOzs/wD29v8A+fn/APv7/wD5+f8A7+//ANzc/wDBwf8Avr7/AMjI/wDf + 3/8I9fX/NP39/1b9/f9s8fH/e8bG/61BQf/wLy///0pK//9iYv/ISUnKHBwcPwAAAAyxNTVpu0tL/64s + LP+gDAz/hwEB/1gAAP8mDAz/A5qa/wDd3f8A7+//APj4/wD8/P8A/Pz/APX1/wDj4/8BnZ3/AjU1/wB+ + fv8Ap6f/AMHB/wDh4f8G+fn/LP39/0X8/P9Q9PT/YLOz/8UsLP//Pz///09P/6g8PKMZGRkpMzMzBaop + KR+3SUngsD4+/5MZGf9VBAT/EjY2/wKIiP8AsLD/AMzM/wDk5P8A9PT/APv7/wD5+f8A7u7/AcfH/xkN + Df8iAAD/BwAA/wBwcP8ApKT/AMfH/wDk5P8A9fX/E/Pz/yLm5v87n5//uCUl//82Nv/tPDzrbjY2ZiEh + IRcAAAABAAAAALA8PJS0TU3/kS8v/04QEP8RAgL/AWpq/wCWlv8AsLD/AM3N/wDk5P8A8/P/APLy/wDk + 5P8Ki4v/WQAA/2gAAP8qAAD/BAoK/wCFhf8Aqqr/AMfH/wDZ2f8A2Nj/B6Cg/1sKCv/aICD//DU1/8c0 + NLw8PDwzICAgCAAAAAAAAAAAqy0tM7JKSt2jR0f/bScn/ysMDP8GAQH/AGZm/wCUlP8AsLD/AMvL/wDe + 3v8A4eH/BKOj/0AAAP+jAAD/ogAA/10AAP8TAAD/AFpa/wCSkv8AqKj/ALa2/wSQkP9AAgL/uBAQ//Ar + K//lNjbokTo6bkNDQxeAgIACAAAAAAAAAAAAAAAArDY2erRSUv+cRUX/ZSMj/ykMDP8HAgL/AWZm/wCU + lP8Arq7/AMHB/wG6uv8rDQ3/kgAA/8IAAP+7AAD/hQAA/zYAAP8HAAD/AGZm/wCQkP8Eenr/PAIC/6oM + DP/kHx//8jEx/745OaRVVVUngICABgAAAAAAAAAAAAAAAAAAAACcAAABrz4+oLVVVf+cRUX/ZiUl/yoO + Dv8JBAT/AWdn/wCSkv8Ao6P/CXl5/2EAAP+zAAD/wQAA/8IAAP+mAAD/awAA/ywAAP8MAAD/DD4+/zoD + A/+kCQn/3Rwc/+wwMP/KNja8Y19fM4CAgAz///8BAAAAAAAAAAAAAAAAAAAAAAAAAACkIyMdsEJCrbZY + WP+eSUn/bCws/zEVFf8PCQn/BF9f/wZmZv83AAD/kgAA/7UAAP+8AAD/vwAA/7sAAP+eAAD/bQAA/04D + A/9dBwf/oA8P/9cdHf/lKyv/zTIywZFISEeAgIAQgICAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AACkIyMdrz8/obZXV/+hT0//eDs7/0omJv81Fxf/RQwM/38GBv+oAgL/sgIC/7cDA/+7AgL/vwIC/7sD + A/+qCAj/oA4O/7cbG//SJSX/4TAw/8cxMbOcTExAmZmZD6qqqgP///8BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACcAAABrDY2erFNTd6qVlb/lkxM/449Pf+bMTH/qiMj/7AbG/+0Fhb/txUV/7wW + Fv/BGBj/xRsb/8ghIf/LKir/1DIy/9AwMOG+MDCNfnh4IL+/vwz///8DAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApCcnNKk4OJauSEjit1NT/7xRUf++S0v/v0VF/8FC + Qv/CPj7/xT09/8tAQP/OQUH/0D4+/8s1NeLALS2frDU1SJaWlhHf398I////AwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKchIR+uLy9nszo6o7hD + Q86+R0fqw0pK+sZKSvrFRkbrxD4+0L4xMae3KytwozMzLaKiogvf398I////BP///wIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA/4AB//4AAH/4AAA/4AAAD8AAAAeAAAAHgAAAAwAAAAEAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAcAA + AAPAAAAD4AAAB/AAAAf4AAAf/gAAP/+AAH8oAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQYGBggEhISOAsLC0UEBAREAAAANQAAAB0AAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AXxDQy62MzOg20tL3vBtbfP4h4f675SU89aOjuKXZmaxHxQUWgAA + ABoAAAAAAAAAAAAAAAAAAAAA////BKk4OFvdKSnj3ykp/7ZGRv/tV1f//3p6//+dnf/6tLT/6LS0/9+o + qOlbQECNAAAAJQAAAAAAAAAA////A7E5OVDbGRnwogwM/zg2Nv9kr6//uE9P//9eXv/8f3//j1tb/2uG + hv/Rt7f/8rq69Vk/P40AAAAaAAAAAMNcXBnAFBTdYAMD/wdISP8V39//Xv///4iSkv/0VVX/32lp/xsq + Kv8j8fH/jsjI/92+vv/jqqrqJxsbXAAAAASzHx96qAQE/xIoKP8Azs7/A+bm/zn9/f9v5+f/vERE/406 + Ov8BiYn/CfLy/z////+DwcH/1q6u/5hoaLIAAAAdthYWx60AAP87AwP/AGtr/wDIyP8J5+f/Q/7+/1dp + af8fIyP/AO/v/wD19f8B9fX/IuPj/7qamv/YkJDiAAAANbQUFOe6AAD/nwAA/zsCAv8FS0v/AMPD/w/v + 7/8l6ur/DePj/wH///8C39//HG5u/4BLS//0l5f/75SU8wQEBESwFhbzsAAA/7wAAP+yAAD/bQAA/wc3 + N/8A6Oj/B/z8/w7///8Z/v7/Pl9f/9xMTP/9XV3//3p6//iHh/oPDw9GrSMj56cAAP+xAAD/vAAA/1UE + BP8GXFz/APDw/wD5+f8B+Pj/Hfz8/1XJyf+yTEz/8zk5//9WVv/wbm7zEhISOK42NsehBQX/kwAA/zwI + CP8BsbH/APn5/wD8/P8A7+//ANPT/wPk5P8y+Pj/bOnp/4x4eP/wOTn/3E5O3xAQEB+zPj5znB8f/zIM + DP8Arq7/AOTk/wD4+P8A/f3/D3Jy/xgREf8AoqL/Atzc/x/29v87zc3/4DEx/7g2NqAzMzMFsjAwEKVC + QttEFRX/AE9P/wDKyv8A5eX/AtDQ/2gLC/9+AAD/BSws/wDDw/8BvLz/bSAg/90yMuWDREQxAAAAAAAA + AACxNzc4nkZG70EcHP8DUlL/AM7O/yQ7O/+7AAD/sQAA/zwAAP8LRUX/VCQk/9grK/KpOzta////AQAA + AAAAAAAAAAAAALA2NjmYR0feWTo6/zY/P/+AEhL/tA4O/74PD/+oFxf/liUl/8EqKt6xNzdR////AwAA + AAAAAAAAAAAAAAAAAAAAAAAAqBUVDIcuLoWdPz/PuEJC6r9BQfXBPT3rvzExyrYnJ3vBYGAY////AwAA + AAAAAAAAAAAAAPAP/wTAB5YRgAMliQABF/8AAAr/AAAC/wAAAf8AABD/AAC8/wAA+v8AAP7/AAD9/wAB + yf+AAU3/wANP/+AHYf8= + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/directx.ico b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/directx.ico differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/D3D10Tutorial05_WinFormsControl.csproj b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/D3D10Tutorial05_WinFormsControl.csproj new file mode 100644 index 00000000..4c41f650 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/D3D10Tutorial05_WinFormsControl.csproj @@ -0,0 +1,114 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75} + WinExe + Properties + D3D10Tutorial05_WinFormsControl + D3D10Tutorial05_WinFormsControl + v3.5 + 512 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + 3.0 + + + + + + 3.0 + + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + TutorialWindow.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + PreserveNewest + + + PreserveNewest + + + True + Settings.settings + True + + + Form + + + TutorialWindow.cs + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/D3DStructs.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/D3DStructs.cs new file mode 100644 index 00000000..7d285616 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/D3DStructs.cs @@ -0,0 +1,71 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Runtime.InteropServices; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; + +namespace D3D10Tutorial05_WinFormsControl +{ + #region SimpleVertex + [StructLayout(LayoutKind.Sequential)] + public struct SimpleVertex + { + [MarshalAs(UnmanagedType.Struct)] + public Vector3F Pos; + [MarshalAs(UnmanagedType.Struct)] + public Vector4F Color; + } + #endregion + + #region Cube + public class Cube + { + public CubeVertices Vertices = new CubeVertices(); + public CubeIndices Indices = new CubeIndices(); + + [StructLayout(LayoutKind.Sequential)] + public class CubeVertices + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + private SimpleVertex[] vertices = + { + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Color = new Vector4F ( 0.0f, 0.0f, 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Color = new Vector4F ( 0.0f, 1.0f, 0.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Color = new Vector4F ( 0.0f, 1.0f, 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Color = new Vector4F ( 1.0f, 0.0f, 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Color = new Vector4F ( 1.0f, 0.0f, 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Color = new Vector4F ( 1.0f, 1.0f, 0.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Color = new Vector4F ( 1.0f, 1.0f, 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Color = new Vector4F ( 0.0f, 0.0f, 0.0f, 1.0f ) }, + }; + } + + [StructLayout(LayoutKind.Sequential)] + public class CubeIndices + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 36)] + private uint[] indices = + { + 3,1,0, + 2,1,3, + + 0,5,4, + 1,5,0, + + 3,4,7, + 0,4,3, + + 1,6,5, + 2,6,1, + + 2,7,6, + 3,7,2, + + 6,4,5, + 7,4,6 + }; + } + } + #endregion +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Program.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Program.cs new file mode 100644 index 00000000..a3c75360 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Program.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; + +namespace D3D10Tutorial05_WinFormsControl +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new TutorialWindow()); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..3f37a524 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("D3D10Tutorial05_WinFormsControl")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c4d21605-d6db-4779-a72c-4cca985fa5cf")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Properties/Resources.Designer.cs new file mode 100644 index 00000000..c681b287 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial05_WinFormsControl.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("D3D10Tutorial05_WinFormsControl.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Properties/Settings.Designer.cs new file mode 100644 index 00000000..77731022 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial05_WinFormsControl.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Tutorial05.fx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Tutorial05.fx new file mode 100644 index 00000000..2134bec2 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Tutorial05.fx @@ -0,0 +1,63 @@ +//-------------------------------------------------------------------------------------- +// File: Tutorial05.fx +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + +//-------------------------------------------------------------------------------------- +// Constant Buffer Variables +//-------------------------------------------------------------------------------------- +matrix World; +matrix View; +matrix Projection; + +//-------------------------------------------------------------------------------------- +struct VS_INPUT +{ + float4 Pos : POSITION; + float4 Color : COLOR; +}; + +struct PS_INPUT +{ + float4 Pos : SV_POSITION; + float4 Color : COLOR; +}; + + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +PS_INPUT VS( VS_INPUT input ) +{ + PS_INPUT output = (PS_INPUT)0; + output.Pos = mul( input.Pos, World ); + output.Pos = mul( output.Pos, View ); + output.Pos = mul( output.Pos, Projection ); + output.Color = input.Color; + + return output; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( PS_INPUT input) : SV_Target +{ + return input.Color; +} + + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS() ) ); + } +} + + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Tutorial05.fxo b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Tutorial05.fxo new file mode 100644 index 00000000..34736379 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Tutorial05.fxo differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/TutorialWindow.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/TutorialWindow.Designer.cs new file mode 100644 index 00000000..00a1eb28 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/TutorialWindow.Designer.cs @@ -0,0 +1,64 @@ +namespace D3D10Tutorial05_WinFormsControl +{ + partial class TutorialWindow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TutorialWindow)); + this.directControl = new Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl(); + this.SuspendLayout(); + // + // directControl + // + this.directControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.directControl.Location = new System.Drawing.Point(0, 0); + this.directControl.Name = "directControl"; + this.directControl.Size = new System.Drawing.Size(624, 442); + this.directControl.TabIndex = 4; + this.directControl.SizeChanged += new System.EventHandler(this.directControl_SizeChanged); + // + // TutorialWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(624, 442); + this.Controls.Add(this.directControl); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "TutorialWindow"; + this.Text = "Direct3D 10 Tutorial 5: 3D Transformation"; + this.Load += new System.EventHandler(this.TutorialWindow_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.TutorialWindow_FormClosing); + this.ResumeLayout(false); + + } + + #endregion + + private Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl directControl; + } +} + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/TutorialWindow.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/TutorialWindow.cs new file mode 100644 index 00000000..0172abb5 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/TutorialWindow.cs @@ -0,0 +1,374 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.IO; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using System.Windows.Media.Media3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; +using Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; +using DXUtil = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; + +namespace D3D10Tutorial05_WinFormsControl +{ + /// + /// This application demonstrates animation using matrix transformations + /// + /// http://msdn.microsoft.com/en-us/library/bb172489(VS.85).aspx + /// + /// Copyright (c) Microsoft Corporation. All rights reserved. + /// + public partial class TutorialWindow : Form + { + #region Fields + D3DDevice device; + SwapChain swapChain; + RenderTargetView renderTargetView; + Texture2D depthStencil; + DepthStencilView depthStencilView; + ColorRgba backColor = new ColorRgba(0.0F, 0.125F, 0.3F, 1.0F); + + Effect effect; + EffectTechnique technique; + InputLayout vertexLayout; + D3DBuffer vertexBuffer; + D3DBuffer indexBuffer; + + EffectMatrixVariable worldVariable; + EffectMatrixVariable viewVariable; + EffectMatrixVariable projectionVariable; + + Cube cube = new Cube(); + + Matrix4x4F viewMatrix; + Matrix4x4F projectionMatrix; + + float t = 0f; + uint dwTimeStart = (uint)Environment.TickCount; + bool needsResizing; + #endregion + + #region TutorialWindow() + /// + /// Initializes a new instance of the class. + /// + public TutorialWindow() + { + InitializeComponent(); + } + #endregion + + #region TutorialWindow_Load() + private void TutorialWindow_Load(object sender, EventArgs e) + { + InitDevice(); + directControl.Render = this.RenderScene; + } + #endregion + + #region directControl_SizeChanged() + private void directControl_SizeChanged(object sender, EventArgs e) + { + needsResizing = true; + } + #endregion + + #region TutorialWindow_FormClosing() + private void TutorialWindow_FormClosing(object sender, FormClosingEventArgs e) + { + directControl.Render = null; + device.ClearState(); + } + #endregion + + #region InitDevice() + /// + /// Create Direct3D device and swap chain + /// + protected void InitDevice() + { + device = D3DDevice.CreateDeviceAndSwapChain(directControl.Handle); + swapChain = device.SwapChain; + + SetViews(); + + // Create the effect + using (FileStream effectStream = File.OpenRead("Tutorial05.fxo")) + { + effect = device.CreateEffectFromCompiledBinary(new BinaryReader(effectStream)); + } + + // Obtain the technique + technique = effect.GetTechniqueByName("Render"); + + // Obtain the variables + worldVariable = effect.GetVariableByName("World").AsMatrix; + viewVariable = effect.GetVariableByName("View").AsMatrix; + projectionVariable = effect.GetVariableByName("Projection").AsMatrix; + + InitVertexLayout(); + InitVertexBuffer(); + InitIndexBuffer(); + + // Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList; + + InitMatrices(); + needsResizing = false; + } + #endregion + + #region SetViews() + private void SetViews() + { + // Create a render target view + using (Texture2D pBuffer = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView(pBuffer); + } + + // Create depth stencil texture + Texture2DDescription descDepth = new Texture2DDescription() + { + Width = (uint)directControl.ClientSize.Width, + Height = (uint)directControl.ClientSize.Height, + MipLevels = 1, + ArraySize = 1, + Format = Format.D32Float, + SampleDescription = new SampleDescription() + { + Count = 1, + Quality = 0 + }, + BindingOptions = BindingOptions.DepthStencil, + }; + + depthStencil = device.CreateTexture2D(descDepth); + + // Create the depth stencil view + DepthStencilViewDescription depthStencilViewDesc = new DepthStencilViewDescription() + { + Format = descDepth.Format, + ViewDimension = DepthStencilViewDimension.Texture2D + }; + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc); + + //bind the views to the device + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { renderTargetView }, depthStencilView); + + // Setup the viewport + Viewport vp = new Viewport() + { + Width = (uint)directControl.ClientSize.Width, + Height = (uint)directControl.ClientSize.Height, + MinDepth = 0.0f, + MaxDepth = 1.0f, + TopLeftX = 0, + TopLeftY = 0 + }; + + device.RS.Viewports = new Viewport[] { vp }; + } + #endregion + + #region InitVertexLayout() + private void InitVertexLayout() + { + // Define the input layout + // The layout determines the stride in the vertex buffer, + // so changes in layout need to be reflected in SetVertexBuffers + InputElementDescription[] layout = + { + new InputElementDescription() + { + SemanticName = "POSITION", + SemanticIndex = 0, + Format = Format.R32G32B32Float, + InputSlot = 0, + AlignedByteOffset = 0, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0 + }, + new InputElementDescription() + { + SemanticName = "COLOR", + SemanticIndex = 0, + Format = Format.R32G32B32A32Float, + InputSlot = 0, + AlignedByteOffset = 12, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0 + }, + }; + + PassDescription passDesc = technique.GetPassByIndex(0).Description; + + vertexLayout = device.CreateInputLayout( + layout, + passDesc.InputAssemblerInputSignature, + passDesc.InputAssemblerInputSignatureSize); + + device.IA.InputLayout = vertexLayout; + } + #endregion + + #region InitVertexBuffer() + private void InitVertexBuffer() + { + IntPtr verticesData = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Vertices)); + Marshal.StructureToPtr(cube.Vertices, verticesData, true); + + BufferDescription bufferDesc = new BufferDescription() + { + Usage = Usage.Default, + ByteWidth = (uint)Marshal.SizeOf(cube.Vertices), + BindingOptions = BindingOptions.VertexBuffer, + CpuAccessOptions = CpuAccessOptions.None, + MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + }; + + SubresourceData InitData = new SubresourceData() + { + SystemMemory = verticesData + }; + + //D3DBuffer buffer = null; + vertexBuffer = device.CreateBuffer(bufferDesc, InitData); + + // Set vertex buffer + uint stride = (uint)Marshal.SizeOf(typeof(SimpleVertex)); + uint offset = 0; + device.IA.SetVertexBuffers( + 0, + new D3DBuffer[] { vertexBuffer }, + new uint[] { stride }, + new uint[] { offset }); + Marshal.FreeCoTaskMem(verticesData); + } + #endregion + + #region InitIndexBuffer() + private void InitIndexBuffer() + { + IntPtr indicesData = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Indices)); + Marshal.StructureToPtr(cube.Indices, indicesData, true); + + BufferDescription bufferDesc = new BufferDescription() + { + Usage = Usage.Default, + ByteWidth = (uint)Marshal.SizeOf(cube.Indices), + BindingOptions = BindingOptions.IndexBuffer, + CpuAccessOptions = CpuAccessOptions.None, + MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + }; + + SubresourceData initData = new SubresourceData() + { + SystemMemory = indicesData + }; + + indexBuffer = device.CreateBuffer(bufferDesc, initData); + device.IA.IndexBuffer = new IndexBuffer(indexBuffer, Format.R32UInt, 0); + Marshal.FreeCoTaskMem(indicesData); + } + #endregion + + #region InitMatrices() + private void InitMatrices() + { + // Initialize the view matrix + Vector3F Eye = new Vector3F( 0.0f, 4.0f, -10.0f ); + Vector3F At = new Vector3F( 0.0f, 0.0f, 0.0f ); + Vector3F Up = new Vector3F( 0.0f, 1.0f, 0.0f ); + + viewMatrix = DXUtil.Camera.MatrixLookAtLH(Eye, At, Up); + + // Initialize the projection matrix + projectionMatrix = DXUtil.Camera.MatrixPerspectiveFovLH((float)Math.PI * 0.25f, ((float)this.ClientSize.Width / (float)this.ClientSize.Height), 0.1f, 100.0f); + + // Update Variables that never change + viewVariable.Matrix = viewMatrix; + projectionVariable.Matrix = projectionMatrix; + } + #endregion + + #region RenderScene() + /// + /// Render the frame + /// + protected void RenderScene() + { + if (needsResizing) + { + needsResizing = false; + renderTargetView.Dispose(); + SwapChainDescription sd = swapChain.Description; + swapChain.ResizeBuffers(sd.BufferCount, (uint)directControl.ClientSize.Width, (uint)directControl.ClientSize.Height, sd.BufferDescription.Format, sd.Options); + SetViews(); + // Update the projection matrix + projectionMatrix = DXUtil.Camera.MatrixPerspectiveFovLH((float)Math.PI * 0.25f, ((float)directControl.ClientSize.Width / (float)directControl.ClientSize.Height), 0.1f, 100.0f); + projectionVariable.Matrix = projectionMatrix; + } + Matrix4x4F worldMatrix1; + Matrix4x4F worldMatrix2; + + t = (Environment.TickCount - dwTimeStart) / 50.0f; + + // 1st Cube: Rotate around the origin + //WPF transforms used here use degrees as opposed to D3DX which uses radians in the native tutorial + //360 degrees == 2 * Math.PI + //world1 matrix rotates the first cube by t degrees + RotateTransform3D rt1 = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), t)); + worldMatrix1 = rt1.Value.ToMatrix4x4F(); + + // 2nd Cube: Rotate around the 1st cube + Transform3DGroup tg = new Transform3DGroup(); + //spin the cube + tg.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 0, 1), -t))); + //scale it down + tg.Children.Add(new ScaleTransform3D(0.3, 0.3, 0.3)); + //translate it (move to orbit) + tg.Children.Add(new TranslateTransform3D(-4, 0, 0)); + //orbit around the big cube + tg.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), -2 * t))); + worldMatrix2 = tg.Value.ToMatrix4x4F(); + + // Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor); + + // Clear the depth buffer to 1.0 (max depth) + device.ClearDepthStencilView(depthStencilView, ClearOptions.Depth, 1.0f, (byte)0); + + TechniqueDescription techDesc = technique.Description; + + // + // Update variables that change once per frame + // + worldVariable.Matrix = worldMatrix1; + + // + // Render the 1st cube + // + for (uint p = 0; p < techDesc.Passes; ++p) + { + technique.GetPassByIndex(p).Apply(); + device.DrawIndexed(36, 0, 0); + } + + // + // Render the 2nd cube + // + worldVariable.Matrix = worldMatrix2; + for (uint p = 0; p < techDesc.Passes; ++p) + { + technique.GetPassByIndex(p).Apply(); + device.DrawIndexed(36, 0, 0); + } + + swapChain.Present(0, PresentOptions.None); + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/TutorialWindow.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/TutorialWindow.resx new file mode 100644 index 00000000..0dd393c3 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/TutorialWindow.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAAABABoBgAAlgAAACAgEAAAAAQA6AIAAP4GAAAQEBAAAAAEACgBAADmCQAAMDAAAAAA + CACoDgAADgsAACAgAAAAAAgAqAgAALYZAAAQEAAAAAAIAGgFAABeIgAAMDAAAAAAIACoJQAAxicAACAg + AAAAACAAqBAAAG5NAAAQEAAAAAAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAAAA + AAD//wAA////AACAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMy2t7a2bMzMzMzMzMzMzMzMzMzMzMzMu7a3tnd2d2ZszMzMzMzMzMzMzMzMzMy7t7tr + a2dnZmZmbMzMzMzMzMzMzMzMzLu7e2tnZnZmZmZmZmzMzMzMzMzMzMzMy7u3u7e2tmdmZmZmZmbMzMzM + zMzMzMzMt7e7u3tra2Z2ZmZmZmZszMzMzMzMzMzLu7u7u7u7d7Z2ZmZmZmZmzMzMzMzMzMx7O7u7s3N7 + trd2tmZmZuZmbMzMzMzMzMu7u7uzNye7e2trZmd3ZmZmZszMzMzMzLO7u7MzqmZ3t7Z3ZrdyZmbmZmzM + zMzMy7u7s7MKqqZre2t2t3AqpmZmZmbMzMzMx7OzuzIqqqpnt7a3ZzIqamZm5mbMzMzMO7u7syKqqqpm + e3trYzKqqmZmZmZszMzMu7OzMiqqqqpqe7a2syKqqmpmZmZszMzLszszIiqqqqqmd7t7cCqqqqamZmZm + zMzHu7swAiKqqqqqZ3u3MCqqqqpqZmZmzMzLMzMzACIqKqqqZ7t7Aqqqqqqqd2ZmzMzLO7szMAIiqqqq + anszIqqqqqoid2ZmzMxzszOzMwAiIqqqpmMyKqqqqqIie2ZnbMy7O7OzszAAIiqqqqd6qqqqoiIzd2Zm + bMw3szs7OzMwAiKqqqqqqqqqIDN3tmZ2bMy7M7OzuzszACKqqqqqqqoiA3trZrZmvMxzOzOzs7O7MAIq + qqqqqqcjN7a3t2ZnfMw7M7Ozs7s7MwIqqqqqqqoje3t3a3d2fMx7OzM7O7O7MzAqqqqqqqpnt7e7trZ3 + fMy3MzOzuzuzswKqqqqqqqqme7tra2dnfMx7M7M7M7O7MwKqqqqqqqpqZ7u7u7a2vMx3szszs7OzMqqq + qqqqqqqmpnu7t7tnfMzLczM7OzswKqqqqqoqKqqqpme7u7e7zMzHOzOzMzMCqqqqqqIiKqqqpqZ7u7e2 + zMzLc7MzMzKqqqqqqiIAIiqqqmpnu7t7zMzMtzMzMCKqqqqqqgMwACIqqqqne7e8zMzMN7MzAiqqqqqq + ojMzACIqqqqnO3u8zMzMxzszACKqqqqqIDszMwIiqqIjO7vMzMzMy3MzAAIiqqqqA7O7MwAiIqIDu3vM + zMzMzHtzMwAioqqiM7s7szMCIiAzu7zMzMzMzMe3MwAiKqojM7O7O7MAIgO7u8zMzMzMzMx7MzAAIqID + O7OzuzMwAzO7vMzMzMzMzMzHdzMAAiIzszuzs7MzM7t7zMzMzMzMzMzMtzcwACMzOzM7OzuzM3u8zMzM + zMzMzMzMx7s3MDMzs7Ozs7Ozu7vMzMzMzMzMzMzMzHdzMzOzMzs7Ozs7t7zMzMzMzMzMzMzMzMy3d7cz + s7M7O3u3vMzMzMzMzMzMzMzMzMzMt3t7e3t7e7e8zMzMzMzMzMzMzMzMzMzMzMe3t7e3t8zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz///////8AAP///////wAA///AH///AAD//AAB//8AAP/w + AAB//wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/AAD8AAAAAf8AAPgAAAAA/wAA8AAAAAB/ + AADgAAAAAD8AAOAAAAAAPwAAwAAAAAAfAADAAAAAAB8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAIAA + AAAADwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAADAAAAAAB8AAMAA + AAAAHwAA4AAAAAA/AADgAAAAAD8AAPAAAAAAfwAA+AAAAAD/AAD8AAAAAf8AAP4AAAAD/wAA/wAAAAf/ + AAD/gAAAD/8AAP/AAAAf/wAA//AAAH//AAD//AAB//8AAP//gA///wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgIAAgAAAAIAAgACAgAAAwMDAAICA + gAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzLe2tmbMzMzMzMzMzMzMy3dnZ2ZmZmzMzMzMzMzMzHu7t3ZmZmZmzMzMzMzMzHu7u7 + t7a2ZmZmbMzMzMzMu7uzd3trZmZ2ZmbMzMzMy7uzMqZ7tnd3dmZmbMzMzMuzMCqma2t2cKpmZmzMzMy7 + MyKqqqe2tzKqpmZmzMzLszIqqqpmu3cKqqamZmzMyzMCIqqqpndzKqqqZmZszMszACIqqqprMKqqqqp2 + bMxzszACIiqqpzKqqqoidmbMOzszACIqqqqqqqqiA3ZmzLs7MzAAIqqqqqqiA3dmZsxzM7MzMAKqqqqq + I3trdmfMu7M7OzMAqqqqqqO3trdmzHMzs7MzAqqqqqqqe3t3a8x7OzszMqqqqqqqpme7trbMtzMzMCqq + qqqiqqqmZ7trzMtzMwKqqqqiAiKqqqZ7fMzHszAqqqqqoAAiqqqiu7zMw3MwIiqqqiMwAiqqI7e8zMy3 + MAIiqqIzMwIiIjO7zMzMx3MAIiogM7MAIiM7vMzMzMNzcAIiIzszMAIDu7zMzMzMdzMwIgM7OzMzO3vM + zMzMzMt3MwMzs7OzM7u8zMzMzMzMx3c3Mzs7O7e8zMzMzMzMzMw3e3t7e7e7zMzMzMzMzMzMzMN7e3t8 + zMzMzMzM////////////4B///wAD//4AAf/4AAB/8AAAP+AAAB/gAAAfwAAAD4AAAAeAAAAHgAAABwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AAAAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gA + AH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzM + zMzMzMzMzMzLZmbMzMzMy7e2ZmbMzMyzB3dndmzMyzKqe3CmZszDCqpnMqpmzLMyqqcKqqZsOzAqqqqi + dmwzszCqqie2bDMzMqqqZ7tsMzAqqqqme7zDAqqiAqqrzMcyqqMwojvMzHMqCzAjvMzMxzIzMzvMzMzM + xze7zMzM//+zMPg/a2vgD6pmwAfMzIADMyKAA6e2AAGqpgABzMwAATIqAAFmuwABqqaAA2zMgAMCIsAH + pnfgD6qq+D9szCgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWAAAA0QAAAM4A + AADNAAAAywAAAMgAAADGAAAAxQAAAMIAAADBAAAAvgAAALwAAAC6AAAAtwAAALUAAACzAAAAsAAAAK0A + AACpAAAApgAAAJwAAABzAAAAZwAAADwAAACiAQEAkgEBAN0CAgDAAgIAvQICAH0BAQBWAQEAzgMDAMMD + AwC/AwMAsAMDALQEBACGAwMA5wYGACUBAQDTBgYAxQYGAKQFBQDXBwcAuQcHAMAICABIAwMAMgICALQI + CACtCAgAoQcHAMcKCgD5Dg4AvgsLAOEODgDMDAwAmgoKANIPDwDFEREArQ8PAPoXFwDpFxcApBERANwY + GADJGRkA/iEhALcYGAD0IyMA1B4eAOQiIgBjDw8A7SUlABoEBAD9KioAlxkZAAwCAgClHR0A9SwsADMJ + CQDXJycAuSIiAMYoKAD+NDQAiRwcAPQ0NADnNDQA2jIyAP47OwCqKSkA9j09AP5CQgD+RkYA9ENDAP9J + SQC6NjYAyzw8AGYfHwA1EBAA/05OAPhNTQDlR0cA/1FRAKg3NwD/VVUAu0BAAEkZGQCKMDAA/1paAPZX + VwD2WloA/15eAMhLSwC3RUUA/2FhAG4qKgC/TEwA/2ZmALFHRwDoX18A9mZmALVLSwD/bGwAtk5OAMxZ + WQDmZWUAr01NAKBHRwD/cnIAt1JSADMXFwD2c3MA/3h4ACkUFAD/fX0A/4GBAOl3dwD/hoYA+oODAPaG + hgD/jY0AqF1dAGY5OQD/k5MA5oaGAMVzcwD/mZkA8JOTAP+engD/oqIA+6GhAKNpaQCEVVUA/6amAMuF + hQD/rKwA8KamAP+ysgD0q6sA/7a2APuzswD/ubkA+bW1AP++vgDgqakA/8LCAP/FxQD/yckA6Lm5AP/O + zgCOc3MA/M3NAOzCwgDDq6sAMy0tAAD+/gAA/f0AAPv7AAD5+QAA9/cAAPT0AADx8QAA7+8AAO3tAADp + 6QAA5uYAAOTkAADg4AAA398AANraAADT0wAAyckAAI6OAAB9fQABzs4AAcbGAAHCwgABuroAAbS0AAGt + rQABpKQAAZubAAGHhwAC+fkAAvf3AAF1dQAD//8AA/v7AAX19QAG//8ABubmAAJSUgAJ//8ADP//AAnA + wAAIj48ABmhoAAMxMQAQ8/MAEf7+AAqBgQAGSUkAFv7+AA+qqgAW6+sADH5+AAQoKAAWysoAHf7+ABzX + 1wAo/v4AJujoADT//wAt19cAMuLiADf29gA7/v4ABhgYAEf9/QBU/v4AUPDwAD2wsAAYREQAFj09ABAs + LABO1NQAZPDwAGr29gB29fUAPHx8AC9dXQBarq4Ac93dAIC+vgBDYmIAltTUAIeYmAAAAAAA//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////XGRqcHh+hIeK//// + //////////////////////////////////////////9ISFZaZGpzfoKEh4qNjZCSk/////////////// + ////////////////////////QEBIVlxmc36Eh4qNkJKSk5eXl5mZ//////////////////////////// + /////0xCSEhRWWFteIKHipCSk5mZm5ubm5ubm5v/////////////////////////////QkJMTFFRVllk + anN+hIqNkpmbnaGhoaGfn52d//////////////////////////9GRkxMTEhASFNYWmRteIKHjZKXm6Gj + pKSko6Gfn////////////////////////0ZGRkJCOzszPENVU1lhanN+hYqQl5uho6WlpaSjoZ////// + ////////////////REREPDwzMzMqPWllVVZcZnB4goeKkJecoqaqqaelpKGf//////////////////9E + Pjw8NSUlJRAe/PmoXlhaZG1zfoSHipGYqKirpqmnpaShn////////////////04+PjUlJSUBJKzU5e77 + lWNZYWpzeIKFiY+W+O/7q6qpp6WjoZ3/////////////TkM+NRoaGgQV8MCx4uz0+3JbYWZweH6Ehous + 397u/auqqaeloZ+b////////////Qz44KhoaBB3xw7Kt3Obt+otjWmRqc3iBeozww8rq9f2rqqmnpJ+b + //////////9OQzgnAAAEJPDCtLCt2eTs9P5uW1xkanN7fYDHubDk7fb9q6qppaGdm/////////9DPzYf + AgsW8MS6s7Ct0uLm7fqVY1lcZmx6cfLDtq/c5u32/auqpKOdmf///////1A/OSgHEhbxvsO8t7KuzNnk + 7PT+blhZXGNlgMu8tK/S4urt9v2rpqGfmZf//////1A/MigMGRfr1sfEwLizr8/i5u37i1RRWF5f8cK3 + sq6t0+Lm7PT7q6afmZP//////1A/LBsNGR5H68vHxcG7tbDT5Oz0/mdMVFdg1ru0sK6urrDO3uj5/qKg + mZL//////085LBsKESQeR+vWvsbDvLax2ebt+n1QT0Xww7WxsLCytLe7wd33qKKemZL/////UE9BKxwJ + Cg8ZHiZK27/HxMC3sOLq7v5pX/C9tbGwsbO3u8HH1vGMj5qbmZKN////UE9BKwwKCAcLFBUXSuDWvsXA + ts3k6vPv7+Gyrq+wsrfAxcjxgIyLjpSZl5CK////UE9BIw0LCQcFBxAkHiZK277Eu7PT5OTk4tnPra2v + tsDI8oBxfXqGiI2Tk42H////XU86Ig8NCggFAgIHExUXStHHvbev09zc2dPSz9LQxNaDX2VudXZ+goeQ + ko2E////XU86IhAODAoHBAEAAQ0dLkrLw7myrdLT0s/S09nh+GhpXmNrbXBzeISKkIqC////XU86EREP + DQsIBQIBAAARFibXxrmyrq3MzMzP2eLn92leW1xhZGZqbX6Fiod+////Z1c6EhIRDwwKBwQBAAAEGRfg + xrexrq2tra3P2eLp85ZeWFlZWlxcZHCCh4V4////b109KRMREA4MCQYDAQADGS7WwLOwra2trq2t0+Lm + 7vuLVFFRVlZWWWZ4hYJz////b11LMRMTERANCwgFAgIOHtvBtbGvra6vsbGwrtnk7PX7ckhISEhRUVpw + fnhw////b2dXPSkTEhEPDQoICRIX38CzsK+urrCztri3tLDc5u31+15AQEBASFZmc3Bw/////29XPTEY + ExIRDw0OGWDFt7Kvrq2tsLO6vcK9u7ax3Obt9ftvOzM7O1Fcamb//////29lSz0UGBMSERgW8MKzr6+t + ra2usrvG1svHw8C4sdzm7fX6lTwzM0hWYWT//////29vVz0xFBQUHS3WvLKvrq2tra2xt8bxSuvRyMW9 + uLHc5uzt+qhDM0BRWWT///////93ZUs3GR0eg9bBt7Kvra2tra+zvfEXLSZK28jFvbix2eTq7vlpPkhR + Vv////////90b1dJJB4m0cfCu7Wwra2trrG61S0UFBUuStvIxb24ssnY4/dSPkxWWv//////////d2VX + Uh4m4L/Gwru1sK2usLXFYBIEBREVF0rRyMW9urfA2i06PExW////////////dHdlSUUuSuC/xsK7tbCw + tL3xGQUBAQMQHRdK277FwcLfTRk+RlNi/////////////3d0ZVJFLkrgy8bCu7W0u9YWCgQCAQEDDh0X + StG+x9ZNJDg8TFj///////////////95dGVSRS5K17/Gwru7xhcTCQcFBAMBAw4VLuvW1k0kNjxGU/// + ////////////////f3RlUkUuSte/xsPF8R0OCwoIBwUEAwUTFi5HTR0yPkRU//////////////////// + /393ZVJFTUrXy77bHhMPDQwKCQgHBQQJFBUWJDQ+RFT///////////////////////9/eWVpX2BH8tsX + GRIRDw4NCwoJBwYFITA6OUNEVP//////////////////////////eXl0aXFoYC0dGBMSERAPDQwLCiAo + Mjk/Q05V/////////////////////////////3d/fH1pcVJLPTowMDAvLys0NDk/P05OVVX///////// + ////////////////////////d398dGVlV1dPQUFBQU9PUFBQUFVV//////////////////////////// + //////////90eX95b2dnZ11dXV5eXl5eXv////////////////////////////////////////////9v + cnJycnJubm5eXv////////////////////////////////////////////////////////////////// + ////////////////////////////////AAD///////8AAP//wB///wAA//wAAf//AAD/8AAAf/8AAP/A + AAAf/wAA/4AAAA//AAD/AAAAB/8AAP4AAAAD/wAA/AAAAAH/AAD4AAAAAP8AAPAAAAAAfwAA4AAAAAA/ + AADgAAAAAD8AAMAAAAAAHwAAwAAAAAAfAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAAAA + AAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAgAAAAAAPAACAAAAAAA8AAIAAAAAADwAAwAAAAAAfAADAAAAAAB8AAOAA + AAAAPwAA4AAAAAA/AADwAAAAAH8AAPgAAAAA/wAA/AAAAAH/AAD+AAAAA/8AAP8AAAAH/wAA/4AAAA// + AAD/wAAAH/8AAP/wAAB//wAA//wAAf//AAD//4AP//8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAC9AAAAuwAAALkAAAC2AAAAswAAALEAAAClAAAAowAAAKEA + AACcAAAAkQAAAG0AAABpAAAAZAAAAF0AAABYAAAANgAAADAAAAAqAAAAIgAAABMAAAAHAAAAhgEBAL8C + AgC8AgIAqAICAKECAgBPAQEAQgEBALsDAwCyAwMArQMDAH0CAgC3BAQAiwMDALMFBQC8BwcA3AkJAKUH + BwBVBAQAzgsLALwKCgCqCQkAOwMDAOgNDQAPAQEAXQcHAJcMDACgDg4AvBISAPkaGgDNFhYAWwoKAOcb + GwC2FhYA2hwcAKsXFwDDGxsAuxwcALUbGwDKICAA8ycnAJMZGQBFDAwA0yYmAOUtLQC2JCQA/TQ0APAy + MgDGLCwA+Do6AKwoKAD/PDwA1TMzAP8+PgDpOjoA/0REAPBAQADIOTkAwDc3AP9KSgC3NTUATRcXANdC + QgD/T08A+E1NAM1AQAAqDQ0A5khIACYMDADxTU0Avj09AKw5OQCVMTEA/1VVAMFCQgC6QUEAsT4+AP9b + WwDISUkAvkZGALFCQgBpJycAzU1NAAgDAwD/YmIANBQUAOhcXAD/ZmYAu0tLAPhnZwD/a2sAs0xMALxR + UQD/cnIAkUFBAHk2NgCkS0sA/3Z2AJtISAC2VVUAzmNjAP98fADodXUASyYmAP+EhAD2gYEAqFlZABYM + DAD/jIwAm1hYAGc7OwD+k5MAqmNjANJ9fQD/mpoA/56eAP+iogD/qKgA/6qqAN6WlgD/ra0A+6qqAP+w + sABzUVEA/7i4AOurqwD/u7sA/729APK3twCFZWUA/8PDAL6RkQD/ysoA16urAPXExAD3ysoAwqamAMyx + sQAhHR0AKScnAB0cHAAA//8AAP39AAD7+wAA+PgAAPb2AAD19QAA8/MAAPHxAADv7wAA7e0AAOrqAADm + 5gAA5OQAAOPjAADh4QAA398AAN3dAADY2AAA19cAAM3NAADLywAAx8cAAMPDAADBwQAAtbUAALCwAACt + rQAAqakAAKamAACjowAAlZUAAJKSAABmZgAAZGQAAY2NAAGCggACvLwAA/7+AAPs7AADwsIAApycAAT8 + /AAEtLQABK6uAAJcXAAEl5cAB/n5AAf09AAG2NgABaKiAASRkQADbGwACPX1AAR4eAAJ/v4ADv//AAZm + ZgAQ+voACpycABT//wALiooAFfT0ABz9/QAe6OgAI/39AAk6OgAs/f0ALu7uACKurgAz/f0AHo+PADz8 + /AA86+sAPNXVAEn9/QBG7+8AInBwAFL+/gA2oaEAVPX1AF/9/QAECgoAYOTkAFzT0wBr8fEAaM7OAGO8 + vABx1dUAgN7eAHzIyACQ5eUAfpeXAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////9janB3foKFiP////////////// + /////////////0lJUWNzfoWIiouMjI6Q//////////////////////9ERERJUWNwe4KJjpKUlZSS//// + //////////////9FPj4zMzZKTlVqc36IjJSYmpiVlP//////////////QjY2LSkwdf5XTV9te4KFjZmb + nJqYlP///////////0I2LSYfHOfr9YBOX213f4eR8fienZqYlP//////////OCYZIWvH3Ojz/GhVanN8 + g6HT6vufnZqV/////////zgpGx3ftqrZ5fD3hltjb3p91a3j8/2fnZiS//////9BNCAc1ry3r6bh6vP8 + aF9sdKK3q9rq8/2fnJKQ/////z0yIxPPwby3rqbj7feDWWR90LCqpOHq8vuelo7/////PSoXERbDwr24 + sajl8PliXqK0rKmoqcni7P6bjP///0Y6KgkNExbExb+6s9Lo7pF9yqioqa2zts3pl5OMif//RjolBAoO + ExbPxsC5sNzl5uLZo6WpsLrGoISHj4uF//9GOyIDBAoMERX02Lu0qdrh3trZzK7Uon10en+JioL//1A8 + JAQCAwcXDxMWxbWrpNna2t7g71NeaGxvd4KIfv//XEMgBgQBAAMJDRTktaqlo8jZ3uPsdVRWX19qe4V3 + //9lQysgBgMBAAkQgb2tqKamqKjR4er2dk5LTVVwfnP//2VSORogBgYLHd20q6emp6ywsq7S5fD6gFdF + SWNzbf//YWE5JwcHIRLOrKempaars7rHuLLX6PD3/GZFUWpj////bkgxFxBay7OrpqSkqLDL5Ma/urHR + 5e3y+UZLVf////9uYj8o5MW8tq+opaaruIEUFtbAuK+o4OLxQ0RL/////2JxXlMu1sG8tq+pqa/fEA0T + 9Ma+uLS01DU4RE3//////3F2Z1gWw8G8t7Kx1B0ICA8Vz8K+u9UdMj5H/////////3l4Z1hpw8G9usdY + CwACFxEWw8LYLCs2Rf//////////Ynl4Z1hpw8LA2A4FAAAHDBMu5CwnOEVO////////////Znl4Z2uB + z9sRCwQBAAIKDBwvMThCTP//////////////Znl2dX1rQCEaHyIZGB4rMTxBQkz///////////////// + /3GAeHReSDw3NzI6Oj1GSkr//////////////////////11xeXJuZWBcT1dXV0pK//////////////// + ////////////XGVlZGRkV0//////////////////////////////4B///wAD//4AAf/4AAB/8AAAP+AA + AB/gAAAfwAAAD4AAAAeAAAAHgAAABwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AA + AAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gAAH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvAAAALsAAAC6AAAAsgAAALEAAACwAAAArQAAAKcAAACfAAAAkwAAAH4A + AABtAAAAPAAAAKgEBAChBQUAYAMDADsCAgBVBAQAOwMDAKIMDAC0Dg4Avg8PANEWFgBoCwsA5xoaALsV + FQDFGBgAsxYWADwICACoFxcAgBISAPYuLgDfKSkA4y0tAJwfHwCyJCQAzy0tAOAxMQDzNzcA8zk5APA5 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAJGRkYLISEhHxwcHEB+FxeKtB4exd8o + KOr/ODj//0VF//9QUP//W1v//2Zm//9wcP//eHj//39///+Ghv//jIz//5GR//+Wlv//mZn/2YaG7aNo + aNJZOjquAAAAfwAAAF8AAAA7AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BZmZmBT09PRUwMDA1jB4eiMQa + Gs/0Hh75/ysr//86Ov//SEj//1ZW//9lZf//cXH//319//+Ghv//jo7//5OT//+Zmf//nZ3//6Cg//+k + pP//pqb//6en//+oqP/0oqL5tHl53F9BQbMAAAB9AAAAVgAAAC0AAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wGSkpIHSkpKH3Qp + KV66Hx++6yEh9fsmJv/9Li7//zU1//9DQ///T0///11d//9tbf//enr//4aG//+Pj///l5f//56e//+k + pP//qqr//66u//+wsP//s7P//7Oz//+zs///s7P//7Oz/+6np/ahcXHUNCYmngICAmwAAAA8AAAAFwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////AoCA + gAhEREQimyQkhNAgINz0JSX/9y0t//kvL//8MjL//zQ0//86Ov//RET//1BQ//9aWv//aGj//3R0//9/ + f///ior//5aW//+goP//qqr//7Ky//+3t///vLz//76+//++vv//vb3//7u7//+5uf//t7f/y5GR52VJ + SbcCAgJ5BAQERwAAABoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8DqqqqCU5OTiSsJSWW3CIi7O8lJf/yKir/9Ssr//cqKv/7KCj//iUl//0nJ//4MTH/9zk5//1F + Rf//UVH//19f//9ra///eHj//4WF//+Skv//np7//6mp//+zs///vLz//8LC///Fxf//xsb//8XF///C + wv//vr7//7u7/+KkpPKAXFzDAgICgAAAAEoAAAAaAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wOzs7MKWlpaIrAkJJrfISHz7CUl/+4kJP/wIiL/9B4e//YaGv/5FRX/+BER/+sS + Ev/WICD/3C0t//Q1Nf/+QkL//05O//9bW///Z2f//3V1//+Bgf//jY3//5ub//+mpv//srL//7y8//7D + w//9yMj//svL///Kyv//x8f//8LC//++vv/ura33iGNjxwQEBIAAAABGAAAAFwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////A9XV1QZsbGwariYmkNseHvPnISH/6SAg/+saGv/tFRX/8Q8P//UM + DP/xCQn/1QcH/6EPD/+KLS3/qzk5/983N//7PT3//0lJ//9WVv//YmL//2xs//94eP//hIT//4+P//+a + mv/9paX/9Kur/+Wrq//js7P/7sLC//vMzP/+zs7//8nJ///ExP//v7//7q2t94FeXsMCAgJ5AAAAPAAA + ABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Bo6OjhKoLCxz0iAg6uIbG//kGhr/5hUV/+gP + D//sCQn/7QQE/+MEBP+vAQH/WAcH/0NiYv9anJz/iG5u/8dAQP/1PT3//0ZG//9SUv//Xl7//2ho//9z + c///fHz//4aG//2QkP/wk5P/y4WF/5Rqav+QgYH/u56e/+a+vv/7zs7//8/P///Ly///xMT//76+/+Ol + pfJnSkq3AgICbAAAAC0AAAAIAAAAAAAAAAAAAAAAAAAAAP///wH///8Ev7+/DJg8PEPGISHU3Rsb/98V + Ff/hDg7/4wkJ/+YFBf/kAwP/0AEB/4MBAf8qNTX/CcDA/ybo6P9L6ur/ccDA/6NkZP/hQkL//END//9P + T///Wlr//2Rk//9ubv//eXn//4KC//aGhv/Penr/f09P/zdXV/8/u7v/esXF/7mqqv/pwcH//M7O///P + z///ysr//8PD//+9vf/LkpLnNicnngMDA1cAAAAbAAAAAwAAAAAAAAAAAAAAAP///wL///8HgICAFrch + IajZHR3/2hYW/9sNDf/dBgb/4AIC/98CAv/LAQH/cAAA/x5AQP8Dzc3/APf3/x7///9C/f3/Y/Hx/4S5 + uf/DTk7/9END//5MTP//VVX//2Bg//9qav//c3P//Hx8/+d6ev+eWVn/PCQk/w9/f/8X5ub/VvLy/4vZ + 2f/CsLD/68PD//zOzv//zs7//8jI///AwP//uLj/oXJy1AYGBn8AAAA7AAAACwAAAAAAAAAAAAAAAP// + /wTMzMwKqykpYc0eHvHVFhb/1g4O/9gGBv/aAgL/3AAA/8sAAP9+AAD/GkBA/wO8vP8A8/P/AP7+/xb/ + //81////Vf///3Lh4f+oXl7/5kRE//xGRv//UFD//1pa//9kZP//bW3/9nNz/8lmZv9kNjb/EUdH/wK5 + uf8C9/f/Ov7+/2v39/+X1NT/xrCw/+zDw//9zs7//8zM///Fxf//u7v/7qio92NGRrQDAwNgAAAAHgAA + AAIAAAAAAAAAAP///wZxcXESuyEht9EaGv/RERH/0wYG/9QBAf/XAQH/ywAA/4kAAP8YRkb/AsPD/wDv + 7/8A+fn/AP7+/xD///8o////Rv///2Px8f+JmZn/x01N//RDQ///Skr//1NT//9cXP/8ZWX/5mVl/5tJ + Sf8vGBj/A5ub/wHh4f8A+fn/Jf///0////91+Pj/mdXV/8awsP/swsL//MvL///IyP//v7///7W1/7d+ + ft0GBgaBAAAAOgAAAAoAAAAAAAAAAP///weqJiZVyR0d9MwVFf/ODAz/zgMD/84AAP+7AAD/awAA/xdD + Q/8CsrL/AN/f/wDw8P8A+fn/AP7+/wn///8c////Nv///1X9/f9y39//o2pq/+NDQ//8Q0P//0tL//9U + VP/2Wlr/y1JS/2cuLv8TKyv/ALy8/wDp6f8A+vr/FP///zX///9X////efPz/5vW1v/JsLD/7sLC//zH + x///wcH//7a2//SmpvldPz+vAwMDVwAAABYAAAAAAAAAALOzswq3IyOfyhwc/8kREf/JBwf/xQEB/6kA + AP9hAAD/Ez4+/wKNjf8AuLj/ANHR/wDm5v8A9PT/APz8/wL///8R////KP///0X///9j8vL/ipWV/8xH + R//2PDz//0FB//1JSf/pTEz/oTo6/zQVFf8FeHj/ANbW/wDv7/8A+/v/CP///x////84////V////3X1 + 9f+Zzs7/x6ys/+u9vf/8wMD//ri4//+srP+mbW3TBwcHcQYGBikAAAADAAAAAIVHRxm9ISHaxhkZ/8UM + DP/EBQX/ugAA/40AAP9BAAD/DB0d/wFqav8AnJz/ALa2/wDPz/8A4+P/APLy/wD7+/8G////G////zb/ + //9V+fn/dsLC/6lcXP/kOzv//Tc3//c+Pv/MOTn/aCEh/xI9Pf8Bv7//AObm/wD09P8A/Pz/Af///w3/ + //8a/v7/L/39/0n5+f9o7u7/j8TE/8Ojo//tt7f//Li4//+urv/bjIztFxISiwQEBD4AAAAKAAAAAKgk + JFXFIyP/wxcX/8EJCf/AAgL/twAA/5QAAP9UAAD/GgAA/wMfH/8AcnL/AJaW/wCvr/8Ax8f/ANzc/wDs + 7P8A+Pj/C/7+/yb///9G/f3/Ze3t/4WoqP/DQUH/7i8v/+cwMP+hJyf/OA8P/wZubv8A29v/AO/v/wD4 + +P8A/Pz/AP39/wD8/P8A+fn/BfX1/xXv7/8y4uL/XLq6/5qTk//drKz/+bW1//+trf//n5//ZD8/sQYG + BlEAAAASAAAAALIlJYnCISH/vhQU/74HB/+/AgL/vgAA/60AAP+FAAD/TwAA/xsAAP8DFxf/AGdn/wCM + jP8Apqb/AL29/wDT0/8A6Oj/APf3/xP+/v8z////Uv39/23c3P+eTk7/xyws/7YjI/9dEhL/E0RE/wG4 + uP8A7e3/APb2/wD5+f8A+fn/APX1/wDv7/8A5ub/ANra/wPGxv8Pqqr/N319/41sbP/epKT/+7Oz//+s + rP//np7/mFtbygoKCmIAAAAZAAAAALcoKLG/ISH/uxMT/7sHB/+9AgL/wAAA/78AAP+yAAD/jwAA/1sA + AP8nAAD/CAIC/wFHR/8Afn7/AJub/wC0tP8Az8//AObm/wD5+f8d/v7/Pf///1X09P9wjo7/gjs7/2Qg + IP8gSkr/AsvL/wDt7f8A9/f/APj4/wD39/8A8fH/AOfn/wDZ2f8Ax8f/AZub/whfX/8fOjr/Xjw8/7h5 + ef/wpqb//rGx//+qqv//nZ3/vG1t3RAQEG8AAAAgAAAAALcpKdG8IiL/uRMT/7gGBv+5AQH/vgAA/8MA + AP/EAAD/uwAA/54AAP9uAAD/PAAA/xIAAP8CKyv/AGVl/wCPj/8Ar6//AM/P/wDp6f8D+/v/Jf7+/z39 + /f9I3d3/R7Cw/zGmpv8Sy8v/APX1/wD8/P8A+/v/APn5/wDz8/8A5+f/ANDQ/wCtrf8DhIT/Ej09/zYb + G/9vODj/smFh/+aGhv/7oaH//6ur//+np///mpr/13Z26w8PD3gAAAAlAAAAALksLOe6IyP/thIS/7QE + BP+2AQH/uwAA/8AAAP/FAAD/yQAA/8UAAP+xAAD/iQAA/1cAAP8pAAD/CgAA/wFHR/8Ajo7/ALa2/wDY + 2P8A8PD/DP39/yP///8u/f3/LPj4/yD4+P8R/f3/Bf///wD///8A////APv7/wDq6v8AzMz/BISE/xIt + Lf8xFRX/ZCsr/55HR//MX1//63Nz//qDg///lpb//6Oj//+jo///lpb/63t79RQUFIAGBgYpAAAAALsx + Mfe3IiL/shAQ/7EDA/+zAQH/uAAA/70AAP/CAAD/yAAA/84AAP/OAAD/xAAA/6YAAP91AAD/OQAA/wwA + AP8BUVH/AJub/wDIyP8A5+f/APr6/w3///8Y////Gf///xP///8N////CP///wf///8I////Bubm/wKx + sf8MYWH/KxUV/2IiIv+bOjr/yU9P/+hfX//2Zmb//HBw//94eP//iYn//5mZ//+dnf//kpL/+Hx8+xUV + FYQGBgYrAAAAALs0NP60IiL/rw4O/64DA/+wAAD/tQAA/7oAAP+/AAD/xQAA/8sAAP/RAAD/1QAA/9IA + AP+2AAD/egAA/zEAAP8HDAz/AHd3/wC6uv8A4OD/APX1/wD///8J////C////wr///8H////CP///w3/ + //8T/f3/GsnJ/yZiYv9KGRn/iSgo/8Y+Pv/nTU3/9ldX//xdXf//YGD//2Rk//9tbf//fX3//46O//+X + l///jIz//nh4/xgYGIEGBgYpAAAAALo4OPezJSX/rA8P/6sCAv+tAAD/sgAA/7cAAP+8AAD/wgAA/8gA + AP/OAAD/0wAA/9gAAP/UAAD/rgAA/2gAAP8fAAD/AzU1/wChof8A4OD/APT0/wD9/f8B////A////wP/ + //8E////B////xD///8d/f3/LdfX/0h9ff+FMDD/zTc3//NDQ//9S0v//09P//9SUv//VVX//1hY//9e + Xv//cHD//4OD//+QkP//hob/+G5u/BkZGXsHBwcmAAAAALg+PuizKyv/qhIS/6gCAv+qAAD/rgAA/7MA + AP+5AAD/vgAA/8QAAP/KAAD/0AAA/9YAAP/aAAD/ygAA/5MAAP86AAD/CCUl/wCgoP8A5eX/APb2/wD9 + /f8A////AP///wD///8B////Bv///xD///8h////N/b2/1PKyv+IWlr/zz4+//k9Pf//QED//0ND//9G + Rv//SEj//0pK//9QUP//YmL//3h4//+IiP//gID/7GJi9RsbG3IICAghAAAAALZBQdOzMDD/qRUV/6UE + BP+nAQH/qwAA/7AAAP+1AAD/ugAA/8AAAP/GAAD/zAAA/9IAAP/XAAD/zQAA/5UAAP8xAAD/BWpq/wDM + zP8A8PD/APn5/wD+/v8A/v7/AP///wD9/f8A/v7/Af7+/wv///8d////N////1Ly8v9zvr7/qVtb/+g6 + Ov//NDT//zc3//86Ov//Ozv//z4+//9CQv//VVX//2tr//+AgP//eHj/3FdX6R4eHmcKCgoaAAAAALRD + Q7S0ODj/qhwc/6QICP+lAgL/pwAA/6wAAP+xAAD/tgAA/7wAAP/CAAD/yAAA/84AAP/OAAD/tAAA/1EA + AP8PTEz/AcfH/wDt7f8A9/f/APv7/wD+/v8A/f3/APv7/wD39/8A9vb/APj4/wD8/P8R/v7/Kv///0f9 + /f9k9fX/hL+//71PT//6Kir//yoq//8rK///Li7//zAw//82Nv//R0f//2Ji//91df//bm7/xUxM2iMj + I1gAAAASAAAAALFBQYq2QED/rCcn/6QPD/+jBQX/pAAA/6gAAP+tAAD/sgAA/7cAAP+9AAD/wgAA/8EA + AP+oAAD/QQAA/wx/f/8B0ND/APHx/wD4+P8A+/v/AP39/wD9/f8A+Pj/APHx/wDp6f8A5OT/AObm/wDu + 7v8A+fn/FP7+/zH///9P////bPX1/4y6uv/OQED/+x4e//8dHf//Hx///yIi//8oKP//PDz//1VV//9m + Zv//YGD/qkJCwykpKUUAAAAKAAAAALE9PU+3R0f/rS8v/6MVFf+hCAj/oQEB/6QAAP+pAAD/rQAA/7MA + AP+3AAD/tQAA/44AAP8wDw//Bqys/wDn5/8A9fX/APr6/wD8/P8A/v7/AP7+/wD5+f8A8PD/AN/f/wDL + y/8Aw8P/AMjI/wDX1/8A6Oj/APf3/xb9/f80////Uv///2719f+Ltrb/vkZG//UVFf//EBD//xUV//8b + G///MTH//0hI//9bW///Vlb/iDw8nzU1NTBAQEAEAAAAALEzMwqzRUXZsDo6/6YfH/+gDQ3/ngEB/6EA + AP+kAAD/qQAA/6sAAP+iAAD/agAA/xtDQ/8DwsL/APDw/wD6+v8A+/v/AP7+/wD+/v8A/v7/APz8/wD0 + 9P8A29v/AaWl/wFtbf8Ac3P/AJ6e/wC3t/8Azs7/AOTk/wD39/8W/v7/Nf///1H///9p9/f/f9jY/6Rt + bf/qERH//wcH//8REf//Jyf//z4+//9OTv/jSUntSzw8ak1NTR7///8B////AQAAAACwQkKbtEVF/6kq + Kv+hFBT/nQUF/5wAAP+dAAD/mAAA/4AAAP9DAAD/D2pq/wHR0f8A8/P/APv7/wD9/f8A/v7/AP///wD/ + //8A/v7/APf3/wDl5f8CoqL/Cj8//xAFBf8HERH/AVBQ/wCHh/8Ara3/AMrK/wDk5P8A9/f/Fv7+/zH/ + //9L////Xv39/27f3/+LfHz/0Rwc//oPD///IiL//zU1//9BQf+/Pz/MRkZGSWlpaRH///8B////AQAA + AACuPT1LtktL8602Nv+kHx//mgoK/5EBAf9+AAD/UgAA/yYSEv8Jb2//AcbG/wDn5/8A9fX/APv7/wD+ + /v8A////AP///wD+/v8A+/v/APHx/wHJyf8TQUH/PAAA/0oAAP8qAAD/CgEB/wFISP8AiIj/AKur/wDI + yP8A5OT/APb2/xD9/f8n/v7/Ofv7/0bv7/9XtbX/kDQ0/94aGv/6KSn//Tc3//U4OPmVQUGWXV1dLL+/ + vwgAAAAAAAAAAAAAAAAAAAAAsUZGr7JDQ/+nLS3/mxQU/4IGBv9bAQH/JQIC/wdRUf8BmJj/AMHB/wDZ + 2f8A7Oz/APj4/wD+/v8A////AP///wD9/f8A9vb/AN/f/wiPj/9MAAD/lwAA/5sAAP9wAAD/NAAA/wsA + AP8BR0f/AImJ/wCrq/8AyMj/AOTk/wD09P8C+fn/EPPz/xzX1/81e3v/iRkZ/9wbG//3Kyv/+zg4/8w5 + OdVYWFhRi4uLFv///wQAAAAAAAAAAAAAAAAAAAAArT4+UrNLS+6uPT3/nyUl/4MQEP9VBgb/IQEB/wUh + If8Aenr/AKWl/wDCwv8A29v/AO3t/wD4+P8A/v7/AP39/wD5+f8A6+v/BKqq/zMREf+pAAD/ywAA/8gA + AP+sAAD/dwAA/zcAAP8KAAD/AVFR/wCIiP8ArKz/AMnJ/wDf3/8A5ub/Ac7O/wqBgf9JBwf/sA8P/+kd + Hf/3Ly//7TY29p9CQpR0dHQus7OzCv///wMAAAAAAAAAAAAAAAAAAAAAAAAAAK9FRZu0Skr/qDY2/5Ie + Hv9sDg7/NgMD/w8AAP8CKir/AH19/wClpf8AwsL/ANzc/wDt7f8A+Pj/APn5/wDv7/8Bycn/HTs7/5UA + AP/JAAD/0gAA/9MAAP/MAAD/sQAA/3oAAP86AAD/DAAA/wFKSv8AjIz/AK+v/wDFxf8AwcH/CHx8/zUJ + Cf+SBgb/2RMT//AlJf/1MzP/wjw8xGtra0WmpqYX////BP///wEAAAAAAAAAAAAAAAAAAAAAAAAAAKo5 + OSiwSUnKsUhI/6UzM/+MHh7/YwwM/zMEBP8PAQH/Aisr/wB1df8ApaX/AMLC/wDb2/8A6+v/AO7u/wDa + 2v8Oamr/ZgAA/74AAP/LAAD/zgAA/9AAAP/RAAD/zQAA/7QAAP99AAD/PQAA/wsAAP8AWVn/AJCQ/wCe + nv8Ia2v/MwkJ/4kDA//QDQ3/6hwc//AsLP/UODjgjlJSa5WVlSTo6OgL////Av///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACtPz9ZtE9P47FHR/+kMzP/ihwc/2MODv8yBQX/DgEB/wMuLv8Afn7/AKam/wDB + wf8A19f/ANra/wSlpf88AAD/pQAA/8EAAP/FAAD/yAAA/8sAAP/NAAD/0AAA/80AAP+0AAD/dwAA/zEA + AP8GFBT/AmNj/wZhYf8wCwv/hAQE/8oLC//kGBj/7CYm/90xMe6pRESNi4uLLtLS0hH///8F////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0REdLRQUO+xSEj/ozIy/4kcHP9hDg7/MAQE/w0B + Af8CMDD/AH9//wCkpP8Aubn/Aa6u/xo8PP9+AAD/tQAA/7wAAP+/AAD/wgAA/8UAAP/IAAD/ywAA/80A + AP/JAAD/pwAA/2YAAP8tAAD/GggI/zIGBv9/AwP/xgoK/+AWFv/nJSX/4S8v9LQ8PJ6MjIwz3NzcFv// + /wr///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALBHR361U1PwskpK/6Q1 + Nf+NIiL/YxER/zMICP8QBAT/AzEx/wB0dP8Bj4//Dk1N/1sAAP+lAAD/swAA/7cAAP+6AAD/vQAA/8AA + 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 + yf+AAU3/wANP/+AHYf8= + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/directx.ico b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/directx.ico differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/D3D10Tutorial06_WinFormsControl.csproj b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/D3D10Tutorial06_WinFormsControl.csproj new file mode 100644 index 00000000..a10dde50 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/D3D10Tutorial06_WinFormsControl.csproj @@ -0,0 +1,114 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {43D713E1-7B99-4C89-8B31-A2210392B284} + WinExe + Properties + D3D10Tutorial06_WinFormsControl + D3D10Tutorial06_WinFormsControl + v3.5 + 512 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + 3.0 + + + + + + 3.0 + + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + TutorialWindow.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + PreserveNewest + + + PreserveNewest + + + True + Settings.settings + True + + + Form + + + TutorialWindow.cs + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/D3DStructs.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/D3DStructs.cs new file mode 100644 index 00000000..8ad3546d --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/D3DStructs.cs @@ -0,0 +1,91 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Runtime.InteropServices; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; + +namespace D3D10Tutorial06_WinFormsControl +{ + #region SimpleVertex + [StructLayout(LayoutKind.Sequential)] + public struct SimpleVertex + { + [MarshalAs(UnmanagedType.Struct)] + public Vector3F Pos; + [MarshalAs(UnmanagedType.Struct)] + public Vector3F Normal; + } + #endregion + + #region Cube + public class Cube + { + public CubeVertices Vertices = new CubeVertices(); + public CubeIndices Indices = new CubeIndices(); + + [StructLayout(LayoutKind.Sequential)] + public class CubeVertices + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 24)] + private SimpleVertex[] vertices = + { + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Normal = new Vector3F ( 0.0f, 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Normal = new Vector3F ( 0.0f, 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Normal = new Vector3F ( 0.0f, 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Normal = new Vector3F ( 0.0f, 1.0f, 0.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Normal = new Vector3F ( 0.0f, -1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Normal = new Vector3F ( 0.0f, -1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Normal = new Vector3F ( 0.0f, -1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Normal = new Vector3F ( 0.0f, -1.0f, 0.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Normal = new Vector3F ( -1.0f, 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Normal = new Vector3F ( -1.0f, 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Normal = new Vector3F ( -1.0f, 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Normal = new Vector3F ( -1.0f, 0.0f, 0.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Normal = new Vector3F ( 1.0f, 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Normal = new Vector3F ( 1.0f, 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Normal = new Vector3F ( 1.0f, 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Normal = new Vector3F ( 1.0f, 0.0f, 0.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Normal = new Vector3F ( 0.0f, 0.0f, -1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Normal = new Vector3F ( 0.0f, 0.0f, -1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Normal = new Vector3F ( 0.0f, 0.0f, -1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Normal = new Vector3F ( 0.0f, 0.0f, -1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Normal = new Vector3F ( 0.0f, 0.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Normal = new Vector3F ( 0.0f, 0.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Normal = new Vector3F ( 0.0f, 0.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Normal = new Vector3F ( 0.0f, 0.0f, 1.0f ) }, + }; + } + + [StructLayout(LayoutKind.Sequential)] + public class CubeIndices + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 36)] + private uint[] indices = + { + 3,1,0, + 2,1,3, + + 6,4,5, + 7,4,6, + + 11,9,8, + 10,9,11, + + 14,12,13, + 15,12,14, + + 19,17,16, + 18,17,19, + + 22,20,21, + 23,20,22 + }; + } + } + #endregion +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Program.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Program.cs new file mode 100644 index 00000000..037296bc --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Program.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; + +namespace D3D10Tutorial06_WinFormsControl +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new TutorialWindow()); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..55a14461 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("D3D10Tutorial06_WinFormsControl")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c4d21605-d6db-4779-a72c-4cca985fa5cf")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Properties/Resources.Designer.cs new file mode 100644 index 00000000..4505d686 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial06_WinFormsControl.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("D3D10Tutorial06_WinFormsControl.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Properties/Settings.Designer.cs new file mode 100644 index 00000000..85b01532 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial06_WinFormsControl.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Tutorial06.fx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Tutorial06.fx new file mode 100644 index 00000000..0542b0d4 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Tutorial06.fx @@ -0,0 +1,96 @@ +//-------------------------------------------------------------------------------------- +// File: Tutorial06.fx +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + + +//-------------------------------------------------------------------------------------- +// Constant Buffer Variables +//-------------------------------------------------------------------------------------- +matrix World; +matrix View; +matrix Projection; +float4 vLightDir[2]; +float4 vLightColor[2]; +float4 vOutputColor; + + +//-------------------------------------------------------------------------------------- +struct VS_INPUT +{ + float4 Pos : POSITION; + float3 Norm : NORMAL; +}; + +struct PS_INPUT +{ + float4 Pos : SV_POSITION; + float3 Norm : TEXCOORD0; +}; + + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +PS_INPUT VS( VS_INPUT input ) +{ + PS_INPUT output = (PS_INPUT)0; + output.Pos = mul( input.Pos, World ); + output.Pos = mul( output.Pos, View ); + output.Pos = mul( output.Pos, Projection ); + output.Norm = mul( input.Norm, World ); + + return output; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( PS_INPUT input) : SV_Target +{ + float4 finalColor = 0; + + //do NdotL lighting for 2 lights + for(int i=0; i<2; i++) + { + finalColor += saturate( dot( (float3)vLightDir[i],input.Norm) * vLightColor[i] ); + } + finalColor.a = 1; + return finalColor; +} + + +//-------------------------------------------------------------------------------------- +// PSSolid - render a solid color +//-------------------------------------------------------------------------------------- +float4 PSSolid( PS_INPUT input) : SV_Target +{ + return vOutputColor; +} + + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS() ) ); + } +} + + +//-------------------------------------------------------------------------------------- +technique10 RenderLight +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PSSolid() ) ); + } +} + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Tutorial06.fxo b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Tutorial06.fxo new file mode 100644 index 00000000..0bfc8607 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Tutorial06.fxo differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/TutorialWindow.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/TutorialWindow.Designer.cs new file mode 100644 index 00000000..799fb114 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/TutorialWindow.Designer.cs @@ -0,0 +1,63 @@ +namespace D3D10Tutorial06_WinFormsControl +{ + partial class TutorialWindow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TutorialWindow)); + this.directControl = new Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl(); + this.SuspendLayout(); + // + // directControl + // + this.directControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.directControl.Location = new System.Drawing.Point(0, 0); + this.directControl.Name = "directControl"; + this.directControl.Size = new System.Drawing.Size(624, 442); + this.directControl.TabIndex = 4; + this.directControl.SizeChanged += new System.EventHandler(this.directControl_SizeChanged); + // + // TutorialWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(624, 442); + this.Controls.Add(this.directControl); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "TutorialWindow"; + this.Text = "Direct3D 10 Tutorial 6: Lighting"; + this.Load += new System.EventHandler(this.TutorialWindow_Load); + this.ResumeLayout(false); + + } + + #endregion + + private Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl directControl; + } +} + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/TutorialWindow.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/TutorialWindow.cs new file mode 100644 index 00000000..e452ead9 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/TutorialWindow.cs @@ -0,0 +1,396 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.IO; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using System.Windows.Media.Media3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; +using Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; +using DXUtil = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; + +namespace D3D10Tutorial06_WinFormsControl +{ + /// + /// This application demonstrates simple lighting in the vertex shader + /// + /// http://msdn.microsoft.com/en-us/library/bb172490(VS.85).aspx + /// + /// Copyright (c) Microsoft Corporation. All rights reserved. + /// + public partial class TutorialWindow : Form + { + #region Fields + D3DDevice device; + SwapChain swapChain; + RenderTargetView renderTargetView; + Texture2D depthStencil; + DepthStencilView depthStencilView; + ColorRgba backColor = new ColorRgba(0.0F, 0.125F, 0.3F, 1.0F); + + Effect effect; + EffectTechnique technique; + EffectTechnique techniqueLight; + + InputLayout vertexLayout; + D3DBuffer vertexBuffer; + D3DBuffer indexBuffer; + + //variables from the .fx file + EffectMatrixVariable worldVariable; + EffectMatrixVariable viewVariable; + EffectMatrixVariable projectionVariable; + + EffectVectorVariable lightDirVariable; + EffectVectorVariable lightColorVariable; + EffectVectorVariable outputColorVariable; + + Cube cube = new Cube(); + + Matrix4x4F viewMatrix; + Matrix4x4F projectionMatrix; + + float t = 0f; + uint dwTimeStart = (uint)Environment.TickCount; + bool needsResizing; + #endregion + + #region TutorialWindow() + /// + /// Initializes a new instance of the class. + /// + public TutorialWindow() + { + InitializeComponent(); + } + #endregion + + #region TutorialWindow_Load() + private void TutorialWindow_Load(object sender, EventArgs e) + { + InitDevice(); + directControl.Render = this.RenderScene; + } + #endregion + + #region directControl_SizeChanged() + private void directControl_SizeChanged(object sender, EventArgs e) + { + needsResizing = true; + } + #endregion + + #region InitDevice() + /// + /// Create Direct3D device and swap chain + /// + protected void InitDevice() + { + device = D3DDevice.CreateDeviceAndSwapChain(directControl.Handle); + swapChain = device.SwapChain; + + SetViews(); + + // Create the effect + using (FileStream effectStream = File.OpenRead("Tutorial06.fxo")) + { + effect = device.CreateEffectFromCompiledBinary(new BinaryReader(effectStream)); + } + + // Obtain the technique + technique = effect.GetTechniqueByName("Render"); + techniqueLight = effect.GetTechniqueByName("RenderLight"); + + // Obtain the variables + worldVariable = effect.GetVariableByName("World").AsMatrix; + viewVariable = effect.GetVariableByName("View").AsMatrix; + projectionVariable = effect.GetVariableByName("Projection").AsMatrix; + + lightDirVariable = effect.GetVariableByName("vLightDir").AsVector; + lightColorVariable = effect.GetVariableByName("vLightColor").AsVector; + outputColorVariable = effect.GetVariableByName("vOutputColor").AsVector; + + InitVertexLayout(); + InitVertexBuffer(); + InitIndexBuffer(); + + // Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList; + + InitMatrices(); + } + #endregion + + #region SetViews() + private void SetViews() + { + // Create a render target view + using (Texture2D pBuffer = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView(pBuffer); + } + + // Create depth stencil texture + Texture2DDescription descDepth = new Texture2DDescription() + { + Width = (uint)directControl.ClientSize.Width, + Height = (uint)directControl.ClientSize.Height, + MipLevels = 1, + ArraySize = 1, + Format = Format.D32Float, + SampleDescription = new SampleDescription() + { + Count = 1, + Quality = 0 + }, + BindingOptions = BindingOptions.DepthStencil, + }; + + depthStencil = device.CreateTexture2D(descDepth); + + // Create the depth stencil view + DepthStencilViewDescription depthStencilViewDesc = new DepthStencilViewDescription() + { + Format = descDepth.Format, + ViewDimension = DepthStencilViewDimension.Texture2D + }; + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc); + + //bind the views to the device + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { renderTargetView }, depthStencilView); + + // Setup the viewport + Viewport vp = new Viewport() + { + Width = (uint)directControl.ClientSize.Width, + Height = (uint)directControl.ClientSize.Height, + MinDepth = 0.0f, + MaxDepth = 1.0f, + TopLeftX = 0, + TopLeftY = 0 + }; + + device.RS.Viewports = new Viewport[] { vp }; + } + #endregion + + #region InitVertexLayout() + private void InitVertexLayout() + { + // Define the input layout + // The layout determines the stride in the vertex buffer, + // so changes in layout need to be reflected in SetVertexBuffers + InputElementDescription[] layout = + { + new InputElementDescription() + { + SemanticName = "POSITION", + SemanticIndex = 0, + Format = Format.R32G32B32Float, + InputSlot = 0, + AlignedByteOffset = 0, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0 + }, + new InputElementDescription() + { + SemanticName = "NORMAL", + SemanticIndex = 0, + Format = Format.R32G32B32Float, + InputSlot = 0, + AlignedByteOffset = 12, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0 + }, + }; + + PassDescription passDesc = technique.GetPassByIndex(0).Description; + + vertexLayout = device.CreateInputLayout( + layout, + passDesc.InputAssemblerInputSignature, + passDesc.InputAssemblerInputSignatureSize); + + device.IA.InputLayout = vertexLayout; + } + #endregion + + #region InitVertexBuffer() + private void InitVertexBuffer() + { + IntPtr verticesData = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Vertices)); + Marshal.StructureToPtr(cube.Vertices, verticesData, true); + + BufferDescription bufferDesc = new BufferDescription() + { + Usage = Usage.Default, + ByteWidth = (uint)Marshal.SizeOf(cube.Vertices), + BindingOptions = BindingOptions.VertexBuffer, + CpuAccessOptions = CpuAccessOptions.None, + MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + }; + + SubresourceData InitData = new SubresourceData() + { + SystemMemory = verticesData + }; + + //D3DBuffer buffer = null; + vertexBuffer = device.CreateBuffer(bufferDesc, InitData); + + // Set vertex buffer + uint stride = (uint)Marshal.SizeOf(typeof(SimpleVertex)); + uint offset = 0; + device.IA.SetVertexBuffers( + 0, + new D3DBuffer[] { vertexBuffer }, + new uint[] { stride }, + new uint[] { offset }); + Marshal.FreeCoTaskMem(verticesData); + } + #endregion + + #region InitIndexBuffer() + private void InitIndexBuffer() + { + IntPtr indicesData = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Indices)); + Marshal.StructureToPtr(cube.Indices, indicesData, true); + + BufferDescription bufferDesc = new BufferDescription() + { + Usage = Usage.Default, + ByteWidth = (uint)Marshal.SizeOf(cube.Indices), + BindingOptions = BindingOptions.IndexBuffer, + CpuAccessOptions = CpuAccessOptions.None, + MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + }; + + SubresourceData initData = new SubresourceData() + { + SystemMemory = indicesData + }; + + indexBuffer = device.CreateBuffer(bufferDesc, initData); + device.IA.IndexBuffer = new IndexBuffer(indexBuffer, Format.R32UInt, 0); + Marshal.FreeCoTaskMem(indicesData); + } + #endregion + + #region InitMatrices() + private void InitMatrices() + { + // Initialize the view matrix + Vector3F Eye = new Vector3F( 0.0f, 4.0f, -10.0f ); + Vector3F At = new Vector3F( 0.0f, 0.0f, 0.0f ); + Vector3F Up = new Vector3F( 0.0f, 1.0f, 0.0f ); + + viewMatrix = DXUtil.Camera.MatrixLookAtLH(Eye, At, Up); + + //// Initialize the projection matrix + projectionMatrix = DXUtil.Camera.MatrixPerspectiveFovLH((float)Math.PI * 0.25f, ((float)this.ClientSize.Width / (float)this.ClientSize.Height), 0.5f, 100.0f); + + // Update Variables that never change + viewVariable.Matrix = viewMatrix; + projectionVariable.Matrix = projectionMatrix; + } + #endregion + + #region RenderScene() + /// + /// Render the frame + /// + protected void RenderScene() + { + if (needsResizing) + { + needsResizing = false; + renderTargetView.Dispose(); + SwapChainDescription sd = swapChain.Description; + swapChain.ResizeBuffers(sd.BufferCount, (uint)directControl.ClientSize.Width, (uint)directControl.ClientSize.Height, sd.BufferDescription.Format, sd.Options); + SetViews(); + // Update the projection matrix + projectionMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixPerspectiveFovLH((float)Math.PI * 0.25f, ((float)directControl.ClientSize.Width / (float)directControl.ClientSize.Height), 0.5f, 100.0f); + projectionVariable.Matrix = projectionMatrix; + } + Matrix4x4F worldMatrix; + + t = (Environment.TickCount - dwTimeStart) / 50.0f; + + //WPF transforms used here use degrees as opposed to D3DX which uses radians in the native tutorial + //360 degrees == 2 * Math.PI + //world matrix rotates the first cube by t degrees + RotateTransform3D rt1 = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), t)); + worldMatrix = rt1.Value.ToMatrix4x4F(); + + //Setup our lighting parameters + Vector4F[] vLightDirs = + { + new Vector4F( -0.577f, 0.577f, -0.577f, 1.0f ), + new Vector4F( 0.0f, 0.0f, -1.0f, 1.0f ) + }; + Vector4F[] vLightColors = + { + new Vector4F ( 0.5f, 0.5f, 0.5f, 1.0f ), + new Vector4F ( 0.5f, 0.0f, 0.0f, 1.0f ) + }; + + //rotate the second light around the origin + //create a rotation matrix + RotateTransform3D rt2 = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 2, 0), -t)); + //rotate vLightDirs[1] vector using the rotation matrix + Vector3D vDir = new Vector3D(vLightDirs[1].X, vLightDirs[1].Y, vLightDirs[1].Z); + vDir = rt2.Transform(vDir); + vLightDirs[1].X = (float)vDir.X; + vLightDirs[1].Y = (float)vDir.Y; + vLightDirs[1].Z = (float)vDir.Z; + + // Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor); + + // Clear the depth buffer to 1.0 (max depth) + device.ClearDepthStencilView(depthStencilView, ClearOptions.Depth, 1.0f, (byte)0); + + // + // Update variables that change once per frame + // + worldVariable.Matrix = worldMatrix; + lightDirVariable.SetFloatVectorArray(vLightDirs); + lightColorVariable.SetFloatVectorArray(vLightColors); + + // + // Render the cube + // + TechniqueDescription techDesc = technique.Description; + for (uint p = 0; p < techDesc.Passes; ++p) + { + technique.GetPassByIndex(p).Apply(); + device.DrawIndexed(36, 0, 0); + } + + // + // Render each light + // + TechniqueDescription techLightDesc = techniqueLight.Description; + for (int m = 0; m < 2; m++) + { + Vector3F vLightPos = new Vector3F(vLightDirs[m].X * 5, vLightDirs[m].Y * 5, vLightDirs[m].Z * 5); + Transform3DGroup tg = new Transform3DGroup(); + tg.Children.Add(new ScaleTransform3D(0.2, 0.2, 0.2)); + tg.Children.Add(new TranslateTransform3D(vLightPos.X, vLightPos.Y, vLightPos.Z)); + worldVariable.Matrix = tg.Value.ToMatrix4x4F(); + outputColorVariable.FloatVector = new Vector4F (vLightColors[m].X, vLightColors[m].Y, vLightColors[m].Z, vLightColors[m].W); + + for (uint p = 0; p < techLightDesc.Passes; ++p) + { + techniqueLight.GetPassByIndex(p).Apply(); + device.DrawIndexed(36, 0, 0); + } + } + + swapChain.Present(0, PresentOptions.None); + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/TutorialWindow.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/TutorialWindow.resx new file mode 100644 index 00000000..0dd393c3 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/TutorialWindow.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAAABABoBgAAlgAAACAgEAAAAAQA6AIAAP4GAAAQEBAAAAAEACgBAADmCQAAMDAAAAAA + CACoDgAADgsAACAgAAAAAAgAqAgAALYZAAAQEAAAAAAIAGgFAABeIgAAMDAAAAAAIACoJQAAxicAACAg + AAAAACAAqBAAAG5NAAAQEAAAAAAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAAAA + AAD//wAA////AACAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMy2t7a2bMzMzMzMzMzMzMzMzMzMzMzMu7a3tnd2d2ZszMzMzMzMzMzMzMzMzMy7t7tr + a2dnZmZmbMzMzMzMzMzMzMzMzLu7e2tnZnZmZmZmZmzMzMzMzMzMzMzMy7u3u7e2tmdmZmZmZmbMzMzM + zMzMzMzMt7e7u3tra2Z2ZmZmZmZszMzMzMzMzMzLu7u7u7u7d7Z2ZmZmZmZmzMzMzMzMzMx7O7u7s3N7 + trd2tmZmZuZmbMzMzMzMzMu7u7uzNye7e2trZmd3ZmZmZszMzMzMzLO7u7MzqmZ3t7Z3ZrdyZmbmZmzM + zMzMy7u7s7MKqqZre2t2t3AqpmZmZmbMzMzMx7OzuzIqqqpnt7a3ZzIqamZm5mbMzMzMO7u7syKqqqpm + e3trYzKqqmZmZmZszMzMu7OzMiqqqqpqe7a2syKqqmpmZmZszMzLszszIiqqqqqmd7t7cCqqqqamZmZm + zMzHu7swAiKqqqqqZ3u3MCqqqqpqZmZmzMzLMzMzACIqKqqqZ7t7Aqqqqqqqd2ZmzMzLO7szMAIiqqqq + anszIqqqqqoid2ZmzMxzszOzMwAiIqqqpmMyKqqqqqIie2ZnbMy7O7OzszAAIiqqqqd6qqqqoiIzd2Zm + bMw3szs7OzMwAiKqqqqqqqqqIDN3tmZ2bMy7M7OzuzszACKqqqqqqqoiA3trZrZmvMxzOzOzs7O7MAIq + qqqqqqcjN7a3t2ZnfMw7M7Ozs7s7MwIqqqqqqqoje3t3a3d2fMx7OzM7O7O7MzAqqqqqqqpnt7e7trZ3 + fMy3MzOzuzuzswKqqqqqqqqme7tra2dnfMx7M7M7M7O7MwKqqqqqqqpqZ7u7u7a2vMx3szszs7OzMqqq + qqqqqqqmpnu7t7tnfMzLczM7OzswKqqqqqoqKqqqpme7u7e7zMzHOzOzMzMCqqqqqqIiKqqqpqZ7u7e2 + zMzLc7MzMzKqqqqqqiIAIiqqqmpnu7t7zMzMtzMzMCKqqqqqqgMwACIqqqqne7e8zMzMN7MzAiqqqqqq + ojMzACIqqqqnO3u8zMzMxzszACKqqqqqIDszMwIiqqIjO7vMzMzMy3MzAAIiqqqqA7O7MwAiIqIDu3vM + zMzMzHtzMwAioqqiM7s7szMCIiAzu7zMzMzMzMe3MwAiKqojM7O7O7MAIgO7u8zMzMzMzMx7MzAAIqID + O7OzuzMwAzO7vMzMzMzMzMzHdzMAAiIzszuzs7MzM7t7zMzMzMzMzMzMtzcwACMzOzM7OzuzM3u8zMzM + zMzMzMzMx7s3MDMzs7Ozs7Ozu7vMzMzMzMzMzMzMzHdzMzOzMzs7Ozs7t7zMzMzMzMzMzMzMzMy3d7cz + s7M7O3u3vMzMzMzMzMzMzMzMzMzMt3t7e3t7e7e8zMzMzMzMzMzMzMzMzMzMzMe3t7e3t8zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz///////8AAP///////wAA///AH///AAD//AAB//8AAP/w + AAB//wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/AAD8AAAAAf8AAPgAAAAA/wAA8AAAAAB/ + AADgAAAAAD8AAOAAAAAAPwAAwAAAAAAfAADAAAAAAB8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAIAA + AAAADwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAADAAAAAAB8AAMAA + AAAAHwAA4AAAAAA/AADgAAAAAD8AAPAAAAAAfwAA+AAAAAD/AAD8AAAAAf8AAP4AAAAD/wAA/wAAAAf/ + AAD/gAAAD/8AAP/AAAAf/wAA//AAAH//AAD//AAB//8AAP//gA///wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgIAAgAAAAIAAgACAgAAAwMDAAICA + gAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzLe2tmbMzMzMzMzMzMzMy3dnZ2ZmZmzMzMzMzMzMzHu7t3ZmZmZmzMzMzMzMzHu7u7 + t7a2ZmZmbMzMzMzMu7uzd3trZmZ2ZmbMzMzMy7uzMqZ7tnd3dmZmbMzMzMuzMCqma2t2cKpmZmzMzMy7 + MyKqqqe2tzKqpmZmzMzLszIqqqpmu3cKqqamZmzMyzMCIqqqpndzKqqqZmZszMszACIqqqprMKqqqqp2 + bMxzszACIiqqpzKqqqoidmbMOzszACIqqqqqqqqiA3ZmzLs7MzAAIqqqqqqiA3dmZsxzM7MzMAKqqqqq + I3trdmfMu7M7OzMAqqqqqqO3trdmzHMzs7MzAqqqqqqqe3t3a8x7OzszMqqqqqqqpme7trbMtzMzMCqq + qqqiqqqmZ7trzMtzMwKqqqqiAiKqqqZ7fMzHszAqqqqqoAAiqqqiu7zMw3MwIiqqqiMwAiqqI7e8zMy3 + MAIiqqIzMwIiIjO7zMzMx3MAIiogM7MAIiM7vMzMzMNzcAIiIzszMAIDu7zMzMzMdzMwIgM7OzMzO3vM + zMzMzMt3MwMzs7OzM7u8zMzMzMzMx3c3Mzs7O7e8zMzMzMzMzMw3e3t7e7e7zMzMzMzMzMzMzMN7e3t8 + zMzMzMzM////////////4B///wAD//4AAf/4AAB/8AAAP+AAAB/gAAAfwAAAD4AAAAeAAAAHgAAABwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AAAAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gA + AH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzM + zMzMzMzMzMzLZmbMzMzMy7e2ZmbMzMyzB3dndmzMyzKqe3CmZszDCqpnMqpmzLMyqqcKqqZsOzAqqqqi + dmwzszCqqie2bDMzMqqqZ7tsMzAqqqqme7zDAqqiAqqrzMcyqqMwojvMzHMqCzAjvMzMxzIzMzvMzMzM + xze7zMzM//+zMPg/a2vgD6pmwAfMzIADMyKAA6e2AAGqpgABzMwAATIqAAFmuwABqqaAA2zMgAMCIsAH + pnfgD6qq+D9szCgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWAAAA0QAAAM4A + AADNAAAAywAAAMgAAADGAAAAxQAAAMIAAADBAAAAvgAAALwAAAC6AAAAtwAAALUAAACzAAAAsAAAAK0A + AACpAAAApgAAAJwAAABzAAAAZwAAADwAAACiAQEAkgEBAN0CAgDAAgIAvQICAH0BAQBWAQEAzgMDAMMD + AwC/AwMAsAMDALQEBACGAwMA5wYGACUBAQDTBgYAxQYGAKQFBQDXBwcAuQcHAMAICABIAwMAMgICALQI + CACtCAgAoQcHAMcKCgD5Dg4AvgsLAOEODgDMDAwAmgoKANIPDwDFEREArQ8PAPoXFwDpFxcApBERANwY + GADJGRkA/iEhALcYGAD0IyMA1B4eAOQiIgBjDw8A7SUlABoEBAD9KioAlxkZAAwCAgClHR0A9SwsADMJ + CQDXJycAuSIiAMYoKAD+NDQAiRwcAPQ0NADnNDQA2jIyAP47OwCqKSkA9j09AP5CQgD+RkYA9ENDAP9J + SQC6NjYAyzw8AGYfHwA1EBAA/05OAPhNTQDlR0cA/1FRAKg3NwD/VVUAu0BAAEkZGQCKMDAA/1paAPZX + VwD2WloA/15eAMhLSwC3RUUA/2FhAG4qKgC/TEwA/2ZmALFHRwDoX18A9mZmALVLSwD/bGwAtk5OAMxZ + WQDmZWUAr01NAKBHRwD/cnIAt1JSADMXFwD2c3MA/3h4ACkUFAD/fX0A/4GBAOl3dwD/hoYA+oODAPaG + hgD/jY0AqF1dAGY5OQD/k5MA5oaGAMVzcwD/mZkA8JOTAP+engD/oqIA+6GhAKNpaQCEVVUA/6amAMuF + hQD/rKwA8KamAP+ysgD0q6sA/7a2APuzswD/ubkA+bW1AP++vgDgqakA/8LCAP/FxQD/yckA6Lm5AP/O + zgCOc3MA/M3NAOzCwgDDq6sAMy0tAAD+/gAA/f0AAPv7AAD5+QAA9/cAAPT0AADx8QAA7+8AAO3tAADp + 6QAA5uYAAOTkAADg4AAA398AANraAADT0wAAyckAAI6OAAB9fQABzs4AAcbGAAHCwgABuroAAbS0AAGt + rQABpKQAAZubAAGHhwAC+fkAAvf3AAF1dQAD//8AA/v7AAX19QAG//8ABubmAAJSUgAJ//8ADP//AAnA + wAAIj48ABmhoAAMxMQAQ8/MAEf7+AAqBgQAGSUkAFv7+AA+qqgAW6+sADH5+AAQoKAAWysoAHf7+ABzX + 1wAo/v4AJujoADT//wAt19cAMuLiADf29gA7/v4ABhgYAEf9/QBU/v4AUPDwAD2wsAAYREQAFj09ABAs + LABO1NQAZPDwAGr29gB29fUAPHx8AC9dXQBarq4Ac93dAIC+vgBDYmIAltTUAIeYmAAAAAAA//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////XGRqcHh+hIeK//// + //////////////////////////////////////////9ISFZaZGpzfoKEh4qNjZCSk/////////////// + ////////////////////////QEBIVlxmc36Eh4qNkJKSk5eXl5mZ//////////////////////////// + /////0xCSEhRWWFteIKHipCSk5mZm5ubm5ubm5v/////////////////////////////QkJMTFFRVllk + anN+hIqNkpmbnaGhoaGfn52d//////////////////////////9GRkxMTEhASFNYWmRteIKHjZKXm6Gj + pKSko6Gfn////////////////////////0ZGRkJCOzszPENVU1lhanN+hYqQl5uho6WlpaSjoZ////// + ////////////////REREPDwzMzMqPWllVVZcZnB4goeKkJecoqaqqaelpKGf//////////////////9E + Pjw8NSUlJRAe/PmoXlhaZG1zfoSHipGYqKirpqmnpaShn////////////////04+PjUlJSUBJKzU5e77 + lWNZYWpzeIKFiY+W+O/7q6qpp6WjoZ3/////////////TkM+NRoaGgQV8MCx4uz0+3JbYWZweH6Ehous + 397u/auqqaeloZ+b////////////Qz44KhoaBB3xw7Kt3Obt+otjWmRqc3iBeozww8rq9f2rqqmnpJ+b + //////////9OQzgnAAAEJPDCtLCt2eTs9P5uW1xkanN7fYDHubDk7fb9q6qppaGdm/////////9DPzYf + AgsW8MS6s7Ct0uLm7fqVY1lcZmx6cfLDtq/c5u32/auqpKOdmf///////1A/OSgHEhbxvsO8t7KuzNnk + 7PT+blhZXGNlgMu8tK/S4urt9v2rpqGfmZf//////1A/MigMGRfr1sfEwLizr8/i5u37i1RRWF5f8cK3 + sq6t0+Lm7PT7q6afmZP//////1A/LBsNGR5H68vHxcG7tbDT5Oz0/mdMVFdg1ru0sK6urrDO3uj5/qKg + mZL//////085LBsKESQeR+vWvsbDvLax2ebt+n1QT0Xww7WxsLCytLe7wd33qKKemZL/////UE9BKxwJ + Cg8ZHiZK27/HxMC3sOLq7v5pX/C9tbGwsbO3u8HH1vGMj5qbmZKN////UE9BKwwKCAcLFBUXSuDWvsXA + ts3k6vPv7+Gyrq+wsrfAxcjxgIyLjpSZl5CK////UE9BIw0LCQcFBxAkHiZK277Eu7PT5OTk4tnPra2v + tsDI8oBxfXqGiI2Tk42H////XU86Ig8NCggFAgIHExUXStHHvbev09zc2dPSz9LQxNaDX2VudXZ+goeQ + ko2E////XU86IhAODAoHBAEAAQ0dLkrLw7myrdLT0s/S09nh+GhpXmNrbXBzeISKkIqC////XU86EREP + DQsIBQIBAAARFibXxrmyrq3MzMzP2eLn92leW1xhZGZqbX6Fiod+////Z1c6EhIRDwwKBwQBAAAEGRfg + xrexrq2tra3P2eLp85ZeWFlZWlxcZHCCh4V4////b109KRMREA4MCQYDAQADGS7WwLOwra2trq2t0+Lm + 7vuLVFFRVlZWWWZ4hYJz////b11LMRMTERANCwgFAgIOHtvBtbGvra6vsbGwrtnk7PX7ckhISEhRUVpw + fnhw////b2dXPSkTEhEPDQoICRIX38CzsK+urrCztri3tLDc5u31+15AQEBASFZmc3Bw/////29XPTEY + ExIRDw0OGWDFt7Kvrq2tsLO6vcK9u7ax3Obt9ftvOzM7O1Fcamb//////29lSz0UGBMSERgW8MKzr6+t + ra2usrvG1svHw8C4sdzm7fX6lTwzM0hWYWT//////29vVz0xFBQUHS3WvLKvrq2tra2xt8bxSuvRyMW9 + uLHc5uzt+qhDM0BRWWT///////93ZUs3GR0eg9bBt7Kvra2tra+zvfEXLSZK28jFvbix2eTq7vlpPkhR + Vv////////90b1dJJB4m0cfCu7Wwra2trrG61S0UFBUuStvIxb24ssnY4/dSPkxWWv//////////d2VX + Uh4m4L/Gwru1sK2usLXFYBIEBREVF0rRyMW9urfA2i06PExW////////////dHdlSUUuSuC/xsK7tbCw + tL3xGQUBAQMQHRdK277FwcLfTRk+RlNi/////////////3d0ZVJFLkrgy8bCu7W0u9YWCgQCAQEDDh0X + StG+x9ZNJDg8TFj///////////////95dGVSRS5K17/Gwru7xhcTCQcFBAMBAw4VLuvW1k0kNjxGU/// + ////////////////f3RlUkUuSte/xsPF8R0OCwoIBwUEAwUTFi5HTR0yPkRU//////////////////// + /393ZVJFTUrXy77bHhMPDQwKCQgHBQQJFBUWJDQ+RFT///////////////////////9/eWVpX2BH8tsX + GRIRDw4NCwoJBwYFITA6OUNEVP//////////////////////////eXl0aXFoYC0dGBMSERAPDQwLCiAo + Mjk/Q05V/////////////////////////////3d/fH1pcVJLPTowMDAvLys0NDk/P05OVVX///////// + ////////////////////////d398dGVlV1dPQUFBQU9PUFBQUFVV//////////////////////////// + //////////90eX95b2dnZ11dXV5eXl5eXv////////////////////////////////////////////9v + cnJycnJubm5eXv////////////////////////////////////////////////////////////////// + ////////////////////////////////AAD///////8AAP//wB///wAA//wAAf//AAD/8AAAf/8AAP/A + AAAf/wAA/4AAAA//AAD/AAAAB/8AAP4AAAAD/wAA/AAAAAH/AAD4AAAAAP8AAPAAAAAAfwAA4AAAAAA/ + AADgAAAAAD8AAMAAAAAAHwAAwAAAAAAfAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAAAA + AAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAgAAAAAAPAACAAAAAAA8AAIAAAAAADwAAwAAAAAAfAADAAAAAAB8AAOAA + AAAAPwAA4AAAAAA/AADwAAAAAH8AAPgAAAAA/wAA/AAAAAH/AAD+AAAAA/8AAP8AAAAH/wAA/4AAAA// + AAD/wAAAH/8AAP/wAAB//wAA//wAAf//AAD//4AP//8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAC9AAAAuwAAALkAAAC2AAAAswAAALEAAAClAAAAowAAAKEA + AACcAAAAkQAAAG0AAABpAAAAZAAAAF0AAABYAAAANgAAADAAAAAqAAAAIgAAABMAAAAHAAAAhgEBAL8C + AgC8AgIAqAICAKECAgBPAQEAQgEBALsDAwCyAwMArQMDAH0CAgC3BAQAiwMDALMFBQC8BwcA3AkJAKUH + BwBVBAQAzgsLALwKCgCqCQkAOwMDAOgNDQAPAQEAXQcHAJcMDACgDg4AvBISAPkaGgDNFhYAWwoKAOcb + GwC2FhYA2hwcAKsXFwDDGxsAuxwcALUbGwDKICAA8ycnAJMZGQBFDAwA0yYmAOUtLQC2JCQA/TQ0APAy + MgDGLCwA+Do6AKwoKAD/PDwA1TMzAP8+PgDpOjoA/0REAPBAQADIOTkAwDc3AP9KSgC3NTUATRcXANdC + QgD/T08A+E1NAM1AQAAqDQ0A5khIACYMDADxTU0Avj09AKw5OQCVMTEA/1VVAMFCQgC6QUEAsT4+AP9b + WwDISUkAvkZGALFCQgBpJycAzU1NAAgDAwD/YmIANBQUAOhcXAD/ZmYAu0tLAPhnZwD/a2sAs0xMALxR + UQD/cnIAkUFBAHk2NgCkS0sA/3Z2AJtISAC2VVUAzmNjAP98fADodXUASyYmAP+EhAD2gYEAqFlZABYM + DAD/jIwAm1hYAGc7OwD+k5MAqmNjANJ9fQD/mpoA/56eAP+iogD/qKgA/6qqAN6WlgD/ra0A+6qqAP+w + sABzUVEA/7i4AOurqwD/u7sA/729APK3twCFZWUA/8PDAL6RkQD/ysoA16urAPXExAD3ysoAwqamAMyx + sQAhHR0AKScnAB0cHAAA//8AAP39AAD7+wAA+PgAAPb2AAD19QAA8/MAAPHxAADv7wAA7e0AAOrqAADm + 5gAA5OQAAOPjAADh4QAA398AAN3dAADY2AAA19cAAM3NAADLywAAx8cAAMPDAADBwQAAtbUAALCwAACt + rQAAqakAAKamAACjowAAlZUAAJKSAABmZgAAZGQAAY2NAAGCggACvLwAA/7+AAPs7AADwsIAApycAAT8 + /AAEtLQABK6uAAJcXAAEl5cAB/n5AAf09AAG2NgABaKiAASRkQADbGwACPX1AAR4eAAJ/v4ADv//AAZm + ZgAQ+voACpycABT//wALiooAFfT0ABz9/QAe6OgAI/39AAk6OgAs/f0ALu7uACKurgAz/f0AHo+PADz8 + /AA86+sAPNXVAEn9/QBG7+8AInBwAFL+/gA2oaEAVPX1AF/9/QAECgoAYOTkAFzT0wBr8fEAaM7OAGO8 + vABx1dUAgN7eAHzIyACQ5eUAfpeXAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////9janB3foKFiP////////////// + /////////////0lJUWNzfoWIiouMjI6Q//////////////////////9ERERJUWNwe4KJjpKUlZSS//// + //////////////9FPj4zMzZKTlVqc36IjJSYmpiVlP//////////////QjY2LSkwdf5XTV9te4KFjZmb + nJqYlP///////////0I2LSYfHOfr9YBOX213f4eR8fienZqYlP//////////OCYZIWvH3Ojz/GhVanN8 + g6HT6vufnZqV/////////zgpGx3ftqrZ5fD3hltjb3p91a3j8/2fnZiS//////9BNCAc1ry3r6bh6vP8 + aF9sdKK3q9rq8/2fnJKQ/////z0yIxPPwby3rqbj7feDWWR90LCqpOHq8vuelo7/////PSoXERbDwr24 + sajl8PliXqK0rKmoqcni7P6bjP///0Y6KgkNExbExb+6s9Lo7pF9yqioqa2zts3pl5OMif//RjolBAoO + ExbPxsC5sNzl5uLZo6WpsLrGoISHj4uF//9GOyIDBAoMERX02Lu0qdrh3trZzK7Uon10en+JioL//1A8 + JAQCAwcXDxMWxbWrpNna2t7g71NeaGxvd4KIfv//XEMgBgQBAAMJDRTktaqlo8jZ3uPsdVRWX19qe4V3 + //9lQysgBgMBAAkQgb2tqKamqKjR4er2dk5LTVVwfnP//2VSORogBgYLHd20q6emp6ywsq7S5fD6gFdF + SWNzbf//YWE5JwcHIRLOrKempaars7rHuLLX6PD3/GZFUWpj////bkgxFxBay7OrpqSkqLDL5Ma/urHR + 5e3y+UZLVf////9uYj8o5MW8tq+opaaruIEUFtbAuK+o4OLxQ0RL/////2JxXlMu1sG8tq+pqa/fEA0T + 9Ma+uLS01DU4RE3//////3F2Z1gWw8G8t7Kx1B0ICA8Vz8K+u9UdMj5H/////////3l4Z1hpw8G9usdY + CwACFxEWw8LYLCs2Rf//////////Ynl4Z1hpw8LA2A4FAAAHDBMu5CwnOEVO////////////Znl4Z2uB + z9sRCwQBAAIKDBwvMThCTP//////////////Znl2dX1rQCEaHyIZGB4rMTxBQkz///////////////// + /3GAeHReSDw3NzI6Oj1GSkr//////////////////////11xeXJuZWBcT1dXV0pK//////////////// + ////////////XGVlZGRkV0//////////////////////////////4B///wAD//4AAf/4AAB/8AAAP+AA + AB/gAAAfwAAAD4AAAAeAAAAHgAAABwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AA + AAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gAAH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvAAAALsAAAC6AAAAsgAAALEAAACwAAAArQAAAKcAAACfAAAAkwAAAH4A + AABtAAAAPAAAAKgEBAChBQUAYAMDADsCAgBVBAQAOwMDAKIMDAC0Dg4Avg8PANEWFgBoCwsA5xoaALsV + FQDFGBgAsxYWADwICACoFxcAgBISAPYuLgDfKSkA4y0tAJwfHwCyJCQAzy0tAOAxMQDzNzcA8zk5APA5 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAJGRkYLISEhHxwcHEB+FxeKtB4exd8o + KOr/ODj//0VF//9QUP//W1v//2Zm//9wcP//eHj//39///+Ghv//jIz//5GR//+Wlv//mZn/2YaG7aNo + aNJZOjquAAAAfwAAAF8AAAA7AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BZmZmBT09PRUwMDA1jB4eiMQa + Gs/0Hh75/ysr//86Ov//SEj//1ZW//9lZf//cXH//319//+Ghv//jo7//5OT//+Zmf//nZ3//6Cg//+k + pP//pqb//6en//+oqP/0oqL5tHl53F9BQbMAAAB9AAAAVgAAAC0AAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wGSkpIHSkpKH3Qp + KV66Hx++6yEh9fsmJv/9Li7//zU1//9DQ///T0///11d//9tbf//enr//4aG//+Pj///l5f//56e//+k + pP//qqr//66u//+wsP//s7P//7Oz//+zs///s7P//7Oz/+6np/ahcXHUNCYmngICAmwAAAA8AAAAFwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////AoCA + gAhEREQimyQkhNAgINz0JSX/9y0t//kvL//8MjL//zQ0//86Ov//RET//1BQ//9aWv//aGj//3R0//9/ + f///ior//5aW//+goP//qqr//7Ky//+3t///vLz//76+//++vv//vb3//7u7//+5uf//t7f/y5GR52VJ + SbcCAgJ5BAQERwAAABoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8DqqqqCU5OTiSsJSWW3CIi7O8lJf/yKir/9Ssr//cqKv/7KCj//iUl//0nJ//4MTH/9zk5//1F + Rf//UVH//19f//9ra///eHj//4WF//+Skv//np7//6mp//+zs///vLz//8LC///Fxf//xsb//8XF///C + wv//vr7//7u7/+KkpPKAXFzDAgICgAAAAEoAAAAaAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wOzs7MKWlpaIrAkJJrfISHz7CUl/+4kJP/wIiL/9B4e//YaGv/5FRX/+BER/+sS + Ev/WICD/3C0t//Q1Nf/+QkL//05O//9bW///Z2f//3V1//+Bgf//jY3//5ub//+mpv//srL//7y8//7D + w//9yMj//svL///Kyv//x8f//8LC//++vv/ura33iGNjxwQEBIAAAABGAAAAFwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////A9XV1QZsbGwariYmkNseHvPnISH/6SAg/+saGv/tFRX/8Q8P//UM + DP/xCQn/1QcH/6EPD/+KLS3/qzk5/983N//7PT3//0lJ//9WVv//YmL//2xs//94eP//hIT//4+P//+a + mv/9paX/9Kur/+Wrq//js7P/7sLC//vMzP/+zs7//8nJ///ExP//v7//7q2t94FeXsMCAgJ5AAAAPAAA + ABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Bo6OjhKoLCxz0iAg6uIbG//kGhr/5hUV/+gP + D//sCQn/7QQE/+MEBP+vAQH/WAcH/0NiYv9anJz/iG5u/8dAQP/1PT3//0ZG//9SUv//Xl7//2ho//9z + c///fHz//4aG//2QkP/wk5P/y4WF/5Rqav+QgYH/u56e/+a+vv/7zs7//8/P///Ly///xMT//76+/+Ol + pfJnSkq3AgICbAAAAC0AAAAIAAAAAAAAAAAAAAAAAAAAAP///wH///8Ev7+/DJg8PEPGISHU3Rsb/98V + Ff/hDg7/4wkJ/+YFBf/kAwP/0AEB/4MBAf8qNTX/CcDA/ybo6P9L6ur/ccDA/6NkZP/hQkL//END//9P + T///Wlr//2Rk//9ubv//eXn//4KC//aGhv/Penr/f09P/zdXV/8/u7v/esXF/7mqqv/pwcH//M7O///P + z///ysr//8PD//+9vf/LkpLnNicnngMDA1cAAAAbAAAAAwAAAAAAAAAAAAAAAP///wL///8HgICAFrch + IajZHR3/2hYW/9sNDf/dBgb/4AIC/98CAv/LAQH/cAAA/x5AQP8Dzc3/APf3/x7///9C/f3/Y/Hx/4S5 + uf/DTk7/9END//5MTP//VVX//2Bg//9qav//c3P//Hx8/+d6ev+eWVn/PCQk/w9/f/8X5ub/VvLy/4vZ + 2f/CsLD/68PD//zOzv//zs7//8jI///AwP//uLj/oXJy1AYGBn8AAAA7AAAACwAAAAAAAAAAAAAAAP// + /wTMzMwKqykpYc0eHvHVFhb/1g4O/9gGBv/aAgL/3AAA/8sAAP9+AAD/GkBA/wO8vP8A8/P/AP7+/xb/ + //81////Vf///3Lh4f+oXl7/5kRE//xGRv//UFD//1pa//9kZP//bW3/9nNz/8lmZv9kNjb/EUdH/wK5 + uf8C9/f/Ov7+/2v39/+X1NT/xrCw/+zDw//9zs7//8zM///Fxf//u7v/7qio92NGRrQDAwNgAAAAHgAA + AAIAAAAAAAAAAP///wZxcXESuyEht9EaGv/RERH/0wYG/9QBAf/XAQH/ywAA/4kAAP8YRkb/AsPD/wDv + 7/8A+fn/AP7+/xD///8o////Rv///2Px8f+JmZn/x01N//RDQ///Skr//1NT//9cXP/8ZWX/5mVl/5tJ + Sf8vGBj/A5ub/wHh4f8A+fn/Jf///0////91+Pj/mdXV/8awsP/swsL//MvL///IyP//v7///7W1/7d+ + ft0GBgaBAAAAOgAAAAoAAAAAAAAAAP///weqJiZVyR0d9MwVFf/ODAz/zgMD/84AAP+7AAD/awAA/xdD + Q/8CsrL/AN/f/wDw8P8A+fn/AP7+/wn///8c////Nv///1X9/f9y39//o2pq/+NDQ//8Q0P//0tL//9U + VP/2Wlr/y1JS/2cuLv8TKyv/ALy8/wDp6f8A+vr/FP///zX///9X////efPz/5vW1v/JsLD/7sLC//zH + x///wcH//7a2//SmpvldPz+vAwMDVwAAABYAAAAAAAAAALOzswq3IyOfyhwc/8kREf/JBwf/xQEB/6kA + AP9hAAD/Ez4+/wKNjf8AuLj/ANHR/wDm5v8A9PT/APz8/wL///8R////KP///0X///9j8vL/ipWV/8xH + R//2PDz//0FB//1JSf/pTEz/oTo6/zQVFf8FeHj/ANbW/wDv7/8A+/v/CP///x////84////V////3X1 + 9f+Zzs7/x6ys/+u9vf/8wMD//ri4//+srP+mbW3TBwcHcQYGBikAAAADAAAAAIVHRxm9ISHaxhkZ/8UM + DP/EBQX/ugAA/40AAP9BAAD/DB0d/wFqav8AnJz/ALa2/wDPz/8A4+P/APLy/wD7+/8G////G////zb/ + //9V+fn/dsLC/6lcXP/kOzv//Tc3//c+Pv/MOTn/aCEh/xI9Pf8Bv7//AObm/wD09P8A/Pz/Af///w3/ + //8a/v7/L/39/0n5+f9o7u7/j8TE/8Ojo//tt7f//Li4//+urv/bjIztFxISiwQEBD4AAAAKAAAAAKgk + JFXFIyP/wxcX/8EJCf/AAgL/twAA/5QAAP9UAAD/GgAA/wMfH/8AcnL/AJaW/wCvr/8Ax8f/ANzc/wDs + 7P8A+Pj/C/7+/yb///9G/f3/Ze3t/4WoqP/DQUH/7i8v/+cwMP+hJyf/OA8P/wZubv8A29v/AO/v/wD4 + +P8A/Pz/AP39/wD8/P8A+fn/BfX1/xXv7/8y4uL/XLq6/5qTk//drKz/+bW1//+trf//n5//ZD8/sQYG + BlEAAAASAAAAALIlJYnCISH/vhQU/74HB/+/AgL/vgAA/60AAP+FAAD/TwAA/xsAAP8DFxf/AGdn/wCM + jP8Apqb/AL29/wDT0/8A6Oj/APf3/xP+/v8z////Uv39/23c3P+eTk7/xyws/7YjI/9dEhL/E0RE/wG4 + uP8A7e3/APb2/wD5+f8A+fn/APX1/wDv7/8A5ub/ANra/wPGxv8Pqqr/N319/41sbP/epKT/+7Oz//+s + rP//np7/mFtbygoKCmIAAAAZAAAAALcoKLG/ISH/uxMT/7sHB/+9AgL/wAAA/78AAP+yAAD/jwAA/1sA + AP8nAAD/CAIC/wFHR/8Afn7/AJub/wC0tP8Az8//AObm/wD5+f8d/v7/Pf///1X09P9wjo7/gjs7/2Qg + IP8gSkr/AsvL/wDt7f8A9/f/APj4/wD39/8A8fH/AOfn/wDZ2f8Ax8f/AZub/whfX/8fOjr/Xjw8/7h5 + ef/wpqb//rGx//+qqv//nZ3/vG1t3RAQEG8AAAAgAAAAALcpKdG8IiL/uRMT/7gGBv+5AQH/vgAA/8MA + AP/EAAD/uwAA/54AAP9uAAD/PAAA/xIAAP8CKyv/AGVl/wCPj/8Ar6//AM/P/wDp6f8D+/v/Jf7+/z39 + /f9I3d3/R7Cw/zGmpv8Sy8v/APX1/wD8/P8A+/v/APn5/wDz8/8A5+f/ANDQ/wCtrf8DhIT/Ej09/zYb + G/9vODj/smFh/+aGhv/7oaH//6ur//+np///mpr/13Z26w8PD3gAAAAlAAAAALksLOe6IyP/thIS/7QE + BP+2AQH/uwAA/8AAAP/FAAD/yQAA/8UAAP+xAAD/iQAA/1cAAP8pAAD/CgAA/wFHR/8Ajo7/ALa2/wDY + 2P8A8PD/DP39/yP///8u/f3/LPj4/yD4+P8R/f3/Bf///wD///8A////APv7/wDq6v8AzMz/BISE/xIt + Lf8xFRX/ZCsr/55HR//MX1//63Nz//qDg///lpb//6Oj//+jo///lpb/63t79RQUFIAGBgYpAAAAALsx + Mfe3IiL/shAQ/7EDA/+zAQH/uAAA/70AAP/CAAD/yAAA/84AAP/OAAD/xAAA/6YAAP91AAD/OQAA/wwA + AP8BUVH/AJub/wDIyP8A5+f/APr6/w3///8Y////Gf///xP///8N////CP///wf///8I////Bubm/wKx + sf8MYWH/KxUV/2IiIv+bOjr/yU9P/+hfX//2Zmb//HBw//94eP//iYn//5mZ//+dnf//kpL/+Hx8+xUV + FYQGBgYrAAAAALs0NP60IiL/rw4O/64DA/+wAAD/tQAA/7oAAP+/AAD/xQAA/8sAAP/RAAD/1QAA/9IA + AP+2AAD/egAA/zEAAP8HDAz/AHd3/wC6uv8A4OD/APX1/wD///8J////C////wr///8H////CP///w3/ + //8T/f3/GsnJ/yZiYv9KGRn/iSgo/8Y+Pv/nTU3/9ldX//xdXf//YGD//2Rk//9tbf//fX3//46O//+X + l///jIz//nh4/xgYGIEGBgYpAAAAALo4OPezJSX/rA8P/6sCAv+tAAD/sgAA/7cAAP+8AAD/wgAA/8gA + AP/OAAD/0wAA/9gAAP/UAAD/rgAA/2gAAP8fAAD/AzU1/wChof8A4OD/APT0/wD9/f8B////A////wP/ + //8E////B////xD///8d/f3/LdfX/0h9ff+FMDD/zTc3//NDQ//9S0v//09P//9SUv//VVX//1hY//9e + Xv//cHD//4OD//+QkP//hob/+G5u/BkZGXsHBwcmAAAAALg+PuizKyv/qhIS/6gCAv+qAAD/rgAA/7MA + AP+5AAD/vgAA/8QAAP/KAAD/0AAA/9YAAP/aAAD/ygAA/5MAAP86AAD/CCUl/wCgoP8A5eX/APb2/wD9 + /f8A////AP///wD///8B////Bv///xD///8h////N/b2/1PKyv+IWlr/zz4+//k9Pf//QED//0ND//9G + Rv//SEj//0pK//9QUP//YmL//3h4//+IiP//gID/7GJi9RsbG3IICAghAAAAALZBQdOzMDD/qRUV/6UE + BP+nAQH/qwAA/7AAAP+1AAD/ugAA/8AAAP/GAAD/zAAA/9IAAP/XAAD/zQAA/5UAAP8xAAD/BWpq/wDM + zP8A8PD/APn5/wD+/v8A/v7/AP///wD9/f8A/v7/Af7+/wv///8d////N////1Ly8v9zvr7/qVtb/+g6 + Ov//NDT//zc3//86Ov//Ozv//z4+//9CQv//VVX//2tr//+AgP//eHj/3FdX6R4eHmcKCgoaAAAAALRD + Q7S0ODj/qhwc/6QICP+lAgL/pwAA/6wAAP+xAAD/tgAA/7wAAP/CAAD/yAAA/84AAP/OAAD/tAAA/1EA + AP8PTEz/AcfH/wDt7f8A9/f/APv7/wD+/v8A/f3/APv7/wD39/8A9vb/APj4/wD8/P8R/v7/Kv///0f9 + /f9k9fX/hL+//71PT//6Kir//yoq//8rK///Li7//zAw//82Nv//R0f//2Ji//91df//bm7/xUxM2iMj + I1gAAAASAAAAALFBQYq2QED/rCcn/6QPD/+jBQX/pAAA/6gAAP+tAAD/sgAA/7cAAP+9AAD/wgAA/8EA + AP+oAAD/QQAA/wx/f/8B0ND/APHx/wD4+P8A+/v/AP39/wD9/f8A+Pj/APHx/wDp6f8A5OT/AObm/wDu + 7v8A+fn/FP7+/zH///9P////bPX1/4y6uv/OQED/+x4e//8dHf//Hx///yIi//8oKP//PDz//1VV//9m + Zv//YGD/qkJCwykpKUUAAAAKAAAAALE9PU+3R0f/rS8v/6MVFf+hCAj/oQEB/6QAAP+pAAD/rQAA/7MA + AP+3AAD/tQAA/44AAP8wDw//Bqys/wDn5/8A9fX/APr6/wD8/P8A/v7/AP7+/wD5+f8A8PD/AN/f/wDL + y/8Aw8P/AMjI/wDX1/8A6Oj/APf3/xb9/f80////Uv///2719f+Ltrb/vkZG//UVFf//EBD//xUV//8b + G///MTH//0hI//9bW///Vlb/iDw8nzU1NTBAQEAEAAAAALEzMwqzRUXZsDo6/6YfH/+gDQ3/ngEB/6EA + AP+kAAD/qQAA/6sAAP+iAAD/agAA/xtDQ/8DwsL/APDw/wD6+v8A+/v/AP7+/wD+/v8A/v7/APz8/wD0 + 9P8A29v/AaWl/wFtbf8Ac3P/AJ6e/wC3t/8Azs7/AOTk/wD39/8W/v7/Nf///1H///9p9/f/f9jY/6Rt + bf/qERH//wcH//8REf//Jyf//z4+//9OTv/jSUntSzw8ak1NTR7///8B////AQAAAACwQkKbtEVF/6kq + Kv+hFBT/nQUF/5wAAP+dAAD/mAAA/4AAAP9DAAD/D2pq/wHR0f8A8/P/APv7/wD9/f8A/v7/AP///wD/ + //8A/v7/APf3/wDl5f8CoqL/Cj8//xAFBf8HERH/AVBQ/wCHh/8Ara3/AMrK/wDk5P8A9/f/Fv7+/zH/ + //9L////Xv39/27f3/+LfHz/0Rwc//oPD///IiL//zU1//9BQf+/Pz/MRkZGSWlpaRH///8B////AQAA + AACuPT1LtktL8602Nv+kHx//mgoK/5EBAf9+AAD/UgAA/yYSEv8Jb2//AcbG/wDn5/8A9fX/APv7/wD+ + /v8A////AP///wD+/v8A+/v/APHx/wHJyf8TQUH/PAAA/0oAAP8qAAD/CgEB/wFISP8AiIj/AKur/wDI + yP8A5OT/APb2/xD9/f8n/v7/Ofv7/0bv7/9XtbX/kDQ0/94aGv/6KSn//Tc3//U4OPmVQUGWXV1dLL+/ + vwgAAAAAAAAAAAAAAAAAAAAAsUZGr7JDQ/+nLS3/mxQU/4IGBv9bAQH/JQIC/wdRUf8BmJj/AMHB/wDZ + 2f8A7Oz/APj4/wD+/v8A////AP///wD9/f8A9vb/AN/f/wiPj/9MAAD/lwAA/5sAAP9wAAD/NAAA/wsA + AP8BR0f/AImJ/wCrq/8AyMj/AOTk/wD09P8C+fn/EPPz/xzX1/81e3v/iRkZ/9wbG//3Kyv/+zg4/8w5 + OdVYWFhRi4uLFv///wQAAAAAAAAAAAAAAAAAAAAArT4+UrNLS+6uPT3/nyUl/4MQEP9VBgb/IQEB/wUh + If8Aenr/AKWl/wDCwv8A29v/AO3t/wD4+P8A/v7/AP39/wD5+f8A6+v/BKqq/zMREf+pAAD/ywAA/8gA + AP+sAAD/dwAA/zcAAP8KAAD/AVFR/wCIiP8ArKz/AMnJ/wDf3/8A5ub/Ac7O/wqBgf9JBwf/sA8P/+kd + Hf/3Ly//7TY29p9CQpR0dHQus7OzCv///wMAAAAAAAAAAAAAAAAAAAAAAAAAAK9FRZu0Skr/qDY2/5Ie + Hv9sDg7/NgMD/w8AAP8CKir/AH19/wClpf8AwsL/ANzc/wDt7f8A+Pj/APn5/wDv7/8Bycn/HTs7/5UA + AP/JAAD/0gAA/9MAAP/MAAD/sQAA/3oAAP86AAD/DAAA/wFKSv8AjIz/AK+v/wDFxf8AwcH/CHx8/zUJ + Cf+SBgb/2RMT//AlJf/1MzP/wjw8xGtra0WmpqYX////BP///wEAAAAAAAAAAAAAAAAAAAAAAAAAAKo5 + OSiwSUnKsUhI/6UzM/+MHh7/YwwM/zMEBP8PAQH/Aisr/wB1df8ApaX/AMLC/wDb2/8A6+v/AO7u/wDa + 2v8Oamr/ZgAA/74AAP/LAAD/zgAA/9AAAP/RAAD/zQAA/7QAAP99AAD/PQAA/wsAAP8AWVn/AJCQ/wCe + nv8Ia2v/MwkJ/4kDA//QDQ3/6hwc//AsLP/UODjgjlJSa5WVlSTo6OgL////Av///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACtPz9ZtE9P47FHR/+kMzP/ihwc/2MODv8yBQX/DgEB/wMuLv8Afn7/AKam/wDB + wf8A19f/ANra/wSlpf88AAD/pQAA/8EAAP/FAAD/yAAA/8sAAP/NAAD/0AAA/80AAP+0AAD/dwAA/zEA + AP8GFBT/AmNj/wZhYf8wCwv/hAQE/8oLC//kGBj/7CYm/90xMe6pRESNi4uLLtLS0hH///8F////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0REdLRQUO+xSEj/ozIy/4kcHP9hDg7/MAQE/w0B + Af8CMDD/AH9//wCkpP8Aubn/Aa6u/xo8PP9+AAD/tQAA/7wAAP+/AAD/wgAA/8UAAP/IAAD/ywAA/80A + AP/JAAD/pwAA/2YAAP8tAAD/GggI/zIGBv9/AwP/xgoK/+AWFv/nJSX/4S8v9LQ8PJ6MjIwz3NzcFv// + /wr///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALBHR361U1PwskpK/6Q1 + Nf+NIiL/YxER/zMICP8QBAT/AzEx/wB0dP8Bj4//Dk1N/1sAAP+lAAD/swAA/7cAAP+6AAD/vQAA/8AA + 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 + yf+AAU3/wANP/+AHYf8= + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/directx.ico b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/directx.ico differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/App.xaml b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/App.xaml new file mode 100644 index 00000000..96fdda09 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/App.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/App.xaml.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/App.xaml.cs new file mode 100644 index 00000000..a8d17c0c --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/App.xaml.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Windows; + +namespace D3D10Tutorial07_WPF +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/D3D10Tutorial07_WPF.csproj b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/D3D10Tutorial07_WPF.csproj new file mode 100644 index 00000000..02f688f5 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/D3D10Tutorial07_WPF.csproj @@ -0,0 +1,133 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1} + WinExe + Properties + D3D10Tutorial07_WPF + D3D10Tutorial07_WPF + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + TutorialWindow.xaml + Code + + + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + PreserveNewest + + + PreserveNewest + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/D3DStructs.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/D3DStructs.cs new file mode 100644 index 00000000..33a81078 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/D3DStructs.cs @@ -0,0 +1,91 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Runtime.InteropServices; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; + +namespace D3D10Tutorial07_WPF +{ + #region SimpleVertex + [StructLayout(LayoutKind.Sequential)] + public struct SimpleVertex + { + [MarshalAs(UnmanagedType.Struct)] + public Vector3F Pos; + [MarshalAs(UnmanagedType.Struct)] + public Vector2F Tex; + } + #endregion + + #region Cube + public class Cube + { + public CubeVertices Vertices = new CubeVertices(); + public CubeIndices Indices = new CubeIndices(); + + [StructLayout(LayoutKind.Sequential)] + public class CubeVertices + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 24)] + private SimpleVertex[] vertices = + { + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + }; + } + + [StructLayout(LayoutKind.Sequential)] + public class CubeIndices + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 36)] + private uint[] indices = + { + 3,1,0, + 2,1,3, + + 6,4,5, + 7,4,6, + + 11,9,8, + 10,9,11, + + 14,12,13, + 15,12,14, + + 19,17,16, + 18,17,19, + + 22,20,21, + 23,20,22 + }; + } + } + #endregion +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..1cc9ad40 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Properties/AssemblyInfo.cs @@ -0,0 +1,51 @@ +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("D3D10Tutorial07_WPF")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("MSIT")] +[assembly: AssemblyProduct("D3D10Tutorial07_WPF")] +[assembly: AssemblyCopyright("Copyright © MSIT 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Properties/Resources.Designer.cs new file mode 100644 index 00000000..86b4ead0 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Properties/Resources.Designer.cs @@ -0,0 +1,69 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial07_WPF.Properties +{ + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("D3D10Tutorial07_WPF.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Properties/Settings.Designer.cs new file mode 100644 index 00000000..9626966b --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Properties/Settings.Designer.cs @@ -0,0 +1,28 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial07_WPF.Properties +{ + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Tutorial07.fx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Tutorial07.fx new file mode 100644 index 00000000..33e7aff7 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Tutorial07.fx @@ -0,0 +1,75 @@ +//-------------------------------------------------------------------------------------- +// File: Tutorial07.fx +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + +//-------------------------------------------------------------------------------------- +// Constant Buffer Variables +//-------------------------------------------------------------------------------------- +Texture2D txDiffuse; +SamplerState samLinear +{ + Filter = MIN_MAG_MIP_LINEAR; + AddressU = Wrap; + AddressV = Wrap; +}; + +cbuffer cbNeverChanges +{ + matrix View; +}; + +cbuffer cbChangeOnResize +{ + matrix Projection; +}; + +cbuffer cbChangesEveryFrame +{ + matrix World; + float4 vMeshColor; +}; + +struct VS_INPUT +{ + float4 Pos : POSITION; + float2 Tex : TEXCOORD; +}; + +struct PS_INPUT +{ + float4 Pos : SV_POSITION; + float2 Tex : TEXCOORD0; +}; +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +PS_INPUT VS( VS_INPUT input ) +{ + PS_INPUT output = (PS_INPUT)0; + output.Pos = mul( input.Pos, World ); + output.Pos = mul( output.Pos, View ); + output.Pos = mul( output.Pos, Projection ); + output.Tex = input.Tex; + + return output; +} +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( PS_INPUT input) : SV_Target +{ + return txDiffuse.Sample( samLinear, input.Tex ) * vMeshColor; +} +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS() ) ); + } +} + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Tutorial07.fxo b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Tutorial07.fxo new file mode 100644 index 00000000..cb026042 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Tutorial07.fxo differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/TutorialWindow.xaml b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/TutorialWindow.xaml new file mode 100644 index 00000000..eca736e5 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/TutorialWindow.xaml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/TutorialWindow.xaml.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/TutorialWindow.xaml.cs new file mode 100644 index 00000000..c3799b6d --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/TutorialWindow.xaml.cs @@ -0,0 +1,325 @@ +using System.Windows; +using System.Runtime.InteropServices; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; +using System; +using Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; +using DXUtil = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; +using System.IO; +using System.Windows.Media.Media3D; +namespace D3D10Tutorial07_WPF +{ + /// + /// Interaction logic for Window1.xaml + /// + public partial class TutorialWindow : Window + { + #region Fields + D3DDevice device; + SwapChain swapChain; + RenderTargetView renderTargetView; + ShaderResourceView textureRV; + ColorRgba backColor = new ColorRgba(0.0F, 0.125F, 0.3F, 1.0F); + Vector4F meshColor = new Vector4F(0.7f, 0.7f, 0.7f, 1.0f ); + + Effect effect; + EffectTechnique technique; + + InputLayout vertexLayout; + D3DBuffer vertexBuffer; + D3DBuffer indexBuffer; + + //variables from the .fx file + EffectMatrixVariable worldVariable; + EffectMatrixVariable viewVariable; + EffectMatrixVariable projectionVariable; + + EffectVectorVariable meshColorVariable; + EffectShaderResourceVariable diffuseVariable; + + Cube cube = new Cube(); + + Matrix4x4F viewMatrix; + Matrix4x4F projectionMatrix; + + float currentTime = 0f; + uint startTime = (uint)Environment.TickCount; + bool needsResizing; + #endregion + + #region Constructor + public TutorialWindow() + { + InitializeComponent(); + host.Loaded += new RoutedEventHandler(host_Loaded); + } + #endregion + + #region Event Handlers + void host_Loaded(object sender, RoutedEventArgs e) + { + InitDevice(); + host.Render = RenderScene; + } + + private void host_SizeChanged(object sender, SizeChangedEventArgs e) + { + if (device != null) + { + needsResizing = true; + } + } + #endregion + + #region InitDevice() + /// + /// Create Direct3D device and swap chain + /// + protected void InitDevice() + { + device = D3DDevice1.CreateDeviceAndSwapChain1(host.Handle); + swapChain = device.SwapChain; + + SetViews(); + + // Create the effect + using (FileStream effectStream = File.OpenRead("Tutorial07.fxo")) + { + effect = device.CreateEffectFromCompiledBinary(new BinaryReader(effectStream)); + } + + // Obtain the technique + technique = effect.GetTechniqueByName("Render"); + + // Obtain the variables + worldVariable = effect.GetVariableByName("World").AsMatrix; + viewVariable = effect.GetVariableByName("View").AsMatrix; + projectionVariable = effect.GetVariableByName("Projection").AsMatrix; + meshColorVariable = effect.GetVariableByName("vMeshColor").AsVector; + diffuseVariable = effect.GetVariableByName("txDiffuse").AsShaderResource; + + InitVertexLayout(); + InitVertexBuffer(); + InitIndexBuffer(); + + // Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList; + + // Load the Texture + using (FileStream stream = File.OpenRead("seafloor.png")) + { + textureRV = TextureLoader.LoadTexture(device, stream); + } + + InitMatrices(); + + diffuseVariable.Resource = textureRV; + needsResizing = false; + } + #endregion + + #region SetViews() + private void SetViews() + { + // Create a render target view + using (Texture2D buffer = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView(buffer); + } + + //bind the views to the device + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { renderTargetView }); + + // Setup the viewport + Viewport vp = new Viewport() + { + Width = (uint)host.ActualWidth, + Height = (uint)host.ActualHeight, + MinDepth = 0.0f, + MaxDepth = 1.0f, + TopLeftX = 0, + TopLeftY = 0 + }; + + device.RS.Viewports = new Viewport[] { vp }; + } + #endregion + + #region InitVertexLayout() + private void InitVertexLayout() + { + // Define the input layout + // The layout determines the stride in the vertex buffer, + // so changes in layout need to be reflected in SetVertexBuffers + InputElementDescription[] layout = + { + new InputElementDescription() + { + SemanticName = "POSITION", + SemanticIndex = 0, + Format = Format.R32G32B32Float, + InputSlot = 0, + AlignedByteOffset = 0, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0 + }, + new InputElementDescription() + { + SemanticName = "TEXCOORD", + SemanticIndex = 0, + Format = Format.R32G32Float, + InputSlot = 0, + AlignedByteOffset = 12, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0 + }, + }; + + PassDescription passDesc = technique.GetPassByIndex(0).Description; + + vertexLayout = device.CreateInputLayout( + layout, + passDesc.InputAssemblerInputSignature, + passDesc.InputAssemblerInputSignatureSize); + + device.IA.InputLayout = vertexLayout; + } + #endregion + + #region InitVertexBuffer() + private void InitVertexBuffer() + { + IntPtr verticesData = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Vertices)); + Marshal.StructureToPtr(cube.Vertices, verticesData, true); + + BufferDescription bufferDesc = new BufferDescription() + { + Usage = Usage.Default, + ByteWidth = (uint)Marshal.SizeOf(cube.Vertices), + BindingOptions = BindingOptions.VertexBuffer, + CpuAccessOptions = CpuAccessOptions.None, + MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + }; + + SubresourceData InitData = new SubresourceData() + { + SystemMemory = verticesData + }; + + vertexBuffer = device.CreateBuffer(bufferDesc, InitData); + + // Set vertex buffer + uint stride = (uint)Marshal.SizeOf(typeof(SimpleVertex)); + uint offset = 0; + device.IA.SetVertexBuffers( + 0, + new D3DBuffer[] { vertexBuffer }, + new uint[] { stride }, + new uint[] { offset }); + Marshal.FreeCoTaskMem(verticesData); + } + #endregion + + #region InitIndexBuffer() + private void InitIndexBuffer() + { + IntPtr indicesData = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Indices)); + Marshal.StructureToPtr(cube.Indices, indicesData, true); + + BufferDescription bufferDesc = new BufferDescription() + { + Usage = Usage.Default, + ByteWidth = (uint)Marshal.SizeOf(cube.Indices), + BindingOptions = BindingOptions.IndexBuffer, + CpuAccessOptions = CpuAccessOptions.None, + MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + }; + + SubresourceData initData = new SubresourceData() + { + SystemMemory = indicesData + }; + + indexBuffer = device.CreateBuffer(bufferDesc, initData); + device.IA.IndexBuffer = new IndexBuffer(indexBuffer, Format.R32UInt, 0); + Marshal.FreeCoTaskMem(indicesData); + } + #endregion + + #region InitMatrices() + private void InitMatrices() + { + // Initialize the view matrix + Vector3F Eye = new Vector3F(0.0f, 3.0f, -6.0f); + Vector3F At = new Vector3F(0.0f, 0.0f, 0.0f); + Vector3F Up = new Vector3F(0.0f, 1.0f, 0.0f); + + viewMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixLookAtLH(Eye, At, Up); + + // Initialize the projection matrix + projectionMatrix = DXUtil.Camera.MatrixPerspectiveFovLH((float)Math.PI * 0.25f, ((float)host.ActualWidth / (float)host.ActualHeight), 0.5f, 100.0f); + + // Update Variables that never change + viewVariable.Matrix = viewMatrix; + projectionVariable.Matrix = projectionMatrix; + } + #endregion + + #region RenderScene + /// + /// Render the frame + /// + protected void RenderScene() + { + if (needsResizing) + { + needsResizing = false; + renderTargetView.Dispose(); + SwapChainDescription sd = swapChain.Description; + swapChain.ResizeBuffers(sd.BufferCount, (uint)host.ActualWidth, (uint)host.ActualHeight, sd.BufferDescription.Format, sd.Options); + SetViews(); + // Update the projection matrix + projectionMatrix = DXUtil.Camera.MatrixPerspectiveFovLH((float)Math.PI * 0.25f, ((float)host.ActualWidth / (float)host.ActualHeight), 0.5f, 100.0f); + projectionVariable.Matrix = projectionMatrix; + } + Matrix4x4F worldMatrix; + + currentTime = (Environment.TickCount - startTime) / 1000.0f; + + //WPF transforms used here use degrees as opposed to D3DX which uses radians in the native tutorial + //360 degrees == 2 * Math.PI + //world matrix rotates the first cube by t degrees + RotateTransform3D rotateTransform = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), currentTime * 30)); + worldMatrix = rotateTransform.Value.ToMatrix4x4F(); + + // Modify the color + meshColor.X = ((float)Math.Sin(currentTime * 1.0f) + 1.0f) * 0.5f; + meshColor.Y = ((float)Math.Cos(currentTime * 3.0f) + 1.0f) * 0.5f; + meshColor.Z = ((float)Math.Sin(currentTime * 5.0f) + 1.0f) * 0.5f; + + // Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor); + + // + // Update variables that change once per frame + // + worldVariable.Matrix = worldMatrix; + meshColorVariable.FloatVector = meshColor; + + // + // Render the cube + // + TechniqueDescription techDesc = technique.Description; + for (uint p = 0; p < techDesc.Passes; ++p) + { + technique.GetPassByIndex(p).Apply(); + device.DrawIndexed(36, 0, 0); + } + + swapChain.Present(0, PresentOptions.None); + } + + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/seafloor.dds b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/seafloor.dds new file mode 100644 index 00000000..c28a6181 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/seafloor.dds differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/seafloor.png b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/seafloor.png new file mode 100644 index 00000000..4ce440f9 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WPF/seafloor.png differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/D3D10Tutorial07_WinFormsControl.csproj b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/D3D10Tutorial07_WinFormsControl.csproj new file mode 100644 index 00000000..03a70bf2 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/D3D10Tutorial07_WinFormsControl.csproj @@ -0,0 +1,117 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {CE251D57-5072-44E7-8238-C977F610BBD1} + WinExe + Properties + D3D10Tutorial07_WinFormsControl + D3D10Tutorial07_WinFormsControl + v3.5 + 512 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + 3.0 + + + + + + 3.0 + + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + TutorialWindow.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + PreserveNewest + + + PreserveNewest + + + True + Settings.settings + True + + + Form + + + TutorialWindow.cs + + + + + + PreserveNewest + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/D3DStructs.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/D3DStructs.cs new file mode 100644 index 00000000..2f1ff55e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/D3DStructs.cs @@ -0,0 +1,91 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Runtime.InteropServices; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; + +namespace D3D10Tutorial07_WinFormsControl +{ + #region SimpleVertex + [StructLayout(LayoutKind.Sequential)] + public struct SimpleVertex + { + [MarshalAs(UnmanagedType.Struct)] + public Vector3F Pos; + [MarshalAs(UnmanagedType.Struct)] + public Vector2F Tex; + } + #endregion + + #region Cube + public class Cube + { + public CubeVertices Vertices = new CubeVertices(); + public CubeIndices Indices = new CubeIndices(); + + [StructLayout(LayoutKind.Sequential)] + public class CubeVertices + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 24)] + private SimpleVertex[] vertices = + { + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + }; + } + + [StructLayout(LayoutKind.Sequential)] + public class CubeIndices + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 36)] + private uint[] indices = + { + 3,1,0, + 2,1,3, + + 6,4,5, + 7,4,6, + + 11,9,8, + 10,9,11, + + 14,12,13, + 15,12,14, + + 19,17,16, + 18,17,19, + + 22,20,21, + 23,20,22 + }; + } + } + #endregion +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Program.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Program.cs new file mode 100644 index 00000000..79347510 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Program.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; + +namespace D3D10Tutorial07_WinFormsControl +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new TutorialWindow()); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..da7f3af4 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("D3D10Tutorial07_WinFormsControl")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c4d21605-d6db-4779-a72c-4cca985fa5cf")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Properties/Resources.Designer.cs new file mode 100644 index 00000000..db52ab8a --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial07_WinFormsControl.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("D3D10Tutorial07_WinFormsControl.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Properties/Settings.Designer.cs new file mode 100644 index 00000000..33d9c54c --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial07_WinFormsControl.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Tutorial07.fx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Tutorial07.fx new file mode 100644 index 00000000..104eb059 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Tutorial07.fx @@ -0,0 +1,81 @@ +//-------------------------------------------------------------------------------------- +// File: Tutorial07.fx +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + +//-------------------------------------------------------------------------------------- +// Constant Buffer Variables +//-------------------------------------------------------------------------------------- +Texture2D txDiffuse; +SamplerState samLinear +{ + Filter = MIN_MAG_MIP_LINEAR; + AddressU = Wrap; + AddressV = Wrap; +}; + +cbuffer cbNeverChanges +{ + matrix View; +}; + +cbuffer cbChangeOnResize +{ + matrix Projection; +}; + +cbuffer cbChangesEveryFrame +{ + matrix World; + float4 vMeshColor; +}; + +struct VS_INPUT +{ + float4 Pos : POSITION; + float2 Tex : TEXCOORD; +}; + +struct PS_INPUT +{ + float4 Pos : SV_POSITION; + float2 Tex : TEXCOORD0; +}; + + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +PS_INPUT VS( VS_INPUT input ) +{ + PS_INPUT output = (PS_INPUT)0; + output.Pos = mul( input.Pos, World ); + output.Pos = mul( output.Pos, View ); + output.Pos = mul( output.Pos, Projection ); + output.Tex = input.Tex; + + return output; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( PS_INPUT input) : SV_Target +{ + return txDiffuse.Sample( samLinear, input.Tex ) * vMeshColor; +} + + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS() ) ); + } +} + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Tutorial07.fxo b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Tutorial07.fxo new file mode 100644 index 00000000..cb026042 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Tutorial07.fxo differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/TutorialWindow.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/TutorialWindow.Designer.cs new file mode 100644 index 00000000..f87b91c6 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/TutorialWindow.Designer.cs @@ -0,0 +1,63 @@ +namespace D3D10Tutorial07_WinFormsControl +{ + partial class TutorialWindow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TutorialWindow)); + this.directControl = new Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl(); + this.SuspendLayout(); + // + // directControl + // + this.directControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.directControl.Location = new System.Drawing.Point(0, 0); + this.directControl.Name = "directControl"; + this.directControl.Size = new System.Drawing.Size(624, 442); + this.directControl.TabIndex = 4; + this.directControl.SizeChanged += new System.EventHandler(this.directControl_SizeChanged); + // + // TutorialWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(624, 442); + this.Controls.Add(this.directControl); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "TutorialWindow"; + this.Text = "Direct3D 10 Tutorial 7: Texture Mapping and Constant Buffers"; + this.Load += new System.EventHandler(this.TutorialWindow_Load); + this.ResumeLayout(false); + + } + + #endregion + + private Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl directControl; + } +} + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/TutorialWindow.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/TutorialWindow.cs new file mode 100644 index 00000000..cb72bcfb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/TutorialWindow.cs @@ -0,0 +1,332 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.IO; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using System.Windows.Media.Media3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; +using Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; +using DXUtil = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; + +namespace D3D10Tutorial07_WinFormsControl +{ + /// + /// This application demonstrates texturing + /// + /// http://msdn.microsoft.com/en-us/library/bb172491(VS.85).aspx + /// + /// Copyright (c) Microsoft Corporation. All rights reserved. + /// + public partial class TutorialWindow : Form + { + #region Fields + D3DDevice1 device; + SwapChain swapChain; + RenderTargetView renderTargetView; + ShaderResourceView textureRV; + ColorRgba backColor = new ColorRgba(0.0F, 0.125F, 0.3F, 1.0F); + Vector4F meshColor = new Vector4F(0.7f, 0.7f, 0.7f, 1.0f); + + Effect effect; + EffectTechnique technique; + + InputLayout vertexLayout; + D3DBuffer vertexBuffer; + D3DBuffer indexBuffer; + + //variables from the .fx file + EffectMatrixVariable worldVariable; + EffectMatrixVariable viewVariable; + EffectMatrixVariable projectionVariable; + + EffectVectorVariable meshColorVariable; + EffectShaderResourceVariable diffuseVariable; + + Cube cube = new Cube(); + + Matrix4x4F viewMatrix; + Matrix4x4F projectionMatrix; + + float currentTime = 0f; + uint dwTimeStart = (uint)Environment.TickCount; + bool needsResizing; + #endregion + + #region TutorialWindow() + /// + /// Initializes a new instance of the class. + /// + public TutorialWindow() + { + InitializeComponent(); + } + #endregion + + #region TutorialWindow_Load() + private void TutorialWindow_Load(object sender, EventArgs e) + { + InitDevice(); + directControl.Render = this.RenderScene; + } + #endregion + + #region directControl_SizeChanged() + private void directControl_SizeChanged(object sender, EventArgs e) + { + needsResizing = true; + } + #endregion + + #region InitDevice() + /// + /// Create Direct3D device and swap chain + /// + protected void InitDevice() + { + device = D3DDevice1.CreateDeviceAndSwapChain1(directControl.Handle); + swapChain = device.SwapChain; + + SetViews(); + + // Create the effect + using (FileStream effectStream = File.OpenRead("Tutorial07.fxo")) + { + effect = device.CreateEffectFromCompiledBinary(effectStream); + } + + // Obtain the technique + technique = effect.GetTechniqueByName("Render"); + + // Obtain the variables + worldVariable = effect.GetVariableByName("World").AsMatrix; + viewVariable = effect.GetVariableByName("View").AsMatrix; + projectionVariable = effect.GetVariableByName("Projection").AsMatrix; + meshColorVariable = effect.GetVariableByName("vMeshColor").AsVector; + diffuseVariable = effect.GetVariableByName("txDiffuse").AsShaderResource; + + InitVertexLayout(); + InitVertexBuffer(); + InitIndexBuffer(); + + // Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList; + + // Load the Texture + textureRV = TextureLoader.LoadTexture(device, "seafloor.png"); + + InitMatrices(); + + diffuseVariable.Resource = textureRV; + needsResizing = false; + } + #endregion + + #region SetViews() + /// + /// Sets the views that depend on background buffer dimensions + /// + private void SetViews() + { + // Create a render target view + using (Texture2D pBuffer = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView(pBuffer); + } + + //bind the render target to the device + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { renderTargetView }, null); + + // Setup the viewport + Viewport vp = new Viewport() + { + Width = (uint)directControl.ClientSize.Width, + Height = (uint)directControl.ClientSize.Height, + MinDepth = 0.0f, + MaxDepth = 1.0f, + TopLeftX = 0, + TopLeftY = 0 + }; + + device.RS.Viewports = new Viewport[] { vp }; + } + #endregion + + #region InitVertexLayout() + private void InitVertexLayout() + { + // Define the input layout + // The layout determines the stride in the vertex buffer, + // so changes in layout need to be reflected in SetVertexBuffers + InputElementDescription[] layout = + { + new InputElementDescription() + { + SemanticName = "POSITION", + SemanticIndex = 0, + Format = Format.R32G32B32Float, + InputSlot = 0, + AlignedByteOffset = 0, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0 + }, + new InputElementDescription() + { + SemanticName = "TEXCOORD", + SemanticIndex = 0, + Format = Format.R32G32Float, + InputSlot = 0, + AlignedByteOffset = 12, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0 + }, + }; + + PassDescription passDesc = technique.GetPassByIndex(0).Description; + + vertexLayout = device.CreateInputLayout( + layout, + passDesc.InputAssemblerInputSignature, + passDesc.InputAssemblerInputSignatureSize); + + device.IA.InputLayout = vertexLayout; + } + #endregion + + #region InitVertexBuffer() + private void InitVertexBuffer() + { + IntPtr verticesData = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Vertices)); + Marshal.StructureToPtr(cube.Vertices, verticesData, true); + + BufferDescription bufferDesc = new BufferDescription() + { + Usage = Usage.Default, + ByteWidth = (uint)Marshal.SizeOf(cube.Vertices), + BindingOptions = BindingOptions.VertexBuffer, + CpuAccessOptions = CpuAccessOptions.None, + MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + }; + + SubresourceData InitData = new SubresourceData() + { + SystemMemory = verticesData + }; + + vertexBuffer = device.CreateBuffer(bufferDesc, InitData); + + // Set vertex buffer + uint stride = (uint)Marshal.SizeOf(typeof(SimpleVertex)); + uint offset = 0; + device.IA.SetVertexBuffers( + 0, + new D3DBuffer[] { vertexBuffer }, + new uint[] { stride }, + new uint[] { offset }); + Marshal.FreeCoTaskMem(verticesData); + } + #endregion + + #region InitIndexBuffer() + private void InitIndexBuffer() + { + IntPtr indicesData = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Indices)); + Marshal.StructureToPtr(cube.Indices, indicesData, true); + + BufferDescription bufferDesc = new BufferDescription() + { + Usage = Usage.Default, + ByteWidth = (uint)Marshal.SizeOf(cube.Indices), + BindingOptions = BindingOptions.IndexBuffer, + CpuAccessOptions = CpuAccessOptions.None, + MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + }; + + SubresourceData initData = new SubresourceData() + { + SystemMemory = indicesData + }; + + indexBuffer = device.CreateBuffer(bufferDesc, initData); + device.IA.IndexBuffer = new IndexBuffer(indexBuffer, Format.R32UInt, 0); + Marshal.FreeCoTaskMem(indicesData); + } + #endregion + + #region InitMatrices() + private void InitMatrices() + { + // Initialize the view matrix + Vector3F Eye = new Vector3F( 0.0f, 3.0f, -6.0f ); + Vector3F At = new Vector3F( 0.0f, 0.0f, 0.0f ); + Vector3F Up = new Vector3F( 0.0f, 1.0f, 0.0f ); + + viewMatrix = DXUtil.Camera.MatrixLookAtLH(Eye, At, Up); + + // Initialize the projection matrix + projectionMatrix = DXUtil.Camera.MatrixPerspectiveFovLH((float)Math.PI * 0.25f, ((float)this.ClientSize.Width / (float)this.ClientSize.Height), 0.5f, 100.0f); + + // Update Variables that never change + viewVariable.Matrix = viewMatrix; + projectionVariable.Matrix = projectionMatrix; + } + #endregion + + #region RenderScene() + /// + /// Render the frame + /// + protected void RenderScene() + { + if (needsResizing) + { + needsResizing = false; + renderTargetView.Dispose(); + SwapChainDescription sd = swapChain.Description; + swapChain.ResizeBuffers(sd.BufferCount, (uint)directControl.ClientSize.Width, (uint)directControl.ClientSize.Height, sd.BufferDescription.Format, sd.Options); + SetViews(); + // Update the projection matrix + projectionMatrix = DXUtil.Camera.MatrixPerspectiveFovLH((float)Math.PI * 0.25f, ((float)directControl.ClientSize.Width / (float)directControl.ClientSize.Height), 0.5f, 100.0f); + projectionVariable.Matrix = projectionMatrix; + } + Matrix4x4F worldMatrix; + + currentTime = (Environment.TickCount - dwTimeStart) / 1000.0f; + + //WPF transforms used here use degrees as opposed to D3DX which uses radians in the native tutorial + //360 degrees == 2 * Math.PI + //world matrix rotates the first cube by t degrees + RotateTransform3D rt1 = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), currentTime*30)); + worldMatrix = rt1.Value.ToMatrix4x4F(); + + // Modify the color + meshColor.X = ((float)Math.Sin(currentTime * 1.0f) + 1.0f) * 0.5f; + meshColor.Y = ((float)Math.Cos(currentTime * 3.0f) + 1.0f) * 0.5f; + meshColor.Z = ((float)Math.Sin(currentTime * 5.0f) + 1.0f) * 0.5f; + + // Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor); + + // + // Update variables that change once per frame + // + worldVariable.Matrix = worldMatrix; + meshColorVariable.FloatVector = meshColor; + + // + // Render the cube + // + TechniqueDescription techDesc = technique.Description; + for (uint p = 0; p < techDesc.Passes; ++p) + { + technique.GetPassByIndex(p).Apply(); + device.DrawIndexed(36, 0, 0); + } + + swapChain.Present(0, PresentOptions.None); + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/TutorialWindow.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/TutorialWindow.resx new file mode 100644 index 00000000..0dd393c3 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/TutorialWindow.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAAABABoBgAAlgAAACAgEAAAAAQA6AIAAP4GAAAQEBAAAAAEACgBAADmCQAAMDAAAAAA + CACoDgAADgsAACAgAAAAAAgAqAgAALYZAAAQEAAAAAAIAGgFAABeIgAAMDAAAAAAIACoJQAAxicAACAg + AAAAACAAqBAAAG5NAAAQEAAAAAAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAAAA + AAD//wAA////AACAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMy2t7a2bMzMzMzMzMzMzMzMzMzMzMzMu7a3tnd2d2ZszMzMzMzMzMzMzMzMzMy7t7tr + a2dnZmZmbMzMzMzMzMzMzMzMzLu7e2tnZnZmZmZmZmzMzMzMzMzMzMzMy7u3u7e2tmdmZmZmZmbMzMzM + zMzMzMzMt7e7u3tra2Z2ZmZmZmZszMzMzMzMzMzLu7u7u7u7d7Z2ZmZmZmZmzMzMzMzMzMx7O7u7s3N7 + trd2tmZmZuZmbMzMzMzMzMu7u7uzNye7e2trZmd3ZmZmZszMzMzMzLO7u7MzqmZ3t7Z3ZrdyZmbmZmzM + zMzMy7u7s7MKqqZre2t2t3AqpmZmZmbMzMzMx7OzuzIqqqpnt7a3ZzIqamZm5mbMzMzMO7u7syKqqqpm + e3trYzKqqmZmZmZszMzMu7OzMiqqqqpqe7a2syKqqmpmZmZszMzLszszIiqqqqqmd7t7cCqqqqamZmZm + zMzHu7swAiKqqqqqZ3u3MCqqqqpqZmZmzMzLMzMzACIqKqqqZ7t7Aqqqqqqqd2ZmzMzLO7szMAIiqqqq + anszIqqqqqoid2ZmzMxzszOzMwAiIqqqpmMyKqqqqqIie2ZnbMy7O7OzszAAIiqqqqd6qqqqoiIzd2Zm + bMw3szs7OzMwAiKqqqqqqqqqIDN3tmZ2bMy7M7OzuzszACKqqqqqqqoiA3trZrZmvMxzOzOzs7O7MAIq + qqqqqqcjN7a3t2ZnfMw7M7Ozs7s7MwIqqqqqqqoje3t3a3d2fMx7OzM7O7O7MzAqqqqqqqpnt7e7trZ3 + fMy3MzOzuzuzswKqqqqqqqqme7tra2dnfMx7M7M7M7O7MwKqqqqqqqpqZ7u7u7a2vMx3szszs7OzMqqq + qqqqqqqmpnu7t7tnfMzLczM7OzswKqqqqqoqKqqqpme7u7e7zMzHOzOzMzMCqqqqqqIiKqqqpqZ7u7e2 + zMzLc7MzMzKqqqqqqiIAIiqqqmpnu7t7zMzMtzMzMCKqqqqqqgMwACIqqqqne7e8zMzMN7MzAiqqqqqq + ojMzACIqqqqnO3u8zMzMxzszACKqqqqqIDszMwIiqqIjO7vMzMzMy3MzAAIiqqqqA7O7MwAiIqIDu3vM + zMzMzHtzMwAioqqiM7s7szMCIiAzu7zMzMzMzMe3MwAiKqojM7O7O7MAIgO7u8zMzMzMzMx7MzAAIqID + O7OzuzMwAzO7vMzMzMzMzMzHdzMAAiIzszuzs7MzM7t7zMzMzMzMzMzMtzcwACMzOzM7OzuzM3u8zMzM + zMzMzMzMx7s3MDMzs7Ozs7Ozu7vMzMzMzMzMzMzMzHdzMzOzMzs7Ozs7t7zMzMzMzMzMzMzMzMy3d7cz + s7M7O3u3vMzMzMzMzMzMzMzMzMzMt3t7e3t7e7e8zMzMzMzMzMzMzMzMzMzMzMe3t7e3t8zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz///////8AAP///////wAA///AH///AAD//AAB//8AAP/w + AAB//wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/AAD8AAAAAf8AAPgAAAAA/wAA8AAAAAB/ + AADgAAAAAD8AAOAAAAAAPwAAwAAAAAAfAADAAAAAAB8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAIAA + AAAADwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAADAAAAAAB8AAMAA + AAAAHwAA4AAAAAA/AADgAAAAAD8AAPAAAAAAfwAA+AAAAAD/AAD8AAAAAf8AAP4AAAAD/wAA/wAAAAf/ + AAD/gAAAD/8AAP/AAAAf/wAA//AAAH//AAD//AAB//8AAP//gA///wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgIAAgAAAAIAAgACAgAAAwMDAAICA + gAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzLe2tmbMzMzMzMzMzMzMy3dnZ2ZmZmzMzMzMzMzMzHu7t3ZmZmZmzMzMzMzMzHu7u7 + t7a2ZmZmbMzMzMzMu7uzd3trZmZ2ZmbMzMzMy7uzMqZ7tnd3dmZmbMzMzMuzMCqma2t2cKpmZmzMzMy7 + MyKqqqe2tzKqpmZmzMzLszIqqqpmu3cKqqamZmzMyzMCIqqqpndzKqqqZmZszMszACIqqqprMKqqqqp2 + bMxzszACIiqqpzKqqqoidmbMOzszACIqqqqqqqqiA3ZmzLs7MzAAIqqqqqqiA3dmZsxzM7MzMAKqqqqq + I3trdmfMu7M7OzMAqqqqqqO3trdmzHMzs7MzAqqqqqqqe3t3a8x7OzszMqqqqqqqpme7trbMtzMzMCqq + qqqiqqqmZ7trzMtzMwKqqqqiAiKqqqZ7fMzHszAqqqqqoAAiqqqiu7zMw3MwIiqqqiMwAiqqI7e8zMy3 + MAIiqqIzMwIiIjO7zMzMx3MAIiogM7MAIiM7vMzMzMNzcAIiIzszMAIDu7zMzMzMdzMwIgM7OzMzO3vM + zMzMzMt3MwMzs7OzM7u8zMzMzMzMx3c3Mzs7O7e8zMzMzMzMzMw3e3t7e7e7zMzMzMzMzMzMzMN7e3t8 + zMzMzMzM////////////4B///wAD//4AAf/4AAB/8AAAP+AAAB/gAAAfwAAAD4AAAAeAAAAHgAAABwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AAAAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gA + AH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzM + zMzMzMzMzMzLZmbMzMzMy7e2ZmbMzMyzB3dndmzMyzKqe3CmZszDCqpnMqpmzLMyqqcKqqZsOzAqqqqi + dmwzszCqqie2bDMzMqqqZ7tsMzAqqqqme7zDAqqiAqqrzMcyqqMwojvMzHMqCzAjvMzMxzIzMzvMzMzM + xze7zMzM//+zMPg/a2vgD6pmwAfMzIADMyKAA6e2AAGqpgABzMwAATIqAAFmuwABqqaAA2zMgAMCIsAH + pnfgD6qq+D9szCgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWAAAA0QAAAM4A + AADNAAAAywAAAMgAAADGAAAAxQAAAMIAAADBAAAAvgAAALwAAAC6AAAAtwAAALUAAACzAAAAsAAAAK0A + AACpAAAApgAAAJwAAABzAAAAZwAAADwAAACiAQEAkgEBAN0CAgDAAgIAvQICAH0BAQBWAQEAzgMDAMMD + AwC/AwMAsAMDALQEBACGAwMA5wYGACUBAQDTBgYAxQYGAKQFBQDXBwcAuQcHAMAICABIAwMAMgICALQI + CACtCAgAoQcHAMcKCgD5Dg4AvgsLAOEODgDMDAwAmgoKANIPDwDFEREArQ8PAPoXFwDpFxcApBERANwY + GADJGRkA/iEhALcYGAD0IyMA1B4eAOQiIgBjDw8A7SUlABoEBAD9KioAlxkZAAwCAgClHR0A9SwsADMJ + CQDXJycAuSIiAMYoKAD+NDQAiRwcAPQ0NADnNDQA2jIyAP47OwCqKSkA9j09AP5CQgD+RkYA9ENDAP9J + SQC6NjYAyzw8AGYfHwA1EBAA/05OAPhNTQDlR0cA/1FRAKg3NwD/VVUAu0BAAEkZGQCKMDAA/1paAPZX + VwD2WloA/15eAMhLSwC3RUUA/2FhAG4qKgC/TEwA/2ZmALFHRwDoX18A9mZmALVLSwD/bGwAtk5OAMxZ + WQDmZWUAr01NAKBHRwD/cnIAt1JSADMXFwD2c3MA/3h4ACkUFAD/fX0A/4GBAOl3dwD/hoYA+oODAPaG + hgD/jY0AqF1dAGY5OQD/k5MA5oaGAMVzcwD/mZkA8JOTAP+engD/oqIA+6GhAKNpaQCEVVUA/6amAMuF + hQD/rKwA8KamAP+ysgD0q6sA/7a2APuzswD/ubkA+bW1AP++vgDgqakA/8LCAP/FxQD/yckA6Lm5AP/O + zgCOc3MA/M3NAOzCwgDDq6sAMy0tAAD+/gAA/f0AAPv7AAD5+QAA9/cAAPT0AADx8QAA7+8AAO3tAADp + 6QAA5uYAAOTkAADg4AAA398AANraAADT0wAAyckAAI6OAAB9fQABzs4AAcbGAAHCwgABuroAAbS0AAGt + rQABpKQAAZubAAGHhwAC+fkAAvf3AAF1dQAD//8AA/v7AAX19QAG//8ABubmAAJSUgAJ//8ADP//AAnA + wAAIj48ABmhoAAMxMQAQ8/MAEf7+AAqBgQAGSUkAFv7+AA+qqgAW6+sADH5+AAQoKAAWysoAHf7+ABzX + 1wAo/v4AJujoADT//wAt19cAMuLiADf29gA7/v4ABhgYAEf9/QBU/v4AUPDwAD2wsAAYREQAFj09ABAs + LABO1NQAZPDwAGr29gB29fUAPHx8AC9dXQBarq4Ac93dAIC+vgBDYmIAltTUAIeYmAAAAAAA//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////XGRqcHh+hIeK//// + //////////////////////////////////////////9ISFZaZGpzfoKEh4qNjZCSk/////////////// + ////////////////////////QEBIVlxmc36Eh4qNkJKSk5eXl5mZ//////////////////////////// + /////0xCSEhRWWFteIKHipCSk5mZm5ubm5ubm5v/////////////////////////////QkJMTFFRVllk + anN+hIqNkpmbnaGhoaGfn52d//////////////////////////9GRkxMTEhASFNYWmRteIKHjZKXm6Gj + pKSko6Gfn////////////////////////0ZGRkJCOzszPENVU1lhanN+hYqQl5uho6WlpaSjoZ////// + ////////////////REREPDwzMzMqPWllVVZcZnB4goeKkJecoqaqqaelpKGf//////////////////9E + Pjw8NSUlJRAe/PmoXlhaZG1zfoSHipGYqKirpqmnpaShn////////////////04+PjUlJSUBJKzU5e77 + lWNZYWpzeIKFiY+W+O/7q6qpp6WjoZ3/////////////TkM+NRoaGgQV8MCx4uz0+3JbYWZweH6Ehous + 397u/auqqaeloZ+b////////////Qz44KhoaBB3xw7Kt3Obt+otjWmRqc3iBeozww8rq9f2rqqmnpJ+b + //////////9OQzgnAAAEJPDCtLCt2eTs9P5uW1xkanN7fYDHubDk7fb9q6qppaGdm/////////9DPzYf + AgsW8MS6s7Ct0uLm7fqVY1lcZmx6cfLDtq/c5u32/auqpKOdmf///////1A/OSgHEhbxvsO8t7KuzNnk + 7PT+blhZXGNlgMu8tK/S4urt9v2rpqGfmZf//////1A/MigMGRfr1sfEwLizr8/i5u37i1RRWF5f8cK3 + sq6t0+Lm7PT7q6afmZP//////1A/LBsNGR5H68vHxcG7tbDT5Oz0/mdMVFdg1ru0sK6urrDO3uj5/qKg + mZL//////085LBsKESQeR+vWvsbDvLax2ebt+n1QT0Xww7WxsLCytLe7wd33qKKemZL/////UE9BKxwJ + Cg8ZHiZK27/HxMC3sOLq7v5pX/C9tbGwsbO3u8HH1vGMj5qbmZKN////UE9BKwwKCAcLFBUXSuDWvsXA + ts3k6vPv7+Gyrq+wsrfAxcjxgIyLjpSZl5CK////UE9BIw0LCQcFBxAkHiZK277Eu7PT5OTk4tnPra2v + tsDI8oBxfXqGiI2Tk42H////XU86Ig8NCggFAgIHExUXStHHvbev09zc2dPSz9LQxNaDX2VudXZ+goeQ + ko2E////XU86IhAODAoHBAEAAQ0dLkrLw7myrdLT0s/S09nh+GhpXmNrbXBzeISKkIqC////XU86EREP + DQsIBQIBAAARFibXxrmyrq3MzMzP2eLn92leW1xhZGZqbX6Fiod+////Z1c6EhIRDwwKBwQBAAAEGRfg + xrexrq2tra3P2eLp85ZeWFlZWlxcZHCCh4V4////b109KRMREA4MCQYDAQADGS7WwLOwra2trq2t0+Lm + 7vuLVFFRVlZWWWZ4hYJz////b11LMRMTERANCwgFAgIOHtvBtbGvra6vsbGwrtnk7PX7ckhISEhRUVpw + fnhw////b2dXPSkTEhEPDQoICRIX38CzsK+urrCztri3tLDc5u31+15AQEBASFZmc3Bw/////29XPTEY + ExIRDw0OGWDFt7Kvrq2tsLO6vcK9u7ax3Obt9ftvOzM7O1Fcamb//////29lSz0UGBMSERgW8MKzr6+t + ra2usrvG1svHw8C4sdzm7fX6lTwzM0hWYWT//////29vVz0xFBQUHS3WvLKvrq2tra2xt8bxSuvRyMW9 + uLHc5uzt+qhDM0BRWWT///////93ZUs3GR0eg9bBt7Kvra2tra+zvfEXLSZK28jFvbix2eTq7vlpPkhR + Vv////////90b1dJJB4m0cfCu7Wwra2trrG61S0UFBUuStvIxb24ssnY4/dSPkxWWv//////////d2VX + Uh4m4L/Gwru1sK2usLXFYBIEBREVF0rRyMW9urfA2i06PExW////////////dHdlSUUuSuC/xsK7tbCw + tL3xGQUBAQMQHRdK277FwcLfTRk+RlNi/////////////3d0ZVJFLkrgy8bCu7W0u9YWCgQCAQEDDh0X + StG+x9ZNJDg8TFj///////////////95dGVSRS5K17/Gwru7xhcTCQcFBAMBAw4VLuvW1k0kNjxGU/// + ////////////////f3RlUkUuSte/xsPF8R0OCwoIBwUEAwUTFi5HTR0yPkRU//////////////////// + /393ZVJFTUrXy77bHhMPDQwKCQgHBQQJFBUWJDQ+RFT///////////////////////9/eWVpX2BH8tsX + GRIRDw4NCwoJBwYFITA6OUNEVP//////////////////////////eXl0aXFoYC0dGBMSERAPDQwLCiAo + Mjk/Q05V/////////////////////////////3d/fH1pcVJLPTowMDAvLys0NDk/P05OVVX///////// + ////////////////////////d398dGVlV1dPQUFBQU9PUFBQUFVV//////////////////////////// + //////////90eX95b2dnZ11dXV5eXl5eXv////////////////////////////////////////////9v + cnJycnJubm5eXv////////////////////////////////////////////////////////////////// + ////////////////////////////////AAD///////8AAP//wB///wAA//wAAf//AAD/8AAAf/8AAP/A + AAAf/wAA/4AAAA//AAD/AAAAB/8AAP4AAAAD/wAA/AAAAAH/AAD4AAAAAP8AAPAAAAAAfwAA4AAAAAA/ + AADgAAAAAD8AAMAAAAAAHwAAwAAAAAAfAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAAAA + AAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAgAAAAAAPAACAAAAAAA8AAIAAAAAADwAAwAAAAAAfAADAAAAAAB8AAOAA + AAAAPwAA4AAAAAA/AADwAAAAAH8AAPgAAAAA/wAA/AAAAAH/AAD+AAAAA/8AAP8AAAAH/wAA/4AAAA// + AAD/wAAAH/8AAP/wAAB//wAA//wAAf//AAD//4AP//8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAC9AAAAuwAAALkAAAC2AAAAswAAALEAAAClAAAAowAAAKEA + AACcAAAAkQAAAG0AAABpAAAAZAAAAF0AAABYAAAANgAAADAAAAAqAAAAIgAAABMAAAAHAAAAhgEBAL8C + AgC8AgIAqAICAKECAgBPAQEAQgEBALsDAwCyAwMArQMDAH0CAgC3BAQAiwMDALMFBQC8BwcA3AkJAKUH + BwBVBAQAzgsLALwKCgCqCQkAOwMDAOgNDQAPAQEAXQcHAJcMDACgDg4AvBISAPkaGgDNFhYAWwoKAOcb + GwC2FhYA2hwcAKsXFwDDGxsAuxwcALUbGwDKICAA8ycnAJMZGQBFDAwA0yYmAOUtLQC2JCQA/TQ0APAy + MgDGLCwA+Do6AKwoKAD/PDwA1TMzAP8+PgDpOjoA/0REAPBAQADIOTkAwDc3AP9KSgC3NTUATRcXANdC + QgD/T08A+E1NAM1AQAAqDQ0A5khIACYMDADxTU0Avj09AKw5OQCVMTEA/1VVAMFCQgC6QUEAsT4+AP9b + WwDISUkAvkZGALFCQgBpJycAzU1NAAgDAwD/YmIANBQUAOhcXAD/ZmYAu0tLAPhnZwD/a2sAs0xMALxR + UQD/cnIAkUFBAHk2NgCkS0sA/3Z2AJtISAC2VVUAzmNjAP98fADodXUASyYmAP+EhAD2gYEAqFlZABYM + DAD/jIwAm1hYAGc7OwD+k5MAqmNjANJ9fQD/mpoA/56eAP+iogD/qKgA/6qqAN6WlgD/ra0A+6qqAP+w + sABzUVEA/7i4AOurqwD/u7sA/729APK3twCFZWUA/8PDAL6RkQD/ysoA16urAPXExAD3ysoAwqamAMyx + sQAhHR0AKScnAB0cHAAA//8AAP39AAD7+wAA+PgAAPb2AAD19QAA8/MAAPHxAADv7wAA7e0AAOrqAADm + 5gAA5OQAAOPjAADh4QAA398AAN3dAADY2AAA19cAAM3NAADLywAAx8cAAMPDAADBwQAAtbUAALCwAACt + rQAAqakAAKamAACjowAAlZUAAJKSAABmZgAAZGQAAY2NAAGCggACvLwAA/7+AAPs7AADwsIAApycAAT8 + /AAEtLQABK6uAAJcXAAEl5cAB/n5AAf09AAG2NgABaKiAASRkQADbGwACPX1AAR4eAAJ/v4ADv//AAZm + ZgAQ+voACpycABT//wALiooAFfT0ABz9/QAe6OgAI/39AAk6OgAs/f0ALu7uACKurgAz/f0AHo+PADz8 + /AA86+sAPNXVAEn9/QBG7+8AInBwAFL+/gA2oaEAVPX1AF/9/QAECgoAYOTkAFzT0wBr8fEAaM7OAGO8 + vABx1dUAgN7eAHzIyACQ5eUAfpeXAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////9janB3foKFiP////////////// + /////////////0lJUWNzfoWIiouMjI6Q//////////////////////9ERERJUWNwe4KJjpKUlZSS//// + //////////////9FPj4zMzZKTlVqc36IjJSYmpiVlP//////////////QjY2LSkwdf5XTV9te4KFjZmb + nJqYlP///////////0I2LSYfHOfr9YBOX213f4eR8fienZqYlP//////////OCYZIWvH3Ojz/GhVanN8 + g6HT6vufnZqV/////////zgpGx3ftqrZ5fD3hltjb3p91a3j8/2fnZiS//////9BNCAc1ry3r6bh6vP8 + aF9sdKK3q9rq8/2fnJKQ/////z0yIxPPwby3rqbj7feDWWR90LCqpOHq8vuelo7/////PSoXERbDwr24 + sajl8PliXqK0rKmoqcni7P6bjP///0Y6KgkNExbExb+6s9Lo7pF9yqioqa2zts3pl5OMif//RjolBAoO + ExbPxsC5sNzl5uLZo6WpsLrGoISHj4uF//9GOyIDBAoMERX02Lu0qdrh3trZzK7Uon10en+JioL//1A8 + JAQCAwcXDxMWxbWrpNna2t7g71NeaGxvd4KIfv//XEMgBgQBAAMJDRTktaqlo8jZ3uPsdVRWX19qe4V3 + //9lQysgBgMBAAkQgb2tqKamqKjR4er2dk5LTVVwfnP//2VSORogBgYLHd20q6emp6ywsq7S5fD6gFdF + SWNzbf//YWE5JwcHIRLOrKempaars7rHuLLX6PD3/GZFUWpj////bkgxFxBay7OrpqSkqLDL5Ma/urHR + 5e3y+UZLVf////9uYj8o5MW8tq+opaaruIEUFtbAuK+o4OLxQ0RL/////2JxXlMu1sG8tq+pqa/fEA0T + 9Ma+uLS01DU4RE3//////3F2Z1gWw8G8t7Kx1B0ICA8Vz8K+u9UdMj5H/////////3l4Z1hpw8G9usdY + CwACFxEWw8LYLCs2Rf//////////Ynl4Z1hpw8LA2A4FAAAHDBMu5CwnOEVO////////////Znl4Z2uB + z9sRCwQBAAIKDBwvMThCTP//////////////Znl2dX1rQCEaHyIZGB4rMTxBQkz///////////////// + /3GAeHReSDw3NzI6Oj1GSkr//////////////////////11xeXJuZWBcT1dXV0pK//////////////// + ////////////XGVlZGRkV0//////////////////////////////4B///wAD//4AAf/4AAB/8AAAP+AA + AB/gAAAfwAAAD4AAAAeAAAAHgAAABwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AA + AAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gAAH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvAAAALsAAAC6AAAAsgAAALEAAACwAAAArQAAAKcAAACfAAAAkwAAAH4A + AABtAAAAPAAAAKgEBAChBQUAYAMDADsCAgBVBAQAOwMDAKIMDAC0Dg4Avg8PANEWFgBoCwsA5xoaALsV + FQDFGBgAsxYWADwICACoFxcAgBISAPYuLgDfKSkA4y0tAJwfHwCyJCQAzy0tAOAxMQDzNzcA8zk5APA5 + OQAyDAwAliUlAMw0NABtICAAtTg4AEQVFQDHPz8A/1ZWAMFBQQD/V1cAiS8vANxMTAD0VVUA/1tbALxE + RADtV1cA/15eAP1dXQC2RkYAokFBAKhERACNOjoAuE9PALJMTABUJCQAQRwcAJ9HRwD/dHQA/3V1AJtI + SADfaWkA/3p6APx/fwD/i4sAgEtLAP+dnQD/np4A9JeXAI9bWwBZOjoA/6qqABgREQD6tLQA/7+/AP29 + vQD/xcUA6LS0ANaurgC6mpoAjHh4AN2+vgDRt7cAODY2AAD9/QAA/PwAAPn5AAD4+AAA9fUAAPDwAADv + 7wAA6OgAAOXlAADk5AAA09MAAM7OAADKygAAyMgAAMPDAACurgAAoqIAAGtrAABPTwAB//8AAfj4AAH1 + 9QABvLwAAbGxAAGJiQAC398AAtzcAALQ0AAD5uYAA+TkAAf8/AAJ8vIACefnAANSUgAO//8ADePjAA/v + 7wAGXFwABUtLABXf3wAHSEgAGf7+AB38/AAFLCwAH/b2AAc3NwAPcnIAI/HxACLj4wAl6uoAC0VFADL4 + +AA5/f0AP///ABxubgBD/v4AO83NAF7//wBVyckAEigoAGzp6QBv5+cAZK+vACQ7OwAbKioAPl9fAIPB + wQCOyMgAa4aGAFdpaQA2Pz8AHyMjAIiSkgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKenp6enp6enp6enp6enp6enp6enpzJESk1Rp6enp6enp6enHyA7 + OEhMU1dVp6enp6enGBNdnD85SU+iXFanp6enFg+GhZemNUeejaFbVKenpw2ZaXqSmzc+dn2ToFinpxoG + Em9rfpWjpWRic45ZUacZAggQhGyCj4Fxd5RLTk2nGwUAAwuLZXyAh580OkhKpyMHBAARg2NgcoiYQCcw + RactDgkcdWBfZGh7kZpaKDanpyIpbWdhXoxSbniKliWnp6c9LnBqZnkXColsdCwmp6enp0NCf2mdAQQM + kEEhp6enp6enRlCkHhQVHSokp6enp6enp6enPDcxLyunp6enp6f///84+D8ha+AP6PPAB1VqgAODoYAD + +58AAZX/AAH//wABOCkAAd+2AAHl8IADW2OAA33VwAfz/eAPmJL4P///KAAAADAAAABgAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAEFxcXCwAAABIAAAAZAAAAIAAAACUAAAAoAAAAKgAA + ACgAAAAlAAAAIAAAABkAAAASAAAACgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACgsLCxcGBgYpBAQEPgMDA1EDAwNgAgICbAIC + AnUCAgJ8AAAAfgAAAHsCAgJ1AgICbAMDA2AAAABQAAAAPQAAACgAAAAWAAAACgAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BQEBABCcnJw0eHh4iGBgYPykXF2B2Hh6Xnykpvr83 + N9fYRETn6lFR9PdfX/v+a2v/93Bw++lxcfTVb2/quWVl25VWVslgOjqvEw0NigICAnAAAABWAAAAOgAA + AB4AAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAJGRkYLISEhHxwcHEB+FxeKtB4exd8o + KOr/ODj//0VF//9QUP//W1v//2Zm//9wcP//eHj//39///+Ghv//jIz//5GR//+Wlv//mZn/2YaG7aNo + aNJZOjquAAAAfwAAAF8AAAA7AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BZmZmBT09PRUwMDA1jB4eiMQa + Gs/0Hh75/ysr//86Ov//SEj//1ZW//9lZf//cXH//319//+Ghv//jo7//5OT//+Zmf//nZ3//6Cg//+k + pP//pqb//6en//+oqP/0oqL5tHl53F9BQbMAAAB9AAAAVgAAAC0AAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wGSkpIHSkpKH3Qp + KV66Hx++6yEh9fsmJv/9Li7//zU1//9DQ///T0///11d//9tbf//enr//4aG//+Pj///l5f//56e//+k + pP//qqr//66u//+wsP//s7P//7Oz//+zs///s7P//7Oz/+6np/ahcXHUNCYmngICAmwAAAA8AAAAFwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////AoCA + gAhEREQimyQkhNAgINz0JSX/9y0t//kvL//8MjL//zQ0//86Ov//RET//1BQ//9aWv//aGj//3R0//9/ + f///ior//5aW//+goP//qqr//7Ky//+3t///vLz//76+//++vv//vb3//7u7//+5uf//t7f/y5GR52VJ + SbcCAgJ5BAQERwAAABoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8DqqqqCU5OTiSsJSWW3CIi7O8lJf/yKir/9Ssr//cqKv/7KCj//iUl//0nJ//4MTH/9zk5//1F + Rf//UVH//19f//9ra///eHj//4WF//+Skv//np7//6mp//+zs///vLz//8LC///Fxf//xsb//8XF///C + wv//vr7//7u7/+KkpPKAXFzDAgICgAAAAEoAAAAaAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wOzs7MKWlpaIrAkJJrfISHz7CUl/+4kJP/wIiL/9B4e//YaGv/5FRX/+BER/+sS + Ev/WICD/3C0t//Q1Nf/+QkL//05O//9bW///Z2f//3V1//+Bgf//jY3//5ub//+mpv//srL//7y8//7D + w//9yMj//svL///Kyv//x8f//8LC//++vv/ura33iGNjxwQEBIAAAABGAAAAFwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////A9XV1QZsbGwariYmkNseHvPnISH/6SAg/+saGv/tFRX/8Q8P//UM + DP/xCQn/1QcH/6EPD/+KLS3/qzk5/983N//7PT3//0lJ//9WVv//YmL//2xs//94eP//hIT//4+P//+a + mv/9paX/9Kur/+Wrq//js7P/7sLC//vMzP/+zs7//8nJ///ExP//v7//7q2t94FeXsMCAgJ5AAAAPAAA + ABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Bo6OjhKoLCxz0iAg6uIbG//kGhr/5hUV/+gP + D//sCQn/7QQE/+MEBP+vAQH/WAcH/0NiYv9anJz/iG5u/8dAQP/1PT3//0ZG//9SUv//Xl7//2ho//9z + c///fHz//4aG//2QkP/wk5P/y4WF/5Rqav+QgYH/u56e/+a+vv/7zs7//8/P///Ly///xMT//76+/+Ol + pfJnSkq3AgICbAAAAC0AAAAIAAAAAAAAAAAAAAAAAAAAAP///wH///8Ev7+/DJg8PEPGISHU3Rsb/98V + Ff/hDg7/4wkJ/+YFBf/kAwP/0AEB/4MBAf8qNTX/CcDA/ybo6P9L6ur/ccDA/6NkZP/hQkL//END//9P + T///Wlr//2Rk//9ubv//eXn//4KC//aGhv/Penr/f09P/zdXV/8/u7v/esXF/7mqqv/pwcH//M7O///P + z///ysr//8PD//+9vf/LkpLnNicnngMDA1cAAAAbAAAAAwAAAAAAAAAAAAAAAP///wL///8HgICAFrch + IajZHR3/2hYW/9sNDf/dBgb/4AIC/98CAv/LAQH/cAAA/x5AQP8Dzc3/APf3/x7///9C/f3/Y/Hx/4S5 + uf/DTk7/9END//5MTP//VVX//2Bg//9qav//c3P//Hx8/+d6ev+eWVn/PCQk/w9/f/8X5ub/VvLy/4vZ + 2f/CsLD/68PD//zOzv//zs7//8jI///AwP//uLj/oXJy1AYGBn8AAAA7AAAACwAAAAAAAAAAAAAAAP// + /wTMzMwKqykpYc0eHvHVFhb/1g4O/9gGBv/aAgL/3AAA/8sAAP9+AAD/GkBA/wO8vP8A8/P/AP7+/xb/ + //81////Vf///3Lh4f+oXl7/5kRE//xGRv//UFD//1pa//9kZP//bW3/9nNz/8lmZv9kNjb/EUdH/wK5 + uf8C9/f/Ov7+/2v39/+X1NT/xrCw/+zDw//9zs7//8zM///Fxf//u7v/7qio92NGRrQDAwNgAAAAHgAA + AAIAAAAAAAAAAP///wZxcXESuyEht9EaGv/RERH/0wYG/9QBAf/XAQH/ywAA/4kAAP8YRkb/AsPD/wDv + 7/8A+fn/AP7+/xD///8o////Rv///2Px8f+JmZn/x01N//RDQ///Skr//1NT//9cXP/8ZWX/5mVl/5tJ + Sf8vGBj/A5ub/wHh4f8A+fn/Jf///0////91+Pj/mdXV/8awsP/swsL//MvL///IyP//v7///7W1/7d+ + ft0GBgaBAAAAOgAAAAoAAAAAAAAAAP///weqJiZVyR0d9MwVFf/ODAz/zgMD/84AAP+7AAD/awAA/xdD + Q/8CsrL/AN/f/wDw8P8A+fn/AP7+/wn///8c////Nv///1X9/f9y39//o2pq/+NDQ//8Q0P//0tL//9U + VP/2Wlr/y1JS/2cuLv8TKyv/ALy8/wDp6f8A+vr/FP///zX///9X////efPz/5vW1v/JsLD/7sLC//zH + x///wcH//7a2//SmpvldPz+vAwMDVwAAABYAAAAAAAAAALOzswq3IyOfyhwc/8kREf/JBwf/xQEB/6kA + AP9hAAD/Ez4+/wKNjf8AuLj/ANHR/wDm5v8A9PT/APz8/wL///8R////KP///0X///9j8vL/ipWV/8xH + R//2PDz//0FB//1JSf/pTEz/oTo6/zQVFf8FeHj/ANbW/wDv7/8A+/v/CP///x////84////V////3X1 + 9f+Zzs7/x6ys/+u9vf/8wMD//ri4//+srP+mbW3TBwcHcQYGBikAAAADAAAAAIVHRxm9ISHaxhkZ/8UM + DP/EBQX/ugAA/40AAP9BAAD/DB0d/wFqav8AnJz/ALa2/wDPz/8A4+P/APLy/wD7+/8G////G////zb/ + //9V+fn/dsLC/6lcXP/kOzv//Tc3//c+Pv/MOTn/aCEh/xI9Pf8Bv7//AObm/wD09P8A/Pz/Af///w3/ + //8a/v7/L/39/0n5+f9o7u7/j8TE/8Ojo//tt7f//Li4//+urv/bjIztFxISiwQEBD4AAAAKAAAAAKgk + JFXFIyP/wxcX/8EJCf/AAgL/twAA/5QAAP9UAAD/GgAA/wMfH/8AcnL/AJaW/wCvr/8Ax8f/ANzc/wDs + 7P8A+Pj/C/7+/yb///9G/f3/Ze3t/4WoqP/DQUH/7i8v/+cwMP+hJyf/OA8P/wZubv8A29v/AO/v/wD4 + +P8A/Pz/AP39/wD8/P8A+fn/BfX1/xXv7/8y4uL/XLq6/5qTk//drKz/+bW1//+trf//n5//ZD8/sQYG + BlEAAAASAAAAALIlJYnCISH/vhQU/74HB/+/AgL/vgAA/60AAP+FAAD/TwAA/xsAAP8DFxf/AGdn/wCM + jP8Apqb/AL29/wDT0/8A6Oj/APf3/xP+/v8z////Uv39/23c3P+eTk7/xyws/7YjI/9dEhL/E0RE/wG4 + uP8A7e3/APb2/wD5+f8A+fn/APX1/wDv7/8A5ub/ANra/wPGxv8Pqqr/N319/41sbP/epKT/+7Oz//+s + rP//np7/mFtbygoKCmIAAAAZAAAAALcoKLG/ISH/uxMT/7sHB/+9AgL/wAAA/78AAP+yAAD/jwAA/1sA + AP8nAAD/CAIC/wFHR/8Afn7/AJub/wC0tP8Az8//AObm/wD5+f8d/v7/Pf///1X09P9wjo7/gjs7/2Qg + IP8gSkr/AsvL/wDt7f8A9/f/APj4/wD39/8A8fH/AOfn/wDZ2f8Ax8f/AZub/whfX/8fOjr/Xjw8/7h5 + ef/wpqb//rGx//+qqv//nZ3/vG1t3RAQEG8AAAAgAAAAALcpKdG8IiL/uRMT/7gGBv+5AQH/vgAA/8MA + AP/EAAD/uwAA/54AAP9uAAD/PAAA/xIAAP8CKyv/AGVl/wCPj/8Ar6//AM/P/wDp6f8D+/v/Jf7+/z39 + /f9I3d3/R7Cw/zGmpv8Sy8v/APX1/wD8/P8A+/v/APn5/wDz8/8A5+f/ANDQ/wCtrf8DhIT/Ej09/zYb + G/9vODj/smFh/+aGhv/7oaH//6ur//+np///mpr/13Z26w8PD3gAAAAlAAAAALksLOe6IyP/thIS/7QE + BP+2AQH/uwAA/8AAAP/FAAD/yQAA/8UAAP+xAAD/iQAA/1cAAP8pAAD/CgAA/wFHR/8Ajo7/ALa2/wDY + 2P8A8PD/DP39/yP///8u/f3/LPj4/yD4+P8R/f3/Bf///wD///8A////APv7/wDq6v8AzMz/BISE/xIt + Lf8xFRX/ZCsr/55HR//MX1//63Nz//qDg///lpb//6Oj//+jo///lpb/63t79RQUFIAGBgYpAAAAALsx + Mfe3IiL/shAQ/7EDA/+zAQH/uAAA/70AAP/CAAD/yAAA/84AAP/OAAD/xAAA/6YAAP91AAD/OQAA/wwA + AP8BUVH/AJub/wDIyP8A5+f/APr6/w3///8Y////Gf///xP///8N////CP///wf///8I////Bubm/wKx + sf8MYWH/KxUV/2IiIv+bOjr/yU9P/+hfX//2Zmb//HBw//94eP//iYn//5mZ//+dnf//kpL/+Hx8+xUV + FYQGBgYrAAAAALs0NP60IiL/rw4O/64DA/+wAAD/tQAA/7oAAP+/AAD/xQAA/8sAAP/RAAD/1QAA/9IA + AP+2AAD/egAA/zEAAP8HDAz/AHd3/wC6uv8A4OD/APX1/wD///8J////C////wr///8H////CP///w3/ + //8T/f3/GsnJ/yZiYv9KGRn/iSgo/8Y+Pv/nTU3/9ldX//xdXf//YGD//2Rk//9tbf//fX3//46O//+X + l///jIz//nh4/xgYGIEGBgYpAAAAALo4OPezJSX/rA8P/6sCAv+tAAD/sgAA/7cAAP+8AAD/wgAA/8gA + AP/OAAD/0wAA/9gAAP/UAAD/rgAA/2gAAP8fAAD/AzU1/wChof8A4OD/APT0/wD9/f8B////A////wP/ + //8E////B////xD///8d/f3/LdfX/0h9ff+FMDD/zTc3//NDQ//9S0v//09P//9SUv//VVX//1hY//9e + Xv//cHD//4OD//+QkP//hob/+G5u/BkZGXsHBwcmAAAAALg+PuizKyv/qhIS/6gCAv+qAAD/rgAA/7MA + AP+5AAD/vgAA/8QAAP/KAAD/0AAA/9YAAP/aAAD/ygAA/5MAAP86AAD/CCUl/wCgoP8A5eX/APb2/wD9 + /f8A////AP///wD///8B////Bv///xD///8h////N/b2/1PKyv+IWlr/zz4+//k9Pf//QED//0ND//9G + Rv//SEj//0pK//9QUP//YmL//3h4//+IiP//gID/7GJi9RsbG3IICAghAAAAALZBQdOzMDD/qRUV/6UE + BP+nAQH/qwAA/7AAAP+1AAD/ugAA/8AAAP/GAAD/zAAA/9IAAP/XAAD/zQAA/5UAAP8xAAD/BWpq/wDM + zP8A8PD/APn5/wD+/v8A/v7/AP///wD9/f8A/v7/Af7+/wv///8d////N////1Ly8v9zvr7/qVtb/+g6 + Ov//NDT//zc3//86Ov//Ozv//z4+//9CQv//VVX//2tr//+AgP//eHj/3FdX6R4eHmcKCgoaAAAAALRD + Q7S0ODj/qhwc/6QICP+lAgL/pwAA/6wAAP+xAAD/tgAA/7wAAP/CAAD/yAAA/84AAP/OAAD/tAAA/1EA + AP8PTEz/AcfH/wDt7f8A9/f/APv7/wD+/v8A/f3/APv7/wD39/8A9vb/APj4/wD8/P8R/v7/Kv///0f9 + /f9k9fX/hL+//71PT//6Kir//yoq//8rK///Li7//zAw//82Nv//R0f//2Ji//91df//bm7/xUxM2iMj + I1gAAAASAAAAALFBQYq2QED/rCcn/6QPD/+jBQX/pAAA/6gAAP+tAAD/sgAA/7cAAP+9AAD/wgAA/8EA + AP+oAAD/QQAA/wx/f/8B0ND/APHx/wD4+P8A+/v/AP39/wD9/f8A+Pj/APHx/wDp6f8A5OT/AObm/wDu + 7v8A+fn/FP7+/zH///9P////bPX1/4y6uv/OQED/+x4e//8dHf//Hx///yIi//8oKP//PDz//1VV//9m + Zv//YGD/qkJCwykpKUUAAAAKAAAAALE9PU+3R0f/rS8v/6MVFf+hCAj/oQEB/6QAAP+pAAD/rQAA/7MA + AP+3AAD/tQAA/44AAP8wDw//Bqys/wDn5/8A9fX/APr6/wD8/P8A/v7/AP7+/wD5+f8A8PD/AN/f/wDL + y/8Aw8P/AMjI/wDX1/8A6Oj/APf3/xb9/f80////Uv///2719f+Ltrb/vkZG//UVFf//EBD//xUV//8b + G///MTH//0hI//9bW///Vlb/iDw8nzU1NTBAQEAEAAAAALEzMwqzRUXZsDo6/6YfH/+gDQ3/ngEB/6EA + AP+kAAD/qQAA/6sAAP+iAAD/agAA/xtDQ/8DwsL/APDw/wD6+v8A+/v/AP7+/wD+/v8A/v7/APz8/wD0 + 9P8A29v/AaWl/wFtbf8Ac3P/AJ6e/wC3t/8Azs7/AOTk/wD39/8W/v7/Nf///1H///9p9/f/f9jY/6Rt + bf/qERH//wcH//8REf//Jyf//z4+//9OTv/jSUntSzw8ak1NTR7///8B////AQAAAACwQkKbtEVF/6kq + Kv+hFBT/nQUF/5wAAP+dAAD/mAAA/4AAAP9DAAD/D2pq/wHR0f8A8/P/APv7/wD9/f8A/v7/AP///wD/ + //8A/v7/APf3/wDl5f8CoqL/Cj8//xAFBf8HERH/AVBQ/wCHh/8Ara3/AMrK/wDk5P8A9/f/Fv7+/zH/ + //9L////Xv39/27f3/+LfHz/0Rwc//oPD///IiL//zU1//9BQf+/Pz/MRkZGSWlpaRH///8B////AQAA + AACuPT1LtktL8602Nv+kHx//mgoK/5EBAf9+AAD/UgAA/yYSEv8Jb2//AcbG/wDn5/8A9fX/APv7/wD+ + /v8A////AP///wD+/v8A+/v/APHx/wHJyf8TQUH/PAAA/0oAAP8qAAD/CgEB/wFISP8AiIj/AKur/wDI + yP8A5OT/APb2/xD9/f8n/v7/Ofv7/0bv7/9XtbX/kDQ0/94aGv/6KSn//Tc3//U4OPmVQUGWXV1dLL+/ + vwgAAAAAAAAAAAAAAAAAAAAAsUZGr7JDQ/+nLS3/mxQU/4IGBv9bAQH/JQIC/wdRUf8BmJj/AMHB/wDZ + 2f8A7Oz/APj4/wD+/v8A////AP///wD9/f8A9vb/AN/f/wiPj/9MAAD/lwAA/5sAAP9wAAD/NAAA/wsA + AP8BR0f/AImJ/wCrq/8AyMj/AOTk/wD09P8C+fn/EPPz/xzX1/81e3v/iRkZ/9wbG//3Kyv/+zg4/8w5 + OdVYWFhRi4uLFv///wQAAAAAAAAAAAAAAAAAAAAArT4+UrNLS+6uPT3/nyUl/4MQEP9VBgb/IQEB/wUh + If8Aenr/AKWl/wDCwv8A29v/AO3t/wD4+P8A/v7/AP39/wD5+f8A6+v/BKqq/zMREf+pAAD/ywAA/8gA + AP+sAAD/dwAA/zcAAP8KAAD/AVFR/wCIiP8ArKz/AMnJ/wDf3/8A5ub/Ac7O/wqBgf9JBwf/sA8P/+kd + Hf/3Ly//7TY29p9CQpR0dHQus7OzCv///wMAAAAAAAAAAAAAAAAAAAAAAAAAAK9FRZu0Skr/qDY2/5Ie + Hv9sDg7/NgMD/w8AAP8CKir/AH19/wClpf8AwsL/ANzc/wDt7f8A+Pj/APn5/wDv7/8Bycn/HTs7/5UA + AP/JAAD/0gAA/9MAAP/MAAD/sQAA/3oAAP86AAD/DAAA/wFKSv8AjIz/AK+v/wDFxf8AwcH/CHx8/zUJ + Cf+SBgb/2RMT//AlJf/1MzP/wjw8xGtra0WmpqYX////BP///wEAAAAAAAAAAAAAAAAAAAAAAAAAAKo5 + OSiwSUnKsUhI/6UzM/+MHh7/YwwM/zMEBP8PAQH/Aisr/wB1df8ApaX/AMLC/wDb2/8A6+v/AO7u/wDa + 2v8Oamr/ZgAA/74AAP/LAAD/zgAA/9AAAP/RAAD/zQAA/7QAAP99AAD/PQAA/wsAAP8AWVn/AJCQ/wCe + nv8Ia2v/MwkJ/4kDA//QDQ3/6hwc//AsLP/UODjgjlJSa5WVlSTo6OgL////Av///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACtPz9ZtE9P47FHR/+kMzP/ihwc/2MODv8yBQX/DgEB/wMuLv8Afn7/AKam/wDB + wf8A19f/ANra/wSlpf88AAD/pQAA/8EAAP/FAAD/yAAA/8sAAP/NAAD/0AAA/80AAP+0AAD/dwAA/zEA + AP8GFBT/AmNj/wZhYf8wCwv/hAQE/8oLC//kGBj/7CYm/90xMe6pRESNi4uLLtLS0hH///8F////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0REdLRQUO+xSEj/ozIy/4kcHP9hDg7/MAQE/w0B + Af8CMDD/AH9//wCkpP8Aubn/Aa6u/xo8PP9+AAD/tQAA/7wAAP+/AAD/wgAA/8UAAP/IAAD/ywAA/80A + AP/JAAD/pwAA/2YAAP8tAAD/GggI/zIGBv9/AwP/xgoK/+AWFv/nJSX/4S8v9LQ8PJ6MjIwz3NzcFv// + /wr///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALBHR361U1PwskpK/6Q1 + Nf+NIiL/YxER/zMICP8QBAT/AzEx/wB0dP8Bj4//Dk1N/1sAAP+lAAD/swAA/7cAAP+6AAD/vQAA/8AA + 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 + yf+AAU3/wANP/+AHYf8= + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/directx.ico b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/directx.ico differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/seafloor.png b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/seafloor.png new file mode 100644 index 00000000..4ce440f9 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/seafloor.png differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/D3D10Tutorial07_WinFormsWindow.csproj b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/D3D10Tutorial07_WinFormsWindow.csproj new file mode 100644 index 00000000..579b4999 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/D3D10Tutorial07_WinFormsWindow.csproj @@ -0,0 +1,111 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {9DCD7874-4D07-413B-9E64-AA947B11D9FC} + WinExe + Properties + D3D10Tutorial07 + D3D10Tutorial07 + v3.5 + 512 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + 3.0 + + + + 3.5 + + + + + 3.0 + + + + + + Form + + + TutorialWindow.cs + + + + + TutorialWindow.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + PreserveNewest + + + PreserveNewest + + + + True + Settings.settings + True + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/D3DStructs.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/D3DStructs.cs new file mode 100644 index 00000000..e2c84eee --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/D3DStructs.cs @@ -0,0 +1,91 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Runtime.InteropServices; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; + +namespace D3D10Tutorial07 +{ + #region SimpleVertex + [StructLayout(LayoutKind.Sequential)] + public struct SimpleVertex + { + [MarshalAs(UnmanagedType.Struct)] + public Vector3F Pos; + [MarshalAs(UnmanagedType.Struct)] + public Vector2F Tex; + } + #endregion + + #region Cube + public class Cube + { + public CubeVertices Vertices = new CubeVertices(); + public CubeIndices Indices = new CubeIndices(); + + [StructLayout(LayoutKind.Sequential)] + public class CubeVertices + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 24)] + private SimpleVertex[] vertices = + { + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 1.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Tex = new Vector2F ( 0.0f, 1.0f ) }, + }; + } + + [StructLayout(LayoutKind.Sequential)] + public class CubeIndices + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 36)] + private uint[] indices = + { + 3,1,0, + 2,1,3, + + 6,4,5, + 7,4,6, + + 11,9,8, + 10,9,11, + + 14,12,13, + 15,12,14, + + 19,17,16, + 18,17,19, + + 22,20,21, + 23,20,22 + }; + } + } + #endregion +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Program.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Program.cs new file mode 100644 index 00000000..a9468b18 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Program.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace D3D10Tutorial07 +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new TutorialWindow()); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..a6cb7a5e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("D3D10Tutorial07")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("MSIT")] +[assembly: AssemblyProduct("D3D10Tutorial07")] +[assembly: AssemblyCopyright("Copyright © MSIT 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c41482e2-72c7-40c0-8c12-9f02992cfa19")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Properties/Resources.Designer.cs new file mode 100644 index 00000000..184ce0d9 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Properties/Resources.Designer.cs @@ -0,0 +1,69 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial07.Properties +{ + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("D3D10Tutorial07.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Properties/Settings.Designer.cs new file mode 100644 index 00000000..367b1641 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Properties/Settings.Designer.cs @@ -0,0 +1,28 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace D3D10Tutorial07.Properties +{ + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Tutorial07.fx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Tutorial07.fx new file mode 100644 index 00000000..33e7aff7 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Tutorial07.fx @@ -0,0 +1,75 @@ +//-------------------------------------------------------------------------------------- +// File: Tutorial07.fx +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + +//-------------------------------------------------------------------------------------- +// Constant Buffer Variables +//-------------------------------------------------------------------------------------- +Texture2D txDiffuse; +SamplerState samLinear +{ + Filter = MIN_MAG_MIP_LINEAR; + AddressU = Wrap; + AddressV = Wrap; +}; + +cbuffer cbNeverChanges +{ + matrix View; +}; + +cbuffer cbChangeOnResize +{ + matrix Projection; +}; + +cbuffer cbChangesEveryFrame +{ + matrix World; + float4 vMeshColor; +}; + +struct VS_INPUT +{ + float4 Pos : POSITION; + float2 Tex : TEXCOORD; +}; + +struct PS_INPUT +{ + float4 Pos : SV_POSITION; + float2 Tex : TEXCOORD0; +}; +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +PS_INPUT VS( VS_INPUT input ) +{ + PS_INPUT output = (PS_INPUT)0; + output.Pos = mul( input.Pos, World ); + output.Pos = mul( output.Pos, View ); + output.Pos = mul( output.Pos, Projection ); + output.Tex = input.Tex; + + return output; +} +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( PS_INPUT input) : SV_Target +{ + return txDiffuse.Sample( samLinear, input.Tex ) * vMeshColor; +} +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS() ) ); + } +} + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Tutorial07.fxo b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Tutorial07.fxo new file mode 100644 index 00000000..cb026042 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Tutorial07.fxo differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/TutorialWindow.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/TutorialWindow.Designer.cs new file mode 100644 index 00000000..39312209 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/TutorialWindow.Designer.cs @@ -0,0 +1,49 @@ +namespace D3D10Tutorial07 +{ + partial class TutorialWindow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // TutorialWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(639, 474); + this.Name = "TutorialWindow"; + this.Text = "D3D 10 Tutorial 7: Texture Mapping and Constant Buffers (Double Click inside wind" + + "ow to set Full Screen)"; + this.Load += new System.EventHandler(this.TutorialWindow_Load); + this.ResumeLayout(false); + + } + + #endregion + } +} + diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/TutorialWindow.cs b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/TutorialWindow.cs new file mode 100644 index 00000000..a2c3af58 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/TutorialWindow.cs @@ -0,0 +1,374 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; +using System.Runtime.InteropServices; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; +using System.IO; +using Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; +using DXUtil = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; +using System.Windows.Media.Media3D; + +namespace D3D10Tutorial07 +{ + /// + /// This application demonstrates texturing + /// + /// http://msdn.microsoft.com/en-us/library/bb172491(VS.85).aspx + /// + /// Copyright (c) Microsoft Corporation. All rights reserved. + /// + public partial class TutorialWindow : Form + { + #region Fields + D3DDevice device; + SwapChain swapChain; + RenderTargetView renderTargetView; + ShaderResourceView textureRV; + ColorRgba backColor = new ColorRgba(0.0F, 0.125F, 0.3F, 1.0F); + Vector4F meshColor = new Vector4F(0.7f, 0.7f, 0.7f, 1.0f ); + + Effect effect; + EffectTechnique technique; + + InputLayout vertexLayout; + D3DBuffer vertexBuffer; + D3DBuffer indexBuffer; + + //variables from the .fx file + EffectMatrixVariable worldVariable; + EffectMatrixVariable viewVariable; + EffectMatrixVariable projectionVariable; + + EffectVectorVariable meshColorVariable; + EffectShaderResourceVariable diffuseVariable; + + Cube cube = new Cube(); + + Matrix4x4F viewMatrix; + Matrix4x4F projectionMatrix; + + float currentTime = 0f; + uint dwTimeStart = (uint)Environment.TickCount; + bool active; + #endregion + + #region TutorialWindow() + /// + /// Initializes a new instance of the class. + /// + public TutorialWindow() + { + InitializeComponent(); + } + #endregion + + #region TutorialWindow_Load() + private void TutorialWindow_Load(object sender, EventArgs e) + { + InitDevice(); + } + #endregion + + #region WndProc() + /// + /// Forces the window paint event + /// + /// + protected override void WndProc(ref System.Windows.Forms.Message m) + { + Invalidate(); + base.WndProc(ref m); + } + #endregion + + #region OnMouseDoubleClick() + /// + /// Switches full-screen mode + /// + /// + protected override void OnMouseDoubleClick(MouseEventArgs e) + { + if (active) + { + swapChain.IsFullScreen = !swapChain.IsFullScreen; + } + } + #endregion + + #region OnPaintBackground() + protected override void OnPaintBackground(PaintEventArgs e) + { + // Leave empty so that invalidate does not redraw the background causing flickering + } + #endregion + + #region OnPaint() + protected override void OnPaint(PaintEventArgs e) + { + if (active) + RenderScene(); + } + #endregion + + #region OnSizeChanged() + protected override void OnSizeChanged(EventArgs e) + { + if (active) + { + renderTargetView.Dispose(); + SwapChainDescription sd = swapChain.Description; + swapChain.ResizeBuffers(sd.BufferCount, (uint)ClientSize.Width, (uint)ClientSize.Height, sd.BufferDescription.Format, sd.Options); + SetViews(); + // Update the projection matrix + projectionMatrix = DXUtil.Camera.MatrixPerspectiveFovLH((float)Math.PI * 0.25f, ((float)ClientSize.Width / (float)ClientSize.Height), 0.5f, 100.0f); + projectionVariable.Matrix = projectionMatrix; + } + base.OnSizeChanged(e); + } + #endregion + + #region InitDevice() + /// + /// Create Direct3D device and swap chain + /// + protected void InitDevice() + { + device = D3DDevice.CreateDeviceAndSwapChain(this.Handle); + swapChain = device.SwapChain; + + SetViews(); + + // Create the effect + using (FileStream effectStream = File.OpenRead("Tutorial07.fxo")) + { + effect = device.CreateEffectFromCompiledBinary(new BinaryReader(effectStream)); + } + + // Obtain the technique + technique = effect.GetTechniqueByName( "Render" ); + + // Obtain the variables + worldVariable = effect.GetVariableByName( "World" ).AsMatrix; + viewVariable = effect.GetVariableByName( "View" ).AsMatrix; + projectionVariable = effect.GetVariableByName( "Projection" ).AsMatrix; + meshColorVariable = effect.GetVariableByName( "vMeshColor" ).AsVector; + diffuseVariable = effect.GetVariableByName( "txDiffuse" ).AsShaderResource; + + InitVertexLayout(); + InitVertexBuffer(); + InitIndexBuffer(); + + // Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList; + + // Load the Texture + using (FileStream stream = File.OpenRead("seafloor.png")) + { + textureRV = TextureLoader.LoadTexture(device, stream); + } + + InitMatrices(); + + diffuseVariable.Resource = textureRV; + active = true; + } + #endregion + + #region SetViews() + /// + /// Sets the views that depend on background buffer dimensions + /// + private void SetViews() + { + // Create a render target view + using (Texture2D pBuffer = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView(pBuffer); + } + + //bind the render target to the device + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { renderTargetView }); + + // Setup the viewport + Viewport vp = new Viewport() + { + Width = (uint)ClientSize.Width, + Height = (uint)ClientSize.Height, + MinDepth = 0.0f, + MaxDepth = 1.0f, + TopLeftX = 0, + TopLeftY = 0 + }; + + device.RS.Viewports = new Viewport[] { vp }; + } + #endregion + + #region InitVertexLayout() + private void InitVertexLayout() + { + // Define the input layout + // The layout determines the stride in the vertex buffer, + // so changes in layout need to be reflected in SetVertexBuffers + InputElementDescription[] layout = + { + new InputElementDescription() + { + SemanticName = "POSITION", + SemanticIndex = 0, + Format = Format.R32G32B32Float, + InputSlot = 0, + AlignedByteOffset = 0, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0 + }, + new InputElementDescription() + { + SemanticName = "TEXCOORD", + SemanticIndex = 0, + Format = Format.R32G32Float, + InputSlot = 0, + AlignedByteOffset = 12, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0 + }, + }; + + PassDescription passDesc = technique.GetPassByIndex(0).Description; + + vertexLayout = device.CreateInputLayout( + layout, + passDesc.InputAssemblerInputSignature, + passDesc.InputAssemblerInputSignatureSize); + + device.IA.InputLayout = vertexLayout; + } + #endregion + + #region InitVertexBuffer() + private void InitVertexBuffer() + { + IntPtr verticesData = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Vertices)); + Marshal.StructureToPtr(cube.Vertices, verticesData, true); + + BufferDescription bufferDesc = new BufferDescription() + { + Usage = Usage.Default, + ByteWidth = (uint)Marshal.SizeOf(cube.Vertices), + BindingOptions = BindingOptions.VertexBuffer, + CpuAccessOptions = CpuAccessOptions.None, + MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + }; + + SubresourceData InitData = new SubresourceData() + { + SystemMemory = verticesData + }; + + vertexBuffer = device.CreateBuffer(bufferDesc, InitData); + + // Set vertex buffer + uint stride = (uint)Marshal.SizeOf(typeof(SimpleVertex)); + uint offset = 0; + device.IA.SetVertexBuffers( + 0, + new D3DBuffer[] { vertexBuffer }, + new uint[] { stride }, + new uint[] { offset }); + Marshal.FreeCoTaskMem(verticesData); + } + #endregion + + #region InitIndexBuffer() + private void InitIndexBuffer() + { + IntPtr indicesData = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Indices)); + Marshal.StructureToPtr(cube.Indices, indicesData, true); + + BufferDescription bufferDesc = new BufferDescription() + { + Usage = Usage.Default, + ByteWidth = (uint)Marshal.SizeOf(cube.Indices), + BindingOptions = BindingOptions.IndexBuffer, + CpuAccessOptions = CpuAccessOptions.None, + MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + }; + + SubresourceData initData = new SubresourceData() + { + SystemMemory = indicesData + }; + + indexBuffer = device.CreateBuffer(bufferDesc, initData); + device.IA.IndexBuffer = new IndexBuffer(indexBuffer, Format.R32UInt, 0); + Marshal.FreeCoTaskMem(indicesData); + } + #endregion + + #region InitMatrices() + private void InitMatrices() + { + // Initialize the view matrix + Vector3F Eye = new Vector3F(0.0f, 3.0f, -6.0f); + Vector3F At = new Vector3F(0.0f, 0.0f, 0.0f); + Vector3F Up = new Vector3F(0.0f, 1.0f, 0.0f); + + viewMatrix = DXUtil.Camera.MatrixLookAtLH(Eye, At, Up); + + // Initialize the projection matrix + projectionMatrix = DXUtil.Camera.MatrixPerspectiveFovLH((float)Math.PI * 0.25f, ((float)this.ClientSize.Width / (float)this.ClientSize.Height), 0.5f, 100.0f); + + // Update Variables that never change + viewVariable.Matrix = viewMatrix; + projectionVariable.Matrix = projectionMatrix; + } + #endregion + + #region RenderScene() + /// + /// Render the frame + /// + protected void RenderScene() + { + Matrix4x4F worldMatrix; + + currentTime = (Environment.TickCount - dwTimeStart) / 1000.0f; + + //WPF transforms used here use degrees as opposed to D3DX which uses radians in the native tutorial + //360 degrees == 2 * Math.PI + //world matrix rotates the first cube by t degrees + RotateTransform3D rt1 = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), currentTime * 30)); + worldMatrix = rt1.Value.ToMatrix4x4F(); + + // Modify the color + meshColor.X = ((float)Math.Sin(currentTime * 1.0f) + 1.0f) * 0.5f; + meshColor.Y = ((float)Math.Cos(currentTime * 3.0f) + 1.0f) * 0.5f; + meshColor.Z = ((float)Math.Sin(currentTime * 5.0f) + 1.0f) * 0.5f; + + // Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor); + + // + // Update variables that change once per frame + // + worldVariable.Matrix = worldMatrix; + meshColorVariable.FloatVector = meshColor; + + // + // Render the cube + // + TechniqueDescription techDesc = technique.Description; + for (uint p = 0; p < techDesc.Passes; ++p) + { + technique.GetPassByIndex(p).Apply(); + device.DrawIndexed(36, 0, 0); + } + + swapChain.Present(0, PresentOptions.None); + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/TutorialWindow.resx b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/TutorialWindow.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/TutorialWindow.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/seafloor.png b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/seafloor.png new file mode 100644 index 00000000..4ce440f9 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/seafloor.png differ diff --git a/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorials.sln b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorials.sln new file mode 100644 index 00000000..f5b94ffa --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/Tutorials/D3D10Tutorials.sln @@ -0,0 +1,251 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial01_WinFormsWindow", "D3D10Tutorial01_WinFormsWindow\D3D10Tutorial01_WinFormsWindow.csproj", "{6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{9C745BF5-CC84-4EBF-985A-90082602187C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorial01", "Tutorial01", "{766E54C7-446F-4118-94A6-9ED20B121176}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial01_WinFormsControl", "D3D10Tutorial01_WinFormsControl\D3D10Tutorial01_WinFormsControl.csproj", "{9AE5997A-8072-41C0-9324-BC886BFD6C66}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial01_WPF", "D3D10Tutorial01_WPF\D3D10Tutorial01_WPF.csproj", "{980315C4-115D-482E-A484-4AFDD0A4B569}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorial02", "Tutorial02", "{F5CF288A-6377-4165-BA56-8EF9672CF9EF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial02_WinFormsControl", "D3D10Tutorial02_WinFormsControl\D3D10Tutorial02_WinFormsControl.csproj", "{33CD3CE3-DAB1-4790-A861-B296FE85DEF6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorial04", "Tutorial04", "{99CA5CC3-F035-4190-BD72-201247E32AA5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial04_WinFormsControl", "D3D10Tutorial04_WinFormsControl\D3D10Tutorial04_WinFormsControl.csproj", "{D0E3965D-10DF-45FC-A05F-39D67EDA760E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorial05", "Tutorial05", "{31D97374-70E0-431D-B9CC-B4B149E7F880}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial05_WinFormsControl", "D3D10Tutorial05_WinFormsControl\D3D10Tutorial05_WinFormsControl.csproj", "{87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorial06", "Tutorial06", "{642B3904-1AE9-45CA-B7AD-E98DE4566B20}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial06_WinFormsControl", "D3D10Tutorial06_WinFormsControl\D3D10Tutorial06_WinFormsControl.csproj", "{43D713E1-7B99-4C89-8B31-A2210392B284}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorial07", "Tutorial07", "{5AC52C0D-F69C-4575-B516-CE401BD68FDB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial07_WinFormsControl", "D3D10Tutorial07_WinFormsControl\D3D10Tutorial07_WinFormsControl.csproj", "{CE251D57-5072-44E7-8238-C977F610BBD1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Direct3DUtilities", "..\..\UtilitiesLibrary\D3DUtilities\Direct3DUtilities.csproj", "{8A152DCF-12AE-492B-9F24-060B90B2DDD0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial07_WinFormsWindow", "D3D10Tutorial07_WinFormsWindow\D3D10Tutorial07_WinFormsWindow.csproj", "{9DCD7874-4D07-413B-9E64-AA947B11D9FC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "D3D10Tutorial07_WPF", "D3D10Tutorial07_WPF\D3D10Tutorial07_WPF.csproj", "{FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Win32.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Win32.Build.0 = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|x64.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|Any CPU.Build.0 = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|Win32.ActiveCfg = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|x64.ActiveCfg = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Win32.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Win32.Build.0 = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|x64.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|Any CPU.Build.0 = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|Win32.ActiveCfg = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|x64.ActiveCfg = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Any CPU.Build.0 = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Win32.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Win32.Build.0 = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|x64.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|Any CPU.ActiveCfg = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|Any CPU.Build.0 = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|Win32.ActiveCfg = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|x64.ActiveCfg = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Win32.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Win32.Build.0 = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|x64.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|Any CPU.Build.0 = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|Win32.ActiveCfg = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|x64.ActiveCfg = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Win32.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Win32.Build.0 = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|x64.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|Any CPU.Build.0 = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|Win32.ActiveCfg = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|x64.ActiveCfg = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Any CPU.Build.0 = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Win32.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Win32.Build.0 = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|x64.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|Any CPU.ActiveCfg = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|Any CPU.Build.0 = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|Win32.ActiveCfg = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|x64.ActiveCfg = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Any CPU.Build.0 = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Win32.ActiveCfg = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Win32.Build.0 = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|x64.ActiveCfg = Debug|x64 + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|x64.Build.0 = Debug|x64 + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|Any CPU.ActiveCfg = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|Any CPU.Build.0 = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|Win32.ActiveCfg = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|x64.ActiveCfg = Release|x64 + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|x64.Build.0 = Release|x64 + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Win32.Build.0 = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|x64.ActiveCfg = Debug|x64 + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|x64.Build.0 = Debug|x64 + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|Any CPU.Build.0 = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|Win32.ActiveCfg = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|Win32.Build.0 = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|x64.ActiveCfg = Release|x64 + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|x64.Build.0 = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.ActiveCfg = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.Build.0 = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.ActiveCfg = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.Build.0 = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.Build.0 = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.ActiveCfg = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.Build.0 = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Win32.ActiveCfg = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.ActiveCfg = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.Build.0 = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Win32.ActiveCfg = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.ActiveCfg = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.Build.0 = Release|x64 + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|x64.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|Any CPU.Build.0 = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|Win32.ActiveCfg = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|x64.ActiveCfg = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|x64.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|Any CPU.Build.0 = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|Win32.ActiveCfg = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|x64.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA} = {766E54C7-446F-4118-94A6-9ED20B121176} + {9AE5997A-8072-41C0-9324-BC886BFD6C66} = {766E54C7-446F-4118-94A6-9ED20B121176} + {980315C4-115D-482E-A484-4AFDD0A4B569} = {766E54C7-446F-4118-94A6-9ED20B121176} + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} = {9C745BF5-CC84-4EBF-985A-90082602187C} + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} = {9C745BF5-CC84-4EBF-985A-90082602187C} + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} = {9C745BF5-CC84-4EBF-985A-90082602187C} + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6} = {F5CF288A-6377-4165-BA56-8EF9672CF9EF} + {D0E3965D-10DF-45FC-A05F-39D67EDA760E} = {99CA5CC3-F035-4190-BD72-201247E32AA5} + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75} = {31D97374-70E0-431D-B9CC-B4B149E7F880} + {43D713E1-7B99-4C89-8B31-A2210392B284} = {642B3904-1AE9-45CA-B7AD-E98DE4566B20} + {CE251D57-5072-44E7-8238-C977F610BBD1} = {5AC52C0D-F69C-4575-B516-CE401BD68FDB} + {9DCD7874-4D07-413B-9E64-AA947B11D9FC} = {5AC52C0D-F69C-4575-B516-CE401BD68FDB} + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1} = {5AC52C0D-F69C-4575-B516-CE401BD68FDB} + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/D3DStructs.cs b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/D3DStructs.cs new file mode 100644 index 00000000..5fb72269 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/D3DStructs.cs @@ -0,0 +1,91 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Runtime.InteropServices; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; + +namespace WindowsFlag +{ + #region SimpleVertex + [StructLayout(LayoutKind.Sequential)] + public struct SimpleVertex + { + [MarshalAs(UnmanagedType.Struct)] + public Vector3F Pos; + [MarshalAs(UnmanagedType.Struct)] + public Vector3F Normal; + } + #endregion + + #region Cube + public class Cube + { + public CubeVertices Vertices = new CubeVertices(); + public CubeIndices Indices = new CubeIndices(); + + [StructLayout(LayoutKind.Sequential)] + public class CubeVertices + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 24)] + private SimpleVertex[] vertices = + { + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Normal = new Vector3F ( 0.0f, 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Normal = new Vector3F ( 0.0f, 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Normal = new Vector3F ( 0.0f, 1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Normal = new Vector3F ( 0.0f, 1.0f, 0.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Normal = new Vector3F ( 0.0f, -1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Normal = new Vector3F ( 0.0f, -1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Normal = new Vector3F ( 0.0f, -1.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Normal = new Vector3F ( 0.0f, -1.0f, 0.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Normal = new Vector3F ( -1.0f, 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Normal = new Vector3F ( -1.0f, 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Normal = new Vector3F ( -1.0f, 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Normal = new Vector3F ( -1.0f, 0.0f, 0.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Normal = new Vector3F ( 1.0f, 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Normal = new Vector3F ( 1.0f, 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Normal = new Vector3F ( 1.0f, 0.0f, 0.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Normal = new Vector3F ( 1.0f, 0.0f, 0.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, -1.0f ), Normal = new Vector3F ( 0.0f, 0.0f, -1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, -1.0f ), Normal = new Vector3F ( 0.0f, 0.0f, -1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, -1.0f ), Normal = new Vector3F ( 0.0f, 0.0f, -1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, -1.0f ), Normal = new Vector3F ( 0.0f, 0.0f, -1.0f ) }, + + new SimpleVertex() { Pos = new Vector3F ( -1.0f, -1.0f, 1.0f ), Normal = new Vector3F ( 0.0f, 0.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, -1.0f, 1.0f ), Normal = new Vector3F ( 0.0f, 0.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( 1.0f, 1.0f, 1.0f ), Normal = new Vector3F ( 0.0f, 0.0f, 1.0f ) }, + new SimpleVertex() { Pos = new Vector3F ( -1.0f, 1.0f, 1.0f ), Normal = new Vector3F ( 0.0f, 0.0f, 1.0f ) }, + }; + } + + [StructLayout(LayoutKind.Sequential)] + public class CubeIndices + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 36)] + private uint[] indices = + { + 3,1,0, + 2,1,3, + + 6,4,5, + 7,4,6, + + 11,9,8, + 10,9,11, + + 14,12,13, + 15,12,14, + + 19,17,16, + 18,17,19, + + 22,20,21, + 23,20,22 + }; + } + } + #endregion +} diff --git a/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Effects.cs b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Effects.cs new file mode 100644 index 00000000..bbd9e60e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Effects.cs @@ -0,0 +1,109 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.IO; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; +using System.Reflection; + +namespace WindowsFlag +{ + /// + /// This class wraps the shaders + /// + internal class Effects + { + #region Private fields + Effect effect; + EffectTechnique technique; + EffectMatrixVariable worldVariable; + EffectMatrixVariable viewVariable; + EffectMatrixVariable projectionVariable; + + EffectVectorVariable lightDirVariable; + EffectVectorVariable lightColorVariable; + EffectVectorVariable baseColorVariable; + + Vector4F[] vLightDirs = + { + new Vector4F ( 0.0f, 1.0f, 3.0f, 1.0f ), + new Vector4F ( 0.0f, 1.0f, -3.0f, 1.0f), + }; + + Vector4F[] vLightColors = + { + new Vector4F ( 0.25f, 0.25f, 0.25f, 0.25f ), + new Vector4F ( 0.25f, 0.25f, 0.25f, 0.25f ) + }; + + #endregion + + #region Internal properties + internal Matrix4x4F WorldMatrix + { + set + { + worldVariable.Matrix = value; + } + } + + internal Matrix4x4F ViewMatrix + { + set + { + viewVariable.Matrix = value; + } + } + + internal Matrix4x4F ProjectionMatrix + { + set + { + projectionVariable.Matrix = value; + } + } + + internal Vector4F BaseColor + { + set + { + baseColorVariable.FloatVector = value; + } + } + + internal EffectTechnique Technique + { + get + { + return technique; + } + } + #endregion + + public Effects(D3DDevice device) + { + // File compiled using the following command: + // "$(DXSDK_DIR)\utilities\bin\x86\fxc" "WindowsFlag.fx" /T fx_4_0 /Fo "WindowsFlag.fxo" + using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("WindowsFlag.WindowsFlag.fxo")) + { + effect = device.CreateEffectFromCompiledBinary(stream); + } + // Obtain the technique + technique = effect.GetTechniqueByName("Render"); + + // Obtain the variables + worldVariable = effect.GetVariableByName("World").AsMatrix; + viewVariable = effect.GetVariableByName("View").AsMatrix; + projectionVariable = effect.GetVariableByName("Projection").AsMatrix; + + lightDirVariable = effect.GetVariableByName("vLightDir").AsVector; + lightColorVariable = effect.GetVariableByName("vLightColor").AsVector; + baseColorVariable = effect.GetVariableByName("vBaseColor").AsVector; + + // Set constants + lightColorVariable.SetFloatVectorArray(vLightColors); + lightDirVariable.SetFloatVectorArray(vLightDirs); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Program.cs b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Program.cs new file mode 100644 index 00000000..ccd753fa --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Program.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; + +namespace WindowsFlag +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Window()); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..c1533921 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WindowsFlag")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("c4d21605-d6db-4779-a72c-4cca985fa5cf")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Properties/Resources.Designer.cs new file mode 100644 index 00000000..a7d4161c --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WindowsFlag.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WindowsFlag.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Properties/Settings.Designer.cs new file mode 100644 index 00000000..f477309e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4918 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WindowsFlag.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Window.Designer.cs b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Window.Designer.cs new file mode 100644 index 00000000..b3e4c676 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Window.Designer.cs @@ -0,0 +1,95 @@ +namespace WindowsFlag +{ + partial class Window + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Window)); + this.directControl = new Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // directControl + // + this.directControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.directControl.Location = new System.Drawing.Point(0, 0); + this.directControl.Name = "directControl"; + this.directControl.Size = new System.Drawing.Size(624, 442); + this.directControl.TabIndex = 4; + this.directControl.MouseMove += new System.Windows.Forms.MouseEventHandler(this.directControl_MouseMove); + this.directControl.MouseDown += new System.Windows.Forms.MouseEventHandler(this.directControl_MouseDown); + this.directControl.MouseUp += new System.Windows.Forms.MouseEventHandler(this.directControl_MouseUp); + this.directControl.SizeChanged += new System.EventHandler(this.directControl_SizeChanged); + // + // label1 + // + this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(12, 447); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(0, 13); + this.label1.TabIndex = 5; + // + // label2 + // + this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(278, 447); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(138, 13); + this.label2.TabIndex = 6; + this.label2.Text = "Drag/scroll to move camera"; + // + // Window + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(624, 469); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.directControl); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Window"; + this.Text = "Windows Flag"; + this.Load += new System.EventHandler(this.Window_Load); + this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.directControl_MouseMove); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl directControl; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + } +} + diff --git a/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Window.cs b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Window.cs new file mode 100644 index 00000000..a59ee383 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Window.cs @@ -0,0 +1,448 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Drawing; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using System.Windows.Media.Media3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; +using Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; +using DXUtil = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; + +namespace WindowsFlag +{ + /// + /// This application demonstrates animation using matrix transformations of 1600 cubes + /// + /// Copyright (c) Microsoft Corporation. All rights reserved. + /// + public partial class Window : Form + { + #region Fields + Object viewSync = new object(); + D3DDevice device; + SwapChain swapChain; + RenderTargetView renderTargetView; + Texture2D depthStencil; + DepthStencilView depthStencilView; + ColorRgba backColor = new ColorRgba (0.0F, 0.125F, 0.3F, 1.0F ); + + InputLayout vertexLayout; + D3DBuffer vertexBuffer; + D3DBuffer indexBuffer; + + Effects effects; + + int flagShells = 20; + + Vector3F Eye = new Vector3F(0.0f, 0.0f, -1.0f); + Vector3F At = new Vector3F(0.0f, 0.0f, 0.0f); + Vector3F Up = new Vector3F(0.0f, 1.0f, 0.0f); + + Cube cube = new Cube(); + + float t = 0f; + float lastPresentTime = 0f; + uint lastPresentCount = 0; + int dwTimeStart = Environment.TickCount; + + bool isDrag = false; + Point lastLocation = new Point(int.MaxValue, int.MaxValue); + bool needsResizing; + #endregion + + #region Window() + public Window() + { + InitializeComponent(); + } + #endregion + + #region Window_Load() + private void Window_Load(object sender, EventArgs e) + { + InitializeDevice(); + MoveCameraAroundCenter(-10, -29); + ScaleCameraDistance(51); + directControl.Render = this.RenderScene; + } + #endregion + + #region directControl_SizeChanged() + private void directControl_SizeChanged(object sender, EventArgs e) + { + needsResizing = true; + } + #endregion + + #region InitDevice() + /// + /// Creates Direct3D device and swap chain, + /// Initializes buffers, + /// Loads and initializes the shader + /// + protected void InitializeDevice() + { + device = D3DDevice.CreateDeviceAndSwapChain(directControl.Handle); + swapChain = device.SwapChain; + + SetViews(); + + effects = new Effects(device); + + InitializeVertexLayout(); + InitializeVertexBuffer(); + InitializeIndexBuffer(); + + // Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList; + + effects.ViewMatrix = DXUtil.Camera.MatrixLookAtLH(Eye, At, Up); + effects.ProjectionMatrix = DXUtil.Camera.MatrixPerspectiveFovLH((float)Math.PI * 0.25f, ((float)this.ClientSize.Width / (float)this.ClientSize.Height), 0.1f, 4000.0f); + } + #endregion + + #region SetViews() + private void SetViews() + { + // Create a render target view + using (Texture2D pBuffer = swapChain.GetBuffer(0)) + { + renderTargetView = device.CreateRenderTargetView(pBuffer); + } + + // Create depth stencil texture + Texture2DDescription descDepth = new Texture2DDescription() + { + Width = (uint)directControl.ClientSize.Width, + Height = (uint)directControl.ClientSize.Height, + MipLevels = 1, + ArraySize = 1, + Format = Format.D32Float, + SampleDescription = new SampleDescription() + { + Count = 1, + Quality = 0 + }, + BindingOptions = BindingOptions.DepthStencil, + }; + + depthStencil = device.CreateTexture2D(descDepth); + + // Create the depth stencil view + DepthStencilViewDescription depthStencilViewDesc = new DepthStencilViewDescription() + { + Format = descDepth.Format, + ViewDimension = DepthStencilViewDimension.Texture2D + }; + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc); + + //bind the views to the device + device.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { renderTargetView }, depthStencilView); + + // Setup the viewport + Viewport vp = new Viewport() + { + Width = (uint)directControl.ClientSize.Width, + Height = (uint)directControl.ClientSize.Height, + MinDepth = 0.0f, + MaxDepth = 1.0f, + TopLeftX = 0, + TopLeftY = 0 + }; + + device.RS.Viewports = new Viewport[] { vp }; + } + #endregion + + #region InitializeVertexLayout() + private void InitializeVertexLayout() + { + // Define the input layout + // The layout determines the stride in the vertex buffer, + // so changes in layout need to be reflected in SetVertexBuffers + InputElementDescription[] layout = + { + new InputElementDescription() + { + SemanticName = "POSITION", + SemanticIndex = 0, + Format = Format.R32G32B32Float, + InputSlot = 0, + AlignedByteOffset = 0, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0 + }, + new InputElementDescription() + { + SemanticName = "NORMAL", + SemanticIndex = 0, + Format = Format.R32G32B32Float, + InputSlot = 0, + AlignedByteOffset = 12, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0 + }, + }; + + PassDescription passDesc = effects.Technique.GetPassByIndex(0).Description; + + vertexLayout = device.CreateInputLayout( + layout, + passDesc.InputAssemblerInputSignature, + passDesc.InputAssemblerInputSignatureSize); + + device.IA.InputLayout = vertexLayout; + } + #endregion + + #region InitializeVertexBuffer() + private void InitializeVertexBuffer() + { + IntPtr verticesData = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Vertices)); + Marshal.StructureToPtr(cube.Vertices, verticesData, true); + + BufferDescription bufferDesc = new BufferDescription() + { + Usage = Usage.Default, + ByteWidth = (uint)Marshal.SizeOf(cube.Vertices), + BindingOptions = BindingOptions.VertexBuffer, + CpuAccessOptions = CpuAccessOptions.None, + MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + }; + + SubresourceData InitData = new SubresourceData() + { + SystemMemory = verticesData + }; + + //D3DBuffer buffer = null; + vertexBuffer = device.CreateBuffer(bufferDesc, InitData); + + // Set vertex buffer + uint stride = (uint)Marshal.SizeOf(typeof(SimpleVertex)); + uint offset = 0; + device.IA.SetVertexBuffers( + 0, + new D3DBuffer[] { vertexBuffer }, + new uint[] { stride }, + new uint[] { offset }); + Marshal.FreeCoTaskMem(verticesData); + } + #endregion + + #region InitializeIndexBuffer() + private void InitializeIndexBuffer() + { + IntPtr indicesData = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Indices)); + Marshal.StructureToPtr(cube.Indices, indicesData, true); + + BufferDescription bufferDesc = new BufferDescription() + { + Usage = Usage.Default, + ByteWidth = (uint)Marshal.SizeOf(cube.Indices), + BindingOptions = BindingOptions.IndexBuffer, + CpuAccessOptions = CpuAccessOptions.None, + MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + }; + + SubresourceData initData = new SubresourceData() + { + SystemMemory = indicesData + }; + + indexBuffer = device.CreateBuffer(bufferDesc, initData); + device.IA.IndexBuffer =new IndexBuffer(indexBuffer, Format.R32UInt, 0); + Marshal.FreeCoTaskMem(indicesData); + } + #endregion + + #region RenderScene() + /// + /// Render the frame + /// + protected void RenderScene() + { + lock (viewSync) + { + if (needsResizing) + { + needsResizing = false; + renderTargetView.Dispose(); + SwapChainDescription sd = swapChain.Description; + swapChain.ResizeBuffers(sd.BufferCount, (uint)directControl.ClientSize.Width, (uint)directControl.ClientSize.Height, sd.BufferDescription.Format, sd.Options); + SetViews(); + // Update the projection matrix + effects.ProjectionMatrix = DXUtil.Camera.MatrixPerspectiveFovLH((float)Math.PI * 0.25f, ((float)this.ClientSize.Width / (float)this.ClientSize.Height), 0.1f, 4000.0f); + } + t = (Environment.TickCount - dwTimeStart) / 1000.0f; + if (lastPresentTime == 0) + { + lastPresentTime = t; + lastPresentCount = swapChain.LastPresentCount; + } + + if (t - lastPresentTime > 1.0f) // if one second has elapsed + { + uint currentPresentCount = swapChain.LastPresentCount; + uint presentCount = currentPresentCount - lastPresentCount; + float currentframerate = (float)presentCount / (t - lastPresentTime); + string fps = String.Format("{0} fps", currentframerate); + label1.BeginInvoke(new MethodInvoker(delegate() { label1.Text = fps; })); + lastPresentTime = t; + lastPresentCount = currentPresentCount; + } + + // Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor); + + // Clear the depth buffer to 1.0 (max depth) + device.ClearDepthStencilView(depthStencilView, ClearOptions.Depth, 1.0f, (byte)0); + + RenderFlag(t, t * 180 / Math.PI, flagShells); + swapChain.Present(0, PresentOptions.None); + } + } + + private void RenderFlag(float t, double a, int shells) + { + TechniqueDescription techDesc = effects.Technique.Description; + for (int x = -shells; x <= shells; x++) + { + for (int z = -shells; z <= shells; z++) + { + float height = ((float)Math.Sin(0.5 * (x + 4 * t)) + (float)Math.Cos(0.25 * (z + 2 * t))); + Vector4F vBaseColor = new Vector4F( 0.0f, 0.0f, 0.0f, 1.0f ); + if (x < 0 && z > 0) + vBaseColor.X = 0.75f + 0.125f * height; //red + else if (x > 0 && z > 0) + vBaseColor.Y = 0.75f + 0.125f * height; //green + else if (x < 0 && z < 0) + vBaseColor.Z = 0.75f + 0.125f * height; //blue + else if (x > 0 && z < 0) + {//yellow + vBaseColor.X= 0.75f + 0.125f * height; + vBaseColor.Y = 0.75f + 0.125f * height; + } + else + continue; + effects.BaseColor = vBaseColor; + + float yScale = 5f + 0.5f * height; + effects.WorldMatrix = + MatrixMath.MatrixScale(0.35f, yScale, 0.35f) * + MatrixMath.MatrixTranslate(x, yScale - 10 , z); + + for (uint p = 0; p < techDesc.Passes; ++p) + { + effects.Technique.GetPassByIndex(p).Apply(); + device.DrawIndexed(36, 0, 0); + } + } + } + } + #endregion + + #region MoveCameraAroundCenter() + private void MoveCameraAroundCenter(double leftRight, double topDown) + { + // Use WPF maths for camera rotation. + // It is slower than using Matrix4F and Vector4F, + // but camera calculations are only done once per camera move + Transform3DGroup tg = new Transform3DGroup(); + //left/right drags rotate around the camera's up vector + Vector3D leftRightRotationAxis = new Vector3D(Up.X, Up.Y, Up.Z); + //top/down drags rotate around the vector that is perpendicular + //to both Up and Eye (camera location) - their cross product + Vector3D topDownRotationAxis = Vector3D.CrossProduct( + leftRightRotationAxis, + new Vector3D(Eye.X, Eye.Y, Eye.Z)); + tg.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(leftRightRotationAxis, leftRight))); + tg.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(topDownRotationAxis, topDown))); + Vector3D newEye = tg.Transform(new Vector3D(Eye.X, Eye.Y, Eye.Z)); + Vector3D newUp = tg.Transform(new Vector3D(Up.X, Up.Y, Up.Z)); + Eye.X = (float)newEye.X; + Eye.Y = (float)newEye.Y; + Eye.Z = (float)newEye.Z; + Up.X = (float)newUp.X; + Up.Y = (float)newUp.Y; + Up.Z = (float)newUp.Z; + + effects.ViewMatrix = DXUtil.Camera.MatrixLookAtLH(Eye, At, Up); + } + #endregion + + #region ScaleCameraDistance() + private void ScaleCameraDistance(float scale) + { + Vector4F eye4 = new Vector4F(Eye.X, Eye.Y, Eye.Z, 0); + Matrix4x4F transform = MatrixMath.MatrixScale(scale, scale, scale); + eye4 = MatrixMath.VectorMultiply(transform, eye4); + Eye = new Vector3F(eye4.X, eye4.Y, eye4.Z); + + effects.ViewMatrix = DXUtil.Camera.MatrixLookAtLH(Eye, At, Up); + } + #endregion + + #region Event handlers for camera control + #region directControl_MouseMove() + private void directControl_MouseMove(object sender, MouseEventArgs e) + { + if (isDrag) + { + lock (viewSync) + { + // Rotate the camera + double leftRight = lastLocation.X - e.X; + double topDown = lastLocation.Y - e.Y; + MoveCameraAroundCenter(leftRight, topDown); + lastLocation = e.Location; + } + } + } + #endregion + + #region OnMouseWheel() + protected override void OnMouseWheel(MouseEventArgs e) + { + base.OnMouseWheel(e); + lock (viewSync) + { + if (e.Delta != 0) + { + float scale; + if (e.Delta <= 0) + scale = -(0.01f * e.Delta); + else + scale = 100f / e.Delta; + ScaleCameraDistance(scale); + } + } + } + #endregion + + #region directControl_MouseUp() + private void directControl_MouseUp(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + isDrag = false; + } + } + #endregion + + #region directControl_MouseDown() + private void directControl_MouseDown(object sender, MouseEventArgs e) + { + if (e.Button == MouseButtons.Left) + { + isDrag = true; + lastLocation = e.Location; + } + } + #endregion + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Window.resx b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Window.resx new file mode 100644 index 00000000..0dd393c3 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/Window.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAAABABoBgAAlgAAACAgEAAAAAQA6AIAAP4GAAAQEBAAAAAEACgBAADmCQAAMDAAAAAA + CACoDgAADgsAACAgAAAAAAgAqAgAALYZAAAQEAAAAAAIAGgFAABeIgAAMDAAAAAAIACoJQAAxicAACAg + AAAAACAAqBAAAG5NAAAQEAAAAAAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAAAA + AAD//wAA////AACAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMy2t7a2bMzMzMzMzMzMzMzMzMzMzMzMu7a3tnd2d2ZszMzMzMzMzMzMzMzMzMy7t7tr + a2dnZmZmbMzMzMzMzMzMzMzMzLu7e2tnZnZmZmZmZmzMzMzMzMzMzMzMy7u3u7e2tmdmZmZmZmbMzMzM + zMzMzMzMt7e7u3tra2Z2ZmZmZmZszMzMzMzMzMzLu7u7u7u7d7Z2ZmZmZmZmzMzMzMzMzMx7O7u7s3N7 + trd2tmZmZuZmbMzMzMzMzMu7u7uzNye7e2trZmd3ZmZmZszMzMzMzLO7u7MzqmZ3t7Z3ZrdyZmbmZmzM + zMzMy7u7s7MKqqZre2t2t3AqpmZmZmbMzMzMx7OzuzIqqqpnt7a3ZzIqamZm5mbMzMzMO7u7syKqqqpm + e3trYzKqqmZmZmZszMzMu7OzMiqqqqpqe7a2syKqqmpmZmZszMzLszszIiqqqqqmd7t7cCqqqqamZmZm + zMzHu7swAiKqqqqqZ3u3MCqqqqpqZmZmzMzLMzMzACIqKqqqZ7t7Aqqqqqqqd2ZmzMzLO7szMAIiqqqq + anszIqqqqqoid2ZmzMxzszOzMwAiIqqqpmMyKqqqqqIie2ZnbMy7O7OzszAAIiqqqqd6qqqqoiIzd2Zm + bMw3szs7OzMwAiKqqqqqqqqqIDN3tmZ2bMy7M7OzuzszACKqqqqqqqoiA3trZrZmvMxzOzOzs7O7MAIq + qqqqqqcjN7a3t2ZnfMw7M7Ozs7s7MwIqqqqqqqoje3t3a3d2fMx7OzM7O7O7MzAqqqqqqqpnt7e7trZ3 + fMy3MzOzuzuzswKqqqqqqqqme7tra2dnfMx7M7M7M7O7MwKqqqqqqqpqZ7u7u7a2vMx3szszs7OzMqqq + qqqqqqqmpnu7t7tnfMzLczM7OzswKqqqqqoqKqqqpme7u7e7zMzHOzOzMzMCqqqqqqIiKqqqpqZ7u7e2 + zMzLc7MzMzKqqqqqqiIAIiqqqmpnu7t7zMzMtzMzMCKqqqqqqgMwACIqqqqne7e8zMzMN7MzAiqqqqqq + ojMzACIqqqqnO3u8zMzMxzszACKqqqqqIDszMwIiqqIjO7vMzMzMy3MzAAIiqqqqA7O7MwAiIqIDu3vM + zMzMzHtzMwAioqqiM7s7szMCIiAzu7zMzMzMzMe3MwAiKqojM7O7O7MAIgO7u8zMzMzMzMx7MzAAIqID + O7OzuzMwAzO7vMzMzMzMzMzHdzMAAiIzszuzs7MzM7t7zMzMzMzMzMzMtzcwACMzOzM7OzuzM3u8zMzM + zMzMzMzMx7s3MDMzs7Ozs7Ozu7vMzMzMzMzMzMzMzHdzMzOzMzs7Ozs7t7zMzMzMzMzMzMzMzMy3d7cz + s7M7O3u3vMzMzMzMzMzMzMzMzMzMt3t7e3t7e7e8zMzMzMzMzMzMzMzMzMzMzMe3t7e3t8zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz///////8AAP///////wAA///AH///AAD//AAB//8AAP/w + AAB//wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/AAD8AAAAAf8AAPgAAAAA/wAA8AAAAAB/ + AADgAAAAAD8AAOAAAAAAPwAAwAAAAAAfAADAAAAAAB8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAIAA + AAAADwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAADAAAAAAB8AAMAA + AAAAHwAA4AAAAAA/AADgAAAAAD8AAPAAAAAAfwAA+AAAAAD/AAD8AAAAAf8AAP4AAAAD/wAA/wAAAAf/ + AAD/gAAAD/8AAP/AAAAf/wAA//AAAH//AAD//AAB//8AAP//gA///wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgIAAgAAAAIAAgACAgAAAwMDAAICA + gAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzLe2tmbMzMzMzMzMzMzMy3dnZ2ZmZmzMzMzMzMzMzHu7t3ZmZmZmzMzMzMzMzHu7u7 + t7a2ZmZmbMzMzMzMu7uzd3trZmZ2ZmbMzMzMy7uzMqZ7tnd3dmZmbMzMzMuzMCqma2t2cKpmZmzMzMy7 + MyKqqqe2tzKqpmZmzMzLszIqqqpmu3cKqqamZmzMyzMCIqqqpndzKqqqZmZszMszACIqqqprMKqqqqp2 + bMxzszACIiqqpzKqqqoidmbMOzszACIqqqqqqqqiA3ZmzLs7MzAAIqqqqqqiA3dmZsxzM7MzMAKqqqqq + I3trdmfMu7M7OzMAqqqqqqO3trdmzHMzs7MzAqqqqqqqe3t3a8x7OzszMqqqqqqqpme7trbMtzMzMCqq + qqqiqqqmZ7trzMtzMwKqqqqiAiKqqqZ7fMzHszAqqqqqoAAiqqqiu7zMw3MwIiqqqiMwAiqqI7e8zMy3 + MAIiqqIzMwIiIjO7zMzMx3MAIiogM7MAIiM7vMzMzMNzcAIiIzszMAIDu7zMzMzMdzMwIgM7OzMzO3vM + zMzMzMt3MwMzs7OzM7u8zMzMzMzMx3c3Mzs7O7e8zMzMzMzMzMw3e3t7e7e7zMzMzMzMzMzMzMN7e3t8 + zMzMzMzM////////////4B///wAD//4AAf/4AAB/8AAAP+AAAB/gAAAfwAAAD4AAAAeAAAAHgAAABwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AAAAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gA + AH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzM + zMzMzMzMzMzLZmbMzMzMy7e2ZmbMzMyzB3dndmzMyzKqe3CmZszDCqpnMqpmzLMyqqcKqqZsOzAqqqqi + dmwzszCqqie2bDMzMqqqZ7tsMzAqqqqme7zDAqqiAqqrzMcyqqMwojvMzHMqCzAjvMzMxzIzMzvMzMzM + xze7zMzM//+zMPg/a2vgD6pmwAfMzIADMyKAA6e2AAGqpgABzMwAATIqAAFmuwABqqaAA2zMgAMCIsAH + pnfgD6qq+D9szCgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWAAAA0QAAAM4A + AADNAAAAywAAAMgAAADGAAAAxQAAAMIAAADBAAAAvgAAALwAAAC6AAAAtwAAALUAAACzAAAAsAAAAK0A + AACpAAAApgAAAJwAAABzAAAAZwAAADwAAACiAQEAkgEBAN0CAgDAAgIAvQICAH0BAQBWAQEAzgMDAMMD + AwC/AwMAsAMDALQEBACGAwMA5wYGACUBAQDTBgYAxQYGAKQFBQDXBwcAuQcHAMAICABIAwMAMgICALQI + CACtCAgAoQcHAMcKCgD5Dg4AvgsLAOEODgDMDAwAmgoKANIPDwDFEREArQ8PAPoXFwDpFxcApBERANwY + GADJGRkA/iEhALcYGAD0IyMA1B4eAOQiIgBjDw8A7SUlABoEBAD9KioAlxkZAAwCAgClHR0A9SwsADMJ + CQDXJycAuSIiAMYoKAD+NDQAiRwcAPQ0NADnNDQA2jIyAP47OwCqKSkA9j09AP5CQgD+RkYA9ENDAP9J + SQC6NjYAyzw8AGYfHwA1EBAA/05OAPhNTQDlR0cA/1FRAKg3NwD/VVUAu0BAAEkZGQCKMDAA/1paAPZX + VwD2WloA/15eAMhLSwC3RUUA/2FhAG4qKgC/TEwA/2ZmALFHRwDoX18A9mZmALVLSwD/bGwAtk5OAMxZ + WQDmZWUAr01NAKBHRwD/cnIAt1JSADMXFwD2c3MA/3h4ACkUFAD/fX0A/4GBAOl3dwD/hoYA+oODAPaG + hgD/jY0AqF1dAGY5OQD/k5MA5oaGAMVzcwD/mZkA8JOTAP+engD/oqIA+6GhAKNpaQCEVVUA/6amAMuF + hQD/rKwA8KamAP+ysgD0q6sA/7a2APuzswD/ubkA+bW1AP++vgDgqakA/8LCAP/FxQD/yckA6Lm5AP/O + zgCOc3MA/M3NAOzCwgDDq6sAMy0tAAD+/gAA/f0AAPv7AAD5+QAA9/cAAPT0AADx8QAA7+8AAO3tAADp + 6QAA5uYAAOTkAADg4AAA398AANraAADT0wAAyckAAI6OAAB9fQABzs4AAcbGAAHCwgABuroAAbS0AAGt + rQABpKQAAZubAAGHhwAC+fkAAvf3AAF1dQAD//8AA/v7AAX19QAG//8ABubmAAJSUgAJ//8ADP//AAnA + wAAIj48ABmhoAAMxMQAQ8/MAEf7+AAqBgQAGSUkAFv7+AA+qqgAW6+sADH5+AAQoKAAWysoAHf7+ABzX + 1wAo/v4AJujoADT//wAt19cAMuLiADf29gA7/v4ABhgYAEf9/QBU/v4AUPDwAD2wsAAYREQAFj09ABAs + LABO1NQAZPDwAGr29gB29fUAPHx8AC9dXQBarq4Ac93dAIC+vgBDYmIAltTUAIeYmAAAAAAA//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////XGRqcHh+hIeK//// + //////////////////////////////////////////9ISFZaZGpzfoKEh4qNjZCSk/////////////// + ////////////////////////QEBIVlxmc36Eh4qNkJKSk5eXl5mZ//////////////////////////// + /////0xCSEhRWWFteIKHipCSk5mZm5ubm5ubm5v/////////////////////////////QkJMTFFRVllk + anN+hIqNkpmbnaGhoaGfn52d//////////////////////////9GRkxMTEhASFNYWmRteIKHjZKXm6Gj + pKSko6Gfn////////////////////////0ZGRkJCOzszPENVU1lhanN+hYqQl5uho6WlpaSjoZ////// + ////////////////REREPDwzMzMqPWllVVZcZnB4goeKkJecoqaqqaelpKGf//////////////////9E + Pjw8NSUlJRAe/PmoXlhaZG1zfoSHipGYqKirpqmnpaShn////////////////04+PjUlJSUBJKzU5e77 + lWNZYWpzeIKFiY+W+O/7q6qpp6WjoZ3/////////////TkM+NRoaGgQV8MCx4uz0+3JbYWZweH6Ehous + 397u/auqqaeloZ+b////////////Qz44KhoaBB3xw7Kt3Obt+otjWmRqc3iBeozww8rq9f2rqqmnpJ+b + //////////9OQzgnAAAEJPDCtLCt2eTs9P5uW1xkanN7fYDHubDk7fb9q6qppaGdm/////////9DPzYf + AgsW8MS6s7Ct0uLm7fqVY1lcZmx6cfLDtq/c5u32/auqpKOdmf///////1A/OSgHEhbxvsO8t7KuzNnk + 7PT+blhZXGNlgMu8tK/S4urt9v2rpqGfmZf//////1A/MigMGRfr1sfEwLizr8/i5u37i1RRWF5f8cK3 + sq6t0+Lm7PT7q6afmZP//////1A/LBsNGR5H68vHxcG7tbDT5Oz0/mdMVFdg1ru0sK6urrDO3uj5/qKg + mZL//////085LBsKESQeR+vWvsbDvLax2ebt+n1QT0Xww7WxsLCytLe7wd33qKKemZL/////UE9BKxwJ + Cg8ZHiZK27/HxMC3sOLq7v5pX/C9tbGwsbO3u8HH1vGMj5qbmZKN////UE9BKwwKCAcLFBUXSuDWvsXA + ts3k6vPv7+Gyrq+wsrfAxcjxgIyLjpSZl5CK////UE9BIw0LCQcFBxAkHiZK277Eu7PT5OTk4tnPra2v + tsDI8oBxfXqGiI2Tk42H////XU86Ig8NCggFAgIHExUXStHHvbev09zc2dPSz9LQxNaDX2VudXZ+goeQ + ko2E////XU86IhAODAoHBAEAAQ0dLkrLw7myrdLT0s/S09nh+GhpXmNrbXBzeISKkIqC////XU86EREP + DQsIBQIBAAARFibXxrmyrq3MzMzP2eLn92leW1xhZGZqbX6Fiod+////Z1c6EhIRDwwKBwQBAAAEGRfg + xrexrq2tra3P2eLp85ZeWFlZWlxcZHCCh4V4////b109KRMREA4MCQYDAQADGS7WwLOwra2trq2t0+Lm + 7vuLVFFRVlZWWWZ4hYJz////b11LMRMTERANCwgFAgIOHtvBtbGvra6vsbGwrtnk7PX7ckhISEhRUVpw + fnhw////b2dXPSkTEhEPDQoICRIX38CzsK+urrCztri3tLDc5u31+15AQEBASFZmc3Bw/////29XPTEY + ExIRDw0OGWDFt7Kvrq2tsLO6vcK9u7ax3Obt9ftvOzM7O1Fcamb//////29lSz0UGBMSERgW8MKzr6+t + ra2usrvG1svHw8C4sdzm7fX6lTwzM0hWYWT//////29vVz0xFBQUHS3WvLKvrq2tra2xt8bxSuvRyMW9 + uLHc5uzt+qhDM0BRWWT///////93ZUs3GR0eg9bBt7Kvra2tra+zvfEXLSZK28jFvbix2eTq7vlpPkhR + Vv////////90b1dJJB4m0cfCu7Wwra2trrG61S0UFBUuStvIxb24ssnY4/dSPkxWWv//////////d2VX + Uh4m4L/Gwru1sK2usLXFYBIEBREVF0rRyMW9urfA2i06PExW////////////dHdlSUUuSuC/xsK7tbCw + tL3xGQUBAQMQHRdK277FwcLfTRk+RlNi/////////////3d0ZVJFLkrgy8bCu7W0u9YWCgQCAQEDDh0X + StG+x9ZNJDg8TFj///////////////95dGVSRS5K17/Gwru7xhcTCQcFBAMBAw4VLuvW1k0kNjxGU/// + ////////////////f3RlUkUuSte/xsPF8R0OCwoIBwUEAwUTFi5HTR0yPkRU//////////////////// + /393ZVJFTUrXy77bHhMPDQwKCQgHBQQJFBUWJDQ+RFT///////////////////////9/eWVpX2BH8tsX + GRIRDw4NCwoJBwYFITA6OUNEVP//////////////////////////eXl0aXFoYC0dGBMSERAPDQwLCiAo + Mjk/Q05V/////////////////////////////3d/fH1pcVJLPTowMDAvLys0NDk/P05OVVX///////// + ////////////////////////d398dGVlV1dPQUFBQU9PUFBQUFVV//////////////////////////// + //////////90eX95b2dnZ11dXV5eXl5eXv////////////////////////////////////////////9v + cnJycnJubm5eXv////////////////////////////////////////////////////////////////// + ////////////////////////////////AAD///////8AAP//wB///wAA//wAAf//AAD/8AAAf/8AAP/A + AAAf/wAA/4AAAA//AAD/AAAAB/8AAP4AAAAD/wAA/AAAAAH/AAD4AAAAAP8AAPAAAAAAfwAA4AAAAAA/ + AADgAAAAAD8AAMAAAAAAHwAAwAAAAAAfAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAAAA + AAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAgAAAAAAPAACAAAAAAA8AAIAAAAAADwAAwAAAAAAfAADAAAAAAB8AAOAA + AAAAPwAA4AAAAAA/AADwAAAAAH8AAPgAAAAA/wAA/AAAAAH/AAD+AAAAA/8AAP8AAAAH/wAA/4AAAA// + AAD/wAAAH/8AAP/wAAB//wAA//wAAf//AAD//4AP//8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAC9AAAAuwAAALkAAAC2AAAAswAAALEAAAClAAAAowAAAKEA + AACcAAAAkQAAAG0AAABpAAAAZAAAAF0AAABYAAAANgAAADAAAAAqAAAAIgAAABMAAAAHAAAAhgEBAL8C + AgC8AgIAqAICAKECAgBPAQEAQgEBALsDAwCyAwMArQMDAH0CAgC3BAQAiwMDALMFBQC8BwcA3AkJAKUH + BwBVBAQAzgsLALwKCgCqCQkAOwMDAOgNDQAPAQEAXQcHAJcMDACgDg4AvBISAPkaGgDNFhYAWwoKAOcb + GwC2FhYA2hwcAKsXFwDDGxsAuxwcALUbGwDKICAA8ycnAJMZGQBFDAwA0yYmAOUtLQC2JCQA/TQ0APAy + MgDGLCwA+Do6AKwoKAD/PDwA1TMzAP8+PgDpOjoA/0REAPBAQADIOTkAwDc3AP9KSgC3NTUATRcXANdC + QgD/T08A+E1NAM1AQAAqDQ0A5khIACYMDADxTU0Avj09AKw5OQCVMTEA/1VVAMFCQgC6QUEAsT4+AP9b + WwDISUkAvkZGALFCQgBpJycAzU1NAAgDAwD/YmIANBQUAOhcXAD/ZmYAu0tLAPhnZwD/a2sAs0xMALxR + UQD/cnIAkUFBAHk2NgCkS0sA/3Z2AJtISAC2VVUAzmNjAP98fADodXUASyYmAP+EhAD2gYEAqFlZABYM + DAD/jIwAm1hYAGc7OwD+k5MAqmNjANJ9fQD/mpoA/56eAP+iogD/qKgA/6qqAN6WlgD/ra0A+6qqAP+w + sABzUVEA/7i4AOurqwD/u7sA/729APK3twCFZWUA/8PDAL6RkQD/ysoA16urAPXExAD3ysoAwqamAMyx + sQAhHR0AKScnAB0cHAAA//8AAP39AAD7+wAA+PgAAPb2AAD19QAA8/MAAPHxAADv7wAA7e0AAOrqAADm + 5gAA5OQAAOPjAADh4QAA398AAN3dAADY2AAA19cAAM3NAADLywAAx8cAAMPDAADBwQAAtbUAALCwAACt + rQAAqakAAKamAACjowAAlZUAAJKSAABmZgAAZGQAAY2NAAGCggACvLwAA/7+AAPs7AADwsIAApycAAT8 + /AAEtLQABK6uAAJcXAAEl5cAB/n5AAf09AAG2NgABaKiAASRkQADbGwACPX1AAR4eAAJ/v4ADv//AAZm + ZgAQ+voACpycABT//wALiooAFfT0ABz9/QAe6OgAI/39AAk6OgAs/f0ALu7uACKurgAz/f0AHo+PADz8 + /AA86+sAPNXVAEn9/QBG7+8AInBwAFL+/gA2oaEAVPX1AF/9/QAECgoAYOTkAFzT0wBr8fEAaM7OAGO8 + vABx1dUAgN7eAHzIyACQ5eUAfpeXAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////9janB3foKFiP////////////// + /////////////0lJUWNzfoWIiouMjI6Q//////////////////////9ERERJUWNwe4KJjpKUlZSS//// + //////////////9FPj4zMzZKTlVqc36IjJSYmpiVlP//////////////QjY2LSkwdf5XTV9te4KFjZmb + nJqYlP///////////0I2LSYfHOfr9YBOX213f4eR8fienZqYlP//////////OCYZIWvH3Ojz/GhVanN8 + g6HT6vufnZqV/////////zgpGx3ftqrZ5fD3hltjb3p91a3j8/2fnZiS//////9BNCAc1ry3r6bh6vP8 + aF9sdKK3q9rq8/2fnJKQ/////z0yIxPPwby3rqbj7feDWWR90LCqpOHq8vuelo7/////PSoXERbDwr24 + sajl8PliXqK0rKmoqcni7P6bjP///0Y6KgkNExbExb+6s9Lo7pF9yqioqa2zts3pl5OMif//RjolBAoO + ExbPxsC5sNzl5uLZo6WpsLrGoISHj4uF//9GOyIDBAoMERX02Lu0qdrh3trZzK7Uon10en+JioL//1A8 + JAQCAwcXDxMWxbWrpNna2t7g71NeaGxvd4KIfv//XEMgBgQBAAMJDRTktaqlo8jZ3uPsdVRWX19qe4V3 + //9lQysgBgMBAAkQgb2tqKamqKjR4er2dk5LTVVwfnP//2VSORogBgYLHd20q6emp6ywsq7S5fD6gFdF + SWNzbf//YWE5JwcHIRLOrKempaars7rHuLLX6PD3/GZFUWpj////bkgxFxBay7OrpqSkqLDL5Ma/urHR + 5e3y+UZLVf////9uYj8o5MW8tq+opaaruIEUFtbAuK+o4OLxQ0RL/////2JxXlMu1sG8tq+pqa/fEA0T + 9Ma+uLS01DU4RE3//////3F2Z1gWw8G8t7Kx1B0ICA8Vz8K+u9UdMj5H/////////3l4Z1hpw8G9usdY + CwACFxEWw8LYLCs2Rf//////////Ynl4Z1hpw8LA2A4FAAAHDBMu5CwnOEVO////////////Znl4Z2uB + z9sRCwQBAAIKDBwvMThCTP//////////////Znl2dX1rQCEaHyIZGB4rMTxBQkz///////////////// + /3GAeHReSDw3NzI6Oj1GSkr//////////////////////11xeXJuZWBcT1dXV0pK//////////////// + ////////////XGVlZGRkV0//////////////////////////////4B///wAD//4AAf/4AAB/8AAAP+AA + AB/gAAAfwAAAD4AAAAeAAAAHgAAABwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AA + AAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gAAH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvAAAALsAAAC6AAAAsgAAALEAAACwAAAArQAAAKcAAACfAAAAkwAAAH4A + AABtAAAAPAAAAKgEBAChBQUAYAMDADsCAgBVBAQAOwMDAKIMDAC0Dg4Avg8PANEWFgBoCwsA5xoaALsV + FQDFGBgAsxYWADwICACoFxcAgBISAPYuLgDfKSkA4y0tAJwfHwCyJCQAzy0tAOAxMQDzNzcA8zk5APA5 + OQAyDAwAliUlAMw0NABtICAAtTg4AEQVFQDHPz8A/1ZWAMFBQQD/V1cAiS8vANxMTAD0VVUA/1tbALxE + RADtV1cA/15eAP1dXQC2RkYAokFBAKhERACNOjoAuE9PALJMTABUJCQAQRwcAJ9HRwD/dHQA/3V1AJtI + SADfaWkA/3p6APx/fwD/i4sAgEtLAP+dnQD/np4A9JeXAI9bWwBZOjoA/6qqABgREQD6tLQA/7+/AP29 + vQD/xcUA6LS0ANaurgC6mpoAjHh4AN2+vgDRt7cAODY2AAD9/QAA/PwAAPn5AAD4+AAA9fUAAPDwAADv + 7wAA6OgAAOXlAADk5AAA09MAAM7OAADKygAAyMgAAMPDAACurgAAoqIAAGtrAABPTwAB//8AAfj4AAH1 + 9QABvLwAAbGxAAGJiQAC398AAtzcAALQ0AAD5uYAA+TkAAf8/AAJ8vIACefnAANSUgAO//8ADePjAA/v + 7wAGXFwABUtLABXf3wAHSEgAGf7+AB38/AAFLCwAH/b2AAc3NwAPcnIAI/HxACLj4wAl6uoAC0VFADL4 + +AA5/f0AP///ABxubgBD/v4AO83NAF7//wBVyckAEigoAGzp6QBv5+cAZK+vACQ7OwAbKioAPl9fAIPB + wQCOyMgAa4aGAFdpaQA2Pz8AHyMjAIiSkgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKenp6enp6enp6enp6enp6enp6enpzJESk1Rp6enp6enp6enHyA7 + OEhMU1dVp6enp6enGBNdnD85SU+iXFanp6enFg+GhZemNUeejaFbVKenpw2ZaXqSmzc+dn2ToFinpxoG + Em9rfpWjpWRic45ZUacZAggQhGyCj4Fxd5RLTk2nGwUAAwuLZXyAh580OkhKpyMHBAARg2NgcoiYQCcw + RactDgkcdWBfZGh7kZpaKDanpyIpbWdhXoxSbniKliWnp6c9LnBqZnkXColsdCwmp6enp0NCf2mdAQQM + kEEhp6enp6enRlCkHhQVHSokp6enp6enp6enPDcxLyunp6enp6f///84+D8ha+AP6PPAB1VqgAODoYAD + +58AAZX/AAH//wABOCkAAd+2AAHl8IADW2OAA33VwAfz/eAPmJL4P///KAAAADAAAABgAAAAAQAgAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQEAEFxcXCwAAABIAAAAZAAAAIAAAACUAAAAoAAAAKgAA + ACgAAAAlAAAAIAAAABkAAAASAAAACgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACgsLCxcGBgYpBAQEPgMDA1EDAwNgAgICbAIC + AnUCAgJ8AAAAfgAAAHsCAgJ1AgICbAMDA2AAAABQAAAAPQAAACgAAAAWAAAACgAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BQEBABCcnJw0eHh4iGBgYPykXF2B2Hh6Xnykpvr83 + N9fYRETn6lFR9PdfX/v+a2v/93Bw++lxcfTVb2/quWVl25VWVslgOjqvEw0NigICAnAAAABWAAAAOgAA + AB4AAAALAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAJGRkYLISEhHxwcHEB+FxeKtB4exd8o + KOr/ODj//0VF//9QUP//W1v//2Zm//9wcP//eHj//39///+Ghv//jIz//5GR//+Wlv//mZn/2YaG7aNo + aNJZOjquAAAAfwAAAF8AAAA7AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BZmZmBT09PRUwMDA1jB4eiMQa + Gs/0Hh75/ysr//86Ov//SEj//1ZW//9lZf//cXH//319//+Ghv//jo7//5OT//+Zmf//nZ3//6Cg//+k + pP//pqb//6en//+oqP/0oqL5tHl53F9BQbMAAAB9AAAAVgAAAC0AAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wGSkpIHSkpKH3Qp + KV66Hx++6yEh9fsmJv/9Li7//zU1//9DQ///T0///11d//9tbf//enr//4aG//+Pj///l5f//56e//+k + pP//qqr//66u//+wsP//s7P//7Oz//+zs///s7P//7Oz/+6np/ahcXHUNCYmngICAmwAAAA8AAAAFwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////AoCA + gAhEREQimyQkhNAgINz0JSX/9y0t//kvL//8MjL//zQ0//86Ov//RET//1BQ//9aWv//aGj//3R0//9/ + f///ior//5aW//+goP//qqr//7Ky//+3t///vLz//76+//++vv//vb3//7u7//+5uf//t7f/y5GR52VJ + SbcCAgJ5BAQERwAAABoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8DqqqqCU5OTiSsJSWW3CIi7O8lJf/yKir/9Ssr//cqKv/7KCj//iUl//0nJ//4MTH/9zk5//1F + Rf//UVH//19f//9ra///eHj//4WF//+Skv//np7//6mp//+zs///vLz//8LC///Fxf//xsb//8XF///C + wv//vr7//7u7/+KkpPKAXFzDAgICgAAAAEoAAAAaAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wOzs7MKWlpaIrAkJJrfISHz7CUl/+4kJP/wIiL/9B4e//YaGv/5FRX/+BER/+sS + Ev/WICD/3C0t//Q1Nf/+QkL//05O//9bW///Z2f//3V1//+Bgf//jY3//5ub//+mpv//srL//7y8//7D + w//9yMj//svL///Kyv//x8f//8LC//++vv/ura33iGNjxwQEBIAAAABGAAAAFwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////A9XV1QZsbGwariYmkNseHvPnISH/6SAg/+saGv/tFRX/8Q8P//UM + DP/xCQn/1QcH/6EPD/+KLS3/qzk5/983N//7PT3//0lJ//9WVv//YmL//2xs//94eP//hIT//4+P//+a + mv/9paX/9Kur/+Wrq//js7P/7sLC//vMzP/+zs7//8nJ///ExP//v7//7q2t94FeXsMCAgJ5AAAAPAAA + ABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Bo6OjhKoLCxz0iAg6uIbG//kGhr/5hUV/+gP + D//sCQn/7QQE/+MEBP+vAQH/WAcH/0NiYv9anJz/iG5u/8dAQP/1PT3//0ZG//9SUv//Xl7//2ho//9z + c///fHz//4aG//2QkP/wk5P/y4WF/5Rqav+QgYH/u56e/+a+vv/7zs7//8/P///Ly///xMT//76+/+Ol + pfJnSkq3AgICbAAAAC0AAAAIAAAAAAAAAAAAAAAAAAAAAP///wH///8Ev7+/DJg8PEPGISHU3Rsb/98V + Ff/hDg7/4wkJ/+YFBf/kAwP/0AEB/4MBAf8qNTX/CcDA/ybo6P9L6ur/ccDA/6NkZP/hQkL//END//9P + T///Wlr//2Rk//9ubv//eXn//4KC//aGhv/Penr/f09P/zdXV/8/u7v/esXF/7mqqv/pwcH//M7O///P + z///ysr//8PD//+9vf/LkpLnNicnngMDA1cAAAAbAAAAAwAAAAAAAAAAAAAAAP///wL///8HgICAFrch + IajZHR3/2hYW/9sNDf/dBgb/4AIC/98CAv/LAQH/cAAA/x5AQP8Dzc3/APf3/x7///9C/f3/Y/Hx/4S5 + uf/DTk7/9END//5MTP//VVX//2Bg//9qav//c3P//Hx8/+d6ev+eWVn/PCQk/w9/f/8X5ub/VvLy/4vZ + 2f/CsLD/68PD//zOzv//zs7//8jI///AwP//uLj/oXJy1AYGBn8AAAA7AAAACwAAAAAAAAAAAAAAAP// + /wTMzMwKqykpYc0eHvHVFhb/1g4O/9gGBv/aAgL/3AAA/8sAAP9+AAD/GkBA/wO8vP8A8/P/AP7+/xb/ + //81////Vf///3Lh4f+oXl7/5kRE//xGRv//UFD//1pa//9kZP//bW3/9nNz/8lmZv9kNjb/EUdH/wK5 + uf8C9/f/Ov7+/2v39/+X1NT/xrCw/+zDw//9zs7//8zM///Fxf//u7v/7qio92NGRrQDAwNgAAAAHgAA + AAIAAAAAAAAAAP///wZxcXESuyEht9EaGv/RERH/0wYG/9QBAf/XAQH/ywAA/4kAAP8YRkb/AsPD/wDv + 7/8A+fn/AP7+/xD///8o////Rv///2Px8f+JmZn/x01N//RDQ///Skr//1NT//9cXP/8ZWX/5mVl/5tJ + Sf8vGBj/A5ub/wHh4f8A+fn/Jf///0////91+Pj/mdXV/8awsP/swsL//MvL///IyP//v7///7W1/7d+ + ft0GBgaBAAAAOgAAAAoAAAAAAAAAAP///weqJiZVyR0d9MwVFf/ODAz/zgMD/84AAP+7AAD/awAA/xdD + Q/8CsrL/AN/f/wDw8P8A+fn/AP7+/wn///8c////Nv///1X9/f9y39//o2pq/+NDQ//8Q0P//0tL//9U + VP/2Wlr/y1JS/2cuLv8TKyv/ALy8/wDp6f8A+vr/FP///zX///9X////efPz/5vW1v/JsLD/7sLC//zH + x///wcH//7a2//SmpvldPz+vAwMDVwAAABYAAAAAAAAAALOzswq3IyOfyhwc/8kREf/JBwf/xQEB/6kA + AP9hAAD/Ez4+/wKNjf8AuLj/ANHR/wDm5v8A9PT/APz8/wL///8R////KP///0X///9j8vL/ipWV/8xH + R//2PDz//0FB//1JSf/pTEz/oTo6/zQVFf8FeHj/ANbW/wDv7/8A+/v/CP///x////84////V////3X1 + 9f+Zzs7/x6ys/+u9vf/8wMD//ri4//+srP+mbW3TBwcHcQYGBikAAAADAAAAAIVHRxm9ISHaxhkZ/8UM + DP/EBQX/ugAA/40AAP9BAAD/DB0d/wFqav8AnJz/ALa2/wDPz/8A4+P/APLy/wD7+/8G////G////zb/ + //9V+fn/dsLC/6lcXP/kOzv//Tc3//c+Pv/MOTn/aCEh/xI9Pf8Bv7//AObm/wD09P8A/Pz/Af///w3/ + //8a/v7/L/39/0n5+f9o7u7/j8TE/8Ojo//tt7f//Li4//+urv/bjIztFxISiwQEBD4AAAAKAAAAAKgk + JFXFIyP/wxcX/8EJCf/AAgL/twAA/5QAAP9UAAD/GgAA/wMfH/8AcnL/AJaW/wCvr/8Ax8f/ANzc/wDs + 7P8A+Pj/C/7+/yb///9G/f3/Ze3t/4WoqP/DQUH/7i8v/+cwMP+hJyf/OA8P/wZubv8A29v/AO/v/wD4 + +P8A/Pz/AP39/wD8/P8A+fn/BfX1/xXv7/8y4uL/XLq6/5qTk//drKz/+bW1//+trf//n5//ZD8/sQYG + BlEAAAASAAAAALIlJYnCISH/vhQU/74HB/+/AgL/vgAA/60AAP+FAAD/TwAA/xsAAP8DFxf/AGdn/wCM + jP8Apqb/AL29/wDT0/8A6Oj/APf3/xP+/v8z////Uv39/23c3P+eTk7/xyws/7YjI/9dEhL/E0RE/wG4 + uP8A7e3/APb2/wD5+f8A+fn/APX1/wDv7/8A5ub/ANra/wPGxv8Pqqr/N319/41sbP/epKT/+7Oz//+s + rP//np7/mFtbygoKCmIAAAAZAAAAALcoKLG/ISH/uxMT/7sHB/+9AgL/wAAA/78AAP+yAAD/jwAA/1sA + AP8nAAD/CAIC/wFHR/8Afn7/AJub/wC0tP8Az8//AObm/wD5+f8d/v7/Pf///1X09P9wjo7/gjs7/2Qg + IP8gSkr/AsvL/wDt7f8A9/f/APj4/wD39/8A8fH/AOfn/wDZ2f8Ax8f/AZub/whfX/8fOjr/Xjw8/7h5 + ef/wpqb//rGx//+qqv//nZ3/vG1t3RAQEG8AAAAgAAAAALcpKdG8IiL/uRMT/7gGBv+5AQH/vgAA/8MA + AP/EAAD/uwAA/54AAP9uAAD/PAAA/xIAAP8CKyv/AGVl/wCPj/8Ar6//AM/P/wDp6f8D+/v/Jf7+/z39 + /f9I3d3/R7Cw/zGmpv8Sy8v/APX1/wD8/P8A+/v/APn5/wDz8/8A5+f/ANDQ/wCtrf8DhIT/Ej09/zYb + G/9vODj/smFh/+aGhv/7oaH//6ur//+np///mpr/13Z26w8PD3gAAAAlAAAAALksLOe6IyP/thIS/7QE + BP+2AQH/uwAA/8AAAP/FAAD/yQAA/8UAAP+xAAD/iQAA/1cAAP8pAAD/CgAA/wFHR/8Ajo7/ALa2/wDY + 2P8A8PD/DP39/yP///8u/f3/LPj4/yD4+P8R/f3/Bf///wD///8A////APv7/wDq6v8AzMz/BISE/xIt + Lf8xFRX/ZCsr/55HR//MX1//63Nz//qDg///lpb//6Oj//+jo///lpb/63t79RQUFIAGBgYpAAAAALsx + Mfe3IiL/shAQ/7EDA/+zAQH/uAAA/70AAP/CAAD/yAAA/84AAP/OAAD/xAAA/6YAAP91AAD/OQAA/wwA + AP8BUVH/AJub/wDIyP8A5+f/APr6/w3///8Y////Gf///xP///8N////CP///wf///8I////Bubm/wKx + sf8MYWH/KxUV/2IiIv+bOjr/yU9P/+hfX//2Zmb//HBw//94eP//iYn//5mZ//+dnf//kpL/+Hx8+xUV + FYQGBgYrAAAAALs0NP60IiL/rw4O/64DA/+wAAD/tQAA/7oAAP+/AAD/xQAA/8sAAP/RAAD/1QAA/9IA + AP+2AAD/egAA/zEAAP8HDAz/AHd3/wC6uv8A4OD/APX1/wD///8J////C////wr///8H////CP///w3/ + //8T/f3/GsnJ/yZiYv9KGRn/iSgo/8Y+Pv/nTU3/9ldX//xdXf//YGD//2Rk//9tbf//fX3//46O//+X + l///jIz//nh4/xgYGIEGBgYpAAAAALo4OPezJSX/rA8P/6sCAv+tAAD/sgAA/7cAAP+8AAD/wgAA/8gA + AP/OAAD/0wAA/9gAAP/UAAD/rgAA/2gAAP8fAAD/AzU1/wChof8A4OD/APT0/wD9/f8B////A////wP/ + //8E////B////xD///8d/f3/LdfX/0h9ff+FMDD/zTc3//NDQ//9S0v//09P//9SUv//VVX//1hY//9e + Xv//cHD//4OD//+QkP//hob/+G5u/BkZGXsHBwcmAAAAALg+PuizKyv/qhIS/6gCAv+qAAD/rgAA/7MA + AP+5AAD/vgAA/8QAAP/KAAD/0AAA/9YAAP/aAAD/ygAA/5MAAP86AAD/CCUl/wCgoP8A5eX/APb2/wD9 + /f8A////AP///wD///8B////Bv///xD///8h////N/b2/1PKyv+IWlr/zz4+//k9Pf//QED//0ND//9G + Rv//SEj//0pK//9QUP//YmL//3h4//+IiP//gID/7GJi9RsbG3IICAghAAAAALZBQdOzMDD/qRUV/6UE + BP+nAQH/qwAA/7AAAP+1AAD/ugAA/8AAAP/GAAD/zAAA/9IAAP/XAAD/zQAA/5UAAP8xAAD/BWpq/wDM + zP8A8PD/APn5/wD+/v8A/v7/AP///wD9/f8A/v7/Af7+/wv///8d////N////1Ly8v9zvr7/qVtb/+g6 + Ov//NDT//zc3//86Ov//Ozv//z4+//9CQv//VVX//2tr//+AgP//eHj/3FdX6R4eHmcKCgoaAAAAALRD + Q7S0ODj/qhwc/6QICP+lAgL/pwAA/6wAAP+xAAD/tgAA/7wAAP/CAAD/yAAA/84AAP/OAAD/tAAA/1EA + AP8PTEz/AcfH/wDt7f8A9/f/APv7/wD+/v8A/f3/APv7/wD39/8A9vb/APj4/wD8/P8R/v7/Kv///0f9 + /f9k9fX/hL+//71PT//6Kir//yoq//8rK///Li7//zAw//82Nv//R0f//2Ji//91df//bm7/xUxM2iMj + I1gAAAASAAAAALFBQYq2QED/rCcn/6QPD/+jBQX/pAAA/6gAAP+tAAD/sgAA/7cAAP+9AAD/wgAA/8EA + AP+oAAD/QQAA/wx/f/8B0ND/APHx/wD4+P8A+/v/AP39/wD9/f8A+Pj/APHx/wDp6f8A5OT/AObm/wDu + 7v8A+fn/FP7+/zH///9P////bPX1/4y6uv/OQED/+x4e//8dHf//Hx///yIi//8oKP//PDz//1VV//9m + Zv//YGD/qkJCwykpKUUAAAAKAAAAALE9PU+3R0f/rS8v/6MVFf+hCAj/oQEB/6QAAP+pAAD/rQAA/7MA + AP+3AAD/tQAA/44AAP8wDw//Bqys/wDn5/8A9fX/APr6/wD8/P8A/v7/AP7+/wD5+f8A8PD/AN/f/wDL + y/8Aw8P/AMjI/wDX1/8A6Oj/APf3/xb9/f80////Uv///2719f+Ltrb/vkZG//UVFf//EBD//xUV//8b + G///MTH//0hI//9bW///Vlb/iDw8nzU1NTBAQEAEAAAAALEzMwqzRUXZsDo6/6YfH/+gDQ3/ngEB/6EA + AP+kAAD/qQAA/6sAAP+iAAD/agAA/xtDQ/8DwsL/APDw/wD6+v8A+/v/AP7+/wD+/v8A/v7/APz8/wD0 + 9P8A29v/AaWl/wFtbf8Ac3P/AJ6e/wC3t/8Azs7/AOTk/wD39/8W/v7/Nf///1H///9p9/f/f9jY/6Rt + bf/qERH//wcH//8REf//Jyf//z4+//9OTv/jSUntSzw8ak1NTR7///8B////AQAAAACwQkKbtEVF/6kq + Kv+hFBT/nQUF/5wAAP+dAAD/mAAA/4AAAP9DAAD/D2pq/wHR0f8A8/P/APv7/wD9/f8A/v7/AP///wD/ + //8A/v7/APf3/wDl5f8CoqL/Cj8//xAFBf8HERH/AVBQ/wCHh/8Ara3/AMrK/wDk5P8A9/f/Fv7+/zH/ + //9L////Xv39/27f3/+LfHz/0Rwc//oPD///IiL//zU1//9BQf+/Pz/MRkZGSWlpaRH///8B////AQAA + AACuPT1LtktL8602Nv+kHx//mgoK/5EBAf9+AAD/UgAA/yYSEv8Jb2//AcbG/wDn5/8A9fX/APv7/wD+ + /v8A////AP///wD+/v8A+/v/APHx/wHJyf8TQUH/PAAA/0oAAP8qAAD/CgEB/wFISP8AiIj/AKur/wDI + yP8A5OT/APb2/xD9/f8n/v7/Ofv7/0bv7/9XtbX/kDQ0/94aGv/6KSn//Tc3//U4OPmVQUGWXV1dLL+/ + vwgAAAAAAAAAAAAAAAAAAAAAsUZGr7JDQ/+nLS3/mxQU/4IGBv9bAQH/JQIC/wdRUf8BmJj/AMHB/wDZ + 2f8A7Oz/APj4/wD+/v8A////AP///wD9/f8A9vb/AN/f/wiPj/9MAAD/lwAA/5sAAP9wAAD/NAAA/wsA + AP8BR0f/AImJ/wCrq/8AyMj/AOTk/wD09P8C+fn/EPPz/xzX1/81e3v/iRkZ/9wbG//3Kyv/+zg4/8w5 + OdVYWFhRi4uLFv///wQAAAAAAAAAAAAAAAAAAAAArT4+UrNLS+6uPT3/nyUl/4MQEP9VBgb/IQEB/wUh + If8Aenr/AKWl/wDCwv8A29v/AO3t/wD4+P8A/v7/AP39/wD5+f8A6+v/BKqq/zMREf+pAAD/ywAA/8gA + AP+sAAD/dwAA/zcAAP8KAAD/AVFR/wCIiP8ArKz/AMnJ/wDf3/8A5ub/Ac7O/wqBgf9JBwf/sA8P/+kd + Hf/3Ly//7TY29p9CQpR0dHQus7OzCv///wMAAAAAAAAAAAAAAAAAAAAAAAAAAK9FRZu0Skr/qDY2/5Ie + Hv9sDg7/NgMD/w8AAP8CKir/AH19/wClpf8AwsL/ANzc/wDt7f8A+Pj/APn5/wDv7/8Bycn/HTs7/5UA + AP/JAAD/0gAA/9MAAP/MAAD/sQAA/3oAAP86AAD/DAAA/wFKSv8AjIz/AK+v/wDFxf8AwcH/CHx8/zUJ + Cf+SBgb/2RMT//AlJf/1MzP/wjw8xGtra0WmpqYX////BP///wEAAAAAAAAAAAAAAAAAAAAAAAAAAKo5 + OSiwSUnKsUhI/6UzM/+MHh7/YwwM/zMEBP8PAQH/Aisr/wB1df8ApaX/AMLC/wDb2/8A6+v/AO7u/wDa + 2v8Oamr/ZgAA/74AAP/LAAD/zgAA/9AAAP/RAAD/zQAA/7QAAP99AAD/PQAA/wsAAP8AWVn/AJCQ/wCe + nv8Ia2v/MwkJ/4kDA//QDQ3/6hwc//AsLP/UODjgjlJSa5WVlSTo6OgL////Av///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACtPz9ZtE9P47FHR/+kMzP/ihwc/2MODv8yBQX/DgEB/wMuLv8Afn7/AKam/wDB + wf8A19f/ANra/wSlpf88AAD/pQAA/8EAAP/FAAD/yAAA/8sAAP/NAAD/0AAA/80AAP+0AAD/dwAA/zEA + AP8GFBT/AmNj/wZhYf8wCwv/hAQE/8oLC//kGBj/7CYm/90xMe6pRESNi4uLLtLS0hH///8F////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0REdLRQUO+xSEj/ozIy/4kcHP9hDg7/MAQE/w0B + Af8CMDD/AH9//wCkpP8Aubn/Aa6u/xo8PP9+AAD/tQAA/7wAAP+/AAD/wgAA/8UAAP/IAAD/ywAA/80A + AP/JAAD/pwAA/2YAAP8tAAD/GggI/zIGBv9/AwP/xgoK/+AWFv/nJSX/4S8v9LQ8PJ6MjIwz3NzcFv// + /wr///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALBHR361U1PwskpK/6Q1 + Nf+NIiL/YxER/zMICP8QBAT/AzEx/wB0dP8Bj4//Dk1N/1sAAP+lAAD/swAA/7cAAP+6AAD/vQAA/8AA + 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 + yf+AAU3/wANP/+AHYf8= + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/WindowsFlag.csproj b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/WindowsFlag.csproj new file mode 100644 index 00000000..319c92c5 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/WindowsFlag.csproj @@ -0,0 +1,120 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {F235C99B-05D2-4A53-902C-E1691D7511B8} + WinExe + Properties + WindowsFlag + WindowsFlag + v3.5 + 512 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + 3.0 + + + + + + + + 3.0 + + + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + Window.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + PreserveNewest + + + True + Settings.settings + True + + + Form + + + Window.cs + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/WindowsFlag.fx b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/WindowsFlag.fx new file mode 100644 index 00000000..6633cc93 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/WindowsFlag.fx @@ -0,0 +1,75 @@ +//-------------------------------------------------------------------------------------- +// File: WindowsFlag.fx +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// For HLSL functions reference check: +// http://msdn.microsoft.com/en-us/library/bb509611(VS.85).aspx +// +//-------------------------------------------------------------------------------------- + + +//-------------------------------------------------------------------------------------- +// Constant Buffer Variables +//-------------------------------------------------------------------------------------- +matrix World; +matrix View; +matrix Projection; +float4 vLightDir[2]; +float4 vLightColor[2]; +float4 vBaseColor; + +//-------------------------------------------------------------------------------------- +struct VS_INPUT +{ + float4 Pos : POSITION; + float3 Norm : NORMAL; +}; + +struct PS_INPUT +{ + float4 Pos : SV_POSITION; + float3 Norm : TEXCOORD0; +}; + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +PS_INPUT VS( VS_INPUT input ) +{ + PS_INPUT output = (PS_INPUT)0; + output.Pos = mul( input.Pos, World ); + output.Pos = mul( output.Pos, View ); + output.Pos = mul( output.Pos, Projection ); + output.Norm = mul( input.Norm, World ); + + return output; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( PS_INPUT input) : SV_Target +{ + float4 finalColor = 0; + + //do NdotL lighting for 2 lights + for(int i=0; i<2; i++) + { + finalColor += saturate( dot( (float3)vLightDir[i], input.Norm) * vLightColor[i] * vBaseColor ) / 2; + } + finalColor.a = 1.0; + return finalColor; +} + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS() ) ); + } +} diff --git a/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/WindowsFlag.fxo b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/WindowsFlag.fxo new file mode 100644 index 00000000..37aa8168 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/WindowsFlag.fxo differ diff --git a/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/WindowsFlag.sln b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/WindowsFlag.sln new file mode 100644 index 00000000..794c928e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/WindowsFlag.sln @@ -0,0 +1,74 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WindowsFlag", "WindowsFlag.csproj", "{F235C99B-05D2-4A53-902C-E1691D7511B8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{A24FD854-9F1B-43C5-B232-AFD34BEC56A8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Direct3DUtilities", "..\..\UtilitiesLibrary\D3DUtilities\Direct3DUtilities.csproj", "{8A152DCF-12AE-492B-9F24-060B90B2DDD0}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|Win32.ActiveCfg = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|Any CPU.Build.0 = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|Win32.ActiveCfg = Release|Any CPU + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Win32.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Win32.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} = {A24FD854-9F1B-43C5-B232-AFD34BEC56A8} + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} = {A24FD854-9F1B-43C5-B232-AFD34BEC56A8} + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} = {A24FD854-9F1B-43C5-B232-AFD34BEC56A8} + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/directx.ico b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D10/WindowsFlag/directx.ico differ diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/App.xaml b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/App.xaml new file mode 100644 index 00000000..f1bb156d --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/App.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/App.xaml.cs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/App.xaml.cs new file mode 100644 index 00000000..fc02f5ac --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/App.xaml.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Windows; + +namespace Tutorial02_WPF +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..f935326e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Properties/AssemblyInfo.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Tutorial02_WPF")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Properties/Resources.Designer.cs new file mode 100644 index 00000000..3423c2f6 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4927 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.WindowsAPICodePack.Samples.Direct3D11.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Properties/Settings.Designer.cs new file mode 100644 index 00000000..a50f4e00 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.4927 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Render.hlsl b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Render.hlsl new file mode 100644 index 00000000..997346cc --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Render.hlsl @@ -0,0 +1,36 @@ +//-------------------------------------------------------------------------------------- +// File: Render.hlsl +// +// The shaders for rendering tessellated mesh and base mesh +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +float4 VertShader( float4 Pos : POSITION ) : SV_POSITION +{ + return Pos; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PixShader( float4 Pos : SV_POSITION ) : SV_TARGET +{ + return float4( 1.0f, 1.0f, 0.0f, 1.0f ); // Yellow, with Alpha = 1 +} + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VertShader() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PixShader() ) ); + } +} \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Render.ps b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Render.ps new file mode 100644 index 00000000..8ac1fccb Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Render.ps differ diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Render.vs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Render.vs new file mode 100644 index 00000000..ec6c18e4 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Render.vs differ diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Tutorial02_WPF.csproj b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Tutorial02_WPF.csproj new file mode 100644 index 00000000..c6b37b19 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Tutorial02_WPF.csproj @@ -0,0 +1,117 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3} + WinExe + Properties + Microsoft.WindowsAPICodePack.Samples.Direct3D11 + Tutorial02_WPF + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + false + + + + + 3.5 + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + App.xaml + Code + + + Window1.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Window1.xaml b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Window1.xaml new file mode 100644 index 00000000..d40fe151 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Window1.xaml @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Window1.xaml.cs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Window1.xaml.cs new file mode 100644 index 00000000..8b4e933a --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Window1.xaml.cs @@ -0,0 +1,202 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.IO; +using System.Runtime.InteropServices; +using System.Windows; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D11; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; + +namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11 +{ + /// + /// Interaction logic for Window1.xaml + /// + public partial class Window1 : Window + { + #region Structs + + [StructLayout(LayoutKind.Sequential)] + private class SimpleVertexArray + { + // An array of 3 Vectors + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] + public Vector3F[] vertices = + { + new Vector3F() + { + X= 0.0F, + Y = 0.5F, + Z = 0.5F + }, + new Vector3F() + { + X = 0.5F, + Y = -0.5F, + Z = 0.5F + }, + new Vector3F() + { + X = -0.5F, + Y = -0.5F, + Z = 0.5F + } + }; + } + #endregion + + public Window1() + { + InitializeComponent(); + } + + #region Private Fields + + D3DDevice device; + DeviceContext deviceContext; + RenderTargetView renderTargetView; + PixelShader pixelShader; + VertexShader vertexShader; + D3DBuffer vertexBuffer; + SwapChain swapChain; + bool needResizing; + + #endregion + + #region Window_Loaded() + /// + /// Handles the Loaded event of the window. + /// + /// The source of the event. + /// The instance containing the event data. + private void Window_Loaded(object sender, RoutedEventArgs e) + { + InitDevice(); + host.Render = RenderScene; + } + #endregion + + #region Init device + + /// + /// Init device and required resources + /// + private void InitDevice() + { + // device creation + device = D3DDevice.CreateDeviceAndSwapChain(host.Handle); + swapChain = device.SwapChain; + deviceContext = device.ImmediateContext; + + SetViews(); + + // vertex shader & layout + // Open precompiled vertex shader + // This file was compiled using: fxc Render.hlsl /T vs_4_0 /EVertShader /FoRender.vs + using (Stream stream = Application.ResourceAssembly.GetManifestResourceStream("Microsoft.WindowsAPICodePack.Samples.Direct3D11.Render.vs")) + { + vertexShader = device.CreateVertexShader(stream); + deviceContext.VS.Shader = vertexShader; + + // input layout is for the vert shader + InputElementDescription inputElementDescription = new InputElementDescription(); + inputElementDescription.SemanticName = "POSITION"; + inputElementDescription.SemanticIndex = 0; + inputElementDescription.Format = Format.R32G32B32Float; + inputElementDescription.InputSlot = 0; + inputElementDescription.AlignedByteOffset = 0; + inputElementDescription.InputSlotClass = InputClassification.PerVertexData; + inputElementDescription.InstanceDataStepRate = 0; + stream.Position = 0; + InputLayout inputLayout = device.CreateInputLayout( + new InputElementDescription[] { inputElementDescription }, + stream); + deviceContext.IA.InputLayout = inputLayout; + } + + // Open precompiled vertex shader + // This file was compiled using: fxc Render.hlsl /T ps_4_0 /EPixShader /FoRender.ps + using (Stream stream = Application.ResourceAssembly.GetManifestResourceStream("Microsoft.WindowsAPICodePack.Samples.Direct3D11.Render.ps")) + { + pixelShader = device.CreatePixelShader(stream); + } + deviceContext.PS.SetShader(pixelShader, null); + + // create some geometry to draw (1 triangle) + SimpleVertexArray vertex = new SimpleVertexArray(); + + // put the vertices into a vertex buffer + + BufferDescription bufferDescription = new BufferDescription(); + bufferDescription.Usage = Usage.Default; + bufferDescription.ByteWidth = (uint)Marshal.SizeOf(vertex); + bufferDescription.BindingOptions = BindingOptions.VertexBuffer; + + SubresourceData subresourceData = new SubresourceData(); + + IntPtr vertexData = Marshal.AllocCoTaskMem(Marshal.SizeOf(vertex)); + Marshal.StructureToPtr(vertex, vertexData, false); + + subresourceData.SystemMemory = vertexData; + vertexBuffer = device.CreateBuffer(bufferDescription, subresourceData); + + + deviceContext.IA.SetVertexBuffers(0, new D3DBuffer[] { vertexBuffer }, new uint[] { 12 }, new uint[] { 0 }); + deviceContext.IA.PrimitiveTopology = PrimitiveTopology.TriangleList; + + Marshal.FreeCoTaskMem(vertexData); + } + + private void SetViews() + { + Texture2D texture2D = swapChain.GetBuffer(0); + renderTargetView = device.CreateRenderTargetView(texture2D); + deviceContext.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { renderTargetView }); + texture2D.Dispose(); + + // viewport + SwapChainDescription desc = swapChain.Description; + Viewport viewport = new Viewport(); + viewport.Width = desc.BufferDescription.Width; + viewport.Height = desc.BufferDescription.Height; + viewport.MinDepth = 0.0f; + viewport.MaxDepth = 1.0f; + viewport.TopLeftX = 0; + viewport.TopLeftY = 0; + + deviceContext.RS.Viewports = new Viewport[] { viewport }; + } + + #endregion + + #region Render Scene + /// + /// Draw scene + /// + private void RenderScene() + { + if (needResizing) + { + needResizing = false; + renderTargetView.Dispose(); + SwapChainDescription sd = swapChain.Description; + swapChain.ResizeBuffers(sd.BufferCount, (uint)host.ActualWidth, (uint)host.ActualHeight, sd.BufferDescription.Format, sd.Options); + SetViews(); + } + deviceContext.ClearRenderTargetView(renderTargetView, new ColorRgba(0.2f, 0.125f, 0.3f, 1.0f)); + + deviceContext.Draw(3, 0); + + swapChain.Present(0, 0); + } + #endregion + + #region host_SizeChanged() + private void host_SizeChanged(object sender, SizeChangedEventArgs e) + { + needResizing = true; + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Form1.Designer.cs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Form1.Designer.cs new file mode 100644 index 00000000..d8ac6a0d --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Form1.Designer.cs @@ -0,0 +1,76 @@ +namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11 +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.directControl = new Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl(); + this.label1 = new System.Windows.Forms.Label(); + this.SuspendLayout(); + // + // directControl + // + this.directControl.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.directControl.Location = new System.Drawing.Point(12, 12); + this.directControl.Name = "directControl"; + this.directControl.Size = new System.Drawing.Size(606, 426); + this.directControl.TabIndex = 0; + this.directControl.Load += new System.EventHandler(this.directControl_Load); + this.directControl.SizeChanged += new System.EventHandler(this.directControl_SizeChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(0, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(30, 13); + this.label1.TabIndex = 1; + this.label1.Text = "FPS:"; + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(630, 450); + this.Controls.Add(this.label1); + this.Controls.Add(this.directControl); + this.Name = "Form1"; + this.Text = "Direct3D 11 Tutorial 02"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl directControl; + private System.Windows.Forms.Label label1; + } +} + diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Form1.cs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Form1.cs new file mode 100644 index 00000000..6eb18252 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Form1.cs @@ -0,0 +1,238 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.IO; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D11; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; + +namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11 +{ + public partial class Form1 : Form + { + #region Structs + + [StructLayout(LayoutKind.Sequential)] + private class SimpleVertexArray + { + // An array of 3 Vectors + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] + public Vector3F[] vertices = + { + new Vector3F() + { + X = 0.0F, + Y = 0.5F, + Z = 0.5F + }, + new Vector3F() + { + X = 0.5F, + Y = -0.5F, + Z = 0.5F + }, + new Vector3F() + { + X = -0.5F, + Y = -0.5F, + Z = 0.5F + } + }; + } + #endregion + + public Form1() + { + InitializeComponent(); + } + + D3DDevice device; + DeviceContext deviceContext; + RenderTargetView renderTargetView; + PixelShader pixelShader; + VertexShader vertexShader; + D3DBuffer vertexBuffer; + SwapChain swapChain; + bool needResizing; + + #region Fps + public float Fps { get; private set; } + #endregion + + #region FpsChanged + private event EventHandler fpsChanged; + public event EventHandler FpsChanged + { + add + { + fpsChanged += value; + } + remove + { + fpsChanged -= value; + } + } + #endregion + + private int lastTickCount; + private int frameCount; + + private void directControl_Load(object sender, EventArgs e) + { + InitDevice(); + directControl.Render = RenderScene; + fpsChanged += new EventHandler(Form1_fpsChanged); + } + + void Form1_fpsChanged(object sender, EventArgs e) + { + this.BeginInvoke(new MethodInvoker(delegate() { + label1.Text = "FPS: " + Fps;})); + } + + private void InitDevice() + { + // device creation + //device = D3DDevice.CreateDeviceAndSwapChain( + // null, + // DriverType.Hardware, + // null, + // CreateDeviceFlag.Default, + // new []{FeatureLevel.FeatureLevel_10_1}, + // new SwapChainDescription { + // BufferCount = 1 + // }, + // out swapChain); + device = D3DDevice.CreateDeviceAndSwapChain(directControl.Handle); + swapChain = device.SwapChain; + deviceContext = device.ImmediateContext; + + SetViews(); + + // Open precompiled vertex shader + // This file was compiled using: fxc Render.hlsl /T vs_4_0 /EVertShader /FoRender.vs + using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Microsoft.WindowsAPICodePack.Samples.Direct3D11.Render.vs")) + { + vertexShader = device.CreateVertexShader(stream); + } + + deviceContext.VS.SetShader(vertexShader, null); + + // input layout is for the vert shader + InputElementDescription inputElementDescription = new InputElementDescription(); + inputElementDescription.SemanticName = "POSITION"; + inputElementDescription.SemanticIndex = 0; + inputElementDescription.Format = Format.R32G32B32Float ; + inputElementDescription.InputSlot = 0; + inputElementDescription.AlignedByteOffset = 0; + inputElementDescription.InputSlotClass = InputClassification.PerVertexData; + inputElementDescription.InstanceDataStepRate = 0; + + InputLayout inputLayout; + using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Microsoft.WindowsAPICodePack.Samples.Direct3D11.Render.vs")) + { + inputLayout = device.CreateInputLayout(new [] { inputElementDescription }, stream); + } + deviceContext.IA.InputLayout = inputLayout; + + // Open precompiled pixel shader + // This file was compiled using: fxc Render.hlsl /T ps_4_0 /EPixShader /FoRender.ps + using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Microsoft.WindowsAPICodePack.Samples.Direct3D11.Render.ps")) + { + pixelShader = device.CreatePixelShader(stream); + } + deviceContext.PS.SetShader(pixelShader, null); + + + // create some geometry to draw (1 triangle) + SimpleVertexArray vertex = new SimpleVertexArray(); + + // put the vertices into a vertex buffer + + BufferDescription bufferDescription = new BufferDescription(); + bufferDescription.Usage = Usage.Default; + bufferDescription.ByteWidth = (uint)Marshal.SizeOf(vertex); + bufferDescription.BindingOptions = BindingOptions.VertexBuffer; + + SubresourceData subresourceData = new SubresourceData(); + + IntPtr vertexData = Marshal.AllocCoTaskMem(Marshal.SizeOf(vertex)); + Marshal.StructureToPtr(vertex, vertexData, false); + + subresourceData.SystemMemory = vertexData; + vertexBuffer = device.CreateBuffer(bufferDescription, subresourceData); + + + deviceContext.IA.SetVertexBuffers(0, new [] { vertexBuffer }, new uint[] { 12 }, new uint[] { 0 }); + deviceContext.IA.PrimitiveTopology = PrimitiveTopology.TriangleList; + + Marshal.FreeCoTaskMem(vertexData); + } + + private void SetViews() + { + Texture2D texture2D = swapChain.GetBuffer(0); + renderTargetView = device.CreateRenderTargetView(texture2D); + deviceContext.OM.RenderTargets = new OutputMergerRenderTargets(new[] {renderTargetView}); + texture2D.Dispose(); + + // viewport + SwapChainDescription desc = swapChain.Description; + Viewport viewport = new Viewport(); + viewport.Width = desc.BufferDescription.Width; + viewport.Height = desc.BufferDescription.Height; + viewport.MinDepth = 0.0f; + viewport.MaxDepth = 1.0f; + viewport.TopLeftX = 0; + viewport.TopLeftY = 0; + + deviceContext.RS.Viewports = new[] { viewport }; + } + + private void RenderScene() + { + if (needResizing) + { + needResizing = false; + renderTargetView.Dispose(); + SwapChainDescription sd = swapChain.Description; + swapChain.ResizeBuffers(sd.BufferCount, (uint)directControl.ClientSize.Width, (uint)directControl.ClientSize.Height, sd.BufferDescription.Format, sd.Options); + SetViews(); + } + deviceContext.ClearRenderTargetView(renderTargetView, new ColorRgba(0.2f, 0.125f, 0.3f, 1.0f)); + + deviceContext.Draw(3, 0); + + swapChain.Present(0, 0); + CalculateFPS(); + } + + #region CalculateFPS() + private void CalculateFPS() + { + int currentTickCount = Environment.TickCount; + int ticks = currentTickCount - lastTickCount; + if (ticks >= 1000) + { + Fps = (float)frameCount * 1000 / ticks; + frameCount = 0; + lastTickCount = currentTickCount; + BeginInvoke(new MethodInvoker(delegate + { + if (fpsChanged != null) + fpsChanged(this, EventArgs.Empty); + })); + } + frameCount++; + } + #endregion + + private void directControl_SizeChanged(object sender, EventArgs e) + { + needResizing = true; + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Form1.resx b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Form1.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Program.cs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Program.cs new file mode 100644 index 00000000..08223031 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Program.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11 +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..bf631e28 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("DirectX_TestHarness")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("94c89cee-5bcf-4268-b2b5-104059247270")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Properties/Resources.Designer.cs new file mode 100644 index 00000000..ea6dd6b6 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.WindowsAPICodePack.Samples.Direct3D11.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Properties/Settings.Designer.cs new file mode 100644 index 00000000..a802f2e4 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Render.hlsl b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Render.hlsl new file mode 100644 index 00000000..997346cc --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Render.hlsl @@ -0,0 +1,36 @@ +//-------------------------------------------------------------------------------------- +// File: Render.hlsl +// +// The shaders for rendering tessellated mesh and base mesh +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +float4 VertShader( float4 Pos : POSITION ) : SV_POSITION +{ + return Pos; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PixShader( float4 Pos : SV_POSITION ) : SV_TARGET +{ + return float4( 1.0f, 1.0f, 0.0f, 1.0f ); // Yellow, with Alpha = 1 +} + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VertShader() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PixShader() ) ); + } +} \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Render.ps b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Render.ps new file mode 100644 index 00000000..8ac1fccb Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Render.ps differ diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Render.vs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Render.vs new file mode 100644 index 00000000..ec6c18e4 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Render.vs differ diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Tutorial02_WinFormsControl.csproj b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Tutorial02_WinFormsControl.csproj new file mode 100644 index 00000000..d54e1817 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Tutorial02_WinFormsControl.csproj @@ -0,0 +1,109 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E} + WinExe + Properties + Microsoft.WindowsAPICodePack.Samples.Direct3D11 + Tutorial02_WinFormsControl + v3.5 + 512 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + false + + + + + 3.5 + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + True + Settings.settings + True + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Form1.Designer.cs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Form1.Designer.cs new file mode 100644 index 00000000..f47dc6a0 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Form1.Designer.cs @@ -0,0 +1,46 @@ +namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11 +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // Form1 + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(630, 450); + this.Name = "Form1"; + this.Text = "Direct3D 11 Tutorial 02 (Double Click inside window for Full Screen)"; + this.ResumeLayout(false); + + } + + #endregion + } +} + diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Form1.cs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Form1.cs new file mode 100644 index 00000000..c3f78cb8 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Form1.cs @@ -0,0 +1,243 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.IO; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D11; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; + +namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11 +{ + public partial class Form1 : Form + { + #region Structs + + [StructLayout(LayoutKind.Sequential)] + private class SimpleVertexArray + { + // An array of 3 Vectors + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] + public Vector3F[] vertices = + { + new Vector3F() + { + X = 0.0F, + Y = 0.5F, + Z = 0.5F + }, + new Vector3F() + { + X = 0.5F, + Y = -0.5F, + Z = 0.5F + }, + new Vector3F() + { + X = -0.5F, + Y = -0.5F, + Z = 0.5F + } + }; + } + #endregion + + + #region Fields + + D3DDevice device; + DeviceContext deviceContext; + RenderTargetView renderTargetView; + PixelShader pixelShader; + VertexShader vertexShader; + D3DBuffer vertexBuffer; + SwapChain swapChain; + + #endregion + + public Form1() + { + InitializeComponent(); + + SetStyle(ControlStyles.UserPaint, true); + SetStyle(ControlStyles.AllPaintingInWmPaint, true); + UpdateStyles(); + + } + + #region OnMouseDoubleClick() + /// + /// Switches full-screen mode + /// + /// + protected override void OnMouseDoubleClick(MouseEventArgs e) + { + if (swapChain != null) + { + swapChain.IsFullScreen = !swapChain.IsFullScreen; + } + } + + #endregion + + protected override void OnShown(EventArgs e) + { + base.OnShown(e); + + // device creation + device = D3DDevice.CreateDeviceAndSwapChain(Handle); + swapChain = device.SwapChain; + deviceContext = device.ImmediateContext; + + SetViews(); + + // Open precompiled vertex shader + // This file was compiled using: fxc Render.hlsl /T vs_4_0 /EVertShader /FoRender.vs + using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Microsoft.WindowsAPICodePack.Samples.Direct3D11.Render.vs")) + { + vertexShader = device.CreateVertexShader(stream); + } + + deviceContext.VS.SetShader(vertexShader, null); + + // input layout is for the vert shader + InputElementDescription inputElementDescription = new InputElementDescription(); + inputElementDescription.SemanticName = "POSITION"; + inputElementDescription.SemanticIndex = 0; + inputElementDescription.Format = Format.R32G32B32Float; + inputElementDescription.InputSlot = 0; + inputElementDescription.AlignedByteOffset = 0; + inputElementDescription.InputSlotClass = InputClassification.PerVertexData; + inputElementDescription.InstanceDataStepRate = 0; + + InputLayout inputLayout; + using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Microsoft.WindowsAPICodePack.Samples.Direct3D11.Render.vs")) + { + inputLayout = device.CreateInputLayout(new InputElementDescription[] { inputElementDescription }, stream); + } + deviceContext.IA.InputLayout = inputLayout; + + // Open precompiled vertex shader + // This file was compiled using: fxc Render.hlsl /T ps_4_0 /EPixShader /FoRender.ps + using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Microsoft.WindowsAPICodePack.Samples.Direct3D11.Render.ps")) + { + pixelShader = device.CreatePixelShader(stream); + } + deviceContext.PS.SetShader(pixelShader, null); + + + // create some geometry to draw (1 triangle) + SimpleVertexArray vertex = new SimpleVertexArray(); + + // put the vertices into a vertex buffer + + BufferDescription bufferDescription = new BufferDescription(); + bufferDescription.Usage = Usage.Default; + bufferDescription.ByteWidth = (uint)Marshal.SizeOf(vertex); + bufferDescription.BindingOptions = BindingOptions.VertexBuffer; + + SubresourceData subresourceData = new SubresourceData(); + + IntPtr vertexData = Marshal.AllocCoTaskMem(Marshal.SizeOf(vertex)); + Marshal.StructureToPtr(vertex, vertexData, false); + + subresourceData.SystemMemory = vertexData; + vertexBuffer = device.CreateBuffer(bufferDescription, subresourceData); + + + deviceContext.IA.SetVertexBuffers(0, new D3DBuffer[] { vertexBuffer }, new uint[] { 12 }, new uint[] { 0 }); + deviceContext.IA.PrimitiveTopology = PrimitiveTopology.TriangleList; + + Marshal.FreeCoTaskMem(vertexData); + } + + private void SetViews() + { + Texture2D texture2D = swapChain.GetBuffer(0); + renderTargetView = device.CreateRenderTargetView(texture2D); + deviceContext.OM.RenderTargets = new OutputMergerRenderTargets(new RenderTargetView[] { renderTargetView }); + texture2D.Dispose(); + + // viewport + SwapChainDescription desc = swapChain.Description; + Viewport viewport = new Viewport(); + viewport.Width = desc.BufferDescription.Width; + viewport.Height = desc.BufferDescription.Height; + viewport.MinDepth = 0.0f; + viewport.MaxDepth = 1.0f; + viewport.TopLeftX = 0; + viewport.TopLeftY = 0; + + deviceContext.RS.Viewports = new Viewport[] { viewport }; + } + + protected override void OnPaintBackground(PaintEventArgs e) + { + // Do not paint to prevent flickering + } + + protected override void OnPaint(PaintEventArgs e) + { + // Not required unless we need other controls! + // base.OnPaint(e); + + deviceContext.ClearRenderTargetView(renderTargetView, new ColorRgba( 0.2f, 0.125f, 0.3f, 1.0f )); + + deviceContext.Draw(3, 0); + + swapChain.Present(0, 0); + } + + protected override void OnSizeChanged(EventArgs e) + { + if (renderTargetView != null) + { + renderTargetView.Dispose(); + SwapChainDescription sd = swapChain.Description; + swapChain.ResizeBuffers(sd.BufferCount, (uint)this.ClientSize.Width, (uint)this.ClientSize.Height, sd.BufferDescription.Format, sd.Options); + SetViews(); + Invalidate(); + } + base.OnSizeChanged(e); + } + + protected override void OnClosed(EventArgs e) + { + // dispose all the DirectX bits + + deviceContext.ClearState(); + deviceContext.Flush(); + + + if (vertexBuffer != null) + { + vertexBuffer.Dispose(); + } + + if (vertexShader != null) + { + vertexShader.Dispose(); + } + + if (pixelShader != null) + { + pixelShader.Dispose(); + } + + if (renderTargetView != null) + { + renderTargetView.Dispose(); + } + + if (device != null) + { + device.Dispose(); + } + + base.OnClosed(e); + } + + } +} diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Form1.resx b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Form1.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Program.cs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Program.cs new file mode 100644 index 00000000..08223031 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Program.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11 +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..bf631e28 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("DirectX_TestHarness")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("94c89cee-5bcf-4268-b2b5-104059247270")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Properties/Resources.Designer.cs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Properties/Resources.Designer.cs new file mode 100644 index 00000000..ea6dd6b6 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.WindowsAPICodePack.Samples.Direct3D11.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Properties/Resources.resx b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Properties/Settings.Designer.cs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Properties/Settings.Designer.cs new file mode 100644 index 00000000..a802f2e4 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Properties/Settings.settings b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Render.hlsl b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Render.hlsl new file mode 100644 index 00000000..997346cc --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Render.hlsl @@ -0,0 +1,36 @@ +//-------------------------------------------------------------------------------------- +// File: Render.hlsl +// +// The shaders for rendering tessellated mesh and base mesh +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +float4 VertShader( float4 Pos : POSITION ) : SV_POSITION +{ + return Pos; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PixShader( float4 Pos : SV_POSITION ) : SV_TARGET +{ + return float4( 1.0f, 1.0f, 0.0f, 1.0f ); // Yellow, with Alpha = 1 +} + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VertShader() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PixShader() ) ); + } +} \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Render.ps b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Render.ps new file mode 100644 index 00000000..8ac1fccb Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Render.ps differ diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Render.vs b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Render.vs new file mode 100644 index 00000000..ec6c18e4 Binary files /dev/null and b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Render.vs differ diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Tutorial02_WinFormsWindow.csproj b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Tutorial02_WinFormsWindow.csproj new file mode 100644 index 00000000..610f633d --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Tutorial02_WinFormsWindow.csproj @@ -0,0 +1,105 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {7F4B3540-1E98-48D5-A826-78E4755ACCD5} + WinExe + Properties + Microsoft.WindowsAPICodePack.Samples.Direct3D11 + Tutorial02_WinFormsWindow + v3.5 + 512 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + x86 + + + + + 3.5 + + + + + + + + Form + + + Form1.cs + + + + + Form1.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + True + Settings.settings + True + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorials.sln b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorials.sln new file mode 100644 index 00000000..300c4848 --- /dev/null +++ b/source/Samples/DirectX/CS/Direct3D11/Tutorials/D3D11Tutorials.sln @@ -0,0 +1,96 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tutorial02_WinFormsControl", "D3D11Tutorial02_WinFormsControl\Tutorial02_WinFormsControl.csproj", "{60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tutorial02_WPF", "D3D11Tutorial02_WPF\Tutorial02_WPF.csproj", "{D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tutorial02_WinFormsWindow", "D3D11Tutorial02_WinFormsWindow\Tutorial02_WinFormsWindow.csproj", "{7F4B3540-1E98-48D5-A826-78E4755ACCD5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|Win32.ActiveCfg = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|x64.ActiveCfg = Debug|x64 + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|x64.Build.0 = Debug|x64 + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|Any CPU.Build.0 = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|Win32.ActiveCfg = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|x64.ActiveCfg = Release|x64 + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|x64.Build.0 = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.ActiveCfg = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.ActiveCfg = Release|x64 + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|Win32.ActiveCfg = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|x64.ActiveCfg = Debug|x64 + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|x64.Build.0 = Debug|x64 + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|Any CPU.Build.0 = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|Win32.ActiveCfg = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|x64.ActiveCfg = Release|x64 + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|x64.Build.0 = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.ActiveCfg = Release|x64 + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|Win32.ActiveCfg = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|x64.ActiveCfg = Debug|x64 + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|x64.Build.0 = Debug|x64 + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|Any CPU.Build.0 = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|Win32.ActiveCfg = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|x64.ActiveCfg = Release|x64 + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Camera/Camera.cs b/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Camera/Camera.cs new file mode 100644 index 00000000..b4110aa1 --- /dev/null +++ b/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Camera/Camera.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; + +namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities +{ + public static class Camera + { + public static Matrix4x4F MatrixLookAtLH(Vector3F eye, Vector3F at, Vector3F up) + { + Vector3F right, vec; + + vec = at - eye; + vec.NormalizeInPlace(); + right = Vector3F.Cross(up, vec); + up = Vector3F.Cross(vec, right); + right.NormalizeInPlace(); + up.NormalizeInPlace(); + return new Matrix4x4F( + right.X, + up.X, + vec.X, + 0.0f, + + right.Y, + up.Y, + vec.Y, + 0.0f, + + right.Z, + up.Z, + vec.Z, + 0.0f, + + -Vector3F.Dot(right, eye), + -Vector3F.Dot(up, eye), + -Vector3F.Dot(vec, eye), + 1.0f + ); + } + + public static Matrix4x4F MatrixPerspectiveFovLH(float fovy, float aspect, float zn, float zf) + { + Matrix4x4F ret = new Matrix4x4F(); + ret.M11 = 1.0f / (aspect * (float)Math.Tan(fovy / 2)); + ret.M22 = 1.0f / (float)Math.Tan(fovy / 2); + ret.M33 = zf / (zf - zn); + ret.M34 = 1; + ret.M43 = (zf * zn) / (zn - zf); + ret.M44 = 0; + return ret; + } + } +} diff --git a/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Direct3DUtilities.csproj b/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Direct3DUtilities.csproj new file mode 100644 index 00000000..f3f73e32 --- /dev/null +++ b/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Direct3DUtilities.csproj @@ -0,0 +1,84 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Library + Properties + Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + DirectXUtilities + v3.5 + 512 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + 3.0 + + + 3.0 + + + + 3.5 + + + + + 3.5 + + + 3.0 + + + + + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Math/Matrix.cs b/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Math/Matrix.cs new file mode 100644 index 00000000..f50bf9e9 --- /dev/null +++ b/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Math/Matrix.cs @@ -0,0 +1,92 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Runtime.InteropServices; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; + +namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities +{ + [StructLayout(LayoutKind.Sequential)] + public class MatrixMath + { + #region operator * + + public static Vector4F VectorMultiply(Matrix4x4F a, Vector4F b) + { + return new Vector4F( + a.M11 * b.X + a.M21 * b.Y + a.M31 * b.Z + a.M41 * b.W, + a.M12 * b.X + a.M22 * b.Y + a.M32 * b.Z + a.M42 * b.W, + a.M13 * b.X + a.M23 * b.Y + a.M33 * b.Z + a.M43 * b.W, + a.M14 * b.X + a.M24 * b.Y + a.M34 * b.Z + a.M44 * b.W + ); + } + #endregion + + #region MatrixScale + public static Matrix4x4F MatrixScale(float x, float y, float z) + { + return new Matrix4x4F( + x, 0, 0, 0, + 0, y, 0, 0, + 0, 0, z, 0, + 0, 0, 0, 1 + ); + } + #endregion + + #region MatrixTranslate + public static Matrix4x4F MatrixTranslate(float x, float y, float z) + { + return new Matrix4x4F( + 1, 0, 0, 0, + 0, 1, 0, 0, + 0, 0, 1, 0, + x, y, z, 1 + ); + } + #endregion + + #region MatrixRotationX + public static Matrix4x4F MatrixRotationX(float angle) + { + float sin = (float)Math.Sin(angle); + float cos = (float)Math.Cos(angle); + return new Matrix4x4F( + 1, 0, 0, 0, + 0, cos, sin, 0, + 0, -sin, cos, 0, + 0, 0, 0, 1 + ); + } + #endregion + + #region MatrixRotationY + public static Matrix4x4F MatrixRotationY(float angle) + { + float sin = (float)Math.Sin(angle); + float cos = (float)Math.Cos(angle); + return new Matrix4x4F( + cos, 0, -sin, 0, + 0, 1, 0, 0, + sin, 0, cos, 0, + 0, 0, 0, 1 + ); + } + #endregion + + #region MatrixRotationZ + public static Matrix4x4F MatrixRotationZ(float angle) + { + float sin = (float)Math.Sin(angle); + float cos = (float)Math.Cos(angle); + return new Matrix4x4F( + cos, sin, 0, 0, + -sin, cos, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 1 + ); + } + #endregion + } + +} diff --git a/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Math/MatrixUtilities.cs b/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Math/MatrixUtilities.cs new file mode 100644 index 00000000..29fc3e1f --- /dev/null +++ b/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Math/MatrixUtilities.cs @@ -0,0 +1,131 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Media.Media3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; + + +namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities +{ + public static class MatrixExtensions + { + public static Matrix4x4F ToMatrix4x4F( this Matrix3D source ) + { + return new Matrix4x4F( + (float)source.M11, + (float)source.M12, + (float)source.M13, + (float)source.M14, + + (float)source.M21, + (float)source.M22, + (float)source.M23, + (float)source.M24, + + (float)source.M31, + (float)source.M32, + (float)source.M33, + (float)source.M34, + + (float)source.OffsetX, + (float)source.OffsetY, + (float)source.OffsetZ, + (float)source.M44 ); + } + + public static Matrix3D ToMatrix3D( this Matrix4x4F source ) + { + Matrix3D destination = new Matrix3D( ); + destination.M11 = (float)source.M11; + destination.M12 = (float)source.M12; + destination.M13 = (float)source.M13; + destination.M14 = (float)source.M14; + + destination.M21 = (float)source.M21; + destination.M22 = (float)source.M22; + destination.M23 = (float)source.M23; + destination.M24 = (float)source.M24; + + destination.M31 = (float)source.M31; + destination.M32 = (float)source.M32; + destination.M33 = (float)source.M33; + destination.M34 = (float)source.M34; + + destination.OffsetX = (float)source.M41; + destination.OffsetY = (float)source.M42; + destination.OffsetZ = (float)source.M43; + destination.M44 = (float)source.M44; + + return destination; + } + + #region PerspectiveCamera extensions + /// + /// Returns the world*perspective matrix for the camera + /// + /// The WPF camera + /// The aspect ratio of the device surface + /// + public static Matrix3D ToMatrix3DLH( this PerspectiveCamera camera, double aspectRatio ) + { + Transform3DGroup tg = new Transform3DGroup( ); + tg.Children.Add(new MatrixTransform3D(GetLookAtMatrixLH(camera))); + tg.Children.Add(camera.Transform); + tg.Children.Add(new MatrixTransform3D(GetPerspectiveMatrixLH(camera, aspectRatio))); + return tg.Value; + } + + public static Matrix3D ToViewLH( this PerspectiveCamera camera ) + { + return GetLookAtMatrixLH( camera ); + } + + public static Matrix3D ToPerspectiveLH( this PerspectiveCamera camera, double aspectRatio ) + { + return GetPerspectiveMatrixLH( camera, aspectRatio ); + } + #endregion + + #region PerspectiveCamera implementation + internal static Matrix3D GetPerspectiveMatrixLH( PerspectiveCamera camera, double aspectRatio ) + { + double fov = (camera.FieldOfView / 360.0) * 2.0 * Math.PI; + double zn = camera.NearPlaneDistance; + double zf = camera.FarPlaneDistance; + double f = 1.0 / Math.Tan( fov / 2.0 ); + double xScale = f / aspectRatio; + double yScale = f; + double n = (1.0 / (zf - zn)); + double m33 = zf * n; + double m43 = -zf * zn * n; + + return + new Matrix3D( + xScale, 0, 0, 0, + 0, yScale, 0, 0, + 0, 0, m33, 1, + 0, 0, m43, 0 ); + } + + internal static Matrix3D GetLookAtMatrixLH( PerspectiveCamera camera ) + { + Vector3D f = new Vector3D( + camera.Position.X - camera.LookDirection.X, + camera.Position.Y - camera.LookDirection.Y, + camera.Position.Z - camera.LookDirection.Z ); + f.Normalize(); + Vector3D vUpActual = camera.UpDirection; + vUpActual.Normalize(); + Vector3D s = Vector3D.CrossProduct( f, vUpActual ); + Vector3D u = Vector3D.CrossProduct( s, f ); + + return + new Matrix3D( + s.X, u.X, -f.X, 0, + s.Y, u.Y, -f.Y, 0, + s.Z, u.Z, -f.Z, 0, + -camera.Position.X, -camera.Position.Y, -camera.Position.Z, 1 ); + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..2982a53f --- /dev/null +++ b/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("DirectXUtilities")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("7bca4a9a-5b83-46d8-bc22-311fad550417")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Shaders/Shaders.cs b/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Shaders/Shaders.cs new file mode 100644 index 00000000..6426fc54 --- /dev/null +++ b/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Shaders/Shaders.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities +{ + public class Shaders + { + //static FromFile( string path ) + //{ + //} + } +} diff --git a/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Texture/TextureLoader.cs b/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Texture/TextureLoader.cs new file mode 100644 index 00000000..3419b729 --- /dev/null +++ b/source/Samples/DirectX/CS/UtilitiesLibrary/D3DUtilities/Texture/TextureLoader.cs @@ -0,0 +1,114 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.IO; +using System.Runtime.InteropServices; + + +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; +using Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent; + +namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities +{ + public class TextureLoader + { + /// + /// Creates a ShaderResourceView from a bitmap in a Stream. + /// + /// The Direct3D device that will own the ShaderResourceView + /// Any Windows Imaging Component decodable image + /// A ShaderResourceView object with the loaded texture. + public static ShaderResourceView LoadTexture( D3DDevice device, Stream stream ) + { + ImagingFactory factory = ImagingFactory.Create(); + + BitmapDecoder bitmapDecoder = + factory.CreateDecoderFromStream( + stream, + DecodeMetadataCacheOption.OnDemand ); + + return LoadFromDecoder(device, factory, bitmapDecoder); + } + + /// + /// Creates a ShaderResourceView from a bitmap in a file. + /// + /// The Direct3D device that will own the ShaderResourceView + /// Any Windows Imaging Component decodable image + /// A ShaderResourceView object with the loaded texture. + public static ShaderResourceView LoadTexture(D3DDevice device, String filePath) + { + ImagingFactory factory = ImagingFactory.Create(); + + BitmapDecoder bitmapDecoder = + factory.CreateDecoderFromFileName( + filePath, + DesiredAccess.Read, + DecodeMetadataCacheOption.OnDemand); + + return LoadFromDecoder(device, factory, bitmapDecoder); + } + private static ShaderResourceView LoadFromDecoder(D3DDevice device, ImagingFactory factory, BitmapDecoder bitmapDecoder) + { + if (bitmapDecoder.FrameCount == 0) + throw new ArgumentException("Image file successfully loaded, but it has no image frames."); + + BitmapFrameDecode bitmapFrameDecode = bitmapDecoder.GetFrame(0); + BitmapSource bitmapSource = bitmapFrameDecode.ToBitmapSource(); + + // create texture description + Texture2DDescription textureDescription = new Texture2DDescription() + { + Width = bitmapSource.Size.Width, + Height = bitmapSource.Size.Height, + MipLevels = 1, + ArraySize = 1, + Format = Format.R8G8B8A8UNorm, + SampleDescription = new SampleDescription() + { + Count = 1, + Quality = 0, + }, + Usage = Usage.Dynamic, + BindingOptions = BindingOptions.ShaderResource, + CpuAccessOptions = CpuAccessOptions.Write, + MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + }; + + // create texture + Texture2D texture = device.CreateTexture2D(textureDescription); + + // Create a format converter + FormatConverter converter = factory.CreateFormatConverter(); + converter.Initialize( + bitmapSource, + PixelFormats.Prgba32Bpp, + BitmapDitherType.None, + BitmapPaletteType.Custom); + + // get bitmap data + byte[] buffer = converter.CopyPixels(); + + // Copy bitmap data to texture + MappedTexture2D texmap = texture.Map(0, Map.WriteDiscard, Microsoft.WindowsAPICodePack.DirectX.Direct3D10.MapOptions.None); + Marshal.Copy(buffer, 0, texmap.Data, buffer.Length); + texture.Unmap(0); + + // create shader resource view description + ShaderResourceViewDescription srvDescription = new ShaderResourceViewDescription() + { + Format = textureDescription.Format, + ViewDimension = ShaderResourceViewDimension.Texture2D, + Texture2D = new Texture2DShaderResourceView() + { + MipLevels = textureDescription.MipLevels, + MostDetailedMip = 0 + } + }; + + // create shader resource view from texture + return device.CreateShaderResourceView(texture, srvDescription); + } + } +} diff --git a/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/AirplaneMesh.cs b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/AirplaneMesh.cs new file mode 100644 index 00000000..dd642c31 --- /dev/null +++ b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/AirplaneMesh.cs @@ -0,0 +1,49 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Media.Media3D; + +namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities +{ + /// + /// A specialization of an XMesh that rotates the propeller of "airplane 2.x". + /// + public class AirplaneXMesh : XMesh + { + private double propRotation = 0; + private double hubOffsetX = .05; + private double hubOffsetY = .43; + private double propZOffset = -3.7; + private double propAngle = 20; + + protected override Matrix3D PartAnimation( string partName ) + { + if( partName == "propeller" ) + { + Transform3DGroup group = new Transform3DGroup( ); + + group.Children.Add( + new TranslateTransform3D( -hubOffsetX, -hubOffsetY, -propZOffset ) ); + group.Children.Add( + new RotateTransform3D( + new AxisAngleRotation3D( new Vector3D( 1, 0, 0 ), -propAngle ), 0, 0, 0 ) ); + group.Children.Add( + new RotateTransform3D( + new AxisAngleRotation3D( new Vector3D( 0, 0, 1 ), propRotation ), 0, 0, 0 ) ); + group.Children.Add( + new RotateTransform3D( + new AxisAngleRotation3D( new Vector3D( 1, 0, 0 ), +propAngle ), 0, 0, 0 ) ); + group.Children.Add( + new TranslateTransform3D( +hubOffsetX, +hubOffsetY, +propZOffset ) ); + + propRotation += 11; + + return group.Value; + } + else + { + return Matrix3D.Identity; + } + } + } +} diff --git a/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/MeshLoader.csproj b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/MeshLoader.csproj new file mode 100644 index 00000000..abecee69 --- /dev/null +++ b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/MeshLoader.csproj @@ -0,0 +1,90 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {B28ADA8B-BD7E-4C11-8298-C39F7C456365} + Library + Properties + Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + MeshLoader + v3.5 + 512 + + + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + x86 + + + + 3.0 + + + 3.0 + + + + 3.5 + + + + 3.0 + + + + + + + + + + + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {453FF234-24EC-4CC3-83DA-6D6C54388899} + Microsoft.WindowsAPICodePack.DirectX.Direct3DX10 + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/Properties/AssemblyInfo.cs b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..faf4f699 --- /dev/null +++ b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("MeshLoader")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("05aae0b4-0c07-4a2a-8b5a-8acdd812d60a")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/Texturizer.cs b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/Texturizer.cs new file mode 100644 index 00000000..7e5b8be5 --- /dev/null +++ b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/Texturizer.cs @@ -0,0 +1,247 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.IO; + +using Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities; +using Microsoft.WindowsAPICodePack.DirectX; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; +using System.Windows.Media.Media3D; + + +namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities +{ + /// + /// A Mesh that allows for changing textures within the scene + /// + public class Texturizer : XMesh + { + /// + /// If true shows one texture at a time + /// + public bool ShowOneTexture + { + get + { + return showOneTexture; + } + set + { + showOneTexture = value; + } + } + bool showOneTexture = true; + + /// + /// This method sets which part to texture during rendering. + /// + /// + public void PartToTexture(string partName) + { + if (string.IsNullOrEmpty(partName)) + { + throw new ArgumentException("Must be a non-empty string", "partName"); + } + + partEmphasis.Clear(); + + foreach (Part part in rootParts) + { + if (BuildEmphasisDictionary(part, partName, false)) + { + break; + } + } + } + + private HashSet partEmphasis = new HashSet(); + + /// + /// Builds a dictionary of parts to be emphasized if displaying wireframe. + /// + /// + /// During rendering, as the mesh tree is traversed each part is checked to + /// see whether it should be displayed as wireframe or not. A part in the dictionary + /// built by this method will be rendered as a solid part, otherwise the part + /// will be rendered as wireframe. + /// This method traverses the mesh tree looking for the named part. Once that + /// named part is found, that part and all its children are added to the dictionary. + /// The traversal is terminated once the named part has been found and all of its + /// children have also been traversed (and added to the dictionary). + /// + /// The current part to inspect + /// The name of the root part to emphasize during rendering + /// True if the parent of this part will be emphasized, false otherwise + /// True if this part has been emphasized, false otherwise + private bool BuildEmphasisDictionary(Part part, string partName, bool fEmphasizeParent) + { + if (fEmphasizeParent || (!string.IsNullOrEmpty(part.name) && part.name == partName)) + { + partEmphasis.Add(part); + fEmphasizeParent = true; + } + + foreach (Part childPart in part.parts) + { + if (BuildEmphasisDictionary(childPart, partName, fEmphasizeParent) && !fEmphasizeParent) + { + break; + } + } + + return fEmphasizeParent; + } + + /// + /// Clears the alternate texture list (restoring the model's textures) + /// + public void RevertTextures() + { + alternateTextures.Clear(); + } + + /// + /// Gets a list of the names of the parts in the mesh + /// + /// + public List GetParts() + { + List partNames = new List(); + + if (rootParts != null) + { + foreach (Part part in rootParts) + { + GetParts(part, partNames); + } + } + + return partNames; + } + + private void GetParts(Part part, List names) + { + if (!string.IsNullOrEmpty(part.name)) + { + names.Add(part.name); + } + + foreach (Part childPart in part.parts) + { + GetParts(childPart, names); + } + } + + + /// + /// Creates an alternate texture for a part + /// + /// The name of the part to create the texture for. + /// The path to the image to be used for the texture. + public void SwapTexture(string partName, string imagePath) + { + if (partName != null) + { + if (File.Exists(imagePath)) + { + FileStream stream = File.OpenRead(imagePath); + + try + { + ShaderResourceView srv = TextureLoader.LoadTexture(this.manager.device, stream); + if (srv != null) + alternateTextures[partName] = srv; + } + catch (COMException) + { + System.Windows.MessageBox.Show("Not a valid image."); + } + + } + else + { + alternateTextures[partName] = null; + } + } + } + + Dictionary alternateTextures = new Dictionary(); + + private RasterizerState solidRasterizerState; + private RasterizerState wireframeRasterizerState; + private RasterizerState currentRasterizerState; + + internal override ShaderResourceView UpdateRasterizerStateForPart(Part part) + { + RasterizerState state = + showOneTexture && !partEmphasis.Contains(part) ? wireframeRasterizerState : solidRasterizerState; + + if (state != currentRasterizerState) + { + this.manager.device.RS.State = currentRasterizerState = state; + } + + ShaderResourceView textureOverride; + + if (!alternateTextures.TryGetValue(part.name, out textureOverride)) + { + textureOverride = null; + } + + return textureOverride; + } + + /// + /// Renders the mesh with the specified transformation. This alternate render method + /// supplements the base class rendering to provide part-by-part texturing support. + /// + /// + public void Render(Matrix3D modelTransform) + { + // setup rasterization + RasterizerDescription rasterizerDescription = new RasterizerDescription() + { + FillMode = FillMode.Solid, + CullMode = CullMode.Back, + FrontCounterclockwise = false, + DepthBias = 0, + DepthBiasClamp = 0, + SlopeScaledDepthBias = 0, + DepthClipEnable = true, + ScissorEnable = false, + MultisampleEnable = true, + AntiAliasedLineEnable = true + }; + + try + { + solidRasterizerState = this.manager.device.CreateRasterizerState(rasterizerDescription); + + rasterizerDescription.FillMode = FillMode.Wireframe; + wireframeRasterizerState = this.manager.device.CreateRasterizerState(rasterizerDescription); + + base.Render(modelTransform.ToMatrix4x4F()); + } + finally + { + if (solidRasterizerState != null) + { + solidRasterizerState.Dispose(); + solidRasterizerState = null; + } + + if (wireframeRasterizerState != null) + { + wireframeRasterizerState.Dispose(); + wireframeRasterizerState = null; + } + + currentRasterizerState = null; + } + } + } +} diff --git a/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/XMesh.cs b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/XMesh.cs new file mode 100644 index 00000000..9617f049 --- /dev/null +++ b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/XMesh.cs @@ -0,0 +1,271 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.RegularExpressions; +using System.IO; +using Microsoft.WindowsAPICodePack.DirectX; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; +using System.Windows.Media.Media3D; +using System.Runtime.InteropServices; + +namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities +{ + /// + /// + /// + public class XMesh : IDisposable + { + RasterizerDescription rDescription = new RasterizerDescription() + { + FillMode = FillMode.Solid, + CullMode = CullMode.Back, + FrontCounterclockwise = false, + DepthBias = 0, + DepthBiasClamp = 0, + SlopeScaledDepthBias = 0, + DepthClipEnable = true, + ScissorEnable = false, + MultisampleEnable = true, + AntiAliasedLineEnable = true, + }; + + #region public methods + /// + /// Renders the mesh with the specified transformation + /// + /// + public void Render(Matrix4x4F modelTransform) + { + rDescription.FillMode = wireFrame ? FillMode.Wireframe : FillMode.Solid; + // setup rasterization + using (RasterizerState rState = this.manager.device.CreateRasterizerState(rDescription)) + { + this.manager.device.RS.State = rState; + this.manager.brightnessVariable.AsSingle = this.lightIntensity; + + if (rootParts != null) + { + Matrix3D transform = modelTransform.ToMatrix3D(); + + foreach (Part part in rootParts) + { + RenderPart(part, transform, null); + } + } + + // Note: see comment regarding input layout in RenderPart() + // method; the same thing applies to the render state of the + // rasterizer stage of the pipeline. + this.manager.device.RS.State = null; + } + } + #endregion + + #region public properties + /// + /// Displays the unshaded wireframe if true + /// + public bool ShowWireFrame + { + get { return wireFrame; } + set { wireFrame = value; } + } + private bool wireFrame = false; + + /// + /// Sets the intensity of the light used in rendering. + /// + public float LightIntensity + { + get { return lightIntensity; } + set { lightIntensity = value; } + } + private float lightIntensity = 1.0f; + #endregion + + #region virtual methods + protected virtual Matrix3D PartAnimation(string partName) + { + return Matrix3D.Identity; + } + + internal virtual ShaderResourceView UpdateRasterizerStateForPart(Part part) + { + return null; + } + + #endregion + + #region implementation + internal XMesh() + { + } + + internal void Load(string path, XMeshManager manager) + { + this.manager = manager; + XMeshTextLoader loader = new XMeshTextLoader(this.manager.device); + rootParts = loader.XMeshFromFile(path); + } + + private void RenderPart(Part part, Matrix3D parentMatrix, ShaderResourceView parentTextureOverride) + { + // set part transform + Transform3DGroup partGroup = new Transform3DGroup(); + partGroup.Children.Add(new MatrixTransform3D(PartAnimation(part.name))); + partGroup.Children.Add(new MatrixTransform3D(part.partTransform.ToMatrix3D())); + partGroup.Children.Add(new MatrixTransform3D(parentMatrix)); + + parentMatrix = partGroup.Value; + + ShaderResourceView textureOverride = UpdateRasterizerStateForPart(part); + + if (textureOverride == null) + { + textureOverride = parentTextureOverride; + } + else + { + parentTextureOverride = textureOverride; + } + + if (part.vertexBuffer != null) + { + EffectTechnique technique; + + if (textureOverride != null) + { + technique = this.manager.techniqueRenderTexture; + this.manager.diffuseVariable.Resource = textureOverride; + } + else if (part.material == null) + { + technique = this.manager.techniqueRenderVertexColor; + } + else + { + if (part.material.textureResource != null) + { + technique = this.manager.techniqueRenderTexture; + this.manager.diffuseVariable.Resource = part.material.textureResource; + } + else + { + technique = this.manager.techniqueRenderMaterialColor; + this.manager.materialColorVariable.FloatVector = part.material.materialColor; + } + } + + this.manager.worldVariable.Matrix = parentMatrix.ToMatrix4x4F(); + + //set up vertex buffer and index buffer + uint stride = (uint)Marshal.SizeOf(typeof(XMeshVertex)); + uint offset = 0; + this.manager.device.IA.SetVertexBuffers(0, new D3DBuffer[] + { part.vertexBuffer }, + new uint[] { stride }, + new uint[] { offset }); + + //Set primitive topology + this.manager.device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList; + + TechniqueDescription techDesc = technique.Description; + for (uint p = 0; p < techDesc.Passes; ++p) + { + technique.GetPassByIndex(p).Apply(); + PassDescription passDescription = technique.GetPassByIndex(p).Description; + + using (InputLayout inputLayout = this.manager.device.CreateInputLayout( + part.dataDescription, + passDescription.InputAssemblerInputSignature, + passDescription.InputAssemblerInputSignatureSize)) + { + // set vertex layout + this.manager.device.IA.InputLayout = inputLayout; + + // draw part + this.manager.device.Draw((uint)part.vertexCount, 0); + + // Note: In Direct3D 10, the device will not retain a reference + // to the input layout, so it's important to reset the device's + // input layout before disposing the object. Were this code + // using Direct3D 11, the device would in fact retain a reference + // and so it would be safe to go ahead and dispose the input + // layout without resetting it; in that case, there could be just + // a single assignment to null outside the 'for' loop, or even + // no assignment at all. + this.manager.device.IA.InputLayout = null; + } + } + } + + foreach (Part childPart in part.parts) + { + RenderPart(childPart, parentMatrix, parentTextureOverride); + } + } + + /// + /// The root part of this mesh + /// + internal IEnumerable rootParts; + + /// + /// The object that manages the XMeshes + /// + internal XMeshManager manager; + + #endregion + + #region IDisposable Members + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + private bool disposed; + + private void DisposePart(Part part) + { + if (part.vertexBuffer != null) + { + part.vertexBuffer.Dispose(); + part.vertexBuffer = null; + } + if ((part.material != null) && (part.material.textureResource != null)) + { + part.material.textureResource.Dispose(); + part.material.textureResource = null; + } + + foreach (Part childPart in part.parts) + { + DisposePart(childPart); + } + + part.parts = null; + } + + /// + /// Releases resources no longer needed. + /// + protected virtual void Dispose(bool disposing) + { + if (!disposed && rootParts != null) + { + foreach (Part part in rootParts) + { + DisposePart(part); + } + rootParts = null; + disposed = true; + } + } + #endregion + } +} diff --git a/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/XMesh.fx b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/XMesh.fx new file mode 100644 index 00000000..a28d95b2 --- /dev/null +++ b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/XMesh.fx @@ -0,0 +1,165 @@ +//-------------------------------------------------------------------------------------- +// File: SimpleSample.fx +// +// The effect file for the SimpleSample sample. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + + +//-------------------------------------------------------------------------------------- +// Global variables +//-------------------------------------------------------------------------------------- +float3 LightDir = float3(0,0.707,-0.707); // Light's direction in world space +float4 MaterialColor; +matrix World; +matrix View; +matrix Projection; +float Brightness = 1.5; + +//----------------------------------------------------------------------------------------- +// Textures and Samplers +//----------------------------------------------------------------------------------------- +Texture2D tex2D; +SamplerState linearSampler +{ + Filter = MIN_MAG_MIP_LINEAR; + AddressU = Wrap; + AddressV = Wrap; +}; + +//-------------------------------------------------------------------------------------- +// shader input/output structure +//-------------------------------------------------------------------------------------- +struct VS_INPUT +{ + float4 Position : POSITION; // vertex position + float4 Normal : NORMAL; // this normal comes in per-vertex + float4 Color : COLOR; + float2 TextureUV : TEXCOORD; // vertex texture coords +}; + + +struct GSPS_INPUT +{ + float4 Position : SV_POSITION; + float4 Normal : NORMAL; + float4 Color : COLOR; + float2 TextureUV : TEXCOORD0; // vertex texture coords +}; + + +//-------------------------------------------------------------------------------------- +// Vertex Shaders +//-------------------------------------------------------------------------------------- +GSPS_INPUT VS_textured( VS_INPUT input ) +{ + GSPS_INPUT output = (GSPS_INPUT)0; + float3 vNormalWorldSpace; + + output.Position = mul( input.Position, World ); + output.Position = mul( output.Position, View ); + output.Position = mul( output.Position, Projection ); + + // Calc diffuse lighting color + vNormalWorldSpace = normalize(mul(input.Normal, World)); + output.Color.rgb = max(0.3,dot(vNormalWorldSpace, LightDir)).rrr * Brightness; + output.Color.a = 1.0f; + + output.TextureUV = input.TextureUV; + + return output; +} + +GSPS_INPUT VS_vertexColor( VS_INPUT input ) +{ + GSPS_INPUT output = (GSPS_INPUT)0; + + output.Position = mul( input.Position, World ); + output.Position = mul( output.Position, View ); + output.Position = mul( output.Position, Projection ); + + output.Color = input.Color * Brightness; + + output.TextureUV = input.TextureUV; + + return output; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shaders +//-------------------------------------------------------------------------------------- +float4 PS_textured( GSPS_INPUT input ) : SV_Target +{ + return tex2D.Sample( linearSampler, input.TextureUV ) * input.Color; +} + +float4 PS_vertexColor( GSPS_INPUT input ) : SV_Target +{ + return input.Color; +} + +float4 PS_materialColor( GSPS_INPUT input ) : SV_Target +{ + return MaterialColor * Brightness / 2.0; +} + + +//-------------------------------------------------------------------------------------- +// Geometry Shader +//-------------------------------------------------------------------------------------- +[maxvertexcount(9)] +void GS( triangle GSPS_INPUT input[3], inout TriangleStream TriStream ) +{ + GSPS_INPUT output; + + for( int t=0; t < 3; t++ ) + { + for( int v = 0; v < 3; v++ ) + { + output.Position = input[v].Position; + output.Position.w = output.Position.w + (10 * t); + output.Position.z = output.Position.z + (10 * t); + + output.Normal = input[v].Normal; + output.Color = input[v].Color; + output.TextureUV = input[v].TextureUV; + TriStream.Append( output ); + } + TriStream.RestartStrip(); + } +} + +//-------------------------------------------------------------------------------------- +// Techniques +//-------------------------------------------------------------------------------------- +technique10 RenderTextured +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS_textured() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS_textured() ) ); + } +} + +technique10 RenderVertexColor +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS_vertexColor() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS_vertexColor() ) ); + } +} + +technique10 RenderMaterialColor +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS_textured() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS_materialColor() ) ); + } +} diff --git a/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/XMesh.fxo b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/XMesh.fxo new file mode 100644 index 00000000..9f863cfa Binary files /dev/null and b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/XMesh.fxo differ diff --git a/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/XMeshLoader.XDataObject.cs b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/XMeshLoader.XDataObject.cs new file mode 100644 index 00000000..a1635a0e --- /dev/null +++ b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/XMeshLoader.XDataObject.cs @@ -0,0 +1,529 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; + + +namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities +{ + // XDataObject functionality is only needed by the mesh-loading + // code, thus private to the XMeshTextLoader class. + internal partial class XMeshTextLoader + { + /// + /// Helper method to retrieve an immediate child of the + /// given with the given named type. + /// + /// The instance the children of which to search + /// The template name of the .x file type to retrieve + /// The one child of the given type if present, null if no such child is present. + /// There are more than one child of the given type. + private static IXDataObject GetSingleChild(IXDataObject dataObject, string type) + { + return dataObject.Children.SingleOrDefault(obj => obj.DataObjectType == type); + } + + /// + /// The base interface type for all data objects found in the .x file + /// + private interface IXDataObject + { + /// + /// Returns true if the data object corresponds to some specific object that can + /// be represented visually. For example, a frame or a mesh. + /// Returns false if the data object is simply used as a data member of some other data object. + /// For example, the vertices or materials for a mesh. + /// + bool IsVisualObject { get; } + + /// + /// The template name of the data object's type. + /// + string DataObjectType { get; } + + /// + /// The name of the data object itself (may be empty). + /// + string Name { get; } + + /// + /// The text contained within the body of the data object, once + /// all known data members of the data object have been parsed and + /// removed from the body. + /// + string Body { get; } + + /// + /// The immediate children of the data object. + /// + IEnumerable Children { get; } + } + + /// + /// Indicates the restriction type of an . A data object + /// with the restriction can contain any data object of any type + /// as children. A data object with the restriction can contain + /// only data objects of the types listed in the . + /// A data object with the restriction may not contain any + /// child data objects. + /// + private enum TemplateRestriction + { + Open, + Restricted, + Closed + } + + /// + /// A data object having the type "template". + /// + private interface IXTemplateObject : IXDataObject + { + IEnumerable Restrictions { get; } + TemplateRestriction Restricted { get; } + } + + /// + /// A factory class used to create instances from + /// text input. + /// + private class XDataObjectFactory + { + /// + /// Creates an enumeration of data objects represented by the given text. + /// + /// The text to parse. After the method returns, this will reference a new string containing all the text that was not parsed. + /// An enumeration of instances represented by the text. + public static IEnumerable ExtractDataObjects(ref string inputText) + { + return new XDataObjectFactory().ExtractDataObjectsImpl(ref inputText); + } + + private XDataObjectFactory() { } + + #region Regex initialization + + private const RegexOptions defaultOptions = RegexOptions.IgnorePatternWhitespace | RegexOptions.Compiled; + + /// + /// An expression describing the basic structure of an .x file data object + /// + private static Regex dataObjectRegex = new Regex(@" + (?[\w_]+) + (:?\s+(?[^\s{]+))?\s* + {(? + (?> + [^{}]+| + {(?)| + }(?<-bracket>) + )* + (?(bracket)(?!)) + )} + ", defaultOptions); + + /// + /// An expression describing a reference to another data object, as found within the body of an .x file data object. + /// + private static Regex bodyReferenceRegex = new Regex(@" + {\s*(?[\w_]+)?\s*(?\<\w{8}-\w{4}-\w{4}-\w{4}-\w{12}\>)?\s*} + ", defaultOptions); + + /// + /// An expression describing a UUID declaration of a data object defined in an .x file. + /// + private static Regex uuidDeclarationRegex = new Regex(@" + (?\<\w{8}-\w{4}-\w{4}-\w{4}-\w{12}\>) + ", defaultOptions); + + /// + /// An expression describing the restrictions for a template data object defined in an .x file. + /// + private static Regex restrictionsDeclarationRegex = new Regex(@" + (?<=([^\w\s_]+\s*|^\s*)) + (?\[\s* + ( + (?\.\.\.)| + (?(?[\w_]+)(\s*(?\<\w{8}-\w{4}-\w{4}-\w{4}-\w{12}\>))?) + (\s*,\s* + (?(?[\w_]+)(\s*(?\<\w{8}-\w{4}-\w{4}-\w{4}-\w{12}\>))?) + )* + ) + \s*\]) + ", defaultOptions | RegexOptions.ExplicitCapture); + + /// + /// An expression describing an individual restriction declaration within a template object defined in an .x file. + /// + private static Regex restrictionDeclarationRegex = new Regex(@" + (?[\w_]+)(\s*(?\<\w{8}-\w{4}-\w{4}-\w{4}-\w{12}\>))? + ", defaultOptions); + + #endregion // Regex initialization + + /// + /// Implementation of + /// + /// Private implementation ensures that only the can create this. + private class XDataObject : IXDataObject + { + public virtual bool IsVisualObject { get { return DataObjectType == "Frame" || DataObjectType == "Mesh"; } } + public string DataObjectType { get; private set; } + public string Name { get; private set; } + public string Body { get; private set; } + public IEnumerable Children { get; private set; } + + /// + /// Constructor. + /// + /// The template name of the type of the data object + /// The name of the data object + /// The remaining unparsed body text of the data object + /// The factory used to create this object + /// Thrown if the or arguments are null. + /// The factory passed in is used to further parse the object's body text, including + /// resolving references to previously defined objects and templates. + public XDataObject(string type, string name, string body, XDataObjectFactory factory) + { + if (type == null) + { + throw new ArgumentNullException("type"); + } + + if (factory == null) + { + throw new ArgumentNullException("factory"); + } + + DataObjectType = type; + Name = name; + Children = factory.ExtractDataObjectsImpl(ref body); + Body = body; + } + } + + /// + /// Implementation of + /// + /// Private implementation ensures that only the can create this. + private class XTemplateObject : XDataObject, IXTemplateObject + { + public override bool IsVisualObject { get { return false; } } + public IEnumerable Restrictions { get; private set; } + public TemplateRestriction Restricted { get; private set; } + + /// + /// Constructor for template objects having the restriction. + /// + /// The name of the template object + /// The remaining unparsed body of the template object + /// The factory used to create this object + /// A list of template objects representing the only valid types of data object children for this type + /// + public XTemplateObject(string name, string body, XDataObjectFactory factory, IList restrictions) : + base("template", name, body, factory) + { + Restrictions = new ReadOnlyCollection(restrictions); + Restricted = TemplateRestriction.Restricted; + } + + /// + /// Constructor for template objects having the or restriction. + /// + /// The name of the template object + /// The remaining unparsed body of the template object + /// The factory used to create this object + /// The type of restriction of the template object + /// Thrown if the restriction given is not either or . + /// + public XTemplateObject(string name, string body, XDataObjectFactory factory, TemplateRestriction restricted) : + base("template", name, body, factory) + { + if (restricted == TemplateRestriction.Restricted) + { + throw new ArgumentException("A restricted template must have actual restrictions. Without any, the restricted state may be only 'Open' or 'Closed'"); + } + + Restrictions = null; + Restricted = restricted; + } + } + + private Dictionary objectDictionary = new Dictionary(); + + /// + /// The actual implementation to extract data objects from input text complying with the .x file format. + /// + /// The text to parse + /// An enumeration of instances represented within the .x file text. + private IEnumerable ExtractDataObjectsImpl(ref string inputText) + { + IEnumerable dataObjects = + ExtractByRegex(ref inputText, dataObjectRegex, ExtractDataObject); + + IEnumerable dataReferences = + ExtractByRegex(ref inputText, bodyReferenceRegex, groups => + { + if (groups["uuid"].Success) + { + return objectDictionary[groups["uuid"].Value]; + } + + return objectDictionary[groups["name"].Value]; + }); + + return dataObjects.Concat(dataReferences); + } + + /// + /// Given a regex match for a data object, create a new instance + /// for the text matched. + /// + /// The match groups for the matched regex expression + /// A new instance based on the given regex match + private XDataObject ExtractDataObject(GroupCollection groups) + { + string type = groups["type"].Value; + string name = groups["name"].Value; + string body = groups["body"].Value; + string uuid; + + XDataObject dataObject; + + if (type == "template") + { + dataObject = CreateTemplateObject(name, ref body, out uuid); + } + else + { + uuid = ExtractUuid(ref body); + dataObject = new XDataObject(type, name, body, this); + } + + RegisterObject(uuid, dataObject); + + return dataObject; + } + + /// + /// Creates an for the given "template" data object + /// type. Parses the UUID, and also the restriction list from the body, matching + /// restriction references to known template objects when possible. + /// + /// The name of the template + /// The remaining unparsed body text for the template + /// Receives the declared UUID for the new template object + /// A new instance + private XTemplateObject CreateTemplateObject(string name, ref string body, out string uuid) + { + IEnumerable> restrictEnums = + ExtractByRegex>( + ref body, restrictionsDeclarationRegex, ExtractRestriction); + List restrictList = new List(); + bool isOpen = false; + + foreach (IEnumerable restrictEnum in restrictEnums) + { + foreach (IXTemplateObject restrictObject in restrictEnum) + { + if (restrictObject == null) + { + isOpen = true; + } + else if (!isOpen) + { + restrictList.Add(restrictObject); + } + else + { + throw new InvalidDataException( + string.Format(CultureInfo.InvariantCulture, + "Template \"{0}\" mixes open restriction with non-open.", + name)); + } + } + } + + uuid = ExtractUuid(ref body); + + return restrictList.Count > 0 ? + new XTemplateObject(name, body, this, restrictList) : + new XTemplateObject(name, body, this, + isOpen ? TemplateRestriction.Open : TemplateRestriction.Closed); + } + + /// + /// For a given restriction declaration, extracts the given templates + /// referenced within the declaration, or null if the declaration is of + /// an open restriction. + /// + /// The match groups for the matched regex expression + /// The enumeration of represented within the single restriction declaration. + /// The .x file format should not include multiple restriction declarations for + /// a given template object. However, it is theoretically legal to have multiple declarations + /// as long as they don't conflict (i.e. they either all are for an open restriction, or they + /// all list templates for a restricted restriction). This parser will attempt to resolve + /// such theoretically legal multiple declarations if present. + private IEnumerable ExtractRestriction(GroupCollection groups) + { + if (groups["open"].Success) + { + yield return null; + } + else + { + foreach (Capture reference in groups["ref"].Captures) + { + Match restrictMatch = restrictionDeclarationRegex.Match(reference.Value); + XDataObject dataObject; + + if (!restrictMatch.Groups["uuid"].Success || + (dataObject = RetrieveObject(restrictMatch.Groups["uuid"].Value)) == null) + { + dataObject = RetrieveObject(restrictMatch.Groups["name"].Value); + } + + if (dataObject != null) + { + yield return (XTemplateObject)dataObject; + } + } + } + } + + /// + /// Registers a given object in the factory's object cache + /// + /// The object's UUID, if present, null otherwise. + /// The data object itself. + /// The object's name will be used as the object key if no UUID is present. + /// Note: the object dictionary will only ever contain the object + /// most recently seen with a given name and/or UUID. Ideally, + /// a .x file will not use the same name for two different objects, + /// and the specification is not clear on whether that's legal and + /// if so, how to resolve duplicates (especially when it's possible + /// to infer the correct object based on the expected type of object). + /// In this implementation, however, no attempt is made to resolve + /// duplicates intelligently; this may lead to the failure to populate + /// some particular piece of the object tree, when a most recent + /// object of a given name or UUID is not of the expected type. + private void RegisterObject(string uuid, XDataObject dataObject) + { + if (uuid != null) + { +#if DEBUG + if (objectDictionary.ContainsKey(uuid)) + { + Debug.WriteLine(string.Format("Key {0} already present", uuid)); + } +#endif + objectDictionary[uuid] = dataObject; + } + + if (!string.IsNullOrEmpty(dataObject.Name)) + { +#if DEBUG + if (objectDictionary.ContainsKey(dataObject.Name)) + { + Debug.WriteLine(string.Format("Key {0} already present", dataObject.Name)); + } +#endif + objectDictionary[dataObject.Name] = dataObject; + } + } + + /// + /// Retrieves an with the given key. + /// + /// The key of the object being requested. + /// The with the given key in the factory's cache, null if the object is not present. + private XDataObject RetrieveObject(string key) + { + if (objectDictionary.ContainsKey(key)) + { + return objectDictionary[key]; + } + + return null; + } + + /// + /// Extracts a UUID declaration from a data object body if present. + /// + /// The current unparsed .x file body of the data object + /// The UUID declaration if found, null otherwise. + /// For template objects, be sure to parse the template restrictions + /// before trying to extract the UUID, so that any UUID references found in the + /// template restrictions don't get picked up by this method. + private string ExtractUuid(ref string body) + { + string uuid; + try + { + uuid = ExtractByRegex(ref body, uuidDeclarationRegex, + uuidGroups => uuidGroups["uuid"].Value).SingleOrDefault(); + } + catch (InvalidOperationException exc) + { + throw new System.IO.InvalidDataException("Each data object may declare only one UUID", exc); + } + return uuid; + } + + /// + /// Processes the given text using the given regex. For every match, the text + /// corresponding to that match is removed from the input text, and the + /// delegate is invoked to obtain whatever object instance corresponds to the + /// matched text. + /// + /// The type of object that will be returned for any matched text + /// The text to parse. On return, this will reference to a new string containing only the text that was not parsed into new objects + /// The regex expression to use to match text + /// The delegate invoked for any matching text, and which returns a new object instance corresponding to the matched text + /// An enumeration of the objects created by parsing the text + private static IEnumerable ExtractByRegex(ref string inputText, + Regex regex, Func processGroup) + { + StringBuilder bodyBuilder = null; + List dataObjects = new List(); + Match matchObject = regex.Match(inputText); + int indexCopy = 0; + + while (matchObject.Success) + { + // Deferring creation of the StringBuilder has a couple + // of beneficial effects: the buffer can be pre-sized to + // a likely reasonable size; more importantly, the code can + // avoid making a copy of the original input if no sub-objects + // were found. + if (bodyBuilder == null) + { + bodyBuilder = new StringBuilder(inputText.Length - matchObject.Length); + } + + bodyBuilder.Append(inputText.Substring(indexCopy, matchObject.Index - indexCopy)); + indexCopy = matchObject.Index + matchObject.Length; + + dataObjects.Add(processGroup(matchObject.Groups)); + + matchObject = matchObject.NextMatch(); + } + + if (bodyBuilder != null) + { + bodyBuilder.Append(inputText.Substring(indexCopy)); + + inputText = bodyBuilder.ToString(); + } + + return dataObjects; + } + } + } +} diff --git a/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/XMeshLoader.cs b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/XMeshLoader.cs new file mode 100644 index 00000000..62ef9445 --- /dev/null +++ b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/XMeshLoader.cs @@ -0,0 +1,772 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text.RegularExpressions; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.Direct3DX10; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; + + +namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities +{ + /// + /// The format of each XMesh vertex + /// + [StructLayout(LayoutKind.Sequential)] + public struct XMeshVertex + { + /// + /// The vertex location + /// + [MarshalAs(UnmanagedType.Struct)] + public Vector4F Vertex; + + /// + /// The vertex normal + /// + [MarshalAs(UnmanagedType.Struct)] + public Vector4F Normal; + + /// + /// The vertex color + /// + [MarshalAs(UnmanagedType.Struct)] + public Vector4F Color; + + /// + /// The texture coordinates (U,V) + /// + [MarshalAs(UnmanagedType.Struct)] + public Vector2F Texture; + }; + + /// + /// A part is a piece of a scene + /// + internal struct Part + { + /// + /// The name of the part + /// + public string name; + + /// + /// A description of the part data format + /// + public InputElementDescription[] dataDescription; + + /// + /// The vertex buffer for the part + /// + public D3DBuffer vertexBuffer; + + /// + /// The number of vertices in the vertex buffer + /// + public int vertexCount; + + /// + /// The part texture/material + /// + public Material material; + + /// + /// The parts that are sub-parts of this part + /// + public List parts; + + /// + /// The transformation to be applied to this part relative to the parent + /// + public Matrix4x4F partTransform; + } + + internal class Material + { + /// + /// The difuse color of the material + /// + public Vector4F materialColor; + + /// + /// The exponent of the specular color + /// + public float specularPower; + + /// + /// The specualr color + /// + public Vector3F specularColor; + + /// + /// The emissive color + /// + public Vector3F emissiveColor; + + /// + /// The part texture + /// + public ShaderResourceView textureResource; + } + + + /// + /// Specifies how a particular mesh should be shaded + /// + internal struct MaterialSpecification + { + /// + /// The difuse color of the material + /// + public Vector4F materialColor; + + /// + /// The exponent of the specular color + /// + public float specularPower; + + /// + /// The specualr color + /// + public Vector3F specularColor; + + /// + /// The emissive color + /// + public Vector3F emissiveColor; + + /// + /// The name of the texture file + /// + public string textureFileName; + } + + /// + /// Loads a text formated .X file + /// + internal partial class XMeshTextLoader + { + #region Input element descriptions + + static InputElementDescription[] description = new InputElementDescription[] + { + new InputElementDescription() + { + SemanticName = "POSITION", + SemanticIndex = 0, + Format = Format.R32G32B32A32Float, + InputSlot = 0, + AlignedByteOffset = 0, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0, + }, + new InputElementDescription() + { + SemanticName = "NORMAL", + SemanticIndex = 0, + Format = Format.R32G32B32A32Float, + InputSlot = 0, + AlignedByteOffset = 16, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0, + }, + new InputElementDescription() + { + SemanticName = "COLOR", + SemanticIndex = 0, + Format = Format.R32G32B32A32Float, + InputSlot = 0, + AlignedByteOffset = 32, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0 + }, + new InputElementDescription() + { + SemanticName = "TEXCOORD", + SemanticIndex = 0, + Format = Format.R32G32Float, + InputSlot = 0, + AlignedByteOffset = 48, + InputSlotClass = InputClassification.PerVertexData, + InstanceDataStepRate = 0, + } + + }; + + #endregion // Input element descriptions + + private D3DDevice device; + private string meshDirectory = ""; + + /// + /// Constructor that associates a device with the resulting mesh + /// + /// + public XMeshTextLoader(D3DDevice device) + { + this.device = device; + } + + /// + /// Loads the mesh from the file + /// + /// + /// + public IEnumerable XMeshFromFile(string path) + { + string meshPath = null; + + if(File.Exists(path)) + { + meshPath = path; + } + else + { + string sdkMediaPath = GetDXSDKMediaPath() + path; + if (File.Exists(sdkMediaPath)) + meshPath = sdkMediaPath; + } + + if(meshPath == null) + throw new System.IO.FileNotFoundException("Could not find mesh file."); + else + meshDirectory = Path.GetDirectoryName(meshPath); + + string data = null; + using (StreamReader xFile = File.OpenText(meshPath)) + { + string header = xFile.ReadLine(); + ValidateHeader(header); + data = xFile.ReadToEnd(); + } + + return ExtractRootParts(data); + } + + /// + /// Returns the path to the DX SDK dir + /// + /// + private string GetDXSDKMediaPath() + { + return Environment.GetEnvironmentVariable("DXSDK_DIR"); + } + + /// + /// Validates the header of the .X file. Enforces the text-only requirement of this code. + /// + /// + private void ValidateHeader(string fileHeader) + { + Regex headerParse = new Regex(@"xof (?\d\d)(?\d\d)(?\w\w\w[\w\s])(?\d\d\d\d)"); + Match m = headerParse.Match(fileHeader); + + if (!m.Success) + { + throw new System.IO.InvalidDataException("Invalid .X file."); + } + + if (m.Groups.Count != 5) + { + // None of the capture groups are optional, so a successful match + // should always have 5 capture groups + throw new System.IO.InvalidDataException("Invalid .X file."); + } + + if (m.Groups["vermajor"].ToString() != "03") // version 3.x supported + throw new System.IO.InvalidDataException("Unknown .X file version."); + + if (m.Groups["format"].ToString() != "txt ") + throw new System.IO.InvalidDataException("Only text .X files are supported."); + } + + /// + /// Parses the root scene of the .X file + /// + /// + private IEnumerable ExtractRootParts(string data) + { + return XDataObjectFactory.ExtractDataObjects(ref data) + .Where(obj => obj.IsVisualObject) + .Select(obj => PartFromDataObject(obj)) + .ToList(); + } + + private Part PartFromDataObject(IXDataObject dataObject) + { + Part part = new Part(); + + part.parts = new List(); + + part.name = dataObject.Name; + + switch (dataObject.DataObjectType) + { + case "Frame": + // Frame data objects translate to parts with only a transform, + // and no vertices, materials, etc. + part.partTransform = ExtractFrameTransformation(dataObject); + foreach (IXDataObject childObject in dataObject.Children.Where(obj => obj.IsVisualObject)) + { + part.parts.Add(PartFromDataObject(childObject)); + } + break; + case "Mesh": + // Mesh data objects inherit transform from their parent, + // but do have vertices, materials, etc. + part.partTransform = Matrix4x4F.Identity; + part.dataDescription = description; + LoadMesh(ref part, dataObject); + break; + default: + throw new ArgumentException( + string.Format(CultureInfo.InvariantCulture, + "Object type \"{0}\" is incorrect. Only Frame or Mesh data objects can be converted to Part instances", + dataObject.DataObjectType)); + } + + return part; + } + + /// + /// Extracts the transformation associated with the current frame + /// + /// + /// + /// + private Matrix4x4F ExtractFrameTransformation(IXDataObject dataObject) + { + IXDataObject matrixObject = GetSingleChild(dataObject, "FrameTransformMatrix"); + + if (matrixObject == null) + { + return Matrix4x4F.Identity; + } + + string rawMatrixData = matrixObject.Body; + + Regex matrixData = new Regex(@"([-\d\.,\s]+);;"); + Match data = matrixData.Match(rawMatrixData); + if(!data.Success) + throw new System.IO.InvalidDataException("Error parsing frame transformation."); + + string[] values = data.Groups[1].ToString().Split(new char[] { ',' }); + if(values.Length != 16) + throw new System.IO.InvalidDataException("Error parsing frame transformation."); + float[] fvalues = new float[16]; + for(int n = 0; n < 16; n++) + { + fvalues[n] = float.Parse(values[n], CultureInfo.InvariantCulture); + } + + return new Matrix4x4F(fvalues); + } + + + Regex findArrayCount = new Regex(@"([\d]+);"); + Regex findVector4F = new Regex(@"([-\d]+\.[\d]+);([-\d]+\.[\d]+);([-\d]+\.[\d]+);([-\d]+\.[\d]+);"); + Regex findVector3F = new Regex(@"([-\d]+\.[\d]+);([-\d]+\.[\d]+);([-\d]+\.[\d]+);"); + Regex findVector2F = new Regex(@"([-\d]+\.[\d]+);([-\d]+\.[\d]+);"); + Regex findScalarF = new Regex(@"([-\d]+\.[\d]+);"); + + + /// + /// Loads the first material for a mesh + /// + /// + /// + List LoadMeshMaterialList(IXDataObject dataObject) + { + var materials = from child in dataObject.Children + where child.DataObjectType == "Material" + select LoadMeshMaterial(child); + + return new List(materials); + } + + /// + /// Loads a MeshMaterial subresource + /// + /// + /// + MaterialSpecification LoadMeshMaterial(IXDataObject dataObject) + { + MaterialSpecification m = new MaterialSpecification(); + int dataOffset = 0; + Match color = findVector4F.Match(dataObject.Body, dataOffset); + if(!color.Success) + throw new System.IO.InvalidDataException("problem reading material color"); + m.materialColor.X = float.Parse(color.Groups[1].ToString(), CultureInfo.InvariantCulture); + m.materialColor.Y = float.Parse(color.Groups[2].ToString(), CultureInfo.InvariantCulture); + m.materialColor.Z = float.Parse(color.Groups[3].ToString(), CultureInfo.InvariantCulture); + m.materialColor.W = float.Parse(color.Groups[4].ToString(), CultureInfo.InvariantCulture); + dataOffset = color.Index + color.Length; + + Match power = findScalarF.Match(dataObject.Body, dataOffset); + if(!power.Success) + throw new System.IO.InvalidDataException("problem reading material specular color exponent"); + m.specularPower = float.Parse(power.Groups[1].ToString(), CultureInfo.InvariantCulture); + dataOffset = power.Index + power.Length; + + Match specular = findVector3F.Match(dataObject.Body, dataOffset); + if(!specular.Success) + throw new System.IO.InvalidDataException("problem reading material specular color"); + m.specularColor.X = float.Parse(specular.Groups[1].ToString(), CultureInfo.InvariantCulture); + m.specularColor.Y = float.Parse(specular.Groups[2].ToString(), CultureInfo.InvariantCulture); + m.specularColor.Z = float.Parse(specular.Groups[3].ToString(), CultureInfo.InvariantCulture); + dataOffset = specular.Index + specular.Length; + + Match emissive = findVector3F.Match(dataObject.Body, dataOffset); + if(!emissive.Success) + throw new System.IO.InvalidDataException("problem reading material emissive color"); + m.emissiveColor.X = float.Parse(emissive.Groups[1].ToString(), CultureInfo.InvariantCulture); + m.emissiveColor.Y = float.Parse(emissive.Groups[2].ToString(), CultureInfo.InvariantCulture); + m.emissiveColor.Z = float.Parse(emissive.Groups[3].ToString(), CultureInfo.InvariantCulture); + dataOffset = emissive.Index + emissive.Length; + + IXDataObject filenameObject = GetSingleChild(dataObject, "TextureFilename"); + + if (filenameObject != null) + { + Regex findFilename = new Regex(@"[\s]+""([\\\w\.]+)"";"); + Match filename = findFilename.Match(filenameObject.Body); + if (!filename.Success) + throw new System.IO.InvalidDataException("problem reading texture filename"); + m.textureFileName = filename.Groups[1].ToString(); + } + + return m; + } + + internal class IndexedMeshNormals + { + public List normalVectors; + public List normalIndexMap; + } + + /// + /// Loads the indexed normal vectors for a mesh + /// + /// + /// + IndexedMeshNormals LoadMeshNormals(IXDataObject dataObject) + { + IndexedMeshNormals indexedMeshNormals = new IndexedMeshNormals(); + + Match normalCount = findArrayCount.Match(dataObject.Body); + if(!normalCount.Success) + throw new System.IO.InvalidDataException("problem reading mesh normals count"); + + indexedMeshNormals.normalVectors = new List(); + int normals = int.Parse(normalCount.Groups[1].Value, CultureInfo.InvariantCulture); + int dataOffset = normalCount.Index + normalCount.Length; + for(int normalIndex = 0; normalIndex < normals; normalIndex++) + { + Match normal = findVector3F.Match(dataObject.Body, dataOffset); + if(!normal.Success) + throw new System.IO.InvalidDataException("problem reading mesh normal vector"); + else + dataOffset = normal.Index + normal.Length; + + indexedMeshNormals.normalVectors.Add( + new Vector4F( + float.Parse(normal.Groups[1].Value, CultureInfo.InvariantCulture), + float.Parse(normal.Groups[2].Value, CultureInfo.InvariantCulture), + float.Parse(normal.Groups[3].Value, CultureInfo.InvariantCulture), + 1.0f)); + } + + Match faceNormalCount = findArrayCount.Match(dataObject.Body, dataOffset); + if(!faceNormalCount.Success) + throw new System.IO.InvalidDataException("problem reading mesh normals count"); + + indexedMeshNormals.normalIndexMap = new List(); + int faceCount = int.Parse(faceNormalCount.Groups[1].Value, CultureInfo.InvariantCulture); + dataOffset = faceNormalCount.Index + faceNormalCount.Length; + for(int faceNormalIndex = 0; faceNormalIndex < faceCount; faceNormalIndex++) + { + Match normalFace = findVertexIndex.Match(dataObject.Body, dataOffset); + if(!normalFace.Success) + throw new System.IO.InvalidDataException("problem reading mesh normal face"); + else + dataOffset = normalFace.Index + normalFace.Length; + + string[] vertexIndexes = normalFace.Groups[2].Value.Split(new char[] { ',' }); + + for(int n = 0; n <= vertexIndexes.Length - 3; n ++) + { + indexedMeshNormals.normalIndexMap.Add(int.Parse(vertexIndexes[0], CultureInfo.InvariantCulture)); + indexedMeshNormals.normalIndexMap.Add(int.Parse(vertexIndexes[1 + n], CultureInfo.InvariantCulture)); + indexedMeshNormals.normalIndexMap.Add(int.Parse(vertexIndexes[2 + n], CultureInfo.InvariantCulture)); + } + } + + return indexedMeshNormals; + } + + /// + /// Loads the per vertex color for a mesh + /// + /// + /// + Dictionary LoadMeshColors(IXDataObject dataObject) + { + Regex findVertexColor = new Regex(@"([\d]+); ([\d]+\.[\d]+);([\d]+\.[\d]+);([\d]+\.[\d]+);([\d]+\.[\d]+);;"); + + Match vertexCount = findArrayCount.Match(dataObject.Body); + if(!vertexCount.Success) + throw new System.IO.InvalidDataException("problem reading vertex colors count"); + + Dictionary colorDictionary = new Dictionary(); + int verticies = int.Parse(vertexCount.Groups[1].Value, CultureInfo.InvariantCulture); + int dataOffset = vertexCount.Index + vertexCount.Length; + for(int vertexIndex = 0; vertexIndex < verticies; vertexIndex++) + { + Match vertexColor = findVertexColor.Match(dataObject.Body, dataOffset); + if(!vertexColor.Success) + throw new System.IO.InvalidDataException("problem reading vertex colors"); + else + dataOffset = vertexColor.Index + vertexColor.Length; + + colorDictionary[int.Parse(vertexColor.Groups[1].Value, CultureInfo.InvariantCulture)] = + new Vector4F( + float.Parse(vertexColor.Groups[2].Value, CultureInfo.InvariantCulture), + float.Parse(vertexColor.Groups[3].Value, CultureInfo.InvariantCulture), + float.Parse(vertexColor.Groups[4].Value, CultureInfo.InvariantCulture), + float.Parse(vertexColor.Groups[5].Value, CultureInfo.InvariantCulture)); + } + + return colorDictionary; + } + + /// + /// Loads the texture coordinates(U,V) for a mesh + /// + /// + /// + List LoadMeshTextureCoordinates(IXDataObject dataObject) + { + Match coordinateCount = findArrayCount.Match(dataObject.Body); + if(!coordinateCount.Success) + throw new System.IO.InvalidDataException("problem reading mesh texture coordinates count"); + + List textureCoordinates = new List(); + int coordinates = int.Parse(coordinateCount.Groups[1].Value, CultureInfo.InvariantCulture); + int dataOffset = coordinateCount.Index + coordinateCount.Length; + for(int coordinateIndex = 0; coordinateIndex < coordinates; coordinateIndex++) + { + Match coordinate = findVector2F.Match(dataObject.Body, dataOffset); + if(!coordinate.Success) + throw new System.IO.InvalidDataException("problem reading texture coordinate count"); + else + dataOffset = coordinate.Index + coordinate.Length; + + textureCoordinates.Add( + new Vector2F( + float.Parse(coordinate.Groups[1].Value, CultureInfo.InvariantCulture), + float.Parse(coordinate.Groups[2].Value, CultureInfo.InvariantCulture))); + } + + return textureCoordinates; + } + + Regex findVertexIndex = new Regex(@"([\d]+);[\s]*([\d,]+)?;"); + + /// + /// Loads a mesh and creates the vertex/index buffers for the part + /// + /// + /// + void LoadMesh(ref Part part, IXDataObject dataObject) + { + // load vertex data + int dataOffset = 0; + Match vertexCount = findArrayCount.Match(dataObject.Body); + if(!vertexCount.Success) + throw new System.IO.InvalidDataException("problem reading vertex count"); + + List vertexList = new List(); + int verticies = int.Parse(vertexCount.Groups[1].Value, CultureInfo.InvariantCulture); + dataOffset = vertexCount.Index + vertexCount.Length; + for(int vertexIndex = 0; vertexIndex < verticies; vertexIndex++) + { + Match vertex = findVector3F.Match(dataObject.Body, dataOffset); + if(!vertex.Success) + throw new System.IO.InvalidDataException("problem reading vertex"); + else + dataOffset = vertex.Index + vertex.Length; + + vertexList.Add( + new Vector4F( + float.Parse(vertex.Groups[1].Value, CultureInfo.InvariantCulture), + float.Parse(vertex.Groups[2].Value, CultureInfo.InvariantCulture), + float.Parse(vertex.Groups[3].Value, CultureInfo.InvariantCulture), + 1.0f)); + } + + // load triangle index data + Match triangleIndexCount = findArrayCount.Match(dataObject.Body, dataOffset); + dataOffset = triangleIndexCount.Index + triangleIndexCount.Length; + if(!triangleIndexCount.Success) + throw new System.IO.InvalidDataException("problem reading index count"); + + List triangleIndiciesList = new List(); + int triangleIndexListCount = int.Parse(triangleIndexCount.Groups[1].Value, CultureInfo.InvariantCulture); + dataOffset = triangleIndexCount.Index + triangleIndexCount.Length; + for(int triangleIndicyIndex = 0; triangleIndicyIndex < triangleIndexListCount; triangleIndicyIndex++) + { + Match indexEntry = findVertexIndex.Match(dataObject.Body, dataOffset); + if(!indexEntry.Success) + throw new System.IO.InvalidDataException("problem reading vertex index entry"); + else + dataOffset = indexEntry.Index + indexEntry.Length; + + int indexEntryCount = int.Parse(indexEntry.Groups[1].Value, CultureInfo.InvariantCulture); + string[] vertexIndexes = indexEntry.Groups[2].Value.Split(new char[] { ',' }); + if(indexEntryCount != vertexIndexes.Length) + throw new System.IO.InvalidDataException("vertex index count does not equal count of indicies found"); + + for(int entryIndex = 0; entryIndex <= indexEntryCount - 3; entryIndex++) + { + triangleIndiciesList.Add(int.Parse(vertexIndexes[0], CultureInfo.InvariantCulture)); + triangleIndiciesList.Add(int.Parse(vertexIndexes[1 + entryIndex].ToString(), CultureInfo.InvariantCulture)); + triangleIndiciesList.Add(int.Parse(vertexIndexes[2 + entryIndex].ToString(), CultureInfo.InvariantCulture)); + } + } + + // load mesh colors + IXDataObject vertexColorData = GetSingleChild(dataObject, "MeshVertexColors"); + Dictionary colorDictionary = null; + if (vertexColorData != null) + colorDictionary = LoadMeshColors(vertexColorData); + + // load mesh normals + IXDataObject meshNormalData = GetSingleChild(dataObject, "MeshNormals"); + IndexedMeshNormals meshNormals = null; + if(meshNormalData != null) + { + meshNormals = LoadMeshNormals(meshNormalData); + } + + // load mesh texture coordinates + IXDataObject meshTextureCoordsData = GetSingleChild(dataObject, "MeshTextureCoords"); + List meshTextureCoords = null; + if(meshTextureCoordsData != null) + { + meshTextureCoords = LoadMeshTextureCoordinates(meshTextureCoordsData); + } + + // load mesh material + IXDataObject meshMaterialsData = GetSingleChild(dataObject, "MeshMaterialList"); + List meshMaterials = null; + if(meshMaterialsData != null) + { + meshMaterials = LoadMeshMaterialList(meshMaterialsData); + } + + // copy vertex data to HGLOBAL + int byteLength = Marshal.SizeOf(typeof(XMeshVertex)) * triangleIndiciesList.Count; + IntPtr nativeVertex = Marshal.AllocHGlobal(byteLength); + byte[] byteBuffer = new byte[byteLength]; + XMeshVertex[] varray = new XMeshVertex[triangleIndiciesList.Count]; + for(int n = 0; n < triangleIndiciesList.Count; n++) + { + XMeshVertex vertex = new XMeshVertex() + { + Vertex = vertexList[triangleIndiciesList[n]], + Normal = (meshNormals == null) ? new Vector4F(0, 0, 0, 1.0f) : meshNormals.normalVectors[meshNormals.normalIndexMap[n]], + Color = ((colorDictionary == null) ? new Vector4F(0, 0, 0, 0) : colorDictionary[triangleIndiciesList[n]]), + Texture = ((meshTextureCoords == null) ? new Vector2F(0, 0) : meshTextureCoords[triangleIndiciesList[n]]) + }; + byte[] vertexData = RawSerialize(vertex); + Buffer.BlockCopy(vertexData, 0, byteBuffer, vertexData.Length * n, vertexData.Length); + } + Marshal.Copy(byteBuffer, 0, nativeVertex, byteLength); + + // build vertex buffer + BufferDescription bdv = new BufferDescription() + { + Usage = Usage.Default, + ByteWidth = (uint)(Marshal.SizeOf(typeof(XMeshVertex)) * triangleIndiciesList.Count), + BindingOptions = BindingOptions.VertexBuffer, + CpuAccessOptions = CpuAccessOptions.None, + MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + }; + SubresourceData vertexInit = new SubresourceData() + { + SystemMemory = nativeVertex + }; + + part.vertexBuffer = device.CreateBuffer(bdv, vertexInit); + Debug.Assert(part.vertexBuffer != null); + + + part.vertexCount = triangleIndiciesList.Count; + + if(meshMaterials != null) + { + // only a single material is currently supported + MaterialSpecification m = meshMaterials[0]; + + part.material = new Material() + { + emissiveColor = m.emissiveColor, + specularColor = m.specularColor, + materialColor = m.materialColor, + specularPower = m.specularPower + }; + + string texturePath = ""; + if(File.Exists(m.textureFileName)) + texturePath = m.textureFileName; + if(File.Exists(meshDirectory + "\\" + m.textureFileName)) + texturePath = meshDirectory + "\\" + m.textureFileName; + if(File.Exists(meshDirectory + "\\..\\" + m.textureFileName)) + texturePath = meshDirectory + "\\..\\" + m.textureFileName; + + if(texturePath.Length == 0) + { + part.material.textureResource = null; + } + else + { + part.material.textureResource = + D3D10XHelpers.CreateShaderResourceViewFromFile( + device, + texturePath); + } + } + Marshal.FreeHGlobal(nativeVertex); + } + + /// + /// Copies an arbitrary structure into a byte array + /// + /// + /// + public byte[] RawSerialize(object anything) + { + int rawsize = Marshal.SizeOf(anything); + IntPtr buffer = Marshal.AllocHGlobal(rawsize); + + try + { + Marshal.StructureToPtr(anything, buffer, false); + byte[] rawdatas = new byte[rawsize]; + Marshal.Copy(buffer, rawdatas, 0, rawsize); + return rawdatas; + } + finally + { + Marshal.FreeHGlobal(buffer); + } + } + } +} diff --git a/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/XMeshManager.cs b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/XMeshManager.cs new file mode 100644 index 00000000..83764164 --- /dev/null +++ b/source/Samples/DirectX/CS/UtilitiesLibrary/MeshLoader/XMeshManager.cs @@ -0,0 +1,156 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using Microsoft.WindowsAPICodePack.DirectX; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D; +using Microsoft.WindowsAPICodePack.DirectX.Direct3D10; +using Microsoft.WindowsAPICodePack.DirectX.Graphics; +using System.Windows.Media.Media3D; +using System.Runtime.InteropServices; +using System.Reflection; +using System.IO; + +namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities +{ + + /// + /// Manages the XMesh file loading + /// + public class XMeshManager : IDisposable + { + internal D3DDevice device; + + internal Effect effect; + internal EffectTechnique techniqueRenderTexture; + internal EffectTechnique techniqueRenderVertexColor; + internal EffectTechnique techniqueRenderMaterialColor; + + internal EffectScalarVariable brightnessVariable; + internal EffectVectorVariable materialColorVariable; + internal EffectMatrixVariable worldVariable; + internal EffectMatrixVariable viewVariable; + internal EffectMatrixVariable projectionVariable; + internal EffectShaderResourceVariable diffuseVariable; + + /// + /// Creates the mesh manager + /// + /// + public XMeshManager(D3DDevice device) + { + this.device = device; + + // Create the effect + //XMesh.fxo was compiled from XMesh.fx using: + // "$(DXSDK_DIR)utilities\bin\x86\fxc" "$(ProjectDir)Mesh\MeshLoaders\XMesh.fx" /T fx_4_0 /Fo"$(ProjectDir)Mesh\MeshLoaders\XMesh.fxo" + using (Stream effectStream = Assembly.GetExecutingAssembly().GetManifestResourceStream( + "Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.XMesh.fxo")) + { + effect = device.CreateEffectFromCompiledBinary( new BinaryReader( effectStream ) ); + } + + // Obtain the techniques + techniqueRenderTexture = effect.GetTechniqueByName("RenderTextured"); + techniqueRenderVertexColor = effect.GetTechniqueByName("RenderVertexColor"); + techniqueRenderMaterialColor = effect.GetTechniqueByName("RenderMaterialColor"); + + // Obtain the variables + brightnessVariable = effect.GetVariableByName("Brightness").AsScalar; + materialColorVariable = effect.GetVariableByName("MaterialColor").AsVector; + worldVariable = effect.GetVariableByName("World").AsMatrix; + viewVariable = effect.GetVariableByName("View").AsMatrix; + projectionVariable = effect.GetVariableByName("Projection").AsMatrix; + diffuseVariable = effect.GetVariableByName("tex2D").AsShaderResource; + } + + public void SetViewAndProjection(Matrix4x4F view, Matrix4x4F projection) + { + viewVariable.Matrix = view; + projectionVariable.Matrix = projection; + } + + /// + /// Returns an XMesh object that contains the data from a specified .X file. + /// + /// + /// + public XMesh Open(string path) + { + XMesh mesh = new XMesh(); + mesh.Load(path, this); + return mesh; + } + + /// + /// Reutrns a specialization of an XMesh object that contains the data from a specified .X file + /// + /// + /// + /// + public T Open(string path) where T : XMesh, new() + { + T mesh = new T(); + mesh.Load(path, this); + return mesh; + } + + #region IDisposable Members + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + private bool disposed; + /// + /// Cleans up the memory allocated by the manager. + /// + protected virtual void Dispose(bool disposing) + { + if (!disposed) + { + disposed = true; + if (effect != null) + effect.Dispose(); + effect = null; + + if (techniqueRenderTexture != null) + techniqueRenderTexture.Dispose(); + techniqueRenderTexture = null; + + if (techniqueRenderVertexColor != null) + techniqueRenderVertexColor.Dispose(); + techniqueRenderVertexColor = null; + + if (techniqueRenderMaterialColor != null) + techniqueRenderMaterialColor.Dispose(); + techniqueRenderMaterialColor = null; + + if (brightnessVariable != null) + brightnessVariable.Dispose(); + brightnessVariable = null; + + if (materialColorVariable != null) + materialColorVariable.Dispose(); + materialColorVariable = null; + + if (worldVariable != null) + worldVariable.Dispose(); + worldVariable = null; + + if (viewVariable != null) + viewVariable.Dispose(); + viewVariable = null; + + if (projectionVariable != null) + projectionVariable.Dispose(); + projectionVariable = null; + + if (diffuseVariable != null) + diffuseVariable.Dispose(); + diffuseVariable = null; + } + } + #endregion + } +} diff --git a/source/Samples/DirectX/UtilitiesLibrary/Controls/AssemblyInfo.cpp b/source/Samples/DirectX/UtilitiesLibrary/Controls/AssemblyInfo.cpp new file mode 100644 index 00000000..0bff6ad7 --- /dev/null +++ b/source/Samples/DirectX/UtilitiesLibrary/Controls/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("DirectX Controls")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("Microsoft Corporation")]; +[assembly:AssemblyProductAttribute("Microsoft Windows API Code Pack for .NET Framework")]; +[assembly:AssemblyCopyrightAttribute("Copyright Microsoft Corporation")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.0.0")]; +[assembly: AssemblyFileVersionAttribute("1.0.0.0")]; +[assembly:ComVisible(false)]; +[assembly:CLSCompliantAttribute(true)]; +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/source/Samples/DirectX/UtilitiesLibrary/Controls/DirectControl.cpp b/source/Samples/DirectX/UtilitiesLibrary/Controls/DirectControl.cpp new file mode 100644 index 00000000..caca978d --- /dev/null +++ b/source/Samples/DirectX/UtilitiesLibrary/Controls/DirectControl.cpp @@ -0,0 +1,64 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +#include "StdAfx.h" +#include "DirectControl.h" + +using namespace Microsoft::WindowsAPICodePack::DirectX::Controls; + +#define WM_CUSTOM_DRAW WM_USER+100 + +DirectControl::DirectControl() +{ + SetStyle(ControlStyles::UserPaint, true); + SetStyle(ControlStyles::AllPaintingInWmPaint, true); + SetStyle(ControlStyles::ContainerControl, true); + UpdateStyles(); +} + +void DirectControl::WndProc (Message %m) +{ + if (m.Msg == WM_DESTROY ) + { + Render = nullptr; + } + else if (m.Msg == WM_PAINT || m.Msg == WM_DISPLAYCHANGE) + { + if (Render!= nullptr) + Render(); + + ::PostMessage((HWND)Handle.ToPointer(), WM_CUSTOM_DRAW, 0 , 0); + } + else if (m.Msg == WM_CUSTOM_DRAW) + { + if (!DesignMode) + { + Application::DoEvents(); + Invalidate(); + } + } + + UserControl::WndProc(m); +} + +void DirectControl::OnPaintBackground(PaintEventArgs ^e) +{ + if (DesignMode) + { + e->Graphics->FillRectangle( + SystemBrushes::Control, + System::Drawing::Rectangle(0,0,Width, Height)); + } +} + +void DirectControl::OnPaint(PaintEventArgs ^e) +{ + if (DesignMode) + { + e->Graphics->DrawString( + "Direct Control", + SystemFonts::DefaultFont, + SystemBrushes::ControlText, + (float)Width / 2, + (float)Height / 2); + } +} \ No newline at end of file diff --git a/source/Samples/DirectX/UtilitiesLibrary/Controls/DirectControl.h b/source/Samples/DirectX/UtilitiesLibrary/Controls/DirectControl.h new file mode 100644 index 00000000..d406ab0c --- /dev/null +++ b/source/Samples/DirectX/UtilitiesLibrary/Controls/DirectControl.h @@ -0,0 +1,32 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +#pragma once + +using namespace System; +using namespace System::Windows::Forms; +using namespace System::Drawing; +using namespace System::Threading; + +namespace Microsoft { namespace WindowsAPICodePack { namespace DirectX { namespace Controls { + +public delegate void RenderHandler(); + +public ref class DirectControl : public System::Windows::Forms::UserControl +{ +public: + /// + /// Default Constructor + /// + DirectControl(); + +protected: + virtual void WndProc (Message %m) override; + + virtual void OnPaintBackground(PaintEventArgs ^e) override; + + virtual void OnPaint(PaintEventArgs ^e) override; + +public: + RenderHandler^ Render; +}; +} } } } diff --git a/source/Samples/DirectX/UtilitiesLibrary/Controls/DirectHost.cpp b/source/Samples/DirectX/UtilitiesLibrary/Controls/DirectHost.cpp new file mode 100644 index 00000000..7052e8e3 --- /dev/null +++ b/source/Samples/DirectX/UtilitiesLibrary/Controls/DirectHost.cpp @@ -0,0 +1,102 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +#include "StdAfx.h" +#include "DirectHost.h" + +using namespace System; +using namespace System::Windows; +using namespace System::Windows::Interop; +using namespace System::Threading; +using namespace System::Runtime::InteropServices; +using namespace Microsoft::WindowsAPICodePack::DirectX::Controls; + +bool DirectHost::RegisterWindowClass() +{ + WNDCLASS wndClass; + + if(GetClassInfo(m_hInstance, m_sClassName, &wndClass)) + { + return true; + } + + wndClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; + wndClass.lpfnWndProc = DefWindowProc; + wndClass.cbClsExtra = 0; + wndClass.cbWndExtra = 0; + wndClass.hInstance = m_hInstance; + wndClass.hIcon = LoadIcon(NULL, IDI_WINLOGO); + wndClass.hCursor = LoadCursor(0, IDC_ARROW); + wndClass.hbrBackground = 0; + wndClass.lpszMenuName = NULL; + wndClass.lpszClassName = m_sClassName; + + return (RegisterClass(&wndClass) != 0); +} + +HandleRef DirectHost::BuildWindowCore(HandleRef hwndParent) +{ + m_hInstance = (HINSTANCE) GetModuleHandle(NULL); + m_sWindowName = L"DirectHost"; + m_sClassName = L"DirectHost"; + + if(RegisterWindowClass()) + { + HWND parentHwnd = (HWND)hwndParent.Handle.ToPointer(); + m_hWnd = CreateWindowEx(0, + m_sClassName, + m_sWindowName, + WS_CHILD | WS_VISIBLE, + 0, + 0, + 10, // These are arbitary values, + 10, // real sizes will be defined by the parent + parentHwnd, + NULL, + m_hInstance, + NULL ); + + if(!m_hWnd) + { + return HandleRef(nullptr, System::IntPtr::Zero); + } + + return HandleRef(this, IntPtr(m_hWnd)); + } + + return HandleRef(nullptr, System::IntPtr::Zero); +} + +void DirectHost::DestroyWindowCore(HandleRef hwnd) +{ + if(NULL != m_hWnd && m_hWnd == (HWND)hwnd.Handle.ToPointer()) + { + ::DestroyWindow(m_hWnd); + m_hWnd = NULL; + } + + UnregisterClass(m_sClassName, m_hInstance); +} + +IntPtr DirectHost::WndProc( IntPtr hwnd, int message, IntPtr wParam, IntPtr lParam, bool% handled) +{ + switch (message) + { + case WM_PAINT: + case WM_DISPLAYCHANGE: + { + if (Render != nullptr) + Render(); + } + handled = true; + return IntPtr::Zero; + + case WM_DESTROY: + { + Render = nullptr; + break; + } + } + + handled = false; + return IntPtr::Zero; +} diff --git a/source/Samples/DirectX/UtilitiesLibrary/Controls/DirectHost.h b/source/Samples/DirectX/UtilitiesLibrary/Controls/DirectHost.h new file mode 100644 index 00000000..48005f9f --- /dev/null +++ b/source/Samples/DirectX/UtilitiesLibrary/Controls/DirectHost.h @@ -0,0 +1,42 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +#pragma once + +using namespace System; +using namespace System::Windows; +using namespace System::Windows::Media; +using namespace System::Windows::Interop; +using namespace System::Runtime::InteropServices; + +namespace Microsoft { namespace WindowsAPICodePack { namespace DirectX { namespace Controls { + +public delegate void RenderHandler(); +public ref class DirectHost : public HwndHost +{ +private: + HWND m_hWnd; + HINSTANCE m_hInstance; + LPCWSTR m_sWindowName; + LPCWSTR m_sClassName; + bool RegisterWindowClass(); + +public: + DirectHost() : + m_hWnd(NULL), + m_hInstance(NULL), + m_sWindowName(NULL), + m_sClassName(NULL) + { + } + +protected: + virtual HandleRef BuildWindowCore(HandleRef hwndParent) override; + + virtual void DestroyWindowCore(HandleRef hwnd) override; + + virtual IntPtr WndProc( IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, bool% handled) override; + +public: + RenderHandler^ Render; +}; +}}}} \ No newline at end of file diff --git a/source/Samples/DirectX/UtilitiesLibrary/Controls/DirectXControls.vcproj b/source/Samples/DirectX/UtilitiesLibrary/Controls/DirectXControls.vcproj new file mode 100644 index 00000000..85db7466 --- /dev/null +++ b/source/Samples/DirectX/UtilitiesLibrary/Controls/DirectXControls.vcproj @@ -0,0 +1,557 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/DirectX/UtilitiesLibrary/Controls/RenderControl.cpp b/source/Samples/DirectX/UtilitiesLibrary/Controls/RenderControl.cpp new file mode 100644 index 00000000..9ef15009 --- /dev/null +++ b/source/Samples/DirectX/UtilitiesLibrary/Controls/RenderControl.cpp @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +#include "StdAfx.h" +#include "RenderControl.h" + +using namespace Microsoft::WindowsAPICodePack::DirectX::Controls; + +RenderControl::RenderControl() +{ + SetStyle(ControlStyles::UserPaint, true); + SetStyle(ControlStyles::AllPaintingInWmPaint, true); + UpdateStyles(); +} + +void RenderControl::OnPaintBackground(PaintEventArgs ^e) +{ + if (DesignMode) + { + e->Graphics->FillRectangle( + SystemBrushes::Control, + System::Drawing::Rectangle(0,0,Width, Height)); + } +} + +void RenderControl::OnPaint(PaintEventArgs ^e) +{ + if (DesignMode) + { + e->Graphics->DrawString( + "Render Control", + SystemFonts::DefaultFont, + SystemBrushes::ControlText, + (float)Width / 2, + (float)Height / 2); + } + else + { + if (Render != nullptr) + Render(); + } +} diff --git a/source/Samples/DirectX/UtilitiesLibrary/Controls/RenderControl.h b/source/Samples/DirectX/UtilitiesLibrary/Controls/RenderControl.h new file mode 100644 index 00000000..a671dcb3 --- /dev/null +++ b/source/Samples/DirectX/UtilitiesLibrary/Controls/RenderControl.h @@ -0,0 +1,30 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +#pragma once + +using namespace System; +using namespace System::Windows::Forms; +using namespace System::Drawing; +using namespace System::Threading; + +namespace Microsoft { namespace WindowsAPICodePack { namespace DirectX { namespace Controls { + +public delegate void RenderHandler(); + +public ref class RenderControl : public System::Windows::Forms::UserControl +{ +public: +/// +/// Default Constructor +/// +RenderControl(); + +protected: + virtual void OnPaintBackground(PaintEventArgs ^e) override; + + virtual void OnPaint(PaintEventArgs ^e) override; + +public: + RenderHandler^ Render; +}; +} } } } diff --git a/source/Samples/DirectX/UtilitiesLibrary/Controls/RenderHost.cpp b/source/Samples/DirectX/UtilitiesLibrary/Controls/RenderHost.cpp new file mode 100644 index 00000000..a47fd2e4 --- /dev/null +++ b/source/Samples/DirectX/UtilitiesLibrary/Controls/RenderHost.cpp @@ -0,0 +1,106 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +#include "StdAfx.h" +#include "RenderHost.h" + +using namespace System; +using namespace System::Windows; +using namespace System::Windows::Interop; +using namespace System::Threading; +using namespace System::Runtime::InteropServices; +using namespace Microsoft::WindowsAPICodePack::DirectX::Controls; + +bool RenderHost::RegisterWindowClass() +{ + WNDCLASS wndClass; + + if(GetClassInfo(m_hInstance, m_sClassName, &wndClass)) + { + return true; + } + + wndClass.style = CS_HREDRAW | CS_VREDRAW; + + wndClass.lpfnWndProc = DefWindowProc; + wndClass.cbClsExtra = 0; + wndClass.cbWndExtra = 0; + wndClass.hInstance = m_hInstance; + wndClass.hIcon = LoadIcon(NULL, IDI_WINLOGO); + wndClass.hCursor = LoadCursor(0, IDC_ARROW); + wndClass.hbrBackground = 0; + wndClass.lpszMenuName = NULL; // No menu + wndClass.lpszClassName = m_sClassName; + + if (!RegisterClass(&wndClass)) + { + return false; + } + + return true; +} +HandleRef RenderHost::BuildWindowCore(HandleRef hwndParent) +{ + m_hInstance = (HINSTANCE) GetModuleHandle(NULL); + m_sWindowName = L"RenderHost"; + m_sClassName = L"RenderHost"; + + if(RegisterWindowClass()) + { + HWND parentHwnd = (HWND)hwndParent.Handle.ToPointer(); + + m_hWnd = CreateWindowEx(0, + m_sClassName, + m_sWindowName, + WS_CHILD | WS_VISIBLE, + 0, + 0, + 10, // These are arbitary values, + 10, // real sizes will be defined by the parent + parentHwnd, + NULL, + m_hInstance, + NULL ); + + if(!m_hWnd) + { + return HandleRef(nullptr, System::IntPtr::Zero); + } + + return HandleRef(this, IntPtr(m_hWnd)); + } + + return HandleRef(nullptr, System::IntPtr::Zero); +} + +void RenderHost::DestroyWindowCore(HandleRef hwnd) +{ + if(NULL != m_hWnd && m_hWnd == (HWND)hwnd.Handle.ToPointer()) + { + ::DestroyWindow(m_hWnd); + m_hWnd = NULL; + } + + UnregisterClass(m_sClassName, m_hInstance); +} + +void RenderHost::OnRender(DrawingContext ^ ctx) +{ + if (Render!= nullptr) + Render(); +} + +IntPtr RenderHost::WndProc( IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, bool% handled) +{ + if (msg == WM_SIZE ) + { + InvalidateVisual(); + } + else if (msg == WM_PAINT) + { + InvalidateVisual(); + } + + + handled = false; + return IntPtr::Zero; +} diff --git a/source/Samples/DirectX/UtilitiesLibrary/Controls/RenderHost.h b/source/Samples/DirectX/UtilitiesLibrary/Controls/RenderHost.h new file mode 100644 index 00000000..e4dabb51 --- /dev/null +++ b/source/Samples/DirectX/UtilitiesLibrary/Controls/RenderHost.h @@ -0,0 +1,45 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +#pragma once + +using namespace System; +using namespace System::Windows; +using namespace System::Windows::Media; +using namespace System::Windows::Interop; +using namespace System::Runtime::InteropServices; + +namespace Microsoft { namespace WindowsAPICodePack { namespace DirectX { namespace Controls { + +public delegate void RenderHandler(); + +public ref class RenderHost : public HwndHost +{ +private: + HWND m_hWnd; + HINSTANCE m_hInstance; + LPCWSTR m_sWindowName; + LPCWSTR m_sClassName; + bool RegisterWindowClass(); + +public: + RenderHost() : + m_hWnd(NULL), + m_hInstance(NULL), + m_sWindowName(NULL), + m_sClassName(NULL) + { + } + +protected: + virtual HandleRef BuildWindowCore(HandleRef hwndParent) override; + + virtual void DestroyWindowCore(HandleRef hwnd) override; + + virtual void OnRender(DrawingContext ^ ctx) override; + + virtual IntPtr WndProc( IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, bool% handled) override; + +public: + RenderHandler^ Render; +}; +} } } } \ No newline at end of file diff --git a/source/Samples/DirectX/UtilitiesLibrary/Controls/Stdafx.cpp b/source/Samples/DirectX/UtilitiesLibrary/Controls/Stdafx.cpp new file mode 100644 index 00000000..20741691 --- /dev/null +++ b/source/Samples/DirectX/UtilitiesLibrary/Controls/Stdafx.cpp @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +// stdafx.cpp : source file that includes just the standard includes +// DirectXControls.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" diff --git a/source/Samples/DirectX/UtilitiesLibrary/Controls/Stdafx.h b/source/Samples/DirectX/UtilitiesLibrary/Controls/Stdafx.h new file mode 100644 index 00000000..b7d14222 --- /dev/null +++ b/source/Samples/DirectX/UtilitiesLibrary/Controls/Stdafx.h @@ -0,0 +1,14 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, +// but are changed infrequently + +#pragma once +//Define Unicode +#ifndef UNICODE +#define UNICODE +#endif + +#include + diff --git a/source/Samples/DirectX/UtilitiesLibrary/D3DX10Helpers/AssemblyInfo.cpp b/source/Samples/DirectX/UtilitiesLibrary/D3DX10Helpers/AssemblyInfo.cpp new file mode 100644 index 00000000..6c5fd9cd --- /dev/null +++ b/source/Samples/DirectX/UtilitiesLibrary/D3DX10Helpers/AssemblyInfo.cpp @@ -0,0 +1,40 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute("Direct3DExtenstions")]; +[assembly:AssemblyDescriptionAttribute("")]; +[assembly:AssemblyConfigurationAttribute("")]; +[assembly:AssemblyCompanyAttribute("Microsoft Corporation")]; +[assembly:AssemblyProductAttribute("Microsoft Windows API Code Pack for .NET Framework")]; +[assembly:AssemblyCopyrightAttribute("Copyright Microsoft Corporation")]; +[assembly:AssemblyTrademarkAttribute("")]; +[assembly:AssemblyCultureAttribute("")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.0.0")]; +[assembly: AssemblyFileVersionAttribute("1.0.0.0")]; +[assembly:ComVisible(false)]; +[assembly:CLSCompliantAttribute(true)]; +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; diff --git a/source/Samples/DirectX/UtilitiesLibrary/D3DX10Helpers/D3DX10Helpers.cpp b/source/Samples/DirectX/UtilitiesLibrary/D3DX10Helpers/D3DX10Helpers.cpp new file mode 100644 index 00000000..53cc7f80 --- /dev/null +++ b/source/Samples/DirectX/UtilitiesLibrary/D3DX10Helpers/D3DX10Helpers.cpp @@ -0,0 +1,94 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +#include "StdAfx.h" +#include "D3DX10Helpers.h" + +using namespace msclr::interop; + +using namespace System; +using namespace System::Runtime::InteropServices; + +using namespace Microsoft::WindowsAPICodePack::DirectX; +using namespace Microsoft::WindowsAPICodePack::DirectX::Direct3D; +using namespace Microsoft::WindowsAPICodePack::DirectX::Direct3D10; +using namespace Microsoft::WindowsAPICodePack::DirectX::Direct3DX10; + + +ShaderResourceView^ D3D10XHelpers::CreateShaderResourceViewFromFile( + D3DDevice^ pDevice, + String^ fileName) +{ + ID3D10ShaderResourceView* view = NULL; + + pin_ptr name = PtrToStringChars( fileName ); + + HRESULT hr = + D3DX10CreateShaderResourceViewFromFile( + reinterpret_cast(pDevice->NativeInterface.ToPointer()), + name, NULL, NULL, &view, NULL ); + + if (!SUCCEEDED(hr)) + { + throw DirectHelpers::GetExceptionForHresult(static_cast(hr)); + } + + return view ? DirectHelpers::CreateIUnknownWrapper(IntPtr(view)) : nullptr; +} + +// Build a lookat matrix. (left-handed) +array^ D3D10XHelpers::MatrixLookAtLH + ( array^ pEye, array^ pAt, array^ pUp ) +{ + pin_ptr eye = &pEye[0]; + pin_ptr at = &pAt[0]; + pin_ptr up = &pUp[0]; + + array^ outMatrix = gcnew array(16); + pin_ptr m = &outMatrix[0]; + D3DXMatrixLookAtLH((D3DXMATRIX*) m, (D3DXVECTOR3 *)eye, (D3DXVECTOR3 *)at, (D3DXVECTOR3 *)up); + return outMatrix; +} + +array^ D3D10XHelpers::MatrixPerspectiveFovLH + (Single fovy, Single Aspect, Single zn, Single zf ) +{ + array^ outMatrix = gcnew array(16); + pin_ptr m = &outMatrix[0]; + D3DXMatrixPerspectiveFovLH((D3DXMATRIX*) m, safe_cast(fovy), safe_cast(Aspect), safe_cast(zn), safe_cast(zf)); + return outMatrix; +} + +array^ D3D10XHelpers::MatrixRotationX(Single value) +{ + array^ outMatrix = gcnew array(16); + pin_ptr m = &outMatrix[0]; + D3DXMatrixRotationX((D3DXMATRIX*) m, safe_cast(value)); + return outMatrix; +} +array^ D3D10XHelpers::MatrixRotationY(Single value) +{ + array^ outMatrix = gcnew array(16); + pin_ptr m = &outMatrix[0]; + D3DXMatrixRotationY((D3DXMATRIX*) m, safe_cast(value)); + return outMatrix; +} +array^ D3D10XHelpers::MatrixRotationZ(Single value) +{ + array^ outMatrix = gcnew array(16); + pin_ptr m = &outMatrix[0]; + D3DXMatrixRotationZ((D3DXMATRIX*) m, safe_cast(value)); + return outMatrix; +} + +array^ D3D10XHelpers::MatrixMultiply(array^ m1, array^ m2) +{ + array^ outMatrix = gcnew array(16); + pin_ptr m = &outMatrix[0]; + + pin_ptr m1_in = &m1[0]; + pin_ptr m2_in = &m2[0]; + + D3DXMatrixMultiply((D3DXMATRIX*) m, (D3DXMATRIX*) m1_in, (D3DXMATRIX*) m2_in); + + return outMatrix; +} diff --git a/source/Samples/DirectX/UtilitiesLibrary/D3DX10Helpers/D3DX10Helpers.h b/source/Samples/DirectX/UtilitiesLibrary/D3DX10Helpers/D3DX10Helpers.h new file mode 100644 index 00000000..31b5985d --- /dev/null +++ b/source/Samples/DirectX/UtilitiesLibrary/D3DX10Helpers/D3DX10Helpers.h @@ -0,0 +1,43 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +#pragma once + +namespace Microsoft { namespace WindowsAPICodePack { namespace DirectX { namespace Direct3D10 { + ref class D3DDevice; + ref class Effect; + ref class ShaderResourceView; +}}}} + +namespace Microsoft { namespace WindowsAPICodePack { namespace DirectX { namespace Direct3DX10 { + +using namespace System; +using namespace Microsoft::WindowsAPICodePack::DirectX::Direct3D10; + +/// +/// Helper APIs for Direct3D10X +/// +public ref class D3D10XHelpers +{ +protected: + D3D10XHelpers(void) {} +public: + + static ShaderResourceView^ CreateShaderResourceViewFromFile( + D3DDevice^ pDevice, + String^ fileName); + + // Build a lookat matrix. (left-handed) + static array^ MatrixLookAtLH + ( array^ pEye, array^ pAt, array^ pUp ); + + static array^ MatrixPerspectiveFovLH + (Single fovy, Single Aspect, Single zn, Single zf ); + + static array^ MatrixRotationX(Single value); + static array^ MatrixRotationY(Single value); + static array^ MatrixRotationZ(Single value); + + static array^ MatrixMultiply(array^ m1, array^ m2); + +}; +}}}} \ No newline at end of file diff --git a/source/Samples/DirectX/UtilitiesLibrary/D3DX10Helpers/Direct3DX10.vcproj b/source/Samples/DirectX/UtilitiesLibrary/D3DX10Helpers/Direct3DX10.vcproj new file mode 100644 index 00000000..bff9fe14 --- /dev/null +++ b/source/Samples/DirectX/UtilitiesLibrary/D3DX10Helpers/Direct3DX10.vcproj @@ -0,0 +1,418 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/DirectX/UtilitiesLibrary/D3DX10Helpers/Stdafx.cpp b/source/Samples/DirectX/UtilitiesLibrary/D3DX10Helpers/Stdafx.cpp new file mode 100644 index 00000000..263cbaa1 --- /dev/null +++ b/source/Samples/DirectX/UtilitiesLibrary/D3DX10Helpers/Stdafx.cpp @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +// stdafx.cpp : source file that includes just the standard includes +// DirectXExtenstions.pch will be the pre-compiled header +// stdafx.obj will contain the pre-compiled type information + +#include "stdafx.h" diff --git a/source/Samples/DirectX/UtilitiesLibrary/D3DX10Helpers/Stdafx.h b/source/Samples/DirectX/UtilitiesLibrary/D3DX10Helpers/Stdafx.h new file mode 100644 index 00000000..5e94bdef --- /dev/null +++ b/source/Samples/DirectX/UtilitiesLibrary/D3DX10Helpers/Stdafx.h @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +// stdafx.h : include file for standard system include files, +// or project specific include files that are used frequently, +// but are changed infrequently + +#pragma once + +//Define Unicode +#ifndef UNICODE +#define UNICODE +#endif + +// Common platform Headers +#include +#include +#include + +// Common D3D Headers +#include "D3DX10.h" diff --git a/source/Samples/DirectX/VB/AllDirectXVBSamples/AllDirectXVBSamples.sln b/source/Samples/DirectX/VB/AllDirectXVBSamples/AllDirectXVBSamples.sln new file mode 100644 index 00000000..a68ca5f8 --- /dev/null +++ b/source/Samples/DirectX/VB/AllDirectXVBSamples/AllDirectXVBSamples.sln @@ -0,0 +1,550 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{9BF30A1A-64AB-42B1-ABFB-445520E4737A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Code Pack", "Code Pack", "{4D6086E7-DF90-4F85-812A-08C9392DD354}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX", "..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{663FD3B0-9B4A-41CC-B9EE-1E00DA95D484}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX.Direct3DX10", "..\..\UtilitiesLibrary\D3DX10Helpers\Direct3DX10.vcproj", "{453FF234-24EC-4CC3-83DA-6D6C54388899}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D2DShapes", "..\Direct2D\D2DShapes\D2DShapes.vbproj", "{32D3BC0C-7DCB-4132-866D-A5060E16066B}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Direct3DUtilities", "..\UtilitiesLibrary\D3DUtilities\Direct3DUtilities.vbproj", "{8A152DCF-12AE-492B-9F24-060B90B2DDD0}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MeshLoader", "..\UtilitiesLibrary\MeshLoader\MeshLoader.vbproj", "{B28ADA8B-BD7E-4C11-8298-C39F7C456365}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{9AFC31D3-6B1F-4709-866F-A8CB246BE197}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Direct2D", "Direct2D", "{323E0D40-65EC-41DF-9FB1-6F4DB6E263DF}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ChartDemo", "..\Direct2D\ChartDemo\ChartDemo.vbproj", "{06E0C795-735A-425F-9864-13086BAF18C1}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Paint2D", "..\Direct2D\Paint2D\Paint2D.vbproj", "{E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RandomShapesDemo", "..\Direct2D\RandomShapes\RandomShapesDemo.vbproj", "{081B37CA-E9FF-4F68-94A5-57BB43145FDC}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TextInlineImage", "..\Direct2D\TextInlineImage\TextInlineImage.vbproj", "{06E0C795-735A-425F-9864-1308612F19C1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Direct2D3D", "Direct2D3D", "{CF7B90FB-8BA5-4365-A25F-9B45B1FEB4DC}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D2D_D3D_Interop", "..\Direct2D_3D\D2D_D3D_Interop\D2D_D3D_Interop.vbproj", "{25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SciFiTextDemo", "..\Direct2D_3D\SciFiTextDemo\SciFiTextDemo.vbproj", "{E11236F6-99D5-49BA-BB07-8E66C4F85D0E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Direct3D10", "Direct3D10", "{579BB396-AF38-4B7B-86AF-8F4E65188406}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MeshBrowser", "..\Direct3D10\MeshBrowser\MeshBrowser.vbproj", "{9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TextureSwap", "..\Direct3D10\TextureSwap\TextureSwap.vbproj", "{318D173C-3D21-472C-905F-C37D7E7A66EC}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WindowsFlag", "..\Direct3D10\WindowsFlag\WindowsFlag.vbproj", "{F235C99B-05D2-4A53-902C-E1691D7511B8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorial09", "Tutorial09", "{E4E0234A-8466-4232-BADE-2D21731B7E58}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial09_WinFormsControl", "..\Direct3D10\Tutorial09\D3D10Tutorial09_WinFormsControl\D3D10Tutorial09_WinFormsControl.vbproj", "{63FAFC43-88BA-48F6-80A6-F164B618A72A}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial09_WPF", "..\Direct3D10\Tutorial09\D3D10Tutorial09_WPF\D3D10Tutorial09_WPF.vbproj", "{790B3091-7B27-4062-B790-6FDE8C69EB7C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorials", "Tutorials", "{A72B6858-8AC7-4AF7-8478-DE7FD8636FD1}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial01_WinFormsControl", "..\Direct3D10\Tutorials\D3D10Tutorial01_WinFormsControl\D3D10Tutorial01_WinFormsControl.vbproj", "{9AE5997A-8072-41C0-9324-BC886BFD6C66}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial01_WinFormsWindow", "..\Direct3D10\Tutorials\D3D10Tutorial01_WinFormsWindow\D3D10Tutorial01_WinFormsWindow.vbproj", "{6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial01_WPF", "..\Direct3D10\Tutorials\D3D10Tutorial01_WPF\D3D10Tutorial01_WPF.vbproj", "{980315C4-115D-482E-A484-4AFDD0A4B569}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial02_WinFormsControl", "..\Direct3D10\Tutorials\D3D10Tutorial02_WinFormsControl\D3D10Tutorial02_WinFormsControl.vbproj", "{33CD3CE3-DAB1-4790-A861-B296FE85DEF6}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial04_WinFormsControl", "..\Direct3D10\Tutorials\D3D10Tutorial04_WinFormsControl\D3D10Tutorial04_WinFormsControl.vbproj", "{D0E3965D-10DF-45FC-A05F-39D67EDA760E}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial05_WinFormsControl", "..\Direct3D10\Tutorials\D3D10Tutorial05_WinFormsControl\D3D10Tutorial05_WinFormsControl.vbproj", "{87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial06_WinFormsControl", "..\Direct3D10\Tutorials\D3D10Tutorial06_WinFormsControl\D3D10Tutorial06_WinFormsControl.vbproj", "{43D713E1-7B99-4C89-8B31-A2210392B284}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial07_WinFormsControl", "..\Direct3D10\Tutorials\D3D10Tutorial07_WinFormsControl\D3D10Tutorial07_WinFormsControl.vbproj", "{CE251D57-5072-44E7-8238-C977F610BBD1}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial07_WinFormsWindow", "..\Direct3D10\Tutorials\D3D10Tutorial07_WinFormsWindow\D3D10Tutorial07_WinFormsWindow.vbproj", "{9DCD7874-4D07-413B-9E64-AA947B11D9FC}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial07_WPF", "..\Direct3D10\Tutorials\D3D10Tutorial07_WPF\D3D10Tutorial07_WPF.vbproj", "{FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Direct3D11", "Direct3D11", "{BA31126C-EB6E-4980-8C80-16F128CB096C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorials", "Tutorials", "{587BFDDA-1408-4620-B836-D3C7FC47ACBA}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Tutorial02_WinFormsControl", "..\Direct3D11\Tutorials\D3D11Tutorial02_WinFormsControl\Tutorial02_WinFormsControl.vbproj", "{60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Tutorial02_WinFormsWindow", "..\Direct3D11\Tutorials\D3D11Tutorial02_WinFormsWindow\Tutorial02_WinFormsWindow.vbproj", "{7F4B3540-1E98-48D5-A826-78E4755ACCD5}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Tutorial02_WPF", "..\Direct3D11\Tutorials\D3D11Tutorial02_WPF\Tutorial02_WPF.vbproj", "{D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DXGI", "DXGI", "{022397AC-E97E-4BEB-9F46-3AECC26AD177}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "EnumAdapters", "..\DXGI\EnumAdapters\EnumAdapters.vbproj", "{D691CAEB-8635-436B-9987-403047DA06AC}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.ActiveCfg = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.Build.0 = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.ActiveCfg = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.Build.0 = Release|x64 + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Win32.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Win32.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|x64.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|x64.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Win32.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Win32.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|x64.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|x64.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Win32.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Win32.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|x64.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|x64.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Win32.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Win32.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|x64.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|x64.Build.0 = Release|Any CPU + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.Build.0 = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.ActiveCfg = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.Build.0 = Release|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Win32.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Win32.Build.0 = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|x64.ActiveCfg = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|x64.Build.0 = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Mixed Platforms.Build.0 = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Win32.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Win32.Build.0 = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|x64.ActiveCfg = Release|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|x64.Build.0 = Release|x64 + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|Win32.ActiveCfg = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|Win32.Build.0 = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|x64.ActiveCfg = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|x64.Build.0 = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|Win32.ActiveCfg = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|Win32.Build.0 = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|x64.ActiveCfg = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|x64.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Win32.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Win32.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Win32.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Win32.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.Build.0 = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Win32.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Win32.Build.0 = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|x64.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|x64.Build.0 = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Win32.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Win32.Build.0 = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|x64.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|x64.Build.0 = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|Win32.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|x64.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|x64.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|Win32.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|Win32.Build.0 = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|x64.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|x64.Build.0 = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|Win32.ActiveCfg = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|Win32.Build.0 = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|x64.ActiveCfg = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|x64.Build.0 = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|Win32.ActiveCfg = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|Win32.Build.0 = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|x64.ActiveCfg = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|x64.Build.0 = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|Win32.Build.0 = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|x64.ActiveCfg = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|x64.Build.0 = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|Win32.ActiveCfg = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|Win32.Build.0 = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|x64.ActiveCfg = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|x64.Build.0 = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|Win32.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|x64.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|x64.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release|Win32.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release|Win32.Build.0 = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release|x64.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release|x64.Build.0 = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|Win32.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|Win32.Build.0 = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|x64.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|x64.Build.0 = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|Win32.ActiveCfg = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|Win32.Build.0 = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|x64.ActiveCfg = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|x64.Build.0 = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|Win32.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|Win32.Build.0 = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|x64.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|x64.Build.0 = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|Win32.ActiveCfg = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|Win32.Build.0 = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|x64.ActiveCfg = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|x64.Build.0 = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|Win32.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|Win32.Build.0 = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|x64.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|x64.Build.0 = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|Win32.ActiveCfg = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|Win32.Build.0 = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|x64.ActiveCfg = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|x64.Build.0 = Release|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|Win32.Build.0 = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|x64.ActiveCfg = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|x64.Build.0 = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release|Win32.ActiveCfg = Release|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release|Win32.Build.0 = Release|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release|x64.ActiveCfg = Release|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release|x64.Build.0 = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|Win32.ActiveCfg = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|Win32.Build.0 = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|x64.ActiveCfg = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|x64.Build.0 = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|Win32.ActiveCfg = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|Win32.Build.0 = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|x64.ActiveCfg = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|x64.Build.0 = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|Win32.ActiveCfg = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|Win32.Build.0 = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|x64.ActiveCfg = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|x64.Build.0 = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|Win32.ActiveCfg = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|Win32.Build.0 = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|x64.ActiveCfg = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|x64.Build.0 = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|Win32.ActiveCfg = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|Win32.Build.0 = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|x64.ActiveCfg = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|x64.Build.0 = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|Win32.ActiveCfg = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|Win32.Build.0 = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|x64.ActiveCfg = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|x64.Build.0 = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Win32.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Win32.Build.0 = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|x64.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|x64.Build.0 = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|Win32.ActiveCfg = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|Win32.Build.0 = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|x64.ActiveCfg = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|x64.Build.0 = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Win32.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Win32.Build.0 = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|x64.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|x64.Build.0 = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|Win32.ActiveCfg = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|Win32.Build.0 = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|x64.ActiveCfg = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|x64.Build.0 = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Win32.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Win32.Build.0 = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|x64.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|x64.Build.0 = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|Win32.ActiveCfg = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|Win32.Build.0 = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|x64.ActiveCfg = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|x64.Build.0 = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Win32.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Win32.Build.0 = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|x64.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|x64.Build.0 = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|Win32.ActiveCfg = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|Win32.Build.0 = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|x64.ActiveCfg = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|x64.Build.0 = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Win32.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Win32.Build.0 = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|x64.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|x64.Build.0 = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|Win32.ActiveCfg = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|Win32.Build.0 = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|x64.ActiveCfg = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|x64.Build.0 = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Win32.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Win32.Build.0 = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|x64.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|x64.Build.0 = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|Win32.ActiveCfg = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|Win32.Build.0 = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|x64.ActiveCfg = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|x64.Build.0 = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Win32.ActiveCfg = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Win32.Build.0 = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|x64.ActiveCfg = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|x64.Build.0 = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|Win32.ActiveCfg = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|Win32.Build.0 = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|x64.ActiveCfg = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|x64.Build.0 = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Win32.Build.0 = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|x64.ActiveCfg = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|x64.Build.0 = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|Win32.ActiveCfg = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|Win32.Build.0 = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|x64.ActiveCfg = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|x64.Build.0 = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|Win32.Build.0 = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|x64.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|x64.Build.0 = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|Win32.ActiveCfg = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|Win32.Build.0 = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|x64.ActiveCfg = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|x64.Build.0 = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|Win32.Build.0 = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|x64.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|x64.Build.0 = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|Win32.ActiveCfg = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|Win32.Build.0 = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|x64.ActiveCfg = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|x64.Build.0 = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|Win32.ActiveCfg = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|Win32.Build.0 = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|x64.ActiveCfg = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|x64.Build.0 = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|Win32.ActiveCfg = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|Win32.Build.0 = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|x64.ActiveCfg = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|x64.Build.0 = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|Win32.ActiveCfg = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|Win32.Build.0 = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|x64.ActiveCfg = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|x64.Build.0 = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|Win32.ActiveCfg = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|Win32.Build.0 = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|x64.ActiveCfg = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|x64.Build.0 = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|Win32.ActiveCfg = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|Win32.Build.0 = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|x64.ActiveCfg = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|x64.Build.0 = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|Win32.ActiveCfg = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|Win32.Build.0 = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|x64.ActiveCfg = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|x64.Build.0 = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|Win32.Build.0 = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|x64.ActiveCfg = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|x64.Build.0 = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|Win32.ActiveCfg = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|Win32.Build.0 = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|x64.ActiveCfg = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|x64.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {4D6086E7-DF90-4F85-812A-08C9392DD354} = {9BF30A1A-64AB-42B1-ABFB-445520E4737A} + {663FD3B0-9B4A-41CC-B9EE-1E00DA95D484} = {9BF30A1A-64AB-42B1-ABFB-445520E4737A} + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} = {4D6086E7-DF90-4F85-812A-08C9392DD354} + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} = {4D6086E7-DF90-4F85-812A-08C9392DD354} + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} = {4D6086E7-DF90-4F85-812A-08C9392DD354} + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} = {663FD3B0-9B4A-41CC-B9EE-1E00DA95D484} + {453FF234-24EC-4CC3-83DA-6D6C54388899} = {663FD3B0-9B4A-41CC-B9EE-1E00DA95D484} + {32D3BC0C-7DCB-4132-866D-A5060E16066B} = {663FD3B0-9B4A-41CC-B9EE-1E00DA95D484} + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} = {663FD3B0-9B4A-41CC-B9EE-1E00DA95D484} + {B28ADA8B-BD7E-4C11-8298-C39F7C456365} = {663FD3B0-9B4A-41CC-B9EE-1E00DA95D484} + {323E0D40-65EC-41DF-9FB1-6F4DB6E263DF} = {9AFC31D3-6B1F-4709-866F-A8CB246BE197} + {CF7B90FB-8BA5-4365-A25F-9B45B1FEB4DC} = {9AFC31D3-6B1F-4709-866F-A8CB246BE197} + {579BB396-AF38-4B7B-86AF-8F4E65188406} = {9AFC31D3-6B1F-4709-866F-A8CB246BE197} + {BA31126C-EB6E-4980-8C80-16F128CB096C} = {9AFC31D3-6B1F-4709-866F-A8CB246BE197} + {022397AC-E97E-4BEB-9F46-3AECC26AD177} = {9AFC31D3-6B1F-4709-866F-A8CB246BE197} + {06E0C795-735A-425F-9864-13086BAF18C1} = {323E0D40-65EC-41DF-9FB1-6F4DB6E263DF} + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432} = {323E0D40-65EC-41DF-9FB1-6F4DB6E263DF} + {081B37CA-E9FF-4F68-94A5-57BB43145FDC} = {323E0D40-65EC-41DF-9FB1-6F4DB6E263DF} + {06E0C795-735A-425F-9864-1308612F19C1} = {323E0D40-65EC-41DF-9FB1-6F4DB6E263DF} + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664} = {CF7B90FB-8BA5-4365-A25F-9B45B1FEB4DC} + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E} = {CF7B90FB-8BA5-4365-A25F-9B45B1FEB4DC} + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3} = {579BB396-AF38-4B7B-86AF-8F4E65188406} + {318D173C-3D21-472C-905F-C37D7E7A66EC} = {579BB396-AF38-4B7B-86AF-8F4E65188406} + {F235C99B-05D2-4A53-902C-E1691D7511B8} = {579BB396-AF38-4B7B-86AF-8F4E65188406} + {E4E0234A-8466-4232-BADE-2D21731B7E58} = {579BB396-AF38-4B7B-86AF-8F4E65188406} + {A72B6858-8AC7-4AF7-8478-DE7FD8636FD1} = {579BB396-AF38-4B7B-86AF-8F4E65188406} + {63FAFC43-88BA-48F6-80A6-F164B618A72A} = {E4E0234A-8466-4232-BADE-2D21731B7E58} + {790B3091-7B27-4062-B790-6FDE8C69EB7C} = {E4E0234A-8466-4232-BADE-2D21731B7E58} + {9AE5997A-8072-41C0-9324-BC886BFD6C66} = {A72B6858-8AC7-4AF7-8478-DE7FD8636FD1} + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA} = {A72B6858-8AC7-4AF7-8478-DE7FD8636FD1} + {980315C4-115D-482E-A484-4AFDD0A4B569} = {A72B6858-8AC7-4AF7-8478-DE7FD8636FD1} + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6} = {A72B6858-8AC7-4AF7-8478-DE7FD8636FD1} + {D0E3965D-10DF-45FC-A05F-39D67EDA760E} = {A72B6858-8AC7-4AF7-8478-DE7FD8636FD1} + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75} = {A72B6858-8AC7-4AF7-8478-DE7FD8636FD1} + {43D713E1-7B99-4C89-8B31-A2210392B284} = {A72B6858-8AC7-4AF7-8478-DE7FD8636FD1} + {CE251D57-5072-44E7-8238-C977F610BBD1} = {A72B6858-8AC7-4AF7-8478-DE7FD8636FD1} + {9DCD7874-4D07-413B-9E64-AA947B11D9FC} = {A72B6858-8AC7-4AF7-8478-DE7FD8636FD1} + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1} = {A72B6858-8AC7-4AF7-8478-DE7FD8636FD1} + {587BFDDA-1408-4620-B836-D3C7FC47ACBA} = {BA31126C-EB6E-4980-8C80-16F128CB096C} + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E} = {587BFDDA-1408-4620-B836-D3C7FC47ACBA} + {7F4B3540-1E98-48D5-A826-78E4755ACCD5} = {587BFDDA-1408-4620-B836-D3C7FC47ACBA} + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3} = {587BFDDA-1408-4620-B836-D3C7FC47ACBA} + {D691CAEB-8635-436B-9987-403047DA06AC} = {022397AC-E97E-4BEB-9F46-3AECC26AD177} + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/VB/DXGI/EnumAdapters/EnumAdapters.sln b/source/Samples/DirectX/VB/DXGI/EnumAdapters/EnumAdapters.sln new file mode 100644 index 00000000..0a3ebdcc --- /dev/null +++ b/source/Samples/DirectX/VB/DXGI/EnumAdapters/EnumAdapters.sln @@ -0,0 +1,42 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "EnumAdapters", "EnumAdapters.vbproj", "{D691CAEB-8635-436B-9987-403047DA06AC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|Any CPU.Build.0 = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D691CAEB-8635-436B-9987-403047DA06AC}.Release|Win32.ActiveCfg = Release|Any CPU + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/VB/DXGI/EnumAdapters/EnumAdapters.vbproj b/source/Samples/DirectX/VB/DXGI/EnumAdapters/EnumAdapters.vbproj new file mode 100644 index 00000000..0ce3bd6a --- /dev/null +++ b/source/Samples/DirectX/VB/DXGI/EnumAdapters/EnumAdapters.vbproj @@ -0,0 +1,74 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {D691CAEB-8635-436B-9987-403047DA06AC} + Exe + + EnumAdapters + v3.5 + On + Binary + Off + On + 512 + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + DirectX + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/DXGI/EnumAdapters/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/DXGI/EnumAdapters/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..1653a9f7 --- /dev/null +++ b/source/Samples/DirectX/VB/DXGI/EnumAdapters/My Project/AssemblyInfo.vb @@ -0,0 +1,40 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/DXGI/EnumAdapters/Program.vb b/source/Samples/DirectX/VB/DXGI/EnumAdapters/Program.vb new file mode 100644 index 00000000..ec0ac81b --- /dev/null +++ b/source/Samples/DirectX/VB/DXGI/EnumAdapters/Program.vb @@ -0,0 +1,52 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports System +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D + +Namespace EnumAdapters + Friend Class Program + Shared Sub Main(ByVal args() As String) + Dim factory As Factory1 = Factory1.Create() + + Console.WriteLine("Adapter(s) Information:") + For Each adapter As Adapter1 In factory.Adapters + Dim description As AdapterDescription = adapter.Description + Dim version? As AdapterDriverVersion + + Console.WriteLine("Description: {0} ", description.Description) + Console.WriteLine(Constants.vbTab & "Dedicated System Memory: {0} ", description.DedicatedSystemMemory) + Console.WriteLine(Constants.vbTab & "Dedicated Video Memory: {0} ", description.DedicatedVideoMemory) + Console.WriteLine(Constants.vbTab & "Luid: {0:X}:{1:X} ", description.AdapterLuid.HighPart, description.AdapterLuid.LowPart) + Console.WriteLine(Constants.vbTab & "Device Id: {0:X} ", description.DeviceId) + Console.WriteLine(Constants.vbTab & "Revision: {0:X} ", description.Revision) + + Console.WriteLine() + version = adapter.CheckDeviceSupport(DeviceType.Direct3D11) + Console.WriteLine(Constants.vbTab & "Supports Direct3D 11.0 Device: {0}", version IsNot Nothing) + version = adapter.CheckDeviceSupport(DeviceType.Direct3D10Point1) + Console.WriteLine(Constants.vbTab & "Supports Direct3D 10.1 Device: {0}", version IsNot Nothing) + version = adapter.CheckDeviceSupport(DeviceType.Direct3D10) + Console.WriteLine(Constants.vbTab & "Supports Direct3D 10.0 Device: {0}", version IsNot Nothing) + Console.WriteLine() + + Console.WriteLine(Constants.vbTab & "Monitor(s) Information:") + For Each output As Output In adapter.Outputs + Dim outDesc As OutputDescription = output.Description + + Console.WriteLine(Constants.vbTab & "Device Name: {0} ", outDesc.DeviceName) + Console.WriteLine(Constants.vbTab + Constants.vbTab & "Attached To Desktop: {0} ", outDesc.AttachedToDesktop) + Console.WriteLine(Constants.vbTab + Constants.vbTab & "Rotation Mode: {0} ", outDesc.Rotation) + Console.WriteLine(Constants.vbTab + Constants.vbTab & "Monitor Coordinates: Top: {0}, Left: {1}, Right: {2}, Bottom: {3} ", outDesc.Monitor.MonitorCoordinates.Top, outDesc.Monitor.MonitorCoordinates.Left, outDesc.Monitor.MonitorCoordinates.Right, outDesc.Monitor.MonitorCoordinates.Bottom) + Console.WriteLine(Constants.vbTab + Constants.vbTab & "Working Coordinates: Top: {0}, left: {1}, Right: {2}, Bottom: {3} ", outDesc.Monitor.WorkCoordinates.Top, outDesc.Monitor.WorkCoordinates.Left, outDesc.Monitor.WorkCoordinates.Right, outDesc.Monitor.WorkCoordinates.Bottom) + Next output + Next adapter + + Console.WriteLine("Press any key to continue...") + Console.ReadKey() + + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/ChartDemo/Application.xaml b/source/Samples/DirectX/VB/Direct2D/ChartDemo/Application.xaml new file mode 100644 index 00000000..6b5d29ab --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/ChartDemo/Application.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct2D/ChartDemo/Application.xaml.vb b/source/Samples/DirectX/VB/Direct2D/ChartDemo/Application.xaml.vb new file mode 100644 index 00000000..c8fd7745 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/ChartDemo/Application.xaml.vb @@ -0,0 +1,19 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Configuration +Imports System.Data +Imports System.Linq +Imports System.Windows + +Namespace Direct2D_Demo_WPF + ''' + ''' Interaction logic for App.xaml + ''' + Partial Public Class App + Inherits Application + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/ChartDemo/ChartDemo.sln b/source/Samples/DirectX/VB/Direct2D/ChartDemo/ChartDemo.sln new file mode 100644 index 00000000..27b7e643 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/ChartDemo/ChartDemo.sln @@ -0,0 +1,55 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ChartDemo", "ChartDemo.vbproj", "{06E0C795-735A-425F-9864-13086BAF18C1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|Any CPU.Build.0 = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {06E0C795-735A-425F-9864-13086BAF18C1}.Release|Win32.ActiveCfg = Release|Any CPU + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/VB/Direct2D/ChartDemo/ChartDemo.vbproj b/source/Samples/DirectX/VB/Direct2D/ChartDemo/ChartDemo.vbproj new file mode 100644 index 00000000..66a9ed62 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/ChartDemo/ChartDemo.vbproj @@ -0,0 +1,118 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {06E0C795-735A-425F-9864-13086BAF18C1} + WinExe + + + ChartDemo + v3.5 + On + Binary + Off + On + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + + 3.5 + + + 3.5 + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + Application.xaml + Code + + + Window1.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/ChartDemo/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct2D/ChartDemo/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..6af4342f --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/ChartDemo/My Project/AssemblyInfo.vb @@ -0,0 +1,56 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Resources +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + + '(used if a resource is not found in the page, + ' or application resource dictionaries) + '(used if a resource is not found in the page, + ' app, or any theme specific resource dictionaries) + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct2D/ChartDemo/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct2D/ChartDemo/My Project/Resources.Designer.vb new file mode 100644 index 00000000..92f156eb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/ChartDemo/My Project/Resources.Designer.vb @@ -0,0 +1,64 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.3053 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My.Resources + + + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If (resourceMan Is Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/ChartDemo/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct2D/ChartDemo/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/ChartDemo/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/ChartDemo/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct2D/ChartDemo/My Project/Settings.Designer.vb new file mode 100644 index 00000000..519cc78c --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/ChartDemo/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.3053 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/ChartDemo/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct2D/ChartDemo/My Project/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/ChartDemo/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/ChartDemo/Window1.xaml b/source/Samples/DirectX/VB/Direct2D/ChartDemo/Window1.xaml new file mode 100644 index 00000000..8f8aefc2 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/ChartDemo/Window1.xaml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct2D/ChartDemo/Window1.xaml.vb b/source/Samples/DirectX/VB/Direct2D/ChartDemo/Window1.xaml.vb new file mode 100644 index 00000000..20e44b96 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/ChartDemo/Window1.xaml.vb @@ -0,0 +1,196 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows +Imports Microsoft.WindowsAPICodePack.DirectX.Controls +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 +Imports Microsoft.WindowsAPICodePack.DirectX.DirectWrite + + +Namespace Microsoft.WindowsAPICodePack.Samples + ''' + ''' Interaction logic for Window1.xaml + ''' + Partial Public Class Window1 + Inherits Window + Private d2dFactory As D2DFactory + Private dwriteFactory As DWriteFactory + Private renderTarget As HwndRenderTarget + Private blackBrush As SolidColorBrush + Private gridPatternBitmapBrush As BitmapBrush + Private solidBrush1 As SolidColorBrush + Private solidBrush2 As SolidColorBrush + Private solidBrush3 As SolidColorBrush + Private linearGradientBrush As LinearGradientBrush + Private radialGradientBrush As RadialGradientBrush + Private textFormat As TextFormat + Private textLayout As TextLayout + + Private x1 As Integer = 70, x2 As Integer = 82, x3 As Integer = 25, x4 As Integer = 75, x5 As Integer = 54 + + Public Sub New() + InitializeComponent() + AddHandler host.Loaded, AddressOf host_Loaded + AddHandler host.SizeChanged, AddressOf host_SizeChanged + End Sub + + + Private Sub host_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' Create the D2D Factory + d2dFactory = D2DFactory.CreateFactory(D2DFactoryType.SingleThreaded) + + ' Create the DWrite Factory + dwriteFactory = DWriteFactory.CreateFactory() + + ' Start rendering now! + host.Render = AddressOf Render + host.InvalidateVisual() + End Sub + + Private Sub host_SizeChanged(ByVal sender As Object, ByVal e As SizeChangedEventArgs) + If renderTarget IsNot Nothing Then + ' Resize the render targrt to the actual host size + renderTarget.Resize(New SizeU(CUInt(host.ActualWidth), CUInt(host.ActualHeight))) + End If + InvalidateVisual() + End Sub + + ''' + ''' This method creates the render target and all associated D2D and DWrite resources + ''' + Private Sub CreateDeviceResources() + ' Only calls if resources have not been initialize before + If renderTarget Is Nothing Then + ' The text format + textFormat = dwriteFactory.CreateTextFormat("Bodoni MT", 24, DirectX.DirectWrite.FontWeight.Medium, DirectX.DirectWrite.FontStyle.Italic,DirectX.DirectWrite.FontStretch.Normal) + + + ' Create the render target + Dim size As New SizeU(CUInt(host.ActualWidth), CUInt(host.ActualHeight)) + Dim props As New RenderTargetProperties() + Dim hwndProps As New HwndRenderTargetProperties(host.Handle, size, PresentOptions.None) + renderTarget = d2dFactory.CreateHwndRenderTarget(props, hwndProps) + + ' A black brush to be used for drawing text + Dim cf As New ColorF(0, 0, 0, 1) + blackBrush = renderTarget.CreateSolidColorBrush(cf) + + ' Create a linear gradient. + Dim stops() As GradientStop = { New GradientStop(1, New ColorF(1f, 0f, 0f, 0.25f)), New GradientStop(0, New ColorF(0f, 0f, 1f, 1f)) } + + Dim pGradientStops As GradientStopCollection = renderTarget.CreateGradientStopCollection(stops, Gamma.Linear, ExtendMode.Wrap) + Dim gradBrushProps As New LinearGradientBrushProperties(New Point2F(50, 25), New Point2F(25, 50)) + + linearGradientBrush = renderTarget.CreateLinearGradientBrush(gradBrushProps, pGradientStops) + + gridPatternBitmapBrush = CreateGridPatternBrush(renderTarget) + + solidBrush1 = renderTarget.CreateSolidColorBrush(New ColorF(0.3F, 0.5F, 0.65F, 0.25F)) + solidBrush2 = renderTarget.CreateSolidColorBrush(New ColorF(0.0F, 0.0F, 0.65F, 0.5F)) + solidBrush3 = renderTarget.CreateSolidColorBrush(New ColorF(0.9F, 0.5F, 0.3F, 0.75F)) + + ' Create a linear gradient. + stops(0) = New GradientStop(1, New ColorF(0f, 0f, 0f, 0.25f)) + stops(1) = New GradientStop(0, New ColorF(1f, 1f, 0.2f, 1f)) + Dim radiantGradientStops As GradientStopCollection = renderTarget.CreateGradientStopCollection(stops, Gamma.Linear, ExtendMode.Wrap) + + Dim radialBrushProps As New RadialGradientBrushProperties(New Point2F(25, 25), New Point2F(0, 0), 10, 10) + radialGradientBrush = renderTarget.CreateRadialGradientBrush(radialBrushProps, radiantGradientStops) + End If + End Sub + + ''' + ''' Create the grid pattern (squares) brush + ''' + ''' + ''' + Private Function CreateGridPatternBrush(ByVal target As RenderTarget) As BitmapBrush + + ' Create a compatible render target. + Dim compatibleRenderTarget As BitmapRenderTarget = target.CreateCompatibleRenderTarget(CompatibleRenderTargetOptions.None, New SizeF(10.0f, 10.0f)) + + '// Draw a pattern. + Dim spGridBrush As SolidColorBrush = compatibleRenderTarget.CreateSolidColorBrush(New ColorF(0.93f, 0.94f, 0.96f, 1.0f)) + compatibleRenderTarget.BeginDraw() + compatibleRenderTarget.FillRectangle(New RectF(0.0f, 0.0f, 10.0f, 1.0f), spGridBrush) + compatibleRenderTarget.FillRectangle(New RectF(0.0f, 0.1f, 1.0f, 10.0f), spGridBrush) + compatibleRenderTarget.EndDraw() + + '// Retrieve the bitmap from the render target. + Dim spGridBitmap As D2DBitmap + spGridBitmap = compatibleRenderTarget.Bitmap + + '// Choose the tiling mode for the bitmap brush. + Dim brushProperties As New BitmapBrushProperties(ExtendMode.Wrap, ExtendMode.Wrap, BitmapInterpolationMode.Linear) + '// Create the bitmap brush. + Return renderTarget.CreateBitmapBrush(spGridBitmap, brushProperties) + End Function + + Private Sub Render() + + CreateDeviceResources() + + If renderTarget.IsOccluded Then + Return + End If + + Dim renderTargetSize As SizeF = renderTarget.Size + + renderTarget.BeginDraw() + + renderTarget.Clear(New ColorF(1, 1, 1, 0)) + + ' Paint a grid background. + Dim rf As New RectF(0.0f, 0.0f, renderTargetSize.Width, renderTargetSize.Height) + renderTarget.FillRectangle(rf, gridPatternBitmapBrush) + + Dim curLeft As Single = 0 + + rf = New RectF(curLeft, renderTargetSize.Height, (curLeft + renderTargetSize.Width / 5.0F), renderTargetSize.Height - renderTargetSize.Height * (CSng(x1) / 100.0F)) + + renderTarget.FillRectangle(rf, solidBrush1) + + textLayout = dwriteFactory.CreateTextLayout(String.Format(" {0}%", x1), textFormat, renderTargetSize.Width / 5.0F, 30) + + renderTarget.DrawTextLayout(New Point2F(curLeft, renderTargetSize.Height - 30), textLayout, blackBrush) + + curLeft = (curLeft + renderTargetSize.Width / 5.0F) + rf = New RectF(curLeft, renderTargetSize.Height, (curLeft + renderTargetSize.Width / 5.0F), renderTargetSize.Height - renderTargetSize.Height * (CSng(x2) / 100.0F)) + renderTarget.FillRectangle(rf, radialGradientBrush) + renderTarget.DrawText(String.Format(" {0}%", x2), textFormat, New RectF(curLeft, renderTargetSize.Height - 30, (curLeft + renderTargetSize.Width / 5.0F), renderTargetSize.Height), blackBrush) + + curLeft = (curLeft + renderTargetSize.Width / 5.0F) + rf = New RectF(curLeft, renderTargetSize.Height, (curLeft + renderTargetSize.Width / 5.0F), renderTargetSize.Height - renderTargetSize.Height * (CSng(x3) / 100.0F)) + renderTarget.FillRectangle(rf, solidBrush3) + renderTarget.DrawText(String.Format(" {0}%", x3), textFormat, New RectF(curLeft, renderTargetSize.Height - 30, (curLeft + renderTargetSize.Width / 5.0F), renderTargetSize.Height), blackBrush) + + curLeft = (curLeft + renderTargetSize.Width / 5.0F) + rf = New RectF(curLeft, renderTargetSize.Height, (curLeft + renderTargetSize.Width / 5.0F), renderTargetSize.Height - renderTargetSize.Height * (CSng(x4) / 100.0F)) + renderTarget.FillRectangle(rf, linearGradientBrush) + renderTarget.DrawText(String.Format(" {0}%", x4), textFormat, New RectF(curLeft, renderTargetSize.Height - 30, (curLeft + renderTargetSize.Width / 5.0F), renderTargetSize.Height), blackBrush) + + + curLeft = (curLeft + renderTargetSize.Width / 5.0F) + rf = New RectF(curLeft, renderTargetSize.Height, (curLeft + renderTargetSize.Width / 5.0F), renderTargetSize.Height - renderTargetSize.Height * (CSng(x5) / 100.0F)) + renderTarget.FillRectangle(rf, solidBrush2) + renderTarget.DrawText(String.Format(" {0}%", x5), textFormat, New RectF(curLeft, renderTargetSize.Height - 30, (curLeft + renderTargetSize.Width / 5.0F), renderTargetSize.Height), blackBrush) + + renderTarget.EndDraw() + + End Sub + + Private Sub generate_Data(ByVal sender As Object, ByVal e As RoutedEventArgs) + Dim rand As New Random(CInt(Fix(Environment.TickCount))) + x1 = rand.Next(100) + x2 = rand.Next(100) + x3 = rand.Next(100) + x4 = rand.Next(100) + x5 = rand.Next(100) + + Render() + End Sub + + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/BitmapShape.vb b/source/Samples/DirectX/VB/Direct2D/D2DShapes/BitmapShape.vb new file mode 100644 index 00000000..14b69934 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/D2DShapes/BitmapShape.vb @@ -0,0 +1,88 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.ComponentModel +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 + +Namespace D2DShapes + Friend Class BitmapShape + Inherits DrawingShape + #Region "Fields" +'INSTANT VB NOTE: The variable destRect was renamed since Visual Basic does not allow class members with the same name: + Private destRect_Renamed As RectF +'INSTANT VB NOTE: The variable sourceRect was renamed since Visual Basic does not allow class members with the same name: + Private sourceRect_Renamed As RectF +'INSTANT VB NOTE: The variable drawSection was renamed since Visual Basic does not allow class members with the same name: + Private drawSection_Renamed As Boolean +'INSTANT VB NOTE: The variable opacity was renamed since Visual Basic does not allow class members with the same name: + Private opacity_Renamed As Single + #End Region + + #Region "Properties" + _ + Public Property DestRect() As RectF + Get + Return destRect_Renamed + End Get + Set(ByVal value As RectF) + destRect_Renamed = value + End Set + End Property + + _ + Public Property SourceRect() As RectF + Get + Return sourceRect_Renamed + End Get + Set(ByVal value As RectF) + sourceRect_Renamed = value + End Set + End Property + + Public Property DrawSection() As Boolean + Get + Return drawSection_Renamed + End Get + Set(ByVal value As Boolean) + drawSection_Renamed = value + End Set + End Property + + Public Property Opacity() As Single + Get + Return opacity_Renamed + End Get + Set(ByVal value As Single) + opacity_Renamed = value + End Set + End Property + #End Region + + Public Sub New(ByVal initialRenderTarget As RenderTarget, ByVal random As Random, ByVal d2DFactory As D2DFactory, ByVal bitmap As D2DBitmap) + MyBase.New(initialRenderTarget, random, d2DFactory, bitmap) + DestRect = RandomRect(CanvasWidth, CanvasHeight) + opacity_Renamed = RandomOpacity() + DrawSection = Random.NextDouble() < 0.25 + If drawSection_Renamed Then + SourceRect = RandomRect(Me.Bitmap.PixelSize.Width, Me.Bitmap.PixelSize.Height) + End If + End Sub + + Protected Friend Overrides Sub ChangeRenderTarget(ByVal newRenderTarget As RenderTarget) + 'no rendertarget dependent members + End Sub + + Protected Friend Overrides Sub Draw(ByVal renderTarget As RenderTarget) + If DrawSection Then + renderTarget.DrawBitmap(Bitmap, opacity_Renamed, BitmapInterpolationMode.Linear, DestRect, SourceRect) + Else + renderTarget.DrawBitmap(Bitmap, opacity_Renamed, BitmapInterpolationMode.Linear, DestRect) + End If + End Sub + + Public Overrides Function HitTest(ByVal point As Point2F) As Boolean + Return DestRect.Top <= point.Y AndAlso DestRect.Bottom >= point.Y AndAlso DestRect.Left <= point.X AndAlso DestRect.Right >= point.X + End Function + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/BitmapUtilities.vb b/source/Samples/DirectX/VB/Direct2D/D2DShapes/BitmapUtilities.vb new file mode 100644 index 00000000..73272b10 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/D2DShapes/BitmapUtilities.vb @@ -0,0 +1,40 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 +Imports System.IO + +Namespace D2DShapes + Friend Class BitmapUtilities + Friend Shared Function LoadBitmapFromFile(ByVal renderTarget As RenderTarget, ByVal wicFactory As ImagingFactory, ByVal fileName As String) As D2DBitmap + Dim decoder As BitmapDecoder = wicFactory.CreateDecoderFromFileName(fileName, DesiredAccess.Read, DecodeMetadataCacheOption.OnLoad) + Dim ret As D2DBitmap = CreateBitmapFromDecoder(renderTarget, wicFactory, decoder) + decoder.Dispose() + Return ret + End Function + + Friend Shared Function LoadBitmapFromStream(ByVal renderTarget As RenderTarget, ByVal wicFactory As ImagingFactory, ByVal ioStream As Stream) As D2DBitmap + Dim decoder As BitmapDecoder = wicFactory.CreateDecoderFromStream(ioStream, DecodeMetadataCacheOption.OnLoad) + Dim ret As D2DBitmap = CreateBitmapFromDecoder(renderTarget, wicFactory, decoder) + decoder.Dispose() + Return ret + End Function + + Private Shared Function CreateBitmapFromDecoder(ByVal renderTarget As RenderTarget, ByVal wicFactory As ImagingFactory, ByVal decoder As BitmapDecoder) As D2DBitmap + ' Create the initial frame. + Dim source As BitmapFrameDecode = decoder.GetFrame(0) + ' Convert the image format to 32bppPBGRA -- which Direct2D expects. + Dim converter As FormatConverter = wicFactory.CreateFormatConverter() + converter.Initialize(source.ToBitmapSource(), PixelFormats.Pbgra32Bpp, BitmapDitherType.None, BitmapPaletteType.MedianCut) + + ' Create a Direct2D bitmap from the WIC bitmap. + Dim ret As D2DBitmap = renderTarget.CreateBitmapFromWicBitmap(converter.ToBitmapSource()) + + converter.Dispose() + source.Dispose() + + Return ret + End Function + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/D2DShapes.vbproj b/source/Samples/DirectX/VB/Direct2D/D2DShapes/D2DShapes.vbproj new file mode 100644 index 00000000..c543e0f3 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/D2DShapes/D2DShapes.vbproj @@ -0,0 +1,101 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {32D3BC0C-7DCB-4132-866D-A5060E16066B} + Library + + + D2DShapes + v3.5 + On + Binary + Off + On + 512 + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + + 3.5 + + + + + + + + + + + UserControl + + + D2DShapesControlWithButtons.vb + + + + + + + + + + + + UserControl + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + + + D2DShapesControlWithButtons.vb + Designer + + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/D2DShapesControl.vb b/source/Samples/DirectX/VB/Direct2D/D2DShapes/D2DShapesControl.vb new file mode 100644 index 00000000..acc91535 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/D2DShapes/D2DShapesControl.vb @@ -0,0 +1,1131 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +Imports System.Diagnostics +Imports System.Drawing +Imports System.IO +Imports System.Threading +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.DirectX +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 +Imports Microsoft.WindowsAPICodePack.DirectX.DirectWrite +Imports Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics + +Namespace D2DShapes + ''' + ''' A control for managing a list and rendering DrawingShape objects + ''' + Public NotInheritable Class D2DShapesControl + Inherits UserControl + #Region "enum RenderModes" + Public Enum RenderModes + ''' + ''' Draw through device context in OnPaint (when the window gets invalidated) + ''' + DCRenderTarget = 0 + ''' + ''' Use BitmapRenderTarget to draw on updates, copy the bitmap to DCRenderTarget in OnPaint (when the window gets invalidated) + ''' + BitmapRenderTargetOnPaint + ''' + ''' Use BitmapRenderTarget to draw on updates, copy the bitmap to HwndRenderTarget in real time + ''' + BitmapRenderTargetRealTime + ''' + ''' Draw directly on window in real time + ''' + HwndRenderTarget + End Enum + #End Region + + #Region "Fields" + 'fields for shared factory use + Friend Shared sharedD2DFactory As D2DFactory + Friend Shared sharedWicFactory As ImagingFactory + Friend Shared sharedDwriteFactory As DWriteFactory + Friend Shared sharedSyncObject As New Object() + Friend Shared sharedRefCount As Integer + + 'object used for synchronization, so shape list changes, (de)initialization, configuration changes and rendering are not done concurrently + Private ReadOnly renderSyncObject As Object + + 'factory objects + Friend d2DFactory As D2DFactory + Friend wicFactory As ImagingFactory + Friend dwriteFactory As DWriteFactory + + 'common random object + Friend random As New Random(Environment.TickCount + seedDelta) + 'used to have different random objects for all instances of this class + Private Shared seedDelta As Integer + + 'render target used in real time rendering modes (can also be used OnPaint, but does not use a device context) + Private hwndRenderTarget As HwndRenderTarget + 'compatible bitmap that is used in cached modes, in which only changes to the image are drawn to the bitmap and the bitmap is drawn to screen when needed + Private bitmapRenderTarget As BitmapRenderTarget + 'device context (DC) render target - used with the Graphics object to render to DC + Private dcRenderTarget As DCRenderTarget + + 'shapes to be drawn + Private ReadOnly drawingShapes As New List(Of DrawingShape)() + 'stack of shapes taken off the drawingShapes list that could be thrown back there + Private ReadOnly peelings As New Stack(Of DrawingShape)() + + 'fields for FPS calculations + Private lastTickCount As Integer + Private frameCount As Integer + + 'various statistics that invoke StatsChanged when they are updated + Private ReadOnly stats As New Dictionary(Of String, Integer)() + 'statistics as a string + Public StatsString As String = "" + + 'GDI brushes used to draw background and stub text on a non-initialized control + Private backgroundBrush As System.Drawing.Brush = SystemBrushes.Control + Private foregroundBrush As System.Drawing.Brush = SystemBrushes.ControlText + + 'object state management variables + Private _isInitialized As Boolean + Private isInitializing As Boolean + Private Shadows disposed As Boolean + + 'background render thread + Private ReadOnly renderThread As Thread + 'reset event for ending the render thread + Private ReadOnly killThread As ManualResetEvent + 'delegate for rendering in background + Public Delegate Sub RenderHandler() +#End Region + + #Region "Properties" +#Region "Render" + Private _render As RenderHandler + ''' + ''' Gets or sets the handler of the render event for background rendering thread in real time modes. + ''' + ''' The render. + Public Property Render() As RenderHandler + Get + SyncLock renderSyncObject + Return _render + End SyncLock + End Get + Set(ByVal value As RenderHandler) + SyncLock renderSyncObject + _render = value + End SyncLock + End Set + End Property +#End Region + +#Region "IsInitialized" + ''' + ''' Gets a value indicating whether this instance is initialized. + ''' + ''' + ''' true if this instance is initialized; otherwise, false. + ''' + Public ReadOnly Property IsInitialized() As Boolean + Get + Return _isInitialized AndAlso d2DFactory IsNot Nothing AndAlso d2DFactory.NativeInterface <> IntPtr.Zero + End Get + End Property +#End Region + +#Region "StatsChanged" + Private Event _statsChanged As EventHandler + ''' + ''' Occurs after statistics change (eg. when shapes are added/removed) + ''' + Public Custom Event StatsChanged As EventHandler + AddHandler(ByVal value As EventHandler) + AddHandler _statsChanged, value + End AddHandler + RemoveHandler(ByVal value As EventHandler) + RemoveHandler _statsChanged, value + End RemoveHandler + RaiseEvent(ByVal sender As System.Object, ByVal e As System.EventArgs) + End RaiseEvent + End Event +#End Region + +#Region "RenderMode" + Private _renderMode As RenderModes + ''' + ''' Gets or sets the render mode. + ''' See RenderModes enum description for descriptions of particular modes implemented + ''' + ''' The render mode. + Public Property RenderMode() As RenderModes + Get + Return _renderMode + End Get + Set(ByVal value As RenderModes) + SetRenderMode(value) + End Set + End Property +#End Region + +#Region "UsingCompatibleRenderTarget" + ''' + ''' Gets a value indicating whether a compatible render target bitmap is used for cached rendering. + ''' + ''' + ''' true if [using compatible render target]; otherwise, false. + ''' + Private ReadOnly Property UsingCompatibleRenderTarget() As Boolean + Get + Return _renderMode = RenderModes.BitmapRenderTargetOnPaint OrElse _renderMode = RenderModes.BitmapRenderTargetRealTime + End Get + End Property +#End Region + +#Region "RenderTarget" + ''' + ''' render target to use when drawing shapes + ''' + Friend ReadOnly Property RenderTarget() As RenderTarget + Get + SyncLock renderSyncObject + Select Case _renderMode + Case RenderModes.BitmapRenderTargetOnPaint, RenderModes.BitmapRenderTargetRealTime + Return bitmapRenderTarget + Case RenderModes.DCRenderTarget + Return dcRenderTarget + Case Else + Return hwndRenderTarget + End Select + End SyncLock + End Get + End Property +#End Region + +#Region "BackColorF" + Private _backColorF As ColorF + ''' + ''' Gets the (float) back color used for clearing the background - it is dependent on the BackColor property. + ''' + ''' The back color F. + Private ReadOnly Property BackColorF() As ColorF + Get + Return _backColorF + End Get + End Property +#End Region + +#Region "Bitmap" + Private _bitmap As D2DBitmap + ''' + ''' Gets the bitmap shared among shape objects. Loads the bitmap if not initialized and rendertarget and wicFactory are available. + ''' Set bitmap to null to reload it after changing the render target + ''' + ''' The bitmap. + Friend ReadOnly Property Bitmap() As D2DBitmap + Get + If _bitmap Is Nothing AndAlso RenderTarget IsNot Nothing AndAlso wicFactory IsNot Nothing Then + Using stream As Stream = GetType(D2DShapesControl).Assembly.GetManifestResourceStream("Peacock.jpg") + _bitmap = BitmapUtilities.LoadBitmapFromStream(RenderTarget, wicFactory, stream) + End Using + End If + Return _bitmap + End Get + End Property +#End Region + +#Region "Fps" + ''' + ''' Gets or sets the number of frames drawn per second. + ''' Is updated when the image is redrawn after at least a second since the last calculation. + ''' See CalculateFPS(). + ''' + ''' The FPS. + Private privateFps As Single + Public Property Fps() As Single + Get + Return privateFps + End Get + Private Set(ByVal value As Single) + privateFps = value + End Set + End Property +#End Region + +#Region "FpsChanged" + Private Event _fpsChanged As EventHandler + ''' + ''' Occurs when Fps property value changes. + ''' + Public Custom Event FpsChanged As EventHandler + AddHandler(ByVal value As EventHandler) + AddHandler _fpsChanged, value + End AddHandler + RemoveHandler(ByVal value As EventHandler) + RemoveHandler _fpsChanged, value + End RemoveHandler + RaiseEvent(ByVal sender As System.Object, ByVal e As System.EventArgs) + End RaiseEvent + End Event +#End Region +#End Region + + #Region "D2DShapesControl() - CTOR" + Public Sub New(ByVal components As IContainer) + seedDelta = seedDelta + 1 + components.Add(Me) + SetStyle(ControlStyles.UserPaint, True) + SetStyle(ControlStyles.AllPaintingInWmPaint, True) + UpdateStyles() + + _backColorF = New ColorF(BackColor.R / 256.0F, BackColor.G / 256.0F, BackColor.B / 256.0F, 1.0F) + + 'Initialize the background render thread and synchronization objects + renderSyncObject = New Object() + killThread = New ManualResetEvent(False) + Dim ts As ThreadStart = AddressOf RenderThreadProcedure + renderThread = New Thread(ts) + renderThread.Start() + End Sub +#End Region + + #Region "Methods" +#Region "WndProc()" + Protected Overrides Sub WndProc(ByRef m As Message) + 'kill and wait for render thread to complete when window gets destroyed + If m.Msg = &H2 Then + killThread.Set() + renderThread.Join() + End If + MyBase.WndProc(m) + End Sub +#End Region + +#Region "OnParentChanged()" + ''' + ''' Stop rendering if removed from a parent control + ''' + ''' An that contains the event data. + Protected Overrides Sub OnParentChanged(ByVal e As EventArgs) + SyncLock renderSyncObject + If Parent Is Nothing Then + _render = Nothing + End If + End SyncLock + MyBase.OnParentChanged(e) + End Sub +#End Region + +#Region "Dispose()" + ''' + ''' Dispose of resources (IDisposable implementation) + ''' + ''' true to release both managed and unmanaged resources; false to release only unmanaged resources. + Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (Not disposed) Then + SyncLock renderSyncObject + _render = Nothing + + SyncLock sharedSyncObject + If sharedD2DFactory IsNot Nothing AndAlso d2DFactory Is sharedD2DFactory Then + sharedRefCount -= 1 + End If + + If d2DFactory IsNot Nothing AndAlso d2DFactory IsNot sharedD2DFactory Then + d2DFactory.Dispose() + End If + d2DFactory = Nothing + + If dwriteFactory IsNot Nothing AndAlso dwriteFactory IsNot sharedDwriteFactory Then + dwriteFactory.Dispose() + End If + dwriteFactory = Nothing + + If wicFactory IsNot Nothing AndAlso wicFactory IsNot sharedWicFactory Then + wicFactory.Dispose() + End If + wicFactory = Nothing + + If sharedRefCount = 0 Then + If sharedD2DFactory IsNot Nothing Then + sharedD2DFactory.Dispose() + End If + sharedD2DFactory = Nothing + + If sharedDwriteFactory IsNot Nothing Then + sharedDwriteFactory.Dispose() + End If + sharedDwriteFactory = Nothing + + If sharedWicFactory IsNot Nothing Then + sharedWicFactory.Dispose() + End If + sharedWicFactory = Nothing + End If + End SyncLock + + For Each shape As DrawingShape In drawingShapes + shape.Dispose() + Next shape + + If _bitmap IsNot Nothing Then + _bitmap.Dispose() + End If + _bitmap = Nothing + + If dcRenderTarget IsNot Nothing Then + dcRenderTarget.Dispose() + End If + dcRenderTarget = Nothing + If bitmapRenderTarget IsNot Nothing Then + bitmapRenderTarget.Dispose() + End If + bitmapRenderTarget = Nothing + If hwndRenderTarget IsNot Nothing Then + hwndRenderTarget.Dispose() + End If + hwndRenderTarget = Nothing + + + disposed = True + End SyncLock + End If + MyBase.Dispose(disposing) + End Sub +#End Region + +#Region "Initialize()" + ''' + ''' Initializes rendering. + ''' + Public Sub Initialize() + SyncLock renderSyncObject + isInitializing = True + CreateFactories() + CreateDeviceResources() + isInitializing = False + _isInitialized = True + End SyncLock + End Sub +#End Region + +#Region "CreateFactories()" + Private Sub CreateFactories() + 'reuse factories except for random cases + If random.NextDouble() < 0.5 Then + SyncLock sharedSyncObject + If sharedD2DFactory Is Nothing Then + ' Create the D2D Factory + sharedD2DFactory = d2DFactory.CreateFactory(D2DFactoryType.MultiThreaded) + + ' Create the DWrite Factory + sharedDwriteFactory = dwriteFactory.CreateFactory() + + ' Create the WIC Factory + sharedWicFactory = ImagingFactory.Create() + + Debug.Assert(sharedD2DFactory.NativeInterface <> IntPtr.Zero) + Debug.Assert(sharedDwriteFactory.NativeInterface <> IntPtr.Zero) + Debug.Assert(sharedWicFactory.NativeInterface <> IntPtr.Zero) + End If + sharedRefCount += 1 + End SyncLock + d2DFactory = sharedD2DFactory + dwriteFactory = sharedDwriteFactory + wicFactory = sharedWicFactory + Debug.Assert(d2DFactory.NativeInterface <> IntPtr.Zero) + Debug.Assert(dwriteFactory.NativeInterface <> IntPtr.Zero) + Debug.Assert(wicFactory.NativeInterface <> IntPtr.Zero) + Else + ' Create the D2D Factory + d2DFactory = d2DFactory.CreateFactory(D2DFactoryType.MultiThreaded) + + ' Create the DWrite Factory + dwriteFactory = dwriteFactory.CreateFactory() + + ' Create the WIC Factory + wicFactory = ImagingFactory.Create() + Debug.Assert(d2DFactory.NativeInterface <> IntPtr.Zero) + Debug.Assert(dwriteFactory.NativeInterface <> IntPtr.Zero) + Debug.Assert(wicFactory.NativeInterface <> IntPtr.Zero) + End If + End Sub + +#End Region + +#Region "CreateDeviceResources()" + ''' + ''' This method creates the render target and associated D2D and DWrite resources + ''' + Private Sub CreateDeviceResources() + ' Only calls if resources have not been initialize before + 'if (RenderTarget != null) + ' return; + SetRenderMode(_renderMode) + End Sub +#End Region + +#Region "SetRenderMode()" + Private Sub SetRenderMode(ByVal rm As RenderModes) + SyncLock renderSyncObject + _renderMode = rm + If (Not IsInitialized) AndAlso (Not isInitializing) Then + Return + End If + + 'clean up objects that will be invalid after RenderTarget change + If dcRenderTarget IsNot Nothing Then + dcRenderTarget.Dispose() + dcRenderTarget = Nothing + End If + If hwndRenderTarget IsNot Nothing Then + hwndRenderTarget.Dispose() + hwndRenderTarget = Nothing + End If + If bitmapRenderTarget IsNot Nothing Then + bitmapRenderTarget.Dispose() + bitmapRenderTarget = Nothing + End If + peelings.Clear() + _bitmap = Nothing 'the bitmap created in dc render target can't be used in hwnd render target + + ' Create the screen render target + Dim size = New SizeU(CUInt(ClientSize.Width), CUInt(ClientSize.Height)) + Dim props = New RenderTargetProperties With {.PixelFormat = New PixelFormat(Format.B8G8R8A8UNorm, AlphaMode.Ignore), .Usage = RenderTargetUsages.GdiCompatible} + + If _renderMode = RenderModes.DCRenderTarget OrElse _renderMode = RenderModes.BitmapRenderTargetOnPaint Then + dcRenderTarget = d2DFactory.CreateDCRenderTarget(props) + If _renderMode = RenderModes.BitmapRenderTargetOnPaint Then + bitmapRenderTarget = dcRenderTarget.CreateCompatibleRenderTarget(CompatibleRenderTargetOptions.GdiCompatible, New Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeF(ClientSize.Width, ClientSize.Height)) + End If + _render = Nothing + Else + hwndRenderTarget = d2DFactory.CreateHwndRenderTarget(props, New HwndRenderTargetProperties(Handle, size, Direct2D1.PresentOptions.RetainContents)) + If _renderMode = RenderModes.BitmapRenderTargetRealTime Then + bitmapRenderTarget = hwndRenderTarget.CreateCompatibleRenderTarget(CompatibleRenderTargetOptions.GdiCompatible, New Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeF(ClientSize.Width, ClientSize.Height)) + End If + _render = AddressOf RenderSceneInBackground + End If + + 'move all shapes to new rendertarget and refresh + For Each shape In drawingShapes + shape.Bitmap = Bitmap + shape.RenderTarget = RenderTarget + Next shape + RefreshAll() + End SyncLock + End Sub +#End Region + +#Region "OnResize()" + Protected Overrides Sub OnResize(ByVal e As EventArgs) + SyncLock renderSyncObject + If RenderTarget IsNot Nothing Then + ' Resize the render targrt to the actual host size + Dim size = New SizeU(CUInt(ClientSize.Width), CUInt(ClientSize.Height)) + If hwndRenderTarget IsNot Nothing Then + hwndRenderTarget.Resize(size) 'need to resize hwndRenderTarget to make its size same as the window's size + End If + If _renderMode = RenderModes.BitmapRenderTargetOnPaint Then + bitmapRenderTarget.Dispose() + bitmapRenderTarget = dcRenderTarget.CreateCompatibleRenderTarget(CompatibleRenderTargetOptions.GdiCompatible, New Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeF(ClientSize.Width, ClientSize.Height)) + _bitmap = Nothing 'the bitmap created in dc render target can't be used in hwnd render target + For Each shape In drawingShapes + shape.Bitmap = Bitmap + shape.RenderTarget = RenderTarget + Next shape + RefreshAll() + ElseIf _renderMode = RenderModes.BitmapRenderTargetRealTime Then + Debug.Assert(hwndRenderTarget IsNot Nothing) 'this should never be null considering the above + bitmapRenderTarget.Dispose() + bitmapRenderTarget = hwndRenderTarget.CreateCompatibleRenderTarget(CompatibleRenderTargetOptions.GdiCompatible, New Microsoft.WindowsAPICodePack.DirectX.Direct2D1.SizeF(ClientSize.Width, ClientSize.Height)) + _bitmap = Nothing 'the bitmap created in dc render target can't be used in hwnd render target + For Each shape In drawingShapes + shape.Bitmap = Bitmap + shape.RenderTarget = RenderTarget + Next shape + RefreshAll() + End If + End If + End SyncLock + MyBase.OnResize(e) + End Sub +#End Region + +#Region "OnBackColorChanged()" + Protected Overrides Sub OnBackColorChanged(ByVal e As EventArgs) + MyBase.OnBackColorChanged(e) + _backColorF = New ColorF(BackColor.R / 256.0F, BackColor.G / 256.0F, BackColor.B / 256.0F, 1.0F) + backgroundBrush = New SolidBrush(BackColor) + End Sub +#End Region + +#Region "OnForeColorChanged()" + Protected Overrides Sub OnForeColorChanged(ByVal e As EventArgs) + MyBase.OnForeColorChanged(e) + foregroundBrush = New SolidBrush(ForeColor) + End Sub +#End Region + +#Region "OnPaintBackground()" + Protected Overrides Sub OnPaintBackground(ByVal e As PaintEventArgs) + If (Not IsInitialized) OrElse DesignMode Then + e.Graphics.FillRectangle(backgroundBrush, ClientRectangle) + End If + End Sub +#End Region + +#Region "OnPaint()" + ''' + ''' for use with DcRenderTarget (though it would also work with HwndRenderTarget if GDI interop was not used) + ''' + ''' + Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) + If (Not IsInitialized) OrElse DesignMode Then + e.Graphics.DrawString("D2DShapesControl", Font, foregroundBrush, CSng(Width) / 2, CSng(Height) / 2) + Else + SyncLock renderSyncObject + If _renderMode = RenderModes.DCRenderTarget OrElse _renderMode = RenderModes.BitmapRenderTargetOnPaint Then + If dcRenderTarget Is Nothing Then + Return + End If + CalculateFPS() + If _renderMode = RenderModes.DCRenderTarget Then + 'render scene directly to DC + dcRenderTarget.BindDC(e.Graphics.GetHdc(), New Rect(Left, Top, Right, Bottom)) + RenderScene(dcRenderTarget) + e.Graphics.ReleaseHdc() + e.Graphics.DrawString(String.Format("OnPaint({0}) direct DC draw", DateTime.Now), Font, Brushes.White, 0, 2) + e.Graphics.DrawString(String.Format("OnPaint({0}) direct DC draw", DateTime.Now), Font, Brushes.Black, 1, 2) + ElseIf _renderMode = RenderModes.BitmapRenderTargetOnPaint Then + 'draw bitmap cache of the shapes to DC + dcRenderTarget.BindDC(e.Graphics.GetHdc(), New Rect(Left, Top, Right, Bottom)) + dcRenderTarget.BeginDraw() + dcRenderTarget.DrawBitmap(bitmapRenderTarget.Bitmap, 1.0F, BitmapInterpolationMode.NearestNeighbor, New RectF(0, 0, Width, Height)) + dcRenderTarget.EndDraw() + e.Graphics.ReleaseHdc() + e.Graphics.DrawString(String.Format("OnPaint({0}) DC DrawBitmap", DateTime.Now), Font, Brushes.White, 0, 2) + e.Graphics.DrawString(String.Format("OnPaint({0}) DC DrawBitmap", DateTime.Now), Font, Brushes.Black, 1, 2) + End If + End If + End SyncLock + End If + End Sub +#End Region + +#Region "RenderThreadProcedure()" + ''' + ''' The render thread procedure - calls. + ''' + Private Sub RenderThreadProcedure() + Do + SyncLock renderSyncObject + If _render IsNot Nothing Then + _render() + End If + End SyncLock + If _render Is Nothing Then + Thread.Sleep(1) + End If + Loop While killThread.WaitOne(0) = False + End Sub +#End Region + +#Region "RenderSceneInBackground()" + 'used with HwndRenderTarget + Private Sub RenderSceneInBackground() + If Parent Is Nothing OrElse _render Is Nothing Then + Return + End If + If _renderMode = RenderModes.HwndRenderTarget OrElse _renderMode = RenderModes.BitmapRenderTargetRealTime Then + If hwndRenderTarget Is Nothing OrElse hwndRenderTarget.IsOccluded Then + Return + End If + CalculateFPS() + If _renderMode = RenderModes.HwndRenderTarget Then + 'render scene directly on the control + RenderScene(hwndRenderTarget) + ElseIf _renderMode = RenderModes.BitmapRenderTargetRealTime Then + 'draw bitmap cache of the shapes to control + hwndRenderTarget.BeginDraw() + hwndRenderTarget.DrawBitmap(bitmapRenderTarget.Bitmap, 1.0F, BitmapInterpolationMode.NearestNeighbor, New RectF(0, 0, Width, Height)) + hwndRenderTarget.EndDraw() + End If + End If + End Sub +#End Region + +#Region "RenderScene()" + ''' + ''' Renders the scene to the given render target. + ''' Clears the scene, then draws all shapes + ''' + ''' The render target. + Private Sub RenderScene(ByVal renderTarget As RenderTarget) + Dim c As Cursor = Nothing + If _renderMode <> RenderModes.HwndRenderTarget Then + c = Cursor + Cursor = Cursors.WaitCursor + End If + renderTarget.BeginDraw() + renderTarget.Clear(BackColorF) + + For i As Integer = 0 To drawingShapes.Count - 1 + Dim shape As DrawingShape = drawingShapes(i) + 'tag with shape index for debugging + renderTarget.Tags = New Tags(CULng(i), 0) + shape.Draw(renderTarget) + Next i + Dim tags As Tags + Dim errorCode As ErrorCode + If Not renderTarget.TryEndDraw(tags, errorCode) Then + Debug.WriteLine(String.Format("Failed EndDraw. Error: {0}, tag1: {1}, tag2: {2}, shape[{1}]: {3}", errorCode, tags.Tag1, tags.Tag2, If(CInt(Fix(tags.Tag1)) < drawingShapes.Count, drawingShapes(CInt(Fix(tags.Tag1))).ToString(), ""))) + End If + If _renderMode <> RenderModes.HwndRenderTarget Then + Cursor = c + End If + End Sub +#End Region + +#Region "RefreshCompatibleRenderTarget()" + ''' + ''' Refreshes the compatible render target - the bitmap used for caching the scene + ''' for quick rendering when the control is redrawn + ''' + Private Sub RefreshCompatibleRenderTarget() + RenderScene(bitmapRenderTarget) + End Sub +#End Region + +#Region "AddToCompatibleRenderTarget()" + ''' + ''' Adds a shape to compatible render target - avoids the need to redraw all shapes. + ''' + ''' The shape. + Private Sub AddToCompatibleRenderTarget(ByVal shape As DrawingShape) + SyncLock renderSyncObject + bitmapRenderTarget.BeginDraw() + shape.Draw(bitmapRenderTarget) + bitmapRenderTarget.EndDraw() + End SyncLock + End Sub +#End Region + +#Region "CalculateFPS()" + ''' + ''' Calculates Frames Per Second if at least a second passed since previous update. + ''' Should be called whenever a frame is drawn on the control + ''' + Private Sub CalculateFPS() + Dim currentTickCount As Integer = Environment.TickCount + Dim ticks As Integer = currentTickCount - lastTickCount + If ticks >= 1000 Then + Fps = CSng(frameCount) * 1000 / ticks + frameCount = 0 + lastTickCount = currentTickCount + BeginInvoke(New MethodInvoker(Function() AnonymousMethod1())) + End If + frameCount += 1 + End Sub + + Private Function AnonymousMethod1() As Object + RaiseEvent _fpsChanged(Me, EventArgs.Empty) + Return Nothing + End Function +#End Region + +#Region "ClearShapes()" + ''' + ''' Clears all the shapes and invalidates the control and bitmap cache if one exists. + ''' + Public Sub ClearShapes() + SyncLock renderSyncObject + drawingShapes.Clear() + stats.Clear() + StatsString = "" + RaiseEvent _statsChanged(Me, EventArgs.Empty) + RefreshAll() + End SyncLock + End Sub +#End Region + +#Region "PeelShape()" + ''' + ''' Peels the shape from the end(top) of the list, + ''' updates the render targets and puts the peeled shape to the stack of peelings. + ''' + ''' + Friend Function PeelShape() As DrawingShape + SyncLock renderSyncObject + If drawingShapes.Count = 0 Then + Return Nothing + End If + Dim statName As String = drawingShapes(drawingShapes.Count - 1).GetType().Name.Replace("Shape", " count") + UpdateStats(statName, -1) + peelings.Push(drawingShapes(drawingShapes.Count - 1)) + drawingShapes.RemoveAt(drawingShapes.Count - 1) + RefreshAll() + Return peelings.Peek() + End SyncLock + End Function + + ''' + ''' Peels the specific shape. + ''' + ''' The shape. + Friend Sub PeelShape(ByVal shape As DrawingShape) + Debug.Assert(shape IsNot Nothing) + SyncLock renderSyncObject + Dim statName As String = shape.GetType().Name.Replace("Shape", " count") + UpdateStats(statName, -1) + peelings.Push(shape) + PeelShape(shape, drawingShapes) + RefreshAll() + End SyncLock + End Sub + + ''' + ''' Peels the shape recursively. + ''' + ''' The shape. + ''' The shapes. + ''' + Private Shared Function PeelShape(ByVal shape As DrawingShape, ByVal shapes As ICollection(Of DrawingShape)) As Boolean + For Each s In shapes + If s Is shape Then + shapes.Remove(shape) + Return True + End If + If s.ChildShapes IsNot Nothing AndAlso PeelShape(shape, s.ChildShapes) Then + Return True + End If + Next s + Return False + End Function +#End Region + +#Region "PeelAt()" + ''' + ''' Peels the top shape at a given point, + ''' updates the render targets and puts the peeled shape to the stack of peelings. + ''' + ''' + ''' + Friend Function PeelAt(ByVal point As Point2F) As DrawingShape + SyncLock renderSyncObject + Return PeelAtRecursive(point, drawingShapes) + End SyncLock + End Function +#End Region + +#Region "PeelAtRecursive()" + ''' + ''' Peels the top shape at a given point, + ''' updates the render targets and puts the peeled shape to the stack of peelings. + ''' Used to enable removing a child shape - eg. a top shape in a layer + ''' + ''' + ''' + ''' + Private Function PeelAtRecursive(ByVal point As Point2F, ByVal shapes As IList(Of DrawingShape)) As DrawingShape + For i As Integer = shapes.Count - 1 To 0 Step -1 + If shapes(i).HitTest(point) Then + If shapes(i).ChildShapes Is Nothing Then + Dim statName As String = shapes(i).GetType().Name.Replace("Shape", " count") + UpdateStats(statName, -1) + peelings.Push(shapes(i)) + shapes.RemoveAt(i) + RefreshAll() + Return peelings.Peek() + End If + Dim shapePeeled As DrawingShape = PeelAtRecursive(point, shapes(i).ChildShapes) + If shapePeeled Is Nothing Then + Dim statName As String = shapes(i).GetType().Name.Replace("Shape", " count") + UpdateStats(statName, -1) + peelings.Push(shapes(i)) + shapes.RemoveAt(i) + RefreshAll() + Return peelings.Peek() + End If + Return shapePeeled + End If + Next i + Return Nothing + End Function +#End Region + +#Region "UnpeelShape()" + ''' + ''' Puts a shape from the stack of peelings back to the list of shapes and invalidates the render targets. + ''' + ''' + Friend Function UnpeelShape() As DrawingShape + SyncLock renderSyncObject + If peelings.Count = 0 Then + Return Nothing + End If + Dim shape As DrawingShape = peelings.Peek() + Dim statName As String = shape.GetType().Name.Replace("Shape", " count") + UpdateStats(statName, 1) + drawingShapes.Add(peelings.Pop()) + If UsingCompatibleRenderTarget Then + AddToCompatibleRenderTarget(shape) + End If + InvalidateClientRectangle() + Return shape + End SyncLock + End Function +#End Region + +#Region "AddShape~()" +#Region "AddShape()" + ''' + ''' Adds the shape to the list and updates the render targets. + ''' + ''' The shape. + ''' + Private Function AddShape(ByVal shape As DrawingShape) As DrawingShape + SyncLock renderSyncObject + drawingShapes.Add(shape) + Dim statName As String = shape.GetType().Name.Replace("Shape", " count") + UpdateStats(statName, 1) + If UsingCompatibleRenderTarget Then + AddToCompatibleRenderTarget(shape) + End If + InvalidateClientRectangle() + Return shape + End SyncLock + End Function +#End Region + +#Region "AddRandomShape()" + ''' + ''' Adds a random shape. + ''' + ''' + Public Function AddRandomShape() As DrawingShape + Dim which As Double = random.NextDouble() + If which < 0.1 Then + Return AddLine() + End If + If which < 0.2 Then + Return AddRectangle() + End If + If which < 0.3 Then + Return AddRoundRect() + End If + If which < 0.4 Then + Return AddEllipse() + End If + If which < 0.5 Then + Return AddText() + End If + If which < 0.6 Then + Return AddBitmap() + End If + If which < 0.7 Then + Return AddGeometry() + End If + If which < 0.8 Then + Return AddMesh() + End If + If which < 0.9 Then + Return AddGDIEllipses(5) + End If + Return AddLayer(5) + End Function +#End Region + +#Region "AddRandomShapes(count)" + ''' + ''' Adds [count] random shapes. + ''' + ''' The count. + Public Sub AddRandomShapes(ByVal count As Integer) + For i As Integer = 0 To count - 1 + AddRandomShape() + Next i + End Sub +#End Region + +#Region "AddLine()" + ''' + ''' Adds a random line. + ''' + ''' + Public Function AddLine() As DrawingShape + Return AddShape(New LineShape(RenderTarget, random, d2DFactory, Bitmap)) + End Function +#End Region + +#Region "AddRectangle()" + ''' + ''' Adds a random rectangle. + ''' + ''' + Public Function AddRectangle() As DrawingShape + Return AddShape(New RectangleShape(RenderTarget, random, d2DFactory, Bitmap)) + End Function +#End Region + +#Region "AddRoundRect()" + ''' + ''' Adds a random round rect. + ''' + ''' + Public Function AddRoundRect() As DrawingShape + Return AddShape(New RoundRectangleShape(RenderTarget, random, d2DFactory, Bitmap)) + End Function +#End Region + +#Region "AddEllipse()" + ''' + ''' Adds a random ellipse. + ''' + ''' + Public Function AddEllipse() As DrawingShape + Return AddShape(New EllipseShape(RenderTarget, random, d2DFactory, Bitmap)) + End Function +#End Region + +#Region "AddText()" + ''' + ''' Adds a random text. + ''' + ''' + Public Function AddText() As DrawingShape + If random.NextDouble() < 0.5 Then + Return AddShape(New TextShape(RenderTarget, random, d2DFactory, Bitmap, dwriteFactory)) + End If + Return AddShape(New TextLayoutShape(RenderTarget, random, d2DFactory, Bitmap, dwriteFactory)) + End Function +#End Region + +#Region "AddBitmap()" + ''' + ''' Adds a random bitmap. + ''' + ''' + Public Function AddBitmap() As DrawingShape + Return AddShape(New BitmapShape(RenderTarget, random, d2DFactory, Bitmap)) + End Function +#End Region + +#Region "AddGeometry()" + ''' + ''' Adds a random geometry. + ''' + ''' + Public Function AddGeometry() As DrawingShape + Return AddShape(New GeometryShape(RenderTarget, random, d2DFactory, Bitmap)) + End Function +#End Region + +#Region "AddMesh()" + ''' + ''' Adds a random mesh. + ''' + ''' + Public Function AddMesh() As DrawingShape + Return AddShape(New MeshShape(RenderTarget, random, d2DFactory, Bitmap)) + End Function +#End Region + +#Region "AddGDIEllipses()" + ''' + ''' Adds [count] random GDI drawings (as a single shape). + ''' + ''' The count. + ''' + Public Function AddGDIEllipses(ByVal count As Integer) As DrawingShape + Return AddShape(New GDIEllipsesShape(RenderTarget, random, d2DFactory, Bitmap, count)) + End Function +#End Region + +#Region "AddLayer()" + ''' + ''' Adds a random layer with [count] random shapes in it. + ''' + ''' The count. + ''' + Public Function AddLayer(ByVal count As Integer) As DrawingShape + Return AddShape(New LayerShape(RenderTarget, random, d2DFactory, Bitmap, count)) + End Function +#End Region +#End Region + +#Region "UpdateStats()" + ''' + ''' Updates the statistics + ''' + ''' The stat to update + ''' The value by which to change the stat + Private Sub UpdateStats(ByVal stat As String, ByVal added As Integer) + If stats.ContainsKey(stat) Then + stats(stat) += added + Else + stats.Add(stat, added) + End If + StatsString = "" + For Each s In stats.Keys + StatsString = StatsString & s & ": " & stats(s) & Environment.NewLine + Next s + RaiseEvent _statsChanged(Me, EventArgs.Empty) + End Sub +#End Region + +#Region "GetTreeAt()" + ''' + ''' Gets the tree of shapes at the given point + ''' + ''' The point. + ''' + Friend Function GetTreeAt(ByVal point As Point2F) As TreeNode + SyncLock renderSyncObject + Dim root = New TreeNode("/") + AddChildShapesToTree(root, drawingShapes, point) + Return root + End SyncLock + End Function +#End Region + +#Region "AddChildShapesToTree()" + ''' + ''' Adds the child shapes to tree. + ''' + ''' The parent node. + ''' The list of shapes to add. + ''' The point at which child shapes should be checked. + Private Shared Sub AddChildShapesToTree(ByVal parent As TreeNode, ByVal shapes As IList(Of DrawingShape), ByVal point As Point2F) + For i As Integer = shapes.Count - 1 To 0 Step -1 + If shapes(i).HitTest(point) Then + Dim child = New TreeNode(shapes(i).ToString()) With {.Tag = shapes(i)} + child.Expand() + parent.Nodes.Add(child) + If shapes(i).ChildShapes IsNot Nothing Then + AddChildShapesToTree(child, shapes(i).ChildShapes, point) + End If + End If + Next i + End Sub +#End Region + +#Region "RefreshAll()" + Public Sub RefreshAll() + If UsingCompatibleRenderTarget Then + RefreshCompatibleRenderTarget() + End If + InvalidateClientRectangle() + End Sub +#End Region + +#Region "InvalidateClientRectangle()" + Private Sub InvalidateClientRectangle() + Invalidate(ClientRectangle, True) + End Sub +#End Region +#End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/D2DShapesControlWithButtons.Designer.vb b/source/Samples/DirectX/VB/Direct2D/D2DShapes/D2DShapesControlWithButtons.Designer.vb new file mode 100644 index 00000000..9926c0aa --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/D2DShapes/D2DShapesControlWithButtons.Designer.vb @@ -0,0 +1,501 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace D2DShapes + Partial Public Class D2DShapesControlWithButtons + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Component Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container() + Dim resources As New System.ComponentModel.ComponentResourceManager(GetType(D2DShapesControlWithButtons)) + Me.tabControl1 = New System.Windows.Forms.TabControl() + Me.tabPage1 = New System.Windows.Forms.TabPage() + Me.comboBoxRenderMode = New System.Windows.Forms.ComboBox() + Me.numericUpDown1 = New System.Windows.Forms.NumericUpDown() + Me.buttonAddLines = New System.Windows.Forms.Button() + Me.buttonAddRectangles = New System.Windows.Forms.Button() + Me.buttonUnpeel = New System.Windows.Forms.Button() + Me.buttonAddRoundRects = New System.Windows.Forms.Button() + Me.buttonPeelShape = New System.Windows.Forms.Button() + Me.buttonAddEllipses = New System.Windows.Forms.Button() + Me.buttonClear = New System.Windows.Forms.Button() + Me.buttonAddTexts = New System.Windows.Forms.Button() + Me.buttonAddLayer = New System.Windows.Forms.Button() + Me.buttonAddBitmaps = New System.Windows.Forms.Button() + Me.buttonAddGDI = New System.Windows.Forms.Button() + Me.buttonAddGeometries = New System.Windows.Forms.Button() + Me.buttonAddMeshes = New System.Windows.Forms.Button() + Me.tabPage2 = New System.Windows.Forms.TabPage() + Me.textBoxStats = New System.Windows.Forms.TextBox() + Me.tabPageShapes = New System.Windows.Forms.TabPage() + Me.splitContainer2 = New System.Windows.Forms.SplitContainer() + Me.tabControl2 = New System.Windows.Forms.TabControl() + Me.tabPageShapesAtPoint = New System.Windows.Forms.TabPage() + Me.treeViewShapesAtPoint = New System.Windows.Forms.TreeView() + Me.tabPageAllShapes = New System.Windows.Forms.TabPage() + Me.treeViewAllShapes = New System.Windows.Forms.TreeView() + Me.propertyGridShapeInfo = New System.Windows.Forms.PropertyGrid() + Me.labelFPS = New System.Windows.Forms.Label() + Me.splitContainer1 = New System.Windows.Forms.SplitContainer() + Me.timer1 = New System.Windows.Forms.Timer(Me.components) + Me.toolTip1 = New System.Windows.Forms.ToolTip(Me.components) + Me.d2dShapesControl = New D2DShapes.D2DShapesControl(Me.components) + Me.tabControl1.SuspendLayout() + Me.tabPage1.SuspendLayout() + CType(Me.numericUpDown1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.tabPage2.SuspendLayout() + Me.tabPageShapes.SuspendLayout() + Me.splitContainer2.Panel1.SuspendLayout() + Me.splitContainer2.Panel2.SuspendLayout() + Me.splitContainer2.SuspendLayout() + Me.tabControl2.SuspendLayout() + Me.tabPageShapesAtPoint.SuspendLayout() + Me.tabPageAllShapes.SuspendLayout() + Me.splitContainer1.Panel1.SuspendLayout() + Me.splitContainer1.Panel2.SuspendLayout() + Me.splitContainer1.SuspendLayout() + Me.SuspendLayout() + ' + ' tabControl1 + ' + Me.tabControl1.Anchor = (CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)) + Me.tabControl1.Controls.Add(Me.tabPage1) + Me.tabControl1.Controls.Add(Me.tabPage2) + Me.tabControl1.Controls.Add(Me.tabPageShapes) + Me.tabControl1.Location = New System.Drawing.Point(0, 0) + Me.tabControl1.Name = "tabControl1" + Me.tabControl1.SelectedIndex = 0 + Me.tabControl1.Size = New System.Drawing.Size(175, 444) + Me.tabControl1.TabIndex = 4 + ' + ' tabPage1 + ' + Me.tabPage1.BackColor = System.Drawing.SystemColors.Window + Me.tabPage1.Controls.Add(Me.numericUpDown1) + Me.tabPage1.Controls.Add(Me.buttonAddLines) + Me.tabPage1.Controls.Add(Me.buttonAddRectangles) + Me.tabPage1.Controls.Add(Me.buttonAddRoundRects) + Me.tabPage1.Controls.Add(Me.buttonAddEllipses) + Me.tabPage1.Controls.Add(Me.buttonAddTexts) + Me.tabPage1.Controls.Add(Me.buttonAddLayer) + Me.tabPage1.Controls.Add(Me.buttonAddBitmaps) + Me.tabPage1.Controls.Add(Me.buttonAddGDI) + Me.tabPage1.Controls.Add(Me.buttonAddGeometries) + Me.tabPage1.Controls.Add(Me.buttonAddMeshes) + Me.tabPage1.Location = New System.Drawing.Point(4, 22) + Me.tabPage1.Name = "tabPage1" + Me.tabPage1.Padding = New System.Windows.Forms.Padding(3) + Me.tabPage1.Size = New System.Drawing.Size(167, 418) + Me.tabPage1.TabIndex = 0 + Me.tabPage1.Text = "Edit" + ' + ' comboBoxRenderMode + ' + Me.comboBoxRenderMode.Anchor = (CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)) + Me.comboBoxRenderMode.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.comboBoxRenderMode.FormattingEnabled = True + Me.comboBoxRenderMode.Items.AddRange(New Object() { "DCRenderTarget", "BitmapRenderTarget OnPaint", "BitmapRenderTarget Real Time", "HwndRenderTarget"}) + Me.comboBoxRenderMode.Location = New System.Drawing.Point(7, 508) + Me.comboBoxRenderMode.Name = "comboBoxRenderMode" + Me.comboBoxRenderMode.Size = New System.Drawing.Size(164, 21) + Me.comboBoxRenderMode.TabIndex = 4 + Me.toolTip1.SetToolTip(Me.comboBoxRenderMode, resources.GetString("comboBoxRenderMode.ToolTip")) +' Me.comboBoxRenderMode.SelectedIndexChanged += New System.EventHandler(Me.comboBoxRenderMode_SelectedIndexChanged) + ' + ' numericUpDown1 + ' + Me.numericUpDown1.Location = New System.Drawing.Point(3, 6) + Me.numericUpDown1.Maximum = New Decimal(New Integer() { 1000, 0, 0, 0}) + Me.numericUpDown1.Name = "numericUpDown1" + Me.numericUpDown1.Size = New System.Drawing.Size(164, 20) + Me.numericUpDown1.TabIndex = 3 + Me.toolTip1.SetToolTip(Me.numericUpDown1, "Number of shapes to add at a time.") + Me.numericUpDown1.Value = New Decimal(New Integer() { 1, 0, 0, 0}) + ' + ' buttonAddLines + ' + Me.buttonAddLines.Location = New System.Drawing.Point(3, 32) + Me.buttonAddLines.Name = "buttonAddLines" + Me.buttonAddLines.Size = New System.Drawing.Size(164, 23) + Me.buttonAddLines.TabIndex = 0 + Me.buttonAddLines.Text = "Add Lines" + Me.buttonAddLines.UseVisualStyleBackColor = True +' Me.buttonAddLines.Click += New System.EventHandler(Me.buttonAddLines_Click) + ' + ' buttonAddRectangles + ' + Me.buttonAddRectangles.Location = New System.Drawing.Point(3, 61) + Me.buttonAddRectangles.Name = "buttonAddRectangles" + Me.buttonAddRectangles.Size = New System.Drawing.Size(164, 23) + Me.buttonAddRectangles.TabIndex = 0 + Me.buttonAddRectangles.Text = "Add Rectangles" + Me.buttonAddRectangles.UseVisualStyleBackColor = True +' Me.buttonAddRectangles.Click += New System.EventHandler(Me.buttonAddRectangles_Click) + ' + ' buttonUnpeel + ' + Me.buttonUnpeel.Anchor = (CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)) + Me.buttonUnpeel.Location = New System.Drawing.Point(89, 450) + Me.buttonUnpeel.Name = "buttonUnpeel" + Me.buttonUnpeel.Size = New System.Drawing.Size(82, 23) + Me.buttonUnpeel.TabIndex = 0 + Me.buttonUnpeel.Text = "Unpeel" + Me.toolTip1.SetToolTip(Me.buttonUnpeel, "Takes a shape from the top of the stack of ""peelings"" and puts it back onto the c" & "anvas") + Me.buttonUnpeel.UseVisualStyleBackColor = True +' Me.buttonUnpeel.Click += New System.EventHandler(Me.buttonUnpeel_Click) + ' + ' buttonAddRoundRects + ' + Me.buttonAddRoundRects.Location = New System.Drawing.Point(3, 90) + Me.buttonAddRoundRects.Name = "buttonAddRoundRects" + Me.buttonAddRoundRects.Size = New System.Drawing.Size(164, 23) + Me.buttonAddRoundRects.TabIndex = 0 + Me.buttonAddRoundRects.Text = "Add Rounded Rectangles" + Me.buttonAddRoundRects.UseVisualStyleBackColor = True +' Me.buttonAddRoundRects.Click += New System.EventHandler(Me.buttonAddRoundRects_Click) + ' + ' buttonPeelShape + ' + Me.buttonPeelShape.Anchor = (CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)) + Me.buttonPeelShape.Location = New System.Drawing.Point(7, 450) + Me.buttonPeelShape.Name = "buttonPeelShape" + Me.buttonPeelShape.Size = New System.Drawing.Size(76, 23) + Me.buttonPeelShape.TabIndex = 0 + Me.buttonPeelShape.Text = "Peel Shape" + Me.toolTip1.SetToolTip(Me.buttonPeelShape, "Removes the top shape from the canvas and puts it at the top of a stack of ""peeli" & "ngs""") + Me.buttonPeelShape.UseVisualStyleBackColor = True +' Me.buttonPeelShape.Click += New System.EventHandler(Me.buttonPeelShape_Click) + ' + ' buttonAddEllipses + ' + Me.buttonAddEllipses.Location = New System.Drawing.Point(3, 119) + Me.buttonAddEllipses.Name = "buttonAddEllipses" + Me.buttonAddEllipses.Size = New System.Drawing.Size(164, 23) + Me.buttonAddEllipses.TabIndex = 0 + Me.buttonAddEllipses.Text = "Add Ellipses" + Me.buttonAddEllipses.UseVisualStyleBackColor = True +' Me.buttonAddEllipses.Click += New System.EventHandler(Me.buttonAddEllipses_Click) + ' + ' buttonClear + ' + Me.buttonClear.Anchor = (CType(((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)) + Me.buttonClear.Location = New System.Drawing.Point(7, 479) + Me.buttonClear.Name = "buttonClear" + Me.buttonClear.Size = New System.Drawing.Size(164, 23) + Me.buttonClear.TabIndex = 0 + Me.buttonClear.Text = "Clear Shapes" + Me.toolTip1.SetToolTip(Me.buttonClear, "Clears all shapes from the canvas (peelings remain).") + Me.buttonClear.UseVisualStyleBackColor = True +' Me.buttonClear.Click += New System.EventHandler(Me.buttonClear_Click) + ' + ' buttonAddTexts + ' + Me.buttonAddTexts.Location = New System.Drawing.Point(3, 148) + Me.buttonAddTexts.Name = "buttonAddTexts" + Me.buttonAddTexts.Size = New System.Drawing.Size(164, 23) + Me.buttonAddTexts.TabIndex = 0 + Me.buttonAddTexts.Text = "Add Texts" + Me.buttonAddTexts.UseVisualStyleBackColor = True +' Me.buttonAddTexts.Click += New System.EventHandler(Me.buttonAddTexts_Click) + ' + ' buttonAddLayer + ' + Me.buttonAddLayer.Location = New System.Drawing.Point(3, 293) + Me.buttonAddLayer.Name = "buttonAddLayer" + Me.buttonAddLayer.Size = New System.Drawing.Size(164, 23) + Me.buttonAddLayer.TabIndex = 0 + Me.buttonAddLayer.Text = "Add Layer" + Me.toolTip1.SetToolTip(Me.buttonAddLayer, "A layer provides masking and grouping capability.") + Me.buttonAddLayer.UseVisualStyleBackColor = True +' Me.buttonAddLayer.Click += New System.EventHandler(Me.buttonAddLayer_Click) + ' + ' buttonAddBitmaps + ' + Me.buttonAddBitmaps.Location = New System.Drawing.Point(3, 177) + Me.buttonAddBitmaps.Name = "buttonAddBitmaps" + Me.buttonAddBitmaps.Size = New System.Drawing.Size(164, 23) + Me.buttonAddBitmaps.TabIndex = 0 + Me.buttonAddBitmaps.Text = "Add Bitmaps" + Me.buttonAddBitmaps.UseVisualStyleBackColor = True +' Me.buttonAddBitmaps.Click += New System.EventHandler(Me.buttonAddBitmaps_Click) + ' + ' buttonAddGDI + ' + Me.buttonAddGDI.Location = New System.Drawing.Point(3, 264) + Me.buttonAddGDI.Name = "buttonAddGDI" + Me.buttonAddGDI.Size = New System.Drawing.Size(164, 23) + Me.buttonAddGDI.TabIndex = 0 + Me.buttonAddGDI.Text = "Add GDI Ellipses" + Me.toolTip1.SetToolTip(Me.buttonAddGDI, "Ellipses drawn using GDI+ on a Direct2D render target.") + Me.buttonAddGDI.UseVisualStyleBackColor = True +' Me.buttonAddGDI.Click += New System.EventHandler(Me.buttonAddGDI_Click) + ' + ' buttonAddGeometries + ' + Me.buttonAddGeometries.Location = New System.Drawing.Point(3, 206) + Me.buttonAddGeometries.Name = "buttonAddGeometries" + Me.buttonAddGeometries.Size = New System.Drawing.Size(164, 23) + Me.buttonAddGeometries.TabIndex = 0 + Me.buttonAddGeometries.Text = "Add Geometries" + Me.buttonAddGeometries.UseVisualStyleBackColor = True +' Me.buttonAddGeometries.Click += New System.EventHandler(Me.buttonAddGeometries_Click) + ' + ' buttonAddMeshes + ' + Me.buttonAddMeshes.Location = New System.Drawing.Point(3, 235) + Me.buttonAddMeshes.Name = "buttonAddMeshes" + Me.buttonAddMeshes.Size = New System.Drawing.Size(164, 23) + Me.buttonAddMeshes.TabIndex = 0 + Me.buttonAddMeshes.Text = "Add Meshes" + Me.toolTip1.SetToolTip(Me.buttonAddMeshes, "Meshes consist of triangles. Here - they are either tesselated from random geomet" & "ries or assembled from random triangles.") + Me.buttonAddMeshes.UseVisualStyleBackColor = True +' Me.buttonAddMeshes.Click += New System.EventHandler(Me.buttonAddMeshes_Click) + ' + ' tabPage2 + ' + Me.tabPage2.BackColor = System.Drawing.SystemColors.Window + Me.tabPage2.Controls.Add(Me.textBoxStats) + Me.tabPage2.Location = New System.Drawing.Point(4, 22) + Me.tabPage2.Name = "tabPage2" + Me.tabPage2.Padding = New System.Windows.Forms.Padding(3) + Me.tabPage2.Size = New System.Drawing.Size(167, 418) + Me.tabPage2.TabIndex = 1 + Me.tabPage2.Text = "Stats" + ' + ' textBoxStats + ' + Me.textBoxStats.AcceptsReturn = True + Me.textBoxStats.AcceptsTab = True + Me.textBoxStats.Dock = System.Windows.Forms.DockStyle.Fill + Me.textBoxStats.Location = New System.Drawing.Point(3, 3) + Me.textBoxStats.Multiline = True + Me.textBoxStats.Name = "textBoxStats" + Me.textBoxStats.ReadOnly = True + Me.textBoxStats.ScrollBars = System.Windows.Forms.ScrollBars.Both + Me.textBoxStats.Size = New System.Drawing.Size(161, 412) + Me.textBoxStats.TabIndex = 3 + Me.textBoxStats.Text = "Stats:" + Me.textBoxStats.WordWrap = False + ' + ' tabPageShapes + ' + Me.tabPageShapes.Controls.Add(Me.splitContainer2) + Me.tabPageShapes.Location = New System.Drawing.Point(4, 22) + Me.tabPageShapes.Name = "tabPageShapes" + Me.tabPageShapes.Padding = New System.Windows.Forms.Padding(3) + Me.tabPageShapes.Size = New System.Drawing.Size(167, 418) + Me.tabPageShapes.TabIndex = 2 + Me.tabPageShapes.Text = "Shapes" + Me.tabPageShapes.UseVisualStyleBackColor = True + ' + ' splitContainer2 + ' + Me.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill + Me.splitContainer2.Location = New System.Drawing.Point(3, 3) + Me.splitContainer2.Name = "splitContainer2" + Me.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal + ' + ' splitContainer2.Panel1 + ' + Me.splitContainer2.Panel1.Controls.Add(Me.tabControl2) + ' + ' splitContainer2.Panel2 + ' + Me.splitContainer2.Panel2.Controls.Add(Me.propertyGridShapeInfo) + Me.splitContainer2.Size = New System.Drawing.Size(161, 412) + Me.splitContainer2.SplitterDistance = 205 + Me.splitContainer2.SplitterWidth = 6 + Me.splitContainer2.TabIndex = 4 + ' + ' tabControl2 + ' + Me.tabControl2.Controls.Add(Me.tabPageShapesAtPoint) + Me.tabControl2.Controls.Add(Me.tabPageAllShapes) + Me.tabControl2.Dock = System.Windows.Forms.DockStyle.Fill + Me.tabControl2.Location = New System.Drawing.Point(0, 0) + Me.tabControl2.Name = "tabControl2" + Me.tabControl2.SelectedIndex = 0 + Me.tabControl2.Size = New System.Drawing.Size(161, 205) + Me.tabControl2.TabIndex = 3 + ' + ' tabPageShapesAtPoint + ' + Me.tabPageShapesAtPoint.BackColor = System.Drawing.SystemColors.Window + Me.tabPageShapesAtPoint.Controls.Add(Me.treeViewShapesAtPoint) + Me.tabPageShapesAtPoint.Location = New System.Drawing.Point(4, 22) + Me.tabPageShapesAtPoint.Name = "tabPageShapesAtPoint" + Me.tabPageShapesAtPoint.Padding = New System.Windows.Forms.Padding(3) + Me.tabPageShapesAtPoint.Size = New System.Drawing.Size(153, 179) + Me.tabPageShapesAtPoint.TabIndex = 0 + Me.tabPageShapesAtPoint.Text = "Shapes Clicked" + ' + ' treeViewShapesAtPoint + ' + Me.treeViewShapesAtPoint.Dock = System.Windows.Forms.DockStyle.Fill + Me.treeViewShapesAtPoint.Location = New System.Drawing.Point(3, 3) + Me.treeViewShapesAtPoint.Name = "treeViewShapesAtPoint" + Me.treeViewShapesAtPoint.Size = New System.Drawing.Size(147, 173) + Me.treeViewShapesAtPoint.TabIndex = 2 + Me.toolTip1.SetToolTip(Me.treeViewShapesAtPoint, "List of shapes and hierarchies of shapes (for layers) at point clicked. Select to" & " view shape properties. Right click to peel specific shape.") +' Me.treeViewShapesAtPoint.AfterSelect += New System.Windows.Forms.TreeViewEventHandler(Me.treeViewShapes_AfterSelect) +' Me.treeViewShapesAtPoint.MouseDown += New System.Windows.Forms.MouseEventHandler(Me.treeViewShapes_MouseDown) + ' + ' tabPageAllShapes + ' + Me.tabPageAllShapes.Controls.Add(Me.treeViewAllShapes) + Me.tabPageAllShapes.Location = New System.Drawing.Point(4, 22) + Me.tabPageAllShapes.Name = "tabPageAllShapes" + Me.tabPageAllShapes.Padding = New System.Windows.Forms.Padding(3) + Me.tabPageAllShapes.Size = New System.Drawing.Size(153, 179) + Me.tabPageAllShapes.TabIndex = 1 + Me.tabPageAllShapes.Text = "All Shapes" + Me.tabPageAllShapes.UseVisualStyleBackColor = True + ' + ' treeViewAllShapes + ' + Me.treeViewAllShapes.Dock = System.Windows.Forms.DockStyle.Fill + Me.treeViewAllShapes.Location = New System.Drawing.Point(3, 3) + Me.treeViewAllShapes.Name = "treeViewAllShapes" + Me.treeViewAllShapes.Size = New System.Drawing.Size(147, 173) + Me.treeViewAllShapes.TabIndex = 3 + Me.toolTip1.SetToolTip(Me.treeViewAllShapes, "List of all shapes and hierarchies of shapes (for layers). Select to view shape p" & "roperties. Right click to peel specific shape.") +' Me.treeViewAllShapes.AfterSelect += New System.Windows.Forms.TreeViewEventHandler(Me.treeViewShapes_AfterSelect) +' Me.treeViewAllShapes.MouseDown += New System.Windows.Forms.MouseEventHandler(Me.treeViewShapes_MouseDown) + ' + ' propertyGridShapeInfo + ' + Me.propertyGridShapeInfo.Dock = System.Windows.Forms.DockStyle.Fill + Me.propertyGridShapeInfo.Location = New System.Drawing.Point(0, 0) + Me.propertyGridShapeInfo.Name = "propertyGridShapeInfo" + Me.propertyGridShapeInfo.Size = New System.Drawing.Size(161, 201) + Me.propertyGridShapeInfo.TabIndex = 0 +' Me.propertyGridShapeInfo.PropertyValueChanged += New System.Windows.Forms.PropertyValueChangedEventHandler(Me.propertyGridShapeInfo_PropertyValueChanged) + ' + ' labelFPS + ' + Me.labelFPS.Anchor = (CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles)) + Me.labelFPS.AutoSize = True + Me.labelFPS.Location = New System.Drawing.Point(3, 516) + Me.labelFPS.Name = "labelFPS" + Me.labelFPS.Size = New System.Drawing.Size(27, 13) + Me.labelFPS.TabIndex = 1 + Me.labelFPS.Text = "FPS" + Me.toolTip1.SetToolTip(Me.labelFPS, "Frames Per Second - only shows for real time render mode (HwndRenderTarget)") + ' + ' splitContainer1 + ' + Me.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill + Me.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2 + Me.splitContainer1.Location = New System.Drawing.Point(0, 0) + Me.splitContainer1.Name = "splitContainer1" + ' + ' splitContainer1.Panel1 + ' + Me.splitContainer1.Panel1.Controls.Add(Me.labelFPS) + Me.splitContainer1.Panel1.Controls.Add(Me.d2dShapesControl) + ' + ' splitContainer1.Panel2 + ' + Me.splitContainer1.Panel2.BackColor = System.Drawing.SystemColors.Window + Me.splitContainer1.Panel2.Controls.Add(Me.comboBoxRenderMode) + Me.splitContainer1.Panel2.Controls.Add(Me.tabControl1) + Me.splitContainer1.Panel2.Controls.Add(Me.buttonPeelShape) + Me.splitContainer1.Panel2.Controls.Add(Me.buttonClear) + Me.splitContainer1.Panel2.Controls.Add(Me.buttonUnpeel) + Me.splitContainer1.Size = New System.Drawing.Size(670, 533) + Me.splitContainer1.SplitterDistance = 487 + Me.splitContainer1.SplitterWidth = 6 + Me.splitContainer1.TabIndex = 5 + ' + ' d2dShapesControl + ' + Me.d2dShapesControl.Dock = System.Windows.Forms.DockStyle.Fill + Me.d2dShapesControl.Location = New System.Drawing.Point(0, 0) + Me.d2dShapesControl.Name = "d2dShapesControl" + Me.d2dShapesControl.Render = Nothing + Me.d2dShapesControl.RenderMode = D2DShapes.D2DShapesControl.RenderModes.BitmapRenderTargetOnPaint + Me.d2dShapesControl.Size = New System.Drawing.Size(487, 533) + Me.d2dShapesControl.TabIndex = 0 + Me.toolTip1.SetToolTip(Me.d2dShapesControl, "Left click to view details of the shape. Right click to peel shape.") +' Me.d2dShapesControl.StatsChanged += New System.EventHandler(Me.d2dShapesControl_StatsChanged) +' Me.d2dShapesControl.MouseUp += New System.Windows.Forms.MouseEventHandler(Me.d2dShapesControl_MouseUp) +' Me.d2dShapesControl.FpsChanged += New System.EventHandler(Me.d2dShapesControl_FpsChanged) + ' + ' D2DShapesControlWithButtons + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6F, 13F) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.Controls.Add(Me.splitContainer1) + Me.Name = "D2DShapesControlWithButtons" + Me.Size = New System.Drawing.Size(670, 533) + Me.tabControl1.ResumeLayout(False) + Me.tabPage1.ResumeLayout(False) + CType(Me.numericUpDown1, System.ComponentModel.ISupportInitialize).EndInit() + Me.tabPage2.ResumeLayout(False) + Me.tabPage2.PerformLayout() + Me.tabPageShapes.ResumeLayout(False) + Me.splitContainer2.Panel1.ResumeLayout(False) + Me.splitContainer2.Panel2.ResumeLayout(False) + Me.splitContainer2.ResumeLayout(False) + Me.tabControl2.ResumeLayout(False) + Me.tabPageShapesAtPoint.ResumeLayout(False) + Me.tabPageAllShapes.ResumeLayout(False) + Me.splitContainer1.Panel1.ResumeLayout(False) + Me.splitContainer1.Panel1.PerformLayout() + Me.splitContainer1.Panel2.ResumeLayout(False) + Me.splitContainer1.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + #End Region + + Private WithEvents d2dShapesControl As D2DShapesControl + Private WithEvents buttonAddBitmaps As System.Windows.Forms.Button + Private WithEvents buttonAddTexts As System.Windows.Forms.Button + Private WithEvents buttonAddEllipses As System.Windows.Forms.Button + Private WithEvents buttonAddRoundRects As System.Windows.Forms.Button + Private WithEvents buttonAddRectangles As System.Windows.Forms.Button + Private WithEvents buttonAddLines As System.Windows.Forms.Button + Private labelFPS As System.Windows.Forms.Label + Private WithEvents buttonClear As System.Windows.Forms.Button + Private WithEvents buttonAddGeometries As System.Windows.Forms.Button + Private WithEvents buttonPeelShape As System.Windows.Forms.Button + Private WithEvents buttonAddMeshes As System.Windows.Forms.Button + Private numericUpDown1 As System.Windows.Forms.NumericUpDown + Private WithEvents buttonAddLayer As System.Windows.Forms.Button + Private WithEvents buttonAddGDI As System.Windows.Forms.Button + Private WithEvents buttonUnpeel As System.Windows.Forms.Button + Private tabControl1 As System.Windows.Forms.TabControl + Private tabPage1 As System.Windows.Forms.TabPage + Private tabPage2 As System.Windows.Forms.TabPage + Private textBoxStats As System.Windows.Forms.TextBox + Private tabPageShapes As System.Windows.Forms.TabPage + Private WithEvents comboBoxRenderMode As System.Windows.Forms.ComboBox + Private WithEvents propertyGridShapeInfo As System.Windows.Forms.PropertyGrid + Private WithEvents treeViewShapesAtPoint As System.Windows.Forms.TreeView + Private splitContainer1 As System.Windows.Forms.SplitContainer + Private splitContainer2 As System.Windows.Forms.SplitContainer + Private tabControl2 As System.Windows.Forms.TabControl + Private tabPageShapesAtPoint As System.Windows.Forms.TabPage + Private tabPageAllShapes As System.Windows.Forms.TabPage + Private WithEvents treeViewAllShapes As System.Windows.Forms.TreeView + Private timer1 As System.Windows.Forms.Timer + Private components As System.ComponentModel.IContainer + Private toolTip1 As System.Windows.Forms.ToolTip + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/D2DShapesControlWithButtons.resx b/source/Samples/DirectX/VB/Direct2D/D2DShapes/D2DShapesControlWithButtons.resx new file mode 100644 index 00000000..f4961c39 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/D2DShapes/D2DShapesControlWithButtons.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 104, 17 + + + Render mode - the pattern to use for rendering the scene. +- DCRenderTarget - most simple mode - renders the whole scene every time the canvas needs to be redrawn +- BitmapRenderTarget OnPaint - cached, reasonable solution for fairly static images - renders the scene to a bitmap when the list of shapes changes and draws the bitmap to the canvas when it needs to be redrawn +- BitmapRenderTarget Real Time - cached, good for scenes with fairly static backgrounds with some animation on top - renders the scene to a bitmap when the list of shapes changes and draws the bitmap to the canvas in real time +- HwndRenderTarget - good for animations - renders the whole scene in real time (in a background thread) + + + 17, 17 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/D2DShapesControlWithButtons.vb b/source/Samples/DirectX/VB/Direct2D/D2DShapes/D2DShapesControlWithButtons.vb new file mode 100644 index 00000000..5827f545 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/D2DShapes/D2DShapesControlWithButtons.vb @@ -0,0 +1,234 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System.Windows.Forms +Imports System.ComponentModel +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 + +Namespace D2DShapes + Partial Public Class D2DShapesControlWithButtons + Inherits UserControl + #Region "NumberOfShapesToAdd" + _ + Public Property NumberOfShapesToAdd() As Integer + Get + Return CInt(Fix(numericUpDown1.Value)) + End Get + Set(ByVal value As Integer) + numericUpDown1.Value = value + End Set + End Property + #End Region + + #Region "D2DShapesControlWithButtons() - CTOR" + Public Sub New() + InitializeComponent() + comboBoxRenderMode.SelectedIndex = CInt(Fix(d2dShapesControl.RenderMode)) + End Sub + #End Region + + #Region "Initialize()" + Public Sub Initialize() + d2dShapesControl.Initialize() + End Sub + #End Region + + #Region "buttonAdd~ event handlers" + Private Sub buttonAddLines_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles buttonAddLines.Click + For i As Integer = 0 To CInt(Fix(numericUpDown1.Value)) - 1 + AddToTree(d2dShapesControl.AddLine()) + Next i + End Sub + + Private Sub buttonAddRectangles_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles buttonAddRectangles.Click + For i As Integer = 0 To CInt(Fix(numericUpDown1.Value)) - 1 + AddToTree(d2dShapesControl.AddRectangle()) + Next i + End Sub + + Private Sub buttonAddRoundRects_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles buttonAddRoundRects.Click + For i As Integer = 0 To CInt(Fix(numericUpDown1.Value)) - 1 + AddToTree(d2dShapesControl.AddRoundRect()) + Next i + End Sub + + Private Sub buttonAddEllipses_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles buttonAddEllipses.Click + For i As Integer = 0 To CInt(Fix(numericUpDown1.Value)) - 1 + AddToTree(d2dShapesControl.AddEllipse()) + Next i + End Sub + + Private Sub buttonAddTexts_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles buttonAddTexts.Click + For i As Integer = 0 To CInt(Fix(numericUpDown1.Value)) - 1 + AddToTree(d2dShapesControl.AddText()) + Next i + End Sub + + Private Sub buttonAddBitmaps_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles buttonAddBitmaps.Click + For i As Integer = 0 To CInt(Fix(numericUpDown1.Value)) - 1 + AddToTree(d2dShapesControl.AddBitmap()) + Next i + End Sub + + Private Sub buttonAddGeometries_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles buttonAddGeometries.Click + For i As Integer = 0 To CInt(Fix(numericUpDown1.Value)) - 1 + AddToTree(d2dShapesControl.AddGeometry()) + Next i + End Sub + + Private Sub buttonAddMeshes_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles buttonAddMeshes.Click + For i As Integer = 0 To CInt(Fix(numericUpDown1.Value)) - 1 + AddToTree(d2dShapesControl.AddMesh()) + Next i + End Sub + + Private Sub buttonAddGDI_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles buttonAddGDI.Click + AddToTree(d2dShapesControl.AddGDIEllipses(CInt(Fix(numericUpDown1.Value)))) + End Sub + + Private Sub buttonAddLayer_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles buttonAddLayer.Click + AddToTree(d2dShapesControl.AddLayer(CInt(Fix(numericUpDown1.Value)))) + End Sub + #End Region + + #Region "d2dShapesControl_FpsChanged" + Private Sub d2dShapesControl_FpsChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles d2dShapesControl.FpsChanged + labelFPS.Text = "FPS: " & d2dShapesControl.Fps + End Sub + #End Region + + #Region "d2dShapesControl_MouseUp" + Private Sub d2dShapesControl_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles d2dShapesControl.MouseUp + If e.Button = MouseButtons.Right Then + Dim shape As DrawingShape = d2dShapesControl.PeelAt(New Point2F(e.Location.X, e.Location.Y)) + If shape IsNot Nothing Then + RemoveFromTree(shape, treeViewAllShapes.Nodes) + End If + End If + treeViewShapesAtPoint.Nodes.Clear() + treeViewShapesAtPoint.Nodes.Add(d2dShapesControl.GetTreeAt(New Point2F(e.Location.X, e.Location.Y))) + treeViewShapesAtPoint.ExpandAll() + If treeViewShapesAtPoint.Nodes.Count > 0 Then + Dim nodeToSelect As TreeNode = treeViewShapesAtPoint.Nodes(0) + Do While nodeToSelect.Nodes.Count > 0 + nodeToSelect = nodeToSelect.Nodes(0) + Loop + treeViewShapesAtPoint.SelectedNode = nodeToSelect + If e.Button = MouseButtons.Left Then + tabControl1.SelectedTab = tabPageShapes + tabControl2.SelectedTab = tabPageShapesAtPoint + treeViewShapesAtPoint.Focus() + End If + End If + End Sub + #End Region + + #Region "d2dShapesControl_StatsChanged" + Private Sub d2dShapesControl_StatsChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles d2dShapesControl.StatsChanged + textBoxStats.Text = "Stats:" & System.Environment.NewLine & d2dShapesControl.StatsString + End Sub + #End Region + + #Region "buttonClear_Click" + Private Sub buttonClear_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles buttonClear.Click + d2dShapesControl.ClearShapes() + treeViewAllShapes.Nodes.Clear() + End Sub + #End Region + + #Region "buttonPeelShape_Click" + Private Sub buttonPeelShape_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles buttonPeelShape.Click + RemoveFromTree(d2dShapesControl.PeelShape(), treeViewAllShapes.Nodes) + End Sub + #End Region + + #Region "buttonUnpeel_Click" + Private Sub buttonUnpeel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles buttonUnpeel.Click + Dim shape As DrawingShape = d2dShapesControl.UnpeelShape() + If shape IsNot Nothing Then + AddToTree(shape) + End If + End Sub + #End Region + + #Region "comboBoxRenderMode_SelectedIndexChanged" + Private Sub comboBoxRenderMode_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles comboBoxRenderMode.SelectedIndexChanged + If comboBoxRenderMode.SelectedIndex >= 0 Then + d2dShapesControl.RenderMode = CType(comboBoxRenderMode.SelectedIndex, D2DShapesControl.RenderModes) + labelFPS.Visible = d2dShapesControl.RenderMode = D2DShapesControl.RenderModes.HwndRenderTarget + End If + End Sub + #End Region + + #Region "treeViewShapes_AfterSelect" + Private Sub treeViewShapes_AfterSelect(ByVal sender As Object, ByVal e As TreeViewEventArgs) Handles treeViewShapesAtPoint.AfterSelect, treeViewAllShapes.AfterSelect + Dim tree = CType(sender, TreeView) + If tree.SelectedNode IsNot Nothing AndAlso TypeOf tree.SelectedNode.Tag Is DrawingShape Then + propertyGridShapeInfo.SelectedObject = tree.SelectedNode.Tag + End If + End Sub + #End Region + + #Region "treeViewShapes_MouseDown" + Private Sub treeViewShapes_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles treeViewShapesAtPoint.MouseDown, treeViewAllShapes.MouseDown + Dim tree = CType(sender, TreeView) + Dim node As TreeNode = tree.HitTest(e.Location).Node + tree.SelectedNode = node + If e.Button = MouseButtons.Right AndAlso node IsNot Nothing Then + Dim shape = TryCast(node.Tag, DrawingShape) + If shape IsNot Nothing Then + RemoveFromTree(shape, treeViewAllShapes.Nodes) + RemoveFromTree(shape, treeViewShapesAtPoint.Nodes) + d2dShapesControl.PeelShape(shape) + End If + End If + End Sub + #End Region + + #Region "AddToTree" + Private Sub AddToTree(ByVal shape As DrawingShape) + AddToTreeRecursive(shape, treeViewAllShapes.Nodes) + End Sub + #End Region + + #Region "AddToTreeRecursive" + Private Shared Sub AddToTreeRecursive(ByVal shape As DrawingShape, ByVal treeNodeCollection As TreeNodeCollection) + Dim node = New TreeNode(shape.ToString()) With {.Tag = shape} + node.Expand() + treeNodeCollection.Add(node) + If shape.ChildShapes IsNot Nothing AndAlso shape.ChildShapes.Count > 0 Then + For Each s As DrawingShape In shape.ChildShapes + AddToTreeRecursive(s, node.Nodes) + Next s + End If + End Sub + #End Region + + #Region "RemoveFromTree" + ''' + ''' Remove shape from the tree node collection + ''' + ''' + ''' + ''' true if removed + Private Shared Function RemoveFromTree(ByVal shape As DrawingShape, ByVal treeNodes As TreeNodeCollection) As Boolean + For Each node As TreeNode In treeNodes + If node.Tag Is shape Then + treeNodes.Remove(node) + Return True + End If + If node.Nodes.Count > 0 AndAlso RemoveFromTree(shape, node.Nodes) Then + Return True + End If + Next node + Return False + End Function + #End Region + + #Region "propertyGridShapeInfo_PropertyValueChanged()" + Private Sub propertyGridShapeInfo_PropertyValueChanged(ByVal s As Object, ByVal e As PropertyValueChangedEventArgs) Handles propertyGridShapeInfo.PropertyValueChanged + d2dShapesControl.RefreshAll() + End Sub + #End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/DrawingShape.vb b/source/Samples/DirectX/VB/Direct2D/D2DShapes/DrawingShape.vb new file mode 100644 index 00000000..ce340795 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/D2DShapes/DrawingShape.vb @@ -0,0 +1,514 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +#If _D2DTRACE Then +Imports System.Diagnostics +#End If +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 + +Namespace D2DShapes + Public MustInherit Class DrawingShape + Implements IDisposable + #Region "Properties and Fields" + Private Shared shapesCreated As Integer + Private shapeID As Integer + Private privateRandom As Random + Protected Friend Property Random() As Random + Get + Return privateRandom + End Get + Set(ByVal value As Random) + privateRandom = value + End Set + End Property + Protected Friend d2DFactory As D2DFactory + +'INSTANT VB NOTE: The variable bitmap was renamed since Visual Basic does not allow class members with the same name: + Protected bitmap_Renamed As D2DBitmap + Friend Overridable Property Bitmap() As D2DBitmap + Get + Return bitmap_Renamed + End Get + Set(ByVal value As D2DBitmap) + bitmap_Renamed = value + End Set + End Property + + Private privateFillBrush As Brush + _ + Public Property FillBrush() As Brush + Get + Return privateFillBrush + End Get + Set(ByVal value As Brush) + privateFillBrush = value + End Set + End Property + + Private privatePenBrush As Brush + _ + Public Property PenBrush() As Brush + Get + Return privatePenBrush + End Get + Set(ByVal value As Brush) + privatePenBrush = value + End Set + End Property + + Private privateStrokeWidth As Single + Public Property StrokeWidth() As Single + Get + Return privateStrokeWidth + End Get + Set(ByVal value As Single) + privateStrokeWidth = value + End Set + End Property + + Private privateStrokeStyle As StrokeStyle + _ + Public Property StrokeStyle() As StrokeStyle + Get + Return privateStrokeStyle + End Get + Set(ByVal value As StrokeStyle) + privateStrokeStyle = value + End Set + End Property + + Protected Const FlatteningTolerance As Single = 5 + +'INSTANT VB NOTE: The variable renderTarget was renamed since Visual Basic does not allow class members with the same name: + Private renderTarget_Renamed As RenderTarget + _ + Public Property RenderTarget() As RenderTarget + Get + Return renderTarget_Renamed + End Get + Set(ByVal value As RenderTarget) + If renderTarget_Renamed IsNot value Then + ChangeRenderTarget(value) + renderTarget_Renamed = value + End If + End Set + End Property + + Protected coolStrokes As Boolean 'used by GeometryShape to create geometries from modified dashed strokes + + Public Overridable ReadOnly Property ChildShapes() As List(Of DrawingShape) + Get + Return Nothing + End Get + End Property + + Protected ReadOnly Property CanvasWidth() As Integer + Get + Return CInt(Fix(RenderTarget.PixelSize.Width)) + End Get + End Property + + Protected ReadOnly Property CanvasHeight() As Integer + Get + Return CInt(Fix(RenderTarget.PixelSize.Height)) + End Get + End Property + #End Region + + #Region "DrawingShape() - CTOR" + Protected Sub New(ByVal initialRenderTarget As RenderTarget, ByVal random As Random, ByVal d2DFactory As D2DFactory, ByVal bitmap As D2DBitmap) + renderTarget_Renamed = initialRenderTarget + Me.Random = random + Me.d2DFactory = d2DFactory + Me.bitmap_Renamed = bitmap + shapesCreated += 1 + shapeID = shapesCreated + End Sub + #End Region + + Public Overrides Function ToString() As String + Return shapeID & ":" & Me.GetType().Name + End Function + + #Region "Virtual methods" + ''' + ''' Draws the shape to the specified render target. + ''' + ''' The render target. +'INSTANT VB NOTE: The variable renderTarget was renamed since Visual Basic does not allow class members with the same name: + Protected Friend MustOverride Sub Draw(ByVal renderTarget_Renamed As RenderTarget) + ''' + ''' Changes the render target of the shape - need to create copies of all render target-dependent properties to the new render target. + ''' + ''' The render target. + Protected Friend MustOverride Sub ChangeRenderTarget(ByVal newRenderTarget As RenderTarget) + ''' + ''' Hit test of the shape. + ''' + ''' The point. + ''' true if the given point belongs to the shape + Public Overridable Function HitTest(ByVal point As Point2F) As Boolean + Return False + End Function + #End Region + + #Region "Methods to randomize properties of shapes" + #Region "CoinFlip" + Protected Friend ReadOnly Property CoinFlip() As Boolean + Get + Return Random.NextDouble() < 0.5 + End Get + End Property + #End Region + + #Region "RandomStrokeWidth()" + Protected Function RandomStrokeWidth() As Single + Dim ret As Single = CSng(32 * Random.NextDouble() * Random.NextDouble()) +#If _D2DTRACE Then + Trace.WriteLine("Stroke width: " & ret) +#End If + Return ret + End Function + #End Region + + #Region "RandomOpacity()" + Protected Function RandomOpacity() As Single + Dim ret As Single = Math.Min(1f, Math.Max(0f, 1.2f - CSng(Random.NextDouble() * 1.2))) +#If _D2DTRACE Then + Trace.WriteLine("Opacity: " & ret) +#End If + Return ret + End Function + #End Region + + #Region "RandomPoint()" + Protected Friend Function RandomPoint() As Point2F + previousPoint = New Point2F(CSng(Random.NextDouble()) * CanvasWidth, CSng(Random.NextDouble()) * CanvasHeight) +#If _D2DTRACE Then + Trace.WriteLine("Point: " & previousPoint.Value.X & "," & previousPoint.Value.Y) +#End If + Return previousPoint.Value + End Function + #End Region + + #Region "RandomNearPoint()" + Protected Friend previousPoint? As Point2F + Protected Friend Function RandomNearPoint() As Point2F + Dim ret As Point2F + If Not previousPoint.HasValue OrElse CoinFlip Then + ret = RandomPoint() + Else + ret = New Point2F(previousPoint.Value.X + CSng(Random.NextDouble()) * 100 - 50, previousPoint.Value.Y + CSng(Random.NextDouble()) * 100 - 50) + End If + previousPoint = ret +#If _D2DTRACE Then + Trace.WriteLine("Point: " & previousPoint.Value.X & "," & previousPoint.Value.Y) +#End If + Return ret + End Function + #End Region + + #Region "RandomRect()" + Protected Friend Function RandomRect(ByVal maxWidth As Single, ByVal maxHeight As Single) As RectF + Dim x1 As Single = CSng(Random.NextDouble()) * maxWidth + Dim x2 As Single = CSng(Random.NextDouble()) * maxWidth + Dim y1 As Single = CSng(Random.NextDouble()) * maxHeight + Dim y2 As Single = CSng(Random.NextDouble()) * maxHeight + 'return new RectF(x1, y1, x2, y2); + Dim ret As New RectF(Math.Min(x1, x2), Math.Min(y1, y2), Math.Max(x1, x2), Math.Max(y1, y2)) +#If _D2DTRACE Then + Trace.WriteLine("RectF: Left:" & ret.Left & ", Top:" & ret.Top & ", Right:" & ret.Right & ", Bottom:" & ret.Bottom) +#End If + Return ret + End Function + #End Region + + #Region "RandomBrush()" + Protected Friend Function RandomBrush() As Brush + Dim which As Double = Random.NextDouble() + If which < 0.5 Then + Return RandomSolidBrush() + End If + If which < 0.7 Then + Return RandomGradientBrush() + End If + If which < 0.9 Then + Return RandomRadialBrush() + End If + Return RandomBitmapBrush() + End Function + #End Region + + #Region "RandomSolidBrush()" + Protected Friend Function RandomSolidBrush() As SolidColorBrush +#If _D2DTRACE Then + Trace.WriteLine("SolidBrush:") +#End If + Return RenderTarget.CreateSolidColorBrush(RandomColor(), RandomBrushProperties()) + End Function + #End Region + + #Region "RandomGradientBrush()" + Protected Friend Function RandomGradientBrush() As LinearGradientBrush +#If _D2DTRACE Then + Trace.WriteLine("LinearGradientBrush:") +#End If + Return RenderTarget.CreateLinearGradientBrush(New LinearGradientBrushProperties(RandomPoint(), RandomPoint()), RandomGradientStopCollection(), RandomBrushProperties()) + End Function + #End Region + + #Region "RandomRadialBrush()" + Protected Friend Function RandomRadialBrush() As RadialGradientBrush +#If _D2DTRACE Then + Trace.WriteLine("RadialGradientBrush:") +#End If + Dim radiusX As Single = CSng(Random.NextDouble() * CanvasWidth) + Dim radiusY As Single = CSng(Random.NextDouble() * CanvasHeight) +#If _D2DTRACE Then + Trace.WriteLine("Radius: " & radiusX & "," & radiusY) +#End If + Return RenderTarget.CreateRadialGradientBrush(New RadialGradientBrushProperties(RandomPoint(), RandomPoint(), radiusX, radiusY), RandomGradientStopCollection(), RandomBrushProperties()) + End Function + #End Region + + #Region "RandomBitmapBrush()" + Private Function RandomBitmapBrush() As BitmapBrush +#If _D2DTRACE Then + Trace.WriteLine("SolidBrush:") +#End If + Dim interpolationMode As BitmapInterpolationMode = If(Random.NextDouble() < 0.25, BitmapInterpolationMode.Linear, BitmapInterpolationMode.NearestNeighbor) +#If _D2DTRACE Then + Trace.WriteLine("BitmapInterpolationMode: " & interpolationMode) +#End If + Dim ret As BitmapBrush = RenderTarget.CreateBitmapBrush(Bitmap, New BitmapBrushProperties(RandomExtendMode(), RandomExtendMode(), interpolationMode), New BrushProperties(RandomOpacity(), RandomMatrix3x2())) + Return ret + End Function + #End Region + + #Region "RandomGradientStopCollection()" + Private Function RandomGradientStopCollection() As GradientStopCollection + Dim stopsCount As Integer = Random.Next(2, 16) + Dim stopPoints = New List(Of Single)() + For i As Integer = 0 To stopsCount - 1 + stopPoints.Add(CSng(Random.NextDouble())) + Next i + stopPoints.Sort() + Dim stops = New GradientStop(stopsCount - 1){} + For i As Integer = 0 To stopsCount - 1 + stops(i) = New GradientStop(stopPoints(i), RandomColor()) + Next i + Dim gamma As Gamma = If(Random.NextDouble() < 0.7, gamma.StandardRgb, gamma.Linear) +#If _D2DTRACE Then + Trace.WriteLine("GradientStopCollection:") + Trace.WriteLine(" Gamma: " & gamma) + For Each [stop] In stops + Trace.WriteLine(String.Format(" GradientStop: Stop: {0}, Color (RGBA): {1},{2},{3},{4}", [stop].Position, [stop].Color.R, [stop].Color.G, [stop].Color.B, [stop].Color.A)) + Next [stop] +#End If + Return RenderTarget.CreateGradientStopCollection(stops, gamma, RandomExtendMode()) + End Function + #End Region + + #Region "RandomExtendMode()" + Private Function RandomExtendMode() As ExtendMode + Dim which As Double = Random.NextDouble() + Dim ret As ExtendMode = If(which < 0.33, ExtendMode.Wrap, If(which < 0.65, ExtendMode.Mirror, ExtendMode.Clamp)) +#If _D2DTRACE Then + Trace.WriteLine(" ExtendMode:" & ret) +#End If + Return ret + End Function + #End Region + + #Region "RandomBrushProperties()" + Private Function RandomBrushProperties() As BrushProperties + Dim opacity As Single = CSng(Random.NextDouble()) +#If _D2DTRACE Then + Trace.WriteLine("BrushProperties: Opacity: " & opacity) +#End If + Return New BrushProperties(opacity, RandomMatrix3x2()) + End Function + #End Region + + #Region "RandomMatrix3x2()" + Protected Friend Function RandomMatrix3x2() As Matrix3x2F + Dim which = Random.NextDouble() + 'return Matrix3x2F.Skew(90, 0); //check for bug 730701 + Dim ret As Matrix3x2F + If which < 0.5 Then + ret = New Matrix3x2F(1.0f - CSng(Random.NextDouble())*CSng(Random.NextDouble()), CSng(Random.NextDouble())*CSng(Random.NextDouble()), CSng(Random.NextDouble())*CSng(Random.NextDouble()), 1.0f - CSng(Random.NextDouble())*CSng(Random.NextDouble()), CSng(Random.NextDouble())*CSng(Random.NextDouble()), CSng(Random.NextDouble())*CSng(Random.NextDouble())) + TraceMatrix(ret) + Return ret + End If + If which < 0.8 Then + ret = Matrix3x2F.Identity + TraceMatrix(ret) + Return ret + End If + If which < 0.85 Then + ret = Matrix3x2F.Translation(Random.Next(-20, 20), Random.Next(-20, 20)) + TraceMatrix(ret) + Return ret + End If + If which < 0.90 Then + ret = Matrix3x2F.Skew(CSng(Random.NextDouble() * Random.NextDouble() * 89), CSng(Random.NextDouble() * Random.NextDouble() * 89),If(CoinFlip, New Point2F(0, 0), RandomPoint())) + TraceMatrix(ret) + Return ret + End If + If which < 0.95 Then + ret = Matrix3x2F.Scale(1 + CSng((Random.NextDouble() - 0.5) * Random.NextDouble()), 1 + CSng((Random.NextDouble() - 0.5) * Random.NextDouble()),If(CoinFlip, New Point2F(0, 0), RandomPoint())) + TraceMatrix(ret) + Return ret + End If + ret = Matrix3x2F.Rotation(CSng((Random.NextDouble() - 0.5) * Random.NextDouble() * 720),If(CoinFlip, New Point2F(0,0), RandomPoint())) + TraceMatrix(ret) + Return ret + End Function + + Private Shared Sub TraceMatrix(ByVal matrix As Matrix3x2F) +#If _D2DTRACE Then + Trace.WriteLine(String.Format(" Matrix3x2: {0}, {1}", matrix.M11, matrix.M12)) + Trace.WriteLine(String.Format(" {0}, {1}", matrix.M21, matrix.M22)) + Trace.WriteLine(String.Format(" {0}, {1}", matrix.M31, matrix.M32)) +#End If + End Sub + #End Region + + #Region "RandomColor()" + Protected Friend Function RandomColor() As ColorF + Dim ret As New ColorF(CSng(Random.NextDouble()), CSng(Random.NextDouble()), CSng(Random.NextDouble()), RandomOpacity()) +#If _D2DTRACE Then + Trace.WriteLine(String.Format("ColorF (RGBA): {0},{1},{2},{3}", ret.R, ret.G, ret.B, ret.A)) +#End If + Return ret + End Function + #End Region + + #Region "RandomStrokeStyle()" + Protected Friend Function RandomStrokeStyle() As StrokeStyle + Dim strokeStyleProperties = New StrokeStyleProperties(RandomCapStyle(), RandomCapStyle(), RandomCapStyle(), RandomLineJoin(), 1.0f + 2.0f * CSng(Random.NextDouble()), RandomDashStyle(), 5.0f * CSng(Random.NextDouble())) + If strokeStyleProperties.DashStyle = DashStyle.Custom Then + Return d2DFactory.CreateStrokeStyle(strokeStyleProperties, RandomDashes()) + Else + Return d2DFactory.CreateStrokeStyle(strokeStyleProperties) + End If + End Function + #End Region + + #Region "RandomDashes()" + Private Function RandomDashes() As Single() + Dim dashes = New Single(Random.Next(2, 20) - 1){} + For i As Integer = 0 To dashes.Length - 1 + dashes(i) = 3.0f * CSng(Random.NextDouble()) + Next i + Return dashes + End Function + #End Region + + #Region "RandomDashStyle()" + Private Function RandomDashStyle() As DashStyle + Dim which As Double = Random.NextDouble() + If (Not coolStrokes) AndAlso which < 0.5 Then + Return DashStyle.Solid + End If + If which < 0.75 Then + Return DashStyle.Custom + End If + Return CType(Random.Next(CInt(DashStyle.Dash), CInt(DashStyle.DashDotDot)), DashStyle) + End Function + #End Region + + #Region "RandomLineJoin()" + Private Function RandomLineJoin() As LineJoin + Return CType(Random.Next(0, 3), LineJoin) + End Function + #End Region + + #Region "RandomCapStyle()" + Private Function RandomCapStyle() As CapStyle + Return CType(Random.Next(0, 3), CapStyle) + End Function + #End Region + + #Region "RandomEllipse()" + Protected Friend Function RandomEllipse() As Ellipse + Return New Ellipse(RandomPoint(), CSng(0.5 * CanvasWidth * Random.NextDouble()), CSng(0.5 * CanvasHeight * Random.NextDouble())) + End Function + #End Region + + #Region "RandomRoundedRect()" + Protected Friend Function RandomRoundedRect() As RoundedRect + Return New RoundedRect(RandomRect(CanvasWidth, CanvasHeight), CSng(32 * Random.NextDouble()), CSng(32 * Random.NextDouble())) + End Function + #End Region + #End Region + + #Region "CopyBrushToRenderTarget()" + ''' + ''' Creates and returns a copy of the brush in the new render target. + ''' Used for changing render targets. + ''' A brush belongs to a render target, so when you want to draw with same brush in another render target + ''' - you need to create a copy of the brush in the new render target. + ''' + ''' The brush. + ''' The new render target. + ''' + Protected Friend Function CopyBrushToRenderTarget(ByVal sourceBrush As Brush, ByVal newRenderTarget As RenderTarget) As Brush + If sourceBrush Is Nothing OrElse newRenderTarget Is Nothing Then + Return Nothing + End If + Dim newBrush As Brush + If TypeOf sourceBrush Is SolidColorBrush Then + newBrush = newRenderTarget.CreateSolidColorBrush((CType(sourceBrush, SolidColorBrush)).Color, New BrushProperties(sourceBrush.Opacity, sourceBrush.Transform)) + sourceBrush.Dispose() + Return newBrush + End If + If TypeOf sourceBrush Is LinearGradientBrush Then + Dim oldGSC = (CType(sourceBrush, LinearGradientBrush)).GradientStops + Dim newGSC = newRenderTarget.CreateGradientStopCollection(oldGSC, oldGSC.ColorInterpolationGamma, oldGSC.ExtendMode) + oldGSC.Dispose() + newBrush = newRenderTarget.CreateLinearGradientBrush(New LinearGradientBrushProperties((CType(sourceBrush, LinearGradientBrush)).StartPoint, (CType(sourceBrush, LinearGradientBrush)).EndPoint), newGSC, New BrushProperties(sourceBrush.Opacity, sourceBrush.Transform)) + sourceBrush.Dispose() + Return newBrush + End If + If TypeOf sourceBrush Is RadialGradientBrush Then + Dim oldGSC = (CType(sourceBrush, RadialGradientBrush)).GradientStops + Dim newGSC = newRenderTarget.CreateGradientStopCollection(oldGSC, oldGSC.ColorInterpolationGamma, oldGSC.ExtendMode) + oldGSC.Dispose() + newBrush = newRenderTarget.CreateRadialGradientBrush(New RadialGradientBrushProperties((CType(sourceBrush, RadialGradientBrush)).Center, (CType(sourceBrush, RadialGradientBrush)).GradientOriginOffset, (CType(sourceBrush, RadialGradientBrush)).RadiusX, (CType(sourceBrush, RadialGradientBrush)).RadiusY), newGSC, New BrushProperties(sourceBrush.Opacity, sourceBrush.Transform)) + sourceBrush.Dispose() + Return newBrush + End If + If TypeOf sourceBrush Is BitmapBrush Then + newBrush = newRenderTarget.CreateBitmapBrush(Bitmap, New BitmapBrushProperties((CType(sourceBrush, BitmapBrush)).ExtendModeX, (CType(sourceBrush, BitmapBrush)).ExtendModeY, (CType(sourceBrush, BitmapBrush)).InterpolationMode), New BrushProperties(sourceBrush.Opacity, sourceBrush.Transform)) + sourceBrush.Dispose() + Return newBrush + End If + Throw New NotImplementedException("Unknown brush type used") + End Function + #End Region + + #Region "IDisposable.Dispose()" + Protected disposed As Boolean + Public Overridable Sub Dispose() Implements IDisposable.Dispose + If Not disposed Then + If FillBrush IsNot Nothing Then + FillBrush.Dispose() + FillBrush = Nothing + End If + If PenBrush IsNot Nothing Then + PenBrush.Dispose() + PenBrush = Nothing + End If + If StrokeStyle IsNot Nothing Then + StrokeStyle.Dispose() + StrokeStyle = Nothing + End If + End If + End Sub + #End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/EllipseShape.vb b/source/Samples/DirectX/VB/Direct2D/D2DShapes/EllipseShape.vb new file mode 100644 index 00000000..588ea4ed --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/D2DShapes/EllipseShape.vb @@ -0,0 +1,53 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 + +Namespace D2DShapes + Friend Class EllipseShape + Inherits DrawingShape + Friend ellipse As Ellipse + + Public Sub New(ByVal initialRenderTarget As RenderTarget, ByVal random As Random, ByVal d2DFactory As D2DFactory, ByVal bitmap As D2DBitmap) + MyBase.New(initialRenderTarget, random, d2DFactory, bitmap) + ellipse = RandomEllipse() + Dim which As Double = Random.NextDouble() + If which < 0.67 Then + PenBrush = RandomBrush() + End If + If which > 0.33 Then + FillBrush = RandomBrush() + End If + If CoinFlip Then + StrokeStyle = RandomStrokeStyle() + End If + StrokeWidth = RandomStrokeWidth() + End Sub + + Protected Friend Overrides Sub ChangeRenderTarget(ByVal newRenderTarget As RenderTarget) + PenBrush = CopyBrushToRenderTarget(PenBrush, newRenderTarget) + FillBrush = CopyBrushToRenderTarget(FillBrush, newRenderTarget) + End Sub + + Protected Friend Overrides Sub Draw(ByVal renderTarget As RenderTarget) + If FillBrush IsNot Nothing Then + renderTarget.FillEllipse(ellipse, FillBrush) + End If + If PenBrush IsNot Nothing Then + If StrokeStyle IsNot Nothing Then + renderTarget.DrawEllipse(ellipse, PenBrush, StrokeWidth, StrokeStyle) + Else + renderTarget.DrawEllipse(ellipse, PenBrush, StrokeWidth) + End If + End If + End Sub + + Public Overrides Function HitTest(ByVal point As Point2F) As Boolean + Dim g As EllipseGeometry = d2DFactory.CreateEllipseGeometry(ellipse) + Dim ret As Boolean = g.FillContainsPoint(point, 1) + g.Dispose() + Return ret + End Function + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/GDIEllipsesShape.vb b/source/Samples/DirectX/VB/Direct2D/D2DShapes/GDIEllipsesShape.vb new file mode 100644 index 00000000..f516ef60 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/D2DShapes/GDIEllipsesShape.vb @@ -0,0 +1,96 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Drawing +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D + +Namespace D2DShapes + Friend Class GDIEllipsesShape + Inherits DrawingShape + Private Structure GdiEllipse + Public pen As Pen + Public rect As Rectangle + End Structure + + Private ReadOnly ellipses As New List(Of GdiEllipse)() + Private gdiRenderTarget As GdiInteropRenderTarget + + Public Sub New(ByVal initialRenderTarget As RenderTarget, ByVal random As Random, ByVal d2DFactory As D2DFactory, ByVal bitmap As D2DBitmap, ByVal count As Integer) + MyBase.New(initialRenderTarget, random, d2DFactory, bitmap) + For i As Integer = 0 To count - 1 + ellipses.Add(RandomGdiEllipse()) + Next i + + If RenderTargetSupportsGDI(RenderTarget) Then + gdiRenderTarget = RenderTarget.GdiInteropRenderTarget + End If + End Sub + + Private Shared Function RenderTargetSupportsGDI(ByVal rt As RenderTarget) As Boolean + Dim propertiesToSupport = New RenderTargetProperties(RenderTargetType.Default, New PixelFormat(Format.B8G8R8A8UNorm, AlphaMode.Ignore), 96, 96, RenderTargetUsages.GdiCompatible, FeatureLevel.Default) + If rt.IsSupported(propertiesToSupport) Then + Return True + End If + propertiesToSupport = New RenderTargetProperties(RenderTargetType.Default, New PixelFormat(Format.B8G8R8A8UNorm, AlphaMode.Premultiplied), 96, 96, RenderTargetUsages.GdiCompatible, FeatureLevel.Default) + Return rt.IsSupported(propertiesToSupport) + End Function + + Private Function RandomGdiEllipse() As GdiEllipse + Return New GdiEllipse With {.pen = New Pen(Brushes.Black), .rect = RandomGdiRect()} + End Function + + Private Function RandomGdiRect() As Rectangle + Dim x1 As Integer = Random.Next(0, CanvasWidth) + Dim x2 As Integer = Random.Next(0, CanvasWidth) + Dim y1 As Integer = Random.Next(0, CanvasHeight) + Dim y2 As Integer = Random.Next(0, CanvasHeight) + Return New Rectangle(Math.Min(x1, x2), Math.Min(y1, y2), Math.Max(x1, x2) - Math.Min(x1, x2), Math.Max(y1, y2) - Math.Min(y1, y2)) + End Function + + Protected Friend Overrides Sub ChangeRenderTarget(ByVal newRenderTarget As RenderTarget) + If RenderTargetSupportsGDI(newRenderTarget) Then + gdiRenderTarget = newRenderTarget.GdiInteropRenderTarget + ElseIf gdiRenderTarget IsNot Nothing Then + gdiRenderTarget.Dispose() + gdiRenderTarget = Nothing + End If + End Sub + + Protected Friend Overrides Sub Draw(ByVal renderTarget As RenderTarget) + If gdiRenderTarget IsNot Nothing Then + Dim dc As IntPtr = gdiRenderTarget.GetDC(DCInitializeMode.Copy) + Dim g As Graphics = Graphics.FromHdc(dc) + For Each ellipse In ellipses + g.DrawEllipse(ellipse.pen, ellipse.rect) + Next ellipse + g.Dispose() + gdiRenderTarget.ReleaseDC() + End If + End Sub + + Public Overrides Function HitTest(ByVal point As Point2F) As Boolean + For Each ellipse In ellipses + + Dim g As EllipseGeometry = d2DFactory.CreateEllipseGeometry(New Ellipse(New Point2F((ellipse.rect.Left + ellipse.rect.Right) / 2.0F, (ellipse.rect.Top + ellipse.rect.Bottom) / 2.0F), ellipse.rect.Width / 2.0F, ellipse.rect.Height / 2.0F)) + Dim ret As Boolean = g.FillContainsPoint(point, 1) + g.Dispose() + If ret Then + Return True + End If + Next ellipse + Return False + End Function + + Public Overrides Sub Dispose() + If gdiRenderTarget IsNot Nothing Then + gdiRenderTarget.Dispose() + End If + gdiRenderTarget = Nothing + MyBase.Dispose() + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/GeometryShape.vb b/source/Samples/DirectX/VB/Direct2D/D2DShapes/GeometryShape.vb new file mode 100644 index 00000000..12b863f2 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/D2DShapes/GeometryShape.vb @@ -0,0 +1,272 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 + +Namespace D2DShapes + Friend Class GeometryShape + Inherits DrawingShape +'INSTANT VB NOTE: The variable geometry was renamed since Visual Basic does not allow class members with the same name: + Private geometry_Renamed As Geometry + Friend geometryOutlined As PathGeometry + Friend geometrySimplified As PathGeometry + Friend geometryWidened As PathGeometry + Friend worldTransform? As Matrix3x2F + + Public Sub New(ByVal initialRenderTarget As RenderTarget, ByVal random As Random, ByVal d2DFactory As D2DFactory, ByVal bitmap As D2DBitmap) + MyBase.New(initialRenderTarget, random, d2DFactory, bitmap) + coolStrokes = CoinFlip + Dim which As Double = Random.NextDouble() + If which < 0.67 OrElse coolStrokes Then + PenBrush = RandomBrush() + End If + If (Not coolStrokes) AndAlso which > 0.33 Then + FillBrush = RandomBrush() + End If + If coolStrokes OrElse CoinFlip Then + StrokeStyle = RandomStrokeStyle() + End If + If CoinFlip Then + worldTransform = RandomMatrix3x2() + End If + StrokeWidth = RandomStrokeWidth() + geometry_Renamed = RandomGeometry() + If coolStrokes OrElse Random.NextDouble() < 0.3 Then + ModifyGeometry() + End If + If coolStrokes AndAlso CoinFlip Then + ModifyGeometry() + End If + End Sub + + _ + Public Property Geometry() As Geometry + Get + Return geometry_Renamed + End Get + Set(ByVal value As Geometry) + geometry_Renamed = value + End Set + End Property + + Private Sub ModifyGeometry() + Dim geometrySink As GeometrySink + Dim which As Double = Random.NextDouble() + If which < 0.33 Then + geometryOutlined = d2DFactory.CreatePathGeometry() + geometrySink = geometryOutlined.Open() + geometry_Renamed.Outline(geometrySink, FlatteningTolerance) + geometrySink.Close() + geometrySink.Dispose() + geometry_Renamed.Dispose() + geometry_Renamed = geometryOutlined + ElseIf which < 0.67 Then + geometrySimplified = d2DFactory.CreatePathGeometry() + geometrySink = geometrySimplified.Open() + geometry_Renamed.Simplify(If(CoinFlip, GeometrySimplificationOption.Lines, GeometrySimplificationOption.CubicsAndLines), geometrySink, FlatteningTolerance) + geometrySink.Close() + geometrySink.Dispose() + geometry_Renamed.Dispose() + geometry_Renamed = geometrySimplified + Else + geometryWidened = d2DFactory.CreatePathGeometry() + geometrySink = geometryWidened.Open() + geometry_Renamed.Widen(RandomStrokeWidth(), RandomStrokeStyle(), geometrySink, FlatteningTolerance) + geometrySink.Close() + geometrySink.Dispose() + geometry_Renamed.Dispose() + geometry_Renamed = geometryWidened + End If + End Sub + + 'this could be called recursively + Public Function RandomGeometry() As Geometry + Return RandomGeometry(0) + End Function + + Public Function RandomGeometry(ByVal level As Integer) As Geometry + Dim which As Double = Random.NextDouble() + Dim g As Geometry = Nothing + + While g Is Nothing + If which < 0.2 Then + g = RandomEllipseGeometry() + ElseIf which < 0.4 Then + g = RandomRoundRectGeometry() + ElseIf which < 0.6 Then + g = RandomRectangleGeometry() + ElseIf which < 0.8 Then + g = RandomPathGeometry() + ElseIf level < 3 Then + g = RandomGeometryGroup(level + 1) + End If + End While + + If worldTransform.HasValue Then + g = d2DFactory.CreateTransformedGeometry(g, worldTransform.Value) + End If + Return g + End Function + + Private Function RandomTransformedGeometry() As Geometry + Dim start, ret As Geometry + start = RandomGeometry() + ret = d2DFactory.CreateTransformedGeometry(start, RandomMatrix3x2()) + start.Dispose() + Return ret + End Function + + Private Function RandomGeometryGroup(ByVal level As Integer) As Geometry + Dim geometries = New List(Of Geometry)() + Dim count As Integer = Random.Next(1, 5) + For i As Integer = 0 To count - 1 + geometries.Add(RandomGeometry(level)) + Next i + Dim ret As GeometryGroup = d2DFactory.CreateGeometryGroup(If(Random.NextDouble() < 0.5, FillMode.Winding, FillMode.Alternate), geometries) + For Each g In geometries + g.Dispose() + Next g + Return ret + End Function + + Private Function RandomPathGeometry() As PathGeometry + Dim g As PathGeometry = d2DFactory.CreatePathGeometry() + Dim totalSegmentCount As Integer = 0 + Dim figureCount As Integer = Random.Next(1, 2) + Using sink As GeometrySink = g.Open() + For f As Integer = 0 To figureCount - 1 + Dim segmentCount As Integer = Random.Next(2, 20) + AddRandomFigure(sink, segmentCount) + totalSegmentCount += segmentCount + Next f + sink.Close() + End Using + System.Diagnostics.Debug.Assert(g.SegmentCount = totalSegmentCount) + System.Diagnostics.Debug.Assert(g.FigureCount = figureCount) + Return g + End Function + + Private Sub AddRandomFigure(ByVal sink As IGeometrySink, ByVal segmentCount As Integer) + previousPoint = Nothing + sink.BeginFigure(RandomNearPoint(),If(CoinFlip, FigureBegin.Filled, FigureBegin.Hollow)) + Dim [end] As FigureEnd = If(CoinFlip, FigureEnd.Closed, FigureEnd.Closed) + If [end] = FigureEnd.Closed Then + segmentCount -= 1 + End If + If CoinFlip Then + For i As Integer = 0 To segmentCount - 1 + AddRandomSegment(sink) + Next i + Else + Dim which As Double = Random.NextDouble() + If which < 0.33 Then + sink.AddLines(RandomLines(segmentCount)) + ElseIf which < 0.67 Then + sink.AddQuadraticBeziers(RandomQuadraticBeziers(segmentCount)) + Else + sink.AddBeziers(RandomBeziers(segmentCount)) + End If + End If + sink.EndFigure([end]) + End Sub + + Private Function RandomLines(ByVal segmentCount As Integer) As IEnumerable(Of Point2F) + Dim lines = New List(Of Point2F)() + For i As Integer = 0 To segmentCount - 1 + lines.Add(RandomNearPoint()) + Next i + Return lines + End Function + + Private Function RandomQuadraticBeziers(ByVal segmentCount As Integer) As IEnumerable(Of QuadraticBezierSegment) + Dim beziers = New List(Of QuadraticBezierSegment)() + For i As Integer = 0 To segmentCount - 1 + beziers.Add(New QuadraticBezierSegment(RandomNearPoint(), RandomNearPoint())) + Next i + Return beziers + End Function + + Private Function RandomBeziers(ByVal segmentCount As Integer) As IEnumerable(Of BezierSegment) + Dim beziers = New List(Of BezierSegment)() + For i As Integer = 0 To segmentCount - 1 + beziers.Add(New BezierSegment(RandomNearPoint(), RandomNearPoint(), RandomNearPoint())) + Next i + Return beziers + End Function + + Private Sub AddRandomSegment(ByVal sink As IGeometrySink) + Dim which As Double = Random.NextDouble() + If which < 0.25 Then + sink.AddLine(RandomNearPoint()) + ElseIf which < 0.5 Then + sink.AddArc(RandomArc()) + ElseIf which < 0.75 Then + sink.AddBezier(RandomBezier()) + ElseIf which < 1.0 Then + sink.AddQuadraticBezier(RandomQuadraticBezier()) + End If + End Sub + + Private Function RandomQuadraticBezier() As QuadraticBezierSegment + Return New QuadraticBezierSegment(RandomNearPoint(), RandomNearPoint()) + End Function + + Private Function RandomBezier() As BezierSegment + Return New BezierSegment(RandomNearPoint(), RandomNearPoint(), RandomNearPoint()) + End Function + + Private Function RandomArc() As ArcSegment + Return New ArcSegment(RandomNearPoint(), RandomSize(), CSng(Random.NextDouble()) * 360,If(CoinFlip, SweepDirection.Clockwise, SweepDirection.CounterClockwise),If(CoinFlip, ArcSize.Large, ArcSize.Small)) + End Function + + Private Function RandomSize() As SizeF + Return New SizeF(CSng(Random.NextDouble()) * CanvasWidth, CSng(Random.NextDouble()) * CanvasHeight) + End Function + + Private Function RandomRoundRectGeometry() As RoundedRectangleGeometry + Return d2DFactory.CreateRoundedRectangleGeometry(RandomRoundedRect()) + End Function + + Private Function RandomRectangleGeometry() As RectangleGeometry + Return d2DFactory.CreateRectangleGeometry(RandomRect(CanvasWidth, CanvasHeight)) + End Function + + Private Function RandomEllipseGeometry() As EllipseGeometry + Return d2DFactory.CreateEllipseGeometry(RandomEllipse()) + End Function + + Protected Friend Overrides Sub ChangeRenderTarget(ByVal newRenderTarget As RenderTarget) + PenBrush = CopyBrushToRenderTarget(PenBrush, newRenderTarget) + FillBrush = CopyBrushToRenderTarget(FillBrush, newRenderTarget) + End Sub + + Protected Friend Overrides Sub Draw(ByVal renderTarget As RenderTarget) + Dim g As Geometry = geometry_Renamed + If FillBrush IsNot Nothing Then + renderTarget.FillGeometry(g, FillBrush, Nothing) + End If + If PenBrush IsNot Nothing Then + If StrokeStyle IsNot Nothing Then + renderTarget.DrawGeometry(g, PenBrush, StrokeWidth, StrokeStyle) + Else + renderTarget.DrawGeometry(g, PenBrush, StrokeWidth) + End If + End If + End Sub + + Public Overrides Function HitTest(ByVal point As Point2F) As Boolean + Return geometry_Renamed.FillContainsPoint(point, FlatteningTolerance) + End Function + + Public Overrides Sub Dispose() + If geometry_Renamed IsNot Nothing Then + geometry_Renamed.Dispose() + End If + geometry_Renamed = Nothing + MyBase.Dispose() + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/LayerShape.vb b/source/Samples/DirectX/VB/Direct2D/D2DShapes/LayerShape.vb new file mode 100644 index 00000000..ccce661b --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/D2DShapes/LayerShape.vb @@ -0,0 +1,170 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 + +Namespace D2DShapes + Friend Class LayerShape + Inherits DrawingShape + #Region "Properties" + Private ReadOnly shapes As New List(Of DrawingShape)() + Public Overrides ReadOnly Property ChildShapes() As List(Of DrawingShape) + Get + Return shapes + End Get + End Property + + Friend Overrides NotOverridable Property Bitmap() As D2DBitmap + Get + Return MyBase.Bitmap + End Get + Set(ByVal value As D2DBitmap) + MyBase.Bitmap = value + For Each shape In ChildShapes + shape.Bitmap = value + Next shape + End Set + End Property + +'INSTANT VB NOTE: The variable parameters was renamed since Visual Basic does not allow class members with the same name: + Private parameters_Renamed As LayerParameters + _ + Public Property Parameters() As LayerParameters + Get + Return parameters_Renamed + End Get + Set(ByVal value As LayerParameters) + parameters_Renamed = value + End Set + End Property + + Private privateLayer As Layer + _ + Public Property Layer() As Layer + Get + Return privateLayer + End Get + Set(ByVal value As Layer) + privateLayer = value + End Set + End Property + + Private privateGeometricMaskShape As GeometryShape + _ + Public Property GeometricMaskShape() As GeometryShape + Get + Return privateGeometricMaskShape + End Get + Set(ByVal value As GeometryShape) + privateGeometricMaskShape = value + End Set + End Property + #End Region + + Public Sub New(ByVal initialRenderTarget As RenderTarget, ByVal random As Random, ByVal d2DFactory As D2DFactory, ByVal bitmap As D2DBitmap, ByVal count As Integer) + MyBase.New(initialRenderTarget, random, d2DFactory, bitmap) + Parameters = New LayerParameters() + parameters_Renamed.ContentBounds = If(CoinFlip, RandomRect(CanvasWidth, CanvasHeight), New RectF(0, 0, CanvasWidth, CanvasHeight)) + If CoinFlip Then + GeometricMaskShape = New GeometryShape(initialRenderTarget, random, d2DFactory, Me.Bitmap) + parameters_Renamed.GeometricMask = GeometricMaskShape.Geometry + End If + parameters_Renamed.MaskAntialiasMode = If(CoinFlip, AntialiasMode.Aliased, AntialiasMode.PerPrimitive) + parameters_Renamed.MaskTransform = RandomMatrix3x2() + parameters_Renamed.Opacity = RandomOpacity() + If CoinFlip Then + parameters_Renamed.OpacityBrush = RandomOpacityBrush() + End If + parameters_Renamed.Options = If(CoinFlip, LayerOptions.InitializeForClearType, LayerOptions.None) + + For i As Integer = 0 To count - 1 + shapes.Add(RandomShape()) + Next i + End Sub + + Public Overrides Function HitTest(ByVal point As Point2F) As Boolean + Return parameters_Renamed.ContentBounds.Top <= point.Y AndAlso parameters_Renamed.ContentBounds.Bottom >= point.Y AndAlso parameters_Renamed.ContentBounds.Left <= point.X AndAlso parameters_Renamed.ContentBounds.Right >= point.X AndAlso (If(GeometricMaskShape IsNot Nothing, GeometricMaskShape.Geometry.FillContainsPoint(point, 5), True)) AndAlso parameters_Renamed.Opacity > 0 + End Function + + Private Function RandomShape() As DrawingShape + Dim which As Double = Random.NextDouble() + 'GDI does not work in layers + 'return new GDIEllipsesShape(RenderTarget, Random, d2DFactory, Bitmap, 1); + 'layers inside of layers can be really slow + 'if (which < 0.01) + ' return new LayerShape(RenderTarget, Random, d2DFactory, Bitmap, 1); + If which < 0.1 Then + Return New LineShape(RenderTarget, Random, d2DFactory, Bitmap) + End If + If which < 0.3 Then + Return New RectangleShape(RenderTarget, Random, d2DFactory, Bitmap) + End If + If which < 0.5 Then + Return New RoundRectangleShape(RenderTarget, Random, d2DFactory, Bitmap) + End If + If which < 0.6 Then + Return New BitmapShape(RenderTarget, Random, d2DFactory, Bitmap) + End If + If which < 0.8 Then + Return New EllipseShape(RenderTarget, Random, d2DFactory, Bitmap) + End If + Return New GeometryShape(RenderTarget, Random, d2DFactory, Bitmap) + End Function + + Private Function RandomOpacityBrush() As Brush + Return If(CoinFlip, CType(RandomRadialBrush(), Brush), RandomGradientBrush()) + End Function + + Protected Friend Overrides Sub ChangeRenderTarget(ByVal newRenderTarget As RenderTarget) + If GeometricMaskShape IsNot Nothing Then + GeometricMaskShape.Bitmap = Bitmap + GeometricMaskShape.RenderTarget = newRenderTarget + End If + If parameters_Renamed.OpacityBrush IsNot Nothing Then + parameters_Renamed.OpacityBrush = CopyBrushToRenderTarget(parameters_Renamed.OpacityBrush, newRenderTarget) + End If + For Each shape In ChildShapes + shape.Bitmap = Bitmap + shape.RenderTarget = newRenderTarget + Next shape + Layer = Nothing + End Sub + + Protected Friend Overrides Sub Draw(ByVal renderTarget As RenderTarget) + If Layer Is Nothing OrElse Layer.Size.Width <> renderTarget.Size.Width OrElse Layer.Size.Height <> renderTarget.Size.Height Then + If Layer IsNot Nothing Then + Layer.Dispose() + End If + Layer = renderTarget.CreateLayer(renderTarget.Size) + End If + renderTarget.PushLayer(Parameters, Layer) + For Each shape As DrawingShape In shapes + shape.Draw(renderTarget) + Next shape + renderTarget.PopLayer() + End Sub + + Public Overrides Sub Dispose() + For Each shape In ChildShapes + shape.Dispose() + Next shape + ChildShapes.Clear() + If parameters_Renamed.OpacityBrush IsNot Nothing Then + parameters_Renamed.OpacityBrush.Dispose() + End If + If GeometricMaskShape IsNot Nothing Then + GeometricMaskShape.Dispose() + End If + GeometricMaskShape = Nothing + parameters_Renamed.OpacityBrush = Nothing + If Layer IsNot Nothing Then + Layer.Dispose() + End If + Layer = Nothing + MyBase.Dispose() + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/LineShape.vb b/source/Samples/DirectX/VB/Direct2D/D2DShapes/LineShape.vb new file mode 100644 index 00000000..f1810e02 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/D2DShapes/LineShape.vb @@ -0,0 +1,35 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 + +Namespace D2DShapes + Friend Class LineShape + Inherits DrawingShape + Friend point0, point1 As Point2F + + Public Sub New(ByVal initialRenderTarget As RenderTarget, ByVal random As Random, ByVal d2DFactory As D2DFactory, ByVal bitmap As D2DBitmap) + MyBase.New(initialRenderTarget, random, d2DFactory, bitmap) + point0 = RandomPoint() + point1 = RandomPoint() + PenBrush = RandomBrush() + StrokeWidth = RandomStrokeWidth() + If CoinFlip Then + StrokeStyle = RandomStrokeStyle() + End If + End Sub + + Protected Friend Overrides Sub ChangeRenderTarget(ByVal newRenderTarget As RenderTarget) + PenBrush = CopyBrushToRenderTarget(PenBrush, newRenderTarget) + End Sub + + Protected Friend Overrides Sub Draw(ByVal renderTarget As RenderTarget) + If StrokeStyle IsNot Nothing Then + renderTarget.DrawLine(point0, point1, PenBrush, StrokeWidth, StrokeStyle) + Else + renderTarget.DrawLine(point0, point1, PenBrush, StrokeWidth) + End If + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/MeshShape.vb b/source/Samples/DirectX/VB/Direct2D/D2DShapes/MeshShape.vb new file mode 100644 index 00000000..72d71a1e --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/D2DShapes/MeshShape.vb @@ -0,0 +1,171 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 + +Namespace D2DShapes + Friend Class MeshShape + Inherits DrawingShape +'INSTANT VB NOTE: The variable mesh was renamed since Visual Basic does not allow class members with the same name: + Private mesh_Renamed As Mesh + Private triangles As List(Of Triangle) + Private geometry As GeometryShape + + Friend Overrides Property Bitmap() As D2DBitmap + Get + Return MyBase.Bitmap + End Get + Set(ByVal value As D2DBitmap) + MyBase.Bitmap = value + If geometry IsNot Nothing Then + geometry.Bitmap = value + End If + End Set + End Property + + Public Sub New(ByVal initialRenderTarget As RenderTarget, ByVal random As Random, ByVal d2DFactory As D2DFactory, ByVal bitmap As D2DBitmap) + MyBase.New(initialRenderTarget, random, d2DFactory, bitmap) + FillBrush = RandomBrush() + + mesh_Renamed = If(CoinFlip, MeshFromRandomGeometry(), MeshFromRandomTriangles()) + End Sub + + _ + Public Property Mesh() As Mesh + Get + Return mesh_Renamed + End Get + Set(ByVal value As Mesh) + mesh_Renamed = value + End Set + End Property + + Private Function MeshFromRandomTriangles() As Mesh + Dim m As Mesh = RenderTarget.CreateMesh() + Using sink As TessellationSink = m.Open() + Dim count As Integer = Random.Next(2, 20) + triangles = New List(Of Triangle)() + CreateRandomTriangles(count) + + sink.AddTriangles(triangles) + sink.Close() + End Using + Return m + End Function + + Private Sub CreateRandomTriangles(ByVal count As Integer) + Dim which = Random.NextDouble() + If which < 0.33 Then 'random triangles + For i As Integer = 0 To count - 1 + triangles.Add(New Triangle(RandomNearPoint(), RandomNearPoint(), RandomNearPoint())) + Next i + ElseIf which < 0.67 Then 'fan of triangles + Dim p1, p2, p3 As Point2F + p1 = RandomPoint() + p3 = RandomNearPoint() + For i As Integer = 0 To count - 1 + p2 = p3 + p3 = RandomNearPoint() + triangles.Add(New Triangle(p1, p2, p3)) + Next i + Else 'triangle strip + Dim p1, p2, p3 As Point2F + p2 = RandomPoint() + p3 = RandomNearPoint() + For i As Integer = 0 To count - 1 + p1 = p2 + p2 = p3 + p3 = RandomNearPoint() + triangles.Add(New Triangle(p1, p2, p3)) + Next i + End If + End Sub + + Private Function MeshFromRandomGeometry() As Mesh + If geometry IsNot Nothing Then + geometry.Dispose() + End If + geometry = New GeometryShape(RenderTarget, Random, d2DFactory, Bitmap) + Dim m As Mesh = RenderTarget.CreateMesh() + Dim sink As TessellationSink = m.Open() + If geometry.worldTransform.HasValue Then + geometry.Geometry.Tessellate(sink, FlatteningTolerance, geometry.worldTransform.Value) + Else + geometry.Geometry.Tessellate(sink, FlatteningTolerance) + End If + sink.Close() + sink.Dispose() + Return m + End Function + + Protected Friend Overrides Sub ChangeRenderTarget(ByVal newRenderTarget As RenderTarget) + Dim sink As TessellationSink + mesh_Renamed.Dispose() + mesh_Renamed = newRenderTarget.CreateMesh() + If geometry IsNot Nothing Then + geometry.RenderTarget = newRenderTarget + sink = mesh_Renamed.Open() + If geometry.worldTransform.HasValue Then + geometry.Geometry.Tessellate(sink, FlatteningTolerance, geometry.worldTransform.Value) + Else + geometry.Geometry.Tessellate(sink, FlatteningTolerance) + End If + Else + sink = mesh_Renamed.Open() + sink.AddTriangles(triangles) + End If + sink.Close() + sink.Dispose() + FillBrush = CopyBrushToRenderTarget(FillBrush, newRenderTarget) + End Sub + + Protected Friend Overrides Sub Draw(ByVal renderTarget As RenderTarget) + Dim stateBlock As DrawingStateBlock = d2DFactory.CreateDrawingStateBlock() + renderTarget.SaveDrawingState(stateBlock) + 'AntialiasMode push = RenderTarget.AntialiasMode; + renderTarget.AntialiasMode = AntialiasMode.Aliased + renderTarget.FillMesh(mesh_Renamed, FillBrush) + 'RenderTarget.AntialiasMode = push; + renderTarget.RestoreDrawingState(stateBlock) + stateBlock.Dispose() + End Sub + + Public Overrides Function HitTest(ByVal point As Point2F) As Boolean + If geometry IsNot Nothing Then + Return geometry.HitTest(point) + End If + If triangles IsNot Nothing Then + For Each triangle In triangles + If IsPointInTriangle(triangle, point) Then + Return True + End If + Next triangle + End If + Return False + End Function + + Private Shared Function IsPointInTriangle(ByVal triangle As Triangle, ByVal point As Point2F) As Boolean + 'no time to implement the proper algorithm, so let's just use a bounding rectangle... + Dim left As Single = Math.Min(triangle.Point1.X, Math.Min(triangle.Point2.X, triangle.Point3.X)) + Dim right As Single = Math.Max(triangle.Point1.X, Math.Max(triangle.Point2.X, triangle.Point3.X)) + Dim top As Single = Math.Min(triangle.Point1.Y, Math.Min(triangle.Point2.Y, triangle.Point3.Y)) + Dim bottom As Single = Math.Max(triangle.Point1.Y, Math.Max(triangle.Point2.Y, triangle.Point3.Y)) + Return point.X >= left AndAlso point.X <= right AndAlso point.Y >= top AndAlso point.Y <= bottom + End Function + + Public Overrides Sub Dispose() + If geometry IsNot Nothing Then + geometry.Dispose() + End If + geometry = Nothing + If mesh_Renamed IsNot Nothing Then + mesh_Renamed.Dispose() + End If + mesh_Renamed = Nothing + MyBase.Dispose() + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct2D/D2DShapes/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..d3555e1a --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/D2DShapes/My Project/AssemblyInfo.vb @@ -0,0 +1,39 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/Peacock.jpg b/source/Samples/DirectX/VB/Direct2D/D2DShapes/Peacock.jpg new file mode 100644 index 00000000..11b234b2 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct2D/D2DShapes/Peacock.jpg differ diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/RectangleShape.vb b/source/Samples/DirectX/VB/Direct2D/D2DShapes/RectangleShape.vb new file mode 100644 index 00000000..b25105f3 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/D2DShapes/RectangleShape.vb @@ -0,0 +1,50 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 + +Namespace D2DShapes + Friend Class RectangleShape + Inherits DrawingShape + Friend rect As RectF + + Public Sub New(ByVal initialRenderTarget As RenderTarget, ByVal random As Random, ByVal d2DFactory As D2DFactory, ByVal bitmap As D2DBitmap) + MyBase.New(initialRenderTarget, random, d2DFactory, bitmap) + rect = RandomRect(CanvasWidth, CanvasHeight) + Dim which As Double = Random.NextDouble() + If which < 0.67 Then + PenBrush = RandomBrush() + End If + If which > 0.33 Then + FillBrush = RandomBrush() + End If + If CoinFlip Then + StrokeStyle = RandomStrokeStyle() + End If + StrokeWidth = RandomStrokeWidth() + End Sub + + Protected Friend Overrides Sub ChangeRenderTarget(ByVal newRenderTarget As RenderTarget) + PenBrush = CopyBrushToRenderTarget(PenBrush, newRenderTarget) + FillBrush = CopyBrushToRenderTarget(FillBrush, newRenderTarget) + End Sub + + Protected Friend Overrides Sub Draw(ByVal renderTarget As RenderTarget) + If FillBrush IsNot Nothing Then + renderTarget.FillRectangle(rect, FillBrush) + End If + If PenBrush IsNot Nothing Then + If StrokeStyle IsNot Nothing Then + renderTarget.DrawRectangle(rect, PenBrush, StrokeWidth, StrokeStyle) + Else + renderTarget.DrawRectangle(rect, PenBrush, StrokeWidth) + End If + End If + End Sub + + Public Overrides Function HitTest(ByVal point As Point2F) As Boolean + Return point.X >= rect.Left AndAlso point.X <= rect.Right AndAlso point.Y >= rect.Top AndAlso point.Y <= rect.Bottom + End Function + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/RoundRectangleShape.vb b/source/Samples/DirectX/VB/Direct2D/D2DShapes/RoundRectangleShape.vb new file mode 100644 index 00000000..aff63cd9 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/D2DShapes/RoundRectangleShape.vb @@ -0,0 +1,53 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 + +Namespace D2DShapes + Friend Class RoundRectangleShape + Inherits DrawingShape + Friend rect As RoundedRect + + Public Sub New(ByVal initialRenderTarget As RenderTarget, ByVal random As Random, ByVal d2DFactory As D2DFactory, ByVal bitmap As D2DBitmap) + MyBase.New(initialRenderTarget, random, d2DFactory, bitmap) + rect = RandomRoundedRect() + Dim which As Double = Random.NextDouble() + If which < 0.67 Then + PenBrush = RandomBrush() + End If + If which > 0.33 Then + FillBrush = RandomBrush() + End If + If CoinFlip Then + StrokeStyle = RandomStrokeStyle() + End If + StrokeWidth = RandomStrokeWidth() + End Sub + + Protected Friend Overrides Sub ChangeRenderTarget(ByVal newRenderTarget As RenderTarget) + PenBrush = CopyBrushToRenderTarget(PenBrush, newRenderTarget) + FillBrush = CopyBrushToRenderTarget(FillBrush, newRenderTarget) + End Sub + + Protected Friend Overrides Sub Draw(ByVal renderTarget As RenderTarget) + If FillBrush IsNot Nothing Then + renderTarget.FillRoundedRectangle(rect, FillBrush) + End If + If PenBrush IsNot Nothing Then + If StrokeStyle IsNot Nothing Then + renderTarget.DrawRoundedRectangle(rect, PenBrush, StrokeWidth, StrokeStyle) + Else + renderTarget.DrawRoundedRectangle(rect, PenBrush, StrokeWidth) + End If + End If + End Sub + + Public Overrides Function HitTest(ByVal point As Point2F) As Boolean + Dim g As RoundedRectangleGeometry = d2DFactory.CreateRoundedRectangleGeometry(rect) + Dim ret As Boolean = g.FillContainsPoint(point, 1) + g.Dispose() + Return ret + End Function + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/TextLayoutShape.vb b/source/Samples/DirectX/VB/Direct2D/D2DShapes/TextLayoutShape.vb new file mode 100644 index 00000000..a0e0518e --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/D2DShapes/TextLayoutShape.vb @@ -0,0 +1,96 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.ComponentModel +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 +Imports Microsoft.WindowsAPICodePack.DirectX.DirectWrite +Imports System.Text + +Namespace D2DShapes + Friend Class TextLayoutShape + Inherits TextShape + Private privateTextLayout As TextLayout + _ + Public Property TextLayout() As TextLayout + Get + Return privateTextLayout + End Get + Set(ByVal value As TextLayout) + privateTextLayout = value + End Set + End Property + + Private privatePoint0 As Point2F + _ + Public Property Point0() As Point2F + Get + Return privatePoint0 + End Get + Set(ByVal value As Point2F) + privatePoint0 = value + End Set + End Property + + Public Sub New(ByVal initialRenderTarget As RenderTarget, ByVal random As Random, ByVal d2DFactory As D2DFactory, ByVal bitmap As D2DBitmap, ByVal dwriteFactory As DWriteFactory) + MyBase.New(initialRenderTarget, random, d2DFactory, bitmap, dwriteFactory) + RandomizeTextLayout() + Point0 = RandomPoint() + End Sub + + Private Sub RandomizeTextLayout() + TextLayout = dwriteFactory.CreateTextLayout(Text, TextFormat, Random.Next(50, Math.Max(100, CanvasWidth - CInt(Fix(Point0.X)))), Random.Next(50, Math.Max(100, CanvasHeight - CInt(Fix(Point0.Y))))) + If CoinFlip Then + TextLayout.SetUnderline(True, RandomTextRange()) + End If + If CoinFlip Then + TextLayout.SetStrikethrough(True, RandomTextRange()) + End If + If CoinFlip Then + TextLayout.LineSpacing = RandomLineSpacing(TextFormat.FontSize) + End If + If NiceGabriola Then + Dim t As TypographySettingCollection + t = dwriteFactory.CreateTypography() + t.Add(New FontFeature(FontFeatureTag.StylisticSet07, 1)) + TextLayout.SetTypography(t, New TextRange(0, CUInt(Text.Length))) + End If + End Sub + + Private Function RandomTextRange() As TextRange + Dim start = Random.Next(0, Text.Length - 5) + Dim length = Random.Next(1, Text.Length - start) + Return New TextRange(CUInt(start), CUInt(length)) + End Function + + Protected Friend Overrides Sub Draw(ByVal renderTarget As RenderTarget) + Dim stateBlock As DrawingStateBlock = d2DFactory.CreateDrawingStateBlock() + renderTarget.SaveDrawingState(stateBlock) + renderTarget.TextRenderingParams = RenderingParams + + If Options.HasValue Then + renderTarget.DrawTextLayout(Point0, TextLayout, FillBrush, Options.Value) + Else + renderTarget.DrawTextLayout(Point0, TextLayout, FillBrush) + End If + renderTarget.RestoreDrawingState(stateBlock) + stateBlock.Dispose() + End Sub + + Public Overrides Function HitTest(ByVal point As Point2F) As Boolean + 'bool isTrailingHit, isInside; + 'TextLayout.HitTestPoint(point.X, point.Y, out isTrailingHit, out isInside); + 'return (isTrailingHit || isInside); + 'the method below checks the layout box hit test instead of the DirectWrite method + Return point.X >= Point0.X AndAlso point.Y >= Point0.Y AndAlso point.X <= Point0.X + TextLayout.MaxWidth AndAlso point.Y <= Point0.Y + TextLayout.MaxHeight + End Function + + Public Overrides Sub Dispose() + If TextLayout IsNot Nothing Then + TextLayout.Dispose() + End If + TextLayout = Nothing + MyBase.Dispose() + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/D2DShapes/TextShape.vb b/source/Samples/DirectX/VB/Direct2D/D2DShapes/TextShape.vb new file mode 100644 index 00000000..6c75ae17 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/D2DShapes/TextShape.vb @@ -0,0 +1,196 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.ComponentModel +Imports System.Globalization +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 +Imports Microsoft.WindowsAPICodePack.DirectX.DirectWrite +Imports System.Text + +Namespace D2DShapes + Friend Class TextShape + Inherits DrawingShape + Private layoutRect As RectF + Protected Friend dwriteFactory As DWriteFactory + Protected Friend NiceGabriola As Boolean + + Private privateRenderingParams As RenderingParams + _ + Public Property RenderingParams() As RenderingParams + Get + Return privateRenderingParams + End Get + Set(ByVal value As RenderingParams) + privateRenderingParams = value + End Set + End Property + + Private privateOptions? As DrawTextOptions + _ + Public Property Options() As DrawTextOptions? + Get + Return privateOptions + End Get + Set(ByVal value? As DrawTextOptions) + privateOptions = value + End Set + End Property + + Private privateTextFormat As TextFormat + _ + Public Property TextFormat() As TextFormat + Get + Return privateTextFormat + End Get + Set(ByVal value As TextFormat) + privateTextFormat = value + End Set + End Property + + Private privateText As String + Public Property Text() As String + Get + Return privateText + End Get + Set(ByVal value As String) + privateText = value + End Set + End Property + + Public Sub New(ByVal initialRenderTarget As RenderTarget, ByVal random As Random, ByVal d2DFactory As D2DFactory, ByVal bitmap As D2DBitmap, ByVal dwriteFactory As DWriteFactory) + MyBase.New(initialRenderTarget, random, d2DFactory, bitmap) + Me.dwriteFactory = dwriteFactory + layoutRect = RandomRect(CanvasWidth, CanvasHeight) + NiceGabriola = random.NextDouble() < 0.25 And dwriteFactory.SystemFontFamilyCollection.Contains("Gabriola") + TextFormat = dwriteFactory.CreateTextFormat(RandomFontFamily(), RandomFontSize(), RandomFontWeight(), RandomFontStyle(), RandomFontStretch(), System.Globalization.CultureInfo.CurrentUICulture) + If CoinFlip Then + TextFormat.LineSpacing = RandomLineSpacing(TextFormat.FontSize) + End If + Text = RandomString(Random.Next(1000, 1000)) + + FillBrush = RandomBrush() + RenderingParams = RandomRenderingParams() + + If CoinFlip Then + Options = DrawTextOptions.None + If CoinFlip Then + Options = Options Or DrawTextOptions.Clip + End If + If CoinFlip Then + Options = Options Or DrawTextOptions.NoSnap + End If + End If + End Sub + + Protected Friend Function RandomRenderingParams() As RenderingParams + Dim rp As RenderingParams = dwriteFactory.CreateCustomRenderingParams(CSng(Math.Max(0.001, Math.Min(1, Random.NextDouble() * 2))), CSng(Math.Max(0, Math.Min(1, Random.NextDouble() * 3 - 1))), CSng(Math.Max(0, Math.Min(1, Random.NextDouble() * 3 - 1))), RandomPixelGeometry(), RandomRenderingMode()) + Return rp + End Function + + Private Function RandomPixelGeometry() As PixelGeometry + Return CType(Random.Next(0, 2), PixelGeometry) + End Function + + Private Function RandomRenderingMode() As RenderingMode + Return CType(Random.Next(0, 6), RenderingMode) + End Function + + Protected Friend Function RandomLineSpacing(ByVal fontSize As Single) As LineSpacing + Dim method As LineSpacingMethod = If(CoinFlip, LineSpacingMethod.Default, LineSpacingMethod.Uniform) + Dim spacing = CSng(Random.NextDouble()*fontSize*4 + 0.5) + Dim baseline = CSng(Random.NextDouble()) + Return New LineSpacing(method, spacing, baseline) + End Function + + Private Function RandomFontFamily() As String + If (NiceGabriola) Then + Return "Gabriola" + End If + If CoinFlip Then + 'get random font out of the list of installed fonts + Dim i As Integer = Random.Next(0, dwriteFactory.SystemFontFamilyCollection.Count - 1) + Dim f As FontFamily = dwriteFactory.SystemFontFamilyCollection(i) + Dim ret As String = Nothing + If (f.FamilyNames.ContainsKey(CultureInfo.CurrentUICulture)) Then + ret = f.FamilyNames(CultureInfo.CurrentUICulture) + ElseIf (f.FamilyNames.ContainsKey(CultureInfo.InvariantCulture)) Then + ret = f.FamilyNames(CultureInfo.InvariantCulture) + ElseIf (f.FamilyNames.ContainsKey(CultureInfo.GetCultureInfo("EN-us"))) Then + ret = f.FamilyNames(CultureInfo.GetCultureInfo("EN-us")) + Else + For Each c In f.FamilyNames.Keys + ret = f.FamilyNames(c) + Exit For + Next + End If + + f.Dispose() + Return ret + End If + 'get one of the common fonts + Return New String() {"Arial", "Times New Roman", "Courier New", "Impact", "Tahoma", "Calibri", "Consolas", "Segoe", "Cambria"}(Random.Next(0, 8)) + End Function + + Private Function RandomFontSize() As Single + Return 6 + CSng(138 * Random.NextDouble() * Random.NextDouble()) + End Function + + Private Function RandomFontWeight() As FontWeight + Return CType(Math.Min(950, 100 * Random.Next(1, 10)), FontWeight) + End Function + + Private Function RandomFontStyle() As FontStyle + Return CType(Random.Next(0, 2), FontStyle) + End Function + + Private Function RandomFontStretch() As FontStretch + Return CType(Random.Next(1, 9), FontStretch) + End Function + + Private Function RandomString(ByVal size As Integer) As String + Dim builder = New StringBuilder(size + 1) With {.Length = size} + builder(0) = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * Random.NextDouble() + 65))) + For i As Integer = 1 To size - 2 + builder(i) = If(Random.NextDouble() < 0.2, " "c, Convert.ToChar(Convert.ToInt32(Math.Floor(26 * Random.NextDouble() + 97)))) + Next i + builder(size - 1) = "."c + Return builder.ToString() + End Function + + Protected Friend Overrides Sub ChangeRenderTarget(ByVal newRenderTarget As RenderTarget) + FillBrush = CopyBrushToRenderTarget(FillBrush, newRenderTarget) + End Sub + + Protected Friend Overrides Sub Draw(ByVal renderTarget As RenderTarget) + Dim stateBlock As DrawingStateBlock = d2DFactory.CreateDrawingStateBlock() + renderTarget.SaveDrawingState(stateBlock) + renderTarget.TextRenderingParams = RenderingParams + + If Options.HasValue Then + renderTarget.DrawText(Text, TextFormat, layoutRect, FillBrush, Options.Value) + Else + renderTarget.DrawText(Text, TextFormat, layoutRect, FillBrush) + End If + + renderTarget.RestoreDrawingState(stateBlock) + stateBlock.Dispose() + End Sub + + Public Overrides Function HitTest(ByVal point As Point2F) As Boolean + Return point.X >= layoutRect.Left AndAlso point.Y >= layoutRect.Top AndAlso point.X <= layoutRect.Right AndAlso point.Y <= layoutRect.Bottom + End Function + + Public Overrides Sub Dispose() + If TextFormat IsNot Nothing Then + TextFormat.Dispose() + End If + TextFormat = Nothing + If RenderingParams IsNot Nothing Then + RenderingParams.Dispose() + End If + RenderingParams = Nothing + MyBase.Dispose() + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/BitmapShape.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/BitmapShape.vb new file mode 100644 index 00000000..4b2f50b8 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/BitmapShape.vb @@ -0,0 +1,33 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 + +Namespace D2DPaint + Friend Class BitmapShape + Inherits DrawingShape + Friend _rect As RectF + Friend _bitmap As D2DBitmap + Friend _transparency As Single + + Friend Sub New(ByVal parent As Paint2DForm, ByVal rect As RectF, ByVal bitmap As D2DBitmap, ByVal transparency As Single) + MyBase.New(parent) + _rect = rect + _bitmap = bitmap + _transparency = transparency + End Sub + + Protected Friend Overrides Sub Draw(ByVal renderTarget As RenderTarget) + renderTarget.DrawBitmap(_bitmap, _transparency, BitmapInterpolationMode.Linear, _rect) + End Sub + + Protected Friend Overrides WriteOnly Property EndPoint() As Point2F + Set(ByVal value As Point2F) + _rect.Right = Math.Max(_rect.Left + 5, value.X) + _rect.Bottom = Math.Max(_rect.Top + 5, value.Y) + End Set + End Property + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/BitmapUtilities.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/BitmapUtilities.vb new file mode 100644 index 00000000..8b5b6188 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/BitmapUtilities.vb @@ -0,0 +1,38 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 +Imports System.IO + +Namespace D2DPaint + Friend Class BitmapUtilities + Friend Shared Function LoadBitmapFromFile(ByVal renderTarget As RenderTarget, ByVal wicFactory As ImagingFactory, ByVal fileName As String) As D2DBitmap + + Dim decoder As BitmapDecoder = wicFactory.CreateDecoderFromFileName(fileName, DesiredAccess.Read, DecodeMetadataCacheOption.OnLoad) + Return CreateBitmapFromDecoder(renderTarget, wicFactory, decoder) + End Function + + Friend Shared Function LoadBitmapFromStream(ByVal renderTarget As RenderTarget, ByVal wicFactory As ImagingFactory, ByVal ioStream As Stream) As D2DBitmap + Dim decoder As BitmapDecoder = wicFactory.CreateDecoderFromStream(ioStream, DecodeMetadataCacheOption.OnLoad) + Return CreateBitmapFromDecoder(renderTarget, wicFactory, decoder) + End Function + + Private Shared Function CreateBitmapFromDecoder(ByVal renderTarget As RenderTarget, ByVal wicFactory As ImagingFactory, ByVal decoder As BitmapDecoder) As D2DBitmap + Dim source As BitmapFrameDecode + Dim converter As FormatConverter + ' Create the initial frame. + source = decoder.GetFrame(0) + + ' Convert the image format to 32bppPBGRA -- which Direct2D expects. + converter = wicFactory.CreateFormatConverter() + converter.Initialize(source.ToBitmapSource(), PixelFormats.Pbgra32Bpp, BitmapDitherType.None, BitmapPaletteType.MedianCut) + + ' Create a Direct2D bitmap from the WIC bitmap. + Return renderTarget.CreateBitmapFromWicBitmap(converter.ToBitmapSource()) + End Function + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/BrushDialog.Designer.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/BrushDialog.Designer.vb new file mode 100644 index 00000000..1a6032a3 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/BrushDialog.Designer.vb @@ -0,0 +1,593 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace D2DPaint + Partial Public Class BrushDialog + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Dim gammaLabel As System.Windows.Forms.Label + Dim label6 As System.Windows.Forms.Label + Dim label5 As System.Windows.Forms.Label + Dim label7 As System.Windows.Forms.Label + Me.transparencyValues = New System.Windows.Forms.ComboBox + Me.transparency = New System.Windows.Forms.Label + Me.solidColorButton = New System.Windows.Forms.Button + Me.colorLabel = New System.Windows.Forms.Label + Me.colorDialog1 = New System.Windows.Forms.ColorDialog + Me.addBrushButton = New System.Windows.Forms.Button + Me.brushesTabs = New System.Windows.Forms.TabControl + Me.solidColorPage = New System.Windows.Forms.TabPage + Me.bitmapBrushPage = New System.Windows.Forms.TabPage + Me.imageFileLabel = New System.Windows.Forms.Label + Me.extendedModeYComboBox = New System.Windows.Forms.ComboBox + Me.extendedModeXComboBox = New System.Windows.Forms.ComboBox + Me.comboBox2 = New System.Windows.Forms.ComboBox + Me.label4 = New System.Windows.Forms.Label + Me.label3 = New System.Windows.Forms.Label + Me.comboBox1 = New System.Windows.Forms.ComboBox + Me.label2 = New System.Windows.Forms.Label + Me.label1 = New System.Windows.Forms.Label + Me.addBitmapBrushBotton = New System.Windows.Forms.Button + Me.button2 = New System.Windows.Forms.Button + Me.linearBrushPage = New System.Windows.Forms.TabPage + Me.button3 = New System.Windows.Forms.Button + Me.gradBrushExtendModeCombo = New System.Windows.Forms.ComboBox + Me.gammaComboBox = New System.Windows.Forms.ComboBox + Me.gradBrushColor2Label = New System.Windows.Forms.Label + Me.gradBrushColor1Label = New System.Windows.Forms.Label + Me.gradiantBrushColor2Button = New System.Windows.Forms.Button + Me.gradiantBrushColor1button = New System.Windows.Forms.Button + Me.graidantBrushPage = New System.Windows.Forms.TabPage + Me.button4 = New System.Windows.Forms.Button + Me.radialExtendCombo = New System.Windows.Forms.ComboBox + Me.radialGammaCombo = New System.Windows.Forms.ComboBox + Me.radialBrushColor2Label = New System.Windows.Forms.Label + Me.radialBrushColor1Label = New System.Windows.Forms.Label + Me.SelectRadialColor2 = New System.Windows.Forms.Button + Me.SelectRadialColor1 = New System.Windows.Forms.Button + Me.brushesList = New System.Windows.Forms.ListBox + Me.button1 = New System.Windows.Forms.Button + gammaLabel = New System.Windows.Forms.Label + label6 = New System.Windows.Forms.Label + label5 = New System.Windows.Forms.Label + label7 = New System.Windows.Forms.Label + Me.brushesTabs.SuspendLayout() + Me.solidColorPage.SuspendLayout() + Me.bitmapBrushPage.SuspendLayout() + Me.linearBrushPage.SuspendLayout() + Me.graidantBrushPage.SuspendLayout() + Me.SuspendLayout() + ' + 'gammaLabel + ' + gammaLabel.AutoSize = True + gammaLabel.Location = New System.Drawing.Point(16, 97) + gammaLabel.Name = "gammaLabel" + gammaLabel.Size = New System.Drawing.Size(43, 13) + gammaLabel.TabIndex = 4 + gammaLabel.Text = "Gamma" + ' + 'label6 + ' + label6.AutoSize = True + label6.Location = New System.Drawing.Point(16, 128) + label6.Name = "label6" + label6.Size = New System.Drawing.Size(70, 13) + label6.TabIndex = 5 + label6.Text = "Extend Mode" + ' + 'label5 + ' + label5.AutoSize = True + label5.Location = New System.Drawing.Point(43, 136) + label5.Name = "label5" + label5.Size = New System.Drawing.Size(70, 13) + label5.TabIndex = 13 + label5.Text = "Extend Mode" + ' + 'label7 + ' + label7.AutoSize = True + label7.Location = New System.Drawing.Point(43, 105) + label7.Name = "label7" + label7.Size = New System.Drawing.Size(43, 13) + label7.TabIndex = 12 + label7.Text = "Gamma" + ' + 'transparencyValues + ' + Me.transparencyValues.FormattingEnabled = True + Me.transparencyValues.Items.AddRange(New Object() {"0.00", "0.10", "0.25", "0.40", "0.50", "0.60", "0.75", "0.90", "0.95", "1.00"}) + Me.transparencyValues.Location = New System.Drawing.Point(161, 67) + Me.transparencyValues.Name = "transparencyValues" + Me.transparencyValues.Size = New System.Drawing.Size(121, 21) + Me.transparencyValues.TabIndex = 3 + Me.transparencyValues.Text = "1.00" + ' + 'transparency + ' + Me.transparency.AutoSize = True + Me.transparency.BackColor = System.Drawing.SystemColors.ButtonHighlight + Me.transparency.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.transparency.Location = New System.Drawing.Point(24, 65) + Me.transparency.MinimumSize = New System.Drawing.Size(113, 23) + Me.transparency.Name = "transparency" + Me.transparency.Size = New System.Drawing.Size(113, 23) + Me.transparency.TabIndex = 2 + Me.transparency.Text = "Transparency" + ' + 'solidColorButton + ' + Me.solidColorButton.Location = New System.Drawing.Point(24, 32) + Me.solidColorButton.Name = "solidColorButton" + Me.solidColorButton.Size = New System.Drawing.Size(113, 23) + Me.solidColorButton.TabIndex = 1 + Me.solidColorButton.Text = "Select Color..." + Me.solidColorButton.UseVisualStyleBackColor = True + ' + 'colorLabel + ' + Me.colorLabel.AutoSize = True + Me.colorLabel.BackColor = System.Drawing.SystemColors.ButtonHighlight + Me.colorLabel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.colorLabel.Location = New System.Drawing.Point(161, 32) + Me.colorLabel.MinimumSize = New System.Drawing.Size(130, 23) + Me.colorLabel.Name = "colorLabel" + Me.colorLabel.Size = New System.Drawing.Size(130, 23) + Me.colorLabel.TabIndex = 0 + Me.colorLabel.Text = "R = 0, G = 0, B = 0, A = 1" + ' + 'addBrushButton + ' + Me.addBrushButton.Location = New System.Drawing.Point(114, 193) + Me.addBrushButton.Name = "addBrushButton" + Me.addBrushButton.Size = New System.Drawing.Size(75, 23) + Me.addBrushButton.TabIndex = 2 + Me.addBrushButton.Text = "Add Brush" + Me.addBrushButton.UseVisualStyleBackColor = True + ' + 'brushesTabs + ' + Me.brushesTabs.Controls.Add(Me.solidColorPage) + Me.brushesTabs.Controls.Add(Me.bitmapBrushPage) + Me.brushesTabs.Controls.Add(Me.linearBrushPage) + Me.brushesTabs.Controls.Add(Me.graidantBrushPage) + Me.brushesTabs.Location = New System.Drawing.Point(12, 12) + Me.brushesTabs.Name = "brushesTabs" + Me.brushesTabs.SelectedIndex = 0 + Me.brushesTabs.Size = New System.Drawing.Size(361, 248) + Me.brushesTabs.TabIndex = 4 + ' + 'solidColorPage + ' + Me.solidColorPage.BackColor = System.Drawing.SystemColors.Control + Me.solidColorPage.Controls.Add(Me.transparencyValues) + Me.solidColorPage.Controls.Add(Me.transparency) + Me.solidColorPage.Controls.Add(Me.addBrushButton) + Me.solidColorPage.Controls.Add(Me.colorLabel) + Me.solidColorPage.Controls.Add(Me.solidColorButton) + Me.solidColorPage.Location = New System.Drawing.Point(4, 22) + Me.solidColorPage.Name = "solidColorPage" + Me.solidColorPage.Padding = New System.Windows.Forms.Padding(3) + Me.solidColorPage.Size = New System.Drawing.Size(353, 222) + Me.solidColorPage.TabIndex = 0 + Me.solidColorPage.Text = "Solid Color" + ' + 'bitmapBrushPage + ' + Me.bitmapBrushPage.BackColor = System.Drawing.SystemColors.Control + Me.bitmapBrushPage.Controls.Add(Me.imageFileLabel) + Me.bitmapBrushPage.Controls.Add(Me.extendedModeYComboBox) + Me.bitmapBrushPage.Controls.Add(Me.extendedModeXComboBox) + Me.bitmapBrushPage.Controls.Add(Me.comboBox2) + Me.bitmapBrushPage.Controls.Add(Me.label4) + Me.bitmapBrushPage.Controls.Add(Me.label3) + Me.bitmapBrushPage.Controls.Add(Me.comboBox1) + Me.bitmapBrushPage.Controls.Add(Me.label2) + Me.bitmapBrushPage.Controls.Add(Me.label1) + Me.bitmapBrushPage.Controls.Add(Me.addBitmapBrushBotton) + Me.bitmapBrushPage.Controls.Add(Me.button2) + Me.bitmapBrushPage.Location = New System.Drawing.Point(4, 22) + Me.bitmapBrushPage.Name = "bitmapBrushPage" + Me.bitmapBrushPage.Padding = New System.Windows.Forms.Padding(3) + Me.bitmapBrushPage.Size = New System.Drawing.Size(353, 222) + Me.bitmapBrushPage.TabIndex = 1 + Me.bitmapBrushPage.Text = "Bitmap" + ' + 'imageFileLabel + ' + Me.imageFileLabel.AutoSize = True + Me.imageFileLabel.BackColor = System.Drawing.SystemColors.ButtonHighlight + Me.imageFileLabel.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.imageFileLabel.Location = New System.Drawing.Point(158, 29) + Me.imageFileLabel.MinimumSize = New System.Drawing.Size(130, 23) + Me.imageFileLabel.Name = "imageFileLabel" + Me.imageFileLabel.Size = New System.Drawing.Size(130, 23) + Me.imageFileLabel.TabIndex = 7 + ' + 'extendedModeYComboBox + ' + Me.extendedModeYComboBox.FormattingEnabled = True + Me.extendedModeYComboBox.Items.AddRange(New Object() {"Clamp", "Wrap", "Mirror"}) + Me.extendedModeYComboBox.Location = New System.Drawing.Point(158, 152) + Me.extendedModeYComboBox.Name = "extendedModeYComboBox" + Me.extendedModeYComboBox.Size = New System.Drawing.Size(121, 21) + Me.extendedModeYComboBox.TabIndex = 6 + Me.extendedModeYComboBox.Text = "Mirror" + ' + 'extendedModeXComboBox + ' + Me.extendedModeXComboBox.FormattingEnabled = True + Me.extendedModeXComboBox.Items.AddRange(New Object() {"Clamp", "Wrap", "Mirror"}) + Me.extendedModeXComboBox.Location = New System.Drawing.Point(158, 114) + Me.extendedModeXComboBox.Name = "extendedModeXComboBox" + Me.extendedModeXComboBox.Size = New System.Drawing.Size(121, 21) + Me.extendedModeXComboBox.TabIndex = 6 + Me.extendedModeXComboBox.Text = "Mirror" + ' + 'comboBox2 + ' + Me.comboBox2.FormattingEnabled = True + Me.comboBox2.Items.AddRange(New Object() {"0.00", "0.10", "0.25", "0.40", "0.50", "0.60", "0.75", "0.90", "0.95", "1.00"}) + Me.comboBox2.Location = New System.Drawing.Point(158, 77) + Me.comboBox2.Name = "comboBox2" + Me.comboBox2.Size = New System.Drawing.Size(121, 21) + Me.comboBox2.TabIndex = 6 + Me.comboBox2.Text = "1.00" + ' + 'label4 + ' + Me.label4.AutoSize = True + Me.label4.BackColor = System.Drawing.SystemColors.ButtonHighlight + Me.label4.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.label4.Location = New System.Drawing.Point(21, 150) + Me.label4.MinimumSize = New System.Drawing.Size(113, 23) + Me.label4.Name = "label4" + Me.label4.Size = New System.Drawing.Size(113, 23) + Me.label4.TabIndex = 5 + Me.label4.Text = "Extend Mode Y" + ' + 'label3 + ' + Me.label3.AutoSize = True + Me.label3.BackColor = System.Drawing.SystemColors.ButtonHighlight + Me.label3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.label3.Location = New System.Drawing.Point(21, 112) + Me.label3.MinimumSize = New System.Drawing.Size(113, 23) + Me.label3.Name = "label3" + Me.label3.Size = New System.Drawing.Size(113, 23) + Me.label3.TabIndex = 5 + Me.label3.Text = "Extend Mode X" + ' + 'comboBox1 + ' + Me.comboBox1.FormattingEnabled = True + Me.comboBox1.Items.AddRange(New Object() {"0.00", "0.10", "0.25", "0.40", "0.50", "0.60", "0.75", "0.90", "0.95", "1.00"}) + Me.comboBox1.Location = New System.Drawing.Point(158, 77) + Me.comboBox1.Name = "comboBox1" + Me.comboBox1.Size = New System.Drawing.Size(121, 21) + Me.comboBox1.TabIndex = 6 + ' + 'label2 + ' + Me.label2.AutoSize = True + Me.label2.BackColor = System.Drawing.SystemColors.ButtonHighlight + Me.label2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.label2.Location = New System.Drawing.Point(21, 75) + Me.label2.MinimumSize = New System.Drawing.Size(113, 23) + Me.label2.Name = "label2" + Me.label2.Size = New System.Drawing.Size(113, 23) + Me.label2.TabIndex = 5 + Me.label2.Text = "Transparency" + ' + 'label1 + ' + Me.label1.AutoSize = True + Me.label1.BackColor = System.Drawing.SystemColors.ButtonHighlight + Me.label1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.label1.Location = New System.Drawing.Point(21, 75) + Me.label1.MinimumSize = New System.Drawing.Size(113, 23) + Me.label1.Name = "label1" + Me.label1.Size = New System.Drawing.Size(113, 23) + Me.label1.TabIndex = 5 + Me.label1.Text = "Transparency" + ' + 'addBitmapBrushBotton + ' + Me.addBitmapBrushBotton.Location = New System.Drawing.Point(121, 193) + Me.addBitmapBrushBotton.Name = "addBitmapBrushBotton" + Me.addBitmapBrushBotton.Size = New System.Drawing.Size(75, 23) + Me.addBitmapBrushBotton.TabIndex = 4 + Me.addBitmapBrushBotton.Text = "Add Brush" + Me.addBitmapBrushBotton.UseVisualStyleBackColor = True + ' + 'button2 + ' + Me.button2.Location = New System.Drawing.Point(21, 29) + Me.button2.Name = "button2" + Me.button2.Size = New System.Drawing.Size(130, 23) + Me.button2.TabIndex = 0 + Me.button2.Text = "Select Image File..." + Me.button2.UseVisualStyleBackColor = True + ' + 'linearBrushPage + ' + Me.linearBrushPage.BackColor = System.Drawing.SystemColors.Control + Me.linearBrushPage.Controls.Add(Me.button3) + Me.linearBrushPage.Controls.Add(Me.gradBrushExtendModeCombo) + Me.linearBrushPage.Controls.Add(Me.gammaComboBox) + Me.linearBrushPage.Controls.Add(label6) + Me.linearBrushPage.Controls.Add(gammaLabel) + Me.linearBrushPage.Controls.Add(Me.gradBrushColor2Label) + Me.linearBrushPage.Controls.Add(Me.gradBrushColor1Label) + Me.linearBrushPage.Controls.Add(Me.gradiantBrushColor2Button) + Me.linearBrushPage.Controls.Add(Me.gradiantBrushColor1button) + Me.linearBrushPage.Location = New System.Drawing.Point(4, 22) + Me.linearBrushPage.Name = "linearBrushPage" + Me.linearBrushPage.Size = New System.Drawing.Size(353, 222) + Me.linearBrushPage.TabIndex = 2 + Me.linearBrushPage.Text = "Linear Gradiant" + ' + 'button3 + ' + Me.button3.Location = New System.Drawing.Point(101, 161) + Me.button3.Name = "button3" + Me.button3.Size = New System.Drawing.Size(75, 23) + Me.button3.TabIndex = 7 + Me.button3.Text = "Add Brush" + Me.button3.UseVisualStyleBackColor = True + ' + 'gradBrushExtendModeCombo + ' + Me.gradBrushExtendModeCombo.FormattingEnabled = True + Me.gradBrushExtendModeCombo.Items.AddRange(New Object() {"Clamp", "Wrap", "Mirror"}) + Me.gradBrushExtendModeCombo.Location = New System.Drawing.Point(153, 125) + Me.gradBrushExtendModeCombo.Name = "gradBrushExtendModeCombo" + Me.gradBrushExtendModeCombo.Size = New System.Drawing.Size(121, 21) + Me.gradBrushExtendModeCombo.TabIndex = 6 + Me.gradBrushExtendModeCombo.Text = "Wrap" + ' + 'gammaComboBox + ' + Me.gammaComboBox.FormattingEnabled = True + Me.gammaComboBox.Items.AddRange(New Object() {"Linear (1.0)", "StandardRgb (2.2)"}) + Me.gammaComboBox.Location = New System.Drawing.Point(153, 94) + Me.gammaComboBox.Name = "gammaComboBox" + Me.gammaComboBox.Size = New System.Drawing.Size(121, 21) + Me.gammaComboBox.TabIndex = 6 + Me.gammaComboBox.Text = "Linear (1.0)" + ' + 'gradBrushColor2Label + ' + Me.gradBrushColor2Label.AutoSize = True + Me.gradBrushColor2Label.BackColor = System.Drawing.SystemColors.ButtonHighlight + Me.gradBrushColor2Label.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.gradBrushColor2Label.Location = New System.Drawing.Point(153, 51) + Me.gradBrushColor2Label.MinimumSize = New System.Drawing.Size(130, 23) + Me.gradBrushColor2Label.Name = "gradBrushColor2Label" + Me.gradBrushColor2Label.Size = New System.Drawing.Size(130, 23) + Me.gradBrushColor2Label.TabIndex = 2 + Me.gradBrushColor2Label.Text = "R = 1, G = 1, B = 1, A = 1" + ' + 'gradBrushColor1Label + ' + Me.gradBrushColor1Label.AutoSize = True + Me.gradBrushColor1Label.BackColor = System.Drawing.SystemColors.ButtonHighlight + Me.gradBrushColor1Label.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.gradBrushColor1Label.Location = New System.Drawing.Point(153, 22) + Me.gradBrushColor1Label.MinimumSize = New System.Drawing.Size(130, 23) + Me.gradBrushColor1Label.Name = "gradBrushColor1Label" + Me.gradBrushColor1Label.Size = New System.Drawing.Size(130, 23) + Me.gradBrushColor1Label.TabIndex = 2 + Me.gradBrushColor1Label.Text = "R = 0, G = 0, B = 0, A = 1" + ' + 'gradiantBrushColor2Button + ' + Me.gradiantBrushColor2Button.Location = New System.Drawing.Point(16, 51) + Me.gradiantBrushColor2Button.Name = "gradiantBrushColor2Button" + Me.gradiantBrushColor2Button.Size = New System.Drawing.Size(113, 23) + Me.gradiantBrushColor2Button.TabIndex = 3 + Me.gradiantBrushColor2Button.Text = "Select Color 2..." + Me.gradiantBrushColor2Button.UseVisualStyleBackColor = True + ' + 'gradiantBrushColor1button + ' + Me.gradiantBrushColor1button.Location = New System.Drawing.Point(16, 22) + Me.gradiantBrushColor1button.Name = "gradiantBrushColor1button" + Me.gradiantBrushColor1button.Size = New System.Drawing.Size(113, 23) + Me.gradiantBrushColor1button.TabIndex = 3 + Me.gradiantBrushColor1button.Text = "Select Color 1..." + Me.gradiantBrushColor1button.UseVisualStyleBackColor = True + ' + 'graidantBrushPage + ' + Me.graidantBrushPage.BackColor = System.Drawing.SystemColors.Control + Me.graidantBrushPage.Controls.Add(Me.button4) + Me.graidantBrushPage.Controls.Add(Me.radialExtendCombo) + Me.graidantBrushPage.Controls.Add(Me.radialGammaCombo) + Me.graidantBrushPage.Controls.Add(label5) + Me.graidantBrushPage.Controls.Add(label7) + Me.graidantBrushPage.Controls.Add(Me.radialBrushColor2Label) + Me.graidantBrushPage.Controls.Add(Me.radialBrushColor1Label) + Me.graidantBrushPage.Controls.Add(Me.SelectRadialColor2) + Me.graidantBrushPage.Controls.Add(Me.SelectRadialColor1) + Me.graidantBrushPage.Location = New System.Drawing.Point(4, 22) + Me.graidantBrushPage.Name = "graidantBrushPage" + Me.graidantBrushPage.Size = New System.Drawing.Size(353, 222) + Me.graidantBrushPage.TabIndex = 3 + Me.graidantBrushPage.Text = "Radial Gradiant" + ' + 'button4 + ' + Me.button4.Location = New System.Drawing.Point(128, 169) + Me.button4.Name = "button4" + Me.button4.Size = New System.Drawing.Size(75, 23) + Me.button4.TabIndex = 16 + Me.button4.Text = "Add Brush" + Me.button4.UseVisualStyleBackColor = True + ' + 'radialExtendCombo + ' + Me.radialExtendCombo.FormattingEnabled = True + Me.radialExtendCombo.Items.AddRange(New Object() {"Clamp", "Wrap", "Mirror"}) + Me.radialExtendCombo.Location = New System.Drawing.Point(180, 133) + Me.radialExtendCombo.Name = "radialExtendCombo" + Me.radialExtendCombo.Size = New System.Drawing.Size(121, 21) + Me.radialExtendCombo.TabIndex = 14 + Me.radialExtendCombo.Text = "Wrap" + ' + 'radialGammaCombo + ' + Me.radialGammaCombo.FormattingEnabled = True + Me.radialGammaCombo.Items.AddRange(New Object() {"Linear (1.0)", "StandardRgb (2.2)"}) + Me.radialGammaCombo.Location = New System.Drawing.Point(180, 102) + Me.radialGammaCombo.Name = "radialGammaCombo" + Me.radialGammaCombo.Size = New System.Drawing.Size(121, 21) + Me.radialGammaCombo.TabIndex = 15 + Me.radialGammaCombo.Text = "Linear (1.0)" + ' + 'radialBrushColor2Label + ' + Me.radialBrushColor2Label.AutoSize = True + Me.radialBrushColor2Label.BackColor = System.Drawing.SystemColors.ButtonHighlight + Me.radialBrushColor2Label.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.radialBrushColor2Label.Location = New System.Drawing.Point(180, 59) + Me.radialBrushColor2Label.MinimumSize = New System.Drawing.Size(130, 23) + Me.radialBrushColor2Label.Name = "radialBrushColor2Label" + Me.radialBrushColor2Label.Size = New System.Drawing.Size(130, 23) + Me.radialBrushColor2Label.TabIndex = 9 + Me.radialBrushColor2Label.Text = "R = 1, G = 1, B = 1, A = 1" + ' + 'radialBrushColor1Label + ' + Me.radialBrushColor1Label.AutoSize = True + Me.radialBrushColor1Label.BackColor = System.Drawing.SystemColors.ButtonHighlight + Me.radialBrushColor1Label.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle + Me.radialBrushColor1Label.Location = New System.Drawing.Point(180, 30) + Me.radialBrushColor1Label.MinimumSize = New System.Drawing.Size(130, 23) + Me.radialBrushColor1Label.Name = "radialBrushColor1Label" + Me.radialBrushColor1Label.Size = New System.Drawing.Size(130, 23) + Me.radialBrushColor1Label.TabIndex = 8 + Me.radialBrushColor1Label.Text = "R = 0, G = 0, B = 0, A = 1" + ' + 'SelectRadialColor2 + ' + Me.SelectRadialColor2.Location = New System.Drawing.Point(43, 59) + Me.SelectRadialColor2.Name = "SelectRadialColor2" + Me.SelectRadialColor2.Size = New System.Drawing.Size(113, 23) + Me.SelectRadialColor2.TabIndex = 11 + Me.SelectRadialColor2.Text = "Select Color 2..." + Me.SelectRadialColor2.UseVisualStyleBackColor = True + ' + 'SelectRadialColor1 + ' + Me.SelectRadialColor1.Location = New System.Drawing.Point(43, 30) + Me.SelectRadialColor1.Name = "SelectRadialColor1" + Me.SelectRadialColor1.Size = New System.Drawing.Size(113, 23) + Me.SelectRadialColor1.TabIndex = 10 + Me.SelectRadialColor1.Text = "Select Color 1..." + Me.SelectRadialColor1.UseVisualStyleBackColor = True + ' + 'brushesList + ' + Me.brushesList.FormattingEnabled = True + Me.brushesList.Location = New System.Drawing.Point(16, 266) + Me.brushesList.Name = "brushesList" + Me.brushesList.Size = New System.Drawing.Size(353, 173) + Me.brushesList.TabIndex = 5 + ' + 'button1 + ' + Me.button1.Location = New System.Drawing.Point(114, 459) + Me.button1.Name = "button1" + Me.button1.Size = New System.Drawing.Size(157, 23) + Me.button1.TabIndex = 6 + Me.button1.Text = "Close" + Me.button1.UseVisualStyleBackColor = True + ' + 'BrushDialog + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(385, 494) + Me.Controls.Add(Me.button1) + Me.Controls.Add(Me.brushesList) + Me.Controls.Add(Me.brushesTabs) + Me.Name = "BrushDialog" + Me.RightToLeftLayout = True + Me.Text = "Select Brush" + Me.brushesTabs.ResumeLayout(False) + Me.solidColorPage.ResumeLayout(False) + Me.solidColorPage.PerformLayout() + Me.bitmapBrushPage.ResumeLayout(False) + Me.bitmapBrushPage.PerformLayout() + Me.linearBrushPage.ResumeLayout(False) + Me.linearBrushPage.PerformLayout() + Me.graidantBrushPage.ResumeLayout(False) + Me.graidantBrushPage.PerformLayout() + Me.ResumeLayout(False) + + End Sub + + #End Region + + Private colorDialog1 As System.Windows.Forms.ColorDialog + Private colorLabel As System.Windows.Forms.Label + Private WithEvents solidColorButton As System.Windows.Forms.Button + Private WithEvents addBrushButton As System.Windows.Forms.Button + Private WithEvents transparencyValues As System.Windows.Forms.ComboBox + Private transparency As System.Windows.Forms.Label + Private brushesTabs As System.Windows.Forms.TabControl + Private solidColorPage As System.Windows.Forms.TabPage + Private bitmapBrushPage As System.Windows.Forms.TabPage + Private linearBrushPage As System.Windows.Forms.TabPage + Private graidantBrushPage As System.Windows.Forms.TabPage + Private WithEvents brushesList As System.Windows.Forms.ListBox + Private WithEvents button1 As System.Windows.Forms.Button + Private WithEvents button2 As System.Windows.Forms.Button + Private imageFileLabel As System.Windows.Forms.Label + Private comboBox1 As System.Windows.Forms.ComboBox + Private label1 As System.Windows.Forms.Label + Private WithEvents addBitmapBrushBotton As System.Windows.Forms.Button + Private extendedModeYComboBox As System.Windows.Forms.ComboBox + Private extendedModeXComboBox As System.Windows.Forms.ComboBox + Private WithEvents comboBox2 As System.Windows.Forms.ComboBox + Private label4 As System.Windows.Forms.Label + Private label3 As System.Windows.Forms.Label + Private label2 As System.Windows.Forms.Label + Private gradBrushColor2Label As System.Windows.Forms.Label + Private gradBrushColor1Label As System.Windows.Forms.Label + Private WithEvents gradiantBrushColor2Button As System.Windows.Forms.Button + Private WithEvents gradiantBrushColor1button As System.Windows.Forms.Button + Private WithEvents button3 As System.Windows.Forms.Button + Private gradBrushExtendModeCombo As System.Windows.Forms.ComboBox + Private gammaComboBox As System.Windows.Forms.ComboBox + Private WithEvents button4 As System.Windows.Forms.Button + Private radialExtendCombo As System.Windows.Forms.ComboBox + Private radialGammaCombo As System.Windows.Forms.ComboBox + Private radialBrushColor2Label As System.Windows.Forms.Label + Private radialBrushColor1Label As System.Windows.Forms.Label + Private WithEvents SelectRadialColor2 As System.Windows.Forms.Button + Private WithEvents SelectRadialColor1 As System.Windows.Forms.Button + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/BrushDialog.resx b/source/Samples/DirectX/VB/Direct2D/Paint2D/BrushDialog.resx new file mode 100644 index 00000000..c020c6f2 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/BrushDialog.resx @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + False + + + False + + + False + + + 17, 17 + + + 48 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/BrushDialog.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/BrushDialog.vb new file mode 100644 index 00000000..5d4b57dd --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/BrushDialog.vb @@ -0,0 +1,225 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 +Imports System +Imports System.Globalization +Imports System.IO +Imports Microsoft.WindowsAPICodePack.DirectX +Imports System.Drawing +Imports Brush = Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Brush + + +Namespace D2DPaint + Friend Enum BrushType + None + Solid + Bitmap + LinearGradiant + RadialGradient + End Enum + + Partial Public Class BrushDialog + Inherits Form + Private color1 As New ColorF(Color.Black.ToArgb()) + Private color2 As New ColorF(Color.White.ToArgb()) + Private opacity_Renamed As Single = 1.0f + Private ReadOnly parentCopy As Paint2DForm + Private ReadOnly renderTargetCopy As RenderTarget + Private imageFilename As String + + Public Sub New(ByVal parent As Paint2DForm, ByVal target As RenderTarget) + Me.parentCopy = parent + Me.renderTargetCopy = target + InitializeComponent() + For i As Integer = 0 To transparencyValues.Items.Count - 1 + transparencyValues.Items(i) = CType(transparencyValues.Items(i), String).Replace(".", CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator) + Next + FillBrushesListBox() + End Sub + + Private Sub FillBrushesListBox() + Me.brushesList.Items.Clear() + For Each brush As Brush In parentCopy.brushes + If TypeOf brush Is SolidColorBrush Then + Dim solidBrush As SolidColorBrush = TryCast(brush, SolidColorBrush) + Me.brushesList.Items.Add(String.Format("Solid: R={0}, G={1}, B={2}, A={3}, Opacity={4}", solidBrush.Color.Red, solidBrush.Color.Green, solidBrush.Color.Blue, solidBrush.Color.Alpha, solidBrush.Opacity)) + ElseIf TypeOf brush Is BitmapBrush Then + Dim bitmapBrush As BitmapBrush = TryCast(brush, BitmapBrush) + Me.brushesList.Items.Add(String.Format("Bitmap Brush: Extended Mode X={0}, Extended Mode Y={1}, Inter. Mode={2}", bitmapBrush.ExtendModeX, bitmapBrush.ExtendModeY, bitmapBrush.InterpolationMode)) + Else + Me.brushesList.Items.Add(brush) + End If + Next brush + brushesList.SelectedIndex = parentCopy.currentBrushIndex + + End Sub + + Private Sub SelectColorClick(ByVal sender As Object, ByVal e As EventArgs) Handles solidColorButton.Click + colorDialog1.Color = System.Drawing.Color.Black + If colorDialog1.ShowDialog() <> System.Windows.Forms.DialogResult.Cancel Then + color1 = New ColorF(colorDialog1.Color.R / 255.0F, colorDialog1.Color.G / 255.0F, colorDialog1.Color.B / 255.0F, colorDialog1.Color.A / 255.0F) + + colorLabel.Text = String.Format("R = {0}, G = {1}, B = {2}, A = {3}", color1.Red, color1.Green, color1.Blue, color1.Alpha) + End If + End Sub + + Private Sub addBrushButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles addBrushButton.Click + parentCopy.brushes.Add(renderTargetCopy.CreateSolidColorBrush(color1, New BrushProperties(opacity_Renamed, Matrix3x2F.Identity))) + + parentCopy.currentBrushIndex = parentCopy.brushes.Count - 1 + + FillBrushesListBox() + End Sub + + Private Sub transparencyValues_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles transparencyValues.SelectedIndexChanged + Dim f As Single + If Single.TryParse(transparencyValues.Text, f) Then + Me.opacity_Renamed = f + End If + End Sub + + Private Sub listBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles brushesList.SelectedIndexChanged + parentCopy.currentBrushIndex = brushesList.SelectedIndex + End Sub + + Private Sub button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles button2.Click + Dim dialog As OpenFileDialog = New OpenFileDialog With {.DefaultExt = "*.jpg;*.png"} + If dialog.ShowDialog() = System.Windows.Forms.DialogResult.OK Then + Me.imageFilename = dialog.FileName + imageFileLabel.Text = Path.GetFileName(imageFilename) + + End If + End Sub + + Private Sub addBitmapBrushBotton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles addBitmapBrushBotton.Click + Dim ex As ExtendMode = If(extendedModeXComboBox.SelectedIndex > 0, CType(extendedModeXComboBox.SelectedIndex, ExtendMode), ExtendMode.Wrap) + Dim ey As ExtendMode = If(extendedModeYComboBox.SelectedIndex > 0, CType(extendedModeYComboBox.SelectedIndex, ExtendMode), ExtendMode.Wrap) + + Dim brushBitmap As D2DBitmap = BitmapUtilities.LoadBitmapFromFile(renderTargetCopy, parentCopy.wicFactory, imageFilename) + Dim brush As BitmapBrush = renderTargetCopy.CreateBitmapBrush(brushBitmap, New BitmapBrushProperties(ex, ey, BitmapInterpolationMode.NearestNeighbor), New BrushProperties(opacity_Renamed, Matrix3x2F.Identity)) + parentCopy.brushes.Add(brush) + parentCopy.currentBrushIndex = parentCopy.brushes.Count - 1 + FillBrushesListBox() + End Sub + + Private Sub CloseButtonClicked(ByVal sender As Object, ByVal e As EventArgs) Handles button1.Click + Me.Close() + End Sub + + Private Sub OpacityButtonClicked(ByVal sender As Object, ByVal e As EventArgs) Handles comboBox2.SelectedIndexChanged + Dim f As Single + If Single.TryParse(comboBox2.Text, f) Then + Me.opacity_Renamed = f + End If + End Sub + + Private Sub gradiantBrushColor1button_Click(ByVal sender As Object, ByVal e As EventArgs) Handles gradiantBrushColor1button.Click + + colorDialog1.Color = System.Drawing.Color.Black + If colorDialog1.ShowDialog() <> System.Windows.Forms.DialogResult.Cancel Then + color1 = New ColorF(colorDialog1.Color.R / 255.0F, colorDialog1.Color.G / 255.0F, colorDialog1.Color.B / 255.0F, colorDialog1.Color.A / 255.0F) + + gradBrushColor1Label.Text = String.Format("R = {0}, G = {1}, B = {2}, A = {3}", color1.Red, color1.Green, color1.Blue, color1.Alpha) + End If + End Sub + + Private Sub gradiantBrushColor2Button_Click(ByVal sender As Object, ByVal e As EventArgs) Handles gradiantBrushColor2Button.Click + colorDialog1.Color = System.Drawing.Color.Black + If colorDialog1.ShowDialog() <> System.Windows.Forms.DialogResult.Cancel Then + color2 = New ColorF(colorDialog1.Color.R / 255.0F, colorDialog1.Color.G / 255.0F, colorDialog1.Color.B / 255.0F, colorDialog1.Color.A / 255.0F) + + gradBrushColor2Label.Text = String.Format("R = {0}, G = {1}, B = {2}, A = {3}", color2.Red, color2.Green, color2.Blue, color2.Alpha) + End If + End Sub + + Private Sub LinearGradientBrushAddClicked(ByVal sender As Object, ByVal e As EventArgs) Handles button3.Click + Dim ex As ExtendMode = If(gradBrushExtendModeCombo.SelectedIndex > 0, CType(gradBrushExtendModeCombo.SelectedIndex, ExtendMode), ExtendMode.Clamp) + Dim gamma As Gamma + + Select Case gammaComboBox.SelectedIndex + Case 0 + gamma = Direct2D1.Gamma.Linear + Exit Select + Case 1 + gamma = Direct2D1.Gamma.StandardRgb + Exit Select + Case Else + Throw New InvalidOperationException("Unknown gamma selected") + End Select + + Dim stops() As GradientStop = {New GradientStop(0.0F, color1), New GradientStop(1.0F, color2)} + + Dim stopCollection As GradientStopCollection = renderTargetCopy.CreateGradientStopCollection(stops, gamma, ex) + + Dim properties As LinearGradientBrushProperties + If ex = ExtendMode.Clamp Then + properties = New LinearGradientBrushProperties(New Point2F(50, 50), New Point2F(600, 400)) + Else + properties = New LinearGradientBrushProperties(New Point2F(50, 50), New Point2F(0, 0)) + End If + + + Dim brush As LinearGradientBrush = renderTargetCopy.CreateLinearGradientBrush(properties, stopCollection) + + parentCopy.brushes.Add(brush) + parentCopy.currentBrushIndex = parentCopy.brushes.Count - 1 + FillBrushesListBox() + + End Sub + + Private Sub RadialGradientBrushAddClicked(ByVal sender As Object, ByVal e As EventArgs) Handles button4.Click + Dim ex As ExtendMode = If(radialExtendCombo.SelectedIndex > 0, CType(radialExtendCombo.SelectedIndex, ExtendMode), ExtendMode.Clamp) + Dim gamma As Gamma + + Select Case gammaComboBox.SelectedIndex + Case 0 + gamma = Direct2D1.Gamma.Linear + Exit Select + Case 1 + gamma = Direct2D1.Gamma.StandardRgb + Exit Select + Case Else + Throw New InvalidOperationException("Unknown gamma selected") + End Select + + Dim stops() As GradientStop = {New GradientStop(0, color1), New GradientStop(1.0F, color2)} + + Dim stopCollection As GradientStopCollection = renderTargetCopy.CreateGradientStopCollection(stops, gamma, ex) + + Dim properties As RadialGradientBrushProperties + + If ex = ExtendMode.Clamp Then + properties = New RadialGradientBrushProperties(New Point2F(50, 50), New Point2F(600, 400), 600, 600) + Else + properties = New RadialGradientBrushProperties(New Point2F(50, 50), New Point2F(0, 0), 50, 50) + End If + + Dim brush As RadialGradientBrush = renderTargetCopy.CreateRadialGradientBrush(properties, stopCollection) + + parentCopy.brushes.Add(brush) + parentCopy.currentBrushIndex = parentCopy.brushes.Count - 1 + FillBrushesListBox() + End Sub + + Private Sub SelectRadialColor1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles SelectRadialColor1.Click + colorDialog1.Color = System.Drawing.Color.Black + If colorDialog1.ShowDialog() <> System.Windows.Forms.DialogResult.Cancel Then + color1 = New ColorF(colorDialog1.Color.R / 255F, colorDialog1.Color.G / 255F, colorDialog1.Color.B / 255F, colorDialog1.Color.A / 255F) + + radialBrushColor1Label.Text = String.Format("R = {0}, G = {1}, B = {2}, A = {3}", color1.Red, color1.Green, color1.Blue, color1.Alpha) + End If + End Sub + + Private Sub SelectRadialColor2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles SelectRadialColor2.Click + colorDialog1.Color = System.Drawing.Color.Black + If colorDialog1.ShowDialog() <> System.Windows.Forms.DialogResult.Cancel Then + color2 = New ColorF(colorDialog1.Color.R / 255F, colorDialog1.Color.G / 255F, colorDialog1.Color.B / 255F, colorDialog1.Color.A / 255F) + + radialBrushColor2Label.Text = String.Format("R = {0}, G = {1}, B = {2}, A = {3}", color2.Red, color2.Green, color2.Blue, color2.Alpha) + End If + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/DrawingShape.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/DrawingShape.vb new file mode 100644 index 00000000..2145fb93 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/DrawingShape.vb @@ -0,0 +1,28 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 + +Namespace D2DPaint + Friend MustInherit Class DrawingShape + Protected _parent As Paint2DForm + Protected _fill As Boolean + + Protected Friend MustOverride Sub Draw(ByVal renderTarget As RenderTarget) + Protected Friend Overridable Sub EndDraw() + End Sub + + Protected Friend MustOverride WriteOnly Property EndPoint() As Point2F + + Protected Sub New(ByVal parent As Paint2DForm) + Me._parent = parent + End Sub + + Protected Sub New(ByVal parent As Paint2DForm, ByVal fill As Boolean) + Me.New(parent) + Me._fill = fill + End Sub + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/EllipseShape.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/EllipseShape.vb new file mode 100644 index 00000000..5434770e --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/EllipseShape.vb @@ -0,0 +1,41 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 + +Namespace D2DPaint + Friend Class EllipseShape + Inherits DrawingShape + Friend _ellipse As Ellipse + Friend _strokeWidth As Single + Friend _selectedBrushIndex As Integer + Private _startPoint As Point2F + + + Friend Sub New(ByVal parent As Paint2DForm, ByVal ellipse As Ellipse, ByVal strokeWidth As Single, ByVal selectedBrush As Integer, ByVal fill As Boolean) + MyBase.New(parent, fill) + _startPoint = ellipse.Point + _ellipse = ellipse + _strokeWidth = strokeWidth + _selectedBrushIndex = selectedBrush + End Sub + + Protected Friend Overrides Sub Draw(ByVal renderTarget As RenderTarget) + If _fill Then + renderTarget.FillEllipse(_ellipse, _parent.brushes(_selectedBrushIndex)) + Else + renderTarget.DrawEllipse(_ellipse, _parent.brushes(_selectedBrushIndex), _strokeWidth) + End If + End Sub + Protected Friend Overrides WriteOnly Property EndPoint() As Point2F + Set(ByVal value As Point2F) + _ellipse.RadiusX = (value.X - _startPoint.X) / 2f + _ellipse.RadiusY = (value.Y - _startPoint.Y) / 2f + + _ellipse.Point = New Point2F(_startPoint.X + ((value.X - _startPoint.X) / 2.0F), _startPoint.Y + ((value.Y - _startPoint.Y) / 2.0F)) + End Set + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/FontEnumComboBox.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/FontEnumComboBox.vb new file mode 100644 index 00000000..6163c6e0 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/FontEnumComboBox.vb @@ -0,0 +1,222 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +Imports System.Globalization +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 +Imports Microsoft.WindowsAPICodePack.DirectX.DirectWrite +Imports Graphics = Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports FontFamily = Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontFamily +Imports FontStyle = Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontStyle + +Namespace D2DPaint + Public Class FontEnumComboBox + Inherits ComboBox + #Region "Fields" + Private ReadOnly enUSCulture As New CultureInfo("en-US") + Private d2DFactory As D2DFactory + Private dwriteFactory As DWriteFactory + Private dcRenderTarget As DCRenderTarget + Private brush As SolidColorBrush + Private primaryNames As New List(Of String)() + Private layouts As Dictionary(Of String, TextLayout) + Private maxHeight_Renamed As Single + #End Region + + #Region "Properties" + Private dropDownFontSize_Renamed As Single = 18 + ''' + ''' Gets or sets the size of the font used in the drop down. + ''' + ''' The size of the drop down font. + _ + Public Property DropDownFontSize() As Single + Get + Return dropDownFontSize_Renamed + End Get + Set(ByVal value As Single) + dropDownFontSize_Renamed = value + End Set + End Property + + ''' + ''' Gets or sets a value indicating whether all items should be of the same height (the height of the tallest font) or whether they should use the minimum size required for each font. + ''' + ''' true if item height should be fixed; otherwise, false. + Private privateFixedItemHeight As Boolean + _ + Public Property FixedItemHeight() As Boolean + Get + Return privateFixedItemHeight + End Get + Set(ByVal value As Boolean) + privateFixedItemHeight = value + End Set + End Property +#End Region + + #Region "FontEnumComboBox()" + Public Sub New() + FixedItemHeight = True + End Sub + #End Region + + #Region "Initialize()" + Public Sub Initialize() + d2DFactory = D2DFactory.CreateFactory(D2DFactoryType.MultiThreaded) + dwriteFactory = DWriteFactory.CreateFactory() + InitializeRenderTarget() + FillFontFamilies() + If FixedItemHeight Then + DropDownHeight = CInt(Fix(maxHeight_Renamed)) * 10 + End If + DrawMode = DrawMode.OwnerDrawVariable + AddHandler MeasureItem, AddressOf FontEnumComboBox_MeasureItem + AddHandler DrawItem, AddressOf FontEnumComboBox_DrawItem + End Sub + #End Region + + #Region "InitializeRenderTarget()" + Private Sub InitializeRenderTarget() + If dcRenderTarget Is Nothing Then + Dim props = New RenderTargetProperties With {.PixelFormat = New PixelFormat(Graphics.Format.B8G8R8A8UNorm, AlphaMode.Ignore), .Usage = RenderTargetUsages.GdiCompatible} + dcRenderTarget = d2DFactory.CreateDCRenderTarget(props) + brush = dcRenderTarget.CreateSolidColorBrush(New ColorF(ForeColor.R / 256f, ForeColor.G / 256f, ForeColor.B / 256f, 1)) + End If + End Sub + #End Region + + #Region "FillFontFamilies()" + Private Sub FillFontFamilies() + maxHeight_Renamed = 0 + primaryNames = New List(Of String)() + layouts = New Dictionary(Of String, TextLayout)() + For Each family As FontFamily In dwriteFactory.SystemFontFamilyCollection + AddFontFamily(family) + Next family + primaryNames.Sort() + Items.Clear() + Items.AddRange(primaryNames.ToArray()) + End Sub + #End Region + + #Region "AddFontFamily()" + Private Sub AddFontFamily(ByVal family As FontFamily) + Dim familyName As String + Dim familyCulture As CultureInfo + + ' First try getting a name in the user's language. + familyCulture = CultureInfo.CurrentUICulture + familyName = Nothing + family.FamilyNames.TryGetValue(familyCulture, familyName) + + If familyName Is Nothing Then + ' Fall back to en-US culture. This is somewhat arbitrary, but most fonts have English + ' strings so this at least yields predictable fallback behavior in most cases. + familyCulture = enUSCulture + family.FamilyNames.TryGetValue(familyCulture, familyName) + End If + + If familyName Is Nothing Then + ' As a last resort, use the first name we find. This will just be the name associated + ' with whatever locale name sorts first alphabetically. + For Each entry As KeyValuePair(Of CultureInfo, String) In family.FamilyNames + familyCulture = entry.Key + familyName = entry.Value + Next entry + End If + + If familyName Is Nothing Then + Return + End If + + 'add info to list of structs used as a cache of text layouts + Dim displayFormats = New List(Of TextLayout)() + Dim format = dwriteFactory.CreateTextFormat(If(family.Fonts(0).IsSymbolFont, Font.FontFamily.Name, familyName), DropDownFontSize, FontWeight.Normal, FontStyle.Normal, FontStretch.Normal, familyCulture) + format.WordWrapping = WordWrapping.NoWrap + Dim layout = dwriteFactory.CreateTextLayout(familyName, format, 10000, 10000) + DropDownWidth = Math.Max(DropDownWidth, CInt(Fix(layout.Metrics.Width))) + maxHeight_Renamed = Math.Max(maxHeight_Renamed, layout.Metrics.Height) + displayFormats.Add(layout) + 'add name to list + primaryNames.Add(familyName) + layouts.Add(familyName, layout) + End Sub + #End Region + + #Region "FontEnumComboBox_MeasureItem()" + Private Sub FontEnumComboBox_MeasureItem(ByVal sender As Object, ByVal e As MeasureItemEventArgs) + 'initialize the DC Render Target and a brush before first use + InitializeRenderTarget() + Dim fontName = CStr(Items(e.Index)) + e.ItemWidth = CInt(Fix(layouts(fontName).Metrics.Width)) + 10 + e.ItemHeight = If(FixedItemHeight, CInt(Fix(maxHeight_Renamed)), CInt(Fix(layouts(fontName).Metrics.Height))) + End Sub + #End Region + + #Region "FontEnumComboBox_DrawItem()" + Private Sub FontEnumComboBox_DrawItem(ByVal sender As Object, ByVal e As DrawItemEventArgs) + 'initialize the DC Render Target and a brush before first use + InitializeRenderTarget() + + 'draw the background of the combo item + e.DrawBackground() + + 'set section of the DC to draw on + Dim subRect = New Rect(e.Bounds.Left, e.Bounds.Top, e.Bounds.Right, e.Bounds.Bottom) + + 'bind the render target with the DC + dcRenderTarget.BindDC(e.Graphics.GetHdc(), subRect) + + 'draw the text using D2D/DWrite + dcRenderTarget.BeginDraw() + + Dim fontName = CStr(Items(e.Index)) + 'if ((e.State & DrawItemState.Selected & ~DrawItemState.NoFocusRect) != DrawItemState.None) + dcRenderTarget.DrawTextLayout(New Point2F(5, (e.Bounds.Height - layouts(fontName).Metrics.Height) / 2), layouts(fontName), brush, DrawTextOptions.Clip) + + dcRenderTarget.EndDraw() + 'release the DC + e.Graphics.ReleaseHdc() + 'drow focus rect for a focused item + e.DrawFocusRectangle() + End Sub + #End Region + + #Region "Dispose()" + Protected Overrides Overloads Sub Dispose(ByVal disposing As Boolean) + If disposing Then + 'dispose of all layouts + Do While layouts.Keys.Count > 0 + For Each key As String In layouts.Keys + layouts(key).Dispose() + layouts.Remove(key) + Exit For + Next key + Loop + + If brush IsNot Nothing Then + brush.Dispose() + End If + brush = Nothing + If dcRenderTarget IsNot Nothing Then + dcRenderTarget.Dispose() + End If + dcRenderTarget = Nothing + If dwriteFactory IsNot Nothing Then + dwriteFactory.Dispose() + End If + dwriteFactory = Nothing + If d2DFactory IsNot Nothing Then + d2DFactory.Dispose() + End If + d2DFactory = Nothing + End If + MyBase.Dispose(disposing) + End Sub + #End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/GeometryShape.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/GeometryShape.vb new file mode 100644 index 00000000..04f1e504 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/GeometryShape.vb @@ -0,0 +1,74 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 + +Namespace D2DPaint + Friend Class GeometryShape + Inherits DrawingShape + Friend _points As List(Of Point2F) + Friend _strokeWidth As Single + Friend _selectedBrushIndex As Integer + Friend _geometry As Geometry + + Friend Sub New(ByVal parent As Paint2DForm, ByVal point0 As Point2F, ByVal strokeWidth As Single, ByVal selectedBrush As Integer, ByVal fill As Boolean) + MyBase.New(parent) + _points = New List(Of Point2F) (New Point2F() {point0}) + _strokeWidth = strokeWidth + _selectedBrushIndex = selectedBrush + _fill = fill + End Sub + + Protected Friend Overrides Sub Draw(ByVal renderTarget As RenderTarget) + If _geometry IsNot Nothing Then + If _fill Then + renderTarget.FillGeometry(_geometry, _parent.brushes(_selectedBrushIndex)) + Else + renderTarget.DrawGeometry(_geometry, _parent.brushes(_selectedBrushIndex), _strokeWidth, _parent.d2dFactory.CreateStrokeStyle(New StrokeStyleProperties(CapStyle.Round, CapStyle.Round, CapStyle.Round, LineJoin.Round, 1, DashStyle.Solid, 0))) + End If + End If + End Sub + + Protected Friend Overrides WriteOnly Property EndPoint() As Point2F + Set(ByVal value As Point2F) + _points.Add(value) + Dim g As PathGeometry = _parent.d2dFactory.CreatePathGeometry() + Dim sink = g.Open() + sink.BeginFigure(_points(0),If(_fill, FigureBegin.Filled, FigureBegin.Hollow)) + For i As Integer = 1 To _points.Count - 1 + 'smoothing + If i > 1 AndAlso i < _points.Count - 1 Then + Dim cp1 As Point2F + Dim cp2 As Point2F + GetSmoothingPoints(i, cp1, cp2) + sink.AddBezier(New BezierSegment(cp1, cp2, _points(i))) + Else + sink.AddLine(_points(i)) + End If + Next i + sink.EndFigure(If(_fill, FigureEnd.Closed, FigureEnd.Open)) + sink.Close() + _geometry = g + End Set + End Property + + Private Sub GetSmoothingPoints(ByVal i As Integer, ByRef cp1 As Point2F, ByRef cp2 As Point2F) + Dim smoothing As Single =.25f '0 - no smoothing + Dim lx As Single = _points(i).X - _points(i - 1).X + Dim ly As Single = _points(i).Y - _points(i - 1).Y + Dim l As Single = CSng(Math.Sqrt(lx * lx + ly * ly)) ' distance from previous point + Dim l1x As Single = _points(i).X - _points(i - 2).X + Dim l1y As Single = _points(i).Y - _points(i - 2).Y + Dim l1 As Single = CSng(Math.Sqrt(l1x * l1x + l1y * l1y)) ' distance between two points back and current point + Dim l2x As Single = _points(i + 1).X - _points(i - 1).X + Dim l2y As Single = _points(i + 1).Y - _points(i - 1).Y + Dim l2 As Single = CSng(Math.Sqrt(l2x * l2x + l2y * l2y)) 'distance between previous point and the next point + + cp1 = New Point2F(_points(i - 1).X + (If(l1x = 0, 0, (smoothing * l * l1x / l1))), _points(i - 1).Y + (If(l1y = 0, 0, (smoothing * l * l1y / l1)))) + cp2 = New Point2F(_points(i).X - (If(l2x = 0, 0, (smoothing * l * l2x / l2))), _points(i).Y - (If(l2y = 0, 0, (smoothing * l * l2y / l2)))) + End Sub + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/LineShape.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/LineShape.vb new file mode 100644 index 00000000..b54e64f5 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/LineShape.vb @@ -0,0 +1,34 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 + +Namespace D2DPaint + Friend Class LineShape + Inherits DrawingShape + Friend _point0, _point1 As Point2F + Friend _strokeWidth As Single + Friend _selectedBrushIndex As Integer + + Friend Sub New(ByVal parent As Paint2DForm, ByVal point0 As Point2F, ByVal point1 As Point2F, ByVal strokeWidth As Single, ByVal selectedBrush As Integer) + MyBase.New(parent) + _point0 = point0 + _point1 = point1 + _strokeWidth = strokeWidth + _selectedBrushIndex = selectedBrush + + End Sub + + Protected Friend Overrides Sub Draw(ByVal renderTarget As RenderTarget) + renderTarget.DrawLine(_point0, _point1, _parent.brushes(_selectedBrushIndex), _strokeWidth) + End Sub + + Protected Friend Overrides WriteOnly Property EndPoint() As Point2F + Set(ByVal value As Point2F) + _point1 = value + End Set + End Property + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..87480b55 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/My Project/AssemblyInfo.vb @@ -0,0 +1,40 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/My Project/Resources.Designer.vb new file mode 100644 index 00000000..b81a1d67 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/My Project/Resources.Designer.vb @@ -0,0 +1,72 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4927 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + + +'This class was auto-generated by the StronglyTypedResourceBuilder +'class via a tool like ResGen or Visual Studio. +'To add or remove a member, edit your .ResX file then rerun ResGen +'with the /str option, or rebuild your VS project. +''' +''' A strongly-typed resource class, for looking up localized strings, etc. +''' + _ +Friend Class Resources + + Private Shared resourceMan As Global.System.Resources.ResourceManager + + Private Shared resourceCulture As Global.System.Globalization.CultureInfo + + _ + Friend Sub New() + MyBase.New + End Sub + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend Shared ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Shared Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + Friend Shared ReadOnly Property arrow() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("arrow", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property +End Class diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct2D/Paint2D/My Project/Resources.resx new file mode 100644 index 00000000..dba4f8df --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/My Project/Resources.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\arrow1.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/My Project/Settings.Designer.vb new file mode 100644 index 00000000..519cc78c --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.3053 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct2D/Paint2D/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/Paint2D.sln b/source/Samples/DirectX/VB/Direct2D/Paint2D/Paint2D.sln new file mode 100644 index 00000000..313bccde --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/Paint2D.sln @@ -0,0 +1,54 @@ +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Paint2D", "Paint2D.vbproj", "{E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Debug|Win32.ActiveCfg = Debug|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|Any CPU.Build.0 = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432}.Release|Win32.ActiveCfg = Release|Any CPU + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/Paint2D.vbproj b/source/Samples/DirectX/VB/Direct2D/Paint2D/Paint2D.vbproj new file mode 100644 index 00000000..c90035e1 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/Paint2D.vbproj @@ -0,0 +1,146 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {E9DC6D66-B9D2-4F8A-AB7D-1472C5B69432} + WinExe + + + D2DPaint + v3.5 + On + Binary + Off + On + 512 + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + + + + + + + + + + Form + + + BrushDialog.vb + + + + + Component + + + + Form + + + Paint2DForm.vb + + + + + BrushDialog.vb + Designer + + + Paint2DForm.vb + Designer + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + My.Resources + ResXFileCodeGenerator + Resource.Designer.vb + + + TextDialog.vb + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + True + Settings.settings + True + + + + True + True + Resource.resx + + + + + Form + + + TextDialog.vb + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/Paint2DForm.Designer.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/Paint2DForm.Designer.vb new file mode 100644 index 00000000..4107687e --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/Paint2DForm.Designer.vb @@ -0,0 +1,292 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace D2DPaint + Partial Public Class Paint2DForm + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Dim toolStripLabel1 As System.Windows.Forms.ToolStripLabel + Dim toolStripLabel2 As System.Windows.Forms.ToolStripLabel + Me.renderControl = New Microsoft.WindowsAPICodePack.DirectX.Controls.RenderControl + Me.toolStrip1 = New System.Windows.Forms.ToolStrip + Me.arrowButton = New System.Windows.Forms.ToolStripButton + Me.toolStripSeparator7 = New System.Windows.Forms.ToolStripSeparator + Me.strokeWidths = New System.Windows.Forms.ToolStripComboBox + Me.toolStripSeparator6 = New System.Windows.Forms.ToolStripSeparator + Me.fillButton = New System.Windows.Forms.ToolStripButton + Me.toolStripSeparator2 = New System.Windows.Forms.ToolStripSeparator + Me.lineButton = New System.Windows.Forms.ToolStripButton + Me.rectButton = New System.Windows.Forms.ToolStripButton + Me.roundrectButton = New System.Windows.Forms.ToolStripButton + Me.ellipseButton = New System.Windows.Forms.ToolStripButton + Me.geometryButton = New System.Windows.Forms.ToolStripButton + Me.toolStripSeparator4 = New System.Windows.Forms.ToolStripSeparator + Me.textButton = New System.Windows.Forms.ToolStripButton + Me.toolStripSeparator3 = New System.Windows.Forms.ToolStripSeparator + Me.bitmapButton = New System.Windows.Forms.ToolStripButton + Me.traparencyList = New System.Windows.Forms.ToolStripComboBox + Me.toolStripSeparator5 = New System.Windows.Forms.ToolStripSeparator + Me.brushButton = New System.Windows.Forms.ToolStripButton + Me.toolStripSeparator1 = New System.Windows.Forms.ToolStripSeparator + Me.clearButton = New System.Windows.Forms.ToolStripButton + Me.ToolStripSeparator8 = New System.Windows.Forms.ToolStripSeparator + Me.saveButton = New System.Windows.Forms.ToolStripButton + toolStripLabel1 = New System.Windows.Forms.ToolStripLabel + toolStripLabel2 = New System.Windows.Forms.ToolStripLabel + Me.toolStrip1.SuspendLayout() + Me.SuspendLayout() + ' + 'toolStripLabel1 + ' + toolStripLabel1.Name = "toolStripLabel1" + toolStripLabel1.Size = New System.Drawing.Size(43, 22) + toolStripLabel1.Text = "Stroke:" + ' + 'toolStripLabel2 + ' + toolStripLabel2.Name = "toolStripLabel2" + toolStripLabel2.Size = New System.Drawing.Size(81, 22) + toolStripLabel2.Text = "Transparency:" + ' + 'renderControl + ' + Me.renderControl.AutoSize = True + Me.renderControl.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink + Me.renderControl.Dock = System.Windows.Forms.DockStyle.Fill + Me.renderControl.Location = New System.Drawing.Point(0, 0) + Me.renderControl.Name = "renderControl" + Me.renderControl.Size = New System.Drawing.Size(869, 605) + Me.renderControl.TabIndex = 0 + ' + 'toolStrip1 + ' + Me.toolStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.arrowButton, Me.toolStripSeparator7, toolStripLabel1, Me.strokeWidths, Me.toolStripSeparator6, Me.fillButton, Me.toolStripSeparator2, Me.lineButton, Me.rectButton, Me.roundrectButton, Me.ellipseButton, Me.geometryButton, Me.toolStripSeparator4, Me.textButton, Me.toolStripSeparator3, Me.bitmapButton, toolStripLabel2, Me.traparencyList, Me.toolStripSeparator5, Me.brushButton, Me.toolStripSeparator1, Me.clearButton, Me.ToolStripSeparator8, Me.saveButton}) + Me.toolStrip1.Location = New System.Drawing.Point(0, 0) + Me.toolStrip1.Name = "toolStrip1" + Me.toolStrip1.Size = New System.Drawing.Size(869, 25) + Me.toolStrip1.TabIndex = 1 + Me.toolStrip1.Text = "toolStrip1" + ' + 'arrowButton + ' + Me.arrowButton.Checked = True + Me.arrowButton.CheckState = System.Windows.Forms.CheckState.Checked + Me.arrowButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.arrowButton.Image = Global.Resources.arrow + Me.arrowButton.ImageTransparentColor = System.Drawing.Color.Magenta + Me.arrowButton.Name = "arrowButton" + Me.arrowButton.Size = New System.Drawing.Size(23, 22) + ' + 'toolStripSeparator7 + ' + Me.toolStripSeparator7.Name = "toolStripSeparator7" + Me.toolStripSeparator7.Size = New System.Drawing.Size(6, 25) + ' + 'strokeWidths + ' + Me.strokeWidths.AutoSize = False + Me.strokeWidths.DropDownHeight = 110 + Me.strokeWidths.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.strokeWidths.DropDownWidth = 50 + Me.strokeWidths.IntegralHeight = False + Me.strokeWidths.Items.AddRange(New Object() {"1", "2", "4", "6", "8", "10", "12", "16", "24", "36", "42"}) + Me.strokeWidths.Name = "strokeWidths" + Me.strokeWidths.Size = New System.Drawing.Size(42, 23) + ' + 'toolStripSeparator6 + ' + Me.toolStripSeparator6.Name = "toolStripSeparator6" + Me.toolStripSeparator6.Size = New System.Drawing.Size(6, 25) + ' + 'fillButton + ' + Me.fillButton.CheckOnClick = True + Me.fillButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.fillButton.ImageTransparentColor = System.Drawing.Color.Magenta + Me.fillButton.Name = "fillButton" + Me.fillButton.Size = New System.Drawing.Size(39, 22) + Me.fillButton.Text = "Filled" + ' + 'toolStripSeparator2 + ' + Me.toolStripSeparator2.Name = "toolStripSeparator2" + Me.toolStripSeparator2.Size = New System.Drawing.Size(6, 25) + ' + 'lineButton + ' + Me.lineButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.lineButton.ImageTransparentColor = System.Drawing.Color.Magenta + Me.lineButton.Name = "lineButton" + Me.lineButton.Size = New System.Drawing.Size(33, 22) + Me.lineButton.Text = "Line" + ' + 'rectButton + ' + Me.rectButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.rectButton.ImageTransparentColor = System.Drawing.Color.Magenta + Me.rectButton.Name = "rectButton" + Me.rectButton.Size = New System.Drawing.Size(34, 22) + Me.rectButton.Text = "Rect" + ' + 'roundrectButton + ' + Me.roundrectButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.roundrectButton.ImageTransparentColor = System.Drawing.Color.Magenta + Me.roundrectButton.Name = "roundrectButton" + Me.roundrectButton.Size = New System.Drawing.Size(69, 22) + Me.roundrectButton.Text = "RoundRect" + ' + 'ellipseButton + ' + Me.ellipseButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.ellipseButton.ImageTransparentColor = System.Drawing.Color.Magenta + Me.ellipseButton.Name = "ellipseButton" + Me.ellipseButton.Size = New System.Drawing.Size(44, 22) + Me.ellipseButton.Text = "Ellipse" + ' + 'geometryButton + ' + Me.geometryButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.geometryButton.ImageTransparentColor = System.Drawing.Color.Magenta + Me.geometryButton.Name = "geometryButton" + Me.geometryButton.Size = New System.Drawing.Size(63, 22) + Me.geometryButton.Text = "Geometry" + ' + 'toolStripSeparator4 + ' + Me.toolStripSeparator4.Name = "toolStripSeparator4" + Me.toolStripSeparator4.Size = New System.Drawing.Size(6, 25) + ' + 'textButton + ' + Me.textButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.textButton.ImageTransparentColor = System.Drawing.Color.Magenta + Me.textButton.Name = "textButton" + Me.textButton.Size = New System.Drawing.Size(33, 22) + Me.textButton.Text = "Text" + ' + 'toolStripSeparator3 + ' + Me.toolStripSeparator3.Name = "toolStripSeparator3" + Me.toolStripSeparator3.Size = New System.Drawing.Size(6, 25) + ' + 'bitmapButton + ' + Me.bitmapButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.bitmapButton.ImageTransparentColor = System.Drawing.Color.Magenta + Me.bitmapButton.Name = "bitmapButton" + Me.bitmapButton.Size = New System.Drawing.Size(49, 22) + Me.bitmapButton.Text = "Bitmap" + ' + 'traparencyList + ' + Me.traparencyList.AutoSize = False + Me.traparencyList.Items.AddRange(New Object() {"1.0", "0.9", "0.75", "0.5", "0.25", "0.2", "0.1", "0.1"}) + Me.traparencyList.Name = "traparencyList" + Me.traparencyList.Size = New System.Drawing.Size(42, 23) + ' + 'toolStripSeparator5 + ' + Me.toolStripSeparator5.Name = "toolStripSeparator5" + Me.toolStripSeparator5.Size = New System.Drawing.Size(6, 25) + ' + 'brushButton + ' + Me.brushButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.brushButton.ImageTransparentColor = System.Drawing.Color.Magenta + Me.brushButton.Name = "brushButton" + Me.brushButton.Size = New System.Drawing.Size(52, 22) + Me.brushButton.Text = "Brushes" + ' + 'toolStripSeparator1 + ' + Me.toolStripSeparator1.Name = "toolStripSeparator1" + Me.toolStripSeparator1.Size = New System.Drawing.Size(6, 25) + ' + 'clearButton + ' + Me.clearButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.clearButton.ImageTransparentColor = System.Drawing.Color.Magenta + Me.clearButton.Name = "clearButton" + Me.clearButton.Size = New System.Drawing.Size(38, 22) + Me.clearButton.Text = "Clear" + Me.clearButton.ToolTipText = "Clear All" + ' + 'ToolStripSeparator8 + ' + Me.ToolStripSeparator8.Name = "ToolStripSeparator8" + Me.ToolStripSeparator8.Size = New System.Drawing.Size(6, 25) + ' + 'saveButton + ' + Me.saveButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text + Me.saveButton.ImageTransparentColor = System.Drawing.Color.Magenta + Me.saveButton.Name = "saveButton" + Me.saveButton.Size = New System.Drawing.Size(44, 22) + Me.saveButton.Text = "Save..." + ' + 'Paint2DForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(869, 605) + Me.Controls.Add(Me.toolStrip1) + Me.Controls.Add(Me.renderControl) + Me.Name = "Paint2DForm" + Me.Text = "D2D Paint Demo" + Me.toolStrip1.ResumeLayout(False) + Me.toolStrip1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + +#End Region + + Private WithEvents renderControl As Microsoft.WindowsAPICodePack.DirectX.Controls.RenderControl + Private WithEvents toolStrip1 As System.Windows.Forms.ToolStrip + Private WithEvents brushButton As System.Windows.Forms.ToolStripButton + Private WithEvents lineButton As System.Windows.Forms.ToolStripButton + Private WithEvents bitmapButton As System.Windows.Forms.ToolStripButton + Private WithEvents roundrectButton As System.Windows.Forms.ToolStripButton + Private toolStripSeparator1 As System.Windows.Forms.ToolStripSeparator + Private WithEvents strokeWidths As System.Windows.Forms.ToolStripComboBox + Private WithEvents traparencyList As System.Windows.Forms.ToolStripComboBox + Private WithEvents clearButton As System.Windows.Forms.ToolStripButton + Private WithEvents rectButton As System.Windows.Forms.ToolStripButton + Private WithEvents ellipseButton As System.Windows.Forms.ToolStripButton + Private WithEvents textButton As System.Windows.Forms.ToolStripButton + Private toolStripSeparator3 As System.Windows.Forms.ToolStripSeparator + Private WithEvents fillButton As System.Windows.Forms.ToolStripButton + Private WithEvents geometryButton As System.Windows.Forms.ToolStripButton + Private WithEvents arrowButton As System.Windows.Forms.ToolStripButton + Private toolStripSeparator2 As System.Windows.Forms.ToolStripSeparator + Private toolStripSeparator4 As System.Windows.Forms.ToolStripSeparator + Private toolStripSeparator5 As System.Windows.Forms.ToolStripSeparator + Private toolStripSeparator6 As System.Windows.Forms.ToolStripSeparator + Private toolStripSeparator7 As System.Windows.Forms.ToolStripSeparator + Friend WithEvents saveButton As System.Windows.Forms.ToolStripButton + Friend WithEvents ToolStripSeparator8 As System.Windows.Forms.ToolStripSeparator + End Class +End Namespace + diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/Paint2DForm.resx b/source/Samples/DirectX/VB/Direct2D/Paint2D/Paint2DForm.resx new file mode 100644 index 00000000..6d0ae281 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/Paint2DForm.resx @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + + False + + + 17, 17 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/Paint2DForm.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/Paint2DForm.vb new file mode 100644 index 00000000..ccbe34fc --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/Paint2DForm.vb @@ -0,0 +1,408 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Globalization +Imports System.Threading +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 +Imports Microsoft.WindowsAPICodePack.DirectX.DirectWrite +Imports Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent +Imports Microsoft.WindowsAPICodePack.DirectX +Imports System.Drawing +Imports Brush = Microsoft.WindowsAPICodePack.DirectX.Direct2D1.Brush +Imports Graphics = Microsoft.WindowsAPICodePack.DirectX.Graphics + +Namespace D2DPaint + Friend Enum Shape + None + Line + Bitmap + Rectangle + RoundedRectangle + Ellipse + Text + Geometry + End Enum + + Partial Public Class Paint2DForm + Inherits Form + #Region "Fields" + Friend brushes As New List(Of Brush)() + Friend currentBrushIndex As Integer = -1 + + Private startPoint As Point2F + Private endPoint As Point2F + Private brushDialog As BrushDialog = Nothing + Private drawingShapes As New List(Of DrawingShape)() + Private currentBitmap As D2DBitmap + Private currentShapeType As Shape = Shape.None + Private currentShape As DrawingShape = Nothing + Private fill As Boolean = False + + Friend TextBoxStroke As StrokeStyle + + Friend d2dFactory As D2DFactory + Friend wicFactory As ImagingFactory + Friend dwriteFactory As DWriteFactory + Private renderTarget As HwndRenderTarget + + Private isDrawing As Boolean = False + Private isDragging As Boolean = False + + Private currentStrokeSize As Single = 2 + Private currentTransparency As Single = 1 + + Private ReadOnly WhiteBackgroundColor As New ColorF(Color.White.ToArgb()) + Private textDialog As TextDialog + Private bitmapDialog As OpenFileDialog + + Private currentButton As ToolStripButton = Nothing + + Private renderProps As New RenderTargetProperties(RenderTargetType.Software, New PixelFormat(Graphics.Format.B8G8R8A8UNorm, AlphaMode.Ignore), 0, 0, RenderTargetUsages.None, Direct3D.FeatureLevel.Default) + + #End Region + + #Region "Paint2DForm()" + Public Sub New() + InitializeComponent() + For i As Integer = 0 To traparencyList.Items.Count - 1 + traparencyList.Items(i) = CType(traparencyList.Items(i), String).Replace(".", CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator) + Next + strokeWidths.SelectedItem = "2" + traparencyList.SelectedIndex = 0 + End Sub + #End Region + + #Region "renderControl_SizeChanged()" + Private Sub renderControl_SizeChanged(ByVal sender As Object, ByVal e As EventArgs) Handles renderControl.SizeChanged + If renderTarget IsNot Nothing Then + ' Resize the render targrt to the actual host size + Dim size As New SizeU(CUInt(renderControl.ClientSize.Width), CUInt(renderControl.ClientSize.Height)) + renderTarget.Resize(size) + End If + End Sub + #End Region + + #Region "CreateDeviceResources()" + ''' + ''' This method creates the render target and associated D2D and DWrite resources + ''' + Private Sub CreateDeviceResources() + ' Only calls if resources have not been initialize before + If renderTarget Is Nothing Then + ' Create the render target + Dim size As New SizeU(CUInt(renderControl.ClientSize.Width), CUInt(renderControl.ClientSize.Height)) + Dim hwndProps As New HwndRenderTargetProperties(renderControl.Handle, size, PresentOptions.RetainContents) + renderTarget = d2dFactory.CreateHwndRenderTarget(renderProps, hwndProps) + + ' Create an initial black brush + brushes.Add(renderTarget.CreateSolidColorBrush(New ColorF(Color.Black.ToArgb()))) + currentBrushIndex = 0 + End If + End Sub + #End Region + + #Region "RenderScene()" + Private Sub RenderScene() + CreateDeviceResources() + + If renderTarget.IsOccluded Then + Return + End If + + renderTarget.BeginDraw() + + renderTarget.Clear(WhiteBackgroundColor) + + For Each shape As DrawingShape In drawingShapes + shape.Draw(renderTarget) + Next shape + + renderTarget.EndDraw() + End Sub + #End Region + + #Region "renderControl_Load()" + Private Sub renderControl_Load(ByVal sender As Object, ByVal e As EventArgs) Handles renderControl.Load + LoadDeviceIndependentResource() + renderControl.Render = AddressOf RenderScene + currentButton = arrowButton + End Sub + + Private Sub LoadDeviceIndependentResource() + ' Create the D2D Factory + ' This really needs to be set to type MultiThreaded if rendering is to be performed by multiple threads, + ' such as if used in a control similar to DirectControl sample control where rendering is done by a dedicated render thread, + ' especially if multiple such controls are used in one application, but also when multiple applications use D2D Factories. + ' + ' In this sample - SingleThreaded type is used because rendering is only done by the main/UI thread and only when required + ' (when the surface gets invalidated) making the risk of synchronization problems - quite low. + d2dFactory = D2DFactory.CreateFactory(D2DFactoryType.MultiThreaded) + + ' Create the DWrite Factory + dwriteFactory = DWriteFactory.CreateFactory() + + ' Create the WIC Factory + wicFactory = ImagingFactory.Create() + + TextBoxStroke = d2dFactory.CreateStrokeStyle(New StrokeStyleProperties(CapStyle.Flat, CapStyle.Flat, CapStyle.Round, LineJoin.Miter, 5.0f, DashStyle.Dash, 3f), Nothing) + + End Sub + #End Region + + #Region "renderControl_MouseDown()" + Private Sub renderControl_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles renderControl.MouseDown + If Not isDrawing Then + Return + End If + + isDragging = True + startPoint.X = e.X + startPoint.Y = e.Y + endPoint = startPoint + + Select Case currentShapeType + Case Shape.Line + currentShape = New LineShape(Me, startPoint, startPoint, currentStrokeSize, currentBrushIndex) + drawingShapes.Add(currentShape) + Case Shape.Bitmap + currentShape = New BitmapShape(Me, New RectF(startPoint.X, startPoint.Y, startPoint.X + 5, startPoint.Y + 5), currentBitmap, currentTransparency) + drawingShapes.Add(currentShape) + Case Shape.RoundedRectangle + currentShape = New RoundRectangleShape(Me, New RoundedRect(New RectF(startPoint.X, startPoint.Y, startPoint.X, startPoint.Y), 20f, 20f), currentStrokeSize, currentBrushIndex, fill) + drawingShapes.Add(currentShape) + Case Shape.Rectangle + currentShape = New RectangleShape(Me, New RectF(startPoint.X, startPoint.Y, startPoint.X, startPoint.Y), currentStrokeSize, currentBrushIndex, fill) + drawingShapes.Add(currentShape) + Case Shape.Ellipse + currentShape = New EllipseShape(Me, New Ellipse(startPoint, 0, 0), currentStrokeSize, currentBrushIndex, fill) + drawingShapes.Add(currentShape) + Case Shape.Text + currentShape = New TextShape(Me, textDialog.TextLayout, startPoint, 100, 100, currentBrushIndex) + drawingShapes.Add(currentShape) + Case Shape.Geometry + currentShape = New GeometryShape(Me, startPoint, currentStrokeSize, currentBrushIndex, fill) + drawingShapes.Add(currentShape) + End Select + Invalidate() + End Sub + #End Region + + #Region "renderControl_MouseMove()" + Private Sub renderControl_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles renderControl.MouseMove + If (Not isDrawing) OrElse (Not isDragging) Then + Return + End If + + endPoint.X = e.X + endPoint.Y = e.Y + + currentShape.EndPoint = endPoint + renderControl.Invalidate() + End Sub + #End Region + + #Region "renderControl_MouseUp()" + Private Sub renderControl_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles renderControl.MouseUp + If (Not isDragging) OrElse (Not isDrawing) Then + Return + End If + currentShape.EndDraw() + isDragging = False + renderControl.Invalidate() + End Sub + #End Region + + #Region "SwitchDrawMode()" + Private Sub SwitchDrawMode(ByVal currentModeButton As Object) + + isDrawing = True + + ' Unselect the previous button + If currentButton IsNot Nothing Then + currentButton.Checked = False + End If + + ' Select the new button + currentButton = TryCast(currentModeButton, ToolStripButton) + If currentButton IsNot Nothing Then + currentButton.Checked = True + End If + End Sub + #End Region + + #Region "lineButton_Click()" + Private Sub lineButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles lineButton.Click + currentShapeType = Shape.Line + SwitchDrawMode(sender) + End Sub + #End Region + + #Region "rectButton_Click()" + Private Sub rectButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles rectButton.Click + currentShapeType = Shape.Rectangle + SwitchDrawMode(sender) + End Sub + #End Region + + #Region "roundrectButton_Click()" + Private Sub roundrectButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles roundrectButton.Click + currentShapeType = Shape.RoundedRectangle + SwitchDrawMode(sender) + End Sub + #End Region + + #Region "ellipseButton_Click()" + Private Sub ellipseButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles ellipseButton.Click + currentShapeType = Shape.Ellipse + SwitchDrawMode(sender) + End Sub + #End Region + + #Region "bitmapButton_Click()" + Private Sub bitmapButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles bitmapButton.Click + If bitmapDialog Is Nothing Then + bitmapDialog = New OpenFileDialog() + bitmapDialog.DefaultExt = "*.jpg;*.png" + End If + If bitmapDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK Then + Dim filename As String = bitmapDialog.FileName + currentBitmap = BitmapUtilities.LoadBitmapFromFile(renderTarget, wicFactory, filename) + + currentShapeType = Shape.Bitmap + SwitchDrawMode(sender) + End If + End Sub + #End Region + + #Region "textButton_Click()" + Private Sub textButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles textButton.Click + If textDialog Is Nothing Then + textDialog = New TextDialog(Me) + End If + + If textDialog.ShowDialog() = System.Windows.Forms.DialogResult.OK Then + currentShapeType = Shape.Text + SwitchDrawMode(sender) + End If + End Sub + #End Region + + #Region "geometryButton_Click()" + Private Sub geometryButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles geometryButton.Click + currentShapeType = Shape.Geometry + SwitchDrawMode(sender) + End Sub + #End Region + + #Region "brushButton_Click()" + Private Sub brushButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles brushButton.Click + If brushDialog Is Nothing OrElse brushDialog.IsDisposed Then + brushDialog = New BrushDialog(Me, renderTarget) + End If + + brushDialog.Show() + brushDialog.Activate() + End Sub + #End Region + + #Region "fillButton_Click()" + Private Sub fillButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles fillButton.Click + fill = Not fill + End Sub + #End Region + + #Region "strokeWidths_SelectedIndexChanged()" + Private Sub strokeWidths_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles strokeWidths.SelectedIndexChanged + Dim f As Single + If Single.TryParse(TryCast(strokeWidths.Text, String), f) Then + Me.currentStrokeSize = f + End If + End Sub + #End Region + + #Region "traparencyList_SelectedIndexChanged()" + Private Sub traparencyList_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles traparencyList.SelectedIndexChanged + Dim f As Single + If Single.TryParse(TryCast(traparencyList.Text, String), f) Then + Me.currentTransparency = f + End If + End Sub + #End Region + + #Region "clearButton_Click()" + Private Sub clearButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles clearButton.Click + drawingShapes.Clear() + renderControl.Invalidate() + End Sub + #End Region + + Private Sub toolStrip1_MouseEnter(ByVal sender As Object, ByVal e As EventArgs) Handles toolStrip1.MouseEnter + Me.Cursor = Cursors.Arrow + End Sub + + Private Sub renderControl_MouseEnter(ByVal sender As Object, ByVal e As EventArgs) Handles renderControl.MouseEnter + If isDrawing Then + Me.Cursor = Cursors.Cross + End If + End Sub + + Private Sub toolStripButton1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles arrowButton.Click + Me.isDrawing = False + Me.currentShape = Nothing + + If currentButton IsNot Nothing Then + currentButton.Checked = False + End If + + currentButton = arrowButton + arrowButton.Checked = True + End Sub + + Private Sub saveButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles saveButton.Click + If renderTarget Is Nothing Then + MessageBox.Show("Unable to save file.") + Return + End If + + Dim saveDlg As New SaveFileDialog() + saveDlg.Filter = "Bitmap image (*.bmp)|*.bmp|Png image (*.png)|*.png|Jpeg image (*.jpg)|*.jpg|Gif image (*.gif)|*.gif" + + If saveDlg.ShowDialog() = Windows.Forms.DialogResult.OK Then + + Dim size = New SizeU(CUInt(ClientSize.Width), CUInt(ClientSize.Height)) + + Dim wicBitmap = wicFactory.CreateImagingBitmap(size.Width, size.Height, PixelFormats.Bgr32Bpp, BitmapCreateCacheOption.CacheOnLoad) + + Dim d2dBitmap = renderTarget.CreateBitmap(size, New BitmapProperties(New PixelFormat(Microsoft.WindowsAPICodePack.DirectX.Graphics.Format.B8G8R8A8UNorm, AlphaMode.Ignore), renderTarget.Dpi.X, renderTarget.Dpi.Y)) + D2DBitmap.CopyFromRenderTarget(renderTarget) + + Dim wicRenderTarget = d2dFactory.CreateWicBitmapRenderTarget(wicBitmap, renderProps) + + wicRenderTarget.BeginDraw() + + wicRenderTarget.DrawBitmap(d2dBitmap) + wicRenderTarget.EndDraw() + + Dim fileType As Guid + If saveDlg.FilterIndex = 1 Then + fileType = ContainerFormats.Bmp + ElseIf saveDlg.FilterIndex = 1 Then + fileType = ContainerFormats.Png + ElseIf saveDlg.FilterIndex = 1 Then + fileType = ContainerFormats.Jpeg + ElseIf saveDlg.FilterIndex = 1 Then + fileType = ContainerFormats.Gif + Else + fileType = ContainerFormats.Bmp + End If + + wicBitmap.SaveToFile(wicFactory, fileType, saveDlg.FileName) + End If + + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/Program.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/Program.vb new file mode 100644 index 00000000..a5300267 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/Program.vb @@ -0,0 +1,22 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms + +Namespace D2DPaint + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New Paint2DForm()) + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/RectangleShape.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/RectangleShape.vb new file mode 100644 index 00000000..00ad5c00 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/RectangleShape.vb @@ -0,0 +1,37 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 + +Namespace D2DPaint + Friend Class RectangleShape + Inherits DrawingShape + Friend _rect As RectF + Friend _strokeWidth As Single + Friend _selectedBrushIndex As Integer + + + Friend Sub New(ByVal parent As Paint2DForm, ByVal rect As RectF, ByVal strokeWidth As Single, ByVal selectedBrush As Integer, ByVal fill As Boolean) + MyBase.New(parent, fill) + _rect = rect + _strokeWidth = strokeWidth + _selectedBrushIndex = selectedBrush + End Sub + + Protected Friend Overrides Sub Draw(ByVal renderTarget As RenderTarget) + If _fill Then + renderTarget.FillRectangle(_rect, _parent.brushes(_selectedBrushIndex)) + Else + renderTarget.DrawRectangle(_rect, _parent.brushes(_selectedBrushIndex), _strokeWidth) + End If + End Sub + Protected Friend Overrides WriteOnly Property EndPoint() As Point2F + Set(ByVal value As Point2F) + _rect.Right = value.X + _rect.Bottom = value.Y + End Set + End Property + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/Resources/Resource.Designer.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/Resources/Resource.Designer.vb new file mode 100644 index 00000000..ae48277d --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/Resources/Resource.Designer.vb @@ -0,0 +1,67 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4927 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Class Resource + + Private Shared resourceMan As Global.System.Resources.ResourceManager + + Private Shared resourceCulture As Global.System.Globalization.CultureInfo + + _ + Friend Sub New() + MyBase.New + End Sub + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend Shared ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resource", GetType(Resource).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Shared Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/Resources/Resource.resx b/source/Samples/DirectX/VB/Direct2D/Paint2D/Resources/Resource.resx new file mode 100644 index 00000000..7080a7d1 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/Resources/Resource.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/Resources/arrow1.png b/source/Samples/DirectX/VB/Direct2D/Paint2D/Resources/arrow1.png new file mode 100644 index 00000000..f5d00542 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct2D/Paint2D/Resources/arrow1.png differ diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/RoundRectangleShape.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/RoundRectangleShape.vb new file mode 100644 index 00000000..cc3ff767 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/RoundRectangleShape.vb @@ -0,0 +1,37 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 + +Namespace D2DPaint + Friend Class RoundRectangleShape + Inherits DrawingShape + Friend _rect As RoundedRect + Friend _strokeWidth As Single + Friend _selectedBrushIndex As Integer + + + Friend Sub New(ByVal parent As Paint2DForm, ByVal rect As RoundedRect, ByVal strokeWidth As Single, ByVal selectedBrush As Integer, ByVal fill As Boolean) + MyBase.New(parent, fill) + _rect = rect + _strokeWidth = strokeWidth + _selectedBrushIndex = selectedBrush + End Sub + + Protected Friend Overrides Sub Draw(ByVal renderTarget As RenderTarget) + If _fill Then + renderTarget.FillRoundedRectangle(_rect, _parent.brushes(_selectedBrushIndex)) + Else + renderTarget.DrawRoundedRectangle(_rect, _parent.brushes(_selectedBrushIndex), _strokeWidth) + End If + End Sub + + Protected Friend Overrides WriteOnly Property EndPoint() As Point2F + Set(ByVal value As Point2F) + _rect.Rect = New RectF(_rect.Rect.Left, _rect.Rect.Top, value.X, value.Y) + End Set + End Property + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/TextDialog.Designer.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/TextDialog.Designer.vb new file mode 100644 index 00000000..c3887ea2 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/TextDialog.Designer.vb @@ -0,0 +1,232 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace D2DPaint + Partial Public Class TextDialog + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Dim CancelTextButton As System.Windows.Forms.Button + Me.AddTextButton = New System.Windows.Forms.Button + Me.underLineCheckBox = New System.Windows.Forms.CheckBox + Me.label1 = New System.Windows.Forms.Label + Me.label2 = New System.Windows.Forms.Label + Me.label3 = New System.Windows.Forms.Label + Me.label4 = New System.Windows.Forms.Label + Me.label5 = New System.Windows.Forms.Label + Me.sizeCombo = New System.Windows.Forms.ComboBox + Me.styleCombo = New System.Windows.Forms.ComboBox + Me.weightCombo = New System.Windows.Forms.ComboBox + Me.stretchCombo = New System.Windows.Forms.ComboBox + Me.textBox = New System.Windows.Forms.TextBox + Me.strikethroughCheckBox = New System.Windows.Forms.CheckBox + Me.fontFamilyCombo = New D2DPaint.FontEnumComboBox + CancelTextButton = New System.Windows.Forms.Button + Me.SuspendLayout() + ' + 'CancelTextButton + ' + CancelTextButton.Location = New System.Drawing.Point(287, 221) + CancelTextButton.Name = "CancelTextButton" + CancelTextButton.Size = New System.Drawing.Size(138, 31) + CancelTextButton.TabIndex = 1 + CancelTextButton.Text = "Cancel" + CancelTextButton.UseVisualStyleBackColor = True + AddHandler CancelTextButton.Click, AddressOf Me.CancelTextButton_Click + ' + 'AddTextButton + ' + Me.AddTextButton.Location = New System.Drawing.Point(99, 221) + Me.AddTextButton.Name = "AddTextButton" + Me.AddTextButton.Size = New System.Drawing.Size(138, 31) + Me.AddTextButton.TabIndex = 0 + Me.AddTextButton.Text = "Add Text" + Me.AddTextButton.UseVisualStyleBackColor = True + ' + 'underLineCheckBox + ' + Me.underLineCheckBox.AutoSize = True + Me.underLineCheckBox.Location = New System.Drawing.Point(37, 183) + Me.underLineCheckBox.Name = "underLineCheckBox" + Me.underLineCheckBox.Size = New System.Drawing.Size(71, 17) + Me.underLineCheckBox.TabIndex = 2 + Me.underLineCheckBox.Text = "Underline" + Me.underLineCheckBox.UseVisualStyleBackColor = True + ' + 'label1 + ' + Me.label1.AutoSize = True + Me.label1.Location = New System.Drawing.Point(34, 30) + Me.label1.Name = "label1" + Me.label1.Size = New System.Drawing.Size(59, 13) + Me.label1.TabIndex = 3 + Me.label1.Text = "Font Name" + ' + 'label2 + ' + Me.label2.AutoSize = True + Me.label2.Location = New System.Drawing.Point(34, 58) + Me.label2.Name = "label2" + Me.label2.Size = New System.Drawing.Size(51, 13) + Me.label2.TabIndex = 4 + Me.label2.Text = "Font Size" + ' + 'label3 + ' + Me.label3.AutoSize = True + Me.label3.Location = New System.Drawing.Point(34, 86) + Me.label3.Name = "label3" + Me.label3.Size = New System.Drawing.Size(54, 13) + Me.label3.TabIndex = 4 + Me.label3.Text = "Font Style" + ' + 'label4 + ' + Me.label4.AutoSize = True + Me.label4.Location = New System.Drawing.Point(34, 114) + Me.label4.Name = "label4" + Me.label4.Size = New System.Drawing.Size(65, 13) + Me.label4.TabIndex = 4 + Me.label4.Text = "Font Weight" + ' + 'label5 + ' + Me.label5.AutoSize = True + Me.label5.Location = New System.Drawing.Point(34, 142) + Me.label5.Name = "label5" + Me.label5.Size = New System.Drawing.Size(65, 13) + Me.label5.TabIndex = 4 + Me.label5.Text = "Font Stretch" + ' + 'sizeCombo + ' + Me.sizeCombo.FormattingEnabled = True + Me.sizeCombo.Items.AddRange(New Object() {"4", "6", "8", "10", "12", "14", "20", "24", "32", "36", "42", "60", ""}) + Me.sizeCombo.Location = New System.Drawing.Point(116, 58) + Me.sizeCombo.Name = "sizeCombo" + Me.sizeCombo.Size = New System.Drawing.Size(121, 21) + Me.sizeCombo.TabIndex = 5 + ' + 'styleCombo + ' + Me.styleCombo.FormattingEnabled = True + Me.styleCombo.Items.AddRange(New Object() {"Normal", "Oblique", "Italic"}) + Me.styleCombo.Location = New System.Drawing.Point(116, 86) + Me.styleCombo.Name = "styleCombo" + Me.styleCombo.Size = New System.Drawing.Size(121, 21) + Me.styleCombo.TabIndex = 5 + ' + 'weightCombo + ' + Me.weightCombo.FormattingEnabled = True + Me.weightCombo.Items.AddRange(New Object() {"Thin", "Extra Light", "Light", "Normal", "Medium", "Semi Bold", "Bold", "Extra Bold", "Black"}) + Me.weightCombo.Location = New System.Drawing.Point(116, 114) + Me.weightCombo.Name = "weightCombo" + Me.weightCombo.Size = New System.Drawing.Size(121, 21) + Me.weightCombo.TabIndex = 5 + ' + 'stretchCombo + ' + Me.stretchCombo.FormattingEnabled = True + Me.stretchCombo.Items.AddRange(New Object() {"None", "Ultra Condensed", "Extra Condensed", "Condensed", "Semi Condensed", "Normal", "Semi Expanded", "Expanded", "Extra Expanded", "Ultra Expanded"}) + Me.stretchCombo.Location = New System.Drawing.Point(116, 142) + Me.stretchCombo.Name = "stretchCombo" + Me.stretchCombo.Size = New System.Drawing.Size(121, 21) + Me.stretchCombo.TabIndex = 5 + ' + 'textBox + ' + Me.textBox.AcceptsReturn = True + Me.textBox.Location = New System.Drawing.Point(268, 30) + Me.textBox.Multiline = True + Me.textBox.Name = "textBox" + Me.textBox.Size = New System.Drawing.Size(200, 133) + Me.textBox.TabIndex = 6 + Me.textBox.Text = "Add Text Here" + ' + 'strikethroughCheckBox + ' + Me.strikethroughCheckBox.AutoSize = True + Me.strikethroughCheckBox.Location = New System.Drawing.Point(131, 183) + Me.strikethroughCheckBox.Name = "strikethroughCheckBox" + Me.strikethroughCheckBox.Size = New System.Drawing.Size(89, 17) + Me.strikethroughCheckBox.TabIndex = 2 + Me.strikethroughCheckBox.Text = "Strikethrough" + Me.strikethroughCheckBox.UseVisualStyleBackColor = True + + ' + ' fontFamilyCombo + ' + Me.fontFamilyCombo.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable + Me.fontFamilyCombo.DropDownHeight = 206 + Me.fontFamilyCombo.FormattingEnabled = True + Me.fontFamilyCombo.IntegralHeight = False + Me.fontFamilyCombo.Location = New System.Drawing.Point(116, 27) + Me.fontFamilyCombo.Name = "fontFamilyCombo" + Me.fontFamilyCombo.Size = New System.Drawing.Size(121, 21) + Me.fontFamilyCombo.TabIndex = 7 + ' + 'TextDialog + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(512, 292) + Me.Controls.Add(fontFamilyCombo) + Me.Controls.Add(Me.textBox) + Me.Controls.Add(Me.stretchCombo) + Me.Controls.Add(Me.weightCombo) + Me.Controls.Add(Me.styleCombo) + Me.Controls.Add(Me.sizeCombo) + Me.Controls.Add(Me.label5) + Me.Controls.Add(Me.label4) + Me.Controls.Add(Me.label3) + Me.Controls.Add(Me.label2) + Me.Controls.Add(Me.label1) + Me.Controls.Add(Me.strikethroughCheckBox) + Me.Controls.Add(Me.underLineCheckBox) + Me.Controls.Add(CancelTextButton) + Me.Controls.Add(Me.AddTextButton) + Me.Name = "TextDialog" + Me.Text = "TextDialog" + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + #End Region + + Private WithEvents AddTextButton As System.Windows.Forms.Button + Private underLineCheckBox As System.Windows.Forms.CheckBox + Private label1 As System.Windows.Forms.Label + Private label2 As System.Windows.Forms.Label + Private label3 As System.Windows.Forms.Label + Private label4 As System.Windows.Forms.Label + Private label5 As System.Windows.Forms.Label + Private sizeCombo As System.Windows.Forms.ComboBox + Private styleCombo As System.Windows.Forms.ComboBox + Private weightCombo As System.Windows.Forms.ComboBox + Private stretchCombo As System.Windows.Forms.ComboBox + Private textBox As System.Windows.Forms.TextBox + Private strikethroughCheckBox As System.Windows.Forms.CheckBox + Private fontFamilyCombo As FontEnumComboBox + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/TextDialog.resx b/source/Samples/DirectX/VB/Direct2D/Paint2D/TextDialog.resx new file mode 100644 index 00000000..b0e37157 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/TextDialog.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + False + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/TextDialog.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/TextDialog.vb new file mode 100644 index 00000000..1c33ae6a --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/TextDialog.vb @@ -0,0 +1,62 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms +Imports System.Globalization +Imports Microsoft.WindowsAPICodePack.DirectX.DirectWrite + +Namespace D2DPaint + Partial Public Class TextDialog + Inherits Form + Private parent_Renamed As Paint2DForm + #Region "TextLayout" + Private textLayout_Renamed As TextLayout + Friend Property TextLayout() As TextLayout + Get + Dim textFormat As TextFormat = parent_Renamed.dwriteFactory.CreateTextFormat(fontFamilyCombo.Text, Single.Parse(sizeCombo.Text), CType((weightCombo.SelectedIndex + 1) * 100, FontWeight), CType(styleCombo.SelectedIndex, FontStyle), CType(stretchCombo.SelectedIndex, FontStretch), CultureInfo.CurrentUICulture) + textLayout_Renamed = parent_Renamed.dwriteFactory.CreateTextLayout(textBox.Text, textFormat, 100, 100) + If underLineCheckBox.Checked Then + textLayout_Renamed.SetUnderline(True, New TextRange(0, CUInt(textBox.Text.Length))) + End If + If strikethroughCheckBox.Checked Then + textLayout_Renamed.SetStrikethrough(True, New TextRange(0, CUInt(textBox.Text.Length))) + End If + Return textLayout_Renamed + End Get + Set(ByVal value As TextLayout) + textLayout_Renamed = value + End Set + End Property +#End Region + + Public Sub New(ByVal parent As Paint2DForm) + InitializeComponent() + + Me.parent_Renamed = parent + If fontFamilyCombo Is Nothing Then + fontFamilyCombo = New FontEnumComboBox + End If + + If Not DesignMode Then + fontFamilyCombo.Initialize() + End If + fontFamilyCombo.SelectedIndex = 0 ' First Choice + sizeCombo.SelectedIndex = 7 ' 24.0 + weightCombo.SelectedIndex = 3 ' Normal + styleCombo.SelectedIndex = 0 ' Normal + stretchCombo.SelectedIndex = 5 ' Normal + End Sub + + Private Sub AddTextButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles AddTextButton.Click + DialogResult = System.Windows.Forms.DialogResult.OK + Close() + End Sub + + + Private Sub CancelTextButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) + DialogResult = System.Windows.Forms.DialogResult.Cancel + Close() + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/Paint2D/TextShape.vb b/source/Samples/DirectX/VB/Direct2D/Paint2D/TextShape.vb new file mode 100644 index 00000000..ec0ed937 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/Paint2D/TextShape.vb @@ -0,0 +1,49 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 +Imports Microsoft.WindowsAPICodePack.DirectX.DirectWrite + +Namespace D2DPaint + Friend Class TextShape + Inherits DrawingShape + Friend _maxX As Single + Friend _maxY As Single + Friend _point0 As Point2F + Friend _textLayout As TextLayout + Friend _selectedBrushIndex As Integer + + Private _drawBorder As Boolean = True + + Friend Sub New(ByVal parent As Paint2DForm, ByVal textLayout As TextLayout, ByVal startPoint As Point2F, ByVal maxX As Single, ByVal maxY As Single, ByVal selectedBrush As Integer) + MyBase.New(parent) + _maxX = maxX + _maxY = maxY + _textLayout = textLayout + _selectedBrushIndex = selectedBrush + _point0 = startPoint + End Sub + + Protected Friend Overrides Sub Draw(ByVal renderTarget As RenderTarget) + If _drawBorder Then + + renderTarget.DrawRectangle(New RectF(_point0.X, _point0.Y, _point0.X + _textLayout.MaxWidth, _point0.Y + _textLayout.MaxHeight), _parent.brushes(0), 1.5f, _parent.TextBoxStroke) + End If + + renderTarget.DrawTextLayout(_point0, _textLayout, _parent.brushes(_selectedBrushIndex), DrawTextOptions.Clip) + End Sub + + Protected Friend Overrides Sub EndDraw() + _drawBorder = False + End Sub + + Protected Friend Overrides WriteOnly Property EndPoint() As Point2F + Set(ByVal value As Point2F) + _textLayout.MaxWidth = Math.Max(5, value.X - _point0.X) + _textLayout.MaxHeight = Math.Max(5, value.Y - _point0.Y) + End Set + End Property + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/RandomShapes/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct2D/RandomShapes/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..31850740 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/RandomShapes/My Project/AssemblyInfo.vb @@ -0,0 +1,39 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct2D/RandomShapes/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct2D/RandomShapes/My Project/Resources.Designer.vb new file mode 100644 index 00000000..39e079d0 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/RandomShapes/My Project/Resources.Designer.vb @@ -0,0 +1,65 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4927 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + + +'This class was auto-generated by the StronglyTypedResourceBuilder +'class via a tool like ResGen or Visual Studio. +'To add or remove a member, edit your .ResX file then rerun ResGen +'with the /str option, or rebuild your VS project. +''' +''' A strongly-typed resource class, for looking up localized strings, etc. +''' + _ +Friend Class Resources + + Private Shared resourceMan As Global.System.Resources.ResourceManager + + Private Shared resourceCulture As Global.System.Globalization.CultureInfo + + _ + Friend Sub New() + MyBase.New + End Sub + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend Shared ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Shared Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property +End Class diff --git a/source/Samples/DirectX/VB/Direct2D/RandomShapes/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct2D/RandomShapes/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/RandomShapes/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/RandomShapes/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct2D/RandomShapes/My Project/Settings.Designer.vb new file mode 100644 index 00000000..eee7b96a --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/RandomShapes/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4927 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class Settings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings),Settings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As Settings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Settings + Get + Return Global.Settings.Default + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/RandomShapes/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct2D/RandomShapes/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/RandomShapes/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct2D/RandomShapes/Program.vb b/source/Samples/DirectX/VB/Direct2D/RandomShapes/Program.vb new file mode 100644 index 00000000..17c090a0 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/RandomShapes/Program.vb @@ -0,0 +1,21 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms + +Namespace RandomShapes + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New Window()) + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/RandomShapes/RandomShapesDemo.sln b/source/Samples/DirectX/VB/Direct2D/RandomShapes/RandomShapesDemo.sln new file mode 100644 index 00000000..4fccee20 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/RandomShapes/RandomShapesDemo.sln @@ -0,0 +1,56 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RandomShapesDemo", "RandomShapesDemo.vbproj", "{081B37CA-E9FF-4F68-94A5-57BB43145FDC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D2DShapes", "..\D2DShapes\D2DShapes.vbproj", "{32D3BC0C-7DCB-4132-866D-A5060E16066B}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|Any CPU.Build.0 = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {081B37CA-E9FF-4F68-94A5-57BB43145FDC}.Release|Win32.ActiveCfg = Release|Any CPU + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Debug|Win32.ActiveCfg = Debug|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|Any CPU.Build.0 = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {32D3BC0C-7DCB-4132-866D-A5060E16066B}.Release|Win32.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/VB/Direct2D/RandomShapes/RandomShapesDemo.vbproj b/source/Samples/DirectX/VB/Direct2D/RandomShapes/RandomShapesDemo.vbproj new file mode 100644 index 00000000..77c65538 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/RandomShapes/RandomShapesDemo.vbproj @@ -0,0 +1,99 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {081B37CA-E9FF-4F68-94A5-57BB43145FDC} + WinExe + + + RandomShapesDemo + v3.5 + On + Binary + Off + On + 512 + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + + + + + + Form + + + Window.vb + + + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + Window.vb + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + True + Settings.settings + True + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {32D3BC0C-7DCB-4132-866D-A5060E16066B} + D2DShapes + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/RandomShapes/Window.Designer.vb b/source/Samples/DirectX/VB/Direct2D/RandomShapes/Window.Designer.vb new file mode 100644 index 00000000..99e43ca4 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/RandomShapes/Window.Designer.vb @@ -0,0 +1,60 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace RandomShapes + Partial Public Class Window + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Me.d2DShapesControlWithButtons1 = New D2DShapes.D2DShapesControlWithButtons() + Me.SuspendLayout() + ' + ' d2DShapesControlWithButtons1 + ' + Me.d2DShapesControlWithButtons1.BackColor = System.Drawing.Color.Bisque + Me.d2DShapesControlWithButtons1.Dock = System.Windows.Forms.DockStyle.Fill + Me.d2DShapesControlWithButtons1.Location = New System.Drawing.Point(0, 0) + Me.d2DShapesControlWithButtons1.Name = "d2DShapesControlWithButtons1" + Me.d2DShapesControlWithButtons1.NumberOfShapesToAdd = 2 + Me.d2DShapesControlWithButtons1.Size = New System.Drawing.Size(728, 465) + Me.d2DShapesControlWithButtons1.TabIndex = 0 + ' + ' Window + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6F, 13F) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(728, 465) + Me.Controls.Add(Me.d2DShapesControlWithButtons1) + Me.Name = "Window" + Me.Text = "Random Shapes" + Me.WindowState = System.Windows.Forms.FormWindowState.Maximized +' Me.Load += New System.EventHandler(Me.Window_Load) + Me.ResumeLayout(False) + + End Sub + + #End Region + + Private d2DShapesControlWithButtons1 As D2DShapes.D2DShapesControlWithButtons + End Class +End Namespace + diff --git a/source/Samples/DirectX/VB/Direct2D/RandomShapes/Window.resx b/source/Samples/DirectX/VB/Direct2D/RandomShapes/Window.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/RandomShapes/Window.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/RandomShapes/Window.vb b/source/Samples/DirectX/VB/Direct2D/RandomShapes/Window.vb new file mode 100644 index 00000000..b27fa9f2 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/RandomShapes/Window.vb @@ -0,0 +1,19 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System + +Imports System.Windows.Forms + +Namespace RandomShapes + Partial Public Class Window + Inherits Form + Public Sub New() + InitializeComponent() + End Sub + + Private Sub Window_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load + d2DShapesControlWithButtons1.Initialize() + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/TextInlineImage/Application.xaml b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/Application.xaml new file mode 100644 index 00000000..6b5d29ab --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/Application.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct2D/TextInlineImage/Application.xaml.vb b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/Application.xaml.vb new file mode 100644 index 00000000..c8fd7745 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/Application.xaml.vb @@ -0,0 +1,19 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Configuration +Imports System.Data +Imports System.Linq +Imports System.Windows + +Namespace Direct2D_Demo_WPF + ''' + ''' Interaction logic for App.xaml + ''' + Partial Public Class App + Inherits Application + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/TextInlineImage/BitmapUtilities.vb b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/BitmapUtilities.vb new file mode 100644 index 00000000..a103f103 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/BitmapUtilities.vb @@ -0,0 +1,38 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 +Imports System.IO + +Namespace Microsoft.WindowsAPICodePack.Samples + Friend Class BitmapUtilities + Friend Shared Function LoadBitmapFromFile(ByVal renderTarget As RenderTarget, ByVal wicFactory As ImagingFactory, ByVal fileName As String) As D2DBitmap + + Dim decoder As BitmapDecoder = wicFactory.CreateDecoderFromFileName(fileName, DesiredAccess.Read, DecodeMetadataCacheOption.OnLoad) + Return CreateBitmapFromDecoder(renderTarget, wicFactory, decoder) + End Function + + Friend Shared Function LoadBitmapFromStream(ByVal renderTarget As RenderTarget, ByVal wicFactory As ImagingFactory, ByVal ioStream As Stream) As D2DBitmap + Dim decoder As BitmapDecoder = wicFactory.CreateDecoderFromStream(ioStream, DecodeMetadataCacheOption.OnLoad) + Return CreateBitmapFromDecoder(renderTarget, wicFactory, decoder) + End Function + + Private Shared Function CreateBitmapFromDecoder(ByVal renderTarget As RenderTarget, ByVal wicFactory As ImagingFactory, ByVal decoder As BitmapDecoder) As D2DBitmap + Dim source As BitmapFrameDecode + Dim converter As FormatConverter + ' Create the initial frame. + source = decoder.GetFrame(0) + + ' Convert the image format to 32bppPBGRA -- which Direct2D expects. + converter = wicFactory.CreateFormatConverter() + converter.Initialize(source.ToBitmapSource(), PixelFormats.Pbgra32Bpp, BitmapDitherType.None, BitmapPaletteType.MedianCut) + + ' Create a Direct2D bitmap from the WIC bitmap. + Return renderTarget.CreateBitmapFromWicBitmap(converter.ToBitmapSource()) + End Function + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/TextInlineImage/ImageInlineObject.vb b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/ImageInlineObject.vb new file mode 100644 index 00000000..c5d5f598 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/ImageInlineObject.vb @@ -0,0 +1,65 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports Microsoft.WindowsAPICodePack.DirectX.DirectWrite +Imports Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 +Imports Microsoft.WindowsAPICodePack.DirectX +Imports System.Runtime.InteropServices +Imports System.Runtime.InteropServices.ComTypes +Imports System.IO +Imports System.Windows + +Namespace Microsoft.WindowsAPICodePack.Samples + ''' + ''' This class implements a custom Direct Write Inline Object (ICustomInlineObject) + ''' that displays a given image + ''' + Public Class ImageInlineObject + Implements ICustomInlineObject + Private _renderTarget As RenderTarget + Private _bitmap As D2DBitmap + Private _bitmapSize As SizeF + + Public Sub New(ByVal renderTarget As RenderTarget, ByVal wicFactory As ImagingFactory, ByVal resourceName As String) + _renderTarget = renderTarget + + Using stream As Stream = System.Windows.Application.ResourceAssembly.GetManifestResourceStream(resourceName) + _bitmap = BitmapUtilities.LoadBitmapFromStream(renderTarget, wicFactory, stream) + + ' Save the bitmap size, for faster access + _bitmapSize = _bitmap.Size + End Using + End Sub + + Public ReadOnly Property BreakConditionAfter1() As DirectX.DirectWrite.BreakCondition Implements DirectX.DirectWrite.ICustomInlineObject.BreakConditionAfter + Get + Return BreakCondition.Neutral + End Get + End Property + + Public ReadOnly Property BreakConditionBefore1() As DirectX.DirectWrite.BreakCondition Implements DirectX.DirectWrite.ICustomInlineObject.BreakConditionBefore + Get + Return BreakCondition.Neutral + End Get + End Property + + Public Sub Draw(ByVal originX As Single, ByVal originY As Single, ByVal isSideways As Boolean, ByVal isRightToLeft As Boolean, ByVal clientDrawingEffect As DirectX.Direct2D1.Brush) Implements DirectX.DirectWrite.ICustomInlineObject.Draw + Dim imageRect As New RectF(originX, originY, originX + _bitmapSize.Width, originY + _bitmapSize.Height) + _renderTarget.DrawBitmap(_bitmap, 1, BitmapInterpolationMode.Linear, imageRect) + End Sub + + Public ReadOnly Property Metrics() As DirectX.DirectWrite.InlineObjectMetrics Implements DirectX.DirectWrite.ICustomInlineObject.Metrics + Get + Return New InlineObjectMetrics(_bitmapSize.Width, _bitmapSize.Height, _bitmapSize.Height, False) + End Get + End Property + + Public ReadOnly Property OverhangMetrics() As DirectX.DirectWrite.OverhangMetrics Implements DirectX.DirectWrite.ICustomInlineObject.OverhangMetrics + Get + Return New OverhangMetrics(0, 0, 0, 0) + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/TextInlineImage/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..0121064f --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/My Project/AssemblyInfo.vb @@ -0,0 +1,56 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Resources +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + + '(used if a resource is not found in the page, + ' or application resource dictionaries) + '(used if a resource is not found in the page, + ' app, or any theme specific resource dictionaries) + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct2D/TextInlineImage/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/My Project/Resources.Designer.vb new file mode 100644 index 00000000..39e079d0 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/My Project/Resources.Designer.vb @@ -0,0 +1,65 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4927 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + + +'This class was auto-generated by the StronglyTypedResourceBuilder +'class via a tool like ResGen or Visual Studio. +'To add or remove a member, edit your .ResX file then rerun ResGen +'with the /str option, or rebuild your VS project. +''' +''' A strongly-typed resource class, for looking up localized strings, etc. +''' + _ +Friend Class Resources + + Private Shared resourceMan As Global.System.Resources.ResourceManager + + Private Shared resourceCulture As Global.System.Globalization.CultureInfo + + _ + Friend Sub New() + MyBase.New + End Sub + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend Shared ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Shared Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property +End Class diff --git a/source/Samples/DirectX/VB/Direct2D/TextInlineImage/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/TextInlineImage/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/My Project/Settings.Designer.vb new file mode 100644 index 00000000..eee7b96a --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4927 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class Settings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings),Settings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As Settings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Settings + Get + Return Global.Settings.Default + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/TextInlineImage/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/My Project/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/TextInlineImage/TextInlineImage.sln b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/TextInlineImage.sln new file mode 100644 index 00000000..da874de5 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/TextInlineImage.sln @@ -0,0 +1,53 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TextInlineImage", "TextInlineImage.vbproj", "{06E0C795-735A-425F-9864-1308612F19C1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {06E0C795-735A-425F-9864-1308612F19C1}.Release|Win32.ActiveCfg = Release|Any CPU + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/VB/Direct2D/TextInlineImage/TextInlineImage.vbproj b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/TextInlineImage.vbproj new file mode 100644 index 00000000..6cfdd6d0 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/TextInlineImage.vbproj @@ -0,0 +1,173 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {06E0C795-735A-425F-9864-1308612F19C1} + WinExe + + + TextInlineImage + v3.5 + On + Binary + Off + On + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + + + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + + 3.5 + + + 3.5 + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + Application.xaml + Code + + + Window1.xaml + Code + + + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + + + + + + + False + .NET Framework Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + false + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D/TextInlineImage/Window1.xaml b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/Window1.xaml new file mode 100644 index 00000000..68284542 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/Window1.xaml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct2D/TextInlineImage/Window1.xaml.vb b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/Window1.xaml.vb new file mode 100644 index 00000000..fad0f85e --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/Window1.xaml.vb @@ -0,0 +1,118 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows +Imports Microsoft.WindowsAPICodePack.DirectX.Controls +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 +Imports Microsoft.WindowsAPICodePack.DirectX.DirectWrite + +Imports Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent + +Namespace Microsoft.WindowsAPICodePack.Samples + ''' + ''' Interaction logic for Window1.xaml + ''' + Partial Public Class Window1 + Inherits Window + Private d2dFactory As D2DFactory + Private dwriteFactory As DWriteFactory + Private wicFactory As ImagingFactory + Private renderTarget As HwndRenderTarget + Private blackBrush As SolidColorBrush + Private inlineImage As ImageInlineObject + Private textFormat As TextFormat + Private textLayout As TextLayout + + Public Sub New() + InitializeComponent() + AddHandler host.Loaded, AddressOf host_Loaded + AddHandler host.SizeChanged, AddressOf host_SizeChanged + End Sub + + Private Sub host_SizeChanged(ByVal sender As Object, ByVal e As SizeChangedEventArgs) + If renderTarget IsNot Nothing Then + ' Resize the render targrt to the actual host size + renderTarget.Resize(New SizeU(CUInt(host.ActualWidth), CUInt(host.ActualHeight))) + + ' Resize the text layout max width and height as well + textLayout.MaxWidth = CSng(host.ActualWidth) + textLayout.MaxHeight = CSng(host.ActualHeight) + End If + + InvalidateVisual() + End Sub + + Private Sub host_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) + CreateDeviceIndependentResources() + + ' Start rendering now + host.Render = AddressOf Render + host.InvalidateVisual() + End Sub + + Private Sub CreateDeviceIndependentResources() + ' Create the D2D Factory + d2dFactory = D2DFactory.CreateFactory(D2DFactoryType.SingleThreaded) + + ' Create the DWrite Factory + dwriteFactory = DWriteFactory.CreateFactory() + + wicFactory = ImagingFactory.Create() + + Dim text As String = "Inline Object * Sample" + + textFormat = dwriteFactory.CreateTextFormat("Gabriola", 72) + + textFormat.TextAlignment = DirectX.DirectWrite.TextAlignment.Center + textFormat.ParagraphAlignment = DirectX.DirectWrite.ParagraphAlignment.Center + + textLayout = dwriteFactory.CreateTextLayout(text, textFormat, CSng(host.ActualWidth), CSng(host.ActualHeight)) + End Sub + + + ''' + ''' This method creates the render target and all associated D2D and DWrite resources + ''' + Private Sub CreateDeviceResources() + ' Only calls if resources have not been initialize before + If renderTarget Is Nothing Then + ' Create the render target + Dim size As New SizeU(CUInt(host.ActualWidth), CUInt(host.ActualHeight)) + Dim props As New RenderTargetProperties() + Dim hwndProps As New HwndRenderTargetProperties(host.Handle, size, PresentOptions.None) + renderTarget = d2dFactory.CreateHwndRenderTarget(props, hwndProps) + + ' Create the black brush for text + blackBrush = renderTarget.CreateSolidColorBrush(New ColorF(0,0, 0, 1)) + + inlineImage = New ImageInlineObject(renderTarget, wicFactory, "img1.jpg") + + Dim textRange As New TextRange(14, 1) + textLayout.SetInlineObject(inlineImage, textRange) + End If + End Sub + + Private Sub Render() + + CreateDeviceResources() + + If renderTarget.IsOccluded Then + Return + End If + + Dim renderTargetSize As SizeF = renderTarget.Size + + renderTarget.BeginDraw() + + renderTarget.Clear(New ColorF(1, 1, 1, 0)) + + renderTarget.DrawTextLayout(New Point2F(0,0), textLayout, blackBrush) + + renderTarget.EndDraw() + + End Sub + + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D/TextInlineImage/img1.jpg b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/img1.jpg new file mode 100644 index 00000000..4b124b7b Binary files /dev/null and b/source/Samples/DirectX/VB/Direct2D/TextInlineImage/img1.jpg differ diff --git a/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/Application.xaml b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/Application.xaml new file mode 100644 index 00000000..285a1ab0 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/Application.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/Application.xaml.vb b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/Application.xaml.vb new file mode 100644 index 00000000..4e5e1d4f --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/Application.xaml.vb @@ -0,0 +1,18 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Configuration +Imports System.Data +Imports System.Linq +Imports System.Windows + +Namespace Microsoft.WindowsAPICodePack.DirectX.Samples + ''' + ''' Interaction logic for App.xaml + ''' + Partial Public Class App + Inherits Application + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/BitmapUtilities.vb b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/BitmapUtilities.vb new file mode 100644 index 00000000..18d5f691 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/BitmapUtilities.vb @@ -0,0 +1,38 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 +Imports System.IO + +Namespace Microsoft.WindowsAPICodePack.DirectX.Samples + Friend Class BitmapUtilities + Friend Shared Function LoadBitmapFromFile(ByVal renderTarget As RenderTarget, ByVal wicFactory As ImagingFactory, ByVal fileName As String) As D2DBitmap + + Dim decoder As BitmapDecoder = wicFactory.CreateDecoderFromFileName(fileName, DesiredAccess.Read, DecodeMetadataCacheOption.OnLoad) + Return CreateBitmapFromDecoder(renderTarget, wicFactory, decoder) + End Function + + Friend Shared Function LoadBitmapFromStream(ByVal renderTarget As RenderTarget, ByVal wicFactory As ImagingFactory, ByVal ioStream As Stream) As D2DBitmap + Dim decoder As BitmapDecoder = wicFactory.CreateDecoderFromStream(ioStream, DecodeMetadataCacheOption.OnLoad) + Return CreateBitmapFromDecoder(renderTarget, wicFactory, decoder) + End Function + + Private Shared Function CreateBitmapFromDecoder(ByVal renderTarget As RenderTarget, ByVal wicFactory As ImagingFactory, ByVal decoder As BitmapDecoder) As D2DBitmap + Dim source As BitmapFrameDecode + Dim converter As FormatConverter + ' Create the initial frame. + source = decoder.GetFrame(0) + + ' Convert the image format to 32bppPBGRA -- which Direct2D expects. + converter = wicFactory.CreateFormatConverter() + converter.Initialize(source.ToBitmapSource(), PixelFormats.Pbgra32Bpp, BitmapDitherType.None, BitmapPaletteType.MedianCut) + + ' Create a Direct2D bitmap from the WIC bitmap. + Return renderTarget.CreateBitmapFromWicBitmap(converter.ToBitmapSource()) + End Function + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/D2D_D3D_Interop.sln b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/D2D_D3D_Interop.sln new file mode 100644 index 00000000..d071ccf6 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/D2D_D3D_Interop.sln @@ -0,0 +1,97 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D2D_D3D_Interop", "D2D_D3D_Interop.vbproj", "{25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}" + ProjectSection(ProjectDependencies) = postProject + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} = {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} = {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} = {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Direct3DUtilities", "..\..\UtilitiesLibrary\D3DUtilities\Direct3DUtilities.vbproj", "{8A152DCF-12AE-492B-9F24-060B90B2DDD0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utilities", "Utilities", "{99AAA5EF-3761-4BA9-BB06-4EB4469F4066}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Library", "Library", "{D8C92A5A-F29C-422D-B8D8-677168EEF9ED}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|Any CPU.Build.0 = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|Win32.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Debug|x64.ActiveCfg = Debug|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|Any CPU.ActiveCfg = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|Any CPU.Build.0 = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|Win32.ActiveCfg = Release|Any CPU + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664}.Release|x64.ActiveCfg = Release|Any CPU + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.Build.0 = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.ActiveCfg = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.Build.0 = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.ActiveCfg = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.Build.0 = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.ActiveCfg = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.Build.0 = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Win32.ActiveCfg = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.ActiveCfg = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.Build.0 = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Win32.ActiveCfg = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.ActiveCfg = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} = {99AAA5EF-3761-4BA9-BB06-4EB4469F4066} + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} = {99AAA5EF-3761-4BA9-BB06-4EB4469F4066} + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} = {D8C92A5A-F29C-422D-B8D8-677168EEF9ED} + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/D2D_D3D_Interop.vbproj b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/D2D_D3D_Interop.vbproj new file mode 100644 index 00000000..66d983fe --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/D2D_D3D_Interop.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {25ED6DFF-0A5C-4C23-91BD-F3F4A7F6B664} + WinExe + + + D2D_D3D_Interop + v3.5 + On + Binary + Off + On + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + + + Client + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + Application.xaml + Code + + + Window1.xaml + Code + + + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.vb + + + + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/D3DStructs.vb b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/D3DStructs.vb new file mode 100644 index 00000000..4d124dda --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/D3DStructs.vb @@ -0,0 +1,44 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Runtime.InteropServices +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D + +Namespace Microsoft.WindowsAPICodePack.DirectX.Samples + #Region "SimpleVertex" + _ + Public Structure SimpleVertex + _ + Public Pos As Vector3F + _ + Public Tex As Vector2F + End Structure + #End Region + + #Region "Vertex Array" + Public Class VertexData + Public s_VertexArray As New VertexArray() + Public s_FacesIndexArray As New FacesIndexArray() + + _ + Public Class VertexArray + _ + Private vertices() As SimpleVertex = { New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Tex = New Vector2F (0.0f, 1.0f)} } + End Class + + _ + Public Class FacesIndexArray + _ + Private indices() As UShort = { 3,1,0, 2,1,3, 6,4,5, 7,4,6, 11,9,8, 10,9,11, 14,12,13, 15,12,14, 19,17,16, 18,17,19, 22,20,21, 23,20,22 } + + Public ReadOnly Property Length() As UInteger + Get + Return CUInt(indices.Length) + End Get + End Property + End Class + End Class + #End Region +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..0c26fa90 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/My Project/AssemblyInfo.vb @@ -0,0 +1,55 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Resources +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + + '(used if a resource is not found in the page, + ' or application resource dictionaries) + '(used if a resource is not found in the page, + ' app, or any theme specific resource dictionaries) + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/My Project/Resources.Designer.vb new file mode 100644 index 00000000..953849da --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/My Project/Resources.Designer.vb @@ -0,0 +1,64 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4927 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My.Resources + + + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If (resourceMan Is Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/My Project/Settings.Designer.vb new file mode 100644 index 00000000..7d1408f0 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4927 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/My Project/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/Window1.xaml b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/Window1.xaml new file mode 100644 index 00000000..7ee47306 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/Window1.xaml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/Window1.xaml.vb b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/Window1.xaml.vb new file mode 100644 index 00000000..3448fc36 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/Window1.xaml.vb @@ -0,0 +1,587 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.IO +Imports System.Runtime.InteropServices +Imports System.Windows +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.DirectWrite +Imports Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent + +Namespace Microsoft.WindowsAPICodePack.DirectX.Samples + ''' + ''' Interaction logic for Window1.xaml + ''' + Partial Public Class Window1 + #Region "Fields" + Private syncObject As New Object() + Private Const HelloWorldText As String = "Hello, World!" + Private d2DFactory As D2DFactory + Private imagingFactory As ImagingFactory + Private dWriteFactory As DWriteFactory + + Private currentTicks As Single + Private startTime As Nullable(Of Integer) + Private lastTicks As Integer + Private fps As Single + + 'Device-Dependent Resources + Private device As D3DDevice1 + Private swapChain As SwapChain + Private rasterizerState As RasterizerState + Private depthStencil As Texture2D + Private depthStencilView As DepthStencilView + Private renderTargetView As RenderTargetView + Private offscreenTexture As Texture2D + Private shader As Effect + Private vertexBuffer As D3DBuffer + Private vertexLayout As InputLayout + Private facesIndexBuffer As D3DBuffer + Private textureResourceView As ShaderResourceView + Private textureSurface As Surface + + Private backBufferRenderTarget As RenderTarget + Private backBufferTextBrush As SolidColorBrush + Private backBufferGradientBrush As LinearGradientBrush + Private gridPatternBitmapBrush As BitmapBrush + + Private textureRenderTarget As RenderTarget + Private linearGradientBrush As LinearGradientBrush + Private blackBrush As SolidColorBrush + Private d2dBitmap As D2DBitmap + + Private technique As EffectTechnique + Private worldVariable As EffectMatrixVariable + Private viewVariable As EffectMatrixVariable + Private projectionVariable As EffectMatrixVariable + Private diffuseVariable As EffectShaderResourceVariable + + ' Device-Independent Resources + Private textFormat As TextFormat + Private textFormatFps As TextFormat + Private pathGeometry As PathGeometry + + Private worldMatrix As Matrix4x4F + Private viewMatrix As Matrix4x4F + Private projectionMatrix As Matrix4x4F + + #Region "Read-only initialization values" + Private ReadOnly vertexArray As New VertexData() + + Private ReadOnly inputLayouts() As InputElementDescription = _ + { _ + New InputElementDescription With _ + { _ + .SemanticName = "POSITION", _ + .SemanticIndex = 0, _ + .Format = Format.R32G32B32Float, _ + .InputSlot = 0, _ + .AlignedByteOffset = 0, _ + .InputSlotClass = InputClassification.PerVertexData, _ + .InstanceDataStepRate = 0 _ + }, _ + New InputElementDescription With _ + { _ + .SemanticName = "TEXCOORD", _ + .SemanticIndex = 0, _ + .Format = Format.R32G32Float, _ + .InputSlot = 0, _ + .AlignedByteOffset = 12, _ + .InputSlotClass = InputClassification.PerVertexData, _ + .InstanceDataStepRate = 0 _ + } _ + } + + Private ReadOnly renderTargetProperties As New RenderTargetProperties(RenderTargetType.Default, New PixelFormat(Format.Unknown, AlphaMode.Premultiplied), 96, 96, RenderTargetUsages.None, FeatureLevel.Default) + + Private ReadOnly stopsBackground() As GradientStop = New GradientStop() _ + { _ + New GradientStop(0.0F, New ColorF(GetColorValues(System.Windows.Media.Colors.Blue))), _ + New GradientStop(1.0F, New ColorF(GetColorValues(System.Windows.Media.Colors.Black))) _ + } + + Private ReadOnly stopsGeometry() As GradientStop = New GradientStop() _ + { _ + New GradientStop(0.0F, New ColorF(GetColorValues(System.Windows.Media.Colors.LightBlue))), _ + New GradientStop(1.0F, New ColorF(GetColorValues(System.Windows.Media.Colors.Blue))) _ + } + + #End Region + #End Region + + Private Shared Function GetColorValues(ByVal color As System.Windows.Media.Color) As Single() + Return New Single() {color.ScR, color.ScG, color.ScB, color.ScA} + End Function + + Public Sub New() + InitializeComponent() + End Sub + + Private Sub host_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) + CreateDeviceIndependentResources() + AddHandler host.SizeChanged, AddressOf host_SizeChanged + host.Render = AddressOf RenderScene + End Sub + +#Region "RenderScene()" + Private Sub RenderScene() + SyncLock syncObject + 'initialize D3D device and D2D render targets the first time we get here + If device Is Nothing Then + CreateDeviceResources() + End If + + 'tick count is used to control animation and calculate FPS + Dim currentTime As Integer = Environment.TickCount + If Not startTime.HasValue Then + startTime = New Nullable(Of Integer)(currentTime) + End If + + currentTicks = currentTime - startTime.GetValueOrDefault() + + Dim a As Single = (currentTicks * 360.0F) * (CSng(Math.PI) / 180.0F) * 0.0001F + worldMatrix = MatrixMath.MatrixRotationY(a) + + ' Swap chain will tell us how big the back buffer is + Dim swapDesc As SwapChainDescription = swapChain.Description + Dim nWidth As UInteger = swapDesc.BufferDescription.Width + Dim nHeight As UInteger = swapDesc.BufferDescription.Height + + device.ClearDepthStencilView(depthStencilView, ClearOptions.Depth, 1, 0) + + ' Draw a gradient background before we draw the cube + If backBufferRenderTarget IsNot Nothing Then + backBufferRenderTarget.BeginDraw() + + backBufferGradientBrush.Transform = Matrix3x2F.Scale(backBufferRenderTarget.Size, New Point2F(0.0F, 0.0F)) + + Dim rect As New RectF(0.0F, 0.0F, nWidth, nHeight) + + backBufferRenderTarget.FillRectangle(rect, backBufferGradientBrush) + backBufferRenderTarget.EndDraw() + End If + + diffuseVariable.Resource = Nothing + technique.GetPassByIndex(0).Apply() + + ' Draw the D2D content into a D3D surface. + RenderD2DContentIntoTexture() + + ' Pass the updated texture to the pixel shader + diffuseVariable.Resource = textureResourceView + + ' Update variables that change once per frame. + worldVariable.Matrix = worldMatrix + + ' Set the index buffer. + device.IA.IndexBuffer = New IndexBuffer(facesIndexBuffer, Format.R16UInt, 0) + + ' Render the scene + technique.GetPassByIndex(0).Apply() + + device.DrawIndexed(vertexArray.s_FacesIndexArray.Length, 0, 0) + + ' Update fps + currentTime = Environment.TickCount ' Get the ticks again + currentTicks = currentTime - startTime.GetValueOrDefault() + If (currentTime - lastTicks) > 250 Then + fps = (swapChain.LastPresentCount) / (currentTicks / 1000.0F) + lastTicks = currentTime + End If + + backBufferRenderTarget.BeginDraw() + + ' Draw fps + backBufferRenderTarget.DrawText(String.Format("Average FPS: {0:F1}", fps), textFormatFps, New RectF(10.0F, nHeight - 32.0F, nWidth, nHeight), backBufferTextBrush) + + backBufferRenderTarget.EndDraw() + + swapChain.Present(0, Graphics.PresentOptions.None) + End SyncLock + End Sub +#End Region + +#Region "RenderD2DContentIntoTexture()" + Private Sub RenderD2DContentIntoTexture() + Dim rtSize As SizeF = textureRenderTarget.Size + + textureRenderTarget.BeginDraw() + + textureRenderTarget.Transform = Matrix3x2F.Identity + textureRenderTarget.Clear(New ColorF(GetColorValues(System.Windows.Media.Colors.White))) + + textureRenderTarget.FillRectangle(New RectF(0.0F, 0.0F, rtSize.Width, rtSize.Height), gridPatternBitmapBrush) + + Dim size As SizeF = d2dBitmap.Size + + textureRenderTarget.DrawBitmap(d2dBitmap, 1.0F, BitmapInterpolationMode.Linear, New RectF(0.0F, 0.0F, size.Width, size.Height)) + + ' Draw the bitmap at the bottom corner of the window + textureRenderTarget.DrawBitmap(d2dBitmap, 1.0F, BitmapInterpolationMode.Linear, New RectF(rtSize.Width - size.Width, rtSize.Height - size.Height, rtSize.Width, rtSize.Height)) + + ' Set the world transform to rotatate the drawing around the center of the render target + ' and write "Hello World" + Dim angle As Single = 0.1F * Environment.TickCount + textureRenderTarget.Transform = Matrix3x2F.Rotation(angle, New Point2F(rtSize.Width / 2, rtSize.Height / 2)) + + textureRenderTarget.DrawText(HelloWorldText, textFormat, New RectF(0, 0, rtSize.Width, rtSize.Height), blackBrush) + + ' Reset back to the identity transform + textureRenderTarget.Transform = Matrix3x2F.Translation(0, rtSize.Height - 200) + + textureRenderTarget.FillGeometry(pathGeometry, linearGradientBrush) + + textureRenderTarget.Transform = Matrix3x2F.Translation(rtSize.Width - 200, 0) + + textureRenderTarget.FillGeometry(pathGeometry, linearGradientBrush) + + textureRenderTarget.EndDraw() + End Sub +#End Region + +#Region "host_SizeChanged()" + Private Sub host_SizeChanged(ByVal sender As Object, ByVal e As SizeChangedEventArgs) + SyncLock syncObject + If device IsNot Nothing Then + Dim nWidth As UInteger = CUInt(host.ActualWidth) + Dim nHeight As UInteger = CUInt(host.ActualHeight) + + backBufferRenderTarget.Dispose() + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {Nothing}) + 'need to remove the reference to the swapchain's backbuffer to enable ResizeBuffers() call + renderTargetView.Dispose() + depthStencilView.Dispose() + depthStencil.Dispose() + + device.RS.Viewports = Nothing + + Dim sd As SwapChainDescription = swapChain.Description + 'Change the swap chain's back buffer size, format, and number of buffers + swapChain.ResizeBuffers(sd.BufferCount, nWidth, nHeight, sd.BufferDescription.Format, sd.Options) + + Using pBuffer As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(pBuffer) + End Using + + InitializeDepthStencil(nWidth, nHeight) + + ' bind the views to the device + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}, depthStencilView) + + SetViewport(nWidth, nHeight) + + CreateBackBufferD2DRenderTarget() + + ' update the aspect ratio + projectionMatrix = Camera.MatrixPerspectiveFovLH(CSng(Math.PI) * 0.24F, nWidth / CSng(nHeight), 0.1F, 100.0F) + projectionVariable.Matrix = projectionMatrix + End If + End SyncLock + End Sub +#End Region + +#Region "CreateDeviceResources()" + Private Sub CreateDeviceResources() + Dim nWidth As UInteger = CUInt(host.ActualWidth) + Dim nHeight As UInteger = CUInt(host.ActualHeight) + + ' Create D3D device and swap chain + Dim swapDesc As New SwapChainDescription With _ + { _ + .BufferDescription = New ModeDescription() With _ + { _ + .Width = nWidth, .Height = nHeight, _ + .Format = Format.R8G8B8A8UNorm, _ + .RefreshRate = New Rational With {.Numerator = 60, .Denominator = 1} _ + }, _ + .SampleDescription = New SampleDescription() With {.Count = 1, .Quality = 0}, _ + .BufferUsage = UsageOptions.RenderTargetOutput, _ + .BufferCount = 1, _ + .OutputWindowHandle = host.Handle, _ + .Windowed = True _ + } + device = D3DDevice1.CreateDeviceAndSwapChain1(Nothing, DriverType.Hardware, Nothing, CreateDeviceOptions.SupportBgra, FeatureLevel.NinePointThree, swapDesc) + swapChain = device.SwapChain + + Using pBuffer As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(pBuffer) + End Using + + MakeBothSidesRendered() + InitializeDepthStencil(nWidth, nHeight) + + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}, depthStencilView) + + ' Set a new viewport based on the new dimensions + SetViewport(nWidth, nHeight) + + ' Load pixel shader + shader = LoadResourceShader(device, "dxgisample.fxo") + + ' Obtain the technique + technique = shader.GetTechniqueByName("Render") + + ' Create the input layout + InitializeGeometryBuffers() + + ' Obtain the variables + Initialize3DTransformations(nWidth, nHeight) + + ' Allocate a offscreen D3D surface for D2D to render our 2D content into + InitializeTextureRenderTarget() + + ' Create a D2D render target which can draw into the surface in the swap chain + CreateD2DRenderTargets() + End Sub +#End Region + +#Region "Initialize3DTransformations()" + Private Sub Initialize3DTransformations(ByVal nWidth As UInteger, ByVal nHeight As UInteger) + worldVariable = shader.GetVariableByName("World").AsMatrix() + viewVariable = shader.GetVariableByName("View").AsMatrix() + projectionVariable = shader.GetVariableByName("Projection").AsMatrix() + diffuseVariable = shader.GetVariableByName("txDiffuse").AsShaderResource() + + worldMatrix = Matrix4x4F.Identity + + ' Initialize the view matrix. + Dim eye As New Vector3F(0.0F, 2.0F, -6.0F) + Dim at As New Vector3F(0.0F, 0.0F, 0.0F) + Dim up As New Vector3F(0.0F, 1.0F, 0.0F) + viewMatrix = Camera.MatrixLookAtLH(eye, at, up) + viewVariable.Matrix = viewMatrix + + ' Initialize the projection matrix + projectionMatrix = Camera.MatrixPerspectiveFovLH(CSng(Math.PI) * 0.24F, nWidth / CSng(nHeight), 0.1F, 100.0F) + projectionVariable.Matrix = projectionMatrix + End Sub +#End Region + +#Region "InitializeTextureRenderTarget()" + Private Sub InitializeTextureRenderTarget() + Dim offscreenTextureDesc As Texture2DDescription = New Texture2DDescription With {.ArraySize = 1, .BindingOptions = BindingOptions.RenderTarget Or BindingOptions.ShaderResource, .CpuAccessOptions = 0, .Format = Format.R8G8B8A8UNorm, .Height = 512, .Width = 512, .MipLevels = 1, .MiscellaneousResourceOptions = 0, .SampleDescription = New SampleDescription With {.Count = 1, .Quality = 0}, .Usage = Usage.Default} + offscreenTexture = device.CreateTexture2D(offscreenTextureDesc) + ' Convert the Direct2D texture into a Shader Resource View + textureResourceView = device.CreateShaderResourceView(offscreenTexture) + textureSurface = offscreenTexture.GraphicsSurface + End Sub +#End Region + +#Region "InitializeGeometryBuffers()" + Private Sub InitializeGeometryBuffers() + Dim PassDesc As PassDescription = technique.GetPassByIndex(0).Description + + vertexLayout = device.CreateInputLayout(inputLayouts, PassDesc.InputAssemblerInputSignature, PassDesc.InputAssemblerInputSignatureSize) + + ' Set the input layout + device.IA.InputLayout = vertexLayout + + + Dim bd As New BufferDescription() + bd.Usage = Usage.Default + bd.ByteWidth = CUInt(Marshal.SizeOf(vertexArray.s_VertexArray)) + bd.BindingOptions = BindingOptions.VertexBuffer + bd.CpuAccessOptions = CpuAccessOptions.None + bd.MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + + Dim ptr As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(vertexArray.s_VertexArray)) + Marshal.StructureToPtr(vertexArray.s_VertexArray, ptr, True) + Dim initData As SubresourceData = New SubresourceData With {.SystemMemory = ptr} + vertexBuffer = device.CreateBuffer(bd, initData) + Marshal.FreeHGlobal(ptr) + + ' Set vertex buffer + Dim stride As UInteger = CUInt(Marshal.SizeOf(GetType(SimpleVertex))) + Dim offset As UInteger = 0 + + device.IA.SetVertexBuffers(0, New D3DBuffer() {vertexBuffer}, New UInteger() {stride}, New UInteger() {offset}) + + bd.Usage = Usage.Default + bd.ByteWidth = CUInt(Marshal.SizeOf(vertexArray.s_FacesIndexArray)) + bd.BindingOptions = BindingOptions.IndexBuffer + bd.CpuAccessOptions = CpuAccessOptions.None + bd.MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + + ptr = Marshal.AllocHGlobal(Marshal.SizeOf(vertexArray.s_FacesIndexArray)) + Marshal.StructureToPtr(vertexArray.s_FacesIndexArray, ptr, True) + + initData.SystemMemory = ptr + facesIndexBuffer = device.CreateBuffer(bd, initData) + + ' Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList + End Sub +#End Region + +#Region "SetViewport()" + Private Sub SetViewport(ByVal nWidth As UInteger, ByVal nHeight As UInteger) + Dim viewport As Viewport = New Viewport With {.Width = nWidth, .Height = nHeight, .TopLeftX = 0, .TopLeftY = 0, .MinDepth = 0, .MaxDepth = 1} + device.RS.Viewports = New Viewport() {viewport} + End Sub +#End Region + +#Region "InitializeDepthStencil()" + Private Sub InitializeDepthStencil(ByVal nWidth As UInteger, ByVal nHeight As UInteger) + ' Create depth stencil texture + Dim descDepth As New Texture2DDescription() With {.Width = nWidth, .Height = nHeight, .MipLevels = 1, .ArraySize = 1, .Format = Format.D16UNorm, .SampleDescription = New SampleDescription() With {.Count = 1, .Quality = 0}, .BindingOptions = BindingOptions.DepthStencil} + depthStencil = device.CreateTexture2D(descDepth) + + ' Create the depth stencil view + Dim depthStencilViewDesc As New DepthStencilViewDescription() With {.Format = descDepth.Format, .ViewDimension = DepthStencilViewDimension.Texture2D} + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc) + End Sub +#End Region + +#Region "MakeBothSidesRendered()" + Private Sub MakeBothSidesRendered() + Dim rsDesc As New RasterizerDescription() + rsDesc.AntiAliasedLineEnable = False + rsDesc.CullMode = CullMode.None + rsDesc.DepthBias = 0 + rsDesc.DepthBiasClamp = 0 + rsDesc.DepthClipEnable = True + rsDesc.FillMode = Microsoft.WindowsAPICodePack.DirectX.Direct3D10.FillMode.Solid + rsDesc.FrontCounterclockwise = False ' Must be FALSE for 10on9 + rsDesc.MultisampleEnable = False + rsDesc.ScissorEnable = False + rsDesc.SlopeScaledDepthBias = 0 + rasterizerState = device.CreateRasterizerState(rsDesc) + + device.RS.State = rasterizerState + End Sub +#End Region + +#Region "LoadResourceShader()" + Private Shared Function LoadResourceShader(ByVal device As D3DDevice, ByVal resourceName As String) As Effect + Using stream As Stream = Application.ResourceAssembly.GetManifestResourceStream(resourceName) + Return device.CreateEffectFromCompiledBinary(stream) + End Using + End Function +#End Region + +#Region "CreateD2DRenderTargets()" + Private Sub CreateD2DRenderTargets() + ' Create a D2D render target which can draw into our offscreen D3D surface + textureRenderTarget = d2DFactory.CreateGraphicsSurfaceRenderTarget(textureSurface, renderTargetProperties) + + ' Create a linear gradient brush for the 2D geometry + Dim gradientStops As GradientStopCollection = textureRenderTarget.CreateGradientStopCollection(stopsGeometry, Gamma.StandardRgb, ExtendMode.Mirror) + linearGradientBrush = textureRenderTarget.CreateLinearGradientBrush(New LinearGradientBrushProperties(New Point2F(100, 0), New Point2F(100, 200)), gradientStops) + + ' create a black brush + blackBrush = textureRenderTarget.CreateSolidColorBrush(New ColorF(GetColorValues(System.Windows.Media.Colors.Black))) + + Using stream As Stream = Application.ResourceAssembly.GetManifestResourceStream("tulip.jpg") + d2dBitmap = BitmapUtilities.LoadBitmapFromStream(textureRenderTarget, imagingFactory, stream) + End Using + + gridPatternBitmapBrush = CreateGridPatternBrush(textureRenderTarget) + gridPatternBitmapBrush.Opacity = 0.5F + + CreateBackBufferD2DRenderTarget() + End Sub +#End Region + +#Region "CreateBackBufferD2DRenderTarget()" + Private Sub CreateBackBufferD2DRenderTarget() + ' Get a surface in the swap chain + Using backBufferSurface As Surface = swapChain.GetBuffer(Of Surface)(0) + backBufferRenderTarget = d2DFactory.CreateGraphicsSurfaceRenderTarget(backBufferSurface, renderTargetProperties) + + Dim stops As GradientStopCollection = backBufferRenderTarget.CreateGradientStopCollection(stopsBackground, Gamma.StandardRgb, ExtendMode.Mirror) + backBufferGradientBrush = backBufferRenderTarget.CreateLinearGradientBrush(New LinearGradientBrushProperties(New Point2F(0.0F, 0.0F), New Point2F(0.0F, 1.0F)), stops) + + ' Create a red brush for text drawn into the back buffer + backBufferTextBrush = backBufferRenderTarget.CreateSolidColorBrush(New ColorF(GetColorValues(Windows.Media.Colors.WhiteSmoke))) + End Using + End Sub +#End Region + +#Region "CreateDeviceIndependentResources()" + Private Sub CreateDeviceIndependentResources() + Dim msc_fontName As String = "Verdana" + Dim msc_fontSize As Single = 50 + + Dim fps_fontName As String = "Courier New" + Dim fps_fontSize As Single = 12 + + Dim spSink As GeometrySink + + ' Create D2D factory + d2DFactory = Direct2D1.D2DFactory.CreateFactory(D2DFactoryType.SingleThreaded) + + ' Create WIC factory + imagingFactory = WindowsImagingComponent.ImagingFactory.Create() + + ' Create DWrite factory + dWriteFactory = DirectWrite.DWriteFactory.CreateFactory() + + ' Create DWrite text format object + textFormat = dWriteFactory.CreateTextFormat(msc_fontName, msc_fontSize) + + textFormat.TextAlignment = Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextAlignment.Center + textFormat.ParagraphAlignment = Microsoft.WindowsAPICodePack.DirectX.DirectWrite.ParagraphAlignment.Center + + + ' Create DWrite text format object + textFormatFps = dWriteFactory.CreateTextFormat(fps_fontName, fps_fontSize) + + textFormatFps.TextAlignment = Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextAlignment.Leading + textFormatFps.ParagraphAlignment = Microsoft.WindowsAPICodePack.DirectX.DirectWrite.ParagraphAlignment.Near + + ' Create the path geometry. + pathGeometry = d2DFactory.CreatePathGeometry() + + ' Write to the path geometry using the geometry sink. We are going to create an + ' hour glass. + spSink = pathGeometry.Open() + + spSink.SetFillMode(Microsoft.WindowsAPICodePack.DirectX.Direct2D1.FillMode.Alternate) + + spSink.BeginFigure(New Point2F(0, 0), FigureBegin.Filled) + + spSink.AddLine(New Point2F(200, 0)) + + spSink.AddBezier(New BezierSegment(New Point2F(150, 50), New Point2F(150, 150), New Point2F(200, 200))) + + spSink.AddLine(New Point2F(0, 200)) + + spSink.AddBezier(New BezierSegment(New Point2F(50, 150), New Point2F(50, 50), New Point2F(0, 0))) + + spSink.EndFigure(FigureEnd.Closed) + + spSink.Close() + End Sub +#End Region + +#Region "CreateGridPatternBrush()" + Private Function CreateGridPatternBrush(ByVal pRenderTarget As RenderTarget) As BitmapBrush + ' Create a compatible render target. + Dim spCompatibleRenderTarget As BitmapRenderTarget = pRenderTarget.CreateCompatibleRenderTarget(CompatibleRenderTargetOptions.None, (New SizeF(10.0F, 10.0F))) + + ' Draw a pattern. + Dim spGridBrush As SolidColorBrush = spCompatibleRenderTarget.CreateSolidColorBrush(New ColorF(0.93F, 0.94F, 0.96F, 1.0F)) + + spCompatibleRenderTarget.BeginDraw() + + spCompatibleRenderTarget.FillRectangle(New RectF(0.0F, 0.0F, 10.0F, 1.0F), spGridBrush) + spCompatibleRenderTarget.FillRectangle(New RectF(0.0F, 0.1F, 1.0F, 10.0F), spGridBrush) + spCompatibleRenderTarget.EndDraw() + + ' Retrieve the bitmap from the render target. + Dim spGridBitmap As D2DBitmap = spCompatibleRenderTarget.Bitmap + + ' Choose the tiling mode for the bitmap brush. + Dim brushProperties As New BitmapBrushProperties(ExtendMode.Wrap, ExtendMode.Wrap, BitmapInterpolationMode.Linear) + + ' Create the bitmap brush. + Return textureRenderTarget.CreateBitmapBrush(spGridBitmap, brushProperties) + End Function +#End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/app.config b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/app.config new file mode 100644 index 00000000..a8afe940 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/app.config @@ -0,0 +1,3 @@ + + + diff --git a/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/dxgisample.fx b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/dxgisample.fx new file mode 100644 index 00000000..9d529408 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/dxgisample.fx @@ -0,0 +1,88 @@ +// + +// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A +// PARTICULAR PURPOSE. +// +// Copyright (c) Microsoft Corporation. All rights reserved + +//-------------------------------------------------------------------------------------- +// File: dxgisample.fx +// +//-------------------------------------------------------------------------------------- + +//-------------------------------------------------------------------------------------- +// Constant Buffer Variables +//-------------------------------------------------------------------------------------- +Texture2D txDiffuse; +SamplerState samLinear +{ + Filter = MIN_MAG_MIP_LINEAR; + AddressU = Wrap; + AddressV = Wrap; +}; + +cbuffer cbNeverChanges +{ + matrix View; +}; + +cbuffer cbChangeOnResize +{ + matrix Projection; +}; + +cbuffer cbChangesEveryFrame +{ + matrix World; +}; + +struct VS_INPUT +{ + float4 Pos : POSITION; + float2 Tex : TEXCOORD; +}; + +struct PS_INPUT +{ + float4 Pos : SV_POSITION; + float2 Tex : TEXCOORD0; +}; + + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +PS_INPUT VS( VS_INPUT input ) +{ + PS_INPUT output = (PS_INPUT)0; + output.Pos = mul( input.Pos, World ); + output.Pos = mul( output.Pos, View ); + output.Pos = mul( output.Pos, Projection ); + output.Tex = input.Tex; + + return output; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( PS_INPUT input) : SV_Target +{ + return txDiffuse.Sample( samLinear, input.Tex ); +} + + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0_level_9_1, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0_level_9_1, PS() ) ); + } +} +// diff --git a/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/dxgisample.fxo b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/dxgisample.fxo new file mode 100644 index 00000000..c01b2ab5 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/dxgisample.fxo differ diff --git a/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/tulip.jpg b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/tulip.jpg new file mode 100644 index 00000000..6513fad6 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct2D_3D/D2D_D3D_Interop/tulip.jpg differ diff --git a/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/Application.xaml b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/Application.xaml new file mode 100644 index 00000000..abc66b9e --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/Application.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/Application.xaml.vb b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/Application.xaml.vb new file mode 100644 index 00000000..37560592 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/Application.xaml.vb @@ -0,0 +1,16 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Configuration +Imports System.Windows + +Namespace SciFiTextDemo + ''' + ''' Interaction logic for App.xaml + ''' + Partial Public Class App + Inherits Application + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/D3DStructs.vb b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/D3DStructs.vb new file mode 100644 index 00000000..e9a82178 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/D3DStructs.vb @@ -0,0 +1,35 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Runtime.InteropServices +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D + +Namespace SciFiTextDemo + _ + Public Structure SimpleVertex + _ + Public Pos As Vector3F + _ + Public Tex As Vector2F + End Structure + + + Public Class VertexData + Public VerticesInstance As New Vertices() + Public IndicesInstance As New Indices() + + _ + Public Class Vertices + _ + Private vertices() As SimpleVertex = { New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 16.0f), .Tex = New Vector2F(0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 16.0f), .Tex = New Vector2F(1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 0.0f), .Tex = New Vector2F(1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 0.0f), .Tex = New Vector2F(0.0f, 1.0f)} } + End Class + + _ + Public Class Indices + _ + Private indices() As UShort = { 3,1,0, 2,1,3 } + End Class + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..e9aa8378 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/My Project/AssemblyInfo.vb @@ -0,0 +1,55 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Resources +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + + '(used if a resource is not found in the page, + ' or application resource dictionaries) + '(used if a resource is not found in the page, + ' app, or any theme specific resource dictionaries) + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/My Project/Resources.Designer.vb new file mode 100644 index 00000000..953849da --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/My Project/Resources.Designer.vb @@ -0,0 +1,64 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4927 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My.Resources + + + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If (resourceMan Is Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/My Project/Settings.Designer.vb new file mode 100644 index 00000000..7d1408f0 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4927 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/My Project/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/SciFiText.fx b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/SciFiText.fx new file mode 100644 index 00000000..509024e8 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/SciFiText.fx @@ -0,0 +1,83 @@ +// +// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF +// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A +// PARTICULAR PURPOSE. +// +// Copyright (c) Microsoft Corporation. All rights reserved + + +//-------------------------------------------------------------------------------------- +// Constant Buffer Variables +//-------------------------------------------------------------------------------------- +Texture2D txDiffuse; +SamplerState samLinear +{ + Filter = ANISOTROPIC; + AddressU = Clamp; + AddressV = Clamp; +}; + +cbuffer cbNeverChanges +{ + matrix View; +}; + +cbuffer cbChangeOnResize +{ + matrix Projection; +}; + +cbuffer cbChangesEveryFrame +{ + matrix World; +}; + +struct VS_INPUT +{ + float4 Pos : POSITION; + float2 Tex : TEXCOORD; +}; + +struct PS_INPUT +{ + float4 Pos : SV_POSITION; + float2 Tex : TEXCOORD0; +}; + + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +PS_INPUT VS( VS_INPUT input ) +{ + PS_INPUT output = (PS_INPUT)0; + output.Pos = mul( input.Pos, World ); + output.Pos = mul( output.Pos, View ); + output.Pos = mul( output.Pos, Projection ); + output.Tex = input.Tex; + + return output; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( PS_INPUT input) : SV_Target +{ + return txDiffuse.Sample( samLinear, input.Tex ); +} + + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0_level_9_1, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0_level_9_1, PS() ) ); + } +} +// diff --git a/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/SciFiText.fxo b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/SciFiText.fxo new file mode 100644 index 00000000..012f67e2 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/SciFiText.fxo differ diff --git a/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/SciFiTextDemo.sln b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/SciFiTextDemo.sln new file mode 100644 index 00000000..7635522a --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/SciFiTextDemo.sln @@ -0,0 +1,82 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SciFiTextDemo", "SciFiTextDemo.vbproj", "{E11236F6-99D5-49BA-BB07-8E66C4F85D0E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Direct3DUtilities", "..\..\UtilitiesLibrary\D3DUtilities\Direct3DUtilities.vbproj", "{8A152DCF-12AE-492B-9F24-060B90B2DDD0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|Win32.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Debug|x64.ActiveCfg = Debug|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|Any CPU.Build.0 = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|Win32.ActiveCfg = Release|Any CPU + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E}.Release|x64.ActiveCfg = Release|Any CPU + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.ActiveCfg = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.Build.0 = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.ActiveCfg = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.Build.0 = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.Build.0 = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.ActiveCfg = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.Build.0 = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Win32.ActiveCfg = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.ActiveCfg = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.Build.0 = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Win32.ActiveCfg = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.ActiveCfg = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/SciFiTextDemo.vbproj b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/SciFiTextDemo.vbproj new file mode 100644 index 00000000..e9079400 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/SciFiTextDemo.vbproj @@ -0,0 +1,120 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {E11236F6-99D5-49BA-BB07-8E66C4F85D0E} + WinExe + + + SciFiTextDemo + v3.5 + On + Binary + Off + On + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + + 3.5 + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + Application.xaml + Code + + + Window1.xaml + Code + + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.vb + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/Window1.xaml b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/Window1.xaml new file mode 100644 index 00000000..810acf09 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/Window1.xaml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/Window1.xaml.vb b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/Window1.xaml.vb new file mode 100644 index 00000000..28af825c --- /dev/null +++ b/source/Samples/DirectX/VB/Direct2D_3D/SciFiTextDemo/Window1.xaml.vb @@ -0,0 +1,503 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.IO +Imports System.Runtime.InteropServices +Imports System.Windows + +Imports Microsoft.WindowsAPICodePack.DirectX +Imports Microsoft.WindowsAPICodePack.DirectX.Direct2D1 +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.DirectWrite +Imports Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics + + +Namespace SciFiTextDemo + ''' + ''' Interaction logic for Window1.xaml + ''' + Partial Public Class Window1 + Private syncObject As New Object() + + Private text As String = "Episode CCCXLVII:" & Constants.vbLf & "A Misguided Hope" & Constants.vbLf + Constants.vbLf & "Not so long ago, in a cubicle not so far away..." & Constants.vbLf + Constants.vbLf & "It is days before milestone lockdown. A small group of rebel developers toil through the weekend, relentlessly fixing bugs in defiance of familial obligations. Aside from pride in their work, their only reward will be takeout food and cinema gift certificates." & Constants.vbLf + Constants.vbLf & "Powered by coffee and soda, our hyper-caffeinated heroine stares at her screen with glazed-over eyes. She repeatedly slaps her face in a feeble attempt to stay awake. Lapsing into micro-naps, she reluctantly takes a break from debugging to replenish her caffeine levels." & Constants.vbLf + Constants.vbLf & "On her way to the kitchen she spots a fallen comrade, passed out on his keyboard and snoring loudly. After downing two coffees, she fills a pitcher with ice water and..." + + ' The factories + Private d2DFactory As D2DFactory + Private dWriteFactory As DWriteFactory + + Private pause As Boolean + Private lastSavedDelta As Integer + + 'Device-Dependent Resources + Private device As D3DDevice1 + Private swapChain As SwapChain + Private rasterizerState As RasterizerState + Private depthStencil As Texture2D + Private depthStencilView As DepthStencilView + Private renderTargetView As RenderTargetView + Private offscreenTexture As Texture2D + Private shader As Effect + Private vertexBuffer As D3DBuffer + Private vertexLayout As InputLayout + Private facesIndexBuffer As D3DBuffer + Private textureResourceView As ShaderResourceView + + Private renderTarget As RenderTarget + Private textBrush As LinearGradientBrush + + Private opacityRenderTarget As BitmapRenderTarget + Private isOpacityRTPopulated As Boolean + + Private technique As EffectTechnique + Private worldMatrixVariable As EffectMatrixVariable + Private viewMatrixVariable As EffectMatrixVariable + Private projectionMarixVariable As EffectMatrixVariable + Private diffuseVariable As EffectShaderResourceVariable + + ' Device-Independent Resources + Private textFormat As TextFormat + + Private worldMatrix As Matrix4x4F + Private viewMatrix As Matrix4x4F + Private projectionMatrix As Matrix4x4F + + Private backColor As New ColorRgba(GetColorValues(System.Windows.Media.Colors.Black)) + + Private currentTimeVariation As Single + Private startTime As Integer = Environment.TickCount + + Private inputLayoutDescriptions() As InputElementDescription = _ + { _ + New InputElementDescription With _ + { _ + .SemanticName = "POSITION", _ + .SemanticIndex = 0, _ + .Format = Format.R32G32B32Float, _ + .InputSlot = 0, _ + .AlignedByteOffset = 0, _ + .InputSlotClass = InputClassification.PerVertexData, _ + .InstanceDataStepRate = 0 _ + }, _ + New InputElementDescription With _ + { _ + .SemanticName = "TEXCOORD", _ + .SemanticIndex = 0, _ + .Format = Format.R32G32Float, _ + .InputSlot = 0, _ + .AlignedByteOffset = 12, _ + .InputSlotClass = InputClassification.PerVertexData, _ + .InstanceDataStepRate = 0 _ + } _ + } + + Private VertexArray As New VertexData() + + Private Shared Function GetColorValues(ByVal color As System.Windows.Media.Color) As Single() + Return New Single() {color.ScR, color.ScG, color.ScB, color.ScA} + End Function + + Public Sub New() + InitializeComponent() + textBox.Text = text + AddHandler host.Loaded, AddressOf host_Loaded + AddHandler host.SizeChanged, AddressOf host_SizeChanged + End Sub + + Private Sub host_SizeChanged(ByVal sender As Object, ByVal e As SizeChangedEventArgs) + SyncLock syncObject + If device Is Nothing Then + Return + End If + Dim nWidth As UInteger = CUInt(host.ActualWidth) + Dim nHeight As UInteger = CUInt(host.ActualHeight) + + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {Nothing}, Nothing) + 'need to remove the reference to the swapchain's backbuffer to enable ResizeBuffers() call + renderTargetView.Dispose() + depthStencilView.Dispose() + depthStencil.Dispose() + + device.RS.Viewports = Nothing + + Dim sd As SwapChainDescription = swapChain.Description + 'Change the swap chain's back buffer size, format, and number of buffers + swapChain.ResizeBuffers(sd.BufferCount, nWidth, nHeight, sd.BufferDescription.Format, sd.Options) + + Using pBuffer As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(pBuffer) + End Using + + InitializeDepthStencil(nWidth, nHeight) + + ' bind the views to the device + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}, depthStencilView) + + SetViewport(nWidth, nHeight) + + ' update the aspect ratio + projectionMatrix = Camera.MatrixPerspectiveFovLH(CSng(Math.PI) * 0.1f, nWidth / CSng(nHeight), 0.1f, 100.0f) + projectionMarixVariable.Matrix = projectionMatrix + End SyncLock + End Sub + + Private Sub host_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) + CreateDeviceIndependentResources() + startTime = Environment.TickCount + host.Render = AddressOf RenderScene + End Sub + + Private Shared Function LoadResourceShader(ByVal device As D3DDevice, ByVal resourceName As String) As Effect + Using stream As Stream = Application.ResourceAssembly.GetManifestResourceStream(resourceName) + Return device.CreateEffectFromCompiledBinary(stream) + End Using + End Function + + Private Sub CreateDeviceIndependentResources() + ' Create a Direct2D factory. + d2DFactory = D2DFactory.CreateFactory(D2DFactoryType.SingleThreaded) + + ' Create a DirectWrite factory. + dWriteFactory = DWriteFactory.CreateFactory() + + ' Create a DirectWrite text format object. + textFormat = dWriteFactory.CreateTextFormat("Calibri", 50, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontWeight.Bold, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontStyle.Normal, Microsoft.WindowsAPICodePack.DirectX.DirectWrite.FontStretch.Normal) + + ' Center the text both horizontally and vertically. + textFormat.TextAlignment = Microsoft.WindowsAPICodePack.DirectX.DirectWrite.TextAlignment.Leading + textFormat.ParagraphAlignment = ParagraphAlignment.Near + End Sub + + Private Sub CreateDeviceResources() + Dim width As UInteger = CUInt(host.ActualWidth) + Dim height As UInteger = CUInt(host.ActualHeight) + + ' If we don't have a device, need to create one now and all + ' accompanying D3D resources. + CreateDevice() + + Dim dxgiFactory As Factory = Factory.Create() + + Dim swapDesc As New SwapChainDescription With _ + { _ + .BufferDescription = New ModeDescription With _ + { _ + .Width = width, .Height = height, _ + .Format = Format.R8G8B8A8UNorm, _ + .RefreshRate = New Rational With {.Numerator = 60, .Denominator = 1} _ + }, _ + .SampleDescription = New SampleDescription With {.Count = 1, .Quality = 0}, _ + .BufferUsage = UsageOptions.RenderTargetOutput, _ + .BufferCount = 1, _ + .OutputWindowHandle = host.Handle, _ + .Windowed = True _ + } + + swapChain = dxgiFactory.CreateSwapChain(device, swapDesc) + + ' Create rasterizer state object + Dim rsDesc As New RasterizerDescription() + rsDesc.AntialiasedLineEnable = False + rsDesc.CullMode = CullMode.None + rsDesc.DepthBias = 0 + rsDesc.DepthBiasClamp = 0 + rsDesc.DepthClipEnable = True + rsDesc.FillMode = Microsoft.WindowsAPICodePack.DirectX.Direct3D10.FillMode.Solid + rsDesc.FrontCounterClockwise = False ' Must be FALSE for 10on9 + rsDesc.MultisampleEnable = False + rsDesc.ScissorEnable = False + rsDesc.SlopeScaledDepthBias = 0 + + rasterizerState = device.CreateRasterizerState(rsDesc) + + device.RS.State = rasterizerState + + ' If we don't have a D2D render target, need to create all of the resources + ' required to render to one here. + ' Ensure that nobody is holding onto one of the old resources + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {Nothing}) + + InitializeDepthStencil(width, height) + + ' Create views on the RT buffers and set them on the device + Dim renderDesc As New RenderTargetViewDescription() + Dim renderView As Texture2DRenderTargetView + + renderDesc.Format = Format.R8G8B8A8UNorm + renderDesc.ViewDimension = RenderTargetViewDimension.Texture2D + + renderView = renderDesc.Texture2D + renderView.MipSlice = 0 + renderDesc.Texture2D = renderView + + Using spBackBufferResource As D3DResource = swapChain.GetBuffer(Of D3DResource)(0) + renderTargetView = device.CreateRenderTargetView(spBackBufferResource, renderDesc) + End Using + + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}, depthStencilView) + + SetViewport(width, height) + + + ' Create a D2D render target which can draw into the surface in the swap chain + Dim props As New RenderTargetProperties(RenderTargetType.Default, New PixelFormat(Format.Unknown, AlphaMode.Premultiplied), 96, 96, RenderTargetUsages.None, FeatureLevel.Default) + + ' Allocate a offscreen D3D surface for D2D to render our 2D content into + Dim tex2DDescription As New Texture2DDescription With _ + { _ + .ArraySize = 1, _ + .BindingOptions = BindingOptions.RenderTarget Or BindingOptions.ShaderResource, _ + .CpuAccessOptions = CpuAccessOptions.None, _ + .Format = Format.R8G8B8A8UNorm, _ + .Height = 4096, _ + .Width = 512, _ + .MipLevels = 1, _ + .MiscellaneousResourceOptions = MiscellaneousResourceOptions.None, _ + .SampleDescription = New SampleDescription With {.Count = 1, .Quality = 0}, _ + .Usage = Usage.Default _ + } + + offscreenTexture = device.CreateTexture2D(tex2DDescription) + + Using dxgiSurface As Surface = offscreenTexture.GraphicsSurface() + ' Create a D2D render target which can draw into our offscreen D3D surface + renderTarget = d2DFactory.CreateGraphicsSurfaceRenderTarget(dxgiSurface, props) + End Using + + Dim alphaOnlyFormat As New PixelFormat(Format.A8UNorm, AlphaMode.Premultiplied) + + opacityRenderTarget = renderTarget.CreateCompatibleRenderTarget(CompatibleRenderTargetOptions.None, alphaOnlyFormat) + + ' Load pixel shader + ' Open precompiled vertex shader + ' This file was compiled using DirectX's SDK Shader compilation tool: + ' fxc.exe /T fx_4_0 /Fo SciFiText.fxo SciFiText.fx + shader = LoadResourceShader(device, "SciFiText.fxo") + + ' Obtain the technique + technique = shader.GetTechniqueByName("Render") + + ' Obtain the variables + worldMatrixVariable = shader.GetVariableByName("World").AsMatrix() + viewMatrixVariable = shader.GetVariableByName("View").AsMatrix() + projectionMarixVariable = shader.GetVariableByName("Projection").AsMatrix() + diffuseVariable = shader.GetVariableByName("txDiffuse").AsShaderResource() + + ' Create the input layout + Dim passDesc As New PassDescription() + passDesc = technique.GetPassByIndex(0).Description + + vertexLayout = device.CreateInputLayout(inputLayoutDescriptions, passDesc.InputAssemblerInputSignature, passDesc.InputAssemblerInputSignatureSize) + + ' Set the input layout + device.IA.InputLayout = vertexLayout + + Dim verticesDataPtr As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(VertexArray.VerticesInstance)) + Marshal.StructureToPtr(VertexArray.VerticesInstance, verticesDataPtr, True) + + Dim bd As New BufferDescription() + bd.Usage = Usage.Default + bd.ByteWidth = CUInt(Marshal.SizeOf(VertexArray.VerticesInstance)) + bd.BindingOptions = BindingOptions.VertexBuffer + bd.CpuAccessOptions = CpuAccessOptions.None + bd.MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + + Dim InitData As New SubresourceData() With {.SystemMemory = verticesDataPtr} + + vertexBuffer = device.CreateBuffer(bd, InitData) + + Marshal.FreeHGlobal(verticesDataPtr) + + ' Set vertex buffer + Dim stride As UInteger = CUInt(Marshal.SizeOf(GetType(SimpleVertex))) + Dim offset As UInteger = 0 + + device.IA.SetVertexBuffers(0, New D3DBuffer() {vertexBuffer}, New UInteger() {stride}, New UInteger() {offset}) + + Dim indicesDataPtr As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(VertexArray.IndicesInstance)) + Marshal.StructureToPtr(VertexArray.IndicesInstance, indicesDataPtr, True) + + bd.Usage = Usage.Default + bd.ByteWidth = CUInt(Marshal.SizeOf(VertexArray.IndicesInstance)) + bd.BindingOptions = BindingOptions.IndexBuffer + bd.CpuAccessOptions = CpuAccessOptions.None + bd.MiscellaneousResourceOptions = MiscellaneousResourceOptions.None + + InitData.SystemMemory = indicesDataPtr + + facesIndexBuffer = device.CreateBuffer(bd, InitData) + + Marshal.FreeHGlobal(indicesDataPtr) + + ' Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList + + ' Convert the D2D texture into a Shader Resource View + textureResourceView = device.CreateShaderResourceView(offscreenTexture) + + ' Initialize the world matrices + worldMatrix = Matrix4x4F.Identity + + ' Initialize the view matrix + Dim Eye As New Vector3F(0.0f, 0.0f, 13.0f) + Dim At As New Vector3F(0.0f, -3.5f, 45.0f) + Dim Up As New Vector3F(0.0f, 1.0f, 0.0f) + + viewMatrix = Camera.MatrixLookAtLH(Eye, At, Up) + + ' Initialize the projection matrix + projectionMatrix = Camera.MatrixPerspectiveFovLH(CSng(Math.PI)*0.1f, width/CSng(height), 0.1f, 100.0f) + + ' Update Variables that never change + viewMatrixVariable.Matrix = viewMatrix + + projectionMarixVariable.Matrix = projectionMatrix + + Dim gradientStops() As GradientStop = {New GradientStop(0.0F, New ColorF(GetColorValues(System.Windows.Media.Colors.Yellow))), New GradientStop(1.0F, New ColorF(GetColorValues(System.Windows.Media.Colors.Black)))} + + Dim spGradientStopCollection As GradientStopCollection = renderTarget.CreateGradientStopCollection(gradientStops, Gamma.StandardRgb, ExtendMode.Clamp) + + ' Create a linear gradient brush for text + textBrush = renderTarget.CreateLinearGradientBrush(New LinearGradientBrushProperties(New Point2F(0, 0), New Point2F(0, -2048)), spGradientStopCollection) + End Sub + + Private Sub CreateDevice() + Try + ' Create device + device = D3DDevice1.CreateDevice1(Nothing, DriverType.Hardware, Nothing, CreateDeviceOptions.SupportBgra, FeatureLevel.Ten) + Catch e1 As Exception + ' if we can't create a hardware device, + ' try the warp one + End Try + If device Is Nothing Then + device = D3DDevice1.CreateDevice1(Nothing, DriverType.Software, "d3d10warp.dll", CreateDeviceOptions.SupportBgra, FeatureLevel.Ten) + End If + End Sub + + Private Sub RenderScene() + SyncLock syncObject + If device Is Nothing Then + CreateDeviceResources() + End If + + If Not pause Then + If lastSavedDelta <> 0 Then + startTime = Environment.TickCount - lastSavedDelta + lastSavedDelta = 0 + End If + currentTimeVariation = (Environment.TickCount - startTime)/6000.0f + worldMatrix = MatrixMath.MatrixTranslate(0, 0, currentTimeVariation) + textBrush.Transform = Matrix3x2F.Translation(0, (4096f/16f)*currentTimeVariation) + End If + + device.ClearDepthStencilView(depthStencilView, ClearOptions.Depth, 1, 0) + + ' Clear the back buffer + device.ClearRenderTargetView(renderTargetView, backColor) + + diffuseVariable.Resource = Nothing + + technique.GetPassByIndex(0).Apply() + + ' Draw the D2D content into our D3D surface + RenderD2DContentIntoSurface() + + diffuseVariable.Resource = textureResourceView + + ' Update variables + worldMatrixVariable.Matrix = worldMatrix + + ' Set index buffer + device.IA.IndexBuffer = New IndexBuffer(facesIndexBuffer, Format.R16UInt, 0) + + ' Draw the scene + technique.GetPassByIndex(0).Apply() + + device.DrawIndexed(CUInt(Marshal.SizeOf(VertexArray.VerticesInstance)), 0, 0) + + swapChain.Present(0, Graphics.PresentOptions.None) + End SyncLock + End Sub + + Private Sub RenderD2DContentIntoSurface() + Dim rtSize As SizeF = renderTarget.Size + + renderTarget.BeginDraw() + + If Not isOpacityRTPopulated Then + opacityRenderTarget.BeginDraw() + + opacityRenderTarget.Transform = Matrix3x2F.Identity + + opacityRenderTarget.Clear(New ColorF(GetColorValues(System.Windows.Media.Colors.Black), 0)) + + opacityRenderTarget.DrawText(text, textFormat, New RectF(0, 0, rtSize.Width, rtSize.Height), textBrush) + + opacityRenderTarget.EndDraw() + + isOpacityRTPopulated = True + End If + + renderTarget.Clear(New ColorF(GetColorValues(System.Windows.Media.Colors.Black))) + + renderTarget.AntialiasMode = AntialiasMode.Aliased + + Dim spBitmap As D2DBitmap = opacityRenderTarget.Bitmap + + renderTarget.FillOpacityMask(spBitmap, textBrush, OpacityMaskContent.TextNatural, New RectF(0, 0, rtSize.Width, rtSize.Height), New RectF(0, 0, rtSize.Width, rtSize.Height)) + + renderTarget.EndDraw() + End Sub + + #Region "InitializeDepthStencil()" + Private Sub InitializeDepthStencil(ByVal nWidth As UInteger, ByVal nHeight As UInteger) + ' Create depth stencil texture + Dim descDepth As New Texture2DDescription() With _ + { _ + .Width = nWidth, _ + .Height = nHeight, _ + .MipLevels = 1, _ + .ArraySize = 1, _ + .Format = Format.D16UNorm, _ + .SampleDescription = New SampleDescription() With _ + { _ + .Count = 1, _ + .Quality = 0 _ + }, _ + .BindingOptions = BindingOptions.DepthStencil _ + } + + depthStencil = device.CreateTexture2D(descDepth) + + ' Create the depth stencil view + Dim depthStencilViewDesc As New DepthStencilViewDescription() With {.Format = descDepth.Format, .ViewDimension = DepthStencilViewDimension. Texture2D} + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc) + End Sub + #End Region + + #Region "SetViewport()" + Private Sub SetViewport(ByVal nWidth As UInteger, ByVal nHeight As UInteger) + Dim viewport As Viewport = New Viewport With {.Width = nWidth, .Height = nHeight, .TopLeftX = 0, .TopLeftY = 0, .MinDepth = 0, .MaxDepth = 1} + device.RS.Viewports = New Viewport() {viewport} + End Sub + #End Region + + Private Sub Button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + pause = Not pause + + If pause Then + lastSavedDelta = Environment.TickCount - startTime + actionText.Text = "Resume Text" + Else + actionText.Text = "Pause Text" + End If + End Sub + + Private Sub textBox_TextChanged(ByVal sender As Object, ByVal e As System.Windows.Controls.TextChangedEventArgs) + text = textBox.Text + isOpacityRTPopulated = False + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/MeshBrowser.sln b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/MeshBrowser.sln new file mode 100644 index 00000000..acfd4fab --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/MeshBrowser.sln @@ -0,0 +1,122 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MeshBrowser", "MeshBrowser.vbproj", "{9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{6849EEC3-D88D-4E81-B2C1-8F7196A050F5}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX.Direct3DX10", "..\..\..\UtilitiesLibrary\D3DX10Helpers\Direct3DX10.vcproj", "{453FF234-24EC-4CC3-83DA-6D6C54388899}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utilities", "Utilities", "{DF9BEB5A-205C-4EB6-AC88-44C820397CA4}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Direct3DUtilities", "..\..\UtilitiesLibrary\D3DUtilities\Direct3DUtilities.vbproj", "{8A152DCF-12AE-492B-9F24-060B90B2DDD0}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MeshLoader", "..\..\UtilitiesLibrary\MeshLoader\MeshLoader.vbproj", "{B28ADA8B-BD7E-4C11-8298-C39F7C456365}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|Win32.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Debug|x64.ActiveCfg = Debug|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|Any CPU.Build.0 = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|Win32.ActiveCfg = Release|Any CPU + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3}.Release|x64.ActiveCfg = Release|Any CPU + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.ActiveCfg = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.Build.0 = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.ActiveCfg = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.Build.0 = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.Build.0 = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.ActiveCfg = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.Build.0 = Release|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Win32.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Win32.Build.0 = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|x64.ActiveCfg = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|x64.Build.0 = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Any CPU.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Mixed Platforms.Build.0 = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Win32.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Win32.Build.0 = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|x64.ActiveCfg = Release|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|x64.Build.0 = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Win32.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Win32.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Win32.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|x64.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Any CPU.Build.0 = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Win32.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|x64.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} = {6849EEC3-D88D-4E81-B2C1-8F7196A050F5} + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} = {6849EEC3-D88D-4E81-B2C1-8F7196A050F5} + {453FF234-24EC-4CC3-83DA-6D6C54388899} = {6849EEC3-D88D-4E81-B2C1-8F7196A050F5} + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} = {DF9BEB5A-205C-4EB6-AC88-44C820397CA4} + {B28ADA8B-BD7E-4C11-8298-C39F7C456365} = {DF9BEB5A-205C-4EB6-AC88-44C820397CA4} + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/MeshBrowser.vbproj b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/MeshBrowser.vbproj new file mode 100644 index 00000000..deaffa67 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/MeshBrowser.vbproj @@ -0,0 +1,126 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {9D24C44D-D937-48DF-BFAF-5D487B2A0EC3} + WinExe + + + MeshBrowser + v3.5 + On + Binary + Off + On + 512 + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + 3.0 + + + + 3.5 + + + + 3.5 + + + + + + 3.5 + + + 3.0 + + + + + Form + + + MeshBrowserForm.vb + + + + + MeshBrowserForm.vb + Designer + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + True + Settings.settings + True + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + {B28ADA8B-BD7E-4C11-8298-C39F7C456365} + MeshLoader + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/MeshBrowserForm.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/MeshBrowserForm.Designer.vb new file mode 100644 index 00000000..ab54bf8f --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/MeshBrowserForm.Designer.vb @@ -0,0 +1,230 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace MeshBrowser + Partial Public Class MeshBrowserForm + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Me.directControl = New Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl + Me.buttonOpen = New System.Windows.Forms.Button + Me.openFileDialog1 = New System.Windows.Forms.OpenFileDialog + Me.splitContainer1 = New System.Windows.Forms.SplitContainer + Me.cbRotate = New System.Windows.Forms.CheckBox + Me.cbWireframe = New System.Windows.Forms.CheckBox + Me.buttonScanDXSDK = New System.Windows.Forms.Button + Me.splitContainer2 = New System.Windows.Forms.SplitContainer + Me.listBoxValid = New System.Windows.Forms.ListBox + Me.label1 = New System.Windows.Forms.Label + Me.listBoxInvalid = New System.Windows.Forms.ListBox + Me.label2 = New System.Windows.Forms.Label + Me.splitContainer1.Panel1.SuspendLayout() + Me.splitContainer1.Panel2.SuspendLayout() + Me.splitContainer1.SuspendLayout() + Me.splitContainer2.Panel1.SuspendLayout() + Me.splitContainer2.Panel2.SuspendLayout() + Me.splitContainer2.SuspendLayout() + Me.SuspendLayout() + ' + 'directControl + ' + Me.directControl.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.directControl.Location = New System.Drawing.Point(3, 3) + Me.directControl.Name = "directControl" + Me.directControl.Size = New System.Drawing.Size(640, 480) + Me.directControl.TabIndex = 4 + ' + 'buttonOpen + ' + Me.buttonOpen.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.buttonOpen.Location = New System.Drawing.Point(12, 489) + Me.buttonOpen.Name = "buttonOpen" + Me.buttonOpen.Size = New System.Drawing.Size(75, 23) + Me.buttonOpen.TabIndex = 5 + Me.buttonOpen.Text = "&Open" + Me.buttonOpen.UseVisualStyleBackColor = True + ' + 'openFileDialog1 + ' + Me.openFileDialog1.FileName = "openFileDialog1" + Me.openFileDialog1.Filter = ".x files|*.x|All files|*.*" + Me.openFileDialog1.RestoreDirectory = True + ' + 'splitContainer1 + ' + Me.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill + Me.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2 + Me.splitContainer1.Location = New System.Drawing.Point(0, 0) + Me.splitContainer1.Name = "splitContainer1" + ' + 'splitContainer1.Panel1 + ' + Me.splitContainer1.Panel1.Controls.Add(Me.cbRotate) + Me.splitContainer1.Panel1.Controls.Add(Me.cbWireframe) + Me.splitContainer1.Panel1.Controls.Add(Me.buttonScanDXSDK) + Me.splitContainer1.Panel1.Controls.Add(Me.buttonOpen) + Me.splitContainer1.Panel1.Controls.Add(Me.directControl) + ' + 'splitContainer1.Panel2 + ' + Me.splitContainer1.Panel2.Controls.Add(Me.splitContainer2) + Me.splitContainer1.Size = New System.Drawing.Size(838, 522) + Me.splitContainer1.SplitterDistance = 645 + Me.splitContainer1.TabIndex = 6 + ' + 'cbRotate + ' + Me.cbRotate.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.cbRotate.AutoSize = True + Me.cbRotate.Checked = True + Me.cbRotate.CheckState = System.Windows.Forms.CheckState.Checked + Me.cbRotate.Location = New System.Drawing.Point(324, 493) + Me.cbRotate.Name = "cbRotate" + Me.cbRotate.Size = New System.Drawing.Size(58, 17) + Me.cbRotate.TabIndex = 7 + Me.cbRotate.Text = "Rotate" + Me.cbRotate.UseVisualStyleBackColor = True + ' + 'cbWireframe + ' + Me.cbWireframe.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.cbWireframe.AutoSize = True + Me.cbWireframe.Location = New System.Drawing.Point(244, 493) + Me.cbWireframe.Name = "cbWireframe" + Me.cbWireframe.Size = New System.Drawing.Size(74, 17) + Me.cbWireframe.TabIndex = 7 + Me.cbWireframe.Text = "Wireframe" + Me.cbWireframe.UseVisualStyleBackColor = True + ' + 'buttonScanDXSDK + ' + Me.buttonScanDXSDK.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.buttonScanDXSDK.Location = New System.Drawing.Point(93, 489) + Me.buttonScanDXSDK.Name = "buttonScanDXSDK" + Me.buttonScanDXSDK.Size = New System.Drawing.Size(145, 23) + Me.buttonScanDXSDK.TabIndex = 6 + Me.buttonScanDXSDK.Text = "Scan DX SDK Samples" + Me.buttonScanDXSDK.UseVisualStyleBackColor = True + ' + 'splitContainer2 + ' + Me.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill + Me.splitContainer2.Location = New System.Drawing.Point(0, 0) + Me.splitContainer2.Name = "splitContainer2" + Me.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal + ' + 'splitContainer2.Panel1 + ' + Me.splitContainer2.Panel1.Controls.Add(Me.listBoxValid) + Me.splitContainer2.Panel1.Controls.Add(Me.label1) + ' + 'splitContainer2.Panel2 + ' + Me.splitContainer2.Panel2.Controls.Add(Me.listBoxInvalid) + Me.splitContainer2.Panel2.Controls.Add(Me.label2) + Me.splitContainer2.Size = New System.Drawing.Size(189, 522) + Me.splitContainer2.SplitterDistance = 357 + Me.splitContainer2.TabIndex = 0 + ' + 'listBoxValid + ' + Me.listBoxValid.Dock = System.Windows.Forms.DockStyle.Fill + Me.listBoxValid.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed + Me.listBoxValid.FormattingEnabled = True + Me.listBoxValid.HorizontalScrollbar = True + Me.listBoxValid.IntegralHeight = False + Me.listBoxValid.Location = New System.Drawing.Point(0, 13) + Me.listBoxValid.Name = "listBoxValid" + Me.listBoxValid.Size = New System.Drawing.Size(189, 344) + Me.listBoxValid.TabIndex = 1 + ' + 'label1 + ' + Me.label1.AutoSize = True + Me.label1.Dock = System.Windows.Forms.DockStyle.Top + Me.label1.Location = New System.Drawing.Point(0, 0) + Me.label1.Name = "label1" + Me.label1.Size = New System.Drawing.Size(51, 13) + Me.label1.TabIndex = 0 + Me.label1.Text = "Valid files" + ' + 'listBoxInvalid + ' + Me.listBoxInvalid.Dock = System.Windows.Forms.DockStyle.Fill + Me.listBoxInvalid.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed + Me.listBoxInvalid.FormattingEnabled = True + Me.listBoxInvalid.HorizontalScrollbar = True + Me.listBoxInvalid.IntegralHeight = False + Me.listBoxInvalid.Location = New System.Drawing.Point(0, 13) + Me.listBoxInvalid.Name = "listBoxInvalid" + Me.listBoxInvalid.Size = New System.Drawing.Size(189, 148) + Me.listBoxInvalid.TabIndex = 1 + ' + 'label2 + ' + Me.label2.AutoSize = True + Me.label2.Dock = System.Windows.Forms.DockStyle.Top + Me.label2.Location = New System.Drawing.Point(0, 0) + Me.label2.Name = "label2" + Me.label2.Size = New System.Drawing.Size(59, 13) + Me.label2.TabIndex = 0 + Me.label2.Text = "Invalid files" + ' + 'MeshBrowserForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(838, 522) + Me.Controls.Add(Me.splitContainer1) + Me.Name = "MeshBrowserForm" + Me.Text = "Mesh Browser" + Me.splitContainer1.Panel1.ResumeLayout(False) + Me.splitContainer1.Panel1.PerformLayout() + Me.splitContainer1.Panel2.ResumeLayout(False) + Me.splitContainer1.ResumeLayout(False) + Me.splitContainer2.Panel1.ResumeLayout(False) + Me.splitContainer2.Panel1.PerformLayout() + Me.splitContainer2.Panel2.ResumeLayout(False) + Me.splitContainer2.Panel2.PerformLayout() + Me.splitContainer2.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + + #End Region + + Private WithEvents directControl As Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl + Private WithEvents buttonOpen As System.Windows.Forms.Button + Private openFileDialog1 As System.Windows.Forms.OpenFileDialog + Private splitContainer1 As System.Windows.Forms.SplitContainer + Private splitContainer2 As System.Windows.Forms.SplitContainer + Private WithEvents listBoxValid As System.Windows.Forms.ListBox + Private label1 As System.Windows.Forms.Label + Private WithEvents listBoxInvalid As System.Windows.Forms.ListBox + Private label2 As System.Windows.Forms.Label + Private WithEvents buttonScanDXSDK As System.Windows.Forms.Button + Private WithEvents cbWireframe As System.Windows.Forms.CheckBox + Private WithEvents cbRotate As System.Windows.Forms.CheckBox + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/MeshBrowserForm.resx b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/MeshBrowserForm.resx new file mode 100644 index 00000000..6e58fa8e --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/MeshBrowserForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/MeshBrowserForm.vb b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/MeshBrowserForm.vb new file mode 100644 index 00000000..c3c3e62d --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/MeshBrowserForm.vb @@ -0,0 +1,421 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.IO +Imports System.Linq +Imports System.Xml.Linq +Imports System.Xml.XPath +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + +Namespace MeshBrowser + ''' + ''' This application demonstrates how to use the library to implement a useful utility application + ''' + ''' Copyright (c) Microsoft Corporation. All rights reserved. + ''' + Partial Public Class MeshBrowserForm + Inherits Form + #Region "Fields" + Private device As D3DDevice + Private swapChain As SwapChain + Private renderTargetView As RenderTargetView + Private depthStencil As Texture2D + Private depthStencilView As DepthStencilView + Private backColor_Renamed As New ColorRgba(0.0F, 0.125F, 0.3F, 1.0F) + + Private mesh As XMesh + Private meshManager As XMeshManager + + Private worldMatrix As Matrix4x4F = Matrix4x4F.Identity + Private knownFiles As XDocument + Private dwLastTime As Integer = Environment.TickCount + + Private isDrag As Boolean = False + Private lastLocation As New System.Drawing.Point(Integer.MaxValue, Integer.MaxValue) + Private myBrush As System.Drawing.Brush + Private meshLock As New Object() + Private needsResizing As Boolean + + #End Region + + #Region "MeshBrowserForm()" + ''' + ''' Initializes a new instance of the class. + ''' + Public Sub New() + InitializeComponent() + End Sub + #End Region + + #Region "Window_Load()" + Private Sub Window_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load + myBrush = New System.Drawing.SolidBrush(listBoxValid.ForeColor) + InitDevice() + directControl.Render = AddressOf Me.RenderScene + Dim dxsdkdir As String = Environment.GetEnvironmentVariable("DXSDK_DIR") + If Not String.IsNullOrEmpty(dxsdkdir) Then + openFileDialog1.InitialDirectory = System.IO.Path.Combine(dxsdkdir, "Samples\Media") + End If + If File.Exists("knownFiles.xml") Then + LoadKnown() + Else + knownFiles = New XDocument(New XElement("KnownFiles", New XElement("Valid"), New XElement("Invalid"))) + SaveKnown() + End If + End Sub + #End Region + + #Region "InitDevice()" + ''' + ''' Create Direct3D device and swap chain + ''' + Protected Sub InitDevice() + device = D3DDevice.CreateDeviceAndSwapChain(directControl.Handle) + swapChain = device.SwapChain + + SetViews() + + meshManager = New XMeshManager(device) + + InitMatrices() + End Sub + #End Region + + #Region "SetViews()" + Private Sub SetViews() + ' Create a render target view + Using pBuffer As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(pBuffer) + End Using + + ' Create depth stencil texture + Dim descDepth As New Texture2DDescription() With _ + { _ + .Width = CUInt(directControl.ClientSize.Width), _ + .Height = CUInt(directControl.ClientSize.Height), _ + .MipLevels = 1, _ + .ArraySize = 1, _ + .Format = Format.D32Float, _ + .SampleDescription = New SampleDescription() With {.Count = 1, .Quality = 0}, _ + .BindingOptions = BindingOptions.DepthStencil _ + } + + depthStencil = device.CreateTexture2D(descDepth) + + ' Create the depth stencil view + Dim depthStencilViewDesc As New DepthStencilViewDescription() With {.Format = descDepth.Format, .ViewDimension = DepthStencilViewDimension.Texture2D} + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc) + + 'bind the views to the device + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}, depthStencilView) + + ' Setup the viewport + Dim vp As New Viewport() With {.Width = CUInt(directControl.ClientSize.Width), .Height = CUInt(directControl.ClientSize.Height), .MinDepth = 0.0F, .MaxDepth = 1.0F, .TopLeftX = 0, .TopLeftY = 0} + + device.RS.Viewports = New Viewport() {vp} + End Sub + #End Region + + #Region "InitMatrices()" + Private Sub InitMatrices() + ' Initialize the view matrix + Dim Eye As New Vector3F(0.0F, 3.0F, -15.0F) + Dim At As New Vector3F(0.0F, 0.0F, 0.0F) + Dim Up As New Vector3F(0.0F, 1.0F, 0.0F) + + Dim viewMatrix As Matrix4x4F + Dim projectionMatrix As Matrix4x4F + viewMatrix = Camera.MatrixLookAtLH(Eye, At, Up) + + ' Initialize the projection matrix + projectionMatrix = Camera.MatrixPerspectiveFovLH( _ + CSng(Math.PI) * 0.25F, _ + CSng(directControl.ClientSize.Width) / CSng(directControl.ClientSize.Height), _ + 0.5F, 1000.0F) + + meshManager.SetViewAndProjection(viewMatrix, projectionMatrix) + End Sub + #End Region + + #Region "RenderScene()" + ''' + ''' Render the frame + ''' + Protected Sub RenderScene() + Dim dwCurrentTime As Integer = Environment.TickCount + Dim t As Single = (dwCurrentTime - dwLastTime) / 1000.0F + dwLastTime = dwCurrentTime + + If (needsResizing) Then + needsResizing = False + renderTargetView.Dispose() + Dim sd As SwapChainDescription = swapChain.Description + swapChain.ResizeBuffers(sd.BufferCount, CType(directControl.ClientSize.Width, UInteger), CType(directControl.ClientSize.Height, UInteger), sd.BufferDescription.Format, sd.Options) + SetViews() + InitMatrices() + End If + + ' Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor_Renamed) + + ' Clear the depth buffer to 1.0 (max depth) + device.ClearDepthStencilView(depthStencilView, ClearOptions.Depth, 1.0F, CByte(0)) + + SyncLock meshLock + If mesh IsNot Nothing Then + If cbRotate.Checked Then + worldMatrix *= MatrixMath.MatrixRotationY(-t) + End If + mesh.Render(worldMatrix) + End If + End SyncLock + + Dim [error] As Microsoft.WindowsAPICodePack.DirectX.ErrorCode + swapChain.TryPresent(1, PresentOptions.None, [error]) + End Sub + #End Region + + #Region "Mesh loading" + #Region "LoadMeshAndUpdateKnownFiles()" + Private Sub LoadMeshAndUpdateKnownFiles(ByVal filename As String) + LoadMeshAndUpdateKnownFiles(filename, True) + End Sub + + Private Sub LoadMeshAndUpdateKnownFiles(ByVal filename As String, ByVal showException As Boolean) + Try + LoadMesh(filename) + MarkFileValid(filename) + Catch ex As Exception + If showException Then + ShowTextInDialog(ex.ToString(), "Could not load mesh") + End If + MarkFileInvalid(filename) + End Try + End Sub +#End Region + + #Region "LoadMesh()" + Private Sub LoadMesh(ByVal filename As String) + SyncLock meshLock + If mesh IsNot Nothing Then + mesh.Dispose() + mesh = Nothing + End If + worldMatrix = Matrix4x4F.Identity + + Try + mesh = meshManager.Open(filename) + mesh.ShowWireFrame = cbWireframe.Checked + Catch + mesh = Nothing + Throw + End Try + End SyncLock + End Sub +#End Region + #End Region + + #Region "Known files list handling" + #Region "MarkFileValid()" + Private Sub MarkFileValid(ByVal filename As String) + Dim nowKnown As New XDocument(New XElement("KnownFiles", New XElement("Valid"), New XElement("Invalid"))) + Dim q1 = From files In knownFiles.Root.XPathSelectElements("./Invalid/File") _ + Where CStr(files.Attribute("path")) = filename _ + Select files + q1.Remove() + Dim q2 = From files In knownFiles.Root.XPathSelectElements("./Valid/File") _ + Where CStr(files.Attribute("path")) = filename _ + Select files + q2.Remove() + knownFiles.Root.XPathSelectElement("./Valid").Add(New XElement("File", New XAttribute("path", filename))) + knownFiles.Save("knownFiles.xml") + + If Not listBoxValid.Items.Contains(filename) Then + listBoxValid.Items.Add(filename) + End If + If Not listBoxInvalid.Items.Contains(filename) Then + listBoxInvalid.Items.Remove(filename) + End If + End Sub +#End Region + + #Region "MarkFileInvalid()" + Private Sub MarkFileInvalid(ByVal filename As String) + Dim q1 = From files In knownFiles.Root.XPathSelectElements("./Invalid/File") _ + Where CStr(files.Attribute("path")) = filename _ + Select files + q1.Remove() + Dim q2 = From files In knownFiles.Root.XPathSelectElements("./Valid/File") _ + Where CStr(files.Attribute("path")) = filename _ + Select files + q2.Remove() + knownFiles.Root.XPathSelectElement("./Invalid").Add(New XElement("File", New XAttribute("path", filename))) + knownFiles.Save("knownFiles.xml") + + If Not listBoxInvalid.Items.Contains(filename) Then + listBoxInvalid.Items.Add(filename) + End If + If Not listBoxValid.Items.Contains(filename) Then + listBoxValid.Items.Remove(filename) + End If + End Sub +#End Region + + #Region "SaveKnown()" + Private Sub SaveKnown() + knownFiles.Save("knownFiles.xml") + End Sub +#End Region + + #Region "LoadKnown()" + Private Sub LoadKnown() + knownFiles = XDocument.Load("knownFiles.xml") + listBoxInvalid.Items.Clear() + listBoxValid.Items.Clear() + For Each file As XElement In knownFiles.Root.XPathSelectElements("./Invalid/File") + listBoxInvalid.Items.Add(file.Attribute("path").Value) + Next file + For Each file As XElement In knownFiles.Root.XPathSelectElements("./Valid/File") + listBoxValid.Items.Add(file.Attribute("path").Value) + Next file + End Sub +#End Region +#End Region + + #Region "event handlers" + #Region "Mesh loading events" + #Region "buttonOpen_Click()" + Private Sub buttonOpen_Click(ByVal sender As Object, ByVal e As EventArgs) Handles buttonOpen.Click + If openFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then + LoadMeshAndUpdateKnownFiles(openFileDialog1.FileName) + End If + End Sub +#End Region + + #Region "buttonScanDXSDK_Click()" + Private Sub buttonScanDXSDK_Click(ByVal sender As Object, ByVal e As EventArgs) Handles buttonScanDXSDK.Click + Dim dxsdkdir As String = Environment.GetEnvironmentVariable("DXSDK_DIR") + If String.IsNullOrEmpty(dxsdkdir) Then + buttonScanDXSDK.Enabled = False + MessageBox.Show("DirectX SDK not installed or environment variable DXSDK_DIR not set") + Else + Dim files() As String = Directory.GetFiles(System.IO.Path.Combine(dxsdkdir, "Samples\Media"), "*.x", SearchOption.AllDirectories) + For Each file As String In files + LoadMeshAndUpdateKnownFiles(file, False) + Next file + End If + End Sub +#End Region + + #Region "listBoxValid_SelectedIndexChanged()" + Private Sub listBoxValid_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles listBoxValid.SelectedIndexChanged + If listBoxValid.SelectedIndex <> -1 Then + LoadMeshAndUpdateKnownFiles(listBoxValid.SelectedItem.ToString()) + listBoxInvalid.SelectedIndex = -1 + End If + End Sub +#End Region + + #Region "listBoxInvalid_SelectedIndexChanged()" + Private Sub listBoxInvalid_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles listBoxInvalid.SelectedIndexChanged + If listBoxInvalid.SelectedIndex <> -1 Then + LoadMeshAndUpdateKnownFiles(listBoxInvalid.SelectedItem.ToString()) + listBoxValid.SelectedIndex = -1 + End If + End Sub +#End Region + #End Region + + #Region "Camera operation events" + #Region "directControl_MouseUp()" + Private Sub directControl_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles directControl.MouseDown + If e.Button = MouseButtons.Left Then + isDrag = True + lastLocation = e.Location + End If + End Sub +#End Region + + #Region "directControl_MouseUp()" + Private Sub directControl_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles directControl.MouseUp + If e.Button = MouseButtons.Left Then + isDrag = False + End If + End Sub +#End Region + + #Region "directControl_MouseMove()" + Private Sub directControl_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles directControl.MouseMove + If isDrag Then + worldMatrix *= MatrixMath.MatrixRotationX(0.01F * (lastLocation.Y - e.Y)) + worldMatrix *= MatrixMath.MatrixRotationY(0.01F * (lastLocation.X - e.X)) + lastLocation = e.Location + cbRotate.Checked = False + End If + End Sub +#End Region + + #Region "OnMouseWheel()" + Protected Overrides Sub OnMouseWheel(ByVal e As MouseEventArgs) + MyBase.OnMouseWheel(e) + If e.Delta <> 0 Then + Dim scale As Single + If e.Delta > 0 Then + scale = (0.01F * e.Delta) + Else + scale = -100.0F / e.Delta + End If + worldMatrix *= MatrixMath.MatrixScale(scale, scale, scale) + End If + End Sub +#End Region + #End Region + + #Region "listBox_DrawItem()" + ''' + ''' Handles the DrawItem event of the listBox control. + ''' Displays file names only instead of full file paths for known meshes. + ''' + ''' The source of the event. + ''' The instance containing the event data. + Private Sub listBox_DrawItem(ByVal sender As Object, ByVal e As DrawItemEventArgs) Handles listBoxValid.DrawItem, listBoxInvalid.DrawItem + Dim lb As ListBox = TryCast(sender, ListBox) + e.DrawBackground() + e.Graphics.DrawString(Path.GetFileName(CStr(lb.Items(e.Index))), e.Font, myBrush, e.Bounds, System.Drawing.StringFormat.GenericDefault) + e.DrawFocusRectangle() + End Sub + #End Region + + #Region "cbWireframe_CheckedChanged()" + Private Sub cbWireframe_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) Handles cbRotate.CheckedChanged, cbWireframe.CheckedChanged + SyncLock meshLock + If mesh IsNot Nothing Then + mesh.ShowWireFrame = cbWireframe.Checked + End If + End SyncLock + End Sub + #End Region + #End Region + + #Region "ShowTextInDialog()" + Public Shared Function ShowTextInDialog(ByVal text As String, ByVal caption As String) As Form + Dim form As New Form() With {.WindowState = FormWindowState.Maximized, .Text = caption} + Dim box As New TextBox() With {.Dock = DockStyle.Fill, .AcceptsReturn = True, .AcceptsTab = True, .Multiline = True, .Parent = form, .Text = text, .ScrollBars = ScrollBars.Both} + form.ShowDialog() + Return form + End Function + #End Region + + #Region "directControl_SizeChanged()" + Private Sub directControl_SizeChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles directControl.SizeChanged + needsResizing = True + End Sub + #End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..035d6ba1 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/My Project/AssemblyInfo.vb @@ -0,0 +1,40 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/My Project/Resources.Designer.vb new file mode 100644 index 00000000..b5a64a5f --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/My Project/Resources.Designer.vb @@ -0,0 +1,64 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My.Resources + + + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If (resourceMan Is Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/My Project/Settings.Designer.vb new file mode 100644 index 00000000..34f1fe80 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/Program.vb b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/Program.vb new file mode 100644 index 00000000..2652ed55 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/Program.vb @@ -0,0 +1,22 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms + +Namespace MeshBrowser + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New MeshBrowserForm()) + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/directx.ico b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/MeshBrowser/directx.ico differ diff --git a/source/Samples/DirectX/VB/Direct3D10/TextureSwap/Application.xaml b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/Application.xaml new file mode 100644 index 00000000..5b45c411 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/Application.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D10/TextureSwap/Application.xaml.vb b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/Application.xaml.vb new file mode 100644 index 00000000..7b234995 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/Application.xaml.vb @@ -0,0 +1,19 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Configuration +Imports System.Data +Imports System.Linq +Imports System.Windows + +Namespace TextureSwap + ''' + ''' Interaction logic for App.xaml + ''' + Partial Public Class App + Inherits Application + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/TextureSwap/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..24b51b09 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/My Project/AssemblyInfo.vb @@ -0,0 +1,56 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Resources +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + + '(used if a resource is not found in the page, + ' or application resource dictionaries) + '(used if a resource is not found in the page, + ' app, or any theme specific resource dictionaries) + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct3D10/TextureSwap/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/My Project/Resources.Designer.vb new file mode 100644 index 00000000..b5a64a5f --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/My Project/Resources.Designer.vb @@ -0,0 +1,64 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My.Resources + + + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If (resourceMan Is Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/TextureSwap/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/TextureSwap/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/My Project/Settings.Designer.vb new file mode 100644 index 00000000..34f1fe80 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/TextureSwap/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/My Project/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/TextureSwap/Resources/airplane 2.x b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/Resources/airplane 2.x new file mode 100644 index 00000000..bc61ddda --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/Resources/airplane 2.x @@ -0,0 +1,7084 @@ +xof 0303txt 0032 +template VertexDuplicationIndices { + + DWORD nIndices; + DWORD nOriginalVertices; + array DWORD indices[nIndices]; +} + +template FVFData { + + DWORD dwFVF; + DWORD nDWords; + array DWORD data[nDWords]; +} + +template EffectFloats { + + DWORD nFloats; + array FLOAT Floats[nFloats]; +} + +template EffectString { + + STRING Value; +} + +template EffectDWord { + <622c0ed0-956e-4da9-908a-2af94f3ce716> + DWORD Value; +} + +template EffectInstance { + + STRING EffectFilename; + [...] +} + +template AnimTicksPerSecond { + <9e415a43-7ba6-4a73-8743-b73d47e88476> + DWORD AnimTicksPerSecond; +} + +template VertexElement { + + DWORD Type; + DWORD Method; + DWORD Usage; + DWORD UsageIndex; +} + +template DeclData { + + DWORD nElements; + array VertexElement Elements[nElements]; + DWORD nDWords; + array DWORD data[nDWords]; +} + + +Frame SCENE_ROOT { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; + } + + Frame airplane_b { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; + } + + Mesh { + 245; + 0.350782;0.134766;-3.705020;, + -0.299976;0.134766;-3.705020;, + 0.350782;0.562877;-3.586500;, + -0.299976;0.562877;-3.586500;, + 0.435276;0.357646;-2.367070;, + -0.384470;0.357646;-2.367070;, + 0.390268;-0.269818;-2.919710;, + -0.339463;-0.269818;-2.919710;, + -0.226041;0.540056;-2.367070;, + 0.276847;0.540056;-2.367070;, + 0.438828;0.349993;-2.075790;, + 0.253892;0.646877;-2.075800;, + -0.203087;0.646877;-2.075800;, + -0.388023;0.349993;-2.075790;, + -0.380393;-0.399859;-2.164040;, + 0.431218;-0.400603;-2.164040;, + 0.417014;0.254447;-0.762626;, + 0.247847;0.503541;-0.762633;, + -0.197042;0.503541;-0.762633;, + -0.366208;0.254448;-0.762626;, + -0.375042;-0.511327;-1.030540;, + 0.425848;-0.511328;-1.030540;, + 0.127371;0.058052;2.965310;, + -0.076567;0.058052;2.965310;, + -0.076567;-0.267921;2.965320;, + 0.127371;-0.267921;2.965320;, + -0.377115;0.302220;-1.419208;, + -0.200065;0.575209;-1.419217;, + 0.250870;0.575209;-1.419217;, + 0.427921;0.302220;-1.419208;, + 0.208380;0.642622;-2.036815;, + -0.157575;0.642622;-2.036815;, + -0.155154;0.579488;-1.441064;, + 0.205959;0.579488;-1.441064;, + 0.205959;0.570954;-1.397582;, + -0.155154;0.570954;-1.397582;, + -0.152734;0.507819;-0.801831;, + 0.203539;0.507819;-0.801831;, + 0.356128;-0.048342;-2.036815;, + -0.305322;-0.048342;-2.036815;, + -0.305322;-0.104661;-1.441064;, + 0.356128;-0.104661;-1.441064;, + 0.356128;-0.113195;-1.397582;, + -0.305322;-0.113195;-1.397582;, + -0.305322;-0.176329;-0.780043;, + 0.356128;-0.176329;-0.780043;, + 0.356128;-0.267741;-1.908320;, + -0.305322;-0.267741;-1.908320;, + -0.305322;-0.296094;-1.608397;, + 0.356128;-0.296094;-1.608397;, + 0.356128;-0.334132;-1.265243;, + -0.305322;-0.334132;-1.265243;, + -0.305322;-0.365916;-0.954351;, + 0.356128;-0.365916;-0.954351;, + -0.385296;0.338050;-1.911644;, + -0.323268;0.453416;-1.889030;, + -0.253817;0.453416;-1.889030;, + -0.305322;-0.062422;-1.887877;, + -0.379842;0.314164;-1.583353;, + -0.320955;0.433134;-1.601430;, + -0.251964;0.433134;-1.601430;, + -0.305322;-0.090581;-1.590002;, + 0.436101;0.338050;-1.911644;, + 0.374073;0.453416;-1.889030;, + 0.304622;0.453416;-1.889030;, + 0.356128;-0.062422;-1.887877;, + 0.430648;0.314163;-1.583353;, + 0.371759;0.433134;-1.601430;, + 0.302769;0.433134;-1.601430;, + 0.356128;-0.090581;-1.590002;, + 0.425194;0.290277;-1.255062;, + 0.375180;0.384325;-1.236900;, + 0.305508;0.384325;-1.236900;, + 0.356128;-0.128978;-1.243197;, + 0.419741;0.266390;-0.926771;, + 0.372827;0.354953;-0.926779;, + 0.303624;0.354953;-0.926779;, + 0.356128;-0.160545;-0.934428;, + -0.368935;0.266391;-0.926771;, + -0.322022;0.354953;-0.926779;, + -0.252819;0.354953;-0.926779;, + -0.305322;-0.160545;-0.934428;, + -0.374389;0.290277;-1.255062;, + -0.324375;0.384325;-1.236900;, + -0.254703;0.384325;-1.236900;, + -0.305322;-0.128978;-1.243197;, + 0.350782;0.562877;-3.586500;, + 0.350782;0.134766;-3.705020;, + -0.339463;-0.269818;-2.919710;, + -0.299976;0.562877;-3.586500;, + 0.390268;-0.269818;-2.919710;, + 0.350782;0.134766;-3.705020;, + 0.350782;0.562877;-3.586500;, + -0.299976;0.562877;-3.586500;, + -0.384470;0.357646;-2.367070;, + 0.276847;0.540056;-2.367070;, + 0.350782;0.562877;-3.586500;, + -0.299976;0.562877;-3.586500;, + 0.127371;0.058052;2.965310;, + -0.076567;0.058052;2.965310;, + 0.276847;0.540056;-2.367070;, + 0.253892;0.646877;-2.075800;, + -0.384470;0.357646;-2.367070;, + -0.203087;0.646877;-2.075800;, + -0.339463;-0.269818;-2.919710;, + 0.390268;-0.269818;-2.919710;, + 0.431218;-0.400603;-2.164040;, + -0.203087;0.646877;-2.075800;, + -0.375042;-0.511327;-1.030540;, + 0.431218;-0.400603;-2.164040;, + 0.247847;0.503541;-0.762633;, + 0.127371;0.058052;2.965310;, + -0.076567;0.058052;2.965310;, + -0.076567;0.058052;2.965310;, + -0.375042;-0.511327;-1.030540;, + 0.127371;-0.267921;2.965320;, + 0.425848;-0.511328;-1.030540;, + 0.127371;-0.267921;2.965320;, + 0.253892;0.646877;-2.075800;, + -0.203087;0.646877;-2.075800;, + -0.323268;0.453416;-1.889030;, + 0.374073;0.453416;-1.889030;, + -0.324375;0.384325;-1.236900;, + 0.247847;0.503541;-0.762633;, + 0.375180;0.384325;-1.236900;, + 0.208380;0.642622;-2.036815;, + -0.253817;0.453416;-1.889030;, + -0.305322;-0.048342;-2.036815;, + 0.205959;0.579488;-1.441064;, + 0.205959;0.579488;-1.441064;, + 0.302769;0.433134;-1.601430;, + 0.205959;0.570954;-1.397582;, + -0.254703;0.384325;-1.236900;, + -0.305322;-0.113195;-1.397582;, + -0.152734;0.507819;-0.801831;, + 0.203539;0.507819;-0.801831;, + 0.203539;0.507819;-0.801831;, + 0.303624;0.354953;-0.926779;, + 0.356128;-0.048342;-2.036815;, + -0.305322;-0.048342;-2.036815;, + 0.356128;-0.267741;-1.908320;, + 0.356128;-0.104661;-1.441064;, + 0.356128;-0.296094;-1.608397;, + -0.305322;-0.296094;-1.608397;, + 0.356128;-0.104661;-1.441064;, + 0.356128;-0.296094;-1.608397;, + 0.356128;-0.113195;-1.397582;, + -0.305322;-0.113195;-1.397582;, + 0.356128;-0.334132;-1.265243;, + 0.356128;-0.176329;-0.780043;, + 0.356128;-0.365916;-0.954351;, + -0.305322;-0.365916;-0.954351;, + 0.356128;-0.176329;-0.780043;, + 0.356128;-0.365916;-0.954351;, + -0.324375;0.384325;-1.236900;, + 0.247847;0.503541;-0.762633;, + 0.372827;0.354953;-0.926779;, + 0.372827;0.354953;-0.926779;, + -0.323268;0.453416;-1.889030;, + 0.371759;0.433134;-1.601430;, + -0.253817;0.453416;-1.889030;, + -0.254703;0.384325;-1.236900;, + 0.303624;0.354953;-0.926779;, + 0.356128;-0.365916;-0.954351;, + 0.356128;-0.334132;-1.265243;, + 0.302769;0.433134;-1.601430;, + 0.356128;-0.296094;-1.608397;, + 0.356128;-0.267741;-1.908320;, + -0.320955;0.433134;-1.601430;, + -0.155154;0.579488;-1.441064;, + -0.155154;0.579488;-1.441064;, + -0.305322;-0.296094;-1.608397;, + 0.304622;0.453416;-1.889030;, + 0.374073;0.453416;-1.889030;, + 0.208380;0.642622;-2.036815;, + 0.356128;-0.048342;-2.036815;, + 0.356128;-0.267741;-1.908320;, + 0.356128;-0.048342;-2.036815;, + 0.375180;0.384325;-1.236900;, + 0.205959;0.570954;-1.397582;, + 0.356128;-0.113195;-1.397582;, + 0.356128;-0.334132;-1.265243;, + 0.356128;-0.113195;-1.397582;, + -0.322022;0.354953;-0.926779;, + -0.152734;0.507819;-0.801831;, + -0.152734;0.507819;-0.801831;, + -0.305322;-0.365916;-0.954351;, + 0.435276;0.357646;-2.367070;, + 0.435276;0.357646;-2.367070;, + 0.425848;-0.511328;-1.030540;, + 0.127371;-0.267921;2.965320;, + 0.127371;0.058052;2.965310;, + 0.371759;0.433134;-1.601430;, + 0.250870;0.575209;-1.419217;, + 0.250870;0.575209;-1.419217;, + 0.372827;0.354953;-0.926779;, + -0.200065;0.575209;-1.419217;, + 0.253892;0.646877;-2.075800;, + 0.304622;0.453416;-1.889030;, + -0.203087;0.646877;-2.075800;, + -0.320955;0.433134;-1.601430;, + -0.200065;0.575209;-1.419217;, + -0.322022;0.354953;-0.926779;, + -0.322022;0.354953;-0.926779;, + -0.197042;0.503541;-0.762633;, + 0.305508;0.384325;-1.236900;, + 0.305508;0.384325;-1.236900;, + 0.203539;0.507819;-0.801831;, + -0.299976;0.134766;-3.705020;, + -0.299976;0.562877;-3.586500;, + -0.226041;0.540056;-2.367070;, + -0.226041;0.540056;-2.367070;, + -0.157575;0.642622;-2.036815;, + -0.305322;-0.048342;-2.036815;, + -0.305322;-0.267741;-1.908320;, + -0.305322;-0.267741;-1.908320;, + -0.305322;-0.104661;-1.441064;, + -0.305322;-0.104661;-1.441064;, + -0.155154;0.570954;-1.397582;, + -0.305322;-0.113195;-1.397582;, + -0.305322;-0.334132;-1.265243;, + -0.305322;-0.334132;-1.265243;, + -0.305322;-0.176329;-0.780043;, + -0.305322;-0.176329;-0.780043;, + -0.197042;0.503541;-0.762633;, + -0.197042;0.503541;-0.762633;, + -0.076567;-0.267921;2.965320;, + -0.076567;-0.267921;2.965320;, + -0.380393;-0.399859;-2.164040;, + -0.380393;-0.399859;-2.164040;, + -0.299976;0.134766;-3.705020;, + -0.157575;0.642622;-2.036815;, + -0.251964;0.433134;-1.601430;, + -0.155154;0.579488;-1.441064;, + -0.251964;0.433134;-1.601430;, + -0.155154;0.570954;-1.397582;, + -0.252819;0.354953;-0.926779;, + -0.152734;0.507819;-0.801831;, + -0.252819;0.354953;-0.926779;, + 0.205959;0.579488;-1.441064;, + 0.356128;-0.104661;-1.441064;, + 0.203539;0.507819;-0.801831;, + 0.356128;-0.176329;-0.780043;, + -0.305322;-0.296094;-1.608397;, + -0.305322;-0.365916;-0.954351;; + 168; + 3;0,3,2;, + 3;86,9,4;, + 3;22,17,23;, + 3;6,7,87;, + 3;88,5,89;, + 3;90,91,92;, + 3;8,93,94;, + 3;95,96,97;, + 3;98,99,25;, + 3;4,11,10;, + 3;100,12,101;, + 3;8,102,103;, + 3;5,104,13;, + 3;7,6,15;, + 3;105,10,106;, + 3;63,66,62;, + 3;46,48,49;, + 3;107,13,55;, + 3;20,78,82;, + 3;15,21,108;, + 3;109,10,62;, + 3;16,110,111;, + 3;18,19,112;, + 3;19,24,113;, + 3;114,21,115;, + 3;116,16,117;, + 3;27,26,83;, + 3;50,52,53;, + 3;71,74,70;, + 3;118,119,30;, + 3;120,56,31;, + 3;34,28,33;, + 3;121,68,67;, + 3;122,84,35;, + 3;123,37,36;, + 3;124,76,75;, + 3;125,39,38;, + 3;126,57,127;, + 3;32,128,41;, + 3;129,130,69;, + 3;131,43,42;, + 3;132,85,133;, + 3;134,135,45;, + 3;136,137,77;, + 3;138,139,140;, + 3;127,57,47;, + 3;141,142,143;, + 3;144,69,145;, + 3;146,147,148;, + 3;133,85,51;, + 3;149,150,151;, + 3;152,77,153;, + 3;79,83,78;, + 3;80,84,154;, + 3;37,155,156;, + 3;157,16,74;, + 3;59,55,58;, + 3;60,56,158;, + 3;33,28,67;, + 3;159,29,66;, + 3;61,57,160;, + 3;47,57,61;, + 3;81,85,161;, + 3;51,85,81;, + 3;77,162,72;, + 3;163,77,164;, + 3;69,165,64;, + 3;166,69,167;, + 3;59,26,27;, + 3;60,168,169;, + 3;61,170,40;, + 3;171,61,40;, + 3;63,62,10;, + 3;172,173,30;, + 3;64,174,175;, + 3;176,65,177;, + 3;71,70,29;, + 3;178,28,34;, + 3;72,179,180;, + 3;181,73,182;, + 3;79,19,18;, + 3;80,183,184;, + 3;81,185,44;, + 3;186,81,44;, + 3;88,89,1;, + 3;13,88,14;, + 3;90,92,187;, + 3;10,90,188;, + 3;14,54,13;, + 3;14,58,54;, + 3;14,26,58;, + 3;20,26,14;, + 3;20,82,26;, + 3;78,20,19;, + 3;106,29,189;, + 3;66,106,62;, + 3;29,106,66;, + 3;116,70,74;, + 3;70,116,29;, + 3;116,74,16;, + 3;24,19,20;, + 3;190,16,191;, + 3;103,94,13;, + 3;11,4,9;, + 3;55,13,54;, + 3;58,55,54;, + 3;63,10,11;, + 3;66,63,192;, + 3;29,159,193;, + 3;71,29,194;, + 3;74,71,195;, + 3;26,59,58;, + 3;83,26,82;, + 3;78,83,82;, + 3;19,79,78;, + 3;16,157,110;, + 3;34,169,35;, + 3;169,34,33;, + 3;35,169,196;, + 3;30,121,197;, + 3;68,121,198;, + 3;120,31,199;, + 3;60,120,200;, + 3;33,67,68;, + 3;169,168,201;, + 3;122,35,196;, + 3;80,122,202;, + 3;36,203,204;, + 3;124,34,205;, + 3;76,124,206;, + 3;207,75,76;, + 3;3,0,208;, + 3;95,209,210;, + 3;12,95,211;, + 3;30,119,31;, + 3;39,125,212;, + 3;140,213,214;, + 3;48,46,215;, + 3;141,143,216;, + 3;32,41,217;, + 3;43,131,218;, + 3;148,219,220;, + 3;52,50,221;, + 3;149,151,222;, + 3;134,45,223;, + 3;123,36,224;, + 3;23,17,225;, + 3;25,99,226;, + 3;108,115,227;, + 3;15,108,228;, + 3;7,15,229;, + 3;87,7,230;, + 3;126,127,231;, + 3;61,126,232;, + 3;233,61,234;, + 3;132,133,235;, + 3;81,132,236;, + 3;237,81,238;, + 3;64,175,65;, + 3;69,64,65;, + 3;239,69,240;, + 3;72,180,73;, + 3;77,72,73;, + 3;241,77,242;, + 3;164,77,73;, + 3;167,69,65;, + 3;47,61,243;, + 3;51,81,244;; + + MeshNormals { + 245; + 0.000000;0.266808;-0.963750;, + -0.998959;0.012170;-0.043960;, + 0.000000;0.266808;-0.963750;, + 0.000000;0.266808;-0.963750;, + 0.777074;0.629327;0.010145;, + -0.997991;-0.018108;-0.060716;, + 0.000000;-0.944615;-0.328179;, + -0.000237;-0.947423;-0.319985;, + -0.754938;0.655688;0.011960;, + 0.754937;0.655688;0.011960;, + 0.996415;0.079394;-0.029230;, + 0.822045;0.567067;-0.051743;, + 0.000000;0.938853;-0.344317;, + -0.996412;0.079432;-0.029208;, + -0.999940;-0.004298;-0.010108;, + -0.000466;-0.992027;-0.126022;, + 0.989979;0.115716;0.080940;, + 0.000000;0.992935;0.118656;, + -0.823550;0.559299;0.094602;, + -0.989979;0.115715;0.080940;, + -0.998471;-0.009568;0.054440;, + -0.000001;-0.999666;0.025858;, + 0.000000;0.992935;0.118656;, + 0.000000;0.992935;0.118656;, + -0.997053;-0.010578;0.075983;, + 0.000000;0.000031;1.000000;, + -0.997843;0.064118;0.014072;, + -0.837228;0.542995;0.064850;, + 0.289480;0.946159;0.144857;, + 0.997844;0.064107;0.014083;, + 0.109412;0.900472;0.420927;, + -0.149218;0.834089;0.531065;, + 0.000000;0.000000;-1.000000;, + 0.093231;0.949373;-0.299999;, + 0.053670;0.887061;0.458521;, + -0.070806;0.838773;0.539857;, + -0.147861;0.987223;-0.059393;, + 0.238919;0.956807;-0.165642;, + 0.000000;0.000000;1.000000;, + 0.000000;0.000000;1.000000;, + 0.985984;-0.166102;-0.015703;, + 0.000000;0.000000;-1.000000;, + 0.000000;0.000000;1.000000;, + 0.000000;0.000000;1.000000;, + 0.985451;-0.169080;-0.017286;, + 0.000000;-0.031831;-0.999493;, + 0.000000;0.995561;0.094115;, + 1.000000;0.000000;0.000000;, + 0.000000;0.995561;0.094115;, + 0.000000;0.995561;0.094115;, + 0.000000;0.994815;0.101705;, + 1.000000;0.000000;0.000000;, + 0.000000;0.994815;0.101705;, + 0.000000;0.994815;0.101705;, + -0.997975;0.060060;0.020950;, + -0.873164;0.486615;0.028134;, + 0.000000;0.901116;0.433577;, + 0.997450;-0.071058;-0.006717;, + -0.995589;0.091093;0.022464;, + -0.864408;0.495225;0.086895;, + 0.000000;0.989893;-0.141816;, + 0.992556;-0.096346;-0.074495;, + 0.997977;0.060033;0.020946;, + 0.873163;0.486617;0.028135;, + -0.989858;-0.123422;0.070338;, + -0.997449;-0.071060;-0.006718;, + 0.995593;0.091045;0.022459;, + 0.087533;0.940546;-0.328195;, + 0.000000;0.989893;-0.141815;, + -0.992556;-0.096347;-0.074494;, + 0.997898;0.061299;0.021036;, + 0.866886;0.497720;0.027980;, + -0.989865;-0.124386;0.068523;, + -0.997521;-0.070000;-0.007156;, + 0.995837;0.088170;0.023112;, + 0.000000;0.961996;-0.273062;, + 0.000000;0.992194;-0.124703;, + -0.992624;-0.093847;-0.076743;, + -0.995837;0.088169;0.023114;, + -0.853004;0.514724;0.086275;, + 0.000000;0.992194;-0.124703;, + 0.992624;-0.093846;-0.076744;, + -0.997898;0.061298;0.021036;, + -0.866887;0.497719;0.027978;, + 0.000000;0.908907;0.417000;, + 0.997522;-0.069998;-0.007156;, + 0.753723;0.654633;0.057950;, + 0.000000;-0.888961;-0.457984;, + -0.998187;-0.003070;-0.060104;, + -0.998037;-0.002773;-0.062566;, + 0.998364;-0.010093;-0.056285;, + 0.998959;0.012170;-0.043959;, + 0.998037;-0.002774;-0.062566;, + -0.753723;0.654633;0.057950;, + -0.780194;0.623981;0.044103;, + 0.000000;0.999844;-0.017632;, + 0.000000;0.999825;0.018711;, + 0.000000;0.999825;0.018711;, + 0.000000;0.000031;1.000000;, + 0.000000;0.000031;1.000000;, + 0.000000;0.938853;-0.344317;, + 0.000000;0.938853;-0.344317;, + -0.742922;0.645252;-0.178094;, + -0.810819;0.580867;-0.071878;, + -0.998134;-0.059495;-0.013738;, + 0.998493;-0.003687;-0.054747;, + 0.999923;-0.003752;-0.011867;, + -0.848788;0.528730;0.001502;, + -0.000319;-0.998801;-0.048946;, + 0.999804;-0.011987;0.015738;, + 0.823550;0.559299;0.094603;, + 0.823639;0.559360;0.093461;, + -0.823640;0.559359;0.093461;, + -0.996995;0.000002;0.077461;, + -0.000001;-0.998150;0.060802;, + -0.000001;-0.998150;0.060802;, + 0.997693;-0.011877;0.066845;, + 0.997044;-0.014871;0.075382;, + 0.000000;0.994096;0.108500;, + 0.000000;0.994096;0.108500;, + -0.135252;0.867776;0.478196;, + 0.123156;0.967400;0.221293;, + -0.067228;0.872590;0.483805;, + 0.000000;0.994097;0.108494;, + 0.000000;0.953854;0.300270;, + 0.000000;0.000000;1.000000;, + 0.985155;-0.134238;0.106999;, + 0.974843;-0.137104;0.175737;, + 0.000000;0.000000;-1.000000;, + -0.889652;-0.100364;-0.445472;, + -0.889652;-0.100364;-0.445472;, + 0.000000;0.000000;1.000000;, + 0.985272;-0.135965;0.103693;, + 0.974812;-0.140714;0.173036;, + 0.000000;-0.031831;-0.999493;, + 0.000000;-0.031831;-0.999493;, + -0.821165;-0.075242;-0.565709;, + -0.821165;-0.075242;-0.565709;, + 0.000000;0.505373;0.862901;, + 0.000000;0.505373;0.862901;, + 0.000000;0.505373;0.862901;, + 0.000000;0.658124;-0.752910;, + 0.000000;0.658124;-0.752910;, + 0.000000;0.658124;-0.752910;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 0.000000;0.513858;0.857875;, + 0.000000;0.513858;0.857875;, + 0.000000;0.513858;0.857875;, + 0.000000;0.676821;-0.736148;, + 0.000000;0.676821;-0.736148;, + 0.000000;0.676821;-0.736148;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 0.000000;0.995545;0.094289;, + 0.432857;0.807272;-0.401182;, + 0.432857;0.807272;-0.401182;, + 0.837833;0.536170;0.102751;, + 0.000000;0.997523;0.070347;, + 0.849402;0.516334;0.109159;, + 0.995006;-0.099370;-0.009394;, + 0.995135;-0.098012;-0.010020;, + -0.994755;-0.101085;-0.015617;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -0.994728;-0.101645;-0.013577;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -0.141911;0.799824;-0.583218;, + -0.069126;0.983432;-0.167579;, + 0.976547;-0.214348;-0.020264;, + 1.000000;0.000000;0.000000;, + 0.000000;0.615561;0.788090;, + 0.000000;0.615561;0.788090;, + -0.917390;-0.196164;0.346287;, + -0.965892;-0.159283;0.204162;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 0.230131;0.746346;0.624505;, + -0.920142;-0.201969;0.335482;, + -0.966035;-0.163039;0.200486;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 0.000000;0.632861;-0.774266;, + 0.000000;0.632861;-0.774266;, + 0.975625;-0.218308;-0.022319;, + 1.000000;0.000000;0.000000;, + 0.997456;-0.009298;-0.070678;, + 0.998134;-0.059499;-0.013735;, + 0.999989;-0.000299;0.004708;, + 0.996995;0.000002;0.077462;, + 0.996995;0.000002;0.077462;, + 0.893188;0.448008;0.038781;, + 0.831739;0.539441;0.131204;, + 0.838991;0.544140;-0.002344;, + 0.882523;0.467499;0.050974;, + -0.205690;0.786930;0.581750;, + 0.385611;0.753550;0.532416;, + 0.000000;0.997523;0.070347;, + -0.385611;0.753550;0.532416;, + 0.000000;0.997523;0.070347;, + -0.300854;0.838548;-0.454229;, + 0.000000;0.995545;0.094289;, + -0.432857;0.807272;-0.401182;, + -0.432857;0.807272;-0.401182;, + 0.000000;0.652462;0.757821;, + 0.000000;0.995545;0.094289;, + 0.000000;0.632861;-0.774266;, + 0.000000;0.266808;-0.963750;, + 0.000000;0.999825;0.018711;, + 0.000000;0.999825;0.018711;, + 0.000000;0.938853;-0.344317;, + 0.000000;0.000000;1.000000;, + 0.000000;0.505373;0.862901;, + 0.000000;0.505373;0.862901;, + 0.000000;0.995561;0.094115;, + 0.000000;0.658124;-0.752910;, + 0.000000;0.000000;-1.000000;, + 0.000000;0.000000;1.000000;, + 0.000000;0.513858;0.857875;, + 0.000000;0.513858;0.857875;, + 0.000000;0.994815;0.101705;, + 0.000000;0.676821;-0.736148;, + 0.000000;-0.031831;-0.999493;, + 0.000000;0.994097;0.108494;, + 0.000000;0.992935;0.118656;, + 0.000000;0.000031;1.000000;, + 0.000000;-0.998150;0.060802;, + -0.000912;-0.995199;-0.097863;, + -0.000903;-0.985505;-0.169642;, + 0.000000;-0.888961;-0.457984;, + 0.917390;-0.196163;0.346288;, + 0.994728;-0.101643;-0.013577;, + 0.889652;-0.100362;-0.445474;, + 0.889652;-0.100362;-0.445474;, + 0.920141;-0.201967;0.335483;, + 0.994755;-0.101083;-0.015617;, + 0.821164;-0.075241;-0.565711;, + 0.821164;-0.075241;-0.565711;, + -0.976547;-0.214350;-0.020264;, + -0.976547;-0.214350;-0.020264;, + -0.975624;-0.218309;-0.022320;, + -0.975624;-0.218309;-0.022320;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;; + 168; + 3;0,3,2;, + 3;86,9,4;, + 3;22,17,23;, + 3;6,7,87;, + 3;88,5,89;, + 3;90,91,92;, + 3;8,93,94;, + 3;95,96,97;, + 3;98,99,25;, + 3;4,11,10;, + 3;100,12,101;, + 3;8,102,103;, + 3;5,104,13;, + 3;7,6,15;, + 3;105,10,106;, + 3;63,66,62;, + 3;46,48,49;, + 3;107,13,55;, + 3;20,78,82;, + 3;15,21,108;, + 3;109,10,62;, + 3;16,110,111;, + 3;18,19,112;, + 3;19,24,113;, + 3;114,21,115;, + 3;116,16,117;, + 3;27,26,83;, + 3;50,52,53;, + 3;71,74,70;, + 3;118,119,30;, + 3;120,56,31;, + 3;34,28,33;, + 3;121,68,67;, + 3;122,84,35;, + 3;123,37,36;, + 3;124,76,75;, + 3;125,39,38;, + 3;126,57,127;, + 3;32,128,41;, + 3;129,130,69;, + 3;131,43,42;, + 3;132,85,133;, + 3;134,135,45;, + 3;136,137,77;, + 3;138,139,140;, + 3;127,57,47;, + 3;141,142,143;, + 3;144,69,145;, + 3;146,147,148;, + 3;133,85,51;, + 3;149,150,151;, + 3;152,77,153;, + 3;79,83,78;, + 3;80,84,154;, + 3;37,155,156;, + 3;157,16,74;, + 3;59,55,58;, + 3;60,56,158;, + 3;33,28,67;, + 3;159,29,66;, + 3;61,57,160;, + 3;47,57,61;, + 3;81,85,161;, + 3;51,85,81;, + 3;77,162,72;, + 3;163,77,164;, + 3;69,165,64;, + 3;166,69,167;, + 3;59,26,27;, + 3;60,168,169;, + 3;61,170,40;, + 3;171,61,40;, + 3;63,62,10;, + 3;172,173,30;, + 3;64,174,175;, + 3;176,65,177;, + 3;71,70,29;, + 3;178,28,34;, + 3;72,179,180;, + 3;181,73,182;, + 3;79,19,18;, + 3;80,183,184;, + 3;81,185,44;, + 3;186,81,44;, + 3;88,89,1;, + 3;13,88,14;, + 3;90,92,187;, + 3;10,90,188;, + 3;14,54,13;, + 3;14,58,54;, + 3;14,26,58;, + 3;20,26,14;, + 3;20,82,26;, + 3;78,20,19;, + 3;106,29,189;, + 3;66,106,62;, + 3;29,106,66;, + 3;116,70,74;, + 3;70,116,29;, + 3;116,74,16;, + 3;24,19,20;, + 3;190,16,191;, + 3;103,94,13;, + 3;11,4,9;, + 3;55,13,54;, + 3;58,55,54;, + 3;63,10,11;, + 3;66,63,192;, + 3;29,159,193;, + 3;71,29,194;, + 3;74,71,195;, + 3;26,59,58;, + 3;83,26,82;, + 3;78,83,82;, + 3;19,79,78;, + 3;16,157,110;, + 3;34,169,35;, + 3;169,34,33;, + 3;35,169,196;, + 3;30,121,197;, + 3;68,121,198;, + 3;120,31,199;, + 3;60,120,200;, + 3;33,67,68;, + 3;169,168,201;, + 3;122,35,196;, + 3;80,122,202;, + 3;36,203,204;, + 3;124,34,205;, + 3;76,124,206;, + 3;207,75,76;, + 3;3,0,208;, + 3;95,209,210;, + 3;12,95,211;, + 3;30,119,31;, + 3;39,125,212;, + 3;140,213,214;, + 3;48,46,215;, + 3;141,143,216;, + 3;32,41,217;, + 3;43,131,218;, + 3;148,219,220;, + 3;52,50,221;, + 3;149,151,222;, + 3;134,45,223;, + 3;123,36,224;, + 3;23,17,225;, + 3;25,99,226;, + 3;108,115,227;, + 3;15,108,228;, + 3;7,15,229;, + 3;87,7,230;, + 3;126,127,231;, + 3;61,126,232;, + 3;233,61,234;, + 3;132,133,235;, + 3;81,132,236;, + 3;237,81,238;, + 3;64,175,65;, + 3;69,64,65;, + 3;239,69,240;, + 3;72,180,73;, + 3;77,72,73;, + 3;241,77,242;, + 3;164,77,73;, + 3;167,69,65;, + 3;47,61,243;, + 3;51,81,244;; + } + + MeshTextureCoords { + 245; + 0.830568;-0.996310;, + 0.858212;-0.998666;, + 0.829807;-0.954350;, + 0.668791;-0.954638;, + 0.688022;-0.799051;, + 0.814918;-0.798328;, + 0.825319;-0.881120;, + 0.694015;-0.881868;, + 0.780420;-0.798524;, + 0.718793;-0.798875;, + 0.686482;-0.755391;, + 0.736564;-0.755107;, + 0.717833;-0.755213;, + 0.816116;-0.754652;, + 0.958007;-0.767074;, + 0.832042;-0.767792;, + 0.669243;-0.558620;, + 0.797850;-0.557888;, + 0.785955;-0.557956;, + 0.833064;-0.557686;, + 0.978120;-0.597025;, + 0.830218;-0.617244;, + 0.772987;-0.158226;, + 0.736292;-0.158434;, + 0.928672;-0.157336;, + 0.000000;-3.000000;, + 0.824591;-0.656169;, + 0.772961;-0.656465;, + 0.727517;-0.689972;, + 0.677862;-0.657005;, + 0.731321;-0.650436;, + 0.766017;-0.650238;, + 0.766005;-0.688355;, + 0.731767;-0.688550;, + 0.731783;-0.691332;, + 0.766021;-0.691137;, + 0.766008;-0.729253;, + 0.732230;-0.729445;, + 0.717313;-0.650516;, + 0.780025;-0.650159;, + 0.780242;-0.688273;, + 0.717529;-0.688631;, + 0.717545;-0.691413;, + 0.780258;-0.691055;, + 0.780483;-0.730565;, + 0.717771;-0.730922;, + 0.717360;-0.658737;, + 0.780072;-0.658379;, + 0.780182;-0.677568;, + 0.717469;-0.677925;, + 0.717594;-0.699880;, + 0.780306;-0.699522;, + 0.780420;-0.719412;, + 0.717707;-0.719770;, + 0.818235;-0.730032;, + 0.796397;-0.726765;, + 0.775196;-0.659641;, + 0.780079;-0.659687;, + 0.822472;-0.680790;, + 0.799987;-0.683628;, + 0.775125;-0.678043;, + 0.780188;-0.678745;, + 0.684327;-0.730794;, + 0.703769;-0.727293;, + 0.722250;-0.659943;, + 0.717367;-0.660045;, + 0.680017;-0.681602;, + 0.715989;-0.678380;, + 0.722530;-0.678342;, + 0.717476;-0.679102;, + 0.675707;-0.632409;, + 0.691557;-0.629595;, + 0.722403;-0.701666;, + 0.717602;-0.701290;, + 0.671397;-0.583216;, + 0.716134;-0.721543;, + 0.722695;-0.721506;, + 0.717715;-0.721045;, + 0.830946;-0.582307;, + 0.814197;-0.582403;, + 0.775452;-0.721205;, + 0.780427;-0.720687;, + 0.826709;-0.631548;, + 0.808907;-0.628927;, + 0.775518;-0.701363;, + 0.780315;-0.700933;, + 0.723684;-0.981664;, + 0.818885;-0.998890;, + 0.934058;-0.880501;, + 0.777145;-0.981360;, + 0.582647;-0.882503;, + 0.651567;-0.999844;, + 0.723684;-0.981664;, + 0.777145;-0.981360;, + 0.814918;-0.798328;, + 0.804438;-0.798387;, + 0.818784;-0.981122;, + 0.701690;-0.981789;, + 0.000000;-2.000000;, + 1.000000;-2.000000;, + 0.804438;-0.798387;, + 0.800059;-0.754745;, + 0.814918;-0.798328;, + 0.759968;-0.754974;, + 0.934058;-0.880501;, + 0.582647;-0.882503;, + 0.559939;-0.769342;, + 0.759968;-0.754974;, + 0.686110;-0.618066;, + 0.559939;-0.769342;, + 0.711262;-0.558381;, + 0.632928;-0.159023;, + 0.867023;-0.157690;, + 0.867023;-0.157690;, + 0.686110;-0.618066;, + 0.772987;-0.158224;, + 0.540292;-0.599520;, + 0.577939;-0.159335;, + 0.726992;-0.647967;, + 0.770318;-0.647720;, + 0.781781;-0.659604;, + 0.715665;-0.659981;, + 0.782123;-0.701326;, + 0.728043;-0.731977;, + 0.715798;-0.701704;, + 0.731321;-0.650436;, + 0.775196;-0.659641;, + 0.780025;-0.650159;, + 0.731767;-0.688550;, + 0.731767;-0.688550;, + 0.722530;-0.678342;, + 0.731783;-0.691332;, + 0.775518;-0.701363;, + 0.780258;-0.691055;, + 0.766008;-0.729253;, + 0.732230;-0.729445;, + 0.732230;-0.729445;, + 0.722695;-0.721506;, + 0.717313;-0.650516;, + 0.780025;-0.650159;, + 0.717360;-0.658737;, + 0.717529;-0.688631;, + 0.717469;-0.677925;, + 0.780182;-0.677568;, + 0.717529;-0.688631;, + 0.717469;-0.677925;, + 0.717545;-0.691413;, + 0.780258;-0.691055;, + 0.717594;-0.699880;, + 0.717771;-0.730922;, + 0.717707;-0.719770;, + 0.780420;-0.719412;, + 0.717771;-0.730922;, + 0.717707;-0.719770;, + 0.782123;-0.701326;, + 0.728043;-0.731977;, + 0.716134;-0.721543;, + 0.686337;-0.583132;, + 0.781781;-0.659604;, + 0.700102;-0.684197;, + 0.775196;-0.659641;, + 0.775518;-0.701363;, + 0.722695;-0.721506;, + 0.717707;-0.719770;, + 0.717594;-0.699880;, + 0.722530;-0.678342;, + 0.717469;-0.677925;, + 0.717360;-0.658737;, + 0.781666;-0.678005;, + 0.766005;-0.688355;, + 0.766005;-0.688355;, + 0.780182;-0.677568;, + 0.722250;-0.659943;, + 0.715665;-0.659981;, + 0.731321;-0.650436;, + 0.717313;-0.650516;, + 0.717360;-0.658737;, + 0.717313;-0.650516;, + 0.715798;-0.701704;, + 0.731783;-0.691332;, + 0.717545;-0.691413;, + 0.717594;-0.699880;, + 0.717545;-0.691413;, + 0.782013;-0.721168;, + 0.766008;-0.729253;, + 0.766008;-0.729253;, + 0.780420;-0.719412;, + 0.688022;-0.799051;, + 0.688022;-0.799051;, + 0.540292;-0.599520;, + 0.577939;-0.159335;, + 0.632928;-0.159023;, + 0.700102;-0.684197;, + 0.723913;-0.656744;, + 0.723913;-0.656744;, + 0.686337;-0.583132;, + 0.770271;-0.689728;, + 0.726992;-0.647967;, + 0.722250;-0.659943;, + 0.770318;-0.647720;, + 0.781666;-0.678005;, + 0.770271;-0.689728;, + 0.782013;-0.721168;, + 0.782013;-0.721168;, + 0.770224;-0.731737;, + 0.722403;-0.701666;, + 0.722403;-0.701666;, + 0.732230;-0.729445;, + 0.669552;-0.996598;, + 0.701690;-0.981789;, + 0.713951;-0.798903;, + 0.713951;-0.798903;, + 0.766017;-0.650238;, + 0.780025;-0.650159;, + 0.780072;-0.658379;, + 0.780072;-0.658379;, + 0.780242;-0.688273;, + 0.780242;-0.688273;, + 0.766021;-0.691137;, + 0.780258;-0.691055;, + 0.780306;-0.699522;, + 0.780306;-0.699522;, + 0.780483;-0.730565;, + 0.780483;-0.730565;, + 0.770224;-0.731737;, + 0.717799;-0.558344;, + 1.000000;-3.000000;, + 0.736292;-0.158433;, + 0.686005;-0.768624;, + 0.686005;-0.768624;, + 0.701791;-0.999557;, + 0.766017;-0.650238;, + 0.775125;-0.678043;, + 0.766005;-0.688355;, + 0.775125;-0.678043;, + 0.766021;-0.691137;, + 0.775452;-0.721205;, + 0.766008;-0.729253;, + 0.775452;-0.721205;, + 0.731767;-0.688550;, + 0.717529;-0.688631;, + 0.732230;-0.729445;, + 0.717771;-0.730922;, + 0.780182;-0.677568;, + 0.780420;-0.719412;; + } + + MeshMaterialList { + 1; + 168; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0; + + Material { + 0.800000;0.800000;0.800000;0.000000;; + 0.000000; + 0.000000;0.000000;0.000000;; + 0.000000;0.000000;0.000000;; + + TextureFilename { + "bihull.bmp"; + } + } + } + + VertexDuplicationIndices { + 245; + 86; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 2, + 0, + 7, + 3, + 6, + 0, + 2, + 3, + 5, + 9, + 2, + 3, + 22, + 23, + 9, + 11, + 5, + 12, + 7, + 6, + 15, + 12, + 20, + 15, + 17, + 22, + 23, + 23, + 20, + 25, + 21, + 25, + 11, + 12, + 55, + 63, + 83, + 17, + 71, + 30, + 56, + 39, + 33, + 33, + 68, + 34, + 84, + 43, + 36, + 37, + 37, + 76, + 38, + 39, + 46, + 41, + 49, + 48, + 41, + 49, + 42, + 43, + 50, + 45, + 53, + 52, + 45, + 53, + 83, + 17, + 75, + 75, + 55, + 67, + 56, + 84, + 76, + 53, + 50, + 68, + 49, + 46, + 59, + 32, + 32, + 48, + 64, + 63, + 30, + 38, + 46, + 38, + 71, + 34, + 42, + 50, + 42, + 79, + 36, + 36, + 52, + 4, + 4, + 21, + 25, + 22, + 67, + 28, + 28, + 75, + 27, + 11, + 64, + 12, + 59, + 27, + 79, + 79, + 18, + 72, + 72, + 37, + 1, + 3, + 8, + 8, + 31, + 39, + 47, + 47, + 40, + 40, + 35, + 43, + 51, + 51, + 44, + 44, + 18, + 18, + 24, + 24, + 14, + 14, + 1, + 31, + 60, + 32, + 60, + 35, + 80, + 36, + 80, + 33, + 41, + 37, + 45, + 48, + 52; + } + } + } + + Frame wing_poles { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.102858,0.000000,1.000000;; + } + + Mesh { + 256; + 3.678300;-0.288631;-2.509480;, + 3.553570;1.099530;-2.604250;, + 3.553570;-0.288631;-2.509480;, + 3.678300;1.099530;-2.604250;, + 3.678300;-0.299920;-2.369920;, + 3.553570;-0.299920;-2.369920;, + 3.678300;1.081790;-2.474930;, + 3.553570;1.081790;-2.474930;, + 3.673010;-0.379267;-1.559630;, + 3.548290;1.013120;-1.654870;, + 3.548290;-0.379267;-1.559630;, + 3.673010;1.013120;-1.654870;, + 3.673010;-0.396630;-1.420710;, + 3.548290;-0.396630;-1.420710;, + 3.673010;0.997639;-1.525250;, + 3.548290;0.997639;-1.525250;, + 1.741860;-0.288631;-2.509480;, + 1.617140;1.099530;-2.604250;, + 1.617140;-0.288631;-2.509480;, + 1.741860;1.099530;-2.604250;, + 1.741860;-0.299920;-2.369920;, + 1.617140;-0.299920;-2.369920;, + 1.741860;1.081790;-2.474930;, + 1.617140;1.081790;-2.474930;, + 1.736570;-0.379267;-1.559630;, + 1.611850;1.013120;-1.654870;, + 1.611850;-0.379267;-1.559630;, + 1.736570;1.013120;-1.654870;, + 1.736570;-0.396630;-1.420710;, + 1.611850;-0.396630;-1.420710;, + 1.736570;0.997639;-1.525250;, + 1.611850;0.997639;-1.525250;, + -1.544050;-0.288631;-2.509480;, + -1.668770;1.099530;-2.604250;, + -1.668770;-0.288631;-2.509480;, + -1.544050;1.099530;-2.604250;, + -1.544050;-0.299920;-2.369920;, + -1.668770;-0.299920;-2.369920;, + -1.544050;1.081790;-2.474930;, + -1.668770;1.081790;-2.474930;, + -1.549350;-0.379267;-1.559630;, + -1.674070;1.013120;-1.654870;, + -1.674070;-0.379267;-1.559630;, + -1.549350;1.013120;-1.654870;, + -1.549350;-0.396629;-1.420710;, + -1.674070;-0.396629;-1.420710;, + -1.549350;0.997639;-1.525250;, + -1.674070;0.997639;-1.525250;, + -3.599630;-0.288630;-2.509480;, + -3.724350;1.099530;-2.604250;, + -3.724350;-0.288630;-2.509480;, + -3.599630;1.099530;-2.604250;, + -3.599630;-0.299919;-2.369920;, + -3.724350;-0.299919;-2.369920;, + -3.599630;1.081790;-2.474930;, + -3.724350;1.081790;-2.474930;, + -3.599630;-0.379267;-1.559630;, + -3.724350;1.013120;-1.654870;, + -3.724350;-0.379267;-1.559630;, + -3.599630;1.013120;-1.654870;, + -3.599630;-0.396629;-1.420710;, + -3.724350;-0.396629;-1.420710;, + -3.599630;0.997639;-1.525250;, + -3.724350;0.997639;-1.525250;, + 3.553570;-0.288631;-2.509480;, + 3.678300;-0.288631;-2.509480;, + 3.553570;-0.288631;-2.509480;, + 3.553570;-0.299920;-2.369920;, + 3.678300;-0.299920;-2.369920;, + 3.553570;-0.299920;-2.369920;, + 3.678300;1.099530;-2.604250;, + 3.553570;1.099530;-2.604250;, + 3.553570;1.081790;-2.474930;, + 3.678300;1.081790;-2.474930;, + 3.678300;1.099530;-2.604250;, + 3.553570;1.081790;-2.474930;, + 3.553570;-0.299920;-2.369920;, + 3.553570;1.081790;-2.474930;, + 3.553570;-0.288631;-2.509480;, + 3.553570;-0.288631;-2.509480;, + 3.553570;1.081790;-2.474930;, + 3.553570;1.099530;-2.604250;, + 3.678300;1.081790;-2.474930;, + 3.678300;-0.299920;-2.369920;, + 3.678300;-0.288631;-2.509480;, + 3.678300;1.081790;-2.474930;, + 3.678300;-0.288631;-2.509480;, + 3.678300;1.099530;-2.604250;, + 3.548290;-0.379267;-1.559630;, + 3.673010;-0.379267;-1.559630;, + 3.548290;-0.379267;-1.559630;, + 3.548290;-0.396630;-1.420710;, + 3.673010;-0.396630;-1.420710;, + 3.548290;-0.396630;-1.420710;, + 3.673010;1.013120;-1.654870;, + 3.548290;1.013120;-1.654870;, + 3.548290;0.997639;-1.525250;, + 3.673010;0.997639;-1.525250;, + 3.673010;1.013120;-1.654870;, + 3.548290;0.997639;-1.525250;, + 3.548290;-0.396630;-1.420710;, + 3.548290;0.997639;-1.525250;, + 3.548290;-0.379267;-1.559630;, + 3.548290;-0.379267;-1.559630;, + 3.548290;0.997639;-1.525250;, + 3.548290;1.013120;-1.654870;, + 3.673010;0.997639;-1.525250;, + 3.673010;-0.396630;-1.420710;, + 3.673010;-0.379267;-1.559630;, + 3.673010;0.997639;-1.525250;, + 3.673010;-0.379267;-1.559630;, + 3.673010;1.013120;-1.654870;, + 1.617140;-0.288631;-2.509480;, + 1.741860;-0.288631;-2.509480;, + 1.617140;-0.288631;-2.509480;, + 1.617140;-0.299920;-2.369920;, + 1.741860;-0.299920;-2.369920;, + 1.617140;-0.299920;-2.369920;, + 1.741860;1.099530;-2.604250;, + 1.617140;1.099530;-2.604250;, + 1.617140;1.081790;-2.474930;, + 1.741860;1.081790;-2.474930;, + 1.741860;1.099530;-2.604250;, + 1.617140;1.081790;-2.474930;, + 1.617140;-0.299920;-2.369920;, + 1.617140;1.081790;-2.474930;, + 1.617140;-0.288631;-2.509480;, + 1.617140;-0.288631;-2.509480;, + 1.617140;1.081790;-2.474930;, + 1.617140;1.099530;-2.604250;, + 1.741860;1.081790;-2.474930;, + 1.741860;-0.299920;-2.369920;, + 1.741860;-0.288631;-2.509480;, + 1.741860;1.081790;-2.474930;, + 1.741860;-0.288631;-2.509480;, + 1.741860;1.099530;-2.604250;, + 1.611850;-0.379267;-1.559630;, + 1.736570;-0.379267;-1.559630;, + 1.611850;-0.379267;-1.559630;, + 1.611850;-0.396630;-1.420710;, + 1.736570;-0.396630;-1.420710;, + 1.611850;-0.396630;-1.420710;, + 1.736570;1.013120;-1.654870;, + 1.611850;1.013120;-1.654870;, + 1.611850;0.997639;-1.525250;, + 1.736570;0.997639;-1.525250;, + 1.736570;1.013120;-1.654870;, + 1.611850;0.997639;-1.525250;, + 1.611850;-0.396630;-1.420710;, + 1.611850;0.997639;-1.525250;, + 1.611850;-0.379267;-1.559630;, + 1.611850;-0.379267;-1.559630;, + 1.611850;0.997639;-1.525250;, + 1.611850;1.013120;-1.654870;, + 1.736570;0.997639;-1.525250;, + 1.736570;-0.396630;-1.420710;, + 1.736570;-0.379267;-1.559630;, + 1.736570;0.997639;-1.525250;, + 1.736570;-0.379267;-1.559630;, + 1.736570;1.013120;-1.654870;, + -1.668770;-0.288631;-2.509480;, + -1.544050;-0.288631;-2.509480;, + -1.668770;-0.288631;-2.509480;, + -1.668770;-0.299920;-2.369920;, + -1.544050;-0.299920;-2.369920;, + -1.668770;-0.299920;-2.369920;, + -1.544050;1.099530;-2.604250;, + -1.668770;1.099530;-2.604250;, + -1.668770;1.081790;-2.474930;, + -1.544050;1.081790;-2.474930;, + -1.544050;1.099530;-2.604250;, + -1.668770;1.081790;-2.474930;, + -1.668770;-0.299920;-2.369920;, + -1.668770;1.081790;-2.474930;, + -1.668770;-0.288631;-2.509480;, + -1.668770;-0.288631;-2.509480;, + -1.668770;1.081790;-2.474930;, + -1.668770;1.099530;-2.604250;, + -1.544050;1.081790;-2.474930;, + -1.544050;-0.299920;-2.369920;, + -1.544050;-0.288631;-2.509480;, + -1.544050;1.081790;-2.474930;, + -1.544050;-0.288631;-2.509480;, + -1.544050;1.099530;-2.604250;, + -1.674070;-0.379267;-1.559630;, + -1.549350;-0.379267;-1.559630;, + -1.674070;-0.379267;-1.559630;, + -1.674070;-0.396629;-1.420710;, + -1.549350;-0.396629;-1.420710;, + -1.674070;-0.396629;-1.420710;, + -1.549350;1.013120;-1.654870;, + -1.674070;1.013120;-1.654870;, + -1.674070;0.997639;-1.525250;, + -1.549350;0.997639;-1.525250;, + -1.549350;1.013120;-1.654870;, + -1.674070;0.997639;-1.525250;, + -1.674070;-0.396629;-1.420710;, + -1.674070;0.997639;-1.525250;, + -1.674070;-0.379267;-1.559630;, + -1.674070;-0.379267;-1.559630;, + -1.674070;0.997639;-1.525250;, + -1.674070;1.013120;-1.654870;, + -1.549350;0.997639;-1.525250;, + -1.549350;-0.396629;-1.420710;, + -1.549350;-0.379267;-1.559630;, + -1.549350;0.997639;-1.525250;, + -1.549350;-0.379267;-1.559630;, + -1.549350;1.013120;-1.654870;, + -3.724350;-0.288630;-2.509480;, + -3.599630;-0.288630;-2.509480;, + -3.724350;-0.288630;-2.509480;, + -3.724350;-0.299919;-2.369920;, + -3.599630;-0.299919;-2.369920;, + -3.724350;-0.299919;-2.369920;, + -3.599630;1.099530;-2.604250;, + -3.724350;1.099530;-2.604250;, + -3.724350;1.081790;-2.474930;, + -3.599630;1.081790;-2.474930;, + -3.599630;1.099530;-2.604250;, + -3.724350;1.081790;-2.474930;, + -3.724350;-0.299919;-2.369920;, + -3.724350;1.081790;-2.474930;, + -3.724350;-0.288630;-2.509480;, + -3.724350;-0.288630;-2.509480;, + -3.724350;1.081790;-2.474930;, + -3.724350;1.099530;-2.604250;, + -3.599630;1.081790;-2.474930;, + -3.599630;-0.299919;-2.369920;, + -3.599630;-0.288630;-2.509480;, + -3.599630;1.081790;-2.474930;, + -3.599630;-0.288630;-2.509480;, + -3.599630;1.099530;-2.604250;, + -3.724350;-0.379267;-1.559630;, + -3.599630;-0.379267;-1.559630;, + -3.724350;-0.379267;-1.559630;, + -3.724350;-0.396629;-1.420710;, + -3.599630;-0.396629;-1.420710;, + -3.724350;-0.396629;-1.420710;, + -3.599630;1.013120;-1.654870;, + -3.724350;1.013120;-1.654870;, + -3.724350;0.997639;-1.525250;, + -3.599630;0.997639;-1.525250;, + -3.599630;1.013120;-1.654870;, + -3.724350;0.997639;-1.525250;, + -3.724350;-0.396629;-1.420710;, + -3.724350;0.997639;-1.525250;, + -3.724350;-0.379267;-1.559630;, + -3.724350;-0.379267;-1.559630;, + -3.724350;0.997639;-1.525250;, + -3.724350;1.013120;-1.654870;, + -3.599630;0.997639;-1.525250;, + -3.599630;-0.396629;-1.420710;, + -3.599630;-0.379267;-1.559630;, + -3.599630;0.997639;-1.525250;, + -3.599630;-0.379267;-1.559630;, + -3.599630;1.013120;-1.654870;; + 96; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,64;, + 3;65,4,66;, + 3;6,7,67;, + 3;68,6,69;, + 3;70,71,72;, + 3;73,74,75;, + 3;76,77,78;, + 3;79,80,81;, + 3;82,83,84;, + 3;85,86,87;, + 3;8,10,9;, + 3;11,8,9;, + 3;12,13,88;, + 3;89,12,90;, + 3;14,15,91;, + 3;92,14,93;, + 3;94,95,96;, + 3;97,98,99;, + 3;100,101,102;, + 3;103,104,105;, + 3;106,107,108;, + 3;109,110,111;, + 3;16,18,17;, + 3;19,16,17;, + 3;20,21,112;, + 3;113,20,114;, + 3;22,23,115;, + 3;116,22,117;, + 3;118,119,120;, + 3;121,122,123;, + 3;124,125,126;, + 3;127,128,129;, + 3;130,131,132;, + 3;133,134,135;, + 3;24,26,25;, + 3;27,24,25;, + 3;28,29,136;, + 3;137,28,138;, + 3;30,31,139;, + 3;140,30,141;, + 3;142,143,144;, + 3;145,146,147;, + 3;148,149,150;, + 3;151,152,153;, + 3;154,155,156;, + 3;157,158,159;, + 3;32,34,33;, + 3;35,32,33;, + 3;36,37,160;, + 3;161,36,162;, + 3;38,39,163;, + 3;164,38,165;, + 3;166,167,168;, + 3;169,170,171;, + 3;172,173,174;, + 3;175,176,177;, + 3;178,179,180;, + 3;181,182,183;, + 3;40,42,41;, + 3;43,40,41;, + 3;44,45,184;, + 3;185,44,186;, + 3;46,47,187;, + 3;188,46,189;, + 3;190,191,192;, + 3;193,194,195;, + 3;196,197,198;, + 3;199,200,201;, + 3;202,203,204;, + 3;205,206,207;, + 3;48,50,49;, + 3;51,48,49;, + 3;52,53,208;, + 3;209,52,210;, + 3;54,55,211;, + 3;212,54,213;, + 3;214,215,216;, + 3;217,218,219;, + 3;220,221,222;, + 3;223,224,225;, + 3;226,227,228;, + 3;229,230,231;, + 3;56,58,57;, + 3;59,56,57;, + 3;60,61,232;, + 3;233,60,234;, + 3;62,63,235;, + 3;236,62,237;, + 3;238,239,240;, + 3;241,242,243;, + 3;244,245,246;, + 3;247,248,249;, + 3;250,251,252;, + 3;253,254,255;; + + MeshNormals { + 256; + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.992280;-0.124020;, + 0.000000;-0.992280;-0.124020;, + 0.000000;0.074768;0.997201;, + 0.000000;0.074768;0.997201;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.992280;-0.124020;, + 0.000000;-0.992280;-0.124020;, + 0.000000;0.074768;0.997201;, + 0.000000;0.074768;0.997201;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.992280;-0.124014;, + 0.000000;-0.992280;-0.124014;, + 0.000000;0.074769;0.997201;, + 0.000000;0.074769;0.997201;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.068112;-0.997678;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.068241;-0.997669;, + 0.000000;-0.992281;-0.124014;, + 0.000000;-0.992281;-0.124014;, + 0.000000;0.074769;0.997201;, + 0.000000;0.074769;0.997201;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 0.000000;-0.992280;-0.124020;, + 0.000000;-0.992280;-0.124020;, + 0.000000;-0.992280;-0.124020;, + 0.000000;0.074768;0.997201;, + 0.000000;0.074768;0.997201;, + 0.000000;0.074768;0.997201;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 0.000000;-0.992280;-0.124020;, + 0.000000;-0.992280;-0.124020;, + 0.000000;-0.992280;-0.124020;, + 0.000000;0.074768;0.997201;, + 0.000000;0.074768;0.997201;, + 0.000000;0.074768;0.997201;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 0.000000;-0.992280;-0.124014;, + 0.000000;-0.992280;-0.124014;, + 0.000000;-0.992280;-0.124014;, + 0.000000;0.074769;0.997201;, + 0.000000;0.074769;0.997201;, + 0.000000;0.074769;0.997201;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;-0.996744;-0.080627;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;0.075782;0.997124;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + 0.000000;0.990722;0.135906;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 0.000000;-0.992281;-0.124014;, + 0.000000;-0.992281;-0.124014;, + 0.000000;-0.992281;-0.124014;, + 0.000000;0.074769;0.997201;, + 0.000000;0.074769;0.997201;, + 0.000000;0.074769;0.997201;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + 0.000000;0.992943;0.118591;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;; + 96; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,64;, + 3;65,4,66;, + 3;6,7,67;, + 3;68,6,69;, + 3;70,71,72;, + 3;73,74,75;, + 3;76,77,78;, + 3;79,80,81;, + 3;82,83,84;, + 3;85,86,87;, + 3;8,10,9;, + 3;11,8,9;, + 3;12,13,88;, + 3;89,12,90;, + 3;14,15,91;, + 3;92,14,93;, + 3;94,95,96;, + 3;97,98,99;, + 3;100,101,102;, + 3;103,104,105;, + 3;106,107,108;, + 3;109,110,111;, + 3;16,18,17;, + 3;19,16,17;, + 3;20,21,112;, + 3;113,20,114;, + 3;22,23,115;, + 3;116,22,117;, + 3;118,119,120;, + 3;121,122,123;, + 3;124,125,126;, + 3;127,128,129;, + 3;130,131,132;, + 3;133,134,135;, + 3;24,26,25;, + 3;27,24,25;, + 3;28,29,136;, + 3;137,28,138;, + 3;30,31,139;, + 3;140,30,141;, + 3;142,143,144;, + 3;145,146,147;, + 3;148,149,150;, + 3;151,152,153;, + 3;154,155,156;, + 3;157,158,159;, + 3;32,34,33;, + 3;35,32,33;, + 3;36,37,160;, + 3;161,36,162;, + 3;38,39,163;, + 3;164,38,165;, + 3;166,167,168;, + 3;169,170,171;, + 3;172,173,174;, + 3;175,176,177;, + 3;178,179,180;, + 3;181,182,183;, + 3;40,42,41;, + 3;43,40,41;, + 3;44,45,184;, + 3;185,44,186;, + 3;46,47,187;, + 3;188,46,189;, + 3;190,191,192;, + 3;193,194,195;, + 3;196,197,198;, + 3;199,200,201;, + 3;202,203,204;, + 3;205,206,207;, + 3;48,50,49;, + 3;51,48,49;, + 3;52,53,208;, + 3;209,52,210;, + 3;54,55,211;, + 3;212,54,213;, + 3;214,215,216;, + 3;217,218,219;, + 3;220,221,222;, + 3;223,224,225;, + 3;226,227,228;, + 3;229,230,231;, + 3;56,58,57;, + 3;59,56,57;, + 3;60,61,232;, + 3;233,60,234;, + 3;62,63,235;, + 3;236,62,237;, + 3;238,239,240;, + 3;241,242,243;, + 3;244,245,246;, + 3;247,248,249;, + 3;250,251,252;, + 3;253,254,255;; + } + + MeshTextureCoords { + 256; + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.699814;-0.548370;, + 0.699814;-0.548370;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.278624;-0.542429;, + 0.278624;-0.542429;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.699814;-0.548370;, + 0.699814;-0.548370;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.278624;-0.542429;, + 0.278624;-0.542429;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.699814;-0.548370;, + 0.699814;-0.548370;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.278624;-0.542429;, + 0.278624;-0.542429;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.699814;-0.548370;, + 0.699814;-0.548370;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.278624;-0.542429;, + 0.278624;-0.542429;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.757168;-0.549623;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.699814;-0.548370;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.696424;-0.300613;, + 0.699814;-0.548370;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.699814;-0.548370;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.696424;-0.300613;, + 0.758321;-0.301410;, + 0.699814;-0.548370;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.336112;-0.543522;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.278624;-0.542429;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.275443;-0.293785;, + 0.278624;-0.542429;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.278624;-0.542429;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.275443;-0.293785;, + 0.337055;-0.295011;, + 0.278624;-0.542429;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.757168;-0.549623;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.699814;-0.548370;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.696424;-0.300613;, + 0.699814;-0.548370;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.699814;-0.548370;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.696424;-0.300613;, + 0.758321;-0.301410;, + 0.699814;-0.548370;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.336112;-0.543522;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.278624;-0.542429;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.275443;-0.293785;, + 0.278624;-0.542429;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.278624;-0.542429;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.275443;-0.293785;, + 0.337055;-0.295011;, + 0.278624;-0.542429;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.757168;-0.549623;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.699814;-0.548370;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.696424;-0.300613;, + 0.699814;-0.548370;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.699814;-0.548370;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.696424;-0.300613;, + 0.758321;-0.301410;, + 0.699814;-0.548370;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.336112;-0.543522;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.278624;-0.542429;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.275443;-0.293785;, + 0.278624;-0.542429;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.278624;-0.542429;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.275443;-0.293785;, + 0.337055;-0.295011;, + 0.278624;-0.542429;, + 0.337055;-0.295011;, + 0.336112;-0.543522;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.696424;-0.300613;, + 0.757168;-0.549623;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.699814;-0.548370;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.696424;-0.300613;, + 0.699814;-0.548370;, + 0.758321;-0.301410;, + 0.758321;-0.301410;, + 0.699814;-0.548370;, + 0.757168;-0.549623;, + 0.699814;-0.548370;, + 0.696424;-0.300613;, + 0.758321;-0.301410;, + 0.699814;-0.548370;, + 0.758321;-0.301410;, + 0.757168;-0.549623;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.275443;-0.293785;, + 0.336112;-0.543522;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.278624;-0.542429;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.275443;-0.293785;, + 0.278624;-0.542429;, + 0.337055;-0.295011;, + 0.337055;-0.295011;, + 0.278624;-0.542429;, + 0.336112;-0.543522;, + 0.278624;-0.542429;, + 0.275443;-0.293785;, + 0.337055;-0.295011;, + 0.278624;-0.542429;, + 0.337055;-0.295011;, + 0.336112;-0.543522;; + } + + MeshMaterialList { + 1; + 96; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0; + + Material { + 0.800000;0.800000;0.800000;0.000000;; + 0.000000; + 0.000000;0.000000;0.000000;; + 0.000000;0.000000;0.000000;; + + TextureFilename { + "bihull.bmp"; + } + } + } + + VertexDuplicationIndices { + 256; + 64; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 2, + 0, + 2, + 5, + 4, + 5, + 3, + 1, + 7, + 6, + 3, + 7, + 5, + 7, + 2, + 2, + 7, + 1, + 6, + 4, + 0, + 6, + 0, + 3, + 10, + 8, + 10, + 13, + 12, + 13, + 11, + 9, + 15, + 14, + 11, + 15, + 13, + 15, + 10, + 10, + 15, + 9, + 14, + 12, + 8, + 14, + 8, + 11, + 18, + 16, + 18, + 21, + 20, + 21, + 19, + 17, + 23, + 22, + 19, + 23, + 21, + 23, + 18, + 18, + 23, + 17, + 22, + 20, + 16, + 22, + 16, + 19, + 26, + 24, + 26, + 29, + 28, + 29, + 27, + 25, + 31, + 30, + 27, + 31, + 29, + 31, + 26, + 26, + 31, + 25, + 30, + 28, + 24, + 30, + 24, + 27, + 34, + 32, + 34, + 37, + 36, + 37, + 35, + 33, + 39, + 38, + 35, + 39, + 37, + 39, + 34, + 34, + 39, + 33, + 38, + 36, + 32, + 38, + 32, + 35, + 42, + 40, + 42, + 45, + 44, + 45, + 43, + 41, + 47, + 46, + 43, + 47, + 45, + 47, + 42, + 42, + 47, + 41, + 46, + 44, + 40, + 46, + 40, + 43, + 50, + 48, + 50, + 53, + 52, + 53, + 51, + 49, + 55, + 54, + 51, + 55, + 53, + 55, + 50, + 50, + 55, + 49, + 54, + 52, + 48, + 54, + 48, + 51, + 58, + 56, + 58, + 61, + 60, + 61, + 59, + 57, + 63, + 62, + 59, + 63, + 61, + 63, + 58, + 58, + 63, + 57, + 62, + 60, + 56, + 62, + 56, + 59; + } + } + } + + Frame wings { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.102858,0.000000,1.000000;; + } + + Mesh { + 232; + -4.473780;0.990354;-1.090251;, + -0.345427;0.933506;-1.140405;, + -4.473780;0.932796;-1.091078;, + -0.345427;0.991065;-1.139578;, + -4.641020;1.112137;-1.503675;, + -4.641020;1.054581;-1.504503;, + -4.766460;1.131689;-2.085040;, + -4.766460;1.074128;-2.085866;, + -4.543460;1.139982;-2.660581;, + -4.543460;1.082430;-2.661408;, + 0.027874;1.140218;-2.677020;, + 0.027874;1.082668;-2.677857;, + 4.543460;1.139982;-2.660581;, + 4.543460;1.082430;-2.661408;, + 4.766460;1.130975;-2.035712;, + 4.766460;1.073424;-2.036540;, + 4.710710;1.111661;-1.470787;, + 4.710710;1.054106;-1.471615;, + 4.529530;0.990117;-1.073802;, + 4.529530;0.932558;-1.074629;, + 0.393257;0.991065;-1.139578;, + 0.393257;0.933506;-1.140405;, + 0.013937;1.111899;-1.487227;, + 0.013937;1.054343;-1.488064;, + -4.301710;-0.500205;-1.103060;, + -0.332142;-0.553724;-1.156760;, + -4.301710;-0.557592;-1.107570;, + -0.332142;-0.496337;-1.152240;, + -4.462520;-0.352204;-1.507840;, + -4.462520;-0.409591;-1.512360;, + -4.583130;-0.295474;-2.086770;, + -4.583130;-0.352861;-2.091280;, + -4.368720;-0.250351;-2.660590;, + -4.368720;-0.307738;-2.665110;, + 0.026802;-0.249062;-2.676990;, + 0.026802;-0.306449;-2.681500;, + 4.368720;-0.250351;-2.660590;, + 4.368720;-0.307738;-2.665100;, + 4.583130;-0.299342;-2.037580;, + 4.583130;-0.356729;-2.042090;, + 4.529530;-0.354782;-1.475050;, + 4.529530;-0.412169;-1.479570;, + 4.355310;-0.501494;-1.086660;, + 4.355310;-0.558881;-1.091180;, + 0.378131;-0.496337;-1.152240;, + 0.378131;-0.553724;-1.156760;, + 0.013401;-0.353493;-1.491450;, + 0.013401;-0.410880;-1.495960;, + -4.473780;0.990354;-1.090251;, + -0.345427;0.933506;-1.140405;, + -4.473780;0.932796;-1.091078;, + -4.473780;0.990354;-1.090251;, + -4.641020;1.112137;-1.503675;, + -4.473780;0.932796;-1.091078;, + -4.641020;1.054581;-1.504503;, + -4.641020;1.112137;-1.503675;, + -4.766460;1.131689;-2.085040;, + -4.641020;1.054581;-1.504503;, + -4.766460;1.074128;-2.085866;, + -4.766460;1.131689;-2.085040;, + -4.543460;1.139982;-2.660581;, + -4.766460;1.074128;-2.085866;, + -4.543460;1.082430;-2.661408;, + -4.543460;1.139982;-2.660581;, + 0.027874;1.140218;-2.677020;, + -4.543460;1.082430;-2.661408;, + 0.027874;1.082668;-2.677857;, + 0.027874;1.140218;-2.677020;, + 4.543460;1.139982;-2.660581;, + 0.027874;1.082668;-2.677857;, + 4.543460;1.082430;-2.661408;, + 4.543460;1.139982;-2.660581;, + 4.766460;1.130975;-2.035712;, + 4.543460;1.082430;-2.661408;, + 4.766460;1.073424;-2.036540;, + 4.766460;1.130975;-2.035712;, + 4.710710;1.111661;-1.470787;, + 4.766460;1.073424;-2.036540;, + 4.710710;1.054106;-1.471615;, + 4.710710;1.111661;-1.470787;, + 4.529530;0.990117;-1.073802;, + 4.710710;1.054106;-1.471615;, + 4.529530;0.932558;-1.074629;, + 4.529530;0.990117;-1.073802;, + 0.393257;0.991065;-1.139578;, + 4.529530;0.932558;-1.074629;, + 0.393257;0.933506;-1.140405;, + 0.393257;0.991065;-1.139578;, + 0.013937;1.111899;-1.487227;, + 0.393257;0.933506;-1.140405;, + -0.345427;0.991065;-1.139578;, + -0.345427;0.933506;-1.140405;, + 0.013937;1.054343;-1.488064;, + 0.013937;1.111899;-1.487227;, + -0.345427;0.991065;-1.139578;, + 0.013937;1.054343;-1.488064;, + 4.543460;1.082430;-2.661408;, + 4.766460;1.073424;-2.036540;, + 0.027874;1.082668;-2.677857;, + 4.766460;1.073424;-2.036540;, + 4.710710;1.054106;-1.471615;, + 0.027874;1.082668;-2.677857;, + 4.710710;1.054106;-1.471615;, + 4.529530;0.932558;-1.074629;, + 4.529530;0.932558;-1.074629;, + 0.393257;0.933506;-1.140405;, + 0.393257;0.933506;-1.140405;, + 0.013937;1.054343;-1.488064;, + 0.013937;1.054343;-1.488064;, + -0.345427;0.933506;-1.140405;, + -4.473780;0.932796;-1.091078;, + -0.345427;0.933506;-1.140405;, + -4.473780;0.932796;-1.091078;, + -4.641020;1.054581;-1.504503;, + -4.766460;1.074128;-2.085866;, + -4.543460;1.082430;-2.661408;, + -4.641020;1.054581;-1.504503;, + -4.766460;1.074128;-2.085866;, + 4.766460;1.130975;-2.035712;, + 4.543460;1.139982;-2.660581;, + 0.027874;1.140218;-2.677020;, + 4.710710;1.111661;-1.470787;, + 4.766460;1.130975;-2.035712;, + 0.027874;1.140218;-2.677020;, + 4.529530;0.990117;-1.073802;, + 4.710710;1.111661;-1.470787;, + 0.393257;0.991065;-1.139578;, + 4.529530;0.990117;-1.073802;, + 0.013937;1.111899;-1.487227;, + 0.393257;0.991065;-1.139578;, + -4.766460;1.131689;-2.085040;, + -4.543460;1.139982;-2.660581;, + 0.013937;1.111899;-1.487227;, + -0.345427;0.991065;-1.139578;, + -0.345427;0.991065;-1.139578;, + -4.473780;0.990354;-1.090251;, + -4.766460;1.131689;-2.085040;, + -4.641020;1.112137;-1.503675;, + -4.641020;1.112137;-1.503675;, + -4.473780;0.990354;-1.090251;, + -4.301710;-0.500205;-1.103060;, + -0.332142;-0.553724;-1.156760;, + -4.301710;-0.557592;-1.107570;, + -4.301710;-0.500205;-1.103060;, + -4.462520;-0.352204;-1.507840;, + -4.301710;-0.557592;-1.107570;, + -4.462520;-0.409591;-1.512360;, + -4.462520;-0.352204;-1.507840;, + -4.583130;-0.295474;-2.086770;, + -4.462520;-0.409591;-1.512360;, + -4.583130;-0.352861;-2.091280;, + -4.583130;-0.295474;-2.086770;, + -4.368720;-0.250351;-2.660590;, + -4.583130;-0.352861;-2.091280;, + -4.368720;-0.307738;-2.665110;, + -4.368720;-0.250351;-2.660590;, + 0.026802;-0.249062;-2.676990;, + -4.368720;-0.307738;-2.665110;, + 0.026802;-0.306449;-2.681500;, + 0.026802;-0.249062;-2.676990;, + 4.368720;-0.250351;-2.660590;, + 0.026802;-0.306449;-2.681500;, + 4.368720;-0.307738;-2.665100;, + 4.368720;-0.250351;-2.660590;, + 4.583130;-0.299342;-2.037580;, + 4.368720;-0.307738;-2.665100;, + 4.583130;-0.356729;-2.042090;, + 4.583130;-0.299342;-2.037580;, + 4.529530;-0.354782;-1.475050;, + 4.583130;-0.356729;-2.042090;, + 4.529530;-0.412169;-1.479570;, + 4.529530;-0.354782;-1.475050;, + 4.355310;-0.501494;-1.086660;, + 4.529530;-0.412169;-1.479570;, + 4.355310;-0.558881;-1.091180;, + 4.355310;-0.501494;-1.086660;, + 0.378131;-0.496337;-1.152240;, + 4.355310;-0.558881;-1.091180;, + 0.378131;-0.553724;-1.156760;, + 0.378131;-0.496337;-1.152240;, + 0.013401;-0.353493;-1.491450;, + 0.378131;-0.553724;-1.156760;, + -0.332142;-0.496337;-1.152240;, + -0.332142;-0.553724;-1.156760;, + 0.013401;-0.410880;-1.495960;, + 0.013401;-0.353493;-1.491450;, + -0.332142;-0.496337;-1.152240;, + 0.013401;-0.410880;-1.495960;, + 4.368720;-0.307738;-2.665100;, + 4.583130;-0.356729;-2.042090;, + 0.026802;-0.306449;-2.681500;, + 4.583130;-0.356729;-2.042090;, + 4.529530;-0.412169;-1.479570;, + 0.026802;-0.306449;-2.681500;, + 4.529530;-0.412169;-1.479570;, + 4.355310;-0.558881;-1.091180;, + 4.355310;-0.558881;-1.091180;, + 0.378131;-0.553724;-1.156760;, + 0.378131;-0.553724;-1.156760;, + 0.013401;-0.410880;-1.495960;, + 0.013401;-0.410880;-1.495960;, + -0.332142;-0.553724;-1.156760;, + -4.301710;-0.557592;-1.107570;, + -0.332142;-0.553724;-1.156760;, + -4.301710;-0.557592;-1.107570;, + -4.462520;-0.409591;-1.512360;, + -4.583130;-0.352861;-2.091280;, + -4.368720;-0.307738;-2.665110;, + -4.462520;-0.409591;-1.512360;, + -4.583130;-0.352861;-2.091280;, + 4.583130;-0.299342;-2.037580;, + 4.368720;-0.250351;-2.660590;, + 0.026802;-0.249062;-2.676990;, + 4.529530;-0.354782;-1.475050;, + 4.583130;-0.299342;-2.037580;, + 0.026802;-0.249062;-2.676990;, + 4.355310;-0.501494;-1.086660;, + 4.529530;-0.354782;-1.475050;, + 0.378131;-0.496337;-1.152240;, + 4.355310;-0.501494;-1.086660;, + 0.013401;-0.353493;-1.491450;, + 0.378131;-0.496337;-1.152240;, + -4.583130;-0.295474;-2.086770;, + -4.368720;-0.250351;-2.660590;, + 0.013401;-0.353493;-1.491450;, + -0.332142;-0.496337;-1.152240;, + -0.332142;-0.496337;-1.152240;, + -4.301710;-0.500205;-1.103060;, + -4.583130;-0.295474;-2.086770;, + -4.462520;-0.352204;-1.507840;, + -4.462520;-0.352204;-1.507840;, + -4.301710;-0.500205;-1.103060;; + 88; + 3;0,2,1;, + 3;3,48,49;, + 3;4,5,50;, + 3;51,52,53;, + 3;6,7,54;, + 3;55,56,57;, + 3;8,9,58;, + 3;59,60,61;, + 3;10,11,62;, + 3;63,64,65;, + 3;12,13,66;, + 3;67,68,69;, + 3;14,15,70;, + 3;71,72,73;, + 3;16,17,74;, + 3;75,76,77;, + 3;18,19,78;, + 3;79,80,81;, + 3;20,21,82;, + 3;83,84,85;, + 3;22,23,86;, + 3;87,88,89;, + 3;90,91,92;, + 3;93,94,95;, + 3;96,97,98;, + 3;99,100,101;, + 3;102,103,98;, + 3;104,105,98;, + 3;106,107,98;, + 3;108,109,98;, + 3;110,98,111;, + 3;98,112,113;, + 3;98,114,115;, + 3;98,116,117;, + 3;118,119,120;, + 3;121,122,123;, + 3;124,125,120;, + 3;126,127,120;, + 3;128,129,120;, + 3;130,120,131;, + 3;132,120,133;, + 3;134,120,135;, + 3;136,137,120;, + 3;120,138,139;, + 3;24,26,25;, + 3;27,140,141;, + 3;28,29,142;, + 3;143,144,145;, + 3;30,31,146;, + 3;147,148,149;, + 3;32,33,150;, + 3;151,152,153;, + 3;34,35,154;, + 3;155,156,157;, + 3;36,37,158;, + 3;159,160,161;, + 3;38,39,162;, + 3;163,164,165;, + 3;40,41,166;, + 3;167,168,169;, + 3;42,43,170;, + 3;171,172,173;, + 3;44,45,174;, + 3;175,176,177;, + 3;46,47,178;, + 3;179,180,181;, + 3;182,183,184;, + 3;185,186,187;, + 3;188,189,190;, + 3;191,192,193;, + 3;194,195,190;, + 3;196,197,190;, + 3;198,199,190;, + 3;200,201,190;, + 3;202,190,203;, + 3;190,204,205;, + 3;190,206,207;, + 3;190,208,209;, + 3;210,211,212;, + 3;213,214,215;, + 3;216,217,212;, + 3;218,219,212;, + 3;220,221,212;, + 3;222,212,223;, + 3;224,212,225;, + 3;226,212,227;, + 3;228,229,212;, + 3;212,230,231;; + + MeshNormals { + 232; + 0.011949;-0.014367;0.999825;, + 0.011949;-0.014367;0.999825;, + 0.011949;-0.014367;0.999825;, + 0.011949;-0.014367;0.999825;, + -0.927560;-0.005375;0.373635;, + -0.927560;-0.005375;0.373635;, + -0.977521;-0.003025;0.210817;, + -0.977521;-0.003025;0.210817;, + -0.932466;0.005190;-0.361219;, + -0.932466;0.005190;-0.361219;, + -0.003599;0.014540;-0.999888;, + -0.003599;0.014540;-0.999888;, + 0.003643;0.014365;-0.999890;, + 0.003643;0.014365;-0.999890;, + 0.941833;0.004835;-0.336047;, + 0.941833;0.004835;-0.336047;, + 0.995170;-0.001412;0.098160;, + 0.995170;-0.001412;0.098160;, + 0.910404;-0.005943;0.413678;, + 0.910404;-0.005943;0.413678;, + -0.015902;-0.014366;0.999770;, + -0.015902;-0.014366;0.999770;, + -0.677482;-0.010696;0.735462;, + -0.677482;-0.010696;0.735462;, + 0.012429;-0.078342;0.996849;, + 0.012429;-0.078342;0.996849;, + 0.012429;-0.078342;0.996849;, + 0.012427;-0.078513;0.996836;, + -0.932491;-0.028361;0.360079;, + -0.932491;-0.028361;0.360079;, + -0.979166;-0.015909;0.202436;, + -0.979166;-0.015909;0.202436;, + -0.937098;0.027410;-0.347988;, + -0.937098;0.027410;-0.347988;, + -0.003740;0.078346;-0.996919;, + -0.003740;0.078346;-0.996919;, + 0.003789;0.078350;-0.996919;, + 0.003789;0.078350;-0.996919;, + 0.945878;0.025425;-0.323526;, + 0.945878;0.025425;-0.323526;, + 0.995532;-0.007414;0.094129;, + 0.995532;-0.007414;0.094129;, + 0.916339;-0.031439;0.399166;, + 0.916339;-0.031439;0.399166;, + -0.016538;-0.078509;0.996776;, + -0.016538;-0.078509;0.996776;, + -0.691715;-0.056581;0.719950;, + -0.691715;-0.056581;0.719950;, + 0.011949;-0.014367;0.999825;, + 0.011949;-0.014367;0.999825;, + -0.927560;-0.005375;0.373635;, + -0.927559;-0.005369;0.373638;, + -0.927559;-0.005369;0.373638;, + -0.927559;-0.005369;0.373638;, + -0.977521;-0.003025;0.210817;, + -0.977521;-0.003033;0.210816;, + -0.977521;-0.003033;0.210816;, + -0.977521;-0.003033;0.210816;, + -0.932466;0.005190;-0.361219;, + -0.932466;0.005183;-0.361220;, + -0.932466;0.005183;-0.361220;, + -0.932466;0.005183;-0.361220;, + -0.003599;0.014540;-0.999888;, + -0.003596;0.014365;-0.999890;, + -0.003596;0.014365;-0.999890;, + -0.003596;0.014365;-0.999890;, + 0.003643;0.014365;-0.999890;, + 0.003641;0.014540;-0.999888;, + 0.003641;0.014540;-0.999888;, + 0.003641;0.014540;-0.999888;, + 0.941833;0.004835;-0.336047;, + 0.941833;0.004828;-0.336047;, + 0.941833;0.004828;-0.336047;, + 0.941833;0.004828;-0.336047;, + 0.995170;-0.001412;0.098160;, + 0.995170;-0.001412;0.098161;, + 0.995170;-0.001412;0.098161;, + 0.995170;-0.001412;0.098161;, + 0.910404;-0.005943;0.413678;, + 0.910404;-0.005951;0.413677;, + 0.910404;-0.005951;0.413677;, + 0.910404;-0.005951;0.413677;, + -0.015902;-0.014366;0.999770;, + -0.015902;-0.014364;0.999770;, + -0.015902;-0.014364;0.999770;, + -0.015902;-0.014364;0.999770;, + -0.677482;-0.010696;0.735462;, + -0.677450;-0.010568;0.735493;, + -0.677450;-0.010568;0.735493;, + -0.677450;-0.010568;0.735493;, + 0.697055;-0.010302;0.716943;, + 0.697055;-0.010302;0.716943;, + 0.697055;-0.010302;0.716943;, + 0.697066;-0.010427;0.716931;, + 0.697066;-0.010427;0.716931;, + 0.697066;-0.010427;0.716931;, + -0.000000;-0.999896;-0.014411;, + -0.000000;-0.999896;-0.014411;, + -0.000020;-0.995155;-0.098319;, + 0.002640;-0.999421;-0.033915;, + 0.002640;-0.999421;-0.033915;, + 0.002640;-0.999421;-0.033915;, + 0.062636;-0.961952;-0.265941;, + 0.062636;-0.961952;-0.265941;, + 0.001312;-0.995296;-0.096874;, + 0.001312;-0.995296;-0.096874;, + -0.281605;-0.959175;-0.026133;, + -0.281605;-0.959175;-0.026133;, + 0.301962;-0.953128;-0.019154;, + 0.301962;-0.953128;-0.019154;, + -0.000985;-0.995303;-0.096803;, + -0.000985;-0.995303;-0.096803;, + -0.059505;-0.963815;-0.259846;, + -0.059505;-0.963815;-0.259846;, + 0.000000;-0.999896;-0.014423;, + 0.000000;-0.999896;-0.014423;, + -0.002308;-0.999449;-0.033106;, + -0.002308;-0.999449;-0.033106;, + -0.000000;0.999896;0.014413;, + -0.000000;0.999896;0.014413;, + 0.000021;0.995155;0.098314;, + -0.002640;0.999421;0.033908;, + -0.002640;0.999421;0.033908;, + -0.002640;0.999421;0.033908;, + -0.062635;0.961954;0.265933;, + -0.062635;0.961954;0.265933;, + -0.001312;0.995296;0.096869;, + -0.001312;0.995296;0.096869;, + 0.281602;0.959175;0.026129;, + 0.281602;0.959175;0.026129;, + 0.000000;0.999896;0.014408;, + 0.000000;0.999896;0.014408;, + -0.301959;0.953129;0.019149;, + -0.301959;0.953129;0.019149;, + 0.000985;0.995304;0.096797;, + 0.000985;0.995304;0.096797;, + 0.002311;0.999449;0.033114;, + 0.002311;0.999449;0.033114;, + 0.059504;0.963816;0.259842;, + 0.059504;0.963816;0.259842;, + 0.012427;-0.078513;0.996836;, + 0.012427;-0.078513;0.996836;, + -0.932491;-0.028361;0.360079;, + -0.932482;-0.028301;0.360106;, + -0.932482;-0.028301;0.360106;, + -0.932482;-0.028301;0.360106;, + -0.979166;-0.015909;0.202436;, + -0.979167;-0.015944;0.202430;, + -0.979167;-0.015944;0.202430;, + -0.979167;-0.015944;0.202430;, + -0.937098;0.027410;-0.347988;, + -0.937096;0.027348;-0.347999;, + -0.937096;0.027348;-0.347999;, + -0.937096;0.027348;-0.347999;, + -0.003740;0.078346;-0.996919;, + -0.003743;0.078523;-0.996905;, + -0.003743;0.078523;-0.996905;, + -0.003743;0.078523;-0.996905;, + 0.003789;0.078350;-0.996919;, + 0.003789;0.078346;-0.996919;, + 0.003789;0.078346;-0.996919;, + 0.003789;0.078346;-0.996919;, + 0.945878;0.025425;-0.323526;, + 0.945878;0.025427;-0.323526;, + 0.945878;0.025427;-0.323526;, + 0.945878;0.025427;-0.323526;, + 0.995532;-0.007414;0.094129;, + 0.995533;-0.007397;0.094129;, + 0.995533;-0.007397;0.094129;, + 0.995533;-0.007397;0.094129;, + 0.916339;-0.031439;0.399166;, + 0.916339;-0.031440;0.399166;, + 0.916339;-0.031440;0.399166;, + 0.916339;-0.031440;0.399166;, + -0.016538;-0.078509;0.996776;, + -0.016538;-0.078509;0.996776;, + -0.016538;-0.078509;0.996776;, + -0.016538;-0.078509;0.996776;, + -0.691715;-0.056581;0.719950;, + -0.691746;-0.056702;0.719911;, + -0.691746;-0.056702;0.719911;, + -0.691746;-0.056702;0.719911;, + 0.710989;-0.055215;0.701032;, + 0.710989;-0.055215;0.701032;, + 0.710989;-0.055215;0.701032;, + 0.710979;-0.055096;0.701052;, + 0.710979;-0.055096;0.701052;, + 0.710979;-0.055096;0.701052;, + 0.000000;-0.996922;-0.078394;, + 0.000000;-0.996922;-0.078394;, + -0.000021;-0.986820;-0.161823;, + 0.002746;-0.995200;-0.097822;, + 0.002746;-0.995200;-0.097822;, + 0.002746;-0.995200;-0.097822;, + 0.065131;-0.942804;-0.326923;, + 0.065131;-0.942804;-0.326923;, + 0.001365;-0.987053;-0.160390;, + 0.001365;-0.987053;-0.160390;, + -0.291928;-0.952457;-0.087199;, + -0.291928;-0.952457;-0.087199;, + 0.312879;-0.946432;-0.079832;, + 0.312879;-0.946432;-0.079832;, + -0.001025;-0.987065;-0.160319;, + -0.001025;-0.987065;-0.160319;, + -0.061874;-0.945069;-0.320960;, + -0.061874;-0.945069;-0.320960;, + 0.000000;-0.996923;-0.078393;, + 0.000000;-0.996923;-0.078393;, + -0.002403;-0.995279;-0.097030;, + -0.002403;-0.995279;-0.097030;, + -0.000000;0.996922;0.078394;, + -0.000000;0.996922;0.078394;, + 0.000021;0.986820;0.161822;, + -0.002745;0.995200;0.097820;, + -0.002745;0.995200;0.097820;, + -0.002745;0.995200;0.097820;, + -0.065131;0.942804;0.326923;, + -0.065131;0.942804;0.326923;, + -0.001365;0.987053;0.160389;, + -0.001365;0.987053;0.160389;, + 0.291926;0.952458;0.087199;, + 0.291926;0.952458;0.087199;, + 0.000000;0.996922;0.078394;, + 0.000000;0.996922;0.078394;, + -0.312877;0.946433;0.079832;, + -0.312877;0.946433;0.079832;, + 0.001024;0.987065;0.160318;, + 0.001024;0.987065;0.160318;, + 0.002402;0.995279;0.097028;, + 0.002402;0.995279;0.097028;, + 0.061876;0.945067;0.320966;, + 0.061876;0.945067;0.320966;; + 88; + 3;0,2,1;, + 3;3,48,49;, + 3;4,5,50;, + 3;51,52,53;, + 3;6,7,54;, + 3;55,56,57;, + 3;8,9,58;, + 3;59,60,61;, + 3;10,11,62;, + 3;63,64,65;, + 3;12,13,66;, + 3;67,68,69;, + 3;14,15,70;, + 3;71,72,73;, + 3;16,17,74;, + 3;75,76,77;, + 3;18,19,78;, + 3;79,80,81;, + 3;20,21,82;, + 3;83,84,85;, + 3;22,23,86;, + 3;87,88,89;, + 3;90,91,92;, + 3;93,94,95;, + 3;96,97,98;, + 3;99,100,101;, + 3;102,103,98;, + 3;104,105,98;, + 3;106,107,98;, + 3;108,109,98;, + 3;110,98,111;, + 3;98,112,113;, + 3;98,114,115;, + 3;98,116,117;, + 3;118,119,120;, + 3;121,122,123;, + 3;124,125,120;, + 3;126,127,120;, + 3;128,129,120;, + 3;130,120,131;, + 3;132,120,133;, + 3;134,120,135;, + 3;136,137,120;, + 3;120,138,139;, + 3;24,26,25;, + 3;27,140,141;, + 3;28,29,142;, + 3;143,144,145;, + 3;30,31,146;, + 3;147,148,149;, + 3;32,33,150;, + 3;151,152,153;, + 3;34,35,154;, + 3;155,156,157;, + 3;36,37,158;, + 3;159,160,161;, + 3;38,39,162;, + 3;163,164,165;, + 3;40,41,166;, + 3;167,168,169;, + 3;42,43,170;, + 3;171,172,173;, + 3;44,45,174;, + 3;175,176,177;, + 3;46,47,178;, + 3;179,180,181;, + 3;182,183,184;, + 3;185,186,187;, + 3;188,189,190;, + 3;191,192,193;, + 3;194,195,190;, + 3;196,197,190;, + 3;198,199,190;, + 3;200,201,190;, + 3;202,190,203;, + 3;190,204,205;, + 3;190,206,207;, + 3;190,208,209;, + 3;210,211,212;, + 3;213,214,215;, + 3;216,217,212;, + 3;218,219,212;, + 3;220,221,212;, + 3;222,212,223;, + 3;224,212,225;, + 3;226,212,227;, + 3;228,229,212;, + 3;212,230,231;; + } + + MeshTextureCoords { + 232; + 0.030702;-0.010231;, + 0.463765;-0.041427;, + 0.030702;-0.010746;, + 0.463765;-0.040913;, + 0.013159;-0.267384;, + 0.013159;-0.267899;, + 0.000000;-0.628997;, + 0.000000;-0.629511;, + 0.023393;-0.986988;, + 0.023393;-0.987503;, + 0.502924;-0.997213;, + 0.502924;-0.997734;, + 0.976607;-0.986988;, + 0.976607;-0.987503;, + 1.000000;-0.598315;, + 1.000000;-0.598830;, + 0.994152;-0.246928;, + 0.994152;-0.247442;, + 0.975146;0.000000;, + 0.975146;-0.000514;, + 0.541252;-0.040913;, + 0.541252;-0.041427;, + 0.501462;-0.257153;, + 0.501462;-0.257674;, + 0.048752;-0.018199;, + 0.465158;-0.051600;, + 0.048752;-0.021004;, + 0.465158;-0.048789;, + 0.031883;-0.269975;, + 0.031883;-0.272786;, + 0.019231;-0.630073;, + 0.019231;-0.632879;, + 0.041723;-0.986994;, + 0.041723;-0.989805;, + 0.502812;-0.997195;, + 0.502812;-1.000000;, + 0.958277;-0.986994;, + 0.958277;-0.989799;, + 0.980769;-0.599477;, + 0.980769;-0.602282;, + 0.975146;-0.249579;, + 0.975146;-0.252391;, + 0.956871;-0.007998;, + 0.956871;-0.010809;, + 0.539666;-0.048789;, + 0.539666;-0.051600;, + 0.501406;-0.259780;, + 0.501406;-0.262585;, + 0.030702;-0.010231;, + 0.463765;-0.041427;, + 0.030702;-0.010746;, + 0.030702;-0.010231;, + 0.013159;-0.267384;, + 0.030702;-0.010746;, + 0.013159;-0.267899;, + 0.013159;-0.267384;, + 0.000000;-0.628997;, + 0.013159;-0.267899;, + 0.000000;-0.629511;, + 0.000000;-0.628997;, + 0.023393;-0.986988;, + 0.000000;-0.629511;, + 0.023393;-0.987503;, + 0.023393;-0.986988;, + 0.502924;-0.997213;, + 0.023393;-0.987503;, + 0.502924;-0.997734;, + 0.502924;-0.997213;, + 0.976607;-0.986988;, + 0.502924;-0.997734;, + 0.976607;-0.987503;, + 0.976607;-0.986988;, + 1.000000;-0.598315;, + 0.976607;-0.987503;, + 1.000000;-0.598830;, + 1.000000;-0.598315;, + 0.994152;-0.246928;, + 1.000000;-0.598830;, + 0.994152;-0.247442;, + 0.994152;-0.246928;, + 0.975146;0.000000;, + 0.994152;-0.247442;, + 0.975146;-0.000514;, + 0.975146;0.000000;, + 0.541252;-0.040913;, + 0.975146;-0.000514;, + 0.541252;-0.041427;, + 0.541252;-0.040913;, + 0.501462;-0.257153;, + 0.541252;-0.041427;, + 0.463765;-0.040913;, + 0.463765;-0.041427;, + 0.501462;-0.257674;, + 0.501462;-0.257153;, + 0.463765;-0.040913;, + 0.501462;-0.257674;, + 0.976607;-0.987503;, + 1.000000;-0.598830;, + 0.502924;-0.997734;, + 1.000000;-0.598830;, + 0.994152;-0.247442;, + 0.502924;-0.997734;, + 0.994152;-0.247442;, + 0.975146;-0.000514;, + 0.975146;-0.000514;, + 0.541252;-0.041427;, + 0.541252;-0.041427;, + 0.501462;-0.257674;, + 0.501462;-0.257674;, + 0.463765;-0.041427;, + 0.030702;-0.010746;, + 0.463765;-0.041427;, + 0.030702;-0.010746;, + 0.013159;-0.267899;, + 0.000000;-0.629511;, + 0.023393;-0.987503;, + 0.013159;-0.267899;, + 0.000000;-0.629511;, + 1.000000;-0.598315;, + 0.976607;-0.986988;, + 0.502924;-0.997213;, + 0.994152;-0.246928;, + 1.000000;-0.598315;, + 0.502924;-0.997213;, + 0.975146;0.000000;, + 0.994152;-0.246928;, + 0.541252;-0.040913;, + 0.975146;0.000000;, + 0.501462;-0.257153;, + 0.541252;-0.040913;, + 0.000000;-0.628997;, + 0.023393;-0.986988;, + 0.501462;-0.257153;, + 0.463765;-0.040913;, + 0.463765;-0.040913;, + 0.030702;-0.010231;, + 0.000000;-0.628997;, + 0.013159;-0.267384;, + 0.013159;-0.267384;, + 0.030702;-0.010231;, + 0.048752;-0.018199;, + 0.465158;-0.051600;, + 0.048752;-0.021004;, + 0.048752;-0.018199;, + 0.031883;-0.269975;, + 0.048752;-0.021004;, + 0.031883;-0.272786;, + 0.031883;-0.269975;, + 0.019231;-0.630073;, + 0.031883;-0.272786;, + 0.019231;-0.632879;, + 0.019231;-0.630073;, + 0.041723;-0.986994;, + 0.019231;-0.632879;, + 0.041723;-0.989805;, + 0.041723;-0.986994;, + 0.502812;-0.997195;, + 0.041723;-0.989805;, + 0.502812;-1.000000;, + 0.502812;-0.997195;, + 0.958277;-0.986994;, + 0.502812;-1.000000;, + 0.958277;-0.989799;, + 0.958277;-0.986994;, + 0.980769;-0.599477;, + 0.958277;-0.989799;, + 0.980769;-0.602282;, + 0.980769;-0.599477;, + 0.975146;-0.249579;, + 0.980769;-0.602282;, + 0.975146;-0.252391;, + 0.975146;-0.249579;, + 0.956871;-0.007998;, + 0.975146;-0.252391;, + 0.956871;-0.010809;, + 0.956871;-0.007998;, + 0.539666;-0.048789;, + 0.956871;-0.010809;, + 0.539666;-0.051600;, + 0.539666;-0.048789;, + 0.501406;-0.259780;, + 0.539666;-0.051600;, + 0.465158;-0.048789;, + 0.465158;-0.051600;, + 0.501406;-0.262585;, + 0.501406;-0.259780;, + 0.465158;-0.048789;, + 0.501406;-0.262585;, + 0.958277;-0.989799;, + 0.980769;-0.602282;, + 0.502812;-1.000000;, + 0.980769;-0.602282;, + 0.975146;-0.252391;, + 0.502812;-1.000000;, + 0.975146;-0.252391;, + 0.956871;-0.010809;, + 0.956871;-0.010809;, + 0.539666;-0.051600;, + 0.539666;-0.051600;, + 0.501406;-0.262585;, + 0.501406;-0.262585;, + 0.465158;-0.051600;, + 0.048752;-0.021004;, + 0.465158;-0.051600;, + 0.048752;-0.021004;, + 0.031883;-0.272786;, + 0.019231;-0.632879;, + 0.041723;-0.989805;, + 0.031883;-0.272786;, + 0.019231;-0.632879;, + 0.980769;-0.599477;, + 0.958277;-0.986994;, + 0.502812;-0.997195;, + 0.975146;-0.249579;, + 0.980769;-0.599477;, + 0.502812;-0.997195;, + 0.956871;-0.007998;, + 0.975146;-0.249579;, + 0.539666;-0.048789;, + 0.956871;-0.007998;, + 0.501406;-0.259780;, + 0.539666;-0.048789;, + 0.019231;-0.630073;, + 0.041723;-0.986994;, + 0.501406;-0.259780;, + 0.465158;-0.048789;, + 0.465158;-0.048789;, + 0.048752;-0.018199;, + 0.019231;-0.630073;, + 0.031883;-0.269975;, + 0.031883;-0.269975;, + 0.048752;-0.018199;; + } + + MeshMaterialList { + 1; + 88; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0; + + Material { + 0.800000;0.800000;0.800000;0.000000;; + 0.000000; + 0.000000;0.000000;0.000000;; + 0.000000;0.000000;0.000000;; + + TextureFilename { + "wings.bmp"; + } + } + } + + VertexDuplicationIndices { + 232; + 48; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 0, + 1, + 2, + 0, + 4, + 2, + 5, + 4, + 6, + 5, + 7, + 6, + 8, + 7, + 9, + 8, + 10, + 9, + 11, + 10, + 12, + 11, + 13, + 12, + 14, + 13, + 15, + 14, + 16, + 15, + 17, + 16, + 18, + 17, + 19, + 18, + 20, + 19, + 21, + 20, + 22, + 21, + 3, + 1, + 23, + 22, + 3, + 23, + 13, + 15, + 11, + 15, + 17, + 11, + 17, + 19, + 19, + 21, + 21, + 23, + 23, + 1, + 2, + 1, + 2, + 5, + 7, + 9, + 5, + 7, + 14, + 12, + 10, + 16, + 14, + 10, + 18, + 16, + 20, + 18, + 22, + 20, + 6, + 8, + 22, + 3, + 3, + 0, + 6, + 4, + 4, + 0, + 24, + 25, + 26, + 24, + 28, + 26, + 29, + 28, + 30, + 29, + 31, + 30, + 32, + 31, + 33, + 32, + 34, + 33, + 35, + 34, + 36, + 35, + 37, + 36, + 38, + 37, + 39, + 38, + 40, + 39, + 41, + 40, + 42, + 41, + 43, + 42, + 44, + 43, + 45, + 44, + 46, + 45, + 27, + 25, + 47, + 46, + 27, + 47, + 37, + 39, + 35, + 39, + 41, + 35, + 41, + 43, + 43, + 45, + 45, + 47, + 47, + 25, + 26, + 25, + 26, + 29, + 31, + 33, + 29, + 31, + 38, + 36, + 34, + 40, + 38, + 34, + 42, + 40, + 44, + 42, + 46, + 44, + 30, + 32, + 46, + 27, + 27, + 24, + 30, + 28, + 28, + 24; + } + } + } + + Frame elevator { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; + } + + Mesh { + 130; + -0.128434;-0.037724;3.371460;, + -0.066407;-0.031770;2.810290;, + -0.128434;-0.094919;3.364950;, + -0.066407;0.025424;2.816800;, + -0.397218;-0.084501;3.782320;, + -0.397218;-0.141695;3.775810;, + -1.197060;-0.086840;3.802860;, + -1.197060;-0.144034;3.796350;, + -1.548550;-0.035385;3.350910;, + -1.548550;-0.092580;3.344400;, + -1.569220;0.002036;3.022230;, + -1.569220;-0.055158;3.015720;, + -1.321120;0.044135;2.652450;, + -1.321120;-0.013059;2.645940;, + -0.831407;0.088573;2.262140;, + -0.831407;0.031378;2.255630;, + -0.045731;0.142366;1.789650;, + -0.045731;0.085171;1.783140;, + 0.164738;-0.037724;3.371460;, + 0.164738;-0.094919;3.364950;, + 0.102711;-0.031770;2.810290;, + 0.102711;0.025424;2.816800;, + 0.433521;-0.084501;3.782320;, + 0.433521;-0.141695;3.775810;, + 1.233360;-0.086840;3.802860;, + 1.233360;-0.144034;3.796350;, + 1.584850;-0.035385;3.350920;, + 1.584850;-0.092580;3.344400;, + 1.605530;0.002036;3.022230;, + 1.605530;-0.055158;3.015720;, + 1.357420;0.044135;2.652450;, + 1.357420;-0.013059;2.645940;, + 0.867711;0.088573;2.262140;, + 0.867711;0.031378;2.255630;, + 0.082035;0.142366;1.789650;, + 0.082035;0.085171;1.783140;, + -0.397218;-0.141695;3.775810;, + -0.397218;-0.084501;3.782320;, + -0.397218;-0.141695;3.775810;, + -1.197060;-0.144034;3.796350;, + -1.197060;-0.086840;3.802860;, + -1.197060;-0.144034;3.796350;, + -1.548550;-0.092580;3.344400;, + -1.548550;-0.035385;3.350910;, + -1.548550;-0.092580;3.344400;, + -1.569220;-0.055158;3.015720;, + -1.569220;0.002036;3.022230;, + -1.569220;-0.055158;3.015720;, + -0.045731;0.085171;1.783140;, + -0.045731;0.142366;1.789650;, + -0.045731;0.085171;1.783140;, + -0.045731;0.085171;1.783140;, + -0.066407;-0.031770;2.810290;, + -0.831407;0.031378;2.255630;, + -0.831407;0.031378;2.255630;, + -0.066407;-0.031770;2.810290;, + -1.321120;-0.013059;2.645940;, + -0.128434;-0.094919;3.364950;, + -1.321120;-0.013059;2.645940;, + -0.128434;-0.094919;3.364950;, + -1.569220;-0.055158;3.015720;, + -1.569220;-0.055158;3.015720;, + -1.548550;-0.092580;3.344400;, + -1.548550;-0.092580;3.344400;, + -1.197060;-0.144034;3.796350;, + -1.197060;-0.144034;3.796350;, + -0.397218;-0.141695;3.775810;, + -0.066407;0.025424;2.816800;, + -0.045731;0.142366;1.789650;, + -0.831407;0.088573;2.262140;, + -0.066407;0.025424;2.816800;, + -0.831407;0.088573;2.262140;, + -1.321120;0.044135;2.652450;, + -0.128434;-0.037724;3.371460;, + -1.321120;0.044135;2.652450;, + -0.128434;-0.037724;3.371460;, + -1.569220;0.002036;3.022230;, + -1.569220;0.002036;3.022230;, + -1.548550;-0.035385;3.350910;, + -1.548550;-0.035385;3.350910;, + -1.197060;-0.086840;3.802860;, + -1.197060;-0.086840;3.802860;, + -0.397218;-0.084501;3.782320;, + 0.433521;-0.141695;3.775810;, + 0.433521;-0.084501;3.782320;, + 0.433521;-0.141695;3.775810;, + 1.233360;-0.144034;3.796350;, + 1.233360;-0.086840;3.802860;, + 1.233360;-0.144034;3.796350;, + 1.584850;-0.092580;3.344400;, + 1.584850;-0.035385;3.350920;, + 1.584850;-0.092580;3.344400;, + 1.605530;-0.055158;3.015720;, + 1.605530;0.002036;3.022230;, + 1.605530;-0.055158;3.015720;, + 0.082035;0.085171;1.783140;, + 0.082035;0.142366;1.789650;, + 0.082035;0.085171;1.783140;, + 0.082035;0.085171;1.783140;, + 0.867711;0.031378;2.255630;, + 0.102711;-0.031770;2.810290;, + 0.867711;0.031378;2.255630;, + 1.357420;-0.013059;2.645940;, + 0.102711;-0.031770;2.810290;, + 1.357420;-0.013059;2.645940;, + 0.164738;-0.094919;3.364950;, + 1.605530;-0.055158;3.015720;, + 0.164738;-0.094919;3.364950;, + 1.605530;-0.055158;3.015720;, + 1.584850;-0.092580;3.344400;, + 1.584850;-0.092580;3.344400;, + 1.233360;-0.144034;3.796350;, + 1.233360;-0.144034;3.796350;, + 0.433521;-0.141695;3.775810;, + 0.102711;0.025424;2.816800;, + 0.867711;0.088573;2.262140;, + 0.082035;0.142366;1.789650;, + 0.102711;0.025424;2.816800;, + 1.357420;0.044135;2.652450;, + 0.867711;0.088573;2.262140;, + 0.164738;-0.037724;3.371460;, + 1.357420;0.044135;2.652450;, + 0.164738;-0.037724;3.371460;, + 1.605530;0.002036;3.022230;, + 1.584850;-0.035385;3.350920;, + 1.605530;0.002036;3.022230;, + 1.233360;-0.086840;3.802860;, + 1.584850;-0.035385;3.350920;, + 0.433521;-0.084501;3.782320;, + 1.233360;-0.086840;3.802860;; + 64; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,2;, + 3;0,4,2;, + 3;6,7,36;, + 3;37,6,38;, + 3;8,9,39;, + 3;40,8,41;, + 3;10,11,42;, + 3;43,10,44;, + 3;12,13,45;, + 3;46,12,47;, + 3;14,15,13;, + 3;12,14,13;, + 3;16,17,15;, + 3;14,16,15;, + 3;3,1,48;, + 3;49,3,50;, + 3;51,52,53;, + 3;54,55,56;, + 3;52,57,58;, + 3;56,59,60;, + 3;61,57,62;, + 3;63,57,64;, + 3;65,57,66;, + 3;67,68,69;, + 3;70,71,72;, + 3;73,67,74;, + 3;75,72,76;, + 3;73,77,78;, + 3;73,79,80;, + 3;73,81,82;, + 3;18,20,19;, + 3;21,20,18;, + 3;22,19,23;, + 3;18,19,22;, + 3;24,83,25;, + 3;84,85,24;, + 3;26,86,27;, + 3;87,88,26;, + 3;28,89,29;, + 3;90,91,28;, + 3;30,92,31;, + 3;93,94,30;, + 3;32,31,33;, + 3;30,31,32;, + 3;34,33,35;, + 3;32,33,34;, + 3;21,95,20;, + 3;96,97,21;, + 3;98,99,100;, + 3;101,102,103;, + 3;100,104,105;, + 3;102,106,107;, + 3;108,109,105;, + 3;110,111,105;, + 3;112,113,105;, + 3;114,115,116;, + 3;117,118,119;, + 3;120,121,114;, + 3;122,123,118;, + 3;120,124,125;, + 3;120,126,127;, + 3;120,128,129;; + + MeshNormals { + 130; + 0.968583;-0.028125;0.247096;, + 0.997742;-0.007595;0.066725;, + 0.917723;-0.044923;0.394674;, + 0.999226;-0.004449;0.039087;, + 0.838444;-0.061634;0.541492;, + 0.838444;-0.061634;0.541492;, + 0.025837;-0.113055;0.993253;, + 0.025837;-0.113055;0.993253;, + -0.791285;-0.069150;0.607525;, + -0.791285;-0.069149;0.607525;, + -0.998053;-0.007053;0.061962;, + -0.998053;-0.007053;0.061962;, + -0.755569;0.074084;-0.650867;, + -0.686154;0.082270;-0.722790;, + -0.581366;0.092016;-0.808422;, + -0.546195;0.094732;-0.832284;, + -0.517804;0.096749;-0.850011;, + -0.517804;0.096749;-0.850011;, + -0.968583;-0.028125;0.247095;, + -0.917723;-0.044923;0.394673;, + -0.997742;-0.007595;0.066725;, + -0.999226;-0.004449;0.039087;, + -0.838445;-0.061634;0.541490;, + -0.838445;-0.061634;0.541490;, + -0.025838;-0.113055;0.993253;, + -0.025838;-0.113055;0.993253;, + 0.791282;-0.069203;0.607523;, + 0.791285;-0.069254;0.607513;, + 0.998052;-0.007061;0.061991;, + 0.998052;-0.007056;0.061993;, + 0.755563;0.074085;-0.650873;, + 0.686153;0.082270;-0.722790;, + 0.581367;0.092016;-0.808421;, + 0.546195;0.094732;-0.832284;, + 0.517804;0.096749;-0.850011;, + 0.517804;0.096749;-0.850011;, + 0.025837;-0.113055;0.993253;, + 0.025837;-0.113055;0.993253;, + 0.025837;-0.113055;0.993253;, + -0.791285;-0.069149;0.607525;, + -0.791285;-0.069151;0.607524;, + -0.791285;-0.069151;0.607524;, + -0.998053;-0.007053;0.061962;, + -0.998053;-0.007053;0.061962;, + -0.998053;-0.007053;0.061962;, + -0.832063;0.062731;-0.551122;, + -0.832063;0.062731;-0.551122;, + -0.832063;0.062731;-0.551122;, + 0.999800;-0.002261;0.019868;, + 0.999800;-0.002261;0.019868;, + 0.999800;-0.002261;0.019868;, + 0.000000;-0.993581;-0.113119;, + 0.000000;-0.993581;-0.113120;, + 0.000000;-0.993581;-0.113119;, + 0.000000;-0.993581;-0.113119;, + 0.000000;-0.993581;-0.113119;, + -0.000000;-0.993581;-0.113119;, + 0.000000;-0.993581;-0.113121;, + 0.000000;-0.993581;-0.113121;, + -0.000001;-0.993581;-0.113119;, + -0.000001;-0.993581;-0.113119;, + 0.000001;-0.993581;-0.113125;, + 0.000001;-0.993581;-0.113125;, + 0.000000;-0.993581;-0.113118;, + 0.000000;-0.993581;-0.113118;, + 0.000001;-0.993582;-0.113118;, + 0.000001;-0.993582;-0.113118;, + 0.000000;0.993581;0.113120;, + 0.000001;0.993581;0.113120;, + 0.000001;0.993581;0.113120;, + -0.000001;0.993581;0.113122;, + -0.000001;0.993581;0.113122;, + -0.000000;0.993581;0.113120;, + -0.000000;0.993581;0.113120;, + -0.000000;0.993581;0.113119;, + 0.000000;0.993582;0.113118;, + 0.000000;0.993582;0.113118;, + -0.000000;0.993581;0.113122;, + -0.000000;0.993581;0.113122;, + -0.000000;0.993581;0.113121;, + -0.000000;0.993581;0.113121;, + -0.000001;0.993581;0.113120;, + -0.000001;0.993581;0.113120;, + -0.025838;-0.113055;0.993253;, + -0.025838;-0.113055;0.993253;, + -0.025838;-0.113055;0.993253;, + 0.791285;-0.069254;0.607513;, + 0.791279;-0.069151;0.607533;, + 0.791279;-0.069151;0.607533;, + 0.998052;-0.007056;0.061993;, + 0.998052;-0.007067;0.061990;, + 0.998052;-0.007067;0.061990;, + 0.832053;0.062732;-0.551138;, + 0.832053;0.062732;-0.551138;, + 0.832053;0.062732;-0.551138;, + -0.999800;-0.002261;0.019868;, + -0.999800;-0.002261;0.019868;, + -0.999800;-0.002261;0.019868;, + -0.000000;-0.993581;-0.113119;, + -0.000000;-0.993581;-0.113119;, + -0.000000;-0.993581;-0.113120;, + -0.000000;-0.993581;-0.113119;, + 0.000000;-0.993581;-0.113119;, + -0.000000;-0.993581;-0.113119;, + -0.000000;-0.993581;-0.113121;, + -0.000000;-0.993581;-0.113121;, + 0.000001;-0.993581;-0.113119;, + 0.000001;-0.993581;-0.113119;, + -0.000001;-0.993581;-0.113125;, + -0.000001;-0.993581;-0.113125;, + -0.000000;-0.993581;-0.113118;, + -0.000000;-0.993581;-0.113118;, + -0.000001;-0.993582;-0.113118;, + -0.000001;-0.993582;-0.113118;, + -0.000000;0.993581;0.113120;, + -0.000001;0.993581;0.113120;, + -0.000001;0.993581;0.113120;, + 0.000001;0.993581;0.113122;, + 0.000000;0.993581;0.113120;, + 0.000001;0.993581;0.113122;, + -0.000000;0.993581;0.113120;, + 0.000000;0.993581;0.113119;, + -0.000000;0.993582;0.113118;, + -0.000000;0.993582;0.113118;, + -0.000000;0.993582;0.113118;, + -0.000000;0.993582;0.113118;, + -0.000000;0.993581;0.113123;, + -0.000000;0.993581;0.113123;, + 0.000001;0.993581;0.113120;, + 0.000001;0.993581;0.113120;; + 64; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,2;, + 3;0,4,2;, + 3;6,7,36;, + 3;37,6,38;, + 3;8,9,39;, + 3;40,8,41;, + 3;10,11,42;, + 3;43,10,44;, + 3;12,13,45;, + 3;46,12,47;, + 3;14,15,13;, + 3;12,14,13;, + 3;16,17,15;, + 3;14,16,15;, + 3;3,1,48;, + 3;49,3,50;, + 3;51,52,53;, + 3;54,55,56;, + 3;52,57,58;, + 3;56,59,60;, + 3;61,57,62;, + 3;63,57,64;, + 3;65,57,66;, + 3;67,68,69;, + 3;70,71,72;, + 3;73,67,74;, + 3;75,72,76;, + 3;73,77,78;, + 3;73,79,80;, + 3;73,81,82;, + 3;18,20,19;, + 3;21,20,18;, + 3;22,19,23;, + 3;18,19,22;, + 3;24,83,25;, + 3;84,85,24;, + 3;26,86,27;, + 3;87,88,26;, + 3;28,89,29;, + 3;90,91,28;, + 3;30,92,31;, + 3;93,94,30;, + 3;32,31,33;, + 3;30,31,32;, + 3;34,33,35;, + 3;32,33,34;, + 3;21,95,20;, + 3;96,97,21;, + 3;98,99,100;, + 3;101,102,103;, + 3;100,104,105;, + 3;102,106,107;, + 3;108,109,105;, + 3;110,111,105;, + 3;112,113,105;, + 3;114,115,116;, + 3;117,118,119;, + 3;120,121,114;, + 3;122,123,118;, + 3;120,124,125;, + 3;120,126,127;, + 3;120,128,129;; + } + + MeshTextureCoords { + 130; + 0.728944;-0.039637;, + 0.735880;-0.078113;, + 0.728944;-0.040083;, + 0.735880;-0.077667;, + 0.698889;-0.011466;, + 0.698889;-0.011913;, + 0.609451;-0.010058;, + 0.609451;-0.010504;, + 0.570147;-0.041046;, + 0.570147;-0.041492;, + 0.567836;-0.063581;, + 0.567836;-0.064028;, + 0.595578;-0.088935;, + 0.595578;-0.089381;, + 0.650338;-0.115697;, + 0.650338;-0.116143;, + 0.738192;-0.148093;, + 0.738192;-0.148539;, + 0.761727;-0.039637;, + 0.761727;-0.040083;, + 0.754791;-0.078113;, + 0.754791;-0.077667;, + 0.791782;-0.011466;, + 0.791782;-0.011913;, + 0.881220;-0.010058;, + 0.881220;-0.010504;, + 0.920524;-0.041045;, + 0.920524;-0.041492;, + 0.922836;-0.063581;, + 0.922836;-0.064028;, + 0.895092;-0.088935;, + 0.895092;-0.089381;, + 0.840333;-0.115697;, + 0.840333;-0.116143;, + 0.752479;-0.148093;, + 0.752479;-0.148539;, + 0.698889;-0.011913;, + 0.698889;-0.011466;, + 0.698889;-0.011913;, + 0.609451;-0.010504;, + 0.609451;-0.010058;, + 0.609451;-0.010504;, + 0.570147;-0.041492;, + 0.570147;-0.041046;, + 0.570147;-0.041492;, + 0.567836;-0.064028;, + 0.567836;-0.063581;, + 0.567836;-0.064028;, + 0.738192;-0.148539;, + 0.738192;-0.148093;, + 0.738192;-0.148539;, + 0.738192;-0.148539;, + 0.735880;-0.078113;, + 0.650338;-0.116143;, + 0.650338;-0.116143;, + 0.735880;-0.078113;, + 0.595578;-0.089381;, + 0.728944;-0.040083;, + 0.595578;-0.089381;, + 0.728944;-0.040083;, + 0.567836;-0.064028;, + 0.567836;-0.064028;, + 0.570147;-0.041492;, + 0.570147;-0.041492;, + 0.609451;-0.010504;, + 0.609451;-0.010504;, + 0.698889;-0.011913;, + 0.735880;-0.077667;, + 0.738192;-0.148093;, + 0.650338;-0.115697;, + 0.735880;-0.077667;, + 0.650338;-0.115697;, + 0.595578;-0.088935;, + 0.728944;-0.039637;, + 0.595578;-0.088935;, + 0.728944;-0.039637;, + 0.567836;-0.063581;, + 0.567836;-0.063581;, + 0.570147;-0.041046;, + 0.570147;-0.041046;, + 0.609451;-0.010058;, + 0.609451;-0.010058;, + 0.698889;-0.011466;, + 0.791782;-0.011913;, + 0.791782;-0.011466;, + 0.791782;-0.011913;, + 0.881220;-0.010504;, + 0.881220;-0.010058;, + 0.881220;-0.010504;, + 0.920524;-0.041492;, + 0.920524;-0.041045;, + 0.920524;-0.041492;, + 0.922836;-0.064028;, + 0.922836;-0.063581;, + 0.922836;-0.064028;, + 0.752479;-0.148539;, + 0.752479;-0.148093;, + 0.752479;-0.148539;, + 0.752479;-0.148539;, + 0.840333;-0.116143;, + 0.754791;-0.078113;, + 0.840333;-0.116143;, + 0.895092;-0.089381;, + 0.754791;-0.078113;, + 0.895092;-0.089381;, + 0.761727;-0.040083;, + 0.922836;-0.064028;, + 0.761727;-0.040083;, + 0.922836;-0.064028;, + 0.920524;-0.041492;, + 0.920524;-0.041492;, + 0.881220;-0.010504;, + 0.881220;-0.010504;, + 0.791782;-0.011913;, + 0.754791;-0.077667;, + 0.840333;-0.115697;, + 0.752479;-0.148093;, + 0.754791;-0.077667;, + 0.895092;-0.088935;, + 0.840333;-0.115697;, + 0.761727;-0.039637;, + 0.895092;-0.088935;, + 0.761727;-0.039637;, + 0.922836;-0.063581;, + 0.920524;-0.041045;, + 0.922836;-0.063581;, + 0.881220;-0.010058;, + 0.920524;-0.041045;, + 0.791782;-0.011466;, + 0.881220;-0.010058;; + } + + MeshMaterialList { + 1; + 64; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0; + + Material { + 0.800000;0.800000;0.800000;0.000000;; + 0.000000; + 0.000000;0.000000;0.000000;; + 0.000000;0.000000;0.000000;; + + TextureFilename { + "bihull.bmp"; + } + } + } + + VertexDuplicationIndices { + 130; + 36; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 5, + 4, + 5, + 7, + 6, + 7, + 9, + 8, + 9, + 11, + 10, + 11, + 17, + 16, + 17, + 17, + 1, + 15, + 15, + 1, + 13, + 2, + 13, + 2, + 11, + 11, + 9, + 9, + 7, + 7, + 5, + 3, + 16, + 14, + 3, + 14, + 12, + 0, + 12, + 0, + 10, + 10, + 8, + 8, + 6, + 6, + 4, + 23, + 22, + 23, + 25, + 24, + 25, + 27, + 26, + 27, + 29, + 28, + 29, + 35, + 34, + 35, + 35, + 33, + 20, + 33, + 31, + 20, + 31, + 19, + 29, + 19, + 29, + 27, + 27, + 25, + 25, + 23, + 21, + 32, + 34, + 21, + 30, + 32, + 18, + 30, + 18, + 28, + 26, + 28, + 24, + 26, + 22, + 24; + } + } + } + + Frame landing_ge { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; + } + + Mesh { + 115; + -0.332232;-0.839157;-2.205240;, + -0.301452;-0.399248;-1.389050;, + -0.466850;-0.782954;-2.205250;, + -0.166834;-0.455451;-1.389050;, + -0.118593;-0.343572;-2.500480;, + -0.253211;-0.287369;-2.500480;, + -0.104810;-0.311602;-2.622040;, + -0.239428;-0.255398;-2.622040;, + -0.366690;-0.919094;-2.309440;, + -0.501308;-0.862891;-2.309440;, + -0.373581;-0.935075;-2.092360;, + -0.508199;-0.878872;-2.092360;, + -0.184063;-0.495413;-1.206710;, + -0.318681;-0.439210;-1.206710;, + 0.350102;-0.839157;-2.205240;, + 0.484721;-0.782954;-2.205250;, + 0.319323;-0.399248;-1.389050;, + 0.184705;-0.455451;-1.389050;, + 0.136464;-0.343572;-2.500480;, + 0.271082;-0.287369;-2.500480;, + 0.122681;-0.311602;-2.622040;, + 0.257299;-0.255398;-2.622040;, + 0.384560;-0.919094;-2.309440;, + 0.519178;-0.862891;-2.309440;, + 0.391452;-0.935075;-2.092360;, + 0.526070;-0.878872;-2.092360;, + 0.201934;-0.495413;-1.206710;, + 0.336552;-0.439210;-1.206710;, + 0.477166;-0.784128;-2.245480;, + -0.472640;-0.875959;-2.086410;, + -0.472640;-0.784128;-2.245480;, + 0.477166;-0.875959;-2.086410;, + 0.477166;-0.967799;-2.245470;, + -0.472640;-0.967799;-2.245470;, + -0.466850;-0.782954;-2.205250;, + -0.332232;-0.839157;-2.205240;, + -0.466850;-0.782954;-2.205250;, + -0.501308;-0.862891;-2.309440;, + -0.366690;-0.919094;-2.309440;, + -0.501308;-0.862891;-2.309440;, + -0.508199;-0.878872;-2.092360;, + -0.373581;-0.935075;-2.092360;, + -0.508199;-0.878872;-2.092360;, + -0.318681;-0.439210;-1.206710;, + -0.301452;-0.399248;-1.389050;, + -0.508199;-0.878872;-2.092360;, + -0.301452;-0.399248;-1.389050;, + -0.466850;-0.782954;-2.205250;, + -0.508199;-0.878872;-2.092360;, + -0.466850;-0.782954;-2.205250;, + -0.501308;-0.862891;-2.309440;, + -0.239428;-0.255398;-2.622040;, + -0.501308;-0.862891;-2.309440;, + -0.253211;-0.287369;-2.500480;, + -0.253211;-0.287369;-2.500480;, + -0.166834;-0.455451;-1.389050;, + -0.184063;-0.495413;-1.206710;, + -0.373581;-0.935075;-2.092360;, + -0.332232;-0.839157;-2.205240;, + -0.166834;-0.455451;-1.389050;, + -0.373581;-0.935075;-2.092360;, + -0.332232;-0.839157;-2.205240;, + -0.366690;-0.919094;-2.309440;, + -0.366690;-0.919094;-2.309440;, + -0.104810;-0.311602;-2.622040;, + -0.118593;-0.343572;-2.500480;, + -0.118593;-0.343572;-2.500480;, + 0.484721;-0.782954;-2.205250;, + 0.350102;-0.839157;-2.205240;, + 0.484721;-0.782954;-2.205250;, + 0.519178;-0.862891;-2.309440;, + 0.384560;-0.919094;-2.309440;, + 0.519178;-0.862891;-2.309440;, + 0.526070;-0.878872;-2.092360;, + 0.391452;-0.935075;-2.092360;, + 0.526070;-0.878872;-2.092360;, + 0.336552;-0.439210;-1.206710;, + 0.526070;-0.878872;-2.092360;, + 0.319323;-0.399248;-1.389050;, + 0.319323;-0.399248;-1.389050;, + 0.526070;-0.878872;-2.092360;, + 0.484721;-0.782954;-2.205250;, + 0.519178;-0.862891;-2.309440;, + 0.484721;-0.782954;-2.205250;, + 0.257299;-0.255398;-2.622040;, + 0.271082;-0.287369;-2.500480;, + 0.519178;-0.862891;-2.309440;, + 0.271082;-0.287369;-2.500480;, + 0.184705;-0.455451;-1.389050;, + 0.391452;-0.935075;-2.092360;, + 0.201934;-0.495413;-1.206710;, + 0.350102;-0.839157;-2.205240;, + 0.391452;-0.935075;-2.092360;, + 0.184705;-0.455451;-1.389050;, + 0.350102;-0.839157;-2.205240;, + 0.384560;-0.919094;-2.309440;, + 0.384560;-0.919094;-2.309440;, + 0.136464;-0.343572;-2.500480;, + 0.122681;-0.311602;-2.622040;, + 0.136464;-0.343572;-2.500480;, + -0.472640;-0.784128;-2.245480;, + 0.477166;-0.784128;-2.245480;, + -0.472640;-0.784128;-2.245480;, + 0.477166;-0.875959;-2.086410;, + -0.472640;-0.875959;-2.086410;, + -0.472640;-0.967799;-2.245470;, + 0.477166;-0.967799;-2.245470;, + 0.477166;-0.875959;-2.086410;, + -0.472640;-0.967799;-2.245470;, + -0.472640;-0.784128;-2.245480;, + -0.472640;-0.967799;-2.245470;, + -0.472640;-0.875959;-2.086410;, + 0.477166;-0.967799;-2.245470;, + 0.477166;-0.784128;-2.245480;, + 0.477166;-0.875959;-2.086410;; + 48; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,34;, + 3;35,4,36;, + 3;8,9,7;, + 3;6,8,7;, + 3;10,11,37;, + 3;38,10,39;, + 3;12,13,40;, + 3;41,12,42;, + 3;43,44,45;, + 3;46,47,48;, + 3;45,49,50;, + 3;51,52,53;, + 3;54,50,47;, + 3;55,56,57;, + 3;58,59,60;, + 3;61,57,62;, + 3;63,64,65;, + 3;62,66,58;, + 3;14,16,15;, + 3;17,16,14;, + 3;18,67,19;, + 3;68,69,18;, + 3;22,21,23;, + 3;20,21,22;, + 3;24,70,25;, + 3;71,72,24;, + 3;26,73,27;, + 3;74,75,26;, + 3;76,77,78;, + 3;79,80,81;, + 3;77,82,83;, + 3;84,85,86;, + 3;87,81,82;, + 3;88,89,90;, + 3;91,92,93;, + 3;94,95,89;, + 3;96,97,98;, + 3;95,91,99;, + 3;28,30,29;, + 3;31,28,29;, + 3;32,33,100;, + 3;101,32,102;, + 3;103,104,105;, + 3;106,107,108;, + 3;109,110,111;, + 3;112,113,114;; + + MeshNormals { + 115; + 0.342963;0.821428;-0.455666;, + 0.342963;0.821428;-0.455666;, + 0.342978;0.821423;-0.455664;, + 0.342948;0.821433;-0.455668;, + 0.184888;0.442924;0.877288;, + 0.184914;0.442907;0.877292;, + -0.164614;-0.394279;-0.904127;, + -0.164613;-0.394279;-0.904127;, + -0.164613;-0.394279;-0.904127;, + -0.164612;-0.394279;-0.904128;, + -0.384038;-0.919853;-0.079908;, + -0.384038;-0.919853;-0.079908;, + -0.338924;-0.811793;0.475523;, + -0.338924;-0.811794;0.475523;, + -0.342962;0.821429;-0.455666;, + -0.342976;0.821424;-0.455664;, + -0.342962;0.821429;-0.455666;, + -0.342948;0.821434;-0.455668;, + -0.184888;0.442925;0.877288;, + -0.184914;0.442907;0.877292;, + 0.164614;-0.394279;-0.904127;, + 0.164613;-0.394279;-0.904127;, + 0.164613;-0.394279;-0.904127;, + 0.164612;-0.394279;-0.904127;, + 0.384038;-0.919853;-0.079910;, + 0.384038;-0.919853;-0.079910;, + 0.338924;-0.811793;0.475523;, + 0.338924;-0.811794;0.475523;, + 0.000000;0.866045;0.499967;, + 0.000000;0.866045;0.499967;, + 0.000000;0.866045;0.499967;, + 0.000000;0.866045;0.499967;, + 0.000000;-0.000055;-1.000000;, + 0.000000;-0.000055;-1.000000;, + 0.184914;0.442907;0.877292;, + 0.184863;0.442942;0.877284;, + 0.184863;0.442942;0.877284;, + -0.384038;-0.919853;-0.079908;, + -0.384038;-0.919853;-0.079909;, + -0.384038;-0.919853;-0.079909;, + -0.338924;-0.811794;0.475523;, + -0.338924;-0.811793;0.475523;, + -0.338924;-0.811793;0.475523;, + -0.918309;0.395863;-0.000011;, + -0.918309;0.395863;-0.000011;, + -0.918310;0.395863;-0.000011;, + -0.918311;0.395861;-0.000009;, + -0.918310;0.395862;-0.000009;, + -0.918311;0.395861;-0.000009;, + -0.918310;0.395862;-0.000008;, + -0.918310;0.395863;-0.000009;, + -0.918309;0.395864;-0.000007;, + -0.918309;0.395864;-0.000007;, + -0.918309;0.395864;-0.000007;, + -0.918309;0.395863;-0.000010;, + 0.918309;-0.395864;0.000011;, + 0.918309;-0.395864;0.000011;, + 0.918310;-0.395863;0.000011;, + 0.918310;-0.395862;0.000009;, + 0.918310;-0.395861;0.000009;, + 0.918310;-0.395861;0.000009;, + 0.918310;-0.395862;0.000008;, + 0.918310;-0.395863;0.000009;, + 0.918310;-0.395863;0.000011;, + 0.918310;-0.395863;0.000011;, + 0.918310;-0.395863;0.000011;, + 0.918309;-0.395863;0.000010;, + -0.184914;0.442907;0.877292;, + -0.184862;0.442943;0.877284;, + -0.184862;0.442943;0.877284;, + 0.384038;-0.919853;-0.079910;, + 0.384038;-0.919853;-0.079910;, + 0.384038;-0.919853;-0.079910;, + 0.338924;-0.811794;0.475523;, + 0.338924;-0.811793;0.475523;, + 0.338924;-0.811793;0.475523;, + 0.918309;0.395863;-0.000011;, + 0.918310;0.395863;-0.000012;, + 0.918309;0.395863;-0.000011;, + 0.918310;0.395861;-0.000009;, + 0.918310;0.395861;-0.000009;, + 0.918311;0.395861;-0.000012;, + 0.918311;0.395859;-0.000016;, + 0.918312;0.395857;-0.000013;, + 0.918310;0.395862;-0.000008;, + 0.918310;0.395862;-0.000008;, + 0.918310;0.395862;-0.000008;, + 0.918311;0.395860;-0.000016;, + -0.918309;-0.395863;0.000011;, + -0.918309;-0.395864;0.000011;, + -0.918309;-0.395863;0.000011;, + -0.918309;-0.395864;0.000011;, + -0.918308;-0.395865;0.000013;, + -0.918308;-0.395865;0.000013;, + -0.918308;-0.395866;0.000012;, + -0.918310;-0.395863;0.000010;, + -0.918310;-0.395861;0.000012;, + -0.918310;-0.395861;0.000012;, + -0.918310;-0.395861;0.000012;, + -0.918310;-0.395862;0.000009;, + 0.000000;-0.000055;-1.000000;, + 0.000000;-0.000055;-1.000000;, + 0.000000;-0.000055;-1.000000;, + 0.000000;-0.866010;0.500027;, + 0.000000;-0.866010;0.500027;, + 0.000000;-0.866010;0.500027;, + 0.000000;-0.866010;0.500027;, + 0.000000;-0.866010;0.500027;, + 0.000000;-0.866010;0.500027;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;; + 48; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,34;, + 3;35,4,36;, + 3;8,9,7;, + 3;6,8,7;, + 3;10,11,37;, + 3;38,10,39;, + 3;12,13,40;, + 3;41,12,42;, + 3;43,44,45;, + 3;46,47,48;, + 3;45,49,50;, + 3;51,52,53;, + 3;54,50,47;, + 3;55,56,57;, + 3;58,59,60;, + 3;61,57,62;, + 3;63,64,65;, + 3;62,66,58;, + 3;14,16,15;, + 3;17,16,14;, + 3;18,67,19;, + 3;68,69,18;, + 3;22,21,23;, + 3;20,21,22;, + 3;24,70,25;, + 3;71,72,24;, + 3;26,73,27;, + 3;74,75,26;, + 3;76,77,78;, + 3;79,80,81;, + 3;77,82,83;, + 3;84,85,86;, + 3;87,81,82;, + 3;88,89,90;, + 3;91,92,93;, + 3;94,95,89;, + 3;96,97,98;, + 3;95,91,99;, + 3;28,30,29;, + 3;31,28,29;, + 3;32,33,100;, + 3;101,32,102;, + 3;103,104,105;, + 3;106,107,108;, + 3;109,110,111;, + 3;112,113,114;; + } + + MeshTextureCoords { + 115; + 0.765075;-0.667283;, + 0.719267;-0.701212;, + 0.765075;-0.671618;, + 0.719267;-0.696878;, + 0.781645;-0.705506;, + 0.781645;-0.709841;, + 0.788467;-0.707972;, + 0.788467;-0.712307;, + 0.770923;-0.661118;, + 0.770923;-0.665453;, + 0.758739;-0.659886;, + 0.758739;-0.664221;, + 0.709033;-0.693795;, + 0.709033;-0.698130;, + 0.765075;-0.667283;, + 0.765075;-0.671618;, + 0.719267;-0.701212;, + 0.719267;-0.696878;, + 0.781645;-0.705506;, + 0.781645;-0.709841;, + 0.788467;-0.707972;, + 0.788467;-0.712307;, + 0.770923;-0.661118;, + 0.770923;-0.665453;, + 0.758739;-0.659886;, + 0.758739;-0.664221;, + 0.709033;-0.693795;, + 0.709033;-0.698130;, + 0.767333;-0.671528;, + 0.758405;-0.664445;, + 0.767333;-0.671528;, + 0.758405;-0.664445;, + 0.767332;-0.657362;, + 0.767332;-0.657362;, + 0.765075;-0.671618;, + 0.765075;-0.667283;, + 0.765075;-0.671618;, + 0.770923;-0.665453;, + 0.770923;-0.661118;, + 0.770923;-0.665453;, + 0.758739;-0.664221;, + 0.758739;-0.659886;, + 0.758739;-0.664221;, + 0.709033;-0.698130;, + 0.719267;-0.701212;, + 0.758739;-0.664221;, + 0.719267;-0.701212;, + 0.765075;-0.671618;, + 0.758739;-0.664221;, + 0.765075;-0.671618;, + 0.770923;-0.665453;, + 0.788467;-0.712307;, + 0.770923;-0.665453;, + 0.781645;-0.709841;, + 0.781645;-0.709841;, + 0.719267;-0.696878;, + 0.709033;-0.693795;, + 0.758739;-0.659886;, + 0.765075;-0.667283;, + 0.719267;-0.696878;, + 0.758739;-0.659886;, + 0.765075;-0.667283;, + 0.770923;-0.661118;, + 0.770923;-0.661118;, + 0.788467;-0.707972;, + 0.781645;-0.705506;, + 0.781645;-0.705506;, + 0.765075;-0.671618;, + 0.765075;-0.667283;, + 0.765075;-0.671618;, + 0.770923;-0.665453;, + 0.770923;-0.661118;, + 0.770923;-0.665453;, + 0.758739;-0.664221;, + 0.758739;-0.659886;, + 0.758739;-0.664221;, + 0.709033;-0.698130;, + 0.758739;-0.664221;, + 0.719267;-0.701212;, + 0.719267;-0.701212;, + 0.758739;-0.664221;, + 0.765075;-0.671618;, + 0.770923;-0.665453;, + 0.765075;-0.671618;, + 0.788467;-0.712307;, + 0.781645;-0.709841;, + 0.770923;-0.665453;, + 0.781645;-0.709841;, + 0.719267;-0.696878;, + 0.758739;-0.659886;, + 0.709033;-0.693795;, + 0.765075;-0.667283;, + 0.758739;-0.659886;, + 0.719267;-0.696878;, + 0.765075;-0.667283;, + 0.770923;-0.661118;, + 0.770923;-0.661118;, + 0.781645;-0.705506;, + 0.788467;-0.707972;, + 0.781645;-0.705506;, + 0.767333;-0.671528;, + 0.767333;-0.671528;, + 0.767333;-0.671528;, + 0.758405;-0.664445;, + 0.758405;-0.664445;, + 0.767332;-0.657362;, + 0.767332;-0.657362;, + 0.758405;-0.664445;, + 0.767332;-0.657362;, + 0.767333;-0.671528;, + 0.767332;-0.657362;, + 0.758405;-0.664445;, + 0.767332;-0.657362;, + 0.767333;-0.671528;, + 0.758405;-0.664445;; + } + + MeshMaterialList { + 1; + 48; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0; + + Material { + 0.800000;0.800000;0.800000;0.000000;; + 0.000000; + 0.000000;0.000000;0.000000;; + 0.000000;0.000000;0.000000;; + + TextureFilename { + "bihull.bmp"; + } + } + } + + VertexDuplicationIndices { + 115; + 34; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 2, + 0, + 2, + 9, + 8, + 9, + 11, + 10, + 11, + 13, + 1, + 11, + 1, + 2, + 11, + 2, + 9, + 7, + 9, + 5, + 5, + 3, + 12, + 10, + 0, + 3, + 10, + 0, + 8, + 8, + 6, + 4, + 4, + 15, + 14, + 15, + 23, + 22, + 23, + 25, + 24, + 25, + 27, + 25, + 16, + 16, + 25, + 15, + 23, + 15, + 21, + 19, + 23, + 19, + 17, + 24, + 26, + 14, + 24, + 17, + 14, + 22, + 22, + 18, + 20, + 18, + 30, + 28, + 30, + 31, + 29, + 33, + 32, + 31, + 33, + 30, + 33, + 29, + 32, + 28, + 31; + } + } + } + + Frame propeller { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; + } + + Mesh { + 126; + 0.028211;0.340125;-3.703910;, + -0.500602;-0.266123;-3.935770;, + -0.500602;-0.282022;-3.891560;, + 0.028211;0.359467;-3.742510;, + -0.704121;-0.324004;-3.948780;, + -0.704121;-0.339903;-3.916290;, + -0.773006;-0.205283;-3.934830;, + -0.773006;-0.227069;-3.861230;, + -0.674174;-0.021319;-3.880370;, + -0.674175;-0.043106;-3.806770;, + -0.042034;0.423927;-3.730310;, + -0.042034;0.404586;-3.691700;, + 0.765492;0.896056;-3.528760;, + 0.765492;0.917842;-3.602350;, + 0.110126;0.406971;-3.691250;, + 0.110126;0.426312;-3.729860;, + 0.837510;1.110660;-3.470300;, + 0.837510;1.120700;-3.526240;, + 0.722281;1.162050;-3.461600;, + 0.722281;1.183810;-3.494090;, + 0.527832;1.068700;-3.477651;, + 0.527832;1.090480;-3.551250;, + 0.045309;0.476535;-3.678090;, + 0.045309;0.495876;-3.716690;, + 0.041230;0.468197;-3.464810;, + 0.041230;0.575044;-3.803820;, + 0.141430;0.369703;-3.499430;, + 0.141430;0.477488;-3.841010;, + -0.058970;0.369703;-3.499430;, + -0.058970;0.477488;-3.841010;, + 0.041230;0.271208;-3.534050;, + 0.041230;0.379933;-3.878200;, + -0.500602;-0.282022;-3.891560;, + -0.500602;-0.282022;-3.891560;, + -0.500602;-0.266123;-3.935770;, + -0.704121;-0.339903;-3.916290;, + -0.704121;-0.339903;-3.916290;, + -0.704121;-0.324004;-3.948780;, + -0.773006;-0.227069;-3.861230;, + -0.773006;-0.227069;-3.861230;, + -0.773006;-0.205283;-3.934830;, + -0.042034;0.404586;-3.691700;, + 0.028211;0.340125;-3.703910;, + 0.028211;0.359467;-3.742510;, + -0.042034;0.404586;-3.691700;, + 0.028211;0.359467;-3.742510;, + -0.042034;0.423927;-3.730310;, + -0.042034;0.404586;-3.691700;, + -0.500602;-0.282022;-3.891560;, + 0.028211;0.340125;-3.703910;, + -0.674175;-0.043106;-3.806770;, + -0.500602;-0.282022;-3.891560;, + -0.042034;0.404586;-3.691700;, + -0.773006;-0.227069;-3.861230;, + -0.674175;-0.043106;-3.806770;, + -0.773006;-0.227069;-3.861230;, + -0.704121;-0.339903;-3.916290;, + -0.042034;0.423927;-3.730310;, + 0.028211;0.359467;-3.742510;, + -0.500602;-0.266123;-3.935770;, + -0.674174;-0.021319;-3.880370;, + -0.042034;0.423927;-3.730310;, + -0.500602;-0.266123;-3.935770;, + -0.773006;-0.205283;-3.934830;, + -0.674174;-0.021319;-3.880370;, + -0.773006;-0.205283;-3.934830;, + -0.704121;-0.324004;-3.948780;, + 0.765492;0.896056;-3.528760;, + 0.765492;0.896056;-3.528760;, + 0.765492;0.917842;-3.602350;, + 0.837510;1.110660;-3.470300;, + 0.837510;1.110660;-3.470300;, + 0.837510;1.120700;-3.526240;, + 0.722281;1.162050;-3.461600;, + 0.722281;1.162050;-3.461600;, + 0.722281;1.183810;-3.494090;, + 0.110126;0.406971;-3.691250;, + 0.045309;0.476535;-3.678090;, + 0.110126;0.426312;-3.729860;, + 0.110126;0.426312;-3.729860;, + 0.045309;0.476535;-3.678090;, + 0.045309;0.495876;-3.716690;, + 0.765492;0.896056;-3.528760;, + 0.045309;0.476535;-3.678090;, + 0.110126;0.406971;-3.691250;, + 0.765492;0.896056;-3.528760;, + 0.527832;1.068700;-3.477651;, + 0.045309;0.476535;-3.678090;, + 0.722281;1.162050;-3.461600;, + 0.527832;1.068700;-3.477651;, + 0.837510;1.110660;-3.470300;, + 0.722281;1.162050;-3.461600;, + 0.110126;0.426312;-3.729860;, + 0.045309;0.495876;-3.716690;, + 0.765492;0.917842;-3.602350;, + 0.045309;0.495876;-3.716690;, + 0.527832;1.090480;-3.551250;, + 0.765492;0.917842;-3.602350;, + 0.527832;1.090480;-3.551250;, + 0.722281;1.183810;-3.494090;, + 0.722281;1.183810;-3.494090;, + 0.837510;1.120700;-3.526240;, + 0.041230;0.468197;-3.464810;, + 0.041230;0.468197;-3.464810;, + 0.041230;0.575044;-3.803820;, + -0.058970;0.369703;-3.499430;, + -0.058970;0.369703;-3.499430;, + -0.058970;0.477488;-3.841010;, + 0.141430;0.369703;-3.499430;, + 0.041230;0.271208;-3.534050;, + 0.141430;0.477488;-3.841010;, + 0.141430;0.477488;-3.841010;, + 0.041230;0.271208;-3.534050;, + 0.041230;0.379933;-3.878200;, + 0.041230;0.271208;-3.534050;, + 0.041230;0.468197;-3.464810;, + -0.058970;0.369703;-3.499430;, + 0.041230;0.271208;-3.534050;, + 0.141430;0.369703;-3.499430;, + 0.041230;0.468197;-3.464810;, + -0.058970;0.477488;-3.841010;, + 0.041230;0.575044;-3.803820;, + 0.041230;0.379933;-3.878200;, + 0.041230;0.575044;-3.803820;, + 0.141430;0.477488;-3.841010;, + 0.041230;0.379933;-3.878200;; + 52; + 3;0,2,1;, + 3;0,1,3;, + 3;32,5,4;, + 3;33,4,34;, + 3;35,7,6;, + 3;36,6,37;, + 3;38,9,8;, + 3;39,8,40;, + 3;9,11,10;, + 3;9,10,8;, + 3;41,42,43;, + 3;44,45,46;, + 3;47,48,49;, + 3;50,51,52;, + 3;53,48,54;, + 3;55,56,48;, + 3;57,58,59;, + 3;60,61,62;, + 3;63,64,59;, + 3;65,59,66;, + 3;12,14,13;, + 3;13,14,15;, + 3;16,67,17;, + 3;17,68,69;, + 3;18,70,19;, + 3;19,71,72;, + 3;20,73,21;, + 3;21,74,75;, + 3;22,20,23;, + 3;23,20,21;, + 3;76,77,78;, + 3;79,80,81;, + 3;82,83,84;, + 3;85,86,87;, + 3;82,88,89;, + 3;90,91,82;, + 3;92,93,94;, + 3;95,96,97;, + 3;98,99,94;, + 3;94,100,101;, + 3;24,26,25;, + 3;25,26,27;, + 3;28,102,29;, + 3;29,103,104;, + 3;30,105,31;, + 3;31,106,107;, + 3;108,109,110;, + 3;111,112,113;, + 3;114,115,116;, + 3;117,118,119;, + 3;120,121,122;, + 3;123,124,125;; + + MeshNormals { + 126; + 0.775058;-0.581430;-0.247436;, + 0.775058;-0.581430;-0.247436;, + 0.775209;-0.594435;-0.213773;, + 0.773742;-0.566373;-0.283803;, + 0.285789;-0.885233;-0.366997;, + 0.295109;-0.858217;-0.419969;, + -0.868420;-0.467227;-0.165967;, + -0.873871;-0.466163;-0.137987;, + -0.716883;0.668521;0.197887;, + -0.645648;0.718503;0.258633;, + -0.592399;0.756437;0.277250;, + -0.581483;0.727398;0.364378;, + 0.617941;-0.753882;-0.223183;, + 0.614338;-0.740842;-0.271556;, + 0.614338;-0.740842;-0.271556;, + 0.603930;-0.712626;-0.356978;, + 0.951019;-0.304272;-0.054610;, + 0.949850;-0.303673;-0.074613;, + 0.381383;0.768069;0.514409;, + 0.466572;0.832304;0.299302;, + -0.746148;0.628060;0.220917;, + -0.704705;0.672146;0.227180;, + -0.788789;0.549538;0.275353;, + -0.789213;0.576613;0.211329;, + 0.721289;0.660600;0.208204;, + 0.721090;0.660763;0.208379;, + 0.721090;0.660763;0.208379;, + 0.720891;0.660925;0.208554;, + -0.721293;0.660526;0.208428;, + -0.721090;0.660763;0.208379;, + -0.721300;-0.660448;-0.208651;, + -0.721095;-0.660687;-0.208603;, + 0.295109;-0.858217;-0.419969;, + 0.277863;-0.903944;-0.325081;, + 0.277863;-0.903944;-0.325081;, + -0.873871;-0.466163;-0.137987;, + -0.853381;-0.468231;-0.229129;, + -0.853381;-0.468231;-0.229129;, + -0.888981;0.439113;0.129974;, + -0.888980;0.439113;0.129980;, + -0.888980;0.439113;0.129980;, + 0.668263;0.665097;0.333273;, + 0.668263;0.665097;0.333273;, + 0.668263;0.665097;0.333273;, + 0.668244;0.665153;0.333197;, + 0.668244;0.665153;0.333197;, + 0.668244;0.665153;0.333197;, + -0.055995;-0.244388;0.968059;, + -0.009023;-0.299842;0.953946;, + -0.055995;-0.244388;0.968059;, + 0.043524;-0.305908;0.951066;, + 0.043524;-0.305908;0.951066;, + 0.043524;-0.305908;0.951066;, + 0.044301;-0.305389;0.951196;, + 0.044301;-0.305389;0.951196;, + 0.013269;-0.431954;0.901798;, + 0.013269;-0.431954;0.901798;, + 0.059789;0.248151;-0.966874;, + 0.059789;0.248151;-0.966874;, + 0.052087;0.231567;-0.971424;, + 0.050236;0.254194;-0.965848;, + 0.050236;0.254194;-0.965848;, + 0.050236;0.254194;-0.965848;, + 0.053994;0.256665;-0.964991;, + 0.053994;0.256665;-0.964991;, + 0.025950;0.131500;-0.990977;, + 0.025950;0.131500;-0.990977;, + 0.951019;-0.304272;-0.054610;, + 0.948712;-0.303138;-0.089743;, + 0.948712;-0.303138;-0.089743;, + 0.381383;0.768069;0.514409;, + 0.507104;0.848330;0.152257;, + 0.507104;0.848330;0.152257;, + -0.435483;0.863194;0.255443;, + -0.490176;0.724204;0.485031;, + -0.490176;0.724204;0.485031;, + -0.724305;-0.616460;-0.308805;, + -0.724305;-0.616460;-0.308805;, + -0.724305;-0.616460;-0.308805;, + -0.724317;-0.616416;-0.308863;, + -0.724317;-0.616416;-0.308863;, + -0.724317;-0.616416;-0.308863;, + -0.024055;-0.241918;0.969998;, + -0.061008;-0.240125;0.968823;, + -0.061008;-0.240125;0.968823;, + -0.018431;-0.307055;0.951513;, + -0.018431;-0.307055;0.951513;, + -0.018431;-0.307055;0.951513;, + 0.034805;-0.239337;0.970313;, + 0.034805;-0.239337;0.970313;, + -0.038695;-0.250525;0.967336;, + -0.038695;-0.250525;0.967336;, + 0.030220;0.213045;-0.976575;, + 0.030220;0.213045;-0.976575;, + 0.034132;0.304299;-0.951965;, + -0.007806;0.273919;-0.961721;, + -0.007806;0.273919;-0.961721;, + -0.007806;0.273919;-0.961721;, + 0.083968;0.387347;-0.918102;, + 0.083968;0.387347;-0.918102;, + -0.057116;0.368416;-0.927905;, + -0.057116;0.368416;-0.927905;, + -0.721293;0.660526;0.208428;, + -0.720884;0.661003;0.208331;, + -0.720884;0.661003;0.208331;, + -0.721300;-0.660448;-0.208651;, + -0.720888;-0.660928;-0.208555;, + -0.720888;-0.660928;-0.208555;, + 0.721296;-0.660522;-0.208427;, + 0.721296;-0.660522;-0.208427;, + 0.721296;-0.660522;-0.208427;, + 0.720895;-0.660850;-0.208778;, + 0.720895;-0.660850;-0.208778;, + 0.720895;-0.660850;-0.208778;, + -0.000002;-0.331604;0.943419;, + -0.000002;-0.331604;0.943419;, + -0.000002;-0.331604;0.943419;, + 0.000002;-0.331604;0.943419;, + 0.000002;-0.331604;0.943419;, + 0.000002;-0.331604;0.943419;, + -0.000001;0.356214;-0.934405;, + -0.000001;0.356214;-0.934405;, + -0.000001;0.356214;-0.934405;, + 0.000001;0.356213;-0.934405;, + 0.000001;0.356213;-0.934405;, + 0.000001;0.356213;-0.934405;; + 52; + 3;0,2,1;, + 3;0,1,3;, + 3;32,5,4;, + 3;33,4,34;, + 3;35,7,6;, + 3;36,6,37;, + 3;38,9,8;, + 3;39,8,40;, + 3;9,11,10;, + 3;9,10,8;, + 3;41,42,43;, + 3;44,45,46;, + 3;47,48,49;, + 3;50,51,52;, + 3;53,48,54;, + 3;55,56,48;, + 3;57,58,59;, + 3;60,61,62;, + 3;63,64,59;, + 3;65,59,66;, + 3;12,14,13;, + 3;13,14,15;, + 3;16,67,17;, + 3;17,68,69;, + 3;18,70,19;, + 3;19,71,72;, + 3;20,73,21;, + 3;21,74,75;, + 3;22,20,23;, + 3;23,20,21;, + 3;76,77,78;, + 3;79,80,81;, + 3;82,83,84;, + 3;85,86,87;, + 3;82,88,89;, + 3;90,91,82;, + 3;92,93,94;, + 3;95,96,97;, + 3;98,99,94;, + 3;94,100,101;, + 3;24,26,25;, + 3;25,26,27;, + 3;28,102,29;, + 3;29,103,104;, + 3;30,105,31;, + 3;31,106,107;, + 3;108,109,110;, + 3;111,112,113;, + 3;114,115,116;, + 3;117,118,119;, + 3;120,121,122;, + 3;123,124,125;; + } + + MeshMaterialList { + 1; + 52; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0; + + Material { + 0.800000;0.599216;0.401569;0.000000;; + 20.000000; + 0.500000;0.500000;0.500000;; + 0.000000;0.000000;0.000000;; + } + } + + VertexDuplicationIndices { + 126; + 32; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 2, + 2, + 1, + 5, + 5, + 4, + 7, + 7, + 6, + 11, + 0, + 3, + 11, + 3, + 10, + 11, + 2, + 0, + 9, + 2, + 11, + 7, + 9, + 7, + 5, + 10, + 3, + 1, + 8, + 10, + 1, + 6, + 8, + 6, + 4, + 12, + 12, + 13, + 16, + 16, + 17, + 18, + 18, + 19, + 14, + 22, + 15, + 15, + 22, + 23, + 12, + 22, + 14, + 12, + 20, + 22, + 18, + 20, + 16, + 18, + 15, + 23, + 13, + 23, + 21, + 13, + 21, + 19, + 19, + 17, + 24, + 24, + 25, + 28, + 28, + 29, + 26, + 30, + 27, + 27, + 30, + 31, + 30, + 24, + 28, + 30, + 26, + 24, + 29, + 25, + 31, + 25, + 27, + 31; + } + } + } + + Frame rudder { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; + } + + Mesh { + 78; + 0.061133;0.101338;3.037190;, + -0.015619;0.040559;2.809300;, + -0.015619;0.101338;3.037190;, + 0.061133;0.040559;2.809300;, + 0.061133;-0.521583;3.052400;, + -0.015619;-0.521583;3.052400;, + 0.061133;-0.430417;3.341070;, + -0.015619;-0.430417;3.341070;, + 0.061133;-0.065769;3.751280;, + -0.015619;-0.065769;3.751280;, + 0.061133;0.298873;3.948780;, + -0.015619;0.298873;3.948780;, + 0.061133;0.678702;3.903190;, + -0.015619;0.678702;3.903190;, + 0.061133;0.952174;3.660090;, + -0.015619;0.952174;3.660090;, + 0.061133;0.967358;3.341040;, + -0.015619;0.967358;3.341040;, + 0.061133;0.845805;3.052370;, + -0.015619;0.845805;3.052370;, + 0.061133;0.086118;2.049640;, + -0.015619;0.086118;2.049640;, + -0.015619;0.101338;3.037190;, + 0.061133;0.101338;3.037190;, + -0.015619;0.101338;3.037190;, + -0.015619;-0.521583;3.052400;, + 0.061133;-0.521583;3.052400;, + -0.015619;-0.521583;3.052400;, + -0.015619;0.298873;3.948780;, + 0.061133;0.298873;3.948780;, + -0.015619;0.298873;3.948780;, + -0.015619;0.678702;3.903190;, + 0.061133;0.678702;3.903190;, + -0.015619;0.678702;3.903190;, + -0.015619;0.952174;3.660090;, + 0.061133;0.952174;3.660090;, + -0.015619;0.952174;3.660090;, + -0.015619;0.086118;2.049640;, + 0.061133;0.086118;2.049640;, + -0.015619;0.086118;2.049640;, + -0.015619;0.086118;2.049640;, + -0.015619;0.040559;2.809300;, + -0.015619;0.845805;3.052370;, + -0.015619;0.040559;2.809300;, + -0.015619;0.101338;3.037190;, + -0.015619;0.845805;3.052370;, + -0.015619;-0.521583;3.052400;, + -0.015619;-0.430417;3.341070;, + -0.015619;0.101338;3.037190;, + -0.015619;-0.430417;3.341070;, + -0.015619;-0.065769;3.751280;, + -0.015619;-0.065769;3.751280;, + -0.015619;0.298873;3.948780;, + -0.015619;0.298873;3.948780;, + -0.015619;0.678702;3.903190;, + -0.015619;0.678702;3.903190;, + -0.015619;0.967358;3.341040;, + -0.015619;0.952174;3.660090;, + -0.015619;0.967358;3.341040;, + 0.061133;0.040559;2.809300;, + 0.061133;0.086118;2.049640;, + 0.061133;0.845805;3.052370;, + 0.061133;0.101338;3.037190;, + 0.061133;0.040559;2.809300;, + 0.061133;0.845805;3.052370;, + 0.061133;-0.430417;3.341070;, + 0.061133;-0.521583;3.052400;, + 0.061133;0.101338;3.037190;, + 0.061133;-0.065769;3.751280;, + 0.061133;-0.430417;3.341070;, + 0.061133;-0.065769;3.751280;, + 0.061133;0.298873;3.948780;, + 0.061133;0.678702;3.903190;, + 0.061133;0.298873;3.948780;, + 0.061133;0.678702;3.903190;, + 0.061133;0.967358;3.341040;, + 0.061133;0.952174;3.660090;, + 0.061133;0.967358;3.341040;; + 40; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,22;, + 3;23,4,24;, + 3;6,7,25;, + 3;26,6,27;, + 3;8,9,7;, + 3;6,8,7;, + 3;10,11,9;, + 3;8,10,9;, + 3;12,13,28;, + 3;29,12,30;, + 3;14,15,31;, + 3;32,14,33;, + 3;16,17,34;, + 3;35,16,36;, + 3;18,19,17;, + 3;16,18,17;, + 3;20,21,19;, + 3;18,20,19;, + 3;3,1,37;, + 3;38,3,39;, + 3;40,41,42;, + 3;43,44,45;, + 3;46,47,48;, + 3;49,50,44;, + 3;44,51,42;, + 3;50,52,42;, + 3;53,54,42;, + 3;42,55,56;, + 3;54,57,58;, + 3;59,60,61;, + 3;62,63,64;, + 3;65,66,67;, + 3;68,69,62;, + 3;70,62,61;, + 3;71,68,61;, + 3;72,73,61;, + 3;74,61,75;, + 3;76,72,77;; + + MeshNormals { + 78; + 0.000000;-0.966226;0.257696;, + 0.000000;-0.998051;0.062406;, + 0.000000;-0.966226;0.257696;, + 0.000000;-0.999849;-0.017362;, + 0.000000;-0.024410;-0.999702;, + 0.000000;-0.024410;-0.999702;, + 0.000000;-0.874780;0.484520;, + 0.000000;-0.803934;0.594719;, + 0.000000;-0.681213;0.732085;, + 0.000000;-0.592796;0.805353;, + 0.000000;-0.476256;0.879306;, + 0.000000;-0.476256;0.879306;, + 0.000000;0.119173;0.992873;, + 0.000000;0.119173;0.992873;, + 0.000000;0.664385;0.747391;, + 0.000000;0.664385;0.747391;, + 0.000000;0.995195;-0.097917;, + 0.000000;0.969162;-0.246426;, + 0.000000;0.844316;-0.535846;, + 0.000000;0.813354;-0.581769;, + 0.000000;0.797076;-0.603879;, + 0.000000;0.797076;-0.603879;, + 0.000000;-0.024410;-0.999702;, + 0.000000;-0.024410;-0.999702;, + 0.000000;-0.024410;-0.999702;, + 0.000000;-0.953576;0.301153;, + 0.000000;-0.953576;0.301153;, + 0.000000;-0.953576;0.301153;, + 0.000000;0.119173;0.992873;, + 0.000000;0.119173;0.992873;, + 0.000000;0.119173;0.992873;, + 0.000000;0.664385;0.747391;, + 0.000000;0.664385;0.747391;, + 0.000000;0.664385;0.747391;, + 0.000000;0.998869;0.047537;, + 0.000000;0.998869;0.047537;, + 0.000000;0.998869;0.047537;, + 0.000000;-0.998206;-0.059865;, + 0.000000;-0.998206;-0.059865;, + 0.000000;-0.998206;-0.059865;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;; + 40; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,22;, + 3;23,4,24;, + 3;6,7,25;, + 3;26,6,27;, + 3;8,9,7;, + 3;6,8,7;, + 3;10,11,9;, + 3;8,10,9;, + 3;12,13,28;, + 3;29,12,30;, + 3;14,15,31;, + 3;32,14,33;, + 3;16,17,34;, + 3;35,16,36;, + 3;18,19,17;, + 3;16,18,17;, + 3;20,21,19;, + 3;18,20,19;, + 3;3,1,37;, + 3;38,3,39;, + 3;40,41,42;, + 3;43,44,45;, + 3;46,47,48;, + 3;49,50,44;, + 3;44,51,42;, + 3;50,52,42;, + 3;53,54,42;, + 3;42,55,56;, + 3;54,57,58;, + 3;59,60,61;, + 3;62,63,64;, + 3;65,66,67;, + 3;68,69,62;, + 3;70,62,61;, + 3;71,68,61;, + 3;72,73,61;, + 3;74,61,75;, + 3;76,72,77;; + } + + MeshTextureCoords { + 78; + 0.309227;-0.075001;, + 0.317107;-0.090309;, + 0.309227;-0.075001;, + 0.317107;-0.090309;, + 0.389982;-0.073979;, + 0.389982;-0.073979;, + 0.378164;-0.054587;, + 0.378164;-0.054587;, + 0.330891;-0.027031;, + 0.330891;-0.027031;, + 0.283619;-0.013764;, + 0.283619;-0.013764;, + 0.234379;-0.016826;, + 0.234379;-0.016826;, + 0.198926;-0.033157;, + 0.198926;-0.033157;, + 0.196958;-0.054589;, + 0.196958;-0.054589;, + 0.212716;-0.073981;, + 0.212716;-0.073981;, + 0.311200;-0.141340;, + 0.311200;-0.141340;, + 0.309227;-0.075001;, + 0.309227;-0.075001;, + 0.309227;-0.075001;, + 0.389982;-0.073979;, + 0.389982;-0.073979;, + 0.389982;-0.073979;, + 0.283619;-0.013764;, + 0.283619;-0.013764;, + 0.283619;-0.013764;, + 0.234379;-0.016826;, + 0.234379;-0.016826;, + 0.234379;-0.016826;, + 0.198926;-0.033157;, + 0.198926;-0.033157;, + 0.198926;-0.033157;, + 0.311200;-0.141340;, + 0.311200;-0.141340;, + 0.311200;-0.141340;, + 0.311200;-0.141340;, + 0.317107;-0.090309;, + 0.212716;-0.073981;, + 0.317107;-0.090309;, + 0.309227;-0.075001;, + 0.212716;-0.073981;, + 0.389982;-0.073979;, + 0.378164;-0.054587;, + 0.309227;-0.075001;, + 0.378164;-0.054587;, + 0.330891;-0.027031;, + 0.330891;-0.027031;, + 0.283619;-0.013764;, + 0.283619;-0.013764;, + 0.234379;-0.016826;, + 0.234379;-0.016826;, + 0.196958;-0.054589;, + 0.198926;-0.033157;, + 0.196958;-0.054589;, + 0.317107;-0.090309;, + 0.311200;-0.141340;, + 0.212716;-0.073981;, + 0.309227;-0.075001;, + 0.317107;-0.090309;, + 0.212716;-0.073981;, + 0.378164;-0.054587;, + 0.389982;-0.073979;, + 0.309227;-0.075001;, + 0.330891;-0.027031;, + 0.378164;-0.054587;, + 0.330891;-0.027031;, + 0.283619;-0.013764;, + 0.234379;-0.016826;, + 0.283619;-0.013764;, + 0.234379;-0.016826;, + 0.196958;-0.054589;, + 0.198926;-0.033157;, + 0.196958;-0.054589;; + } + + MeshMaterialList { + 1; + 40; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0; + + Material { + 0.800000;0.800000;0.800000;0.000000;; + 0.000000; + 0.000000;0.000000;0.000000;; + 0.000000;0.000000;0.000000;; + + TextureFilename { + "bihull.bmp"; + } + } + } + + VertexDuplicationIndices { + 78; + 22; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 2, + 0, + 2, + 5, + 4, + 5, + 11, + 10, + 11, + 13, + 12, + 13, + 15, + 14, + 15, + 21, + 20, + 21, + 21, + 1, + 19, + 1, + 2, + 19, + 5, + 7, + 2, + 7, + 9, + 9, + 11, + 11, + 13, + 13, + 17, + 15, + 17, + 3, + 20, + 18, + 0, + 3, + 18, + 6, + 4, + 0, + 8, + 6, + 8, + 10, + 12, + 10, + 12, + 16, + 14, + 16; + } + } + } + + Frame wheels { + + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000,0.000000,0.000000,0.000000,0.000000,1.000000;; + } + + Mesh { + 100; + 0.769060;-0.602981;-2.024790;, + 0.490834;-0.893387;-1.857120;, + 0.490834;-0.602981;-2.024790;, + 0.769060;-0.893387;-1.857120;, + 0.769060;-0.602990;-2.360130;, + 0.490834;-0.602990;-2.360130;, + 0.769060;-0.893404;-2.527790;, + 0.490834;-0.893404;-2.527790;, + 0.769060;-1.183810;-2.360110;, + 0.490834;-1.183810;-2.360110;, + 0.769060;-1.183800;-2.024780;, + 0.490834;-1.183800;-2.024780;, + -0.411969;-0.602981;-2.024790;, + -0.690195;-0.893387;-1.857120;, + -0.690195;-0.602981;-2.024790;, + -0.411969;-0.893387;-1.857120;, + -0.411969;-0.602990;-2.360130;, + -0.690195;-0.602990;-2.360130;, + -0.411969;-0.893404;-2.527790;, + -0.690195;-0.893404;-2.527790;, + -0.411969;-1.183810;-2.360110;, + -0.690195;-1.183810;-2.360110;, + -0.411969;-1.183800;-2.024780;, + -0.690195;-1.183800;-2.024780;, + 0.490834;-0.602981;-2.024790;, + 0.769060;-0.602981;-2.024790;, + 0.490834;-0.602981;-2.024790;, + 0.490834;-0.602990;-2.360130;, + 0.769060;-0.602990;-2.360130;, + 0.490834;-0.602990;-2.360130;, + 0.490834;-0.893404;-2.527790;, + 0.769060;-0.893404;-2.527790;, + 0.490834;-0.893404;-2.527790;, + 0.490834;-1.183810;-2.360110;, + 0.769060;-1.183810;-2.360110;, + 0.490834;-1.183810;-2.360110;, + 0.769060;-0.893387;-1.857120;, + 0.490834;-0.893387;-1.857120;, + 0.490834;-1.183800;-2.024780;, + 0.769060;-1.183800;-2.024780;, + 0.769060;-0.893387;-1.857120;, + 0.490834;-1.183800;-2.024780;, + 0.490834;-0.602981;-2.024790;, + 0.490834;-0.602990;-2.360130;, + 0.490834;-0.893387;-1.857120;, + 0.490834;-0.602990;-2.360130;, + 0.490834;-0.893404;-2.527790;, + 0.490834;-0.893387;-1.857120;, + 0.490834;-0.893404;-2.527790;, + 0.490834;-1.183810;-2.360110;, + 0.490834;-1.183810;-2.360110;, + 0.490834;-1.183800;-2.024780;, + 0.769060;-0.602990;-2.360130;, + 0.769060;-0.602981;-2.024790;, + 0.769060;-0.893387;-1.857120;, + 0.769060;-0.893404;-2.527790;, + 0.769060;-0.602990;-2.360130;, + 0.769060;-0.893387;-1.857120;, + 0.769060;-1.183810;-2.360110;, + 0.769060;-0.893404;-2.527790;, + 0.769060;-1.183800;-2.024780;, + 0.769060;-1.183810;-2.360110;, + -0.690195;-0.602981;-2.024790;, + -0.411969;-0.602981;-2.024790;, + -0.690195;-0.602981;-2.024790;, + -0.690195;-0.602990;-2.360130;, + -0.411969;-0.602990;-2.360130;, + -0.690195;-0.602990;-2.360130;, + -0.690195;-0.893404;-2.527790;, + -0.411969;-0.893404;-2.527790;, + -0.690195;-0.893404;-2.527790;, + -0.690195;-1.183810;-2.360110;, + -0.411969;-1.183810;-2.360110;, + -0.690195;-1.183810;-2.360110;, + -0.411969;-0.893387;-1.857120;, + -0.690195;-0.893387;-1.857120;, + -0.690195;-1.183800;-2.024780;, + -0.411969;-1.183800;-2.024780;, + -0.411969;-0.893387;-1.857120;, + -0.690195;-1.183800;-2.024780;, + -0.690195;-0.602981;-2.024790;, + -0.690195;-0.602990;-2.360130;, + -0.690195;-0.893387;-1.857120;, + -0.690195;-0.602990;-2.360130;, + -0.690195;-0.893404;-2.527790;, + -0.690195;-0.893387;-1.857120;, + -0.690195;-0.893404;-2.527790;, + -0.690195;-1.183810;-2.360110;, + -0.690195;-1.183810;-2.360110;, + -0.690195;-1.183800;-2.024780;, + -0.411969;-0.602990;-2.360130;, + -0.411969;-0.602981;-2.024790;, + -0.411969;-0.893387;-1.857120;, + -0.411969;-0.893404;-2.527790;, + -0.411969;-0.602990;-2.360130;, + -0.411969;-0.893387;-1.857120;, + -0.411969;-1.183810;-2.360110;, + -0.411969;-0.893404;-2.527790;, + -0.411969;-1.183800;-2.024780;, + -0.411969;-1.183810;-2.360110;; + 40; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,24;, + 3;25,4,26;, + 3;6,7,27;, + 3;28,6,29;, + 3;8,9,30;, + 3;31,8,32;, + 3;10,11,33;, + 3;34,10,35;, + 3;36,37,38;, + 3;39,40,41;, + 3;42,43,44;, + 3;45,46,47;, + 3;48,49,44;, + 3;50,51,44;, + 3;52,53,54;, + 3;55,56,57;, + 3;58,59,54;, + 3;60,61,54;, + 3;12,14,13;, + 3;15,12,13;, + 3;16,17,62;, + 3;63,16,64;, + 3;18,19,65;, + 3;66,18,67;, + 3;20,21,68;, + 3;69,20,70;, + 3;22,23,71;, + 3;72,22,73;, + 3;74,75,76;, + 3;77,78,79;, + 3;80,81,82;, + 3;83,84,85;, + 3;86,87,82;, + 3;88,89,82;, + 3;90,91,92;, + 3;93,94,95;, + 3;96,97,92;, + 3;98,99,92;; + + MeshNormals { + 100; + 0.000000;0.500009;0.866020;, + 0.000000;0.500009;0.866020;, + 0.000000;0.500009;0.866020;, + 0.000000;0.500009;0.866020;, + 0.000000;1.000000;-0.000027;, + 0.000000;1.000000;-0.000027;, + 0.000000;0.499976;-0.866039;, + 0.000000;0.499976;-0.866039;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-1.000000;0.000030;, + 0.000000;-1.000000;0.000030;, + 0.000000;0.500009;0.866020;, + 0.000000;0.500009;0.866020;, + 0.000000;0.500009;0.866020;, + 0.000000;0.500009;0.866020;, + 0.000000;1.000000;-0.000027;, + 0.000000;1.000000;-0.000027;, + 0.000000;0.499976;-0.866039;, + 0.000000;0.499976;-0.866039;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-1.000000;0.000030;, + 0.000000;-1.000000;0.000030;, + 0.000000;1.000000;-0.000027;, + 0.000000;1.000000;-0.000027;, + 0.000000;1.000000;-0.000027;, + 0.000000;0.499976;-0.866039;, + 0.000000;0.499976;-0.866039;, + 0.000000;0.499976;-0.866039;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-1.000000;0.000030;, + 0.000000;-1.000000;0.000030;, + 0.000000;-1.000000;0.000030;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 0.000000;1.000000;-0.000027;, + 0.000000;1.000000;-0.000027;, + 0.000000;1.000000;-0.000027;, + 0.000000;0.499976;-0.866039;, + 0.000000;0.499976;-0.866039;, + 0.000000;0.499976;-0.866039;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-0.500031;-0.866007;, + 0.000000;-1.000000;0.000030;, + 0.000000;-1.000000;0.000030;, + 0.000000;-1.000000;0.000030;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + 0.000000;-0.499978;0.866038;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + -1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;, + 1.000000;0.000000;0.000000;; + 40; + 3;0,2,1;, + 3;3,0,1;, + 3;4,5,24;, + 3;25,4,26;, + 3;6,7,27;, + 3;28,6,29;, + 3;8,9,30;, + 3;31,8,32;, + 3;10,11,33;, + 3;34,10,35;, + 3;36,37,38;, + 3;39,40,41;, + 3;42,43,44;, + 3;45,46,47;, + 3;48,49,44;, + 3;50,51,44;, + 3;52,53,54;, + 3;55,56,57;, + 3;58,59,54;, + 3;60,61,54;, + 3;12,14,13;, + 3;15,12,13;, + 3;16,17,62;, + 3;63,16,64;, + 3;18,19,65;, + 3;66,18,67;, + 3;20,21,68;, + 3;69,20,70;, + 3;22,23,71;, + 3;72,22,73;, + 3;74,75,76;, + 3;77,78,79;, + 3;80,81,82;, + 3;83,84,85;, + 3;86,87,82;, + 3;88,89,82;, + 3;90,91,92;, + 3;93,94,95;, + 3;96,97,92;, + 3;98,99,92;; + } + + MeshMaterialList { + 1; + 40; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0; + + Material { + 0.000000;0.000000;0.000000;0.000000;; + 20.000000; + 0.256863;0.256863;0.256863;; + 0.000000;0.000000;0.000000;; + } + } + + VertexDuplicationIndices { + 100; + 24; + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 2, + 0, + 2, + 5, + 4, + 5, + 7, + 6, + 7, + 9, + 8, + 9, + 3, + 1, + 11, + 10, + 3, + 11, + 2, + 5, + 1, + 5, + 7, + 1, + 7, + 9, + 9, + 11, + 4, + 0, + 3, + 6, + 4, + 3, + 8, + 6, + 10, + 8, + 14, + 12, + 14, + 17, + 16, + 17, + 19, + 18, + 19, + 21, + 20, + 21, + 15, + 13, + 23, + 22, + 15, + 23, + 14, + 17, + 13, + 17, + 19, + 13, + 19, + 21, + 21, + 23, + 16, + 12, + 15, + 18, + 16, + 15, + 20, + 18, + 22, + 20; + } + } + } +} \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/TextureSwap/Resources/bihull.bmp b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/Resources/bihull.bmp new file mode 100644 index 00000000..6b22f938 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/Resources/bihull.bmp differ diff --git a/source/Samples/DirectX/VB/Direct3D10/TextureSwap/Resources/wings.bmp b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/Resources/wings.bmp new file mode 100644 index 00000000..cbb5fbec Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/Resources/wings.bmp differ diff --git a/source/Samples/DirectX/VB/Direct3D10/TextureSwap/TextureSwap.sln b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/TextureSwap.sln new file mode 100644 index 00000000..584947ce --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/TextureSwap.sln @@ -0,0 +1,126 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TextureSwap", "TextureSwap.vbproj", "{318D173C-3D21-472C-905F-C37D7E7A66EC}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX.Direct3DX10", "..\..\..\UtilitiesLibrary\D3DX10Helpers\Direct3DX10.vcproj", "{453FF234-24EC-4CC3-83DA-6D6C54388899}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{BC405E41-0754-4D33-9CB7-49F27B9E0332}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utilities", "Utilities", "{5A188328-DBCC-442F-B0FA-48CEB925F110}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Direct3DUtilities", "..\..\UtilitiesLibrary\D3DUtilities\Direct3DUtilities.vbproj", "{8A152DCF-12AE-492B-9F24-060B90B2DDD0}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MeshLoader", "..\..\UtilitiesLibrary\MeshLoader\MeshLoader.vbproj", "{B28ADA8B-BD7E-4C11-8298-C39F7C456365}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Debug|x64.ActiveCfg = Debug|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release|Win32.ActiveCfg = Release|Any CPU + {318D173C-3D21-472C-905F-C37D7E7A66EC}.Release|x64.ActiveCfg = Release|Any CPU + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.ActiveCfg = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.Build.0 = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.ActiveCfg = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.Build.0 = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.Build.0 = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.ActiveCfg = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.Build.0 = Release|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Win32.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Win32.Build.0 = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|x64.ActiveCfg = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|x64.Build.0 = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Mixed Platforms.Build.0 = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Win32.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Win32.Build.0 = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|x64.ActiveCfg = Release|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|x64.Build.0 = Release|x64 + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Win32.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|x64.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Win32.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|x64.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Win32.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|x64.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Win32.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|x64.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Win32.ActiveCfg = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.ActiveCfg = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.Build.0 = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Win32.ActiveCfg = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.ActiveCfg = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.Build.0 = Release|x64 + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Win32.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|x64.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Win32.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|x64.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} = {BC405E41-0754-4D33-9CB7-49F27B9E0332} + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} = {BC405E41-0754-4D33-9CB7-49F27B9E0332} + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} = {BC405E41-0754-4D33-9CB7-49F27B9E0332} + {453FF234-24EC-4CC3-83DA-6D6C54388899} = {5A188328-DBCC-442F-B0FA-48CEB925F110} + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} = {5A188328-DBCC-442F-B0FA-48CEB925F110} + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} = {5A188328-DBCC-442F-B0FA-48CEB925F110} + {B28ADA8B-BD7E-4C11-8298-C39F7C456365} = {5A188328-DBCC-442F-B0FA-48CEB925F110} + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/VB/Direct3D10/TextureSwap/TextureSwap.vbproj b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/TextureSwap.vbproj new file mode 100644 index 00000000..d736914c --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/TextureSwap.vbproj @@ -0,0 +1,155 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {318D173C-3D21-472C-905F-C37D7E7A66EC} + WinExe + + + TextureSwap + v3.5 + On + Binary + Off + On + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + + 3.5 + + + + 3.5 + + + 3.5 + + + + + 3.0 + + + 3.0 + + + 3.0 + + + 3.0 + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + Application.xaml + Code + + + TexturizerDemo.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + PreserveNewest + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + {B28ADA8B-BD7E-4C11-8298-C39F7C456365} + MeshLoader + + + + + PreserveNewest + + + PreserveNewest + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/TextureSwap/TexturizerDemo.xaml b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/TexturizerDemo.xaml new file mode 100644 index 00000000..6b325516 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/TexturizerDemo.xaml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Show one texture at a time. + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D10/TextureSwap/TexturizerDemo.xaml.vb b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/TexturizerDemo.xaml.vb new file mode 100644 index 00000000..8a2c7b5c --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/TextureSwap/TexturizerDemo.xaml.vb @@ -0,0 +1,222 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows +Imports System.Windows.Controls +Imports System.Windows.Media.Media3D +Imports System.Windows.Threading +Imports Microsoft.WindowsAPICodePack.Controls +Imports Microsoft.WindowsAPICodePack.DirectX.Controls +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports Microsoft.WindowsAPICodePack.Shell + +Namespace TextureSwap + ''' + ''' Interaction logic for Window1.xaml + ''' + Partial Public Class TexturizerDemo + Inherits Window + #Region "instance data" + Private renderHost As RenderHost + Private device As D3DDevice + Private swapChain As SwapChain + Private renderTargetView As RenderTargetView + Private depthStencil As Texture2D + Private depthStencilView As DepthStencilView + Private backgroundColor As New ColorRgba(0.5F, 0.625F, 0.75F, 1.0F) + Private camera As PerspectiveCamera = Nothing + + Private meshManager As XMeshManager + Private mesh As Texturizer + + Private modelTransformGroup As New Transform3DGroup() + Private xAxisRotation As New AxisAngleRotation3D(New Vector3D(1, 0, 0), 0) + Private yAxisRotation As New AxisAngleRotation3D(New Vector3D(0, 1, 0), 0) + Private zAxisRotation As New AxisAngleRotation3D(New Vector3D(0, 0, 1), 0) + Private modelZoom As New ScaleTransform3D() + + Private timer As New DispatcherTimer() + #End Region + + #Region "construction" + Public Sub New() + InitializeComponent() + + renderHost = New RenderHost() + ControlHostElement.Child = renderHost + + AddHandler Loaded, AddressOf Window1_Loaded + AddHandler SizeChanged, AddressOf Window1_SizeChanged + End Sub + #End Region + + #Region "D3D Device Initialization" + Private Sub InitDevice() + ' create Direct 3D device + device = D3DDevice.CreateDeviceAndSwapChain(renderHost.Handle) + swapChain = device.SwapChain + + ' Create a render target view + Using pBuffer As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(pBuffer) + End Using + + ' Create depth stencil texture + Dim descDepth As New Texture2DDescription() With _ + { _ + .Width = CUInt(renderHost.ActualWidth), _ + .Height = CUInt(renderHost.ActualHeight), _ + .MipLevels = 1, _ + .ArraySize = 1, _ + .Format = Format.D32Float, _ + .SampleDescription = New SampleDescription() With {.Count = 1, .Quality = 0}, _ + .BindingOptions = BindingOptions.DepthStencil _ + } + + depthStencil = device.CreateTexture2D(descDepth) + + ' Create the depth stencil view + Dim depthStencilViewDesc As New DepthStencilViewDescription() With {.Format = descDepth.Format, .ViewDimension = DepthStencilViewDimension.Texture2D} + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc) + + ' bind the views to the device + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}, depthStencilView) + + ' Setup the viewport + Dim vp As New Viewport() With {.Width = CUInt(renderHost.ActualWidth), .Height = CUInt(renderHost.ActualHeight), .MinDepth = 0.0f, .MaxDepth = 1.0f, .TopLeftX = 0, .TopLeftY = 0} + + device.RS.Viewports = New Viewport() {vp} + End Sub + #End Region + + #Region "Scene Initialization" + Private Sub InitScene() + ' load mesh + meshManager = New XMeshManager(device) + mesh = meshManager.Open(Of Texturizer)("Resources\airplane 2.x") + + ' initialize camera + camera = New PerspectiveCamera(New Point3D(0, 0, -10), New Vector3D(0, 1, 0), New Vector3D(0, 1, 0), 45) + camera.NearPlaneDistance =.1 + camera.FarPlaneDistance = 500 + + ' initialize camera transforms + modelTransformGroup.Children.Add(modelZoom) + modelTransformGroup.Children.Add(New RotateTransform3D(yAxisRotation)) + modelTransformGroup.Children.Add(New RotateTransform3D(xAxisRotation)) + modelTransformGroup.Children.Add(New RotateTransform3D(zAxisRotation)) + End Sub + #End Region + + #Region "Rendering" + Private Sub timer_Tick(ByVal sender As Object, ByVal e As EventArgs) + RenderScene() + End Sub + + Protected Sub RenderScene() + ' update view variables + xAxisRotation.Angle = XAxisSlider.Value + yAxisRotation.Angle = -YAxisSlider.Value + zAxisRotation.Angle = ZAxisSlider.Value + modelZoom.ScaleX = ZoomSlider.Value / 2 + modelZoom.ScaleY = ZoomSlider.Value / 2 + modelZoom.ScaleZ = ZoomSlider.Value / 2 + + ' update view + meshManager.SetViewAndProjection(camera.ToViewLH().ToMatrix4x4F(), camera.ToPerspectiveLH(renderHost.ActualWidth / renderHost.ActualHeight).ToMatrix4x4F()) + + ' clear render target + device.ClearRenderTargetView(renderTargetView, backgroundColor) + + ' Clear the depth buffer to 1.0 (max depth) + device.ClearDepthStencilView(depthStencilView, ClearOptions.Depth, 1.0F, CByte(0)) + + ' render mesh + mesh.LightIntensity = 2.5f + mesh.Render(modelTransformGroup.Value) + + ' present back buffer + swapChain.Present(1, PresentOptions.None) + End Sub + #End Region + + #Region "UI event handlers" + Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) + InitDevice() + + InitScene() + + PartsList.ItemsSource = mesh.GetParts() + PartsList.SelectedIndex = 0 + + TextureBrowser.NavigationPane = PaneVisibilityState.Show + TextureBrowser.NavigationTarget = CType(KnownFolders.PicturesLibrary, ShellObject) + + timer.Interval = TimeSpan.FromMilliseconds(30) + AddHandler timer.Tick, AddressOf timer_Tick + timer.Start() + + ShowOneTextureCheck.IsChecked = True + End Sub + + Private Sub Window1_SizeChanged(ByVal sender As Object, ByVal e As SizeChangedEventArgs) + If device IsNot Nothing Then + 'need to remove the reference to the swapchain's backbuffer to enable ResizeBuffers() call + renderTargetView.Dispose() + Dim sd As SwapChainDescription = swapChain.Description + swapChain.ResizeBuffers(sd.BufferCount, CUInt(renderHost.ActualWidth), CUInt(renderHost.ActualHeight), sd.BufferDescription.Format, sd.Options) + + Using pBuffer As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(pBuffer) + End Using + + ' Create depth stencil texture + Dim descDepth As New Texture2DDescription() With {.Width = CUInt(renderHost.ActualWidth), .Height = CUInt(renderHost.ActualHeight), .MipLevels = 1, .ArraySize = 1, .Format = Format.D32Float, .SampleDescription = New SampleDescription() With {.Count = 1, .Quality = 0}, .BindingOptions = BindingOptions.DepthStencil} + + depthStencil = device.CreateTexture2D(descDepth) + + ' Create the depth stencil view + Dim depthStencilViewDesc As New DepthStencilViewDescription() With {.Format = descDepth.Format, .ViewDimension = DepthStencilViewDimension.Texture2D} + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc) + + ' bind the views to the device + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}, depthStencilView) + + ' Setup the viewport + Dim vp As New Viewport() With {.Width = CUInt(renderHost.ActualWidth), .Height = CUInt(renderHost.ActualHeight), .MinDepth = 0.0f, .MaxDepth = 1.0f, .TopLeftX = 0, .TopLeftY = 0} + + device.RS.Viewports = New Viewport() {vp} + End If + End Sub + + Private Sub PartsList_SelectionChanged(ByVal sender As Object, ByVal e As SelectionChangedEventArgs) + mesh.PartToTexture(CStr(PartsList.SelectedItem)) + End Sub + + Private Sub Button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + If TextureBrowser.SelectedItems.Count > 0 Then + Dim item As ShellObject = TextureBrowser.SelectedItems(0) + Try + Dim file As ShellFile = CType(item, ShellFile) + mesh.SwapTexture(CStr(PartsList.SelectedItem), file.Path) + Catch e1 As InvalidCastException + ' throws when item is not a shell file + End Try + End If + End Sub + + Private Sub RevertTextures_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + mesh.RevertTextures() + End Sub + + Private Sub ShowOneTexture_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + mesh.ShowOneTexture = CBool(ShowOneTextureCheck.IsChecked) + End Sub + #End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Application.xaml b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Application.xaml new file mode 100644 index 00000000..735442c6 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Application.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Application.xaml.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Application.xaml.vb new file mode 100644 index 00000000..5752df54 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Application.xaml.vb @@ -0,0 +1,17 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Configuration +Imports System.Windows + +Namespace D3D10Tutorial09_WPF + ''' + ''' Interaction logic for App.xaml + ''' + Partial Public Class App + Inherits Application + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/D3D10Tutorial09_WPF.vbproj b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/D3D10Tutorial09_WPF.vbproj new file mode 100644 index 00000000..ab92eb9a --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/D3D10Tutorial09_WPF.vbproj @@ -0,0 +1,130 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {790B3091-7B27-4062-B790-6FDE8C69EB7C} + WinExe + + + D3D10Tutorial09_WPF + v3.5 + On + Binary + Off + On + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + Application.xaml + Code + + + TutorialWindow.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + {B28ADA8B-BD7E-4C11-8298-C39F7C456365} + MeshLoader + + + + + PreserveNewest + + + PreserveNewest + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Media/Tiger/tiger.bmp b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Media/Tiger/tiger.bmp new file mode 100644 index 00000000..17a2f609 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Media/Tiger/tiger.bmp differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Media/Tiger/tiger.x b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Media/Tiger/tiger.x new file mode 100644 index 00000000..a727b50c --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/Media/Tiger/tiger.x @@ -0,0 +1,1371 @@ +xof 0302txt 0064 +template Header { + <3D82AB43-62DA-11cf-AB39-0020AF71E433> + WORD major; + WORD minor; + DWORD flags; +} + +template Vector { + <3D82AB5E-62DA-11cf-AB39-0020AF71E433> + FLOAT x; + FLOAT y; + FLOAT z; +} + +template Coords2d { + + FLOAT u; + FLOAT v; +} + +template Matrix4x4 { + + array FLOAT matrix[16]; +} + +template ColorRGBA { + <35FF44E0-6C7C-11cf-8F52-0040333594A3> + FLOAT red; + FLOAT green; + FLOAT blue; + FLOAT alpha; +} + +template ColorRGB { + + FLOAT red; + FLOAT green; + FLOAT blue; +} + +template IndexedColor { + <1630B820-7842-11cf-8F52-0040333594A3> + DWORD index; + ColorRGBA indexColor; +} + +template Boolean { + <4885AE61-78E8-11cf-8F52-0040333594A3> + WORD truefalse; +} + +template Boolean2d { + <4885AE63-78E8-11cf-8F52-0040333594A3> + Boolean u; + Boolean v; +} + +template MaterialWrap { + <4885AE60-78E8-11cf-8F52-0040333594A3> + Boolean u; + Boolean v; +} + +template TextureFilename { + + STRING filename; +} + +template Material { + <3D82AB4D-62DA-11cf-AB39-0020AF71E433> + ColorRGBA faceColor; + FLOAT power; + ColorRGB specularColor; + ColorRGB emissiveColor; + [...] +} + +template MeshFace { + <3D82AB5F-62DA-11cf-AB39-0020AF71E433> + DWORD nFaceVertexIndices; + array DWORD faceVertexIndices[nFaceVertexIndices]; +} + +template MeshFaceWraps { + <4885AE62-78E8-11cf-8F52-0040333594A3> + DWORD nFaceWrapValues; + Boolean2d faceWrapValues; +} + +template MeshTextureCoords { + + DWORD nTextureCoords; + array Coords2d textureCoords[nTextureCoords]; +} + +template MeshMaterialList { + + DWORD nMaterials; + DWORD nFaceIndexes; + array DWORD faceIndexes[nFaceIndexes]; + [Material] +} + +template MeshNormals { + + DWORD nNormals; + array Vector normals[nNormals]; + DWORD nFaceNormals; + array MeshFace faceNormals[nFaceNormals]; +} + +template MeshVertexColors { + <1630B821-7842-11cf-8F52-0040333594A3> + DWORD nVertexColors; + array IndexedColor vertexColors[nVertexColors]; +} + +template Mesh { + <3D82AB44-62DA-11cf-AB39-0020AF71E433> + DWORD nVertices; + array Vector vertices[nVertices]; + DWORD nFaces; + array MeshFace faces[nFaces]; + [...] +} + +template FrameTransformMatrix { + + Matrix4x4 frameMatrix; +} + +template Frame { + <3D82AB46-62DA-11cf-AB39-0020AF71E433> + [...] +} + +Header { + 1; + 0; + 1; +} + +Mesh Body1 { + 303; + 0.000000;-0.061426;0.938846;, + -0.049693;0.200773;0.692165;, + 0.000000;-0.031454;1.283610;, + 0.049693;-0.023019;0.950530;, + 0.032306;0.045667;0.971424;, + 0.000000;0.053280;0.973741;, + -0.032306;0.269459;0.713059;, + -0.023241;0.009165;1.505100;, + 0.000000;0.277072;0.715376;, + 0.000000;0.014811;1.504150;, + 0.049693;-0.111196;1.282310;, + 0.032306;-0.039411;1.283480;, + 0.023242;0.009165;1.505100;, + 0.035751;-0.041767;1.513680;, + 0.032306;0.269459;0.713059;, + 0.049693;0.200773;0.692165;, + 0.000000;0.162366;0.680481;, + -0.032306;0.045667;0.971424;, + -0.049693;-0.023019;0.950530;, + 0.000000;-0.151335;1.281660;, + 0.000000;-0.070246;1.518480;, + -0.049693;-0.111196;1.282310;, + -0.035750;-0.041767;1.513680;, + -0.032306;-0.039411;1.283480;, + 0.000000;-0.139499;-0.804149;, + 0.000000;-0.196023;-0.643914;, + 0.000000;0.207794;-1.162700;, + 0.000000;0.342375;-1.510260;, + 0.000000;-0.232522;-0.216349;, + 0.109118;-0.119018;0.100709;, + -0.109118;-0.119018;0.100709;, + 0.000000;-0.154873;0.103656;, + 0.030101;-0.105174;0.316078;, + 0.000000;-0.112314;0.317509;, + 0.000000;0.112303;0.506078;, + -0.030101;-0.105174;0.316078;, + -0.028761;-0.037815;0.439801;, + 0.028761;-0.037815;0.439801;, + 0.081739;-0.203143;0.439706;, + 0.065936;-0.238012;0.335711;, + 0.020142;-0.108242;0.303668;, + 0.114666;-0.167257;0.149229;, + 0.116086;-0.276934;0.217803;, + 0.090034;-0.382159;0.456303;, + -0.114666;-0.167257;0.149229;, + -0.116086;-0.276934;0.217803;, + -0.020142;-0.108242;0.303668;, + -0.090034;-0.382159;0.456303;, + -0.081739;-0.203143;0.439706;, + -0.076865;-0.377381;0.378108;, + -0.065936;-0.238012;0.335711;, + 0.076865;-0.377381;0.378108;, + -0.077999;-0.438418;0.363464;, + -0.094725;-0.687984;0.346619;, + -0.119790;-0.424686;0.304048;, + -0.160820;-0.602659;0.286432;, + -0.190992;-0.614722;0.342338;, + -0.168141;-0.687707;0.257272;, + -0.151771;-0.687980;0.349147;, + -0.203745;-0.687917;0.313177;, + -0.128500;-0.687445;0.237457;, + -0.079186;-0.687932;0.310966;, + -0.165267;-0.602291;0.204563;, + -0.076312;-0.617099;0.236559;, + -0.125626;-0.603366;0.203812;, + -0.127225;-0.603735;0.285509;, + -0.085434;-0.617617;0.340127;, + -0.068939;-0.687414;0.212852;, + -0.118657;-0.370966;0.289767;, + -0.153385;-0.423611;0.305410;, + -0.215919;-0.687399;0.214649;, + -0.200870;-0.614472;0.257455;, + -0.204332;-0.687587;0.149699;, + -0.191896;-0.646208;0.173407;, + -0.162472;-0.639473;0.139614;, + -0.173907;-0.687338;0.180856;, + -0.169612;-0.687553;0.115905;, + -0.129710;-0.640081;0.138863;, + -0.127130;-0.687344;0.180105;, + -0.130953;-0.687556;0.115154;, + -0.088955;-0.647844;0.171610;, + -0.082862;-0.687595;0.147901;, + -0.091167;-0.448646;0.416058;, + -0.146947;-0.626975;0.378308;, + -0.098602;-0.627845;0.375781;, + -0.183557;-0.435523;0.366725;, + -0.139512;-0.447776;0.419786;, + -0.036911;-0.131458;-0.800774;, + -0.114132;-0.130986;-0.893785;, + -0.218544;-0.657847;-0.902645;, + -0.171757;-0.532488;-0.896119;, + -0.073996;0.255722;-1.483520;, + -0.051230;0.326389;-1.504150;, + -0.065011;0.221538;-1.464050;, + 0.104586;-0.228675;-0.692703;, + 0.091167;-0.448646;0.416057;, + 0.077999;-0.438418;0.363464;, + 0.098603;-0.627845;0.375781;, + 0.094725;-0.687984;0.346619;, + 0.119790;-0.424686;0.304048;, + 0.165267;-0.602291;0.204563;, + 0.085434;-0.617617;0.340127;, + 0.127225;-0.603735;0.285508;, + 0.125626;-0.603366;0.203812;, + 0.076312;-0.617099;0.236559;, + 0.118657;-0.370966;0.289767;, + 0.204332;-0.687587;0.149699;, + 0.162472;-0.639473;0.139614;, + 0.191896;-0.646208;0.173407;, + 0.169612;-0.687553;0.115905;, + 0.129710;-0.640081;0.138863;, + 0.068939;-0.687414;0.212852;, + 0.127130;-0.687344;0.180104;, + 0.082862;-0.687595;0.147901;, + 0.088955;-0.647844;0.171610;, + 0.130953;-0.687556;0.115154;, + 0.153385;-0.423611;0.305410;, + 0.160820;-0.602659;0.286432;, + 0.168141;-0.687707;0.257271;, + 0.128500;-0.687445;0.237457;, + 0.079186;-0.687932;0.310966;, + 0.203745;-0.687917;0.313177;, + 0.173907;-0.687338;0.180856;, + 0.215919;-0.687399;0.214649;, + 0.200870;-0.614472;0.257455;, + 0.190992;-0.614722;0.342338;, + 0.146947;-0.626975;0.378308;, + 0.151771;-0.687979;0.349147;, + 0.183557;-0.435523;0.366725;, + 0.139512;-0.447776;0.419786;, + 0.113246;-0.558335;-0.752050;, + -0.113029;-0.558335;-0.752050;, + -0.058263;-0.180258;-0.792372;, + -0.104586;-0.228675;-0.692703;, + 0.058263;-0.180258;-0.792372;, + 0.114132;-0.130986;-0.893785;, + 0.036911;-0.131458;-0.800774;, + 0.000000;-0.004469;-0.968083;, + 0.000000;0.159119;-1.080890;, + 0.055861;-0.654043;-0.907268;, + 0.079285;-0.545055;-0.826090;, + -0.189298;-0.627377;-1.035100;, + -0.177878;-0.680291;-1.082760;, + -0.214254;-0.664213;-1.040040;, + -0.161256;-0.660443;-1.077820;, + -0.124653;-0.659096;-1.077490;, + -0.108039;-0.624876;-1.034770;, + -0.052024;-0.654043;-0.907268;, + -0.078756;-0.545055;-0.826090;, + -0.111125;-0.618182;-0.950786;, + -0.184997;-0.620703;-0.947721;, + -0.120091;-0.531540;-0.901424;, + -0.093467;-0.697089;-1.086940;, + -0.177140;-0.697089;-1.086940;, + -0.095368;-0.678258;-1.082250;, + -0.184330;-0.689285;-0.864494;, + -0.228502;-0.695391;-1.044220;, + -0.042748;-0.695391;-1.044220;, + -0.054974;-0.660441;-1.039530;, + -0.101027;-0.689285;-0.864498;, + 0.065548;-0.695391;-1.044220;, + 0.092340;-0.696620;-1.085760;, + 0.102919;-0.689285;-0.864498;, + 0.192799;-0.696619;-1.085760;, + 0.099554;-0.677289;-1.081080;, + 0.127676;-0.657618;-1.076310;, + 0.072960;-0.660441;-1.039310;, + 0.120245;-0.531540;-0.901424;, + 0.112616;-0.618182;-0.950786;, + 0.109653;-0.624877;-1.034770;, + 0.187687;-0.627377;-1.035100;, + 0.178790;-0.679375;-1.081580;, + 0.162827;-0.659001;-1.076650;, + 0.000000;0.194767;-1.453810;, + 0.073996;0.255722;-1.483520;, + 0.000000;0.286217;-1.518480;, + 0.051230;0.326388;-1.504150;, + 0.000000;0.213784;-1.355750;, + 0.065011;0.221538;-1.464050;, + 0.182916;-0.689285;-0.864494;, + 0.171441;-0.532488;-0.896119;, + 0.183557;-0.620703;-0.947721;, + 0.215773;-0.657847;-0.902646;, + 0.220422;-0.695391;-1.044220;, + 0.212566;-0.664214;-1.039820;, + 0.067091;-0.158537;-0.643915;, + 0.130206;-0.193912;-0.216350;, + 0.077416;0.007999;-0.964709;, + 0.183964;-0.134440;-0.886644;, + 0.170979;-0.558332;-0.752044;, + 0.194691;-0.546486;-0.818088;, + 0.096383;0.183917;-1.077510;, + 0.102550;0.289818;-1.155630;, + -0.067091;-0.158537;-0.643915;, + -0.130206;-0.193912;-0.216350;, + -0.077416;0.007999;-0.964709;, + 0.000000;0.216114;-1.244810;, + 0.000000;0.218816;-1.313860;, + -0.183964;-0.134440;-0.886644;, + -0.195220;-0.546486;-0.818088;, + -0.171291;-0.558332;-0.752044;, + -0.102550;0.289818;-1.155630;, + -0.096383;0.183918;-1.077510;, + -0.203324;-0.000186;-0.216355;, + 0.000000;0.461380;-0.216367;, + -0.132354;0.415323;-0.216366;, + 0.000000;0.483721;-1.426860;, + 0.000000;0.505008;0.184315;, + -0.083623;0.454487;-1.419150;, + -0.097980;0.599269;-1.043210;, + -0.150776;0.396113;-1.068880;, + 0.000000;0.668371;-1.244740;, + 0.000000;0.660052;-1.123730;, + 0.083623;0.454486;-1.419150;, + 0.000000;0.601379;-1.384240;, + 0.000000;0.628851;-1.039190;, + 0.097980;0.599268;-1.043210;, + 0.150776;0.396113;-1.068880;, + 0.000000;0.588297;-0.907439;, + 0.132354;0.415323;-0.216366;, + 0.203324;-0.000186;-0.216355;, + 0.215676;-0.176166;-0.795945;, + 0.177974;0.258210;-0.971413;, + 0.115772;0.548952;-0.911464;, + 0.143614;0.490599;-0.781781;, + 0.183334;-0.228667;-0.692694;, + 0.215131;0.109326;-0.825489;, + 0.115870;0.444022;-0.665901;, + 0.178124;0.029546;-0.643920;, + 0.160357;0.437455;-1.137120;, + 0.226298;0.365261;-1.243240;, + 0.105258;0.370388;-1.397000;, + 0.104248;0.611072;-1.127950;, + 0.082255;0.262741;-1.368650;, + 0.192870;0.403955;-1.341710;, + 0.166988;0.246562;-1.244800;, + 0.153069;0.277384;-1.326760;, + 0.089221;0.645525;-1.244750;, + 0.139971;0.697089;-1.334440;, + 0.177051;0.542720;-1.241680;, + 0.126150;0.594872;-1.338400;, + 0.041587;0.120377;0.505592;, + 0.067583;0.283180;0.536543;, + 0.104568;0.447773;0.443333;, + 0.000000;0.391487;0.530735;, + 0.043936;0.380679;0.531314;, + 0.149273;0.477514;0.293496;, + 0.172353;-0.275740;0.220239;, + 0.139752;-0.200327;0.446770;, + 0.152251;-0.370463;0.291793;, + 0.192606;-0.235087;0.341477;, + 0.138378;-0.381752;0.461846;, + 0.182423;-0.376028;0.382956;, + 0.160847;0.216311;0.499174;, + 0.116618;-0.015705;0.448978;, + 0.110923;0.461129;0.163966;, + 0.229189;0.099215;0.308897;, + 0.213423;-0.066057;0.311063;, + 0.176064;-0.153352;0.152359;, + 0.170561;0.060886;0.085922;, + -0.215676;-0.176166;-0.795945;, + -0.177974;0.258210;-0.971413;, + -0.115772;0.548952;-0.911464;, + -0.143614;0.490599;-0.781781;, + 0.000000;0.488737;-0.665903;, + 0.000000;0.534271;-0.777755;, + -0.183334;-0.228667;-0.692694;, + -0.215131;0.109326;-0.825489;, + -0.178124;0.029546;-0.643920;, + -0.115870;0.444022;-0.665901;, + -0.160357;0.437455;-1.137120;, + -0.226298;0.365261;-1.243240;, + -0.105258;0.370388;-1.397000;, + -0.104248;0.611072;-1.127950;, + -0.166988;0.246562;-1.244800;, + -0.192870;0.403955;-1.341710;, + -0.082255;0.262741;-1.368650;, + -0.153069;0.277384;-1.326760;, + -0.089221;0.645525;-1.244750;, + -0.139971;0.697089;-1.334440;, + -0.126150;0.594872;-1.338400;, + -0.177051;0.542720;-1.241680;, + -0.041587;0.120377;0.505592;, + 0.000000;0.228662;0.539467;, + 0.000000;0.519446;0.291789;, + -0.149273;0.477514;0.293496;, + -0.172353;-0.275740;0.220239;, + -0.139752;-0.200327;0.446770;, + -0.138378;-0.381752;0.461846;, + -0.192606;-0.235087;0.341477;, + -0.152251;-0.370463;0.291794;, + -0.182423;-0.376028;0.382957;, + -0.116618;-0.015705;0.448978;, + -0.160847;0.216311;0.499174;, + 0.000000;0.469387;0.442753;, + -0.104568;0.447772;0.443333;, + -0.067583;0.283180;0.536543;, + -0.043936;0.380679;0.531314;, + -0.110923;0.461129;0.163966;, + -0.229189;0.099215;0.308897;, + -0.170561;0.060886;0.085922;, + -0.176064;-0.153352;0.152359;, + -0.213423;-0.066057;0.311063;; + + 599; + 3;300,301,302;, + 3;299,300,302;, + 3;298,300,299;, + 3;295,296,297;, + 3;294,295,297;, + 3;299,292,293;, + 3;302,292,299;, + 3;289,290,291;, + 3;288,289,291;, + 3;287,289,288;, + 3;286,290,289;, + 3;287,292,302;, + 3;289,287,302;, + 3;286,302,301;, + 3;289,302,286;, + 3;284,298,285;, + 3;294,284,285;, + 3;293,282,283;, + 3;296,293,283;, + 3;295,294,285;, + 3;292,282,293;, + 3;295,293,296;, + 3;293,295,285;, + 3;285,299,293;, + 3;298,299,285;, + 3;279,280,281;, + 3;278,280,279;, + 3;281,278,279;, + 3;275,276,277;, + 3;274,275,277;, + 3;273,278,281;, + 3;272,276,275;, + 3;271,275,274;, + 3;280,272,275;, + 3;270,271,274;, + 3;270,273,281;, + 3;281,280,275;, + 3;271,270,281;, + 3;275,271,281;, + 3;267,268,269;, + 3;266,268,267;, + 3;263,264,265;, + 3;262,263,265;, + 3;269,264,263;, + 3;261,263,262;, + 3;260,266,267;, + 3;267,269,263;, + 3;261,260,267;, + 3;263,261,267;, + 3;257,258,259;, + 3;256,257,259;, + 3;255,256,259;, + 3;256,253,254;, + 3;257,256,254;, + 3;250,251,252;, + 3;249,250,252;, + 3;248,251,250;, + 3;247,250,249;, + 3;247,258,257;, + 3;248,257,254;, + 3;250,257,248;, + 3;250,247,257;, + 3;246,255,284;, + 3;294,246,284;, + 3;243,244,245;, + 3;294,244,243;, + 3;253,245,242;, + 3;241,253,242;, + 3;246,294,243;, + 3;254,253,241;, + 3;243,245,253;, + 3;253,246,243;, + 3;246,253,256;, + 3;255,246,256;, + 3;238,239,240;, + 3;237,238,240;, + 3;239,238,237;, + 3;234,235,236;, + 3;233,234,236;, + 3;232,239,237;, + 3;231,234,233;, + 3;240,234,231;, + 3;230,235,234;, + 3;229,235,230;, + 3;229,239,232;, + 3;239,234,240;, + 3;230,239,229;, + 3;230,234,239;, + 3;226,227,228;, + 3;225,226,228;, + 3;224,265,264;, + 3;227,224,264;, + 3;223,265,224;, + 3;222,223,224;, + 3;221,226,225;, + 3;226,224,227;, + 3;222,226,221;, + 3;224,226,222;, + 3;219,220,228;, + 3;218,265,223;, + 3;217,223,222;, + 3;216,223,217;, + 3;229,216,217;, + 3;216,215,218;, + 3;232,215,216;, + 3;232,216,229;, + 3;223,216,218;, + 3;213,214,240;, + 3;231,213,240;, + 3;237,211,212;, + 3;211,240,214;, + 3;237,240,211;, + 3;212,215,232;, + 3;237,212,232;, + 3;209,270,210;, + 3;209,215,273;, + 3;273,270,209;, + 3;208,272,280;, + 3;278,212,211;, + 3;214,208,280;, + 3;280,278,211;, + 3;212,273,215;, + 3;278,273,212;, + 3;207,298,284;, + 3;207,284,255;, + 3;206,208,214;, + 3;213,206,214;, + 3;218,262,265;, + 3;209,262,218;, + 3;215,209,218;, + 3;210,262,209;, + 3;261,262,210;, + 3;214,280,211;, + 3;297,244,294;, + 3;219,207,255;, + 3;205,298,207;, + 3;204,207,219;, + 3;204,205,207;, + 3;227,204,219;, + 3;228,227,219;, + 3;205,268,203;, + 3;269,268,205;, + 3;269,205,204;, + 3;210,201,202;, + 3;261,210,202;, + 3;199,200,260;, + 3;198,199,260;, + 3;270,201,210;, + 3;197,277,276;, + 3;274,197,196;, + 3;201,274,196;, + 3;277,197,274;, + 3;270,274,201;, + 3;195,261,202;, + 3;266,260,200;, + 3;198,261,195;, + 3;203,193,194;, + 3;300,203,194;, + 3;268,193,203;, + 3;260,261,198;, + 3;229,217,192;, + 3;191,192,217;, + 3;222,191,217;, + 3;221,189,190;, + 3;188,221,190;, + 3;197,233,236;, + 3;235,196,197;, + 3;192,196,235;, + 3;236,235,197;, + 3;229,192,235;, + 3;187,191,222;, + 3;225,189,221;, + 3;188,187,222;, + 3;220,259,186;, + 3;185,220,186;, + 3;228,220,185;, + 3;221,188,222;, + 3;182,183,184;, + 3;181,182,184;, + 3;180,182,181;, + 3;190,179,182;, + 3;190,182,180;, + 3;233,177,178;, + 3;231,233,178;, + 3;174,175,176;, + 3;173,178,177;, + 3;175,178,173;, + 3;174,213,231;, + 3;176,213,174;, + 3;174,178,175;, + 3;178,174,231;, + 3;170,171,172;, + 3;169,170,172;, + 3;184,171,170;, + 3;170,168,181;, + 3;169,168,170;, + 3;170,181,184;, + 3;167,181,168;, + 3;180,181,167;, + 3;165,166,169;, + 3;164,166,165;, + 3;172,165,169;, + 3;163,184,183;, + 3;171,184,163;, + 3;179,189,162;, + 3;163,161,164;, + 3;165,172,171;, + 3;164,165,171;, + 3;163,164,171;, + 3;183,161,163;, + 3;160,161,183;, + 3;190,189,179;, + 3;179,160,183;, + 3;162,160,179;, + 3;179,183,182;, + 3;157,158,159;, + 3;166,160,162;, + 3;157,155,156;, + 3;159,155,157;, + 3;152,153,154;, + 3;157,154,158;, + 3;152,154,157;, + 3;149,150,151;, + 3;148,149,151;, + 3;147,149,148;, + 3;145,146,158;, + 3;154,145,158;, + 3;145,144,146;, + 3;142,153,143;, + 3;141,142,143;, + 3;156,143,153;, + 3;144,142,141;, + 3;141,150,149;, + 3;146,144,141;, + 3;142,154,153;, + 3;145,154,142;, + 3;144,145,142;, + 3;149,146,141;, + 3;146,147,158;, + 3;149,147,146;, + 3;159,158,147;, + 3;168,139,140;, + 3;169,139,168;, + 3;166,139,169;, + 3;167,168,140;, + 3;162,139,166;, + 3;164,161,160;, + 3;166,164,160;, + 3;187,137,138;, + 3;191,187,138;, + 4;152,157,156,153;, + 3;136,137,187;, + 3;135,136,187;, + 3;187,188,135;, + 3;135,188,180;, + 3;134,185,136;, + 3;135,134,136;, + 3;148,132,133;, + 3;131,148,133;, + 3;151,132,148;, + 3;130,139,162;, + 3;140,139,130;, + 3;159,131,200;, + 3;155,159,200;, + 3;147,131,159;, + 3;148,131,147;, + 3;129,252,251;, + 3;128,249,252;, + 3;128,252,129;, + 3;125,126,127;, + 3;125,123,124;, + 3;121,122,123;, + 3;121,127,120;, + 3;119,121,120;, + 3;118,121,119;, + 3;122,121,118;, + 3;125,121,123;, + 3;117,125,124;, + 3;116,125,117;, + 3;128,125,116;, + 3;125,127,121;, + 3;126,125,128;, + 3;113,114,115;, + 3;112,113,115;, + 3;111,113,112;, + 3;110,115,114;, + 3;109,115,110;, + 3;115,109,122;, + 3;122,112,115;, + 3;106,107,108;, + 3;109,107,106;, + 3;106,124,123;, + 3;108,124,106;, + 3;110,107,109;, + 3;123,122,109;, + 3;109,106,123;, + 3;116,249,128;, + 3;105,249,116;, + 3;103,110,104;, + 3;103,101,102;, + 3;104,101,103;, + 3;103,100,107;, + 3;110,103,107;, + 3;100,103,102;, + 3;119,111,112;, + 3;114,104,110;, + 3;108,107,100;, + 3;112,122,118;, + 3;118,119,112;, + 3;117,100,102;, + 3;124,100,117;, + 3;100,124,108;, + 3;99,105,116;, + 3;120,101,104;, + 3;111,104,114;, + 3;111,119,120;, + 3;111,114,113;, + 3;104,111,120;, + 3;98,120,127;, + 3;97,120,98;, + 3;101,120,97;, + 3;101,95,96;, + 3;97,95,101;, + 3;102,101,96;, + 3;126,97,98;, + 3;126,98,127;, + 3;129,95,97;, + 3;99,102,96;, + 3;117,102,99;, + 3;126,129,97;, + 3;116,117,99;, + 3;128,129,126;, + 3;185,134,94;, + 3;94,228,185;, + 3;228,94,225;, + 3;140,130,94;, + 3;130,162,189;, + 3;130,225,94;, + 3;225,130,189;, + 3;167,140,134;, + 3;134,140,94;, + 3;134,135,167;, + 3;167,135,180;, + 3;190,180,188;, + 3;199,155,200;, + 3;93,177,276;, + 3;272,93,276;, + 3;91,92,175;, + 3;173,177,93;, + 3;175,173,93;, + 3;91,272,208;, + 3;92,91,208;, + 3;91,175,93;, + 3;93,272,91;, + 3;90,151,150;, + 3;90,89,199;, + 3;89,90,150;, + 3;141,143,150;, + 3;143,89,150;, + 3;156,89,143;, + 3;89,155,199;, + 3;155,89,156;, + 3;198,88,90;, + 3;151,90,88;, + 3;199,198,90;, + 3;138,137,195;, + 3;202,138,195;, + 3;87,195,137;, + 3;88,195,87;, + 3;88,198,195;, + 3;87,193,132;, + 3;88,87,132;, + 3;86,288,291;, + 3;85,86,291;, + 3;85,291,290;, + 3;86,83,84;, + 3;82,86,84;, + 3;85,83,86;, + 3;79,80,81;, + 3;78,79,81;, + 3;77,80,79;, + 3;76,77,79;, + 3;75,79,78;, + 3;76,79,75;, + 3;72,73,74;, + 3;76,72,74;, + 3;77,76,74;, + 3;72,70,71;, + 3;73,72,71;, + 3;76,75,70;, + 3;72,76,70;, + 3;69,85,290;, + 3;68,69,290;, + 3;67,78,81;, + 3;64,65,66;, + 3;63,64,66;, + 3;77,64,63;, + 3;64,74,62;, + 3;77,74,64;, + 3;62,65,64;, + 3;80,77,63;, + 3;59,60,61;, + 3;58,59,61;, + 3;57,60,59;, + 3;74,73,62;, + 3;56,59,58;, + 3;55,65,62;, + 3;78,60,57;, + 3;75,78,57;, + 3;67,60,78;, + 3;71,55,62;, + 3;56,55,71;, + 3;73,71,62;, + 3;56,70,59;, + 3;71,70,56;, + 3;59,75,57;, + 3;70,75,59;, + 3;54,69,68;, + 3;81,80,67;, + 3;61,63,66;, + 3;67,61,60;, + 3;63,61,67;, + 3;80,63,67;, + 3;61,84,53;, + 3;58,61,53;, + 3;66,84,61;, + 3;82,84,66;, + 3;52,82,66;, + 3;65,52,66;, + 3;83,56,58;, + 3;83,58,53;, + 3;84,83,53;, + 3;54,52,65;, + 3;55,54,65;, + 3;69,54,55;, + 3;56,69,55;, + 3;85,69,56;, + 3;56,83,85;, + 3;133,132,193;, + 3;193,268,133;, + 3;266,133,268;, + 3;266,131,133;, + 3;200,131,266;, + 3;132,151,88;, + 3;51,105,99;, + 3;49,68,50;, + 3;47,48,287;, + 3;288,47,287;, + 3;82,47,288;, + 3;49,52,54;, + 3;68,49,54;, + 3;82,52,47;, + 3;49,48,47;, + 3;50,48,49;, + 3;49,47,52;, + 3;96,51,99;, + 3;45,46,50;, + 3;44,46,45;, + 3;44,286,301;, + 3;45,286,44;, + 3;45,290,286;, + 3;68,290,45;, + 3;68,45,50;, + 3;86,82,288;, + 3;95,251,43;, + 3;96,95,43;, + 3;51,96,43;, + 3;129,251,95;, + 3;40,41,42;, + 3;39,40,42;, + 3;247,42,41;, + 3;249,42,247;, + 3;105,42,249;, + 3;105,39,42;, + 3;258,247,41;, + 3;51,38,39;, + 3;43,38,51;, + 3;105,51,39;, + 3;248,38,43;, + 3;251,248,43;, + 3;38,248,254;, + 3;37,38,254;, + 3;37,40,39;, + 3;38,37,39;, + 3;36,48,50;, + 3;46,36,50;, + 3;35,46,44;, + 3;282,36,46;, + 3;33,34,282;, + 3;241,34,33;, + 3;32,241,33;, + 3;35,282,46;, + 3;33,282,35;, + 3;31,32,33;, + 3;35,31,33;, + 3;30,31,35;, + 3;292,48,36;, + 3;44,301,30;, + 3;30,301,300;, + 3;287,48,292;, + 3;44,30,35;, + 3;32,41,40;, + 3;28,29,31;, + 3;241,40,37;, + 3;32,40,241;, + 3;32,31,29;, + 3;28,31,30;, + 3;29,259,258;, + 3;258,41,29;, + 3;29,41,32;, + 3;186,29,28;, + 3;29,186,259;, + 3;254,241,37;, + 3;282,292,36;, + 3;27,176,175;, + 3;92,27,175;, + 3;27,92,206;, + 3;176,27,206;, + 3;197,177,233;, + 3;177,197,276;, + 3;208,206,92;, + 3;213,176,206;, + 3;26,196,192;, + 3;26,201,196;, + 3;191,26,192;, + 3;138,26,191;, + 3;26,138,202;, + 3;202,201,26;, + 3;24,185,25;, + 3;193,24,25;, + 3;136,185,24;, + 3;87,24,193;, + 3;24,87,137;, + 3;137,136,24;, + 3;194,30,300;, + 3;194,28,30;, + 3;25,28,194;, + 3;21,22,23;, + 3;20,22,21;, + 3;19,20,21;, + 3;19,21,18;, + 3;21,17,18;, + 3;23,17,21;, + 3;15,16,283;, + 3;283,241,242;, + 3;14,242,245;, + 3;15,242,14;, + 3;283,242,15;, + 3;13,22,20;, + 3;19,13,20;, + 3;10,11,12;, + 3;11,9,12;, + 3;8,245,244;, + 3;14,245,8;, + 4;12,7,22,13;, + 3;9,7,12;, + 3;12,13,10;, + 3;10,13,19;, + 3;6,244,297;, + 3;8,6,17;, + 3;5,8,17;, + 3;14,5,4;, + 3;8,5,14;, + 3;244,6,8;, + 3;3,15,4;, + 3;4,15,14;, + 3;3,16,15;, + 3;4,2,11;, + 3;5,2,4;, + 3;3,4,11;, + 3;16,296,283;, + 3;1,296,16;, + 3;1,297,296;, + 3;6,297,1;, + 3;2,7,9;, + 3;23,7,2;, + 3;22,7,23;, + 3;0,18,1;, + 3;16,0,1;, + 4;17,6,1,18;, + 3;3,0,16;, + 3;34,241,283;, + 3;282,34,283;, + 3;11,2,9;, + 3;23,2,5;, + 3;23,5,17;, + 3;10,3,11;, + 3;18,0,19;, + 3;0,3,10;, + 3;19,0,10;, + 3;25,185,186;, + 3;28,25,186;, + 3;193,25,194;, + 3;264,269,204;, + 3;227,264,204;, + 3;255,220,219;, + 3;259,220,255;, + 3;298,205,203;, + 3;300,298,203;; + + MeshMaterialList { + 1; + 1; + 0;; + Material { + 0.694118;0.694118;0.694118;1.000000;; + 50.000000; + 1.000000;1.000000;1.000000;; + 0.000000;0.000000;0.000000;; + TextureFilename { + "tiger.bmp"; + } + } + } + MeshTextureCoords { + 303; + 0.190860;-0.544059;, + 0.272086;-0.355992;, + 0.077337;-0.522561;, + 0.187013;-0.516511;, + 0.180133;-0.467245;, + 0.179370;-0.461784;, + 0.265206;-0.306726;, + 0.004406;-0.493426;, + 0.264443;-0.301265;, + 0.004719;-0.489377;, + 0.077765;-0.579757;, + 0.077380;-0.528268;, + 0.004406;-0.493426;, + 0.001581;-0.529958;, + 0.265206;-0.306726;, + 0.272086;-0.355992;, + 0.275933;-0.383540;, + 0.180133;-0.467245;, + 0.187013;-0.516511;, + 0.077979;-0.608548;, + 0.000000;-0.550385;, + 0.077765;-0.579757;, + 0.001581;-0.529958;, + 0.077380;-0.528268;, + 0.764787;-0.600058;, + 0.712026;-0.640601;, + 0.882850;-0.350956;, + 0.997293;-0.254425;, + 0.571239;-0.666781;, + 0.466839;-0.585368;, + 0.466839;-0.585368;, + 0.465868;-0.611086;, + 0.395923;-0.575438;, + 0.395452;-0.580559;, + 0.333360;-0.419449;, + 0.395923;-0.575438;, + 0.355184;-0.527123;, + 0.355184;-0.527123;, + 0.355215;-0.645708;, + 0.389458;-0.670719;, + 0.400009;-0.577639;, + 0.450862;-0.619968;, + 0.428283;-0.698636;, + 0.349750;-0.774111;, + 0.450862;-0.619968;, + 0.428283;-0.698636;, + 0.400009;-0.577639;, + 0.349750;-0.774111;, + 0.355215;-0.645708;, + 0.375498;-0.770684;, + 0.389458;-0.670719;, + 0.375498;-0.770684;, + 0.380320;-0.814463;, + 0.385866;-0.993469;, + 0.399884;-0.804614;, + 0.405685;-0.932268;, + 0.387276;-0.940921;, + 0.415286;-0.993271;, + 0.385034;-0.993466;, + 0.396878;-0.993421;, + 0.421811;-0.993083;, + 0.397606;-0.993432;, + 0.432642;-0.932004;, + 0.422107;-0.942626;, + 0.432889;-0.932775;, + 0.405989;-0.933040;, + 0.388004;-0.942997;, + 0.429913;-0.993060;, + 0.404586;-0.766082;, + 0.399436;-0.803843;, + 0.429321;-0.993050;, + 0.415226;-0.940741;, + 0.450708;-0.993185;, + 0.442901;-0.963505;, + 0.454028;-0.958674;, + 0.440448;-0.993006;, + 0.461835;-0.993160;, + 0.454276;-0.959110;, + 0.440696;-0.993010;, + 0.462082;-0.993162;, + 0.443493;-0.964678;, + 0.451300;-0.993190;, + 0.363002;-0.821800;, + 0.375432;-0.949709;, + 0.376264;-0.950333;, + 0.379246;-0.812387;, + 0.361774;-0.821176;, + 0.763676;-0.594291;, + 0.794303;-0.593952;, + 0.797220;-0.971853;, + 0.795071;-0.881937;, + 0.988489;-0.316579;, + 0.995281;-0.265891;, + 0.982078;-0.341098;, + 0.728091;-0.664021;, + 0.363002;-0.821800;, + 0.380320;-0.814463;, + 0.376264;-0.950333;, + 0.385866;-0.993469;, + 0.399884;-0.804614;, + 0.432642;-0.932004;, + 0.388004;-0.942997;, + 0.405989;-0.933040;, + 0.432889;-0.932775;, + 0.422107;-0.942626;, + 0.404586;-0.766082;, + 0.450708;-0.993185;, + 0.454028;-0.958674;, + 0.442901;-0.963505;, + 0.461835;-0.993160;, + 0.454276;-0.959110;, + 0.429913;-0.993060;, + 0.440696;-0.993010;, + 0.451300;-0.993190;, + 0.443493;-0.964678;, + 0.462082;-0.993162;, + 0.399436;-0.803843;, + 0.405685;-0.932268;, + 0.415287;-0.993271;, + 0.421811;-0.993083;, + 0.397606;-0.993432;, + 0.396878;-0.993421;, + 0.440448;-0.993006;, + 0.429321;-0.993050;, + 0.415226;-0.940741;, + 0.387276;-0.940921;, + 0.375432;-0.949709;, + 0.385034;-0.993466;, + 0.379246;-0.812387;, + 0.361774;-0.821176;, + 0.747633;-0.900476;, + 0.747633;-0.900476;, + 0.760910;-0.629293;, + 0.728091;-0.664021;, + 0.760910;-0.629293;, + 0.794303;-0.593952;, + 0.763676;-0.594291;, + 0.818767;-0.503206;, + 0.855912;-0.385869;, + 0.798742;-0.969124;, + 0.772012;-0.890951;, + 0.840834;-0.949998;, + 0.856528;-0.987951;, + 0.842461;-0.976419;, + 0.854901;-0.973715;, + 0.854792;-0.972749;, + 0.840726;-0.948204;, + 0.798742;-0.969124;, + 0.772012;-0.890951;, + 0.813072;-0.943402;, + 0.812062;-0.945211;, + 0.796818;-0.881257;, + 0.857904;-1.000000;, + 0.857904;-1.000000;, + 0.856360;-0.986493;, + 0.784658;-0.994402;, + 0.843837;-0.998782;, + 0.843837;-0.998782;, + 0.842293;-0.973714;, + 0.784659;-0.994402;, + 0.843837;-0.998782;, + 0.857515;-0.999664;, + 0.784659;-0.994402;, + 0.857515;-0.999663;, + 0.855974;-0.985798;, + 0.854404;-0.971689;, + 0.842221;-0.973714;, + 0.796818;-0.881257;, + 0.813072;-0.943402;, + 0.840726;-0.948205;, + 0.840834;-0.949998;, + 0.856139;-0.987294;, + 0.854516;-0.972681;, + 0.978706;-0.360300;, + 0.988489;-0.316579;, + 1.000000;-0.294706;, + 0.995281;-0.265892;, + 0.946417;-0.346659;, + 0.982078;-0.341098;, + 0.784658;-0.994402;, + 0.795071;-0.881937;, + 0.812062;-0.945211;, + 0.797220;-0.971853;, + 0.843837;-0.998782;, + 0.842388;-0.976420;, + 0.712026;-0.613714;, + 0.571239;-0.639087;, + 0.817656;-0.494263;, + 0.791951;-0.596430;, + 0.747631;-0.900474;, + 0.769377;-0.891977;, + 0.854799;-0.368082;, + 0.880522;-0.292123;, + 0.712026;-0.613714;, + 0.571239;-0.639087;, + 0.817656;-0.494263;, + 0.909887;-0.344988;, + 0.932623;-0.343050;, + 0.791951;-0.596430;, + 0.769377;-0.891977;, + 0.747631;-0.900474;, + 0.880522;-0.292123;, + 0.854799;-0.368081;, + 0.571241;-0.500134;, + 0.571245;-0.169067;, + 0.571244;-0.202102;, + 0.969832;-0.153042;, + 0.439309;-0.137774;, + 0.967293;-0.174011;, + 0.843505;-0.070163;, + 0.851957;-0.215881;, + 0.909864;-0.020599;, + 0.870018;-0.026565;, + 0.967293;-0.174011;, + 0.955798;-0.068650;, + 0.842181;-0.048945;, + 0.843505;-0.070164;, + 0.851957;-0.215881;, + 0.798798;-0.078033;, + 0.571244;-0.202102;, + 0.571241;-0.500134;, + 0.762086;-0.626358;, + 0.819864;-0.314794;, + 0.800124;-0.106254;, + 0.757422;-0.148109;, + 0.728088;-0.664016;, + 0.771814;-0.421584;, + 0.719266;-0.181517;, + 0.712028;-0.478808;, + 0.874427;-0.186227;, + 0.909370;-0.238010;, + 0.959999;-0.234332;, + 0.871408;-0.061697;, + 0.950664;-0.311544;, + 0.941794;-0.210256;, + 0.909884;-0.323149;, + 0.936871;-0.301041;, + 0.909867;-0.036985;, + 0.939400;-0.000000;, + 0.908856;-0.110724;, + 0.940704;-0.073317;, + 0.333520;-0.413657;, + 0.323329;-0.296884;, + 0.354021;-0.178827;, + 0.325241;-0.219199;, + 0.325051;-0.226951;, + 0.403359;-0.157494;, + 0.427480;-0.697780;, + 0.352889;-0.643688;, + 0.403919;-0.765721;, + 0.387560;-0.668621;, + 0.347925;-0.773819;, + 0.373902;-0.769713;, + 0.335634;-0.344847;, + 0.352162;-0.511265;, + 0.446010;-0.169247;, + 0.398287;-0.428836;, + 0.397574;-0.547381;, + 0.449832;-0.609995;, + 0.471708;-0.456328;, + 0.762086;-0.626358;, + 0.819864;-0.314794;, + 0.800124;-0.106254;, + 0.757422;-0.148109;, + 0.719266;-0.149444;, + 0.756097;-0.116784;, + 0.728088;-0.664016;, + 0.771814;-0.421584;, + 0.712028;-0.478808;, + 0.719266;-0.181517;, + 0.874427;-0.186227;, + 0.909370;-0.238010;, + 0.959999;-0.234332;, + 0.871408;-0.061697;, + 0.909884;-0.323149;, + 0.941794;-0.210256;, + 0.950664;-0.311544;, + 0.936871;-0.301041;, + 0.909867;-0.036985;, + 0.939400;-0.000000;, + 0.940704;-0.073317;, + 0.908856;-0.110724;, + 0.333520;-0.413657;, + 0.322366;-0.335988;, + 0.403921;-0.127418;, + 0.403359;-0.157494;, + 0.427480;-0.697780;, + 0.352889;-0.643688;, + 0.347925;-0.773819;, + 0.387560;-0.668621;, + 0.403919;-0.765721;, + 0.373901;-0.769713;, + 0.352162;-0.511265;, + 0.335634;-0.344847;, + 0.354212;-0.163323;, + 0.354021;-0.178827;, + 0.323329;-0.296884;, + 0.325051;-0.226951;, + 0.446010;-0.169247;, + 0.398287;-0.428836;, + 0.471708;-0.456328;, + 0.449832;-0.609995;, + 0.397574;-0.547381;; + } +} diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..77146dad --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/My Project/AssemblyInfo.vb @@ -0,0 +1,56 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Resources +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + + '(used if a resource is not found in the page, + ' or application resource dictionaries) + '(used if a resource is not found in the page, + ' app, or any theme specific resource dictionaries) + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/My Project/Resources.Designer.vb new file mode 100644 index 00000000..b5a64a5f --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/My Project/Resources.Designer.vb @@ -0,0 +1,64 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My.Resources + + + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If (resourceMan Is Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/My Project/Settings.Designer.vb new file mode 100644 index 00000000..34f1fe80 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/My Project/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/TutorialWindow.xaml b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/TutorialWindow.xaml new file mode 100644 index 00000000..61816b1a --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/TutorialWindow.xaml @@ -0,0 +1,13 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/TutorialWindow.xaml.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/TutorialWindow.xaml.vb new file mode 100644 index 00000000..b0dc1072 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/TutorialWindow.xaml.vb @@ -0,0 +1,175 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows +Imports System.Windows.Media.Media3D +Imports Microsoft.WindowsAPICodePack.DirectX.Controls +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + + +Namespace D3D10Tutorial09_WPF + ''' + ''' This application demonstrates the use of meshes + ''' + ''' http://msdn.microsoft.com/en-us/library/bb172493(VS.85).aspx + ''' + ''' Copyright (c) Microsoft Corporation. All rights reserved. + ''' + Partial Public Class TutorialWindow + Inherits Window + #Region "Fields" + Private host As DirectHost + Private device As D3DDevice + Private swapChain As SwapChain + Private renderTargetView As RenderTargetView + Private depthStencil As Texture2D + Private depthStencilView As DepthStencilView + Private backColor As New ColorRgba(0.0F, 0.125F, 0.3F, 1.0F) + + Private mesh As XMesh + Private meshManager As XMeshManager + + Private t As Single = 0f + Private dwTimeStart As UInteger = CUInt(Environment.TickCount) + Private needsResizing As Boolean + #End Region + + #Region "TutorialWindow()" + ''' + ''' Initializes a new instance of the class. + ''' + Public Sub New() + InitializeComponent() + host = New DirectHost() + ControlHostElement.Child = host + End Sub + #End Region + + #Region "Window_Loaded()" + ''' + ''' Handles the Loaded event of the window. + ''' + ''' The source of the event. + ''' The instance containing the event data. + Private Sub Window_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) + InitDevice() + host.Render = AddressOf Me.RenderScene + End Sub + #End Region + + #Region "InitDevice()" + ''' + ''' Create Direct3D device and swap chain + ''' + Public Sub InitDevice() + device = D3DDevice.CreateDeviceAndSwapChain(host.Handle) + swapChain = device.SwapChain + + SetViews() + + meshManager = New XMeshManager(device) + mesh = meshManager.Open("Media\Tiger\tiger.x") + + InitMatrices() + End Sub + #End Region + + #Region "SetViews()" + Private Sub SetViews() + ' Create a render target view + Using pBuffer As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(pBuffer) + End Using + + ' Create depth stencil texture + Dim descDepth As New Texture2DDescription() With _ + { _ + .Width = CUInt(host.ActualWidth), _ + .Height = CUInt(host.ActualHeight), _ + .MipLevels = 1, _ + .ArraySize = 1, _ + .Format = Format.D32Float, _ + .SampleDescription = New SampleDescription() With {.Count = 1, .Quality = 0}, _ + .BindingOptions = BindingOptions.DepthStencil _ + } + + depthStencil = device.CreateTexture2D(descDepth) + + ' Create the depth stencil view + Dim depthStencilViewDesc As New DepthStencilViewDescription() With {.Format = descDepth.Format, .ViewDimension = DepthStencilViewDimension.Texture2D} + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc) + + 'bind the views to the device + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}, depthStencilView) + + ' Setup the viewport + Dim vp As New Viewport() With {.Width = CUInt(host.ActualWidth), .Height = CUInt(host.ActualHeight), .MinDepth = 0.0F, .MaxDepth = 1.0F, .TopLeftX = 0, .TopLeftY = 0} + + device.RS.Viewports = New Viewport() {vp} + End Sub + #End Region + + #Region "InitMatrices()" + Private Sub InitMatrices() + ' Initialize the view matrix + Dim Eye As New Vector3F(0.0F, 1.0F, -5.0F) + Dim At As New Vector3F(0.0F, 0.0F, 0.0F) + Dim Up As New Vector3F(0.0F, 1.0F, 0.0F) + + Dim viewMatrix As Matrix4x4F + Dim projectionMatrix As Matrix4x4F + viewMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixLookAtLH(Eye, At, Up) + + ' Initialize the projection matrix + projectionMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixPerspectiveFovLH(CSng(Math.PI) * 0.25F, (CSng(host.ActualWidth) / CSng(host.ActualHeight)), 0.5F, 1000.0F) + + meshManager.SetViewAndProjection(viewMatrix, projectionMatrix) + End Sub +#End Region + + #Region "RenderScene()" + ''' + ''' Render the frame + ''' + Protected Sub RenderScene() + t = (Environment.TickCount - dwTimeStart) / 1000.0F + + If (needsResizing) Then + needsResizing = False + renderTargetView.Dispose() + Dim sd As SwapChainDescription = swapChain.Description + swapChain.ResizeBuffers(sd.BufferCount, CUInt(host.ActualWidth), CUInt(host.ActualHeight), sd.BufferDescription.Format, sd.Options) + SetViews() + InitMatrices() + End If + + 'WPF transforms used here use degrees as opposed to D3DX which uses radians in the native tutorial + '360 degrees == 2 * Math.PI + 'world matrix rotates the first cube by t degrees + Dim rt1 As New RotateTransform3D(New AxisAngleRotation3D(New Vector3D(0, 1, 0), t * 60)) + + ' Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor) + + ' Clear the depth buffer to 1.0 (max depth) + device.ClearDepthStencilView(depthStencilView, ClearOptions.Depth, 1.0F, CByte(0)) + + mesh.Render(rt1.Value.ToMatrix4x4F()) + + Dim [error] As Microsoft.WindowsAPICodePack.DirectX.ErrorCode + swapChain.TryPresent(1, PresentOptions.None, [error]) + End Sub + #End Region + + #Region "ControlHostElement_SizeChanged()" + Private Sub ControlHostElement_SizeChanged(ByVal sender As System.Object, ByVal e As System.Windows.SizeChangedEventArgs) + needsResizing = True + End Sub + #End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/directx.ico b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WPF/directx.ico differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/D3D10Tutorial09_WinFormsControl.vbproj b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/D3D10Tutorial09_WinFormsControl.vbproj new file mode 100644 index 00000000..97436c75 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/D3D10Tutorial09_WinFormsControl.vbproj @@ -0,0 +1,121 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {63FAFC43-88BA-48F6-80A6-F164B618A72A} + WinExe + + + D3D10Tutorial09_WinFormsControl + v3.5 + On + Binary + Off + On + 512 + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + 3.0 + + + + + + 3.0 + + + + + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + TutorialWindow.vb + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + True + Settings.settings + True + + + Form + + + TutorialWindow.vb + + + + + + Always + + + Always + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + {B28ADA8B-BD7E-4C11-8298-C39F7C456365} + MeshLoader + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Media/Tiger/tiger.bmp b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Media/Tiger/tiger.bmp new file mode 100644 index 00000000..17a2f609 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Media/Tiger/tiger.bmp differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Media/Tiger/tiger.x b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Media/Tiger/tiger.x new file mode 100644 index 00000000..a727b50c --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Media/Tiger/tiger.x @@ -0,0 +1,1371 @@ +xof 0302txt 0064 +template Header { + <3D82AB43-62DA-11cf-AB39-0020AF71E433> + WORD major; + WORD minor; + DWORD flags; +} + +template Vector { + <3D82AB5E-62DA-11cf-AB39-0020AF71E433> + FLOAT x; + FLOAT y; + FLOAT z; +} + +template Coords2d { + + FLOAT u; + FLOAT v; +} + +template Matrix4x4 { + + array FLOAT matrix[16]; +} + +template ColorRGBA { + <35FF44E0-6C7C-11cf-8F52-0040333594A3> + FLOAT red; + FLOAT green; + FLOAT blue; + FLOAT alpha; +} + +template ColorRGB { + + FLOAT red; + FLOAT green; + FLOAT blue; +} + +template IndexedColor { + <1630B820-7842-11cf-8F52-0040333594A3> + DWORD index; + ColorRGBA indexColor; +} + +template Boolean { + <4885AE61-78E8-11cf-8F52-0040333594A3> + WORD truefalse; +} + +template Boolean2d { + <4885AE63-78E8-11cf-8F52-0040333594A3> + Boolean u; + Boolean v; +} + +template MaterialWrap { + <4885AE60-78E8-11cf-8F52-0040333594A3> + Boolean u; + Boolean v; +} + +template TextureFilename { + + STRING filename; +} + +template Material { + <3D82AB4D-62DA-11cf-AB39-0020AF71E433> + ColorRGBA faceColor; + FLOAT power; + ColorRGB specularColor; + ColorRGB emissiveColor; + [...] +} + +template MeshFace { + <3D82AB5F-62DA-11cf-AB39-0020AF71E433> + DWORD nFaceVertexIndices; + array DWORD faceVertexIndices[nFaceVertexIndices]; +} + +template MeshFaceWraps { + <4885AE62-78E8-11cf-8F52-0040333594A3> + DWORD nFaceWrapValues; + Boolean2d faceWrapValues; +} + +template MeshTextureCoords { + + DWORD nTextureCoords; + array Coords2d textureCoords[nTextureCoords]; +} + +template MeshMaterialList { + + DWORD nMaterials; + DWORD nFaceIndexes; + array DWORD faceIndexes[nFaceIndexes]; + [Material] +} + +template MeshNormals { + + DWORD nNormals; + array Vector normals[nNormals]; + DWORD nFaceNormals; + array MeshFace faceNormals[nFaceNormals]; +} + +template MeshVertexColors { + <1630B821-7842-11cf-8F52-0040333594A3> + DWORD nVertexColors; + array IndexedColor vertexColors[nVertexColors]; +} + +template Mesh { + <3D82AB44-62DA-11cf-AB39-0020AF71E433> + DWORD nVertices; + array Vector vertices[nVertices]; + DWORD nFaces; + array MeshFace faces[nFaces]; + [...] +} + +template FrameTransformMatrix { + + Matrix4x4 frameMatrix; +} + +template Frame { + <3D82AB46-62DA-11cf-AB39-0020AF71E433> + [...] +} + +Header { + 1; + 0; + 1; +} + +Mesh Body1 { + 303; + 0.000000;-0.061426;0.938846;, + -0.049693;0.200773;0.692165;, + 0.000000;-0.031454;1.283610;, + 0.049693;-0.023019;0.950530;, + 0.032306;0.045667;0.971424;, + 0.000000;0.053280;0.973741;, + -0.032306;0.269459;0.713059;, + -0.023241;0.009165;1.505100;, + 0.000000;0.277072;0.715376;, + 0.000000;0.014811;1.504150;, + 0.049693;-0.111196;1.282310;, + 0.032306;-0.039411;1.283480;, + 0.023242;0.009165;1.505100;, + 0.035751;-0.041767;1.513680;, + 0.032306;0.269459;0.713059;, + 0.049693;0.200773;0.692165;, + 0.000000;0.162366;0.680481;, + -0.032306;0.045667;0.971424;, + -0.049693;-0.023019;0.950530;, + 0.000000;-0.151335;1.281660;, + 0.000000;-0.070246;1.518480;, + -0.049693;-0.111196;1.282310;, + -0.035750;-0.041767;1.513680;, + -0.032306;-0.039411;1.283480;, + 0.000000;-0.139499;-0.804149;, + 0.000000;-0.196023;-0.643914;, + 0.000000;0.207794;-1.162700;, + 0.000000;0.342375;-1.510260;, + 0.000000;-0.232522;-0.216349;, + 0.109118;-0.119018;0.100709;, + -0.109118;-0.119018;0.100709;, + 0.000000;-0.154873;0.103656;, + 0.030101;-0.105174;0.316078;, + 0.000000;-0.112314;0.317509;, + 0.000000;0.112303;0.506078;, + -0.030101;-0.105174;0.316078;, + -0.028761;-0.037815;0.439801;, + 0.028761;-0.037815;0.439801;, + 0.081739;-0.203143;0.439706;, + 0.065936;-0.238012;0.335711;, + 0.020142;-0.108242;0.303668;, + 0.114666;-0.167257;0.149229;, + 0.116086;-0.276934;0.217803;, + 0.090034;-0.382159;0.456303;, + -0.114666;-0.167257;0.149229;, + -0.116086;-0.276934;0.217803;, + -0.020142;-0.108242;0.303668;, + -0.090034;-0.382159;0.456303;, + -0.081739;-0.203143;0.439706;, + -0.076865;-0.377381;0.378108;, + -0.065936;-0.238012;0.335711;, + 0.076865;-0.377381;0.378108;, + -0.077999;-0.438418;0.363464;, + -0.094725;-0.687984;0.346619;, + -0.119790;-0.424686;0.304048;, + -0.160820;-0.602659;0.286432;, + -0.190992;-0.614722;0.342338;, + -0.168141;-0.687707;0.257272;, + -0.151771;-0.687980;0.349147;, + -0.203745;-0.687917;0.313177;, + -0.128500;-0.687445;0.237457;, + -0.079186;-0.687932;0.310966;, + -0.165267;-0.602291;0.204563;, + -0.076312;-0.617099;0.236559;, + -0.125626;-0.603366;0.203812;, + -0.127225;-0.603735;0.285509;, + -0.085434;-0.617617;0.340127;, + -0.068939;-0.687414;0.212852;, + -0.118657;-0.370966;0.289767;, + -0.153385;-0.423611;0.305410;, + -0.215919;-0.687399;0.214649;, + -0.200870;-0.614472;0.257455;, + -0.204332;-0.687587;0.149699;, + -0.191896;-0.646208;0.173407;, + -0.162472;-0.639473;0.139614;, + -0.173907;-0.687338;0.180856;, + -0.169612;-0.687553;0.115905;, + -0.129710;-0.640081;0.138863;, + -0.127130;-0.687344;0.180105;, + -0.130953;-0.687556;0.115154;, + -0.088955;-0.647844;0.171610;, + -0.082862;-0.687595;0.147901;, + -0.091167;-0.448646;0.416058;, + -0.146947;-0.626975;0.378308;, + -0.098602;-0.627845;0.375781;, + -0.183557;-0.435523;0.366725;, + -0.139512;-0.447776;0.419786;, + -0.036911;-0.131458;-0.800774;, + -0.114132;-0.130986;-0.893785;, + -0.218544;-0.657847;-0.902645;, + -0.171757;-0.532488;-0.896119;, + -0.073996;0.255722;-1.483520;, + -0.051230;0.326389;-1.504150;, + -0.065011;0.221538;-1.464050;, + 0.104586;-0.228675;-0.692703;, + 0.091167;-0.448646;0.416057;, + 0.077999;-0.438418;0.363464;, + 0.098603;-0.627845;0.375781;, + 0.094725;-0.687984;0.346619;, + 0.119790;-0.424686;0.304048;, + 0.165267;-0.602291;0.204563;, + 0.085434;-0.617617;0.340127;, + 0.127225;-0.603735;0.285508;, + 0.125626;-0.603366;0.203812;, + 0.076312;-0.617099;0.236559;, + 0.118657;-0.370966;0.289767;, + 0.204332;-0.687587;0.149699;, + 0.162472;-0.639473;0.139614;, + 0.191896;-0.646208;0.173407;, + 0.169612;-0.687553;0.115905;, + 0.129710;-0.640081;0.138863;, + 0.068939;-0.687414;0.212852;, + 0.127130;-0.687344;0.180104;, + 0.082862;-0.687595;0.147901;, + 0.088955;-0.647844;0.171610;, + 0.130953;-0.687556;0.115154;, + 0.153385;-0.423611;0.305410;, + 0.160820;-0.602659;0.286432;, + 0.168141;-0.687707;0.257271;, + 0.128500;-0.687445;0.237457;, + 0.079186;-0.687932;0.310966;, + 0.203745;-0.687917;0.313177;, + 0.173907;-0.687338;0.180856;, + 0.215919;-0.687399;0.214649;, + 0.200870;-0.614472;0.257455;, + 0.190992;-0.614722;0.342338;, + 0.146947;-0.626975;0.378308;, + 0.151771;-0.687979;0.349147;, + 0.183557;-0.435523;0.366725;, + 0.139512;-0.447776;0.419786;, + 0.113246;-0.558335;-0.752050;, + -0.113029;-0.558335;-0.752050;, + -0.058263;-0.180258;-0.792372;, + -0.104586;-0.228675;-0.692703;, + 0.058263;-0.180258;-0.792372;, + 0.114132;-0.130986;-0.893785;, + 0.036911;-0.131458;-0.800774;, + 0.000000;-0.004469;-0.968083;, + 0.000000;0.159119;-1.080890;, + 0.055861;-0.654043;-0.907268;, + 0.079285;-0.545055;-0.826090;, + -0.189298;-0.627377;-1.035100;, + -0.177878;-0.680291;-1.082760;, + -0.214254;-0.664213;-1.040040;, + -0.161256;-0.660443;-1.077820;, + -0.124653;-0.659096;-1.077490;, + -0.108039;-0.624876;-1.034770;, + -0.052024;-0.654043;-0.907268;, + -0.078756;-0.545055;-0.826090;, + -0.111125;-0.618182;-0.950786;, + -0.184997;-0.620703;-0.947721;, + -0.120091;-0.531540;-0.901424;, + -0.093467;-0.697089;-1.086940;, + -0.177140;-0.697089;-1.086940;, + -0.095368;-0.678258;-1.082250;, + -0.184330;-0.689285;-0.864494;, + -0.228502;-0.695391;-1.044220;, + -0.042748;-0.695391;-1.044220;, + -0.054974;-0.660441;-1.039530;, + -0.101027;-0.689285;-0.864498;, + 0.065548;-0.695391;-1.044220;, + 0.092340;-0.696620;-1.085760;, + 0.102919;-0.689285;-0.864498;, + 0.192799;-0.696619;-1.085760;, + 0.099554;-0.677289;-1.081080;, + 0.127676;-0.657618;-1.076310;, + 0.072960;-0.660441;-1.039310;, + 0.120245;-0.531540;-0.901424;, + 0.112616;-0.618182;-0.950786;, + 0.109653;-0.624877;-1.034770;, + 0.187687;-0.627377;-1.035100;, + 0.178790;-0.679375;-1.081580;, + 0.162827;-0.659001;-1.076650;, + 0.000000;0.194767;-1.453810;, + 0.073996;0.255722;-1.483520;, + 0.000000;0.286217;-1.518480;, + 0.051230;0.326388;-1.504150;, + 0.000000;0.213784;-1.355750;, + 0.065011;0.221538;-1.464050;, + 0.182916;-0.689285;-0.864494;, + 0.171441;-0.532488;-0.896119;, + 0.183557;-0.620703;-0.947721;, + 0.215773;-0.657847;-0.902646;, + 0.220422;-0.695391;-1.044220;, + 0.212566;-0.664214;-1.039820;, + 0.067091;-0.158537;-0.643915;, + 0.130206;-0.193912;-0.216350;, + 0.077416;0.007999;-0.964709;, + 0.183964;-0.134440;-0.886644;, + 0.170979;-0.558332;-0.752044;, + 0.194691;-0.546486;-0.818088;, + 0.096383;0.183917;-1.077510;, + 0.102550;0.289818;-1.155630;, + -0.067091;-0.158537;-0.643915;, + -0.130206;-0.193912;-0.216350;, + -0.077416;0.007999;-0.964709;, + 0.000000;0.216114;-1.244810;, + 0.000000;0.218816;-1.313860;, + -0.183964;-0.134440;-0.886644;, + -0.195220;-0.546486;-0.818088;, + -0.171291;-0.558332;-0.752044;, + -0.102550;0.289818;-1.155630;, + -0.096383;0.183918;-1.077510;, + -0.203324;-0.000186;-0.216355;, + 0.000000;0.461380;-0.216367;, + -0.132354;0.415323;-0.216366;, + 0.000000;0.483721;-1.426860;, + 0.000000;0.505008;0.184315;, + -0.083623;0.454487;-1.419150;, + -0.097980;0.599269;-1.043210;, + -0.150776;0.396113;-1.068880;, + 0.000000;0.668371;-1.244740;, + 0.000000;0.660052;-1.123730;, + 0.083623;0.454486;-1.419150;, + 0.000000;0.601379;-1.384240;, + 0.000000;0.628851;-1.039190;, + 0.097980;0.599268;-1.043210;, + 0.150776;0.396113;-1.068880;, + 0.000000;0.588297;-0.907439;, + 0.132354;0.415323;-0.216366;, + 0.203324;-0.000186;-0.216355;, + 0.215676;-0.176166;-0.795945;, + 0.177974;0.258210;-0.971413;, + 0.115772;0.548952;-0.911464;, + 0.143614;0.490599;-0.781781;, + 0.183334;-0.228667;-0.692694;, + 0.215131;0.109326;-0.825489;, + 0.115870;0.444022;-0.665901;, + 0.178124;0.029546;-0.643920;, + 0.160357;0.437455;-1.137120;, + 0.226298;0.365261;-1.243240;, + 0.105258;0.370388;-1.397000;, + 0.104248;0.611072;-1.127950;, + 0.082255;0.262741;-1.368650;, + 0.192870;0.403955;-1.341710;, + 0.166988;0.246562;-1.244800;, + 0.153069;0.277384;-1.326760;, + 0.089221;0.645525;-1.244750;, + 0.139971;0.697089;-1.334440;, + 0.177051;0.542720;-1.241680;, + 0.126150;0.594872;-1.338400;, + 0.041587;0.120377;0.505592;, + 0.067583;0.283180;0.536543;, + 0.104568;0.447773;0.443333;, + 0.000000;0.391487;0.530735;, + 0.043936;0.380679;0.531314;, + 0.149273;0.477514;0.293496;, + 0.172353;-0.275740;0.220239;, + 0.139752;-0.200327;0.446770;, + 0.152251;-0.370463;0.291793;, + 0.192606;-0.235087;0.341477;, + 0.138378;-0.381752;0.461846;, + 0.182423;-0.376028;0.382956;, + 0.160847;0.216311;0.499174;, + 0.116618;-0.015705;0.448978;, + 0.110923;0.461129;0.163966;, + 0.229189;0.099215;0.308897;, + 0.213423;-0.066057;0.311063;, + 0.176064;-0.153352;0.152359;, + 0.170561;0.060886;0.085922;, + -0.215676;-0.176166;-0.795945;, + -0.177974;0.258210;-0.971413;, + -0.115772;0.548952;-0.911464;, + -0.143614;0.490599;-0.781781;, + 0.000000;0.488737;-0.665903;, + 0.000000;0.534271;-0.777755;, + -0.183334;-0.228667;-0.692694;, + -0.215131;0.109326;-0.825489;, + -0.178124;0.029546;-0.643920;, + -0.115870;0.444022;-0.665901;, + -0.160357;0.437455;-1.137120;, + -0.226298;0.365261;-1.243240;, + -0.105258;0.370388;-1.397000;, + -0.104248;0.611072;-1.127950;, + -0.166988;0.246562;-1.244800;, + -0.192870;0.403955;-1.341710;, + -0.082255;0.262741;-1.368650;, + -0.153069;0.277384;-1.326760;, + -0.089221;0.645525;-1.244750;, + -0.139971;0.697089;-1.334440;, + -0.126150;0.594872;-1.338400;, + -0.177051;0.542720;-1.241680;, + -0.041587;0.120377;0.505592;, + 0.000000;0.228662;0.539467;, + 0.000000;0.519446;0.291789;, + -0.149273;0.477514;0.293496;, + -0.172353;-0.275740;0.220239;, + -0.139752;-0.200327;0.446770;, + -0.138378;-0.381752;0.461846;, + -0.192606;-0.235087;0.341477;, + -0.152251;-0.370463;0.291794;, + -0.182423;-0.376028;0.382957;, + -0.116618;-0.015705;0.448978;, + -0.160847;0.216311;0.499174;, + 0.000000;0.469387;0.442753;, + -0.104568;0.447772;0.443333;, + -0.067583;0.283180;0.536543;, + -0.043936;0.380679;0.531314;, + -0.110923;0.461129;0.163966;, + -0.229189;0.099215;0.308897;, + -0.170561;0.060886;0.085922;, + -0.176064;-0.153352;0.152359;, + -0.213423;-0.066057;0.311063;; + + 599; + 3;300,301,302;, + 3;299,300,302;, + 3;298,300,299;, + 3;295,296,297;, + 3;294,295,297;, + 3;299,292,293;, + 3;302,292,299;, + 3;289,290,291;, + 3;288,289,291;, + 3;287,289,288;, + 3;286,290,289;, + 3;287,292,302;, + 3;289,287,302;, + 3;286,302,301;, + 3;289,302,286;, + 3;284,298,285;, + 3;294,284,285;, + 3;293,282,283;, + 3;296,293,283;, + 3;295,294,285;, + 3;292,282,293;, + 3;295,293,296;, + 3;293,295,285;, + 3;285,299,293;, + 3;298,299,285;, + 3;279,280,281;, + 3;278,280,279;, + 3;281,278,279;, + 3;275,276,277;, + 3;274,275,277;, + 3;273,278,281;, + 3;272,276,275;, + 3;271,275,274;, + 3;280,272,275;, + 3;270,271,274;, + 3;270,273,281;, + 3;281,280,275;, + 3;271,270,281;, + 3;275,271,281;, + 3;267,268,269;, + 3;266,268,267;, + 3;263,264,265;, + 3;262,263,265;, + 3;269,264,263;, + 3;261,263,262;, + 3;260,266,267;, + 3;267,269,263;, + 3;261,260,267;, + 3;263,261,267;, + 3;257,258,259;, + 3;256,257,259;, + 3;255,256,259;, + 3;256,253,254;, + 3;257,256,254;, + 3;250,251,252;, + 3;249,250,252;, + 3;248,251,250;, + 3;247,250,249;, + 3;247,258,257;, + 3;248,257,254;, + 3;250,257,248;, + 3;250,247,257;, + 3;246,255,284;, + 3;294,246,284;, + 3;243,244,245;, + 3;294,244,243;, + 3;253,245,242;, + 3;241,253,242;, + 3;246,294,243;, + 3;254,253,241;, + 3;243,245,253;, + 3;253,246,243;, + 3;246,253,256;, + 3;255,246,256;, + 3;238,239,240;, + 3;237,238,240;, + 3;239,238,237;, + 3;234,235,236;, + 3;233,234,236;, + 3;232,239,237;, + 3;231,234,233;, + 3;240,234,231;, + 3;230,235,234;, + 3;229,235,230;, + 3;229,239,232;, + 3;239,234,240;, + 3;230,239,229;, + 3;230,234,239;, + 3;226,227,228;, + 3;225,226,228;, + 3;224,265,264;, + 3;227,224,264;, + 3;223,265,224;, + 3;222,223,224;, + 3;221,226,225;, + 3;226,224,227;, + 3;222,226,221;, + 3;224,226,222;, + 3;219,220,228;, + 3;218,265,223;, + 3;217,223,222;, + 3;216,223,217;, + 3;229,216,217;, + 3;216,215,218;, + 3;232,215,216;, + 3;232,216,229;, + 3;223,216,218;, + 3;213,214,240;, + 3;231,213,240;, + 3;237,211,212;, + 3;211,240,214;, + 3;237,240,211;, + 3;212,215,232;, + 3;237,212,232;, + 3;209,270,210;, + 3;209,215,273;, + 3;273,270,209;, + 3;208,272,280;, + 3;278,212,211;, + 3;214,208,280;, + 3;280,278,211;, + 3;212,273,215;, + 3;278,273,212;, + 3;207,298,284;, + 3;207,284,255;, + 3;206,208,214;, + 3;213,206,214;, + 3;218,262,265;, + 3;209,262,218;, + 3;215,209,218;, + 3;210,262,209;, + 3;261,262,210;, + 3;214,280,211;, + 3;297,244,294;, + 3;219,207,255;, + 3;205,298,207;, + 3;204,207,219;, + 3;204,205,207;, + 3;227,204,219;, + 3;228,227,219;, + 3;205,268,203;, + 3;269,268,205;, + 3;269,205,204;, + 3;210,201,202;, + 3;261,210,202;, + 3;199,200,260;, + 3;198,199,260;, + 3;270,201,210;, + 3;197,277,276;, + 3;274,197,196;, + 3;201,274,196;, + 3;277,197,274;, + 3;270,274,201;, + 3;195,261,202;, + 3;266,260,200;, + 3;198,261,195;, + 3;203,193,194;, + 3;300,203,194;, + 3;268,193,203;, + 3;260,261,198;, + 3;229,217,192;, + 3;191,192,217;, + 3;222,191,217;, + 3;221,189,190;, + 3;188,221,190;, + 3;197,233,236;, + 3;235,196,197;, + 3;192,196,235;, + 3;236,235,197;, + 3;229,192,235;, + 3;187,191,222;, + 3;225,189,221;, + 3;188,187,222;, + 3;220,259,186;, + 3;185,220,186;, + 3;228,220,185;, + 3;221,188,222;, + 3;182,183,184;, + 3;181,182,184;, + 3;180,182,181;, + 3;190,179,182;, + 3;190,182,180;, + 3;233,177,178;, + 3;231,233,178;, + 3;174,175,176;, + 3;173,178,177;, + 3;175,178,173;, + 3;174,213,231;, + 3;176,213,174;, + 3;174,178,175;, + 3;178,174,231;, + 3;170,171,172;, + 3;169,170,172;, + 3;184,171,170;, + 3;170,168,181;, + 3;169,168,170;, + 3;170,181,184;, + 3;167,181,168;, + 3;180,181,167;, + 3;165,166,169;, + 3;164,166,165;, + 3;172,165,169;, + 3;163,184,183;, + 3;171,184,163;, + 3;179,189,162;, + 3;163,161,164;, + 3;165,172,171;, + 3;164,165,171;, + 3;163,164,171;, + 3;183,161,163;, + 3;160,161,183;, + 3;190,189,179;, + 3;179,160,183;, + 3;162,160,179;, + 3;179,183,182;, + 3;157,158,159;, + 3;166,160,162;, + 3;157,155,156;, + 3;159,155,157;, + 3;152,153,154;, + 3;157,154,158;, + 3;152,154,157;, + 3;149,150,151;, + 3;148,149,151;, + 3;147,149,148;, + 3;145,146,158;, + 3;154,145,158;, + 3;145,144,146;, + 3;142,153,143;, + 3;141,142,143;, + 3;156,143,153;, + 3;144,142,141;, + 3;141,150,149;, + 3;146,144,141;, + 3;142,154,153;, + 3;145,154,142;, + 3;144,145,142;, + 3;149,146,141;, + 3;146,147,158;, + 3;149,147,146;, + 3;159,158,147;, + 3;168,139,140;, + 3;169,139,168;, + 3;166,139,169;, + 3;167,168,140;, + 3;162,139,166;, + 3;164,161,160;, + 3;166,164,160;, + 3;187,137,138;, + 3;191,187,138;, + 4;152,157,156,153;, + 3;136,137,187;, + 3;135,136,187;, + 3;187,188,135;, + 3;135,188,180;, + 3;134,185,136;, + 3;135,134,136;, + 3;148,132,133;, + 3;131,148,133;, + 3;151,132,148;, + 3;130,139,162;, + 3;140,139,130;, + 3;159,131,200;, + 3;155,159,200;, + 3;147,131,159;, + 3;148,131,147;, + 3;129,252,251;, + 3;128,249,252;, + 3;128,252,129;, + 3;125,126,127;, + 3;125,123,124;, + 3;121,122,123;, + 3;121,127,120;, + 3;119,121,120;, + 3;118,121,119;, + 3;122,121,118;, + 3;125,121,123;, + 3;117,125,124;, + 3;116,125,117;, + 3;128,125,116;, + 3;125,127,121;, + 3;126,125,128;, + 3;113,114,115;, + 3;112,113,115;, + 3;111,113,112;, + 3;110,115,114;, + 3;109,115,110;, + 3;115,109,122;, + 3;122,112,115;, + 3;106,107,108;, + 3;109,107,106;, + 3;106,124,123;, + 3;108,124,106;, + 3;110,107,109;, + 3;123,122,109;, + 3;109,106,123;, + 3;116,249,128;, + 3;105,249,116;, + 3;103,110,104;, + 3;103,101,102;, + 3;104,101,103;, + 3;103,100,107;, + 3;110,103,107;, + 3;100,103,102;, + 3;119,111,112;, + 3;114,104,110;, + 3;108,107,100;, + 3;112,122,118;, + 3;118,119,112;, + 3;117,100,102;, + 3;124,100,117;, + 3;100,124,108;, + 3;99,105,116;, + 3;120,101,104;, + 3;111,104,114;, + 3;111,119,120;, + 3;111,114,113;, + 3;104,111,120;, + 3;98,120,127;, + 3;97,120,98;, + 3;101,120,97;, + 3;101,95,96;, + 3;97,95,101;, + 3;102,101,96;, + 3;126,97,98;, + 3;126,98,127;, + 3;129,95,97;, + 3;99,102,96;, + 3;117,102,99;, + 3;126,129,97;, + 3;116,117,99;, + 3;128,129,126;, + 3;185,134,94;, + 3;94,228,185;, + 3;228,94,225;, + 3;140,130,94;, + 3;130,162,189;, + 3;130,225,94;, + 3;225,130,189;, + 3;167,140,134;, + 3;134,140,94;, + 3;134,135,167;, + 3;167,135,180;, + 3;190,180,188;, + 3;199,155,200;, + 3;93,177,276;, + 3;272,93,276;, + 3;91,92,175;, + 3;173,177,93;, + 3;175,173,93;, + 3;91,272,208;, + 3;92,91,208;, + 3;91,175,93;, + 3;93,272,91;, + 3;90,151,150;, + 3;90,89,199;, + 3;89,90,150;, + 3;141,143,150;, + 3;143,89,150;, + 3;156,89,143;, + 3;89,155,199;, + 3;155,89,156;, + 3;198,88,90;, + 3;151,90,88;, + 3;199,198,90;, + 3;138,137,195;, + 3;202,138,195;, + 3;87,195,137;, + 3;88,195,87;, + 3;88,198,195;, + 3;87,193,132;, + 3;88,87,132;, + 3;86,288,291;, + 3;85,86,291;, + 3;85,291,290;, + 3;86,83,84;, + 3;82,86,84;, + 3;85,83,86;, + 3;79,80,81;, + 3;78,79,81;, + 3;77,80,79;, + 3;76,77,79;, + 3;75,79,78;, + 3;76,79,75;, + 3;72,73,74;, + 3;76,72,74;, + 3;77,76,74;, + 3;72,70,71;, + 3;73,72,71;, + 3;76,75,70;, + 3;72,76,70;, + 3;69,85,290;, + 3;68,69,290;, + 3;67,78,81;, + 3;64,65,66;, + 3;63,64,66;, + 3;77,64,63;, + 3;64,74,62;, + 3;77,74,64;, + 3;62,65,64;, + 3;80,77,63;, + 3;59,60,61;, + 3;58,59,61;, + 3;57,60,59;, + 3;74,73,62;, + 3;56,59,58;, + 3;55,65,62;, + 3;78,60,57;, + 3;75,78,57;, + 3;67,60,78;, + 3;71,55,62;, + 3;56,55,71;, + 3;73,71,62;, + 3;56,70,59;, + 3;71,70,56;, + 3;59,75,57;, + 3;70,75,59;, + 3;54,69,68;, + 3;81,80,67;, + 3;61,63,66;, + 3;67,61,60;, + 3;63,61,67;, + 3;80,63,67;, + 3;61,84,53;, + 3;58,61,53;, + 3;66,84,61;, + 3;82,84,66;, + 3;52,82,66;, + 3;65,52,66;, + 3;83,56,58;, + 3;83,58,53;, + 3;84,83,53;, + 3;54,52,65;, + 3;55,54,65;, + 3;69,54,55;, + 3;56,69,55;, + 3;85,69,56;, + 3;56,83,85;, + 3;133,132,193;, + 3;193,268,133;, + 3;266,133,268;, + 3;266,131,133;, + 3;200,131,266;, + 3;132,151,88;, + 3;51,105,99;, + 3;49,68,50;, + 3;47,48,287;, + 3;288,47,287;, + 3;82,47,288;, + 3;49,52,54;, + 3;68,49,54;, + 3;82,52,47;, + 3;49,48,47;, + 3;50,48,49;, + 3;49,47,52;, + 3;96,51,99;, + 3;45,46,50;, + 3;44,46,45;, + 3;44,286,301;, + 3;45,286,44;, + 3;45,290,286;, + 3;68,290,45;, + 3;68,45,50;, + 3;86,82,288;, + 3;95,251,43;, + 3;96,95,43;, + 3;51,96,43;, + 3;129,251,95;, + 3;40,41,42;, + 3;39,40,42;, + 3;247,42,41;, + 3;249,42,247;, + 3;105,42,249;, + 3;105,39,42;, + 3;258,247,41;, + 3;51,38,39;, + 3;43,38,51;, + 3;105,51,39;, + 3;248,38,43;, + 3;251,248,43;, + 3;38,248,254;, + 3;37,38,254;, + 3;37,40,39;, + 3;38,37,39;, + 3;36,48,50;, + 3;46,36,50;, + 3;35,46,44;, + 3;282,36,46;, + 3;33,34,282;, + 3;241,34,33;, + 3;32,241,33;, + 3;35,282,46;, + 3;33,282,35;, + 3;31,32,33;, + 3;35,31,33;, + 3;30,31,35;, + 3;292,48,36;, + 3;44,301,30;, + 3;30,301,300;, + 3;287,48,292;, + 3;44,30,35;, + 3;32,41,40;, + 3;28,29,31;, + 3;241,40,37;, + 3;32,40,241;, + 3;32,31,29;, + 3;28,31,30;, + 3;29,259,258;, + 3;258,41,29;, + 3;29,41,32;, + 3;186,29,28;, + 3;29,186,259;, + 3;254,241,37;, + 3;282,292,36;, + 3;27,176,175;, + 3;92,27,175;, + 3;27,92,206;, + 3;176,27,206;, + 3;197,177,233;, + 3;177,197,276;, + 3;208,206,92;, + 3;213,176,206;, + 3;26,196,192;, + 3;26,201,196;, + 3;191,26,192;, + 3;138,26,191;, + 3;26,138,202;, + 3;202,201,26;, + 3;24,185,25;, + 3;193,24,25;, + 3;136,185,24;, + 3;87,24,193;, + 3;24,87,137;, + 3;137,136,24;, + 3;194,30,300;, + 3;194,28,30;, + 3;25,28,194;, + 3;21,22,23;, + 3;20,22,21;, + 3;19,20,21;, + 3;19,21,18;, + 3;21,17,18;, + 3;23,17,21;, + 3;15,16,283;, + 3;283,241,242;, + 3;14,242,245;, + 3;15,242,14;, + 3;283,242,15;, + 3;13,22,20;, + 3;19,13,20;, + 3;10,11,12;, + 3;11,9,12;, + 3;8,245,244;, + 3;14,245,8;, + 4;12,7,22,13;, + 3;9,7,12;, + 3;12,13,10;, + 3;10,13,19;, + 3;6,244,297;, + 3;8,6,17;, + 3;5,8,17;, + 3;14,5,4;, + 3;8,5,14;, + 3;244,6,8;, + 3;3,15,4;, + 3;4,15,14;, + 3;3,16,15;, + 3;4,2,11;, + 3;5,2,4;, + 3;3,4,11;, + 3;16,296,283;, + 3;1,296,16;, + 3;1,297,296;, + 3;6,297,1;, + 3;2,7,9;, + 3;23,7,2;, + 3;22,7,23;, + 3;0,18,1;, + 3;16,0,1;, + 4;17,6,1,18;, + 3;3,0,16;, + 3;34,241,283;, + 3;282,34,283;, + 3;11,2,9;, + 3;23,2,5;, + 3;23,5,17;, + 3;10,3,11;, + 3;18,0,19;, + 3;0,3,10;, + 3;19,0,10;, + 3;25,185,186;, + 3;28,25,186;, + 3;193,25,194;, + 3;264,269,204;, + 3;227,264,204;, + 3;255,220,219;, + 3;259,220,255;, + 3;298,205,203;, + 3;300,298,203;; + + MeshMaterialList { + 1; + 1; + 0;; + Material { + 0.694118;0.694118;0.694118;1.000000;; + 50.000000; + 1.000000;1.000000;1.000000;; + 0.000000;0.000000;0.000000;; + TextureFilename { + "tiger.bmp"; + } + } + } + MeshTextureCoords { + 303; + 0.190860;-0.544059;, + 0.272086;-0.355992;, + 0.077337;-0.522561;, + 0.187013;-0.516511;, + 0.180133;-0.467245;, + 0.179370;-0.461784;, + 0.265206;-0.306726;, + 0.004406;-0.493426;, + 0.264443;-0.301265;, + 0.004719;-0.489377;, + 0.077765;-0.579757;, + 0.077380;-0.528268;, + 0.004406;-0.493426;, + 0.001581;-0.529958;, + 0.265206;-0.306726;, + 0.272086;-0.355992;, + 0.275933;-0.383540;, + 0.180133;-0.467245;, + 0.187013;-0.516511;, + 0.077979;-0.608548;, + 0.000000;-0.550385;, + 0.077765;-0.579757;, + 0.001581;-0.529958;, + 0.077380;-0.528268;, + 0.764787;-0.600058;, + 0.712026;-0.640601;, + 0.882850;-0.350956;, + 0.997293;-0.254425;, + 0.571239;-0.666781;, + 0.466839;-0.585368;, + 0.466839;-0.585368;, + 0.465868;-0.611086;, + 0.395923;-0.575438;, + 0.395452;-0.580559;, + 0.333360;-0.419449;, + 0.395923;-0.575438;, + 0.355184;-0.527123;, + 0.355184;-0.527123;, + 0.355215;-0.645708;, + 0.389458;-0.670719;, + 0.400009;-0.577639;, + 0.450862;-0.619968;, + 0.428283;-0.698636;, + 0.349750;-0.774111;, + 0.450862;-0.619968;, + 0.428283;-0.698636;, + 0.400009;-0.577639;, + 0.349750;-0.774111;, + 0.355215;-0.645708;, + 0.375498;-0.770684;, + 0.389458;-0.670719;, + 0.375498;-0.770684;, + 0.380320;-0.814463;, + 0.385866;-0.993469;, + 0.399884;-0.804614;, + 0.405685;-0.932268;, + 0.387276;-0.940921;, + 0.415286;-0.993271;, + 0.385034;-0.993466;, + 0.396878;-0.993421;, + 0.421811;-0.993083;, + 0.397606;-0.993432;, + 0.432642;-0.932004;, + 0.422107;-0.942626;, + 0.432889;-0.932775;, + 0.405989;-0.933040;, + 0.388004;-0.942997;, + 0.429913;-0.993060;, + 0.404586;-0.766082;, + 0.399436;-0.803843;, + 0.429321;-0.993050;, + 0.415226;-0.940741;, + 0.450708;-0.993185;, + 0.442901;-0.963505;, + 0.454028;-0.958674;, + 0.440448;-0.993006;, + 0.461835;-0.993160;, + 0.454276;-0.959110;, + 0.440696;-0.993010;, + 0.462082;-0.993162;, + 0.443493;-0.964678;, + 0.451300;-0.993190;, + 0.363002;-0.821800;, + 0.375432;-0.949709;, + 0.376264;-0.950333;, + 0.379246;-0.812387;, + 0.361774;-0.821176;, + 0.763676;-0.594291;, + 0.794303;-0.593952;, + 0.797220;-0.971853;, + 0.795071;-0.881937;, + 0.988489;-0.316579;, + 0.995281;-0.265891;, + 0.982078;-0.341098;, + 0.728091;-0.664021;, + 0.363002;-0.821800;, + 0.380320;-0.814463;, + 0.376264;-0.950333;, + 0.385866;-0.993469;, + 0.399884;-0.804614;, + 0.432642;-0.932004;, + 0.388004;-0.942997;, + 0.405989;-0.933040;, + 0.432889;-0.932775;, + 0.422107;-0.942626;, + 0.404586;-0.766082;, + 0.450708;-0.993185;, + 0.454028;-0.958674;, + 0.442901;-0.963505;, + 0.461835;-0.993160;, + 0.454276;-0.959110;, + 0.429913;-0.993060;, + 0.440696;-0.993010;, + 0.451300;-0.993190;, + 0.443493;-0.964678;, + 0.462082;-0.993162;, + 0.399436;-0.803843;, + 0.405685;-0.932268;, + 0.415287;-0.993271;, + 0.421811;-0.993083;, + 0.397606;-0.993432;, + 0.396878;-0.993421;, + 0.440448;-0.993006;, + 0.429321;-0.993050;, + 0.415226;-0.940741;, + 0.387276;-0.940921;, + 0.375432;-0.949709;, + 0.385034;-0.993466;, + 0.379246;-0.812387;, + 0.361774;-0.821176;, + 0.747633;-0.900476;, + 0.747633;-0.900476;, + 0.760910;-0.629293;, + 0.728091;-0.664021;, + 0.760910;-0.629293;, + 0.794303;-0.593952;, + 0.763676;-0.594291;, + 0.818767;-0.503206;, + 0.855912;-0.385869;, + 0.798742;-0.969124;, + 0.772012;-0.890951;, + 0.840834;-0.949998;, + 0.856528;-0.987951;, + 0.842461;-0.976419;, + 0.854901;-0.973715;, + 0.854792;-0.972749;, + 0.840726;-0.948204;, + 0.798742;-0.969124;, + 0.772012;-0.890951;, + 0.813072;-0.943402;, + 0.812062;-0.945211;, + 0.796818;-0.881257;, + 0.857904;-1.000000;, + 0.857904;-1.000000;, + 0.856360;-0.986493;, + 0.784658;-0.994402;, + 0.843837;-0.998782;, + 0.843837;-0.998782;, + 0.842293;-0.973714;, + 0.784659;-0.994402;, + 0.843837;-0.998782;, + 0.857515;-0.999664;, + 0.784659;-0.994402;, + 0.857515;-0.999663;, + 0.855974;-0.985798;, + 0.854404;-0.971689;, + 0.842221;-0.973714;, + 0.796818;-0.881257;, + 0.813072;-0.943402;, + 0.840726;-0.948205;, + 0.840834;-0.949998;, + 0.856139;-0.987294;, + 0.854516;-0.972681;, + 0.978706;-0.360300;, + 0.988489;-0.316579;, + 1.000000;-0.294706;, + 0.995281;-0.265892;, + 0.946417;-0.346659;, + 0.982078;-0.341098;, + 0.784658;-0.994402;, + 0.795071;-0.881937;, + 0.812062;-0.945211;, + 0.797220;-0.971853;, + 0.843837;-0.998782;, + 0.842388;-0.976420;, + 0.712026;-0.613714;, + 0.571239;-0.639087;, + 0.817656;-0.494263;, + 0.791951;-0.596430;, + 0.747631;-0.900474;, + 0.769377;-0.891977;, + 0.854799;-0.368082;, + 0.880522;-0.292123;, + 0.712026;-0.613714;, + 0.571239;-0.639087;, + 0.817656;-0.494263;, + 0.909887;-0.344988;, + 0.932623;-0.343050;, + 0.791951;-0.596430;, + 0.769377;-0.891977;, + 0.747631;-0.900474;, + 0.880522;-0.292123;, + 0.854799;-0.368081;, + 0.571241;-0.500134;, + 0.571245;-0.169067;, + 0.571244;-0.202102;, + 0.969832;-0.153042;, + 0.439309;-0.137774;, + 0.967293;-0.174011;, + 0.843505;-0.070163;, + 0.851957;-0.215881;, + 0.909864;-0.020599;, + 0.870018;-0.026565;, + 0.967293;-0.174011;, + 0.955798;-0.068650;, + 0.842181;-0.048945;, + 0.843505;-0.070164;, + 0.851957;-0.215881;, + 0.798798;-0.078033;, + 0.571244;-0.202102;, + 0.571241;-0.500134;, + 0.762086;-0.626358;, + 0.819864;-0.314794;, + 0.800124;-0.106254;, + 0.757422;-0.148109;, + 0.728088;-0.664016;, + 0.771814;-0.421584;, + 0.719266;-0.181517;, + 0.712028;-0.478808;, + 0.874427;-0.186227;, + 0.909370;-0.238010;, + 0.959999;-0.234332;, + 0.871408;-0.061697;, + 0.950664;-0.311544;, + 0.941794;-0.210256;, + 0.909884;-0.323149;, + 0.936871;-0.301041;, + 0.909867;-0.036985;, + 0.939400;-0.000000;, + 0.908856;-0.110724;, + 0.940704;-0.073317;, + 0.333520;-0.413657;, + 0.323329;-0.296884;, + 0.354021;-0.178827;, + 0.325241;-0.219199;, + 0.325051;-0.226951;, + 0.403359;-0.157494;, + 0.427480;-0.697780;, + 0.352889;-0.643688;, + 0.403919;-0.765721;, + 0.387560;-0.668621;, + 0.347925;-0.773819;, + 0.373902;-0.769713;, + 0.335634;-0.344847;, + 0.352162;-0.511265;, + 0.446010;-0.169247;, + 0.398287;-0.428836;, + 0.397574;-0.547381;, + 0.449832;-0.609995;, + 0.471708;-0.456328;, + 0.762086;-0.626358;, + 0.819864;-0.314794;, + 0.800124;-0.106254;, + 0.757422;-0.148109;, + 0.719266;-0.149444;, + 0.756097;-0.116784;, + 0.728088;-0.664016;, + 0.771814;-0.421584;, + 0.712028;-0.478808;, + 0.719266;-0.181517;, + 0.874427;-0.186227;, + 0.909370;-0.238010;, + 0.959999;-0.234332;, + 0.871408;-0.061697;, + 0.909884;-0.323149;, + 0.941794;-0.210256;, + 0.950664;-0.311544;, + 0.936871;-0.301041;, + 0.909867;-0.036985;, + 0.939400;-0.000000;, + 0.940704;-0.073317;, + 0.908856;-0.110724;, + 0.333520;-0.413657;, + 0.322366;-0.335988;, + 0.403921;-0.127418;, + 0.403359;-0.157494;, + 0.427480;-0.697780;, + 0.352889;-0.643688;, + 0.347925;-0.773819;, + 0.387560;-0.668621;, + 0.403919;-0.765721;, + 0.373901;-0.769713;, + 0.352162;-0.511265;, + 0.335634;-0.344847;, + 0.354212;-0.163323;, + 0.354021;-0.178827;, + 0.323329;-0.296884;, + 0.325051;-0.226951;, + 0.446010;-0.169247;, + 0.398287;-0.428836;, + 0.471708;-0.456328;, + 0.449832;-0.609995;, + 0.397574;-0.547381;; + } +} diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..ee1eed47 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/My Project/AssemblyInfo.vb @@ -0,0 +1,40 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/My Project/Resources.Designer.vb new file mode 100644 index 00000000..b5a64a5f --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/My Project/Resources.Designer.vb @@ -0,0 +1,64 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My.Resources + + + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If (resourceMan Is Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/My Project/Settings.Designer.vb new file mode 100644 index 00000000..34f1fe80 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Program.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Program.vb new file mode 100644 index 00000000..6d511a4b --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/Program.vb @@ -0,0 +1,22 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms + +Namespace D3D10Tutorial09_WinFormsControl + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New TutorialWindow()) + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/TutorialWindow.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/TutorialWindow.Designer.vb new file mode 100644 index 00000000..94fd2ad0 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/TutorialWindow.Designer.vb @@ -0,0 +1,58 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace D3D10Tutorial09_WinFormsControl + Partial Public Class TutorialWindow + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(TutorialWindow)) + Me.directControl = New Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl + Me.SuspendLayout() + ' + 'directControl + ' + Me.directControl.Dock = System.Windows.Forms.DockStyle.Fill + Me.directControl.Location = New System.Drawing.Point(0, 0) + Me.directControl.Name = "directControl" + Me.directControl.Size = New System.Drawing.Size(624, 442) + Me.directControl.TabIndex = 4 + ' + 'TutorialWindow + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(624, 442) + Me.Controls.Add(Me.directControl) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.Name = "TutorialWindow" + Me.Text = "Direct3D 10 Tutorial 9: Meshes" + Me.ResumeLayout(False) + + End Sub + + #End Region + + Private WithEvents directControl As Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl + End Class +End Namespace + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/TutorialWindow.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/TutorialWindow.resx new file mode 100644 index 00000000..0dd393c3 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/TutorialWindow.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAAABABoBgAAlgAAACAgEAAAAAQA6AIAAP4GAAAQEBAAAAAEACgBAADmCQAAMDAAAAAA + CACoDgAADgsAACAgAAAAAAgAqAgAALYZAAAQEAAAAAAIAGgFAABeIgAAMDAAAAAAIACoJQAAxicAACAg + AAAAACAAqBAAAG5NAAAQEAAAAAAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAAAA + AAD//wAA////AACAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMy2t7a2bMzMzMzMzMzMzMzMzMzMzMzMu7a3tnd2d2ZszMzMzMzMzMzMzMzMzMy7t7tr + a2dnZmZmbMzMzMzMzMzMzMzMzLu7e2tnZnZmZmZmZmzMzMzMzMzMzMzMy7u3u7e2tmdmZmZmZmbMzMzM + zMzMzMzMt7e7u3tra2Z2ZmZmZmZszMzMzMzMzMzLu7u7u7u7d7Z2ZmZmZmZmzMzMzMzMzMx7O7u7s3N7 + trd2tmZmZuZmbMzMzMzMzMu7u7uzNye7e2trZmd3ZmZmZszMzMzMzLO7u7MzqmZ3t7Z3ZrdyZmbmZmzM + zMzMy7u7s7MKqqZre2t2t3AqpmZmZmbMzMzMx7OzuzIqqqpnt7a3ZzIqamZm5mbMzMzMO7u7syKqqqpm + e3trYzKqqmZmZmZszMzMu7OzMiqqqqpqe7a2syKqqmpmZmZszMzLszszIiqqqqqmd7t7cCqqqqamZmZm + zMzHu7swAiKqqqqqZ3u3MCqqqqpqZmZmzMzLMzMzACIqKqqqZ7t7Aqqqqqqqd2ZmzMzLO7szMAIiqqqq + anszIqqqqqoid2ZmzMxzszOzMwAiIqqqpmMyKqqqqqIie2ZnbMy7O7OzszAAIiqqqqd6qqqqoiIzd2Zm + bMw3szs7OzMwAiKqqqqqqqqqIDN3tmZ2bMy7M7OzuzszACKqqqqqqqoiA3trZrZmvMxzOzOzs7O7MAIq + qqqqqqcjN7a3t2ZnfMw7M7Ozs7s7MwIqqqqqqqoje3t3a3d2fMx7OzM7O7O7MzAqqqqqqqpnt7e7trZ3 + fMy3MzOzuzuzswKqqqqqqqqme7tra2dnfMx7M7M7M7O7MwKqqqqqqqpqZ7u7u7a2vMx3szszs7OzMqqq + qqqqqqqmpnu7t7tnfMzLczM7OzswKqqqqqoqKqqqpme7u7e7zMzHOzOzMzMCqqqqqqIiKqqqpqZ7u7e2 + zMzLc7MzMzKqqqqqqiIAIiqqqmpnu7t7zMzMtzMzMCKqqqqqqgMwACIqqqqne7e8zMzMN7MzAiqqqqqq + ojMzACIqqqqnO3u8zMzMxzszACKqqqqqIDszMwIiqqIjO7vMzMzMy3MzAAIiqqqqA7O7MwAiIqIDu3vM + zMzMzHtzMwAioqqiM7s7szMCIiAzu7zMzMzMzMe3MwAiKqojM7O7O7MAIgO7u8zMzMzMzMx7MzAAIqID + O7OzuzMwAzO7vMzMzMzMzMzHdzMAAiIzszuzs7MzM7t7zMzMzMzMzMzMtzcwACMzOzM7OzuzM3u8zMzM + zMzMzMzMx7s3MDMzs7Ozs7Ozu7vMzMzMzMzMzMzMzHdzMzOzMzs7Ozs7t7zMzMzMzMzMzMzMzMy3d7cz + s7M7O3u3vMzMzMzMzMzMzMzMzMzMt3t7e3t7e7e8zMzMzMzMzMzMzMzMzMzMzMe3t7e3t8zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz///////8AAP///////wAA///AH///AAD//AAB//8AAP/w + AAB//wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/AAD8AAAAAf8AAPgAAAAA/wAA8AAAAAB/ + AADgAAAAAD8AAOAAAAAAPwAAwAAAAAAfAADAAAAAAB8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAIAA + AAAADwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAADAAAAAAB8AAMAA + AAAAHwAA4AAAAAA/AADgAAAAAD8AAPAAAAAAfwAA+AAAAAD/AAD8AAAAAf8AAP4AAAAD/wAA/wAAAAf/ + AAD/gAAAD/8AAP/AAAAf/wAA//AAAH//AAD//AAB//8AAP//gA///wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgIAAgAAAAIAAgACAgAAAwMDAAICA + gAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzLe2tmbMzMzMzMzMzMzMy3dnZ2ZmZmzMzMzMzMzMzHu7t3ZmZmZmzMzMzMzMzHu7u7 + t7a2ZmZmbMzMzMzMu7uzd3trZmZ2ZmbMzMzMy7uzMqZ7tnd3dmZmbMzMzMuzMCqma2t2cKpmZmzMzMy7 + MyKqqqe2tzKqpmZmzMzLszIqqqpmu3cKqqamZmzMyzMCIqqqpndzKqqqZmZszMszACIqqqprMKqqqqp2 + bMxzszACIiqqpzKqqqoidmbMOzszACIqqqqqqqqiA3ZmzLs7MzAAIqqqqqqiA3dmZsxzM7MzMAKqqqqq + I3trdmfMu7M7OzMAqqqqqqO3trdmzHMzs7MzAqqqqqqqe3t3a8x7OzszMqqqqqqqpme7trbMtzMzMCqq + qqqiqqqmZ7trzMtzMwKqqqqiAiKqqqZ7fMzHszAqqqqqoAAiqqqiu7zMw3MwIiqqqiMwAiqqI7e8zMy3 + MAIiqqIzMwIiIjO7zMzMx3MAIiogM7MAIiM7vMzMzMNzcAIiIzszMAIDu7zMzMzMdzMwIgM7OzMzO3vM + zMzMzMt3MwMzs7OzM7u8zMzMzMzMx3c3Mzs7O7e8zMzMzMzMzMw3e3t7e7e7zMzMzMzMzMzMzMN7e3t8 + zMzMzMzM////////////4B///wAD//4AAf/4AAB/8AAAP+AAAB/gAAAfwAAAD4AAAAeAAAAHgAAABwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AAAAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gA + AH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzM + zMzMzMzMzMzLZmbMzMzMy7e2ZmbMzMyzB3dndmzMyzKqe3CmZszDCqpnMqpmzLMyqqcKqqZsOzAqqqqi + dmwzszCqqie2bDMzMqqqZ7tsMzAqqqqme7zDAqqiAqqrzMcyqqMwojvMzHMqCzAjvMzMxzIzMzvMzMzM + xze7zMzM//+zMPg/a2vgD6pmwAfMzIADMyKAA6e2AAGqpgABzMwAATIqAAFmuwABqqaAA2zMgAMCIsAH + pnfgD6qq+D9szCgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWAAAA0QAAAM4A + AADNAAAAywAAAMgAAADGAAAAxQAAAMIAAADBAAAAvgAAALwAAAC6AAAAtwAAALUAAACzAAAAsAAAAK0A + AACpAAAApgAAAJwAAABzAAAAZwAAADwAAACiAQEAkgEBAN0CAgDAAgIAvQICAH0BAQBWAQEAzgMDAMMD + AwC/AwMAsAMDALQEBACGAwMA5wYGACUBAQDTBgYAxQYGAKQFBQDXBwcAuQcHAMAICABIAwMAMgICALQI + CACtCAgAoQcHAMcKCgD5Dg4AvgsLAOEODgDMDAwAmgoKANIPDwDFEREArQ8PAPoXFwDpFxcApBERANwY + GADJGRkA/iEhALcYGAD0IyMA1B4eAOQiIgBjDw8A7SUlABoEBAD9KioAlxkZAAwCAgClHR0A9SwsADMJ + CQDXJycAuSIiAMYoKAD+NDQAiRwcAPQ0NADnNDQA2jIyAP47OwCqKSkA9j09AP5CQgD+RkYA9ENDAP9J + SQC6NjYAyzw8AGYfHwA1EBAA/05OAPhNTQDlR0cA/1FRAKg3NwD/VVUAu0BAAEkZGQCKMDAA/1paAPZX + VwD2WloA/15eAMhLSwC3RUUA/2FhAG4qKgC/TEwA/2ZmALFHRwDoX18A9mZmALVLSwD/bGwAtk5OAMxZ + WQDmZWUAr01NAKBHRwD/cnIAt1JSADMXFwD2c3MA/3h4ACkUFAD/fX0A/4GBAOl3dwD/hoYA+oODAPaG + hgD/jY0AqF1dAGY5OQD/k5MA5oaGAMVzcwD/mZkA8JOTAP+engD/oqIA+6GhAKNpaQCEVVUA/6amAMuF + hQD/rKwA8KamAP+ysgD0q6sA/7a2APuzswD/ubkA+bW1AP++vgDgqakA/8LCAP/FxQD/yckA6Lm5AP/O + zgCOc3MA/M3NAOzCwgDDq6sAMy0tAAD+/gAA/f0AAPv7AAD5+QAA9/cAAPT0AADx8QAA7+8AAO3tAADp + 6QAA5uYAAOTkAADg4AAA398AANraAADT0wAAyckAAI6OAAB9fQABzs4AAcbGAAHCwgABuroAAbS0AAGt + rQABpKQAAZubAAGHhwAC+fkAAvf3AAF1dQAD//8AA/v7AAX19QAG//8ABubmAAJSUgAJ//8ADP//AAnA + wAAIj48ABmhoAAMxMQAQ8/MAEf7+AAqBgQAGSUkAFv7+AA+qqgAW6+sADH5+AAQoKAAWysoAHf7+ABzX + 1wAo/v4AJujoADT//wAt19cAMuLiADf29gA7/v4ABhgYAEf9/QBU/v4AUPDwAD2wsAAYREQAFj09ABAs + LABO1NQAZPDwAGr29gB29fUAPHx8AC9dXQBarq4Ac93dAIC+vgBDYmIAltTUAIeYmAAAAAAA//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////XGRqcHh+hIeK//// + //////////////////////////////////////////9ISFZaZGpzfoKEh4qNjZCSk/////////////// + ////////////////////////QEBIVlxmc36Eh4qNkJKSk5eXl5mZ//////////////////////////// + /////0xCSEhRWWFteIKHipCSk5mZm5ubm5ubm5v/////////////////////////////QkJMTFFRVllk + anN+hIqNkpmbnaGhoaGfn52d//////////////////////////9GRkxMTEhASFNYWmRteIKHjZKXm6Gj + pKSko6Gfn////////////////////////0ZGRkJCOzszPENVU1lhanN+hYqQl5uho6WlpaSjoZ////// + ////////////////REREPDwzMzMqPWllVVZcZnB4goeKkJecoqaqqaelpKGf//////////////////9E + Pjw8NSUlJRAe/PmoXlhaZG1zfoSHipGYqKirpqmnpaShn////////////////04+PjUlJSUBJKzU5e77 + lWNZYWpzeIKFiY+W+O/7q6qpp6WjoZ3/////////////TkM+NRoaGgQV8MCx4uz0+3JbYWZweH6Ehous + 397u/auqqaeloZ+b////////////Qz44KhoaBB3xw7Kt3Obt+otjWmRqc3iBeozww8rq9f2rqqmnpJ+b + //////////9OQzgnAAAEJPDCtLCt2eTs9P5uW1xkanN7fYDHubDk7fb9q6qppaGdm/////////9DPzYf + AgsW8MS6s7Ct0uLm7fqVY1lcZmx6cfLDtq/c5u32/auqpKOdmf///////1A/OSgHEhbxvsO8t7KuzNnk + 7PT+blhZXGNlgMu8tK/S4urt9v2rpqGfmZf//////1A/MigMGRfr1sfEwLizr8/i5u37i1RRWF5f8cK3 + sq6t0+Lm7PT7q6afmZP//////1A/LBsNGR5H68vHxcG7tbDT5Oz0/mdMVFdg1ru0sK6urrDO3uj5/qKg + mZL//////085LBsKESQeR+vWvsbDvLax2ebt+n1QT0Xww7WxsLCytLe7wd33qKKemZL/////UE9BKxwJ + Cg8ZHiZK27/HxMC3sOLq7v5pX/C9tbGwsbO3u8HH1vGMj5qbmZKN////UE9BKwwKCAcLFBUXSuDWvsXA + ts3k6vPv7+Gyrq+wsrfAxcjxgIyLjpSZl5CK////UE9BIw0LCQcFBxAkHiZK277Eu7PT5OTk4tnPra2v + tsDI8oBxfXqGiI2Tk42H////XU86Ig8NCggFAgIHExUXStHHvbev09zc2dPSz9LQxNaDX2VudXZ+goeQ + ko2E////XU86IhAODAoHBAEAAQ0dLkrLw7myrdLT0s/S09nh+GhpXmNrbXBzeISKkIqC////XU86EREP + DQsIBQIBAAARFibXxrmyrq3MzMzP2eLn92leW1xhZGZqbX6Fiod+////Z1c6EhIRDwwKBwQBAAAEGRfg + xrexrq2tra3P2eLp85ZeWFlZWlxcZHCCh4V4////b109KRMREA4MCQYDAQADGS7WwLOwra2trq2t0+Lm + 7vuLVFFRVlZWWWZ4hYJz////b11LMRMTERANCwgFAgIOHtvBtbGvra6vsbGwrtnk7PX7ckhISEhRUVpw + fnhw////b2dXPSkTEhEPDQoICRIX38CzsK+urrCztri3tLDc5u31+15AQEBASFZmc3Bw/////29XPTEY + ExIRDw0OGWDFt7Kvrq2tsLO6vcK9u7ax3Obt9ftvOzM7O1Fcamb//////29lSz0UGBMSERgW8MKzr6+t + ra2usrvG1svHw8C4sdzm7fX6lTwzM0hWYWT//////29vVz0xFBQUHS3WvLKvrq2tra2xt8bxSuvRyMW9 + uLHc5uzt+qhDM0BRWWT///////93ZUs3GR0eg9bBt7Kvra2tra+zvfEXLSZK28jFvbix2eTq7vlpPkhR + Vv////////90b1dJJB4m0cfCu7Wwra2trrG61S0UFBUuStvIxb24ssnY4/dSPkxWWv//////////d2VX + Uh4m4L/Gwru1sK2usLXFYBIEBREVF0rRyMW9urfA2i06PExW////////////dHdlSUUuSuC/xsK7tbCw + tL3xGQUBAQMQHRdK277FwcLfTRk+RlNi/////////////3d0ZVJFLkrgy8bCu7W0u9YWCgQCAQEDDh0X + StG+x9ZNJDg8TFj///////////////95dGVSRS5K17/Gwru7xhcTCQcFBAMBAw4VLuvW1k0kNjxGU/// + ////////////////f3RlUkUuSte/xsPF8R0OCwoIBwUEAwUTFi5HTR0yPkRU//////////////////// + /393ZVJFTUrXy77bHhMPDQwKCQgHBQQJFBUWJDQ+RFT///////////////////////9/eWVpX2BH8tsX + GRIRDw4NCwoJBwYFITA6OUNEVP//////////////////////////eXl0aXFoYC0dGBMSERAPDQwLCiAo + Mjk/Q05V/////////////////////////////3d/fH1pcVJLPTowMDAvLys0NDk/P05OVVX///////// + ////////////////////////d398dGVlV1dPQUFBQU9PUFBQUFVV//////////////////////////// + //////////90eX95b2dnZ11dXV5eXl5eXv////////////////////////////////////////////9v + cnJycnJubm5eXv////////////////////////////////////////////////////////////////// + ////////////////////////////////AAD///////8AAP//wB///wAA//wAAf//AAD/8AAAf/8AAP/A + AAAf/wAA/4AAAA//AAD/AAAAB/8AAP4AAAAD/wAA/AAAAAH/AAD4AAAAAP8AAPAAAAAAfwAA4AAAAAA/ + AADgAAAAAD8AAMAAAAAAHwAAwAAAAAAfAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAAAA + AAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAgAAAAAAPAACAAAAAAA8AAIAAAAAADwAAwAAAAAAfAADAAAAAAB8AAOAA + AAAAPwAA4AAAAAA/AADwAAAAAH8AAPgAAAAA/wAA/AAAAAH/AAD+AAAAA/8AAP8AAAAH/wAA/4AAAA// + AAD/wAAAH/8AAP/wAAB//wAA//wAAf//AAD//4AP//8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAC9AAAAuwAAALkAAAC2AAAAswAAALEAAAClAAAAowAAAKEA + AACcAAAAkQAAAG0AAABpAAAAZAAAAF0AAABYAAAANgAAADAAAAAqAAAAIgAAABMAAAAHAAAAhgEBAL8C + AgC8AgIAqAICAKECAgBPAQEAQgEBALsDAwCyAwMArQMDAH0CAgC3BAQAiwMDALMFBQC8BwcA3AkJAKUH + BwBVBAQAzgsLALwKCgCqCQkAOwMDAOgNDQAPAQEAXQcHAJcMDACgDg4AvBISAPkaGgDNFhYAWwoKAOcb + GwC2FhYA2hwcAKsXFwDDGxsAuxwcALUbGwDKICAA8ycnAJMZGQBFDAwA0yYmAOUtLQC2JCQA/TQ0APAy + MgDGLCwA+Do6AKwoKAD/PDwA1TMzAP8+PgDpOjoA/0REAPBAQADIOTkAwDc3AP9KSgC3NTUATRcXANdC + QgD/T08A+E1NAM1AQAAqDQ0A5khIACYMDADxTU0Avj09AKw5OQCVMTEA/1VVAMFCQgC6QUEAsT4+AP9b + WwDISUkAvkZGALFCQgBpJycAzU1NAAgDAwD/YmIANBQUAOhcXAD/ZmYAu0tLAPhnZwD/a2sAs0xMALxR + UQD/cnIAkUFBAHk2NgCkS0sA/3Z2AJtISAC2VVUAzmNjAP98fADodXUASyYmAP+EhAD2gYEAqFlZABYM + DAD/jIwAm1hYAGc7OwD+k5MAqmNjANJ9fQD/mpoA/56eAP+iogD/qKgA/6qqAN6WlgD/ra0A+6qqAP+w + sABzUVEA/7i4AOurqwD/u7sA/729APK3twCFZWUA/8PDAL6RkQD/ysoA16urAPXExAD3ysoAwqamAMyx + sQAhHR0AKScnAB0cHAAA//8AAP39AAD7+wAA+PgAAPb2AAD19QAA8/MAAPHxAADv7wAA7e0AAOrqAADm + 5gAA5OQAAOPjAADh4QAA398AAN3dAADY2AAA19cAAM3NAADLywAAx8cAAMPDAADBwQAAtbUAALCwAACt + rQAAqakAAKamAACjowAAlZUAAJKSAABmZgAAZGQAAY2NAAGCggACvLwAA/7+AAPs7AADwsIAApycAAT8 + /AAEtLQABK6uAAJcXAAEl5cAB/n5AAf09AAG2NgABaKiAASRkQADbGwACPX1AAR4eAAJ/v4ADv//AAZm + ZgAQ+voACpycABT//wALiooAFfT0ABz9/QAe6OgAI/39AAk6OgAs/f0ALu7uACKurgAz/f0AHo+PADz8 + /AA86+sAPNXVAEn9/QBG7+8AInBwAFL+/gA2oaEAVPX1AF/9/QAECgoAYOTkAFzT0wBr8fEAaM7OAGO8 + vABx1dUAgN7eAHzIyACQ5eUAfpeXAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////9janB3foKFiP////////////// + /////////////0lJUWNzfoWIiouMjI6Q//////////////////////9ERERJUWNwe4KJjpKUlZSS//// + //////////////9FPj4zMzZKTlVqc36IjJSYmpiVlP//////////////QjY2LSkwdf5XTV9te4KFjZmb + nJqYlP///////////0I2LSYfHOfr9YBOX213f4eR8fienZqYlP//////////OCYZIWvH3Ojz/GhVanN8 + g6HT6vufnZqV/////////zgpGx3ftqrZ5fD3hltjb3p91a3j8/2fnZiS//////9BNCAc1ry3r6bh6vP8 + aF9sdKK3q9rq8/2fnJKQ/////z0yIxPPwby3rqbj7feDWWR90LCqpOHq8vuelo7/////PSoXERbDwr24 + sajl8PliXqK0rKmoqcni7P6bjP///0Y6KgkNExbExb+6s9Lo7pF9yqioqa2zts3pl5OMif//RjolBAoO + ExbPxsC5sNzl5uLZo6WpsLrGoISHj4uF//9GOyIDBAoMERX02Lu0qdrh3trZzK7Uon10en+JioL//1A8 + JAQCAwcXDxMWxbWrpNna2t7g71NeaGxvd4KIfv//XEMgBgQBAAMJDRTktaqlo8jZ3uPsdVRWX19qe4V3 + //9lQysgBgMBAAkQgb2tqKamqKjR4er2dk5LTVVwfnP//2VSORogBgYLHd20q6emp6ywsq7S5fD6gFdF + SWNzbf//YWE5JwcHIRLOrKempaars7rHuLLX6PD3/GZFUWpj////bkgxFxBay7OrpqSkqLDL5Ma/urHR + 5e3y+UZLVf////9uYj8o5MW8tq+opaaruIEUFtbAuK+o4OLxQ0RL/////2JxXlMu1sG8tq+pqa/fEA0T + 9Ma+uLS01DU4RE3//////3F2Z1gWw8G8t7Kx1B0ICA8Vz8K+u9UdMj5H/////////3l4Z1hpw8G9usdY + CwACFxEWw8LYLCs2Rf//////////Ynl4Z1hpw8LA2A4FAAAHDBMu5CwnOEVO////////////Znl4Z2uB + z9sRCwQBAAIKDBwvMThCTP//////////////Znl2dX1rQCEaHyIZGB4rMTxBQkz///////////////// + /3GAeHReSDw3NzI6Oj1GSkr//////////////////////11xeXJuZWBcT1dXV0pK//////////////// + ////////////XGVlZGRkV0//////////////////////////////4B///wAD//4AAf/4AAB/8AAAP+AA + AB/gAAAfwAAAD4AAAAeAAAAHgAAABwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AA + AAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gAAH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvAAAALsAAAC6AAAAsgAAALEAAACwAAAArQAAAKcAAACfAAAAkwAAAH4A + AABtAAAAPAAAAKgEBAChBQUAYAMDADsCAgBVBAQAOwMDAKIMDAC0Dg4Avg8PANEWFgBoCwsA5xoaALsV + FQDFGBgAsxYWADwICACoFxcAgBISAPYuLgDfKSkA4y0tAJwfHwCyJCQAzy0tAOAxMQDzNzcA8zk5APA5 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAJGRkYLISEhHxwcHEB+FxeKtB4exd8o + KOr/ODj//0VF//9QUP//W1v//2Zm//9wcP//eHj//39///+Ghv//jIz//5GR//+Wlv//mZn/2YaG7aNo + aNJZOjquAAAAfwAAAF8AAAA7AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BZmZmBT09PRUwMDA1jB4eiMQa + Gs/0Hh75/ysr//86Ov//SEj//1ZW//9lZf//cXH//319//+Ghv//jo7//5OT//+Zmf//nZ3//6Cg//+k + pP//pqb//6en//+oqP/0oqL5tHl53F9BQbMAAAB9AAAAVgAAAC0AAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wGSkpIHSkpKH3Qp + KV66Hx++6yEh9fsmJv/9Li7//zU1//9DQ///T0///11d//9tbf//enr//4aG//+Pj///l5f//56e//+k + pP//qqr//66u//+wsP//s7P//7Oz//+zs///s7P//7Oz/+6np/ahcXHUNCYmngICAmwAAAA8AAAAFwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////AoCA + gAhEREQimyQkhNAgINz0JSX/9y0t//kvL//8MjL//zQ0//86Ov//RET//1BQ//9aWv//aGj//3R0//9/ + f///ior//5aW//+goP//qqr//7Ky//+3t///vLz//76+//++vv//vb3//7u7//+5uf//t7f/y5GR52VJ + SbcCAgJ5BAQERwAAABoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8DqqqqCU5OTiSsJSWW3CIi7O8lJf/yKir/9Ssr//cqKv/7KCj//iUl//0nJ//4MTH/9zk5//1F + Rf//UVH//19f//9ra///eHj//4WF//+Skv//np7//6mp//+zs///vLz//8LC///Fxf//xsb//8XF///C + wv//vr7//7u7/+KkpPKAXFzDAgICgAAAAEoAAAAaAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wOzs7MKWlpaIrAkJJrfISHz7CUl/+4kJP/wIiL/9B4e//YaGv/5FRX/+BER/+sS + Ev/WICD/3C0t//Q1Nf/+QkL//05O//9bW///Z2f//3V1//+Bgf//jY3//5ub//+mpv//srL//7y8//7D + w//9yMj//svL///Kyv//x8f//8LC//++vv/ura33iGNjxwQEBIAAAABGAAAAFwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////A9XV1QZsbGwariYmkNseHvPnISH/6SAg/+saGv/tFRX/8Q8P//UM + DP/xCQn/1QcH/6EPD/+KLS3/qzk5/983N//7PT3//0lJ//9WVv//YmL//2xs//94eP//hIT//4+P//+a + mv/9paX/9Kur/+Wrq//js7P/7sLC//vMzP/+zs7//8nJ///ExP//v7//7q2t94FeXsMCAgJ5AAAAPAAA + ABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Bo6OjhKoLCxz0iAg6uIbG//kGhr/5hUV/+gP + D//sCQn/7QQE/+MEBP+vAQH/WAcH/0NiYv9anJz/iG5u/8dAQP/1PT3//0ZG//9SUv//Xl7//2ho//9z + c///fHz//4aG//2QkP/wk5P/y4WF/5Rqav+QgYH/u56e/+a+vv/7zs7//8/P///Ly///xMT//76+/+Ol + pfJnSkq3AgICbAAAAC0AAAAIAAAAAAAAAAAAAAAAAAAAAP///wH///8Ev7+/DJg8PEPGISHU3Rsb/98V + Ff/hDg7/4wkJ/+YFBf/kAwP/0AEB/4MBAf8qNTX/CcDA/ybo6P9L6ur/ccDA/6NkZP/hQkL//END//9P + T///Wlr//2Rk//9ubv//eXn//4KC//aGhv/Penr/f09P/zdXV/8/u7v/esXF/7mqqv/pwcH//M7O///P + z///ysr//8PD//+9vf/LkpLnNicnngMDA1cAAAAbAAAAAwAAAAAAAAAAAAAAAP///wL///8HgICAFrch + IajZHR3/2hYW/9sNDf/dBgb/4AIC/98CAv/LAQH/cAAA/x5AQP8Dzc3/APf3/x7///9C/f3/Y/Hx/4S5 + uf/DTk7/9END//5MTP//VVX//2Bg//9qav//c3P//Hx8/+d6ev+eWVn/PCQk/w9/f/8X5ub/VvLy/4vZ + 2f/CsLD/68PD//zOzv//zs7//8jI///AwP//uLj/oXJy1AYGBn8AAAA7AAAACwAAAAAAAAAAAAAAAP// + /wTMzMwKqykpYc0eHvHVFhb/1g4O/9gGBv/aAgL/3AAA/8sAAP9+AAD/GkBA/wO8vP8A8/P/AP7+/xb/ + //81////Vf///3Lh4f+oXl7/5kRE//xGRv//UFD//1pa//9kZP//bW3/9nNz/8lmZv9kNjb/EUdH/wK5 + uf8C9/f/Ov7+/2v39/+X1NT/xrCw/+zDw//9zs7//8zM///Fxf//u7v/7qio92NGRrQDAwNgAAAAHgAA + AAIAAAAAAAAAAP///wZxcXESuyEht9EaGv/RERH/0wYG/9QBAf/XAQH/ywAA/4kAAP8YRkb/AsPD/wDv + 7/8A+fn/AP7+/xD///8o////Rv///2Px8f+JmZn/x01N//RDQ///Skr//1NT//9cXP/8ZWX/5mVl/5tJ + Sf8vGBj/A5ub/wHh4f8A+fn/Jf///0////91+Pj/mdXV/8awsP/swsL//MvL///IyP//v7///7W1/7d+ + ft0GBgaBAAAAOgAAAAoAAAAAAAAAAP///weqJiZVyR0d9MwVFf/ODAz/zgMD/84AAP+7AAD/awAA/xdD + Q/8CsrL/AN/f/wDw8P8A+fn/AP7+/wn///8c////Nv///1X9/f9y39//o2pq/+NDQ//8Q0P//0tL//9U + VP/2Wlr/y1JS/2cuLv8TKyv/ALy8/wDp6f8A+vr/FP///zX///9X////efPz/5vW1v/JsLD/7sLC//zH + x///wcH//7a2//SmpvldPz+vAwMDVwAAABYAAAAAAAAAALOzswq3IyOfyhwc/8kREf/JBwf/xQEB/6kA + AP9hAAD/Ez4+/wKNjf8AuLj/ANHR/wDm5v8A9PT/APz8/wL///8R////KP///0X///9j8vL/ipWV/8xH + R//2PDz//0FB//1JSf/pTEz/oTo6/zQVFf8FeHj/ANbW/wDv7/8A+/v/CP///x////84////V////3X1 + 9f+Zzs7/x6ys/+u9vf/8wMD//ri4//+srP+mbW3TBwcHcQYGBikAAAADAAAAAIVHRxm9ISHaxhkZ/8UM + DP/EBQX/ugAA/40AAP9BAAD/DB0d/wFqav8AnJz/ALa2/wDPz/8A4+P/APLy/wD7+/8G////G////zb/ + //9V+fn/dsLC/6lcXP/kOzv//Tc3//c+Pv/MOTn/aCEh/xI9Pf8Bv7//AObm/wD09P8A/Pz/Af///w3/ + //8a/v7/L/39/0n5+f9o7u7/j8TE/8Ojo//tt7f//Li4//+urv/bjIztFxISiwQEBD4AAAAKAAAAAKgk + JFXFIyP/wxcX/8EJCf/AAgL/twAA/5QAAP9UAAD/GgAA/wMfH/8AcnL/AJaW/wCvr/8Ax8f/ANzc/wDs + 7P8A+Pj/C/7+/yb///9G/f3/Ze3t/4WoqP/DQUH/7i8v/+cwMP+hJyf/OA8P/wZubv8A29v/AO/v/wD4 + +P8A/Pz/AP39/wD8/P8A+fn/BfX1/xXv7/8y4uL/XLq6/5qTk//drKz/+bW1//+trf//n5//ZD8/sQYG + BlEAAAASAAAAALIlJYnCISH/vhQU/74HB/+/AgL/vgAA/60AAP+FAAD/TwAA/xsAAP8DFxf/AGdn/wCM + jP8Apqb/AL29/wDT0/8A6Oj/APf3/xP+/v8z////Uv39/23c3P+eTk7/xyws/7YjI/9dEhL/E0RE/wG4 + uP8A7e3/APb2/wD5+f8A+fn/APX1/wDv7/8A5ub/ANra/wPGxv8Pqqr/N319/41sbP/epKT/+7Oz//+s + rP//np7/mFtbygoKCmIAAAAZAAAAALcoKLG/ISH/uxMT/7sHB/+9AgL/wAAA/78AAP+yAAD/jwAA/1sA + AP8nAAD/CAIC/wFHR/8Afn7/AJub/wC0tP8Az8//AObm/wD5+f8d/v7/Pf///1X09P9wjo7/gjs7/2Qg + IP8gSkr/AsvL/wDt7f8A9/f/APj4/wD39/8A8fH/AOfn/wDZ2f8Ax8f/AZub/whfX/8fOjr/Xjw8/7h5 + ef/wpqb//rGx//+qqv//nZ3/vG1t3RAQEG8AAAAgAAAAALcpKdG8IiL/uRMT/7gGBv+5AQH/vgAA/8MA + AP/EAAD/uwAA/54AAP9uAAD/PAAA/xIAAP8CKyv/AGVl/wCPj/8Ar6//AM/P/wDp6f8D+/v/Jf7+/z39 + /f9I3d3/R7Cw/zGmpv8Sy8v/APX1/wD8/P8A+/v/APn5/wDz8/8A5+f/ANDQ/wCtrf8DhIT/Ej09/zYb + G/9vODj/smFh/+aGhv/7oaH//6ur//+np///mpr/13Z26w8PD3gAAAAlAAAAALksLOe6IyP/thIS/7QE + BP+2AQH/uwAA/8AAAP/FAAD/yQAA/8UAAP+xAAD/iQAA/1cAAP8pAAD/CgAA/wFHR/8Ajo7/ALa2/wDY + 2P8A8PD/DP39/yP///8u/f3/LPj4/yD4+P8R/f3/Bf///wD///8A////APv7/wDq6v8AzMz/BISE/xIt + Lf8xFRX/ZCsr/55HR//MX1//63Nz//qDg///lpb//6Oj//+jo///lpb/63t79RQUFIAGBgYpAAAAALsx + Mfe3IiL/shAQ/7EDA/+zAQH/uAAA/70AAP/CAAD/yAAA/84AAP/OAAD/xAAA/6YAAP91AAD/OQAA/wwA + AP8BUVH/AJub/wDIyP8A5+f/APr6/w3///8Y////Gf///xP///8N////CP///wf///8I////Bubm/wKx + sf8MYWH/KxUV/2IiIv+bOjr/yU9P/+hfX//2Zmb//HBw//94eP//iYn//5mZ//+dnf//kpL/+Hx8+xUV + FYQGBgYrAAAAALs0NP60IiL/rw4O/64DA/+wAAD/tQAA/7oAAP+/AAD/xQAA/8sAAP/RAAD/1QAA/9IA + AP+2AAD/egAA/zEAAP8HDAz/AHd3/wC6uv8A4OD/APX1/wD///8J////C////wr///8H////CP///w3/ + //8T/f3/GsnJ/yZiYv9KGRn/iSgo/8Y+Pv/nTU3/9ldX//xdXf//YGD//2Rk//9tbf//fX3//46O//+X + l///jIz//nh4/xgYGIEGBgYpAAAAALo4OPezJSX/rA8P/6sCAv+tAAD/sgAA/7cAAP+8AAD/wgAA/8gA + AP/OAAD/0wAA/9gAAP/UAAD/rgAA/2gAAP8fAAD/AzU1/wChof8A4OD/APT0/wD9/f8B////A////wP/ + //8E////B////xD///8d/f3/LdfX/0h9ff+FMDD/zTc3//NDQ//9S0v//09P//9SUv//VVX//1hY//9e + Xv//cHD//4OD//+QkP//hob/+G5u/BkZGXsHBwcmAAAAALg+PuizKyv/qhIS/6gCAv+qAAD/rgAA/7MA + AP+5AAD/vgAA/8QAAP/KAAD/0AAA/9YAAP/aAAD/ygAA/5MAAP86AAD/CCUl/wCgoP8A5eX/APb2/wD9 + /f8A////AP///wD///8B////Bv///xD///8h////N/b2/1PKyv+IWlr/zz4+//k9Pf//QED//0ND//9G + Rv//SEj//0pK//9QUP//YmL//3h4//+IiP//gID/7GJi9RsbG3IICAghAAAAALZBQdOzMDD/qRUV/6UE + BP+nAQH/qwAA/7AAAP+1AAD/ugAA/8AAAP/GAAD/zAAA/9IAAP/XAAD/zQAA/5UAAP8xAAD/BWpq/wDM + zP8A8PD/APn5/wD+/v8A/v7/AP///wD9/f8A/v7/Af7+/wv///8d////N////1Ly8v9zvr7/qVtb/+g6 + Ov//NDT//zc3//86Ov//Ozv//z4+//9CQv//VVX//2tr//+AgP//eHj/3FdX6R4eHmcKCgoaAAAAALRD + Q7S0ODj/qhwc/6QICP+lAgL/pwAA/6wAAP+xAAD/tgAA/7wAAP/CAAD/yAAA/84AAP/OAAD/tAAA/1EA + AP8PTEz/AcfH/wDt7f8A9/f/APv7/wD+/v8A/f3/APv7/wD39/8A9vb/APj4/wD8/P8R/v7/Kv///0f9 + /f9k9fX/hL+//71PT//6Kir//yoq//8rK///Li7//zAw//82Nv//R0f//2Ji//91df//bm7/xUxM2iMj + I1gAAAASAAAAALFBQYq2QED/rCcn/6QPD/+jBQX/pAAA/6gAAP+tAAD/sgAA/7cAAP+9AAD/wgAA/8EA + AP+oAAD/QQAA/wx/f/8B0ND/APHx/wD4+P8A+/v/AP39/wD9/f8A+Pj/APHx/wDp6f8A5OT/AObm/wDu + 7v8A+fn/FP7+/zH///9P////bPX1/4y6uv/OQED/+x4e//8dHf//Hx///yIi//8oKP//PDz//1VV//9m + Zv//YGD/qkJCwykpKUUAAAAKAAAAALE9PU+3R0f/rS8v/6MVFf+hCAj/oQEB/6QAAP+pAAD/rQAA/7MA + AP+3AAD/tQAA/44AAP8wDw//Bqys/wDn5/8A9fX/APr6/wD8/P8A/v7/AP7+/wD5+f8A8PD/AN/f/wDL + y/8Aw8P/AMjI/wDX1/8A6Oj/APf3/xb9/f80////Uv///2719f+Ltrb/vkZG//UVFf//EBD//xUV//8b + G///MTH//0hI//9bW///Vlb/iDw8nzU1NTBAQEAEAAAAALEzMwqzRUXZsDo6/6YfH/+gDQ3/ngEB/6EA + AP+kAAD/qQAA/6sAAP+iAAD/agAA/xtDQ/8DwsL/APDw/wD6+v8A+/v/AP7+/wD+/v8A/v7/APz8/wD0 + 9P8A29v/AaWl/wFtbf8Ac3P/AJ6e/wC3t/8Azs7/AOTk/wD39/8W/v7/Nf///1H///9p9/f/f9jY/6Rt + bf/qERH//wcH//8REf//Jyf//z4+//9OTv/jSUntSzw8ak1NTR7///8B////AQAAAACwQkKbtEVF/6kq + Kv+hFBT/nQUF/5wAAP+dAAD/mAAA/4AAAP9DAAD/D2pq/wHR0f8A8/P/APv7/wD9/f8A/v7/AP///wD/ + //8A/v7/APf3/wDl5f8CoqL/Cj8//xAFBf8HERH/AVBQ/wCHh/8Ara3/AMrK/wDk5P8A9/f/Fv7+/zH/ + //9L////Xv39/27f3/+LfHz/0Rwc//oPD///IiL//zU1//9BQf+/Pz/MRkZGSWlpaRH///8B////AQAA + AACuPT1LtktL8602Nv+kHx//mgoK/5EBAf9+AAD/UgAA/yYSEv8Jb2//AcbG/wDn5/8A9fX/APv7/wD+ + /v8A////AP///wD+/v8A+/v/APHx/wHJyf8TQUH/PAAA/0oAAP8qAAD/CgEB/wFISP8AiIj/AKur/wDI + yP8A5OT/APb2/xD9/f8n/v7/Ofv7/0bv7/9XtbX/kDQ0/94aGv/6KSn//Tc3//U4OPmVQUGWXV1dLL+/ + vwgAAAAAAAAAAAAAAAAAAAAAsUZGr7JDQ/+nLS3/mxQU/4IGBv9bAQH/JQIC/wdRUf8BmJj/AMHB/wDZ + 2f8A7Oz/APj4/wD+/v8A////AP///wD9/f8A9vb/AN/f/wiPj/9MAAD/lwAA/5sAAP9wAAD/NAAA/wsA + AP8BR0f/AImJ/wCrq/8AyMj/AOTk/wD09P8C+fn/EPPz/xzX1/81e3v/iRkZ/9wbG//3Kyv/+zg4/8w5 + OdVYWFhRi4uLFv///wQAAAAAAAAAAAAAAAAAAAAArT4+UrNLS+6uPT3/nyUl/4MQEP9VBgb/IQEB/wUh + If8Aenr/AKWl/wDCwv8A29v/AO3t/wD4+P8A/v7/AP39/wD5+f8A6+v/BKqq/zMREf+pAAD/ywAA/8gA + AP+sAAD/dwAA/zcAAP8KAAD/AVFR/wCIiP8ArKz/AMnJ/wDf3/8A5ub/Ac7O/wqBgf9JBwf/sA8P/+kd + Hf/3Ly//7TY29p9CQpR0dHQus7OzCv///wMAAAAAAAAAAAAAAAAAAAAAAAAAAK9FRZu0Skr/qDY2/5Ie + Hv9sDg7/NgMD/w8AAP8CKir/AH19/wClpf8AwsL/ANzc/wDt7f8A+Pj/APn5/wDv7/8Bycn/HTs7/5UA + AP/JAAD/0gAA/9MAAP/MAAD/sQAA/3oAAP86AAD/DAAA/wFKSv8AjIz/AK+v/wDFxf8AwcH/CHx8/zUJ + Cf+SBgb/2RMT//AlJf/1MzP/wjw8xGtra0WmpqYX////BP///wEAAAAAAAAAAAAAAAAAAAAAAAAAAKo5 + OSiwSUnKsUhI/6UzM/+MHh7/YwwM/zMEBP8PAQH/Aisr/wB1df8ApaX/AMLC/wDb2/8A6+v/AO7u/wDa + 2v8Oamr/ZgAA/74AAP/LAAD/zgAA/9AAAP/RAAD/zQAA/7QAAP99AAD/PQAA/wsAAP8AWVn/AJCQ/wCe + nv8Ia2v/MwkJ/4kDA//QDQ3/6hwc//AsLP/UODjgjlJSa5WVlSTo6OgL////Av///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACtPz9ZtE9P47FHR/+kMzP/ihwc/2MODv8yBQX/DgEB/wMuLv8Afn7/AKam/wDB + wf8A19f/ANra/wSlpf88AAD/pQAA/8EAAP/FAAD/yAAA/8sAAP/NAAD/0AAA/80AAP+0AAD/dwAA/zEA + AP8GFBT/AmNj/wZhYf8wCwv/hAQE/8oLC//kGBj/7CYm/90xMe6pRESNi4uLLtLS0hH///8F////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0REdLRQUO+xSEj/ozIy/4kcHP9hDg7/MAQE/w0B + Af8CMDD/AH9//wCkpP8Aubn/Aa6u/xo8PP9+AAD/tQAA/7wAAP+/AAD/wgAA/8UAAP/IAAD/ywAA/80A + AP/JAAD/pwAA/2YAAP8tAAD/GggI/zIGBv9/AwP/xgoK/+AWFv/nJSX/4S8v9LQ8PJ6MjIwz3NzcFv// + /wr///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALBHR361U1PwskpK/6Q1 + Nf+NIiL/YxER/zMICP8QBAT/AzEx/wB0dP8Bj4//Dk1N/1sAAP+lAAD/swAA/7cAAP+6AAD/vQAA/8AA + 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 + yf+AAU3/wANP/+AHYf8= + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/TutorialWindow.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/TutorialWindow.vb new file mode 100644 index 00000000..e8c8bf51 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/TutorialWindow.vb @@ -0,0 +1,166 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms +Imports System.Windows.Media.Media3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + + +Namespace D3D10Tutorial09_WinFormsControl + ''' + ''' This application demonstrates the use of meshes + ''' + ''' http://msdn.microsoft.com/en-us/library/bb172493(VS.85).aspx + ''' + ''' Copyright (c) Microsoft Corporation. All rights reserved. + ''' + Partial Public Class TutorialWindow + Inherits Form + #Region "Fields" + Private device As D3DDevice + Private swapChain As SwapChain + Private renderTargetView As RenderTargetView + Private depthStencil As Texture2D + Private depthStencilView As DepthStencilView + Private backColor_Renamed As New ColorRgba(0.0F, 0.125F, 0.3F, 1.0F) + + Private mesh As XMesh + Private meshManager As XMeshManager + + Private t As Single = 0f + Private dwTimeStart As UInteger = CUInt(Environment.TickCount) + Private needsResizing As Boolean + #End Region + + #Region "TutorialWindow()" + ''' + ''' Initializes a new instance of the class. + ''' + Public Sub New() + InitializeComponent() + End Sub + #End Region + + #Region "TutorialWindow_Load()" + Private Sub TutorialWindow_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load + InitDevice() + directControl.Render = AddressOf Me.RenderScene + End Sub + #End Region + + #Region "InitDevice()" + ''' + ''' Create Direct3D device and swap chain + ''' + Protected Sub InitDevice() + device = D3DDevice.CreateDeviceAndSwapChain(directControl.Handle) + swapChain = device.SwapChain + + SetViews() + + meshManager = New XMeshManager(device) + mesh = meshManager.Open("Media\Tiger\tiger.x") + + InitMatrices() + End Sub + #End Region + + #Region "InitMatrices()" + Private Sub InitMatrices() + ' Initialize the view matrix + Dim Eye As New Vector3F(0.0f, 1.0f, -5.0f) + Dim At As New Vector3F(0.0f, 0.0f, 0.0f) + Dim Up As New Vector3F(0.0f, 1.0f, 0.0f) + + Dim viewMatrix As Matrix4x4F + Dim projectionMatrix As Matrix4x4F + viewMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixLookAtLH(Eye, At, Up) + + ' Initialize the projection matrix + projectionMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixPerspectiveFovLH(CSng(Math.PI) * 0.25F, (CSng(Me.ClientSize.Width) / CSng(Me.ClientSize.Height)), 0.5F, 1000.0F) + + meshManager.SetViewAndProjection(viewMatrix, projectionMatrix) + End Sub + #End Region + + #Region "RenderScene()" + ''' + ''' Render the frame + ''' + Protected Sub RenderScene() + t = (Environment.TickCount - dwTimeStart) / 1000.0f + + If (needsResizing) Then + needsResizing = False + renderTargetView.Dispose() + Dim sd As SwapChainDescription = swapChain.Description + swapChain.ResizeBuffers(sd.BufferCount, CType(directControl.ClientSize.Width, UInteger), CType(directControl.ClientSize.Height, UInteger), sd.BufferDescription.Format, sd.Options) + SetViews() + InitMatrices() + End If + + 'WPF transforms used here use degrees as opposed to D3DX which uses radians in the native tutorial + '360 degrees == 2 * Math.PI + 'world matrix rotates the first cube by t degrees + Dim rt1 As New RotateTransform3D(New AxisAngleRotation3D(New Vector3D(0, 1, 0), t * 60)) + + ' Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor_Renamed) + + ' Clear the depth buffer to 1.0 (max depth) + device.ClearDepthStencilView(depthStencilView, ClearOptions.Depth, 1.0F, CByte(0)) + + mesh.Render(rt1.Value.ToMatrix4x4F()) + + Dim [error] As Microsoft.WindowsAPICodePack.DirectX.ErrorCode + swapChain.TryPresent(1, PresentOptions.None, [error]) + End Sub + #End Region + + #Region "SetViews()" + Private Sub SetViews() + ' Create a render target view + Using pBuffer As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(pBuffer) + End Using + + ' Create depth stencil texture + Dim descDepth As New Texture2DDescription() With _ + { _ + .Width = CUInt(directControl.ClientSize.Width), _ + .Height = CUInt(directControl.ClientSize.Height), _ + .MipLevels = 1, _ + .ArraySize = 1, _ + .Format = Format.D32Float, _ + .SampleDescription = New SampleDescription() With {.Count = 1, .Quality = 0}, _ + .BindingOptions = BindingOptions.DepthStencil _ + } + + depthStencil = device.CreateTexture2D(descDepth) + + ' Create the depth stencil view + Dim depthStencilViewDesc As New DepthStencilViewDescription() With {.Format = descDepth.Format, .ViewDimension = DepthStencilViewDimension.Texture2D} + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc) + + 'bind the views to the device + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}, depthStencilView) + + ' Setup the viewport + Dim vp As New Viewport() With {.Width = CUInt(directControl.ClientSize.Width), .Height = CUInt(directControl.ClientSize.Height), .MinDepth = 0.0F, .MaxDepth = 1.0F, .TopLeftX = 0, .TopLeftY = 0} + + device.RS.Viewports = New Viewport() {vp} + End Sub + #End Region + + #Region "directControl_SizeChanged()" + Private Sub directControl_SizeChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles directControl.SizeChanged + needsResizing = True + End Sub + #End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/directx.ico b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/D3D10Tutorial09_WinFormsControl/directx.ico differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorial09/Tutorial09.sln b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/Tutorial09.sln new file mode 100644 index 00000000..94916732 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorial09/Tutorial09.sln @@ -0,0 +1,142 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial09_WinFormsControl", "D3D10Tutorial09_WinFormsControl\D3D10Tutorial09_WinFormsControl.vbproj", "{63FAFC43-88BA-48F6-80A6-F164B618A72A}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial09_WPF", "D3D10Tutorial09_WPF\D3D10Tutorial09_WPF.vbproj", "{790B3091-7B27-4062-B790-6FDE8C69EB7C}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX.Direct3DX10", "..\..\..\UtilitiesLibrary\D3DX10Helpers\Direct3DX10.vcproj", "{453FF234-24EC-4CC3-83DA-6D6C54388899}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Library", "Library", "{496A2AA1-DFEC-43FA-9BFA-57E8F9D47901}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Utilities", "Utilities", "{F177D56C-726F-405A-B4FB-4C2777793FD9}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Direct3DUtilities", "..\..\UtilitiesLibrary\D3DUtilities\Direct3DUtilities.vbproj", "{8A152DCF-12AE-492B-9F24-060B90B2DDD0}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "MeshLoader", "..\..\UtilitiesLibrary\MeshLoader\MeshLoader.vbproj", "{B28ADA8B-BD7E-4C11-8298-C39F7C456365}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|Win32.ActiveCfg = Debug|x64 + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|x64.ActiveCfg = Debug|x64 + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Debug|x64.Build.0 = Debug|x64 + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|Any CPU.Build.0 = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|Win32.ActiveCfg = Release|x64 + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|x64.ActiveCfg = Release|x64 + {63FAFC43-88BA-48F6-80A6-F164B618A72A}.Release|x64.Build.0 = Release|x64 + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|Win32.ActiveCfg = Debug|x64 + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|x64.ActiveCfg = Debug|x64 + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Debug|x64.Build.0 = Debug|x64 + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|Any CPU.Build.0 = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|Win32.ActiveCfg = Release|x64 + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|x64.ActiveCfg = Release|x64 + {790B3091-7B27-4062-B790-6FDE8C69EB7C}.Release|x64.Build.0 = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.Build.0 = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.ActiveCfg = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.Build.0 = Release|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Any CPU.ActiveCfg = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Win32.ActiveCfg = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|Win32.Build.0 = Debug|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|x64.ActiveCfg = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Debug|x64.Build.0 = Debug|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Any CPU.ActiveCfg = Release|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Mixed Platforms.Build.0 = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Win32.ActiveCfg = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|Win32.Build.0 = Release|Win32 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|x64.ActiveCfg = Release|x64 + {453FF234-24EC-4CC3-83DA-6D6C54388899}.Release|x64.Build.0 = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.ActiveCfg = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.Build.0 = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.ActiveCfg = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.Build.0 = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Win32.ActiveCfg = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.ActiveCfg = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.Build.0 = Debug|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Win32.ActiveCfg = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.ActiveCfg = Release|x64 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.Build.0 = Release|x64 + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|Win32.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Debug|x64.ActiveCfg = Debug|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Any CPU.Build.0 = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|Win32.ActiveCfg = Release|Any CPU + {B28ADA8B-BD7E-4C11-8298-C39F7C456365}.Release|x64.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {453FF234-24EC-4CC3-83DA-6D6C54388899} = {F177D56C-726F-405A-B4FB-4C2777793FD9} + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} = {F177D56C-726F-405A-B4FB-4C2777793FD9} + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} = {F177D56C-726F-405A-B4FB-4C2777793FD9} + {B28ADA8B-BD7E-4C11-8298-C39F7C456365} = {F177D56C-726F-405A-B4FB-4C2777793FD9} + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} = {496A2AA1-DFEC-43FA-9BFA-57E8F9D47901} + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Application.xaml b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Application.xaml new file mode 100644 index 00000000..1927a486 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Application.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Application.xaml.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Application.xaml.vb new file mode 100644 index 00000000..3ebd46a1 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/Application.xaml.vb @@ -0,0 +1,17 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Configuration +Imports System.Windows + +Namespace D3D10Tutorial01_WPF + ''' + ''' Interaction logic for App.xaml + ''' + Partial Public Class App + Inherits Application + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/D3D10Tutorial01_WPF.vbproj b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/D3D10Tutorial01_WPF.vbproj new file mode 100644 index 00000000..13b27c9c --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/D3D10Tutorial01_WPF.vbproj @@ -0,0 +1,114 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {980315C4-115D-482E-A484-4AFDD0A4B569} + WinExe + + + D3D10Tutorial01_WPF + v3.5 + On + Binary + Off + On + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + Application.xaml + Code + + + TutorialWindow.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..2bba3f46 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/My Project/AssemblyInfo.vb @@ -0,0 +1,56 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Resources +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + + '(used if a resource is not found in the page, + ' or application resource dictionaries) + '(used if a resource is not found in the page, + ' app, or any theme specific resource dictionaries) + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/My Project/Resources.Designer.vb new file mode 100644 index 00000000..b5a64a5f --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/My Project/Resources.Designer.vb @@ -0,0 +1,64 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My.Resources + + + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If (resourceMan Is Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/My Project/Settings.Designer.vb new file mode 100644 index 00000000..34f1fe80 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/My Project/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/TutorialWindow.xaml b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/TutorialWindow.xaml new file mode 100644 index 00000000..553aaaea --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/TutorialWindow.xaml @@ -0,0 +1,12 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/TutorialWindow.xaml.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/TutorialWindow.xaml.vb new file mode 100644 index 00000000..a4973fb4 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/TutorialWindow.xaml.vb @@ -0,0 +1,84 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Windows +Imports Microsoft.WindowsAPICodePack.DirectX.Controls +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics + +Namespace D3D10Tutorial01_WPF + ''' + ''' This application demonstrates creating a Direct3D 10 device + ''' + ''' http://msdn.microsoft.com/en-us/library/bb172485(VS.85).aspx + ''' + ''' Copyright (c) Microsoft Corporation. All rights reserved. + ''' + Partial Public Class TutorialWindow + Inherits Window + #Region "Fields" + Private host As DirectHost + Private device As D3DDevice + Private swapChain As SwapChain + Private renderTargetView As RenderTargetView + Private backColor As New ColorRgba(0.0F, 0.125F, 0.3F, 1.0F) + #End Region + + #Region "TutorialWindow()" + ''' + ''' Initializes a new instance of the class. + ''' + Public Sub New() + InitializeComponent() + host = New DirectHost() + ControlHostElement.Child = host + End Sub + #End Region + + #Region "Window_Loaded()" + ''' + ''' Handles the Loaded event of the window. + ''' + ''' The source of the event. + ''' The instance containing the event data. + Private Sub Window_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) + InitDevice() + host.Render = AddressOf RenderScene + End Sub + #End Region + + #Region "InitDevice()" + ''' + ''' Create Direct3D device and swap chain + ''' + Public Sub InitDevice() + device = D3DDevice.CreateDeviceAndSwapChain(host.Handle) + swapChain = device.SwapChain + + ' Create a render target view + Using pBuffer As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(pBuffer) + End Using + + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}, Nothing) + + ' Setup the viewport + Dim vp As New Viewport() With {.Width = CUInt(host.ActualWidth), .Height = CUInt(host.ActualHeight), .MinDepth = 0.0f, .MaxDepth = 1.0f, .TopLeftX = 0, .TopLeftY = 0} + + device.RS.Viewports = New Viewport() {vp} + End Sub + #End Region + + #Region "RenderScene()" + ''' + ''' Render the frame + ''' + Protected Sub RenderScene() + ' Just clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor) + swapChain.Present(0, PresentOptions.None) + End Sub + #End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/directx.ico b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WPF/directx.ico differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/D3D10Tutorial01_WinFormsControl.vbproj b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/D3D10Tutorial01_WinFormsControl.vbproj new file mode 100644 index 00000000..77a997a8 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/D3D10Tutorial01_WinFormsControl.vbproj @@ -0,0 +1,104 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {9AE5997A-8072-41C0-9324-BC886BFD6C66} + WinExe + + + D3D10Tutorial01_WinFormsControl + v3.5 + On + Binary + Off + On + 512 + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + + + + 3.0 + + + + + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + TutorialWindow.vb + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + True + Settings.settings + True + + + Form + + + TutorialWindow.vb + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..89d352d9 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/My Project/AssemblyInfo.vb @@ -0,0 +1,40 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/My Project/Resources.Designer.vb new file mode 100644 index 00000000..b5a64a5f --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/My Project/Resources.Designer.vb @@ -0,0 +1,64 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My.Resources + + + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If (resourceMan Is Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/My Project/Settings.Designer.vb new file mode 100644 index 00000000..34f1fe80 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Program.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Program.vb new file mode 100644 index 00000000..4af2a821 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/Program.vb @@ -0,0 +1,22 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms + +Namespace D3D10Tutorial01_WinFormsControl + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New TutorialWindow()) + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/TutorialWindow.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/TutorialWindow.Designer.vb new file mode 100644 index 00000000..d03de140 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/TutorialWindow.Designer.vb @@ -0,0 +1,60 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace D3D10Tutorial01_WinFormsControl + Partial Public Class TutorialWindow + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Dim resources As New System.ComponentModel.ComponentResourceManager(GetType(TutorialWindow)) + Me.directControl = New Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl() + Me.SuspendLayout() + ' + ' directControl + ' + Me.directControl.Dock = System.Windows.Forms.DockStyle.Fill + Me.directControl.Location = New System.Drawing.Point(0, 0) + Me.directControl.Name = "directControl" + Me.directControl.Size = New System.Drawing.Size(624, 442) + Me.directControl.TabIndex = 4 + ' + ' TutorialWindow + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6F, 13F) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(624, 442) + Me.Controls.Add(Me.directControl) + Me.Icon = (CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)) + Me.Name = "TutorialWindow" + Me.Text = "Direct3D 10 Tutorial 1: Direct3D 10 Basics" +' Me.Load += New System.EventHandler(Me.TutorialWindow_Load) +' Me.FormClosing += New System.Windows.Forms.FormClosingEventHandler(Me.TutorialWindow_FormClosing) + Me.ResumeLayout(False) + + End Sub + + #End Region + + Private directControl As Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl + End Class +End Namespace + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/TutorialWindow.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/TutorialWindow.resx new file mode 100644 index 00000000..0dd393c3 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/TutorialWindow.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAAABABoBgAAlgAAACAgEAAAAAQA6AIAAP4GAAAQEBAAAAAEACgBAADmCQAAMDAAAAAA + CACoDgAADgsAACAgAAAAAAgAqAgAALYZAAAQEAAAAAAIAGgFAABeIgAAMDAAAAAAIACoJQAAxicAACAg + AAAAACAAqBAAAG5NAAAQEAAAAAAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAAAA + AAD//wAA////AACAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMy2t7a2bMzMzMzMzMzMzMzMzMzMzMzMu7a3tnd2d2ZszMzMzMzMzMzMzMzMzMy7t7tr + a2dnZmZmbMzMzMzMzMzMzMzMzLu7e2tnZnZmZmZmZmzMzMzMzMzMzMzMy7u3u7e2tmdmZmZmZmbMzMzM + zMzMzMzMt7e7u3tra2Z2ZmZmZmZszMzMzMzMzMzLu7u7u7u7d7Z2ZmZmZmZmzMzMzMzMzMx7O7u7s3N7 + trd2tmZmZuZmbMzMzMzMzMu7u7uzNye7e2trZmd3ZmZmZszMzMzMzLO7u7MzqmZ3t7Z3ZrdyZmbmZmzM + zMzMy7u7s7MKqqZre2t2t3AqpmZmZmbMzMzMx7OzuzIqqqpnt7a3ZzIqamZm5mbMzMzMO7u7syKqqqpm + e3trYzKqqmZmZmZszMzMu7OzMiqqqqpqe7a2syKqqmpmZmZszMzLszszIiqqqqqmd7t7cCqqqqamZmZm + zMzHu7swAiKqqqqqZ3u3MCqqqqpqZmZmzMzLMzMzACIqKqqqZ7t7Aqqqqqqqd2ZmzMzLO7szMAIiqqqq + anszIqqqqqoid2ZmzMxzszOzMwAiIqqqpmMyKqqqqqIie2ZnbMy7O7OzszAAIiqqqqd6qqqqoiIzd2Zm + bMw3szs7OzMwAiKqqqqqqqqqIDN3tmZ2bMy7M7OzuzszACKqqqqqqqoiA3trZrZmvMxzOzOzs7O7MAIq + qqqqqqcjN7a3t2ZnfMw7M7Ozs7s7MwIqqqqqqqoje3t3a3d2fMx7OzM7O7O7MzAqqqqqqqpnt7e7trZ3 + fMy3MzOzuzuzswKqqqqqqqqme7tra2dnfMx7M7M7M7O7MwKqqqqqqqpqZ7u7u7a2vMx3szszs7OzMqqq + qqqqqqqmpnu7t7tnfMzLczM7OzswKqqqqqoqKqqqpme7u7e7zMzHOzOzMzMCqqqqqqIiKqqqpqZ7u7e2 + zMzLc7MzMzKqqqqqqiIAIiqqqmpnu7t7zMzMtzMzMCKqqqqqqgMwACIqqqqne7e8zMzMN7MzAiqqqqqq + ojMzACIqqqqnO3u8zMzMxzszACKqqqqqIDszMwIiqqIjO7vMzMzMy3MzAAIiqqqqA7O7MwAiIqIDu3vM + zMzMzHtzMwAioqqiM7s7szMCIiAzu7zMzMzMzMe3MwAiKqojM7O7O7MAIgO7u8zMzMzMzMx7MzAAIqID + O7OzuzMwAzO7vMzMzMzMzMzHdzMAAiIzszuzs7MzM7t7zMzMzMzMzMzMtzcwACMzOzM7OzuzM3u8zMzM + zMzMzMzMx7s3MDMzs7Ozs7Ozu7vMzMzMzMzMzMzMzHdzMzOzMzs7Ozs7t7zMzMzMzMzMzMzMzMy3d7cz + s7M7O3u3vMzMzMzMzMzMzMzMzMzMt3t7e3t7e7e8zMzMzMzMzMzMzMzMzMzMzMe3t7e3t8zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz///////8AAP///////wAA///AH///AAD//AAB//8AAP/w + AAB//wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/AAD8AAAAAf8AAPgAAAAA/wAA8AAAAAB/ + AADgAAAAAD8AAOAAAAAAPwAAwAAAAAAfAADAAAAAAB8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAIAA + AAAADwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAADAAAAAAB8AAMAA + AAAAHwAA4AAAAAA/AADgAAAAAD8AAPAAAAAAfwAA+AAAAAD/AAD8AAAAAf8AAP4AAAAD/wAA/wAAAAf/ + AAD/gAAAD/8AAP/AAAAf/wAA//AAAH//AAD//AAB//8AAP//gA///wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgIAAgAAAAIAAgACAgAAAwMDAAICA + gAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzLe2tmbMzMzMzMzMzMzMy3dnZ2ZmZmzMzMzMzMzMzHu7t3ZmZmZmzMzMzMzMzHu7u7 + t7a2ZmZmbMzMzMzMu7uzd3trZmZ2ZmbMzMzMy7uzMqZ7tnd3dmZmbMzMzMuzMCqma2t2cKpmZmzMzMy7 + MyKqqqe2tzKqpmZmzMzLszIqqqpmu3cKqqamZmzMyzMCIqqqpndzKqqqZmZszMszACIqqqprMKqqqqp2 + bMxzszACIiqqpzKqqqoidmbMOzszACIqqqqqqqqiA3ZmzLs7MzAAIqqqqqqiA3dmZsxzM7MzMAKqqqqq + I3trdmfMu7M7OzMAqqqqqqO3trdmzHMzs7MzAqqqqqqqe3t3a8x7OzszMqqqqqqqpme7trbMtzMzMCqq + qqqiqqqmZ7trzMtzMwKqqqqiAiKqqqZ7fMzHszAqqqqqoAAiqqqiu7zMw3MwIiqqqiMwAiqqI7e8zMy3 + MAIiqqIzMwIiIjO7zMzMx3MAIiogM7MAIiM7vMzMzMNzcAIiIzszMAIDu7zMzMzMdzMwIgM7OzMzO3vM + zMzMzMt3MwMzs7OzM7u8zMzMzMzMx3c3Mzs7O7e8zMzMzMzMzMw3e3t7e7e7zMzMzMzMzMzMzMN7e3t8 + zMzMzMzM////////////4B///wAD//4AAf/4AAB/8AAAP+AAAB/gAAAfwAAAD4AAAAeAAAAHgAAABwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AAAAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gA + AH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzM + zMzMzMzMzMzLZmbMzMzMy7e2ZmbMzMyzB3dndmzMyzKqe3CmZszDCqpnMqpmzLMyqqcKqqZsOzAqqqqi + dmwzszCqqie2bDMzMqqqZ7tsMzAqqqqme7zDAqqiAqqrzMcyqqMwojvMzHMqCzAjvMzMxzIzMzvMzMzM + xze7zMzM//+zMPg/a2vgD6pmwAfMzIADMyKAA6e2AAGqpgABzMwAATIqAAFmuwABqqaAA2zMgAMCIsAH + pnfgD6qq+D9szCgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWAAAA0QAAAM4A + AADNAAAAywAAAMgAAADGAAAAxQAAAMIAAADBAAAAvgAAALwAAAC6AAAAtwAAALUAAACzAAAAsAAAAK0A + AACpAAAApgAAAJwAAABzAAAAZwAAADwAAACiAQEAkgEBAN0CAgDAAgIAvQICAH0BAQBWAQEAzgMDAMMD + AwC/AwMAsAMDALQEBACGAwMA5wYGACUBAQDTBgYAxQYGAKQFBQDXBwcAuQcHAMAICABIAwMAMgICALQI + CACtCAgAoQcHAMcKCgD5Dg4AvgsLAOEODgDMDAwAmgoKANIPDwDFEREArQ8PAPoXFwDpFxcApBERANwY + GADJGRkA/iEhALcYGAD0IyMA1B4eAOQiIgBjDw8A7SUlABoEBAD9KioAlxkZAAwCAgClHR0A9SwsADMJ + CQDXJycAuSIiAMYoKAD+NDQAiRwcAPQ0NADnNDQA2jIyAP47OwCqKSkA9j09AP5CQgD+RkYA9ENDAP9J + SQC6NjYAyzw8AGYfHwA1EBAA/05OAPhNTQDlR0cA/1FRAKg3NwD/VVUAu0BAAEkZGQCKMDAA/1paAPZX + VwD2WloA/15eAMhLSwC3RUUA/2FhAG4qKgC/TEwA/2ZmALFHRwDoX18A9mZmALVLSwD/bGwAtk5OAMxZ + WQDmZWUAr01NAKBHRwD/cnIAt1JSADMXFwD2c3MA/3h4ACkUFAD/fX0A/4GBAOl3dwD/hoYA+oODAPaG + hgD/jY0AqF1dAGY5OQD/k5MA5oaGAMVzcwD/mZkA8JOTAP+engD/oqIA+6GhAKNpaQCEVVUA/6amAMuF + hQD/rKwA8KamAP+ysgD0q6sA/7a2APuzswD/ubkA+bW1AP++vgDgqakA/8LCAP/FxQD/yckA6Lm5AP/O + zgCOc3MA/M3NAOzCwgDDq6sAMy0tAAD+/gAA/f0AAPv7AAD5+QAA9/cAAPT0AADx8QAA7+8AAO3tAADp + 6QAA5uYAAOTkAADg4AAA398AANraAADT0wAAyckAAI6OAAB9fQABzs4AAcbGAAHCwgABuroAAbS0AAGt + rQABpKQAAZubAAGHhwAC+fkAAvf3AAF1dQAD//8AA/v7AAX19QAG//8ABubmAAJSUgAJ//8ADP//AAnA + wAAIj48ABmhoAAMxMQAQ8/MAEf7+AAqBgQAGSUkAFv7+AA+qqgAW6+sADH5+AAQoKAAWysoAHf7+ABzX + 1wAo/v4AJujoADT//wAt19cAMuLiADf29gA7/v4ABhgYAEf9/QBU/v4AUPDwAD2wsAAYREQAFj09ABAs + LABO1NQAZPDwAGr29gB29fUAPHx8AC9dXQBarq4Ac93dAIC+vgBDYmIAltTUAIeYmAAAAAAA//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////XGRqcHh+hIeK//// + //////////////////////////////////////////9ISFZaZGpzfoKEh4qNjZCSk/////////////// + ////////////////////////QEBIVlxmc36Eh4qNkJKSk5eXl5mZ//////////////////////////// + /////0xCSEhRWWFteIKHipCSk5mZm5ubm5ubm5v/////////////////////////////QkJMTFFRVllk + anN+hIqNkpmbnaGhoaGfn52d//////////////////////////9GRkxMTEhASFNYWmRteIKHjZKXm6Gj + pKSko6Gfn////////////////////////0ZGRkJCOzszPENVU1lhanN+hYqQl5uho6WlpaSjoZ////// + ////////////////REREPDwzMzMqPWllVVZcZnB4goeKkJecoqaqqaelpKGf//////////////////9E + Pjw8NSUlJRAe/PmoXlhaZG1zfoSHipGYqKirpqmnpaShn////////////////04+PjUlJSUBJKzU5e77 + lWNZYWpzeIKFiY+W+O/7q6qpp6WjoZ3/////////////TkM+NRoaGgQV8MCx4uz0+3JbYWZweH6Ehous + 397u/auqqaeloZ+b////////////Qz44KhoaBB3xw7Kt3Obt+otjWmRqc3iBeozww8rq9f2rqqmnpJ+b + //////////9OQzgnAAAEJPDCtLCt2eTs9P5uW1xkanN7fYDHubDk7fb9q6qppaGdm/////////9DPzYf + AgsW8MS6s7Ct0uLm7fqVY1lcZmx6cfLDtq/c5u32/auqpKOdmf///////1A/OSgHEhbxvsO8t7KuzNnk + 7PT+blhZXGNlgMu8tK/S4urt9v2rpqGfmZf//////1A/MigMGRfr1sfEwLizr8/i5u37i1RRWF5f8cK3 + sq6t0+Lm7PT7q6afmZP//////1A/LBsNGR5H68vHxcG7tbDT5Oz0/mdMVFdg1ru0sK6urrDO3uj5/qKg + mZL//////085LBsKESQeR+vWvsbDvLax2ebt+n1QT0Xww7WxsLCytLe7wd33qKKemZL/////UE9BKxwJ + Cg8ZHiZK27/HxMC3sOLq7v5pX/C9tbGwsbO3u8HH1vGMj5qbmZKN////UE9BKwwKCAcLFBUXSuDWvsXA + ts3k6vPv7+Gyrq+wsrfAxcjxgIyLjpSZl5CK////UE9BIw0LCQcFBxAkHiZK277Eu7PT5OTk4tnPra2v + tsDI8oBxfXqGiI2Tk42H////XU86Ig8NCggFAgIHExUXStHHvbev09zc2dPSz9LQxNaDX2VudXZ+goeQ + ko2E////XU86IhAODAoHBAEAAQ0dLkrLw7myrdLT0s/S09nh+GhpXmNrbXBzeISKkIqC////XU86EREP + DQsIBQIBAAARFibXxrmyrq3MzMzP2eLn92leW1xhZGZqbX6Fiod+////Z1c6EhIRDwwKBwQBAAAEGRfg + xrexrq2tra3P2eLp85ZeWFlZWlxcZHCCh4V4////b109KRMREA4MCQYDAQADGS7WwLOwra2trq2t0+Lm + 7vuLVFFRVlZWWWZ4hYJz////b11LMRMTERANCwgFAgIOHtvBtbGvra6vsbGwrtnk7PX7ckhISEhRUVpw + fnhw////b2dXPSkTEhEPDQoICRIX38CzsK+urrCztri3tLDc5u31+15AQEBASFZmc3Bw/////29XPTEY + ExIRDw0OGWDFt7Kvrq2tsLO6vcK9u7ax3Obt9ftvOzM7O1Fcamb//////29lSz0UGBMSERgW8MKzr6+t + ra2usrvG1svHw8C4sdzm7fX6lTwzM0hWYWT//////29vVz0xFBQUHS3WvLKvrq2tra2xt8bxSuvRyMW9 + uLHc5uzt+qhDM0BRWWT///////93ZUs3GR0eg9bBt7Kvra2tra+zvfEXLSZK28jFvbix2eTq7vlpPkhR + Vv////////90b1dJJB4m0cfCu7Wwra2trrG61S0UFBUuStvIxb24ssnY4/dSPkxWWv//////////d2VX + Uh4m4L/Gwru1sK2usLXFYBIEBREVF0rRyMW9urfA2i06PExW////////////dHdlSUUuSuC/xsK7tbCw + tL3xGQUBAQMQHRdK277FwcLfTRk+RlNi/////////////3d0ZVJFLkrgy8bCu7W0u9YWCgQCAQEDDh0X + StG+x9ZNJDg8TFj///////////////95dGVSRS5K17/Gwru7xhcTCQcFBAMBAw4VLuvW1k0kNjxGU/// + ////////////////f3RlUkUuSte/xsPF8R0OCwoIBwUEAwUTFi5HTR0yPkRU//////////////////// + /393ZVJFTUrXy77bHhMPDQwKCQgHBQQJFBUWJDQ+RFT///////////////////////9/eWVpX2BH8tsX + GRIRDw4NCwoJBwYFITA6OUNEVP//////////////////////////eXl0aXFoYC0dGBMSERAPDQwLCiAo + Mjk/Q05V/////////////////////////////3d/fH1pcVJLPTowMDAvLys0NDk/P05OVVX///////// + ////////////////////////d398dGVlV1dPQUFBQU9PUFBQUFVV//////////////////////////// + //////////90eX95b2dnZ11dXV5eXl5eXv////////////////////////////////////////////9v + cnJycnJubm5eXv////////////////////////////////////////////////////////////////// + ////////////////////////////////AAD///////8AAP//wB///wAA//wAAf//AAD/8AAAf/8AAP/A + AAAf/wAA/4AAAA//AAD/AAAAB/8AAP4AAAAD/wAA/AAAAAH/AAD4AAAAAP8AAPAAAAAAfwAA4AAAAAA/ + AADgAAAAAD8AAMAAAAAAHwAAwAAAAAAfAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAAAA + AAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAgAAAAAAPAACAAAAAAA8AAIAAAAAADwAAwAAAAAAfAADAAAAAAB8AAOAA + AAAAPwAA4AAAAAA/AADwAAAAAH8AAPgAAAAA/wAA/AAAAAH/AAD+AAAAA/8AAP8AAAAH/wAA/4AAAA// + AAD/wAAAH/8AAP/wAAB//wAA//wAAf//AAD//4AP//8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAC9AAAAuwAAALkAAAC2AAAAswAAALEAAAClAAAAowAAAKEA + AACcAAAAkQAAAG0AAABpAAAAZAAAAF0AAABYAAAANgAAADAAAAAqAAAAIgAAABMAAAAHAAAAhgEBAL8C + AgC8AgIAqAICAKECAgBPAQEAQgEBALsDAwCyAwMArQMDAH0CAgC3BAQAiwMDALMFBQC8BwcA3AkJAKUH + BwBVBAQAzgsLALwKCgCqCQkAOwMDAOgNDQAPAQEAXQcHAJcMDACgDg4AvBISAPkaGgDNFhYAWwoKAOcb + GwC2FhYA2hwcAKsXFwDDGxsAuxwcALUbGwDKICAA8ycnAJMZGQBFDAwA0yYmAOUtLQC2JCQA/TQ0APAy + MgDGLCwA+Do6AKwoKAD/PDwA1TMzAP8+PgDpOjoA/0REAPBAQADIOTkAwDc3AP9KSgC3NTUATRcXANdC + QgD/T08A+E1NAM1AQAAqDQ0A5khIACYMDADxTU0Avj09AKw5OQCVMTEA/1VVAMFCQgC6QUEAsT4+AP9b + WwDISUkAvkZGALFCQgBpJycAzU1NAAgDAwD/YmIANBQUAOhcXAD/ZmYAu0tLAPhnZwD/a2sAs0xMALxR + UQD/cnIAkUFBAHk2NgCkS0sA/3Z2AJtISAC2VVUAzmNjAP98fADodXUASyYmAP+EhAD2gYEAqFlZABYM + DAD/jIwAm1hYAGc7OwD+k5MAqmNjANJ9fQD/mpoA/56eAP+iogD/qKgA/6qqAN6WlgD/ra0A+6qqAP+w + sABzUVEA/7i4AOurqwD/u7sA/729APK3twCFZWUA/8PDAL6RkQD/ysoA16urAPXExAD3ysoAwqamAMyx + sQAhHR0AKScnAB0cHAAA//8AAP39AAD7+wAA+PgAAPb2AAD19QAA8/MAAPHxAADv7wAA7e0AAOrqAADm + 5gAA5OQAAOPjAADh4QAA398AAN3dAADY2AAA19cAAM3NAADLywAAx8cAAMPDAADBwQAAtbUAALCwAACt + rQAAqakAAKamAACjowAAlZUAAJKSAABmZgAAZGQAAY2NAAGCggACvLwAA/7+AAPs7AADwsIAApycAAT8 + /AAEtLQABK6uAAJcXAAEl5cAB/n5AAf09AAG2NgABaKiAASRkQADbGwACPX1AAR4eAAJ/v4ADv//AAZm + ZgAQ+voACpycABT//wALiooAFfT0ABz9/QAe6OgAI/39AAk6OgAs/f0ALu7uACKurgAz/f0AHo+PADz8 + /AA86+sAPNXVAEn9/QBG7+8AInBwAFL+/gA2oaEAVPX1AF/9/QAECgoAYOTkAFzT0wBr8fEAaM7OAGO8 + vABx1dUAgN7eAHzIyACQ5eUAfpeXAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////9janB3foKFiP////////////// + /////////////0lJUWNzfoWIiouMjI6Q//////////////////////9ERERJUWNwe4KJjpKUlZSS//// + //////////////9FPj4zMzZKTlVqc36IjJSYmpiVlP//////////////QjY2LSkwdf5XTV9te4KFjZmb + nJqYlP///////////0I2LSYfHOfr9YBOX213f4eR8fienZqYlP//////////OCYZIWvH3Ojz/GhVanN8 + g6HT6vufnZqV/////////zgpGx3ftqrZ5fD3hltjb3p91a3j8/2fnZiS//////9BNCAc1ry3r6bh6vP8 + aF9sdKK3q9rq8/2fnJKQ/////z0yIxPPwby3rqbj7feDWWR90LCqpOHq8vuelo7/////PSoXERbDwr24 + sajl8PliXqK0rKmoqcni7P6bjP///0Y6KgkNExbExb+6s9Lo7pF9yqioqa2zts3pl5OMif//RjolBAoO + ExbPxsC5sNzl5uLZo6WpsLrGoISHj4uF//9GOyIDBAoMERX02Lu0qdrh3trZzK7Uon10en+JioL//1A8 + JAQCAwcXDxMWxbWrpNna2t7g71NeaGxvd4KIfv//XEMgBgQBAAMJDRTktaqlo8jZ3uPsdVRWX19qe4V3 + //9lQysgBgMBAAkQgb2tqKamqKjR4er2dk5LTVVwfnP//2VSORogBgYLHd20q6emp6ywsq7S5fD6gFdF + SWNzbf//YWE5JwcHIRLOrKempaars7rHuLLX6PD3/GZFUWpj////bkgxFxBay7OrpqSkqLDL5Ma/urHR + 5e3y+UZLVf////9uYj8o5MW8tq+opaaruIEUFtbAuK+o4OLxQ0RL/////2JxXlMu1sG8tq+pqa/fEA0T + 9Ma+uLS01DU4RE3//////3F2Z1gWw8G8t7Kx1B0ICA8Vz8K+u9UdMj5H/////////3l4Z1hpw8G9usdY + CwACFxEWw8LYLCs2Rf//////////Ynl4Z1hpw8LA2A4FAAAHDBMu5CwnOEVO////////////Znl4Z2uB + z9sRCwQBAAIKDBwvMThCTP//////////////Znl2dX1rQCEaHyIZGB4rMTxBQkz///////////////// + /3GAeHReSDw3NzI6Oj1GSkr//////////////////////11xeXJuZWBcT1dXV0pK//////////////// + ////////////XGVlZGRkV0//////////////////////////////4B///wAD//4AAf/4AAB/8AAAP+AA + AB/gAAAfwAAAD4AAAAeAAAAHgAAABwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AA + AAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gAAH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvAAAALsAAAC6AAAAsgAAALEAAACwAAAArQAAAKcAAACfAAAAkwAAAH4A + AABtAAAAPAAAAKgEBAChBQUAYAMDADsCAgBVBAQAOwMDAKIMDAC0Dg4Avg8PANEWFgBoCwsA5xoaALsV + FQDFGBgAsxYWADwICACoFxcAgBISAPYuLgDfKSkA4y0tAJwfHwCyJCQAzy0tAOAxMQDzNzcA8zk5APA5 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAJGRkYLISEhHxwcHEB+FxeKtB4exd8o + KOr/ODj//0VF//9QUP//W1v//2Zm//9wcP//eHj//39///+Ghv//jIz//5GR//+Wlv//mZn/2YaG7aNo + aNJZOjquAAAAfwAAAF8AAAA7AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BZmZmBT09PRUwMDA1jB4eiMQa + Gs/0Hh75/ysr//86Ov//SEj//1ZW//9lZf//cXH//319//+Ghv//jo7//5OT//+Zmf//nZ3//6Cg//+k + pP//pqb//6en//+oqP/0oqL5tHl53F9BQbMAAAB9AAAAVgAAAC0AAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wGSkpIHSkpKH3Qp + KV66Hx++6yEh9fsmJv/9Li7//zU1//9DQ///T0///11d//9tbf//enr//4aG//+Pj///l5f//56e//+k + pP//qqr//66u//+wsP//s7P//7Oz//+zs///s7P//7Oz/+6np/ahcXHUNCYmngICAmwAAAA8AAAAFwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////AoCA + gAhEREQimyQkhNAgINz0JSX/9y0t//kvL//8MjL//zQ0//86Ov//RET//1BQ//9aWv//aGj//3R0//9/ + f///ior//5aW//+goP//qqr//7Ky//+3t///vLz//76+//++vv//vb3//7u7//+5uf//t7f/y5GR52VJ + SbcCAgJ5BAQERwAAABoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8DqqqqCU5OTiSsJSWW3CIi7O8lJf/yKir/9Ssr//cqKv/7KCj//iUl//0nJ//4MTH/9zk5//1F + Rf//UVH//19f//9ra///eHj//4WF//+Skv//np7//6mp//+zs///vLz//8LC///Fxf//xsb//8XF///C + wv//vr7//7u7/+KkpPKAXFzDAgICgAAAAEoAAAAaAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wOzs7MKWlpaIrAkJJrfISHz7CUl/+4kJP/wIiL/9B4e//YaGv/5FRX/+BER/+sS + Ev/WICD/3C0t//Q1Nf/+QkL//05O//9bW///Z2f//3V1//+Bgf//jY3//5ub//+mpv//srL//7y8//7D + w//9yMj//svL///Kyv//x8f//8LC//++vv/ura33iGNjxwQEBIAAAABGAAAAFwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////A9XV1QZsbGwariYmkNseHvPnISH/6SAg/+saGv/tFRX/8Q8P//UM + DP/xCQn/1QcH/6EPD/+KLS3/qzk5/983N//7PT3//0lJ//9WVv//YmL//2xs//94eP//hIT//4+P//+a + mv/9paX/9Kur/+Wrq//js7P/7sLC//vMzP/+zs7//8nJ///ExP//v7//7q2t94FeXsMCAgJ5AAAAPAAA + ABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Bo6OjhKoLCxz0iAg6uIbG//kGhr/5hUV/+gP + D//sCQn/7QQE/+MEBP+vAQH/WAcH/0NiYv9anJz/iG5u/8dAQP/1PT3//0ZG//9SUv//Xl7//2ho//9z + c///fHz//4aG//2QkP/wk5P/y4WF/5Rqav+QgYH/u56e/+a+vv/7zs7//8/P///Ly///xMT//76+/+Ol + pfJnSkq3AgICbAAAAC0AAAAIAAAAAAAAAAAAAAAAAAAAAP///wH///8Ev7+/DJg8PEPGISHU3Rsb/98V + Ff/hDg7/4wkJ/+YFBf/kAwP/0AEB/4MBAf8qNTX/CcDA/ybo6P9L6ur/ccDA/6NkZP/hQkL//END//9P + T///Wlr//2Rk//9ubv//eXn//4KC//aGhv/Penr/f09P/zdXV/8/u7v/esXF/7mqqv/pwcH//M7O///P + z///ysr//8PD//+9vf/LkpLnNicnngMDA1cAAAAbAAAAAwAAAAAAAAAAAAAAAP///wL///8HgICAFrch + IajZHR3/2hYW/9sNDf/dBgb/4AIC/98CAv/LAQH/cAAA/x5AQP8Dzc3/APf3/x7///9C/f3/Y/Hx/4S5 + uf/DTk7/9END//5MTP//VVX//2Bg//9qav//c3P//Hx8/+d6ev+eWVn/PCQk/w9/f/8X5ub/VvLy/4vZ + 2f/CsLD/68PD//zOzv//zs7//8jI///AwP//uLj/oXJy1AYGBn8AAAA7AAAACwAAAAAAAAAAAAAAAP// + /wTMzMwKqykpYc0eHvHVFhb/1g4O/9gGBv/aAgL/3AAA/8sAAP9+AAD/GkBA/wO8vP8A8/P/AP7+/xb/ + //81////Vf///3Lh4f+oXl7/5kRE//xGRv//UFD//1pa//9kZP//bW3/9nNz/8lmZv9kNjb/EUdH/wK5 + uf8C9/f/Ov7+/2v39/+X1NT/xrCw/+zDw//9zs7//8zM///Fxf//u7v/7qio92NGRrQDAwNgAAAAHgAA + AAIAAAAAAAAAAP///wZxcXESuyEht9EaGv/RERH/0wYG/9QBAf/XAQH/ywAA/4kAAP8YRkb/AsPD/wDv + 7/8A+fn/AP7+/xD///8o////Rv///2Px8f+JmZn/x01N//RDQ///Skr//1NT//9cXP/8ZWX/5mVl/5tJ + Sf8vGBj/A5ub/wHh4f8A+fn/Jf///0////91+Pj/mdXV/8awsP/swsL//MvL///IyP//v7///7W1/7d+ + ft0GBgaBAAAAOgAAAAoAAAAAAAAAAP///weqJiZVyR0d9MwVFf/ODAz/zgMD/84AAP+7AAD/awAA/xdD + Q/8CsrL/AN/f/wDw8P8A+fn/AP7+/wn///8c////Nv///1X9/f9y39//o2pq/+NDQ//8Q0P//0tL//9U + VP/2Wlr/y1JS/2cuLv8TKyv/ALy8/wDp6f8A+vr/FP///zX///9X////efPz/5vW1v/JsLD/7sLC//zH + x///wcH//7a2//SmpvldPz+vAwMDVwAAABYAAAAAAAAAALOzswq3IyOfyhwc/8kREf/JBwf/xQEB/6kA + AP9hAAD/Ez4+/wKNjf8AuLj/ANHR/wDm5v8A9PT/APz8/wL///8R////KP///0X///9j8vL/ipWV/8xH + R//2PDz//0FB//1JSf/pTEz/oTo6/zQVFf8FeHj/ANbW/wDv7/8A+/v/CP///x////84////V////3X1 + 9f+Zzs7/x6ys/+u9vf/8wMD//ri4//+srP+mbW3TBwcHcQYGBikAAAADAAAAAIVHRxm9ISHaxhkZ/8UM + DP/EBQX/ugAA/40AAP9BAAD/DB0d/wFqav8AnJz/ALa2/wDPz/8A4+P/APLy/wD7+/8G////G////zb/ + //9V+fn/dsLC/6lcXP/kOzv//Tc3//c+Pv/MOTn/aCEh/xI9Pf8Bv7//AObm/wD09P8A/Pz/Af///w3/ + //8a/v7/L/39/0n5+f9o7u7/j8TE/8Ojo//tt7f//Li4//+urv/bjIztFxISiwQEBD4AAAAKAAAAAKgk + JFXFIyP/wxcX/8EJCf/AAgL/twAA/5QAAP9UAAD/GgAA/wMfH/8AcnL/AJaW/wCvr/8Ax8f/ANzc/wDs + 7P8A+Pj/C/7+/yb///9G/f3/Ze3t/4WoqP/DQUH/7i8v/+cwMP+hJyf/OA8P/wZubv8A29v/AO/v/wD4 + +P8A/Pz/AP39/wD8/P8A+fn/BfX1/xXv7/8y4uL/XLq6/5qTk//drKz/+bW1//+trf//n5//ZD8/sQYG + BlEAAAASAAAAALIlJYnCISH/vhQU/74HB/+/AgL/vgAA/60AAP+FAAD/TwAA/xsAAP8DFxf/AGdn/wCM + jP8Apqb/AL29/wDT0/8A6Oj/APf3/xP+/v8z////Uv39/23c3P+eTk7/xyws/7YjI/9dEhL/E0RE/wG4 + uP8A7e3/APb2/wD5+f8A+fn/APX1/wDv7/8A5ub/ANra/wPGxv8Pqqr/N319/41sbP/epKT/+7Oz//+s + rP//np7/mFtbygoKCmIAAAAZAAAAALcoKLG/ISH/uxMT/7sHB/+9AgL/wAAA/78AAP+yAAD/jwAA/1sA + AP8nAAD/CAIC/wFHR/8Afn7/AJub/wC0tP8Az8//AObm/wD5+f8d/v7/Pf///1X09P9wjo7/gjs7/2Qg + IP8gSkr/AsvL/wDt7f8A9/f/APj4/wD39/8A8fH/AOfn/wDZ2f8Ax8f/AZub/whfX/8fOjr/Xjw8/7h5 + ef/wpqb//rGx//+qqv//nZ3/vG1t3RAQEG8AAAAgAAAAALcpKdG8IiL/uRMT/7gGBv+5AQH/vgAA/8MA + AP/EAAD/uwAA/54AAP9uAAD/PAAA/xIAAP8CKyv/AGVl/wCPj/8Ar6//AM/P/wDp6f8D+/v/Jf7+/z39 + /f9I3d3/R7Cw/zGmpv8Sy8v/APX1/wD8/P8A+/v/APn5/wDz8/8A5+f/ANDQ/wCtrf8DhIT/Ej09/zYb + G/9vODj/smFh/+aGhv/7oaH//6ur//+np///mpr/13Z26w8PD3gAAAAlAAAAALksLOe6IyP/thIS/7QE + BP+2AQH/uwAA/8AAAP/FAAD/yQAA/8UAAP+xAAD/iQAA/1cAAP8pAAD/CgAA/wFHR/8Ajo7/ALa2/wDY + 2P8A8PD/DP39/yP///8u/f3/LPj4/yD4+P8R/f3/Bf///wD///8A////APv7/wDq6v8AzMz/BISE/xIt + Lf8xFRX/ZCsr/55HR//MX1//63Nz//qDg///lpb//6Oj//+jo///lpb/63t79RQUFIAGBgYpAAAAALsx + Mfe3IiL/shAQ/7EDA/+zAQH/uAAA/70AAP/CAAD/yAAA/84AAP/OAAD/xAAA/6YAAP91AAD/OQAA/wwA + AP8BUVH/AJub/wDIyP8A5+f/APr6/w3///8Y////Gf///xP///8N////CP///wf///8I////Bubm/wKx + sf8MYWH/KxUV/2IiIv+bOjr/yU9P/+hfX//2Zmb//HBw//94eP//iYn//5mZ//+dnf//kpL/+Hx8+xUV + FYQGBgYrAAAAALs0NP60IiL/rw4O/64DA/+wAAD/tQAA/7oAAP+/AAD/xQAA/8sAAP/RAAD/1QAA/9IA + AP+2AAD/egAA/zEAAP8HDAz/AHd3/wC6uv8A4OD/APX1/wD///8J////C////wr///8H////CP///w3/ + //8T/f3/GsnJ/yZiYv9KGRn/iSgo/8Y+Pv/nTU3/9ldX//xdXf//YGD//2Rk//9tbf//fX3//46O//+X + l///jIz//nh4/xgYGIEGBgYpAAAAALo4OPezJSX/rA8P/6sCAv+tAAD/sgAA/7cAAP+8AAD/wgAA/8gA + AP/OAAD/0wAA/9gAAP/UAAD/rgAA/2gAAP8fAAD/AzU1/wChof8A4OD/APT0/wD9/f8B////A////wP/ + //8E////B////xD///8d/f3/LdfX/0h9ff+FMDD/zTc3//NDQ//9S0v//09P//9SUv//VVX//1hY//9e + Xv//cHD//4OD//+QkP//hob/+G5u/BkZGXsHBwcmAAAAALg+PuizKyv/qhIS/6gCAv+qAAD/rgAA/7MA + AP+5AAD/vgAA/8QAAP/KAAD/0AAA/9YAAP/aAAD/ygAA/5MAAP86AAD/CCUl/wCgoP8A5eX/APb2/wD9 + /f8A////AP///wD///8B////Bv///xD///8h////N/b2/1PKyv+IWlr/zz4+//k9Pf//QED//0ND//9G + Rv//SEj//0pK//9QUP//YmL//3h4//+IiP//gID/7GJi9RsbG3IICAghAAAAALZBQdOzMDD/qRUV/6UE + BP+nAQH/qwAA/7AAAP+1AAD/ugAA/8AAAP/GAAD/zAAA/9IAAP/XAAD/zQAA/5UAAP8xAAD/BWpq/wDM + zP8A8PD/APn5/wD+/v8A/v7/AP///wD9/f8A/v7/Af7+/wv///8d////N////1Ly8v9zvr7/qVtb/+g6 + Ov//NDT//zc3//86Ov//Ozv//z4+//9CQv//VVX//2tr//+AgP//eHj/3FdX6R4eHmcKCgoaAAAAALRD + Q7S0ODj/qhwc/6QICP+lAgL/pwAA/6wAAP+xAAD/tgAA/7wAAP/CAAD/yAAA/84AAP/OAAD/tAAA/1EA + AP8PTEz/AcfH/wDt7f8A9/f/APv7/wD+/v8A/f3/APv7/wD39/8A9vb/APj4/wD8/P8R/v7/Kv///0f9 + /f9k9fX/hL+//71PT//6Kir//yoq//8rK///Li7//zAw//82Nv//R0f//2Ji//91df//bm7/xUxM2iMj + I1gAAAASAAAAALFBQYq2QED/rCcn/6QPD/+jBQX/pAAA/6gAAP+tAAD/sgAA/7cAAP+9AAD/wgAA/8EA + AP+oAAD/QQAA/wx/f/8B0ND/APHx/wD4+P8A+/v/AP39/wD9/f8A+Pj/APHx/wDp6f8A5OT/AObm/wDu + 7v8A+fn/FP7+/zH///9P////bPX1/4y6uv/OQED/+x4e//8dHf//Hx///yIi//8oKP//PDz//1VV//9m + Zv//YGD/qkJCwykpKUUAAAAKAAAAALE9PU+3R0f/rS8v/6MVFf+hCAj/oQEB/6QAAP+pAAD/rQAA/7MA + AP+3AAD/tQAA/44AAP8wDw//Bqys/wDn5/8A9fX/APr6/wD8/P8A/v7/AP7+/wD5+f8A8PD/AN/f/wDL + y/8Aw8P/AMjI/wDX1/8A6Oj/APf3/xb9/f80////Uv///2719f+Ltrb/vkZG//UVFf//EBD//xUV//8b + G///MTH//0hI//9bW///Vlb/iDw8nzU1NTBAQEAEAAAAALEzMwqzRUXZsDo6/6YfH/+gDQ3/ngEB/6EA + AP+kAAD/qQAA/6sAAP+iAAD/agAA/xtDQ/8DwsL/APDw/wD6+v8A+/v/AP7+/wD+/v8A/v7/APz8/wD0 + 9P8A29v/AaWl/wFtbf8Ac3P/AJ6e/wC3t/8Azs7/AOTk/wD39/8W/v7/Nf///1H///9p9/f/f9jY/6Rt + bf/qERH//wcH//8REf//Jyf//z4+//9OTv/jSUntSzw8ak1NTR7///8B////AQAAAACwQkKbtEVF/6kq + Kv+hFBT/nQUF/5wAAP+dAAD/mAAA/4AAAP9DAAD/D2pq/wHR0f8A8/P/APv7/wD9/f8A/v7/AP///wD/ + //8A/v7/APf3/wDl5f8CoqL/Cj8//xAFBf8HERH/AVBQ/wCHh/8Ara3/AMrK/wDk5P8A9/f/Fv7+/zH/ + //9L////Xv39/27f3/+LfHz/0Rwc//oPD///IiL//zU1//9BQf+/Pz/MRkZGSWlpaRH///8B////AQAA + AACuPT1LtktL8602Nv+kHx//mgoK/5EBAf9+AAD/UgAA/yYSEv8Jb2//AcbG/wDn5/8A9fX/APv7/wD+ + /v8A////AP///wD+/v8A+/v/APHx/wHJyf8TQUH/PAAA/0oAAP8qAAD/CgEB/wFISP8AiIj/AKur/wDI + yP8A5OT/APb2/xD9/f8n/v7/Ofv7/0bv7/9XtbX/kDQ0/94aGv/6KSn//Tc3//U4OPmVQUGWXV1dLL+/ + vwgAAAAAAAAAAAAAAAAAAAAAsUZGr7JDQ/+nLS3/mxQU/4IGBv9bAQH/JQIC/wdRUf8BmJj/AMHB/wDZ + 2f8A7Oz/APj4/wD+/v8A////AP///wD9/f8A9vb/AN/f/wiPj/9MAAD/lwAA/5sAAP9wAAD/NAAA/wsA + AP8BR0f/AImJ/wCrq/8AyMj/AOTk/wD09P8C+fn/EPPz/xzX1/81e3v/iRkZ/9wbG//3Kyv/+zg4/8w5 + OdVYWFhRi4uLFv///wQAAAAAAAAAAAAAAAAAAAAArT4+UrNLS+6uPT3/nyUl/4MQEP9VBgb/IQEB/wUh + If8Aenr/AKWl/wDCwv8A29v/AO3t/wD4+P8A/v7/AP39/wD5+f8A6+v/BKqq/zMREf+pAAD/ywAA/8gA + AP+sAAD/dwAA/zcAAP8KAAD/AVFR/wCIiP8ArKz/AMnJ/wDf3/8A5ub/Ac7O/wqBgf9JBwf/sA8P/+kd + Hf/3Ly//7TY29p9CQpR0dHQus7OzCv///wMAAAAAAAAAAAAAAAAAAAAAAAAAAK9FRZu0Skr/qDY2/5Ie + Hv9sDg7/NgMD/w8AAP8CKir/AH19/wClpf8AwsL/ANzc/wDt7f8A+Pj/APn5/wDv7/8Bycn/HTs7/5UA + AP/JAAD/0gAA/9MAAP/MAAD/sQAA/3oAAP86AAD/DAAA/wFKSv8AjIz/AK+v/wDFxf8AwcH/CHx8/zUJ + Cf+SBgb/2RMT//AlJf/1MzP/wjw8xGtra0WmpqYX////BP///wEAAAAAAAAAAAAAAAAAAAAAAAAAAKo5 + OSiwSUnKsUhI/6UzM/+MHh7/YwwM/zMEBP8PAQH/Aisr/wB1df8ApaX/AMLC/wDb2/8A6+v/AO7u/wDa + 2v8Oamr/ZgAA/74AAP/LAAD/zgAA/9AAAP/RAAD/zQAA/7QAAP99AAD/PQAA/wsAAP8AWVn/AJCQ/wCe + nv8Ia2v/MwkJ/4kDA//QDQ3/6hwc//AsLP/UODjgjlJSa5WVlSTo6OgL////Av///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACtPz9ZtE9P47FHR/+kMzP/ihwc/2MODv8yBQX/DgEB/wMuLv8Afn7/AKam/wDB + wf8A19f/ANra/wSlpf88AAD/pQAA/8EAAP/FAAD/yAAA/8sAAP/NAAD/0AAA/80AAP+0AAD/dwAA/zEA + AP8GFBT/AmNj/wZhYf8wCwv/hAQE/8oLC//kGBj/7CYm/90xMe6pRESNi4uLLtLS0hH///8F////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0REdLRQUO+xSEj/ozIy/4kcHP9hDg7/MAQE/w0B + Af8CMDD/AH9//wCkpP8Aubn/Aa6u/xo8PP9+AAD/tQAA/7wAAP+/AAD/wgAA/8UAAP/IAAD/ywAA/80A + AP/JAAD/pwAA/2YAAP8tAAD/GggI/zIGBv9/AwP/xgoK/+AWFv/nJSX/4S8v9LQ8PJ6MjIwz3NzcFv// + /wr///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALBHR361U1PwskpK/6Q1 + Nf+NIiL/YxER/zMICP8QBAT/AzEx/wB0dP8Bj4//Dk1N/1sAAP+lAAD/swAA/7cAAP+6AAD/vQAA/8AA + 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 + yf+AAU3/wANP/+AHYf8= + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/TutorialWindow.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/TutorialWindow.vb new file mode 100644 index 00000000..29e7329a --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/TutorialWindow.vb @@ -0,0 +1,83 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics + +Namespace D3D10Tutorial01_WinFormsControl + ''' + ''' This application demonstrates creating a Direct3D 10 device + ''' + ''' http://msdn.microsoft.com/en-us/library/bb172485(VS.85).aspx + ''' + ''' Copyright (c) Microsoft Corporation. All rights reserved. + ''' + Partial Public Class TutorialWindow + Inherits Form + #Region "Fields" + Private device As D3DDevice + Private swapChain As SwapChain + Private renderTargetView As RenderTargetView + Private backColor_Renamed As New ColorRgba(0.0F, 0.125F, 0.3F, 1.0F) + #End Region + + #Region "TutorialWindow()" + ''' + ''' Initializes a new instance of the class. + ''' + Public Sub New() + InitializeComponent() + End Sub + #End Region + + #Region "TutorialWindow_Load()" + Private Sub TutorialWindow_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load + InitDevice() + directControl.Render = AddressOf Me.RenderScene + End Sub + #End Region + + #Region "TutorialWindow_FormClosing()" + Private Sub TutorialWindow_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles MyBase.FormClosing + directControl.Render = Nothing + device.ClearState() + End Sub + #End Region + + #Region "InitDevice()" + ''' + ''' Create Direct3D device and swap chain + ''' + Protected Sub InitDevice() + device = D3DDevice.CreateDeviceAndSwapChain(directControl.Handle) + swapChain = device.SwapChain + + ' Create a render target view + Using pBuffer As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(pBuffer) + End Using + + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}) + + ' Setup the viewport + Dim vp As New Viewport() With {.Width = CUInt(directControl.ClientSize.Width), .Height = CUInt(directControl.ClientSize.Height), .MinDepth = 0.0f, .MaxDepth = 1.0f, .TopLeftX = 0, .TopLeftY = 0} + + device.RS.Viewports = New Viewport() {vp} + End Sub + #End Region + + #Region "RenderScene()" + ''' + ''' Render the frame + ''' + Protected Sub RenderScene() + ' Just clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor_Renamed) + swapChain.Present(0, PresentOptions.None) + End Sub + #End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/directx.ico b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsControl/directx.ico differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/D3D10Tutorial01_WinFormsWindow.vbproj b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/D3D10Tutorial01_WinFormsWindow.vbproj new file mode 100644 index 00000000..3f1fdd4e --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/D3D10Tutorial01_WinFormsWindow.vbproj @@ -0,0 +1,104 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA} + WinExe + + + D3D10Tutorial01_WinFormsWindow + v3.5 + On + Binary + Off + On + 512 + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + + + + 3.0 + + + + + Form + + + TutorialWindow.vb + + + + + TutorialWindow.vb + Designer + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + True + Settings.settings + True + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..12ca6e4e --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/My Project/AssemblyInfo.vb @@ -0,0 +1,40 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/My Project/Resources.Designer.vb new file mode 100644 index 00000000..b5a64a5f --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/My Project/Resources.Designer.vb @@ -0,0 +1,64 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My.Resources + + + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If (resourceMan Is Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/My Project/Settings.Designer.vb new file mode 100644 index 00000000..34f1fe80 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Program.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Program.vb new file mode 100644 index 00000000..c646ab12 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/Program.vb @@ -0,0 +1,22 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms + +Namespace D3D10Tutorial01_WinFormsWindow + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New TutorialWindow()) + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/TutorialWindow.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/TutorialWindow.Designer.vb new file mode 100644 index 00000000..cfc6c7c0 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/TutorialWindow.Designer.vb @@ -0,0 +1,49 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace D3D10Tutorial01_WinFormsWindow + Partial Public Class TutorialWindow + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Dim resources As New System.ComponentModel.ComponentResourceManager(GetType(TutorialWindow)) + Me.SuspendLayout() + ' + ' TutorialWindow + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6F, 13F) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(624, 442) + Me.Icon = (CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)) + Me.Name = "TutorialWindow" + Me.Text = "Direct3D 10 Tutorial 1: Direct3D 10 Basics" +' Me.Load += New System.EventHandler(Me.TutorialWindow_Load) +' Me.FormClosing += New System.Windows.Forms.FormClosingEventHandler(Me.TutorialWindow_FormClosing) + Me.ResumeLayout(False) + + End Sub + + #End Region + + End Class +End Namespace + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/TutorialWindow.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/TutorialWindow.resx new file mode 100644 index 00000000..0dd393c3 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/TutorialWindow.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAAABABoBgAAlgAAACAgEAAAAAQA6AIAAP4GAAAQEBAAAAAEACgBAADmCQAAMDAAAAAA + CACoDgAADgsAACAgAAAAAAgAqAgAALYZAAAQEAAAAAAIAGgFAABeIgAAMDAAAAAAIACoJQAAxicAACAg + AAAAACAAqBAAAG5NAAAQEAAAAAAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAAAA + AAD//wAA////AACAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMy2t7a2bMzMzMzMzMzMzMzMzMzMzMzMu7a3tnd2d2ZszMzMzMzMzMzMzMzMzMy7t7tr + a2dnZmZmbMzMzMzMzMzMzMzMzLu7e2tnZnZmZmZmZmzMzMzMzMzMzMzMy7u3u7e2tmdmZmZmZmbMzMzM + zMzMzMzMt7e7u3tra2Z2ZmZmZmZszMzMzMzMzMzLu7u7u7u7d7Z2ZmZmZmZmzMzMzMzMzMx7O7u7s3N7 + trd2tmZmZuZmbMzMzMzMzMu7u7uzNye7e2trZmd3ZmZmZszMzMzMzLO7u7MzqmZ3t7Z3ZrdyZmbmZmzM + zMzMy7u7s7MKqqZre2t2t3AqpmZmZmbMzMzMx7OzuzIqqqpnt7a3ZzIqamZm5mbMzMzMO7u7syKqqqpm + e3trYzKqqmZmZmZszMzMu7OzMiqqqqpqe7a2syKqqmpmZmZszMzLszszIiqqqqqmd7t7cCqqqqamZmZm + zMzHu7swAiKqqqqqZ3u3MCqqqqpqZmZmzMzLMzMzACIqKqqqZ7t7Aqqqqqqqd2ZmzMzLO7szMAIiqqqq + anszIqqqqqoid2ZmzMxzszOzMwAiIqqqpmMyKqqqqqIie2ZnbMy7O7OzszAAIiqqqqd6qqqqoiIzd2Zm + bMw3szs7OzMwAiKqqqqqqqqqIDN3tmZ2bMy7M7OzuzszACKqqqqqqqoiA3trZrZmvMxzOzOzs7O7MAIq + qqqqqqcjN7a3t2ZnfMw7M7Ozs7s7MwIqqqqqqqoje3t3a3d2fMx7OzM7O7O7MzAqqqqqqqpnt7e7trZ3 + fMy3MzOzuzuzswKqqqqqqqqme7tra2dnfMx7M7M7M7O7MwKqqqqqqqpqZ7u7u7a2vMx3szszs7OzMqqq + qqqqqqqmpnu7t7tnfMzLczM7OzswKqqqqqoqKqqqpme7u7e7zMzHOzOzMzMCqqqqqqIiKqqqpqZ7u7e2 + zMzLc7MzMzKqqqqqqiIAIiqqqmpnu7t7zMzMtzMzMCKqqqqqqgMwACIqqqqne7e8zMzMN7MzAiqqqqqq + ojMzACIqqqqnO3u8zMzMxzszACKqqqqqIDszMwIiqqIjO7vMzMzMy3MzAAIiqqqqA7O7MwAiIqIDu3vM + zMzMzHtzMwAioqqiM7s7szMCIiAzu7zMzMzMzMe3MwAiKqojM7O7O7MAIgO7u8zMzMzMzMx7MzAAIqID + O7OzuzMwAzO7vMzMzMzMzMzHdzMAAiIzszuzs7MzM7t7zMzMzMzMzMzMtzcwACMzOzM7OzuzM3u8zMzM + zMzMzMzMx7s3MDMzs7Ozs7Ozu7vMzMzMzMzMzMzMzHdzMzOzMzs7Ozs7t7zMzMzMzMzMzMzMzMy3d7cz + s7M7O3u3vMzMzMzMzMzMzMzMzMzMt3t7e3t7e7e8zMzMzMzMzMzMzMzMzMzMzMe3t7e3t8zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz///////8AAP///////wAA///AH///AAD//AAB//8AAP/w + AAB//wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/AAD8AAAAAf8AAPgAAAAA/wAA8AAAAAB/ + AADgAAAAAD8AAOAAAAAAPwAAwAAAAAAfAADAAAAAAB8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAIAA + AAAADwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAADAAAAAAB8AAMAA + AAAAHwAA4AAAAAA/AADgAAAAAD8AAPAAAAAAfwAA+AAAAAD/AAD8AAAAAf8AAP4AAAAD/wAA/wAAAAf/ + AAD/gAAAD/8AAP/AAAAf/wAA//AAAH//AAD//AAB//8AAP//gA///wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgIAAgAAAAIAAgACAgAAAwMDAAICA + gAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzLe2tmbMzMzMzMzMzMzMy3dnZ2ZmZmzMzMzMzMzMzHu7t3ZmZmZmzMzMzMzMzHu7u7 + t7a2ZmZmbMzMzMzMu7uzd3trZmZ2ZmbMzMzMy7uzMqZ7tnd3dmZmbMzMzMuzMCqma2t2cKpmZmzMzMy7 + MyKqqqe2tzKqpmZmzMzLszIqqqpmu3cKqqamZmzMyzMCIqqqpndzKqqqZmZszMszACIqqqprMKqqqqp2 + bMxzszACIiqqpzKqqqoidmbMOzszACIqqqqqqqqiA3ZmzLs7MzAAIqqqqqqiA3dmZsxzM7MzMAKqqqqq + I3trdmfMu7M7OzMAqqqqqqO3trdmzHMzs7MzAqqqqqqqe3t3a8x7OzszMqqqqqqqpme7trbMtzMzMCqq + qqqiqqqmZ7trzMtzMwKqqqqiAiKqqqZ7fMzHszAqqqqqoAAiqqqiu7zMw3MwIiqqqiMwAiqqI7e8zMy3 + MAIiqqIzMwIiIjO7zMzMx3MAIiogM7MAIiM7vMzMzMNzcAIiIzszMAIDu7zMzMzMdzMwIgM7OzMzO3vM + zMzMzMt3MwMzs7OzM7u8zMzMzMzMx3c3Mzs7O7e8zMzMzMzMzMw3e3t7e7e7zMzMzMzMzMzMzMN7e3t8 + zMzMzMzM////////////4B///wAD//4AAf/4AAB/8AAAP+AAAB/gAAAfwAAAD4AAAAeAAAAHgAAABwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AAAAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gA + AH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzM + zMzMzMzMzMzLZmbMzMzMy7e2ZmbMzMyzB3dndmzMyzKqe3CmZszDCqpnMqpmzLMyqqcKqqZsOzAqqqqi + dmwzszCqqie2bDMzMqqqZ7tsMzAqqqqme7zDAqqiAqqrzMcyqqMwojvMzHMqCzAjvMzMxzIzMzvMzMzM + xze7zMzM//+zMPg/a2vgD6pmwAfMzIADMyKAA6e2AAGqpgABzMwAATIqAAFmuwABqqaAA2zMgAMCIsAH + pnfgD6qq+D9szCgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWAAAA0QAAAM4A + AADNAAAAywAAAMgAAADGAAAAxQAAAMIAAADBAAAAvgAAALwAAAC6AAAAtwAAALUAAACzAAAAsAAAAK0A + AACpAAAApgAAAJwAAABzAAAAZwAAADwAAACiAQEAkgEBAN0CAgDAAgIAvQICAH0BAQBWAQEAzgMDAMMD + AwC/AwMAsAMDALQEBACGAwMA5wYGACUBAQDTBgYAxQYGAKQFBQDXBwcAuQcHAMAICABIAwMAMgICALQI + CACtCAgAoQcHAMcKCgD5Dg4AvgsLAOEODgDMDAwAmgoKANIPDwDFEREArQ8PAPoXFwDpFxcApBERANwY + GADJGRkA/iEhALcYGAD0IyMA1B4eAOQiIgBjDw8A7SUlABoEBAD9KioAlxkZAAwCAgClHR0A9SwsADMJ + CQDXJycAuSIiAMYoKAD+NDQAiRwcAPQ0NADnNDQA2jIyAP47OwCqKSkA9j09AP5CQgD+RkYA9ENDAP9J + SQC6NjYAyzw8AGYfHwA1EBAA/05OAPhNTQDlR0cA/1FRAKg3NwD/VVUAu0BAAEkZGQCKMDAA/1paAPZX + VwD2WloA/15eAMhLSwC3RUUA/2FhAG4qKgC/TEwA/2ZmALFHRwDoX18A9mZmALVLSwD/bGwAtk5OAMxZ + WQDmZWUAr01NAKBHRwD/cnIAt1JSADMXFwD2c3MA/3h4ACkUFAD/fX0A/4GBAOl3dwD/hoYA+oODAPaG + hgD/jY0AqF1dAGY5OQD/k5MA5oaGAMVzcwD/mZkA8JOTAP+engD/oqIA+6GhAKNpaQCEVVUA/6amAMuF + hQD/rKwA8KamAP+ysgD0q6sA/7a2APuzswD/ubkA+bW1AP++vgDgqakA/8LCAP/FxQD/yckA6Lm5AP/O + zgCOc3MA/M3NAOzCwgDDq6sAMy0tAAD+/gAA/f0AAPv7AAD5+QAA9/cAAPT0AADx8QAA7+8AAO3tAADp + 6QAA5uYAAOTkAADg4AAA398AANraAADT0wAAyckAAI6OAAB9fQABzs4AAcbGAAHCwgABuroAAbS0AAGt + rQABpKQAAZubAAGHhwAC+fkAAvf3AAF1dQAD//8AA/v7AAX19QAG//8ABubmAAJSUgAJ//8ADP//AAnA + wAAIj48ABmhoAAMxMQAQ8/MAEf7+AAqBgQAGSUkAFv7+AA+qqgAW6+sADH5+AAQoKAAWysoAHf7+ABzX + 1wAo/v4AJujoADT//wAt19cAMuLiADf29gA7/v4ABhgYAEf9/QBU/v4AUPDwAD2wsAAYREQAFj09ABAs + LABO1NQAZPDwAGr29gB29fUAPHx8AC9dXQBarq4Ac93dAIC+vgBDYmIAltTUAIeYmAAAAAAA//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////XGRqcHh+hIeK//// + //////////////////////////////////////////9ISFZaZGpzfoKEh4qNjZCSk/////////////// + ////////////////////////QEBIVlxmc36Eh4qNkJKSk5eXl5mZ//////////////////////////// + /////0xCSEhRWWFteIKHipCSk5mZm5ubm5ubm5v/////////////////////////////QkJMTFFRVllk + anN+hIqNkpmbnaGhoaGfn52d//////////////////////////9GRkxMTEhASFNYWmRteIKHjZKXm6Gj + pKSko6Gfn////////////////////////0ZGRkJCOzszPENVU1lhanN+hYqQl5uho6WlpaSjoZ////// + ////////////////REREPDwzMzMqPWllVVZcZnB4goeKkJecoqaqqaelpKGf//////////////////9E + Pjw8NSUlJRAe/PmoXlhaZG1zfoSHipGYqKirpqmnpaShn////////////////04+PjUlJSUBJKzU5e77 + lWNZYWpzeIKFiY+W+O/7q6qpp6WjoZ3/////////////TkM+NRoaGgQV8MCx4uz0+3JbYWZweH6Ehous + 397u/auqqaeloZ+b////////////Qz44KhoaBB3xw7Kt3Obt+otjWmRqc3iBeozww8rq9f2rqqmnpJ+b + //////////9OQzgnAAAEJPDCtLCt2eTs9P5uW1xkanN7fYDHubDk7fb9q6qppaGdm/////////9DPzYf + AgsW8MS6s7Ct0uLm7fqVY1lcZmx6cfLDtq/c5u32/auqpKOdmf///////1A/OSgHEhbxvsO8t7KuzNnk + 7PT+blhZXGNlgMu8tK/S4urt9v2rpqGfmZf//////1A/MigMGRfr1sfEwLizr8/i5u37i1RRWF5f8cK3 + sq6t0+Lm7PT7q6afmZP//////1A/LBsNGR5H68vHxcG7tbDT5Oz0/mdMVFdg1ru0sK6urrDO3uj5/qKg + mZL//////085LBsKESQeR+vWvsbDvLax2ebt+n1QT0Xww7WxsLCytLe7wd33qKKemZL/////UE9BKxwJ + Cg8ZHiZK27/HxMC3sOLq7v5pX/C9tbGwsbO3u8HH1vGMj5qbmZKN////UE9BKwwKCAcLFBUXSuDWvsXA + ts3k6vPv7+Gyrq+wsrfAxcjxgIyLjpSZl5CK////UE9BIw0LCQcFBxAkHiZK277Eu7PT5OTk4tnPra2v + tsDI8oBxfXqGiI2Tk42H////XU86Ig8NCggFAgIHExUXStHHvbev09zc2dPSz9LQxNaDX2VudXZ+goeQ + ko2E////XU86IhAODAoHBAEAAQ0dLkrLw7myrdLT0s/S09nh+GhpXmNrbXBzeISKkIqC////XU86EREP + DQsIBQIBAAARFibXxrmyrq3MzMzP2eLn92leW1xhZGZqbX6Fiod+////Z1c6EhIRDwwKBwQBAAAEGRfg + xrexrq2tra3P2eLp85ZeWFlZWlxcZHCCh4V4////b109KRMREA4MCQYDAQADGS7WwLOwra2trq2t0+Lm + 7vuLVFFRVlZWWWZ4hYJz////b11LMRMTERANCwgFAgIOHtvBtbGvra6vsbGwrtnk7PX7ckhISEhRUVpw + fnhw////b2dXPSkTEhEPDQoICRIX38CzsK+urrCztri3tLDc5u31+15AQEBASFZmc3Bw/////29XPTEY + ExIRDw0OGWDFt7Kvrq2tsLO6vcK9u7ax3Obt9ftvOzM7O1Fcamb//////29lSz0UGBMSERgW8MKzr6+t + ra2usrvG1svHw8C4sdzm7fX6lTwzM0hWYWT//////29vVz0xFBQUHS3WvLKvrq2tra2xt8bxSuvRyMW9 + uLHc5uzt+qhDM0BRWWT///////93ZUs3GR0eg9bBt7Kvra2tra+zvfEXLSZK28jFvbix2eTq7vlpPkhR + Vv////////90b1dJJB4m0cfCu7Wwra2trrG61S0UFBUuStvIxb24ssnY4/dSPkxWWv//////////d2VX + Uh4m4L/Gwru1sK2usLXFYBIEBREVF0rRyMW9urfA2i06PExW////////////dHdlSUUuSuC/xsK7tbCw + tL3xGQUBAQMQHRdK277FwcLfTRk+RlNi/////////////3d0ZVJFLkrgy8bCu7W0u9YWCgQCAQEDDh0X + StG+x9ZNJDg8TFj///////////////95dGVSRS5K17/Gwru7xhcTCQcFBAMBAw4VLuvW1k0kNjxGU/// + ////////////////f3RlUkUuSte/xsPF8R0OCwoIBwUEAwUTFi5HTR0yPkRU//////////////////// + /393ZVJFTUrXy77bHhMPDQwKCQgHBQQJFBUWJDQ+RFT///////////////////////9/eWVpX2BH8tsX + GRIRDw4NCwoJBwYFITA6OUNEVP//////////////////////////eXl0aXFoYC0dGBMSERAPDQwLCiAo + Mjk/Q05V/////////////////////////////3d/fH1pcVJLPTowMDAvLys0NDk/P05OVVX///////// + ////////////////////////d398dGVlV1dPQUFBQU9PUFBQUFVV//////////////////////////// + //////////90eX95b2dnZ11dXV5eXl5eXv////////////////////////////////////////////9v + cnJycnJubm5eXv////////////////////////////////////////////////////////////////// + ////////////////////////////////AAD///////8AAP//wB///wAA//wAAf//AAD/8AAAf/8AAP/A + AAAf/wAA/4AAAA//AAD/AAAAB/8AAP4AAAAD/wAA/AAAAAH/AAD4AAAAAP8AAPAAAAAAfwAA4AAAAAA/ + AADgAAAAAD8AAMAAAAAAHwAAwAAAAAAfAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAAAA + AAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAgAAAAAAPAACAAAAAAA8AAIAAAAAADwAAwAAAAAAfAADAAAAAAB8AAOAA + AAAAPwAA4AAAAAA/AADwAAAAAH8AAPgAAAAA/wAA/AAAAAH/AAD+AAAAA/8AAP8AAAAH/wAA/4AAAA// + AAD/wAAAH/8AAP/wAAB//wAA//wAAf//AAD//4AP//8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAC9AAAAuwAAALkAAAC2AAAAswAAALEAAAClAAAAowAAAKEA + AACcAAAAkQAAAG0AAABpAAAAZAAAAF0AAABYAAAANgAAADAAAAAqAAAAIgAAABMAAAAHAAAAhgEBAL8C + AgC8AgIAqAICAKECAgBPAQEAQgEBALsDAwCyAwMArQMDAH0CAgC3BAQAiwMDALMFBQC8BwcA3AkJAKUH + BwBVBAQAzgsLALwKCgCqCQkAOwMDAOgNDQAPAQEAXQcHAJcMDACgDg4AvBISAPkaGgDNFhYAWwoKAOcb + GwC2FhYA2hwcAKsXFwDDGxsAuxwcALUbGwDKICAA8ycnAJMZGQBFDAwA0yYmAOUtLQC2JCQA/TQ0APAy + MgDGLCwA+Do6AKwoKAD/PDwA1TMzAP8+PgDpOjoA/0REAPBAQADIOTkAwDc3AP9KSgC3NTUATRcXANdC + QgD/T08A+E1NAM1AQAAqDQ0A5khIACYMDADxTU0Avj09AKw5OQCVMTEA/1VVAMFCQgC6QUEAsT4+AP9b + WwDISUkAvkZGALFCQgBpJycAzU1NAAgDAwD/YmIANBQUAOhcXAD/ZmYAu0tLAPhnZwD/a2sAs0xMALxR + UQD/cnIAkUFBAHk2NgCkS0sA/3Z2AJtISAC2VVUAzmNjAP98fADodXUASyYmAP+EhAD2gYEAqFlZABYM + DAD/jIwAm1hYAGc7OwD+k5MAqmNjANJ9fQD/mpoA/56eAP+iogD/qKgA/6qqAN6WlgD/ra0A+6qqAP+w + sABzUVEA/7i4AOurqwD/u7sA/729APK3twCFZWUA/8PDAL6RkQD/ysoA16urAPXExAD3ysoAwqamAMyx + sQAhHR0AKScnAB0cHAAA//8AAP39AAD7+wAA+PgAAPb2AAD19QAA8/MAAPHxAADv7wAA7e0AAOrqAADm + 5gAA5OQAAOPjAADh4QAA398AAN3dAADY2AAA19cAAM3NAADLywAAx8cAAMPDAADBwQAAtbUAALCwAACt + rQAAqakAAKamAACjowAAlZUAAJKSAABmZgAAZGQAAY2NAAGCggACvLwAA/7+AAPs7AADwsIAApycAAT8 + /AAEtLQABK6uAAJcXAAEl5cAB/n5AAf09AAG2NgABaKiAASRkQADbGwACPX1AAR4eAAJ/v4ADv//AAZm + ZgAQ+voACpycABT//wALiooAFfT0ABz9/QAe6OgAI/39AAk6OgAs/f0ALu7uACKurgAz/f0AHo+PADz8 + /AA86+sAPNXVAEn9/QBG7+8AInBwAFL+/gA2oaEAVPX1AF/9/QAECgoAYOTkAFzT0wBr8fEAaM7OAGO8 + vABx1dUAgN7eAHzIyACQ5eUAfpeXAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////9janB3foKFiP////////////// + /////////////0lJUWNzfoWIiouMjI6Q//////////////////////9ERERJUWNwe4KJjpKUlZSS//// + //////////////9FPj4zMzZKTlVqc36IjJSYmpiVlP//////////////QjY2LSkwdf5XTV9te4KFjZmb + nJqYlP///////////0I2LSYfHOfr9YBOX213f4eR8fienZqYlP//////////OCYZIWvH3Ojz/GhVanN8 + g6HT6vufnZqV/////////zgpGx3ftqrZ5fD3hltjb3p91a3j8/2fnZiS//////9BNCAc1ry3r6bh6vP8 + aF9sdKK3q9rq8/2fnJKQ/////z0yIxPPwby3rqbj7feDWWR90LCqpOHq8vuelo7/////PSoXERbDwr24 + sajl8PliXqK0rKmoqcni7P6bjP///0Y6KgkNExbExb+6s9Lo7pF9yqioqa2zts3pl5OMif//RjolBAoO + ExbPxsC5sNzl5uLZo6WpsLrGoISHj4uF//9GOyIDBAoMERX02Lu0qdrh3trZzK7Uon10en+JioL//1A8 + JAQCAwcXDxMWxbWrpNna2t7g71NeaGxvd4KIfv//XEMgBgQBAAMJDRTktaqlo8jZ3uPsdVRWX19qe4V3 + //9lQysgBgMBAAkQgb2tqKamqKjR4er2dk5LTVVwfnP//2VSORogBgYLHd20q6emp6ywsq7S5fD6gFdF + SWNzbf//YWE5JwcHIRLOrKempaars7rHuLLX6PD3/GZFUWpj////bkgxFxBay7OrpqSkqLDL5Ma/urHR + 5e3y+UZLVf////9uYj8o5MW8tq+opaaruIEUFtbAuK+o4OLxQ0RL/////2JxXlMu1sG8tq+pqa/fEA0T + 9Ma+uLS01DU4RE3//////3F2Z1gWw8G8t7Kx1B0ICA8Vz8K+u9UdMj5H/////////3l4Z1hpw8G9usdY + CwACFxEWw8LYLCs2Rf//////////Ynl4Z1hpw8LA2A4FAAAHDBMu5CwnOEVO////////////Znl4Z2uB + z9sRCwQBAAIKDBwvMThCTP//////////////Znl2dX1rQCEaHyIZGB4rMTxBQkz///////////////// + /3GAeHReSDw3NzI6Oj1GSkr//////////////////////11xeXJuZWBcT1dXV0pK//////////////// + ////////////XGVlZGRkV0//////////////////////////////4B///wAD//4AAf/4AAB/8AAAP+AA + AB/gAAAfwAAAD4AAAAeAAAAHgAAABwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AA + AAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gAAH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvAAAALsAAAC6AAAAsgAAALEAAACwAAAArQAAAKcAAACfAAAAkwAAAH4A + AABtAAAAPAAAAKgEBAChBQUAYAMDADsCAgBVBAQAOwMDAKIMDAC0Dg4Avg8PANEWFgBoCwsA5xoaALsV + FQDFGBgAsxYWADwICACoFxcAgBISAPYuLgDfKSkA4y0tAJwfHwCyJCQAzy0tAOAxMQDzNzcA8zk5APA5 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAJGRkYLISEhHxwcHEB+FxeKtB4exd8o + KOr/ODj//0VF//9QUP//W1v//2Zm//9wcP//eHj//39///+Ghv//jIz//5GR//+Wlv//mZn/2YaG7aNo + aNJZOjquAAAAfwAAAF8AAAA7AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BZmZmBT09PRUwMDA1jB4eiMQa + Gs/0Hh75/ysr//86Ov//SEj//1ZW//9lZf//cXH//319//+Ghv//jo7//5OT//+Zmf//nZ3//6Cg//+k + pP//pqb//6en//+oqP/0oqL5tHl53F9BQbMAAAB9AAAAVgAAAC0AAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wGSkpIHSkpKH3Qp + KV66Hx++6yEh9fsmJv/9Li7//zU1//9DQ///T0///11d//9tbf//enr//4aG//+Pj///l5f//56e//+k + pP//qqr//66u//+wsP//s7P//7Oz//+zs///s7P//7Oz/+6np/ahcXHUNCYmngICAmwAAAA8AAAAFwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////AoCA + gAhEREQimyQkhNAgINz0JSX/9y0t//kvL//8MjL//zQ0//86Ov//RET//1BQ//9aWv//aGj//3R0//9/ + f///ior//5aW//+goP//qqr//7Ky//+3t///vLz//76+//++vv//vb3//7u7//+5uf//t7f/y5GR52VJ + SbcCAgJ5BAQERwAAABoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8DqqqqCU5OTiSsJSWW3CIi7O8lJf/yKir/9Ssr//cqKv/7KCj//iUl//0nJ//4MTH/9zk5//1F + Rf//UVH//19f//9ra///eHj//4WF//+Skv//np7//6mp//+zs///vLz//8LC///Fxf//xsb//8XF///C + wv//vr7//7u7/+KkpPKAXFzDAgICgAAAAEoAAAAaAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wOzs7MKWlpaIrAkJJrfISHz7CUl/+4kJP/wIiL/9B4e//YaGv/5FRX/+BER/+sS + Ev/WICD/3C0t//Q1Nf/+QkL//05O//9bW///Z2f//3V1//+Bgf//jY3//5ub//+mpv//srL//7y8//7D + w//9yMj//svL///Kyv//x8f//8LC//++vv/ura33iGNjxwQEBIAAAABGAAAAFwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////A9XV1QZsbGwariYmkNseHvPnISH/6SAg/+saGv/tFRX/8Q8P//UM + DP/xCQn/1QcH/6EPD/+KLS3/qzk5/983N//7PT3//0lJ//9WVv//YmL//2xs//94eP//hIT//4+P//+a + mv/9paX/9Kur/+Wrq//js7P/7sLC//vMzP/+zs7//8nJ///ExP//v7//7q2t94FeXsMCAgJ5AAAAPAAA + ABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Bo6OjhKoLCxz0iAg6uIbG//kGhr/5hUV/+gP + D//sCQn/7QQE/+MEBP+vAQH/WAcH/0NiYv9anJz/iG5u/8dAQP/1PT3//0ZG//9SUv//Xl7//2ho//9z + c///fHz//4aG//2QkP/wk5P/y4WF/5Rqav+QgYH/u56e/+a+vv/7zs7//8/P///Ly///xMT//76+/+Ol + pfJnSkq3AgICbAAAAC0AAAAIAAAAAAAAAAAAAAAAAAAAAP///wH///8Ev7+/DJg8PEPGISHU3Rsb/98V + Ff/hDg7/4wkJ/+YFBf/kAwP/0AEB/4MBAf8qNTX/CcDA/ybo6P9L6ur/ccDA/6NkZP/hQkL//END//9P + T///Wlr//2Rk//9ubv//eXn//4KC//aGhv/Penr/f09P/zdXV/8/u7v/esXF/7mqqv/pwcH//M7O///P + z///ysr//8PD//+9vf/LkpLnNicnngMDA1cAAAAbAAAAAwAAAAAAAAAAAAAAAP///wL///8HgICAFrch + IajZHR3/2hYW/9sNDf/dBgb/4AIC/98CAv/LAQH/cAAA/x5AQP8Dzc3/APf3/x7///9C/f3/Y/Hx/4S5 + uf/DTk7/9END//5MTP//VVX//2Bg//9qav//c3P//Hx8/+d6ev+eWVn/PCQk/w9/f/8X5ub/VvLy/4vZ + 2f/CsLD/68PD//zOzv//zs7//8jI///AwP//uLj/oXJy1AYGBn8AAAA7AAAACwAAAAAAAAAAAAAAAP// + /wTMzMwKqykpYc0eHvHVFhb/1g4O/9gGBv/aAgL/3AAA/8sAAP9+AAD/GkBA/wO8vP8A8/P/AP7+/xb/ + //81////Vf///3Lh4f+oXl7/5kRE//xGRv//UFD//1pa//9kZP//bW3/9nNz/8lmZv9kNjb/EUdH/wK5 + uf8C9/f/Ov7+/2v39/+X1NT/xrCw/+zDw//9zs7//8zM///Fxf//u7v/7qio92NGRrQDAwNgAAAAHgAA + AAIAAAAAAAAAAP///wZxcXESuyEht9EaGv/RERH/0wYG/9QBAf/XAQH/ywAA/4kAAP8YRkb/AsPD/wDv + 7/8A+fn/AP7+/xD///8o////Rv///2Px8f+JmZn/x01N//RDQ///Skr//1NT//9cXP/8ZWX/5mVl/5tJ + Sf8vGBj/A5ub/wHh4f8A+fn/Jf///0////91+Pj/mdXV/8awsP/swsL//MvL///IyP//v7///7W1/7d+ + ft0GBgaBAAAAOgAAAAoAAAAAAAAAAP///weqJiZVyR0d9MwVFf/ODAz/zgMD/84AAP+7AAD/awAA/xdD + Q/8CsrL/AN/f/wDw8P8A+fn/AP7+/wn///8c////Nv///1X9/f9y39//o2pq/+NDQ//8Q0P//0tL//9U + VP/2Wlr/y1JS/2cuLv8TKyv/ALy8/wDp6f8A+vr/FP///zX///9X////efPz/5vW1v/JsLD/7sLC//zH + x///wcH//7a2//SmpvldPz+vAwMDVwAAABYAAAAAAAAAALOzswq3IyOfyhwc/8kREf/JBwf/xQEB/6kA + AP9hAAD/Ez4+/wKNjf8AuLj/ANHR/wDm5v8A9PT/APz8/wL///8R////KP///0X///9j8vL/ipWV/8xH + R//2PDz//0FB//1JSf/pTEz/oTo6/zQVFf8FeHj/ANbW/wDv7/8A+/v/CP///x////84////V////3X1 + 9f+Zzs7/x6ys/+u9vf/8wMD//ri4//+srP+mbW3TBwcHcQYGBikAAAADAAAAAIVHRxm9ISHaxhkZ/8UM + DP/EBQX/ugAA/40AAP9BAAD/DB0d/wFqav8AnJz/ALa2/wDPz/8A4+P/APLy/wD7+/8G////G////zb/ + //9V+fn/dsLC/6lcXP/kOzv//Tc3//c+Pv/MOTn/aCEh/xI9Pf8Bv7//AObm/wD09P8A/Pz/Af///w3/ + //8a/v7/L/39/0n5+f9o7u7/j8TE/8Ojo//tt7f//Li4//+urv/bjIztFxISiwQEBD4AAAAKAAAAAKgk + JFXFIyP/wxcX/8EJCf/AAgL/twAA/5QAAP9UAAD/GgAA/wMfH/8AcnL/AJaW/wCvr/8Ax8f/ANzc/wDs + 7P8A+Pj/C/7+/yb///9G/f3/Ze3t/4WoqP/DQUH/7i8v/+cwMP+hJyf/OA8P/wZubv8A29v/AO/v/wD4 + +P8A/Pz/AP39/wD8/P8A+fn/BfX1/xXv7/8y4uL/XLq6/5qTk//drKz/+bW1//+trf//n5//ZD8/sQYG + BlEAAAASAAAAALIlJYnCISH/vhQU/74HB/+/AgL/vgAA/60AAP+FAAD/TwAA/xsAAP8DFxf/AGdn/wCM + jP8Apqb/AL29/wDT0/8A6Oj/APf3/xP+/v8z////Uv39/23c3P+eTk7/xyws/7YjI/9dEhL/E0RE/wG4 + uP8A7e3/APb2/wD5+f8A+fn/APX1/wDv7/8A5ub/ANra/wPGxv8Pqqr/N319/41sbP/epKT/+7Oz//+s + rP//np7/mFtbygoKCmIAAAAZAAAAALcoKLG/ISH/uxMT/7sHB/+9AgL/wAAA/78AAP+yAAD/jwAA/1sA + AP8nAAD/CAIC/wFHR/8Afn7/AJub/wC0tP8Az8//AObm/wD5+f8d/v7/Pf///1X09P9wjo7/gjs7/2Qg + IP8gSkr/AsvL/wDt7f8A9/f/APj4/wD39/8A8fH/AOfn/wDZ2f8Ax8f/AZub/whfX/8fOjr/Xjw8/7h5 + ef/wpqb//rGx//+qqv//nZ3/vG1t3RAQEG8AAAAgAAAAALcpKdG8IiL/uRMT/7gGBv+5AQH/vgAA/8MA + AP/EAAD/uwAA/54AAP9uAAD/PAAA/xIAAP8CKyv/AGVl/wCPj/8Ar6//AM/P/wDp6f8D+/v/Jf7+/z39 + /f9I3d3/R7Cw/zGmpv8Sy8v/APX1/wD8/P8A+/v/APn5/wDz8/8A5+f/ANDQ/wCtrf8DhIT/Ej09/zYb + G/9vODj/smFh/+aGhv/7oaH//6ur//+np///mpr/13Z26w8PD3gAAAAlAAAAALksLOe6IyP/thIS/7QE + BP+2AQH/uwAA/8AAAP/FAAD/yQAA/8UAAP+xAAD/iQAA/1cAAP8pAAD/CgAA/wFHR/8Ajo7/ALa2/wDY + 2P8A8PD/DP39/yP///8u/f3/LPj4/yD4+P8R/f3/Bf///wD///8A////APv7/wDq6v8AzMz/BISE/xIt + Lf8xFRX/ZCsr/55HR//MX1//63Nz//qDg///lpb//6Oj//+jo///lpb/63t79RQUFIAGBgYpAAAAALsx + Mfe3IiL/shAQ/7EDA/+zAQH/uAAA/70AAP/CAAD/yAAA/84AAP/OAAD/xAAA/6YAAP91AAD/OQAA/wwA + AP8BUVH/AJub/wDIyP8A5+f/APr6/w3///8Y////Gf///xP///8N////CP///wf///8I////Bubm/wKx + sf8MYWH/KxUV/2IiIv+bOjr/yU9P/+hfX//2Zmb//HBw//94eP//iYn//5mZ//+dnf//kpL/+Hx8+xUV + FYQGBgYrAAAAALs0NP60IiL/rw4O/64DA/+wAAD/tQAA/7oAAP+/AAD/xQAA/8sAAP/RAAD/1QAA/9IA + AP+2AAD/egAA/zEAAP8HDAz/AHd3/wC6uv8A4OD/APX1/wD///8J////C////wr///8H////CP///w3/ + //8T/f3/GsnJ/yZiYv9KGRn/iSgo/8Y+Pv/nTU3/9ldX//xdXf//YGD//2Rk//9tbf//fX3//46O//+X + l///jIz//nh4/xgYGIEGBgYpAAAAALo4OPezJSX/rA8P/6sCAv+tAAD/sgAA/7cAAP+8AAD/wgAA/8gA + AP/OAAD/0wAA/9gAAP/UAAD/rgAA/2gAAP8fAAD/AzU1/wChof8A4OD/APT0/wD9/f8B////A////wP/ + //8E////B////xD///8d/f3/LdfX/0h9ff+FMDD/zTc3//NDQ//9S0v//09P//9SUv//VVX//1hY//9e + Xv//cHD//4OD//+QkP//hob/+G5u/BkZGXsHBwcmAAAAALg+PuizKyv/qhIS/6gCAv+qAAD/rgAA/7MA + AP+5AAD/vgAA/8QAAP/KAAD/0AAA/9YAAP/aAAD/ygAA/5MAAP86AAD/CCUl/wCgoP8A5eX/APb2/wD9 + /f8A////AP///wD///8B////Bv///xD///8h////N/b2/1PKyv+IWlr/zz4+//k9Pf//QED//0ND//9G + Rv//SEj//0pK//9QUP//YmL//3h4//+IiP//gID/7GJi9RsbG3IICAghAAAAALZBQdOzMDD/qRUV/6UE + BP+nAQH/qwAA/7AAAP+1AAD/ugAA/8AAAP/GAAD/zAAA/9IAAP/XAAD/zQAA/5UAAP8xAAD/BWpq/wDM + zP8A8PD/APn5/wD+/v8A/v7/AP///wD9/f8A/v7/Af7+/wv///8d////N////1Ly8v9zvr7/qVtb/+g6 + Ov//NDT//zc3//86Ov//Ozv//z4+//9CQv//VVX//2tr//+AgP//eHj/3FdX6R4eHmcKCgoaAAAAALRD + Q7S0ODj/qhwc/6QICP+lAgL/pwAA/6wAAP+xAAD/tgAA/7wAAP/CAAD/yAAA/84AAP/OAAD/tAAA/1EA + AP8PTEz/AcfH/wDt7f8A9/f/APv7/wD+/v8A/f3/APv7/wD39/8A9vb/APj4/wD8/P8R/v7/Kv///0f9 + /f9k9fX/hL+//71PT//6Kir//yoq//8rK///Li7//zAw//82Nv//R0f//2Ji//91df//bm7/xUxM2iMj + I1gAAAASAAAAALFBQYq2QED/rCcn/6QPD/+jBQX/pAAA/6gAAP+tAAD/sgAA/7cAAP+9AAD/wgAA/8EA + AP+oAAD/QQAA/wx/f/8B0ND/APHx/wD4+P8A+/v/AP39/wD9/f8A+Pj/APHx/wDp6f8A5OT/AObm/wDu + 7v8A+fn/FP7+/zH///9P////bPX1/4y6uv/OQED/+x4e//8dHf//Hx///yIi//8oKP//PDz//1VV//9m + Zv//YGD/qkJCwykpKUUAAAAKAAAAALE9PU+3R0f/rS8v/6MVFf+hCAj/oQEB/6QAAP+pAAD/rQAA/7MA + AP+3AAD/tQAA/44AAP8wDw//Bqys/wDn5/8A9fX/APr6/wD8/P8A/v7/AP7+/wD5+f8A8PD/AN/f/wDL + y/8Aw8P/AMjI/wDX1/8A6Oj/APf3/xb9/f80////Uv///2719f+Ltrb/vkZG//UVFf//EBD//xUV//8b + G///MTH//0hI//9bW///Vlb/iDw8nzU1NTBAQEAEAAAAALEzMwqzRUXZsDo6/6YfH/+gDQ3/ngEB/6EA + AP+kAAD/qQAA/6sAAP+iAAD/agAA/xtDQ/8DwsL/APDw/wD6+v8A+/v/AP7+/wD+/v8A/v7/APz8/wD0 + 9P8A29v/AaWl/wFtbf8Ac3P/AJ6e/wC3t/8Azs7/AOTk/wD39/8W/v7/Nf///1H///9p9/f/f9jY/6Rt + bf/qERH//wcH//8REf//Jyf//z4+//9OTv/jSUntSzw8ak1NTR7///8B////AQAAAACwQkKbtEVF/6kq + Kv+hFBT/nQUF/5wAAP+dAAD/mAAA/4AAAP9DAAD/D2pq/wHR0f8A8/P/APv7/wD9/f8A/v7/AP///wD/ + //8A/v7/APf3/wDl5f8CoqL/Cj8//xAFBf8HERH/AVBQ/wCHh/8Ara3/AMrK/wDk5P8A9/f/Fv7+/zH/ + //9L////Xv39/27f3/+LfHz/0Rwc//oPD///IiL//zU1//9BQf+/Pz/MRkZGSWlpaRH///8B////AQAA + AACuPT1LtktL8602Nv+kHx//mgoK/5EBAf9+AAD/UgAA/yYSEv8Jb2//AcbG/wDn5/8A9fX/APv7/wD+ + /v8A////AP///wD+/v8A+/v/APHx/wHJyf8TQUH/PAAA/0oAAP8qAAD/CgEB/wFISP8AiIj/AKur/wDI + yP8A5OT/APb2/xD9/f8n/v7/Ofv7/0bv7/9XtbX/kDQ0/94aGv/6KSn//Tc3//U4OPmVQUGWXV1dLL+/ + vwgAAAAAAAAAAAAAAAAAAAAAsUZGr7JDQ/+nLS3/mxQU/4IGBv9bAQH/JQIC/wdRUf8BmJj/AMHB/wDZ + 2f8A7Oz/APj4/wD+/v8A////AP///wD9/f8A9vb/AN/f/wiPj/9MAAD/lwAA/5sAAP9wAAD/NAAA/wsA + AP8BR0f/AImJ/wCrq/8AyMj/AOTk/wD09P8C+fn/EPPz/xzX1/81e3v/iRkZ/9wbG//3Kyv/+zg4/8w5 + OdVYWFhRi4uLFv///wQAAAAAAAAAAAAAAAAAAAAArT4+UrNLS+6uPT3/nyUl/4MQEP9VBgb/IQEB/wUh + If8Aenr/AKWl/wDCwv8A29v/AO3t/wD4+P8A/v7/AP39/wD5+f8A6+v/BKqq/zMREf+pAAD/ywAA/8gA + AP+sAAD/dwAA/zcAAP8KAAD/AVFR/wCIiP8ArKz/AMnJ/wDf3/8A5ub/Ac7O/wqBgf9JBwf/sA8P/+kd + Hf/3Ly//7TY29p9CQpR0dHQus7OzCv///wMAAAAAAAAAAAAAAAAAAAAAAAAAAK9FRZu0Skr/qDY2/5Ie + Hv9sDg7/NgMD/w8AAP8CKir/AH19/wClpf8AwsL/ANzc/wDt7f8A+Pj/APn5/wDv7/8Bycn/HTs7/5UA + AP/JAAD/0gAA/9MAAP/MAAD/sQAA/3oAAP86AAD/DAAA/wFKSv8AjIz/AK+v/wDFxf8AwcH/CHx8/zUJ + Cf+SBgb/2RMT//AlJf/1MzP/wjw8xGtra0WmpqYX////BP///wEAAAAAAAAAAAAAAAAAAAAAAAAAAKo5 + OSiwSUnKsUhI/6UzM/+MHh7/YwwM/zMEBP8PAQH/Aisr/wB1df8ApaX/AMLC/wDb2/8A6+v/AO7u/wDa + 2v8Oamr/ZgAA/74AAP/LAAD/zgAA/9AAAP/RAAD/zQAA/7QAAP99AAD/PQAA/wsAAP8AWVn/AJCQ/wCe + nv8Ia2v/MwkJ/4kDA//QDQ3/6hwc//AsLP/UODjgjlJSa5WVlSTo6OgL////Av///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACtPz9ZtE9P47FHR/+kMzP/ihwc/2MODv8yBQX/DgEB/wMuLv8Afn7/AKam/wDB + wf8A19f/ANra/wSlpf88AAD/pQAA/8EAAP/FAAD/yAAA/8sAAP/NAAD/0AAA/80AAP+0AAD/dwAA/zEA + AP8GFBT/AmNj/wZhYf8wCwv/hAQE/8oLC//kGBj/7CYm/90xMe6pRESNi4uLLtLS0hH///8F////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0REdLRQUO+xSEj/ozIy/4kcHP9hDg7/MAQE/w0B + Af8CMDD/AH9//wCkpP8Aubn/Aa6u/xo8PP9+AAD/tQAA/7wAAP+/AAD/wgAA/8UAAP/IAAD/ywAA/80A + AP/JAAD/pwAA/2YAAP8tAAD/GggI/zIGBv9/AwP/xgoK/+AWFv/nJSX/4S8v9LQ8PJ6MjIwz3NzcFv// + /wr///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALBHR361U1PwskpK/6Q1 + Nf+NIiL/YxER/zMICP8QBAT/AzEx/wB0dP8Bj4//Dk1N/1sAAP+lAAD/swAA/7cAAP+6AAD/vQAA/8AA + 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 + yf+AAU3/wANP/+AHYf8= + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/TutorialWindow.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/TutorialWindow.vb new file mode 100644 index 00000000..e534eb07 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/TutorialWindow.vb @@ -0,0 +1,127 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics + +Namespace D3D10Tutorial01_WinFormsWindow + ''' + ''' This application demonstrates creating a Direct3D 10 device + ''' + ''' http://msdn.microsoft.com/en-us/library/bb172485(VS.85).aspx + ''' + ''' Copyright (c) Microsoft Corporation. All rights reserved. + ''' + Partial Public Class TutorialWindow + Inherits Form + #Region "Fields" + Private device As D3DDevice + Private swapChain As SwapChain + Private renderTargetView As RenderTargetView + Private backColor_Renamed As New ColorRgba(0.0F, 0.125F, 0.3F, 1.0F) + Private active As Boolean = False + #End Region + + #Region "TutorialWindow()" + ''' + ''' Initializes a new instance of the class. + ''' + Public Sub New() + InitializeComponent() + End Sub + #End Region + + #Region "TutorialWindow_Load()" + ''' + ''' Handles the Load event of the form. + ''' + ''' The source of the event. + ''' The instance containing the event data. + Private Sub TutorialWindow_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load + If Not active Then + InitDevice() + active = True + End If + End Sub + #End Region + + #Region "TutorialWindow_FormClosing()" + ''' + ''' Handles the FormClosing event of the form. + ''' + ''' The source of the event. + ''' The instance containing the event data. + Private Sub TutorialWindow_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles MyBase.FormClosing + device.ClearState() + End Sub + #End Region + + #Region "WndProc()" + ''' + ''' The Window Procedure (message loop callback). + ''' + ''' The m. + Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) + Invalidate() + MyBase.WndProc(m) + End Sub + #End Region + + #Region "OnPaintBackground()" + ''' + ''' Paints the background of the control. + ''' + ''' A that contains the event data. + Protected Overrides Sub OnPaintBackground(ByVal e As PaintEventArgs) + ' Leave empty so that invalidate does not redraw the background causing flickering + End Sub + #End Region + + #Region "OnPaint()" + ''' + ''' Handles painting of the window + ''' + ''' A that contains the event data. + Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) + If active Then + RenderScene() + End If + End Sub + #End Region + + #Region "InitDevice()" + ''' + ''' Create Direct3D device and swap chain + ''' + Protected Sub InitDevice() + device = D3DDevice.CreateDeviceAndSwapChain(Me.Handle) + swapChain = device.SwapChain + + ' Create a render target view + Using pBuffer As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(pBuffer) + End Using + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}, Nothing) + + ' Setup the viewport + Dim vp As New Viewport() With {.Width = CUInt(Me.ClientSize.Width), .Height = CUInt(Me.ClientSize.Height), .MinDepth = 0.0f, .MaxDepth = 1.0f, .TopLeftX = 0, .TopLeftY = 0} + + device.RS.Viewports = New Viewport() {vp} + End Sub + #End Region + + #Region "RenderScene()" + ''' + ''' Render the frame + ''' + Protected Sub RenderScene() + ' Just clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor_Renamed) + swapChain.Present(0, PresentOptions.None) + End Sub + #End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/directx.ico b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial01_WinFormsWindow/directx.ico differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/D3D10Tutorial02_WinFormsControl.vbproj b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/D3D10Tutorial02_WinFormsControl.vbproj new file mode 100644 index 00000000..50ed4d1b --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/D3D10Tutorial02_WinFormsControl.vbproj @@ -0,0 +1,115 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6} + WinExe + + + D3D10Tutorial02_WinFormsControl + v3.5 + On + Binary + Off + On + 512 + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + + + + 3.0 + + + + + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + TutorialWindow.vb + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + PreserveNewest + + + PreserveNewest + + + True + Settings.settings + True + + + Form + + + TutorialWindow.vb + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..f45d1abc --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/My Project/AssemblyInfo.vb @@ -0,0 +1,40 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/My Project/Resources.Designer.vb new file mode 100644 index 00000000..4c44cf97 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/My Project/Resources.Designer.vb @@ -0,0 +1,65 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System + +Namespace My.Resources + + + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/My Project/Settings.Designer.vb new file mode 100644 index 00000000..34f1fe80 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Program.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Program.vb new file mode 100644 index 00000000..25c5230b --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Program.vb @@ -0,0 +1,22 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms + +Namespace D3D10Tutorial02_WinFormsControl + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New TutorialWindow()) + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Tutorial02.fx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Tutorial02.fx new file mode 100644 index 00000000..db8bd6a9 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Tutorial02.fx @@ -0,0 +1,34 @@ +//-------------------------------------------------------------------------------------- +// File: Tutorial02.fx +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +float4 VS( float4 Pos : POSITION ) : SV_POSITION +{ + return Pos; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( float4 Pos : SV_POSITION ) : SV_Target +{ + return float4( 1.0f, 1.0f, 0.0f, 1.0f ); // Yellow, with Alpha = 1 +} + + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS() ) ); + } +} diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Tutorial02.fxo b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Tutorial02.fxo new file mode 100644 index 00000000..358ac457 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/Tutorial02.fxo differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/TutorialWindow.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/TutorialWindow.Designer.vb new file mode 100644 index 00000000..cb2f5fa8 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/TutorialWindow.Designer.vb @@ -0,0 +1,61 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace D3D10Tutorial02_WinFormsControl + Partial Public Class TutorialWindow + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Dim resources As New System.ComponentModel.ComponentResourceManager(GetType(TutorialWindow)) + Me.directControl = New Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl() + Me.SuspendLayout() + ' + ' directControl + ' + Me.directControl.Dock = System.Windows.Forms.DockStyle.Fill + Me.directControl.Location = New System.Drawing.Point(0, 0) + Me.directControl.Name = "directControl" + Me.directControl.Size = New System.Drawing.Size(624, 442) + Me.directControl.TabIndex = 4 +' Me.directControl.SizeChanged += New System.EventHandler(Me.directControl_SizeChanged) + ' + ' TutorialWindow + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6F, 13F) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(624, 442) + Me.Controls.Add(Me.directControl) + Me.Icon = (CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)) + Me.Name = "TutorialWindow" + Me.Text = "Direct3D 10 Tutorial 2: Rendering a Triangle" +' Me.Load += New System.EventHandler(Me.TutorialWindow_Load) +' Me.FormClosing += New System.Windows.Forms.FormClosingEventHandler(Me.TutorialWindow_FormClosing) + Me.ResumeLayout(False) + + End Sub + + #End Region + + Private WithEvents directControl As Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl + End Class +End Namespace + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/TutorialWindow.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/TutorialWindow.resx new file mode 100644 index 00000000..0dd393c3 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/TutorialWindow.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAAABABoBgAAlgAAACAgEAAAAAQA6AIAAP4GAAAQEBAAAAAEACgBAADmCQAAMDAAAAAA + CACoDgAADgsAACAgAAAAAAgAqAgAALYZAAAQEAAAAAAIAGgFAABeIgAAMDAAAAAAIACoJQAAxicAACAg + AAAAACAAqBAAAG5NAAAQEAAAAAAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAAAA + AAD//wAA////AACAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMy2t7a2bMzMzMzMzMzMzMzMzMzMzMzMu7a3tnd2d2ZszMzMzMzMzMzMzMzMzMy7t7tr + a2dnZmZmbMzMzMzMzMzMzMzMzLu7e2tnZnZmZmZmZmzMzMzMzMzMzMzMy7u3u7e2tmdmZmZmZmbMzMzM + zMzMzMzMt7e7u3tra2Z2ZmZmZmZszMzMzMzMzMzLu7u7u7u7d7Z2ZmZmZmZmzMzMzMzMzMx7O7u7s3N7 + trd2tmZmZuZmbMzMzMzMzMu7u7uzNye7e2trZmd3ZmZmZszMzMzMzLO7u7MzqmZ3t7Z3ZrdyZmbmZmzM + zMzMy7u7s7MKqqZre2t2t3AqpmZmZmbMzMzMx7OzuzIqqqpnt7a3ZzIqamZm5mbMzMzMO7u7syKqqqpm + e3trYzKqqmZmZmZszMzMu7OzMiqqqqpqe7a2syKqqmpmZmZszMzLszszIiqqqqqmd7t7cCqqqqamZmZm + zMzHu7swAiKqqqqqZ3u3MCqqqqpqZmZmzMzLMzMzACIqKqqqZ7t7Aqqqqqqqd2ZmzMzLO7szMAIiqqqq + anszIqqqqqoid2ZmzMxzszOzMwAiIqqqpmMyKqqqqqIie2ZnbMy7O7OzszAAIiqqqqd6qqqqoiIzd2Zm + bMw3szs7OzMwAiKqqqqqqqqqIDN3tmZ2bMy7M7OzuzszACKqqqqqqqoiA3trZrZmvMxzOzOzs7O7MAIq + qqqqqqcjN7a3t2ZnfMw7M7Ozs7s7MwIqqqqqqqoje3t3a3d2fMx7OzM7O7O7MzAqqqqqqqpnt7e7trZ3 + fMy3MzOzuzuzswKqqqqqqqqme7tra2dnfMx7M7M7M7O7MwKqqqqqqqpqZ7u7u7a2vMx3szszs7OzMqqq + qqqqqqqmpnu7t7tnfMzLczM7OzswKqqqqqoqKqqqpme7u7e7zMzHOzOzMzMCqqqqqqIiKqqqpqZ7u7e2 + zMzLc7MzMzKqqqqqqiIAIiqqqmpnu7t7zMzMtzMzMCKqqqqqqgMwACIqqqqne7e8zMzMN7MzAiqqqqqq + ojMzACIqqqqnO3u8zMzMxzszACKqqqqqIDszMwIiqqIjO7vMzMzMy3MzAAIiqqqqA7O7MwAiIqIDu3vM + zMzMzHtzMwAioqqiM7s7szMCIiAzu7zMzMzMzMe3MwAiKqojM7O7O7MAIgO7u8zMzMzMzMx7MzAAIqID + O7OzuzMwAzO7vMzMzMzMzMzHdzMAAiIzszuzs7MzM7t7zMzMzMzMzMzMtzcwACMzOzM7OzuzM3u8zMzM + zMzMzMzMx7s3MDMzs7Ozs7Ozu7vMzMzMzMzMzMzMzHdzMzOzMzs7Ozs7t7zMzMzMzMzMzMzMzMy3d7cz + s7M7O3u3vMzMzMzMzMzMzMzMzMzMt3t7e3t7e7e8zMzMzMzMzMzMzMzMzMzMzMe3t7e3t8zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz///////8AAP///////wAA///AH///AAD//AAB//8AAP/w + AAB//wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/AAD8AAAAAf8AAPgAAAAA/wAA8AAAAAB/ + AADgAAAAAD8AAOAAAAAAPwAAwAAAAAAfAADAAAAAAB8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAIAA + AAAADwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAADAAAAAAB8AAMAA + AAAAHwAA4AAAAAA/AADgAAAAAD8AAPAAAAAAfwAA+AAAAAD/AAD8AAAAAf8AAP4AAAAD/wAA/wAAAAf/ + AAD/gAAAD/8AAP/AAAAf/wAA//AAAH//AAD//AAB//8AAP//gA///wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgIAAgAAAAIAAgACAgAAAwMDAAICA + gAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzLe2tmbMzMzMzMzMzMzMy3dnZ2ZmZmzMzMzMzMzMzHu7t3ZmZmZmzMzMzMzMzHu7u7 + t7a2ZmZmbMzMzMzMu7uzd3trZmZ2ZmbMzMzMy7uzMqZ7tnd3dmZmbMzMzMuzMCqma2t2cKpmZmzMzMy7 + MyKqqqe2tzKqpmZmzMzLszIqqqpmu3cKqqamZmzMyzMCIqqqpndzKqqqZmZszMszACIqqqprMKqqqqp2 + bMxzszACIiqqpzKqqqoidmbMOzszACIqqqqqqqqiA3ZmzLs7MzAAIqqqqqqiA3dmZsxzM7MzMAKqqqqq + I3trdmfMu7M7OzMAqqqqqqO3trdmzHMzs7MzAqqqqqqqe3t3a8x7OzszMqqqqqqqpme7trbMtzMzMCqq + qqqiqqqmZ7trzMtzMwKqqqqiAiKqqqZ7fMzHszAqqqqqoAAiqqqiu7zMw3MwIiqqqiMwAiqqI7e8zMy3 + MAIiqqIzMwIiIjO7zMzMx3MAIiogM7MAIiM7vMzMzMNzcAIiIzszMAIDu7zMzMzMdzMwIgM7OzMzO3vM + zMzMzMt3MwMzs7OzM7u8zMzMzMzMx3c3Mzs7O7e8zMzMzMzMzMw3e3t7e7e7zMzMzMzMzMzMzMN7e3t8 + zMzMzMzM////////////4B///wAD//4AAf/4AAB/8AAAP+AAAB/gAAAfwAAAD4AAAAeAAAAHgAAABwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AAAAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gA + AH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzM + zMzMzMzMzMzLZmbMzMzMy7e2ZmbMzMyzB3dndmzMyzKqe3CmZszDCqpnMqpmzLMyqqcKqqZsOzAqqqqi + dmwzszCqqie2bDMzMqqqZ7tsMzAqqqqme7zDAqqiAqqrzMcyqqMwojvMzHMqCzAjvMzMxzIzMzvMzMzM + xze7zMzM//+zMPg/a2vgD6pmwAfMzIADMyKAA6e2AAGqpgABzMwAATIqAAFmuwABqqaAA2zMgAMCIsAH + pnfgD6qq+D9szCgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWAAAA0QAAAM4A + AADNAAAAywAAAMgAAADGAAAAxQAAAMIAAADBAAAAvgAAALwAAAC6AAAAtwAAALUAAACzAAAAsAAAAK0A + AACpAAAApgAAAJwAAABzAAAAZwAAADwAAACiAQEAkgEBAN0CAgDAAgIAvQICAH0BAQBWAQEAzgMDAMMD + AwC/AwMAsAMDALQEBACGAwMA5wYGACUBAQDTBgYAxQYGAKQFBQDXBwcAuQcHAMAICABIAwMAMgICALQI + CACtCAgAoQcHAMcKCgD5Dg4AvgsLAOEODgDMDAwAmgoKANIPDwDFEREArQ8PAPoXFwDpFxcApBERANwY + GADJGRkA/iEhALcYGAD0IyMA1B4eAOQiIgBjDw8A7SUlABoEBAD9KioAlxkZAAwCAgClHR0A9SwsADMJ + CQDXJycAuSIiAMYoKAD+NDQAiRwcAPQ0NADnNDQA2jIyAP47OwCqKSkA9j09AP5CQgD+RkYA9ENDAP9J + SQC6NjYAyzw8AGYfHwA1EBAA/05OAPhNTQDlR0cA/1FRAKg3NwD/VVUAu0BAAEkZGQCKMDAA/1paAPZX + VwD2WloA/15eAMhLSwC3RUUA/2FhAG4qKgC/TEwA/2ZmALFHRwDoX18A9mZmALVLSwD/bGwAtk5OAMxZ + WQDmZWUAr01NAKBHRwD/cnIAt1JSADMXFwD2c3MA/3h4ACkUFAD/fX0A/4GBAOl3dwD/hoYA+oODAPaG + hgD/jY0AqF1dAGY5OQD/k5MA5oaGAMVzcwD/mZkA8JOTAP+engD/oqIA+6GhAKNpaQCEVVUA/6amAMuF + hQD/rKwA8KamAP+ysgD0q6sA/7a2APuzswD/ubkA+bW1AP++vgDgqakA/8LCAP/FxQD/yckA6Lm5AP/O + zgCOc3MA/M3NAOzCwgDDq6sAMy0tAAD+/gAA/f0AAPv7AAD5+QAA9/cAAPT0AADx8QAA7+8AAO3tAADp + 6QAA5uYAAOTkAADg4AAA398AANraAADT0wAAyckAAI6OAAB9fQABzs4AAcbGAAHCwgABuroAAbS0AAGt + rQABpKQAAZubAAGHhwAC+fkAAvf3AAF1dQAD//8AA/v7AAX19QAG//8ABubmAAJSUgAJ//8ADP//AAnA + wAAIj48ABmhoAAMxMQAQ8/MAEf7+AAqBgQAGSUkAFv7+AA+qqgAW6+sADH5+AAQoKAAWysoAHf7+ABzX + 1wAo/v4AJujoADT//wAt19cAMuLiADf29gA7/v4ABhgYAEf9/QBU/v4AUPDwAD2wsAAYREQAFj09ABAs + LABO1NQAZPDwAGr29gB29fUAPHx8AC9dXQBarq4Ac93dAIC+vgBDYmIAltTUAIeYmAAAAAAA//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////XGRqcHh+hIeK//// + //////////////////////////////////////////9ISFZaZGpzfoKEh4qNjZCSk/////////////// + ////////////////////////QEBIVlxmc36Eh4qNkJKSk5eXl5mZ//////////////////////////// + /////0xCSEhRWWFteIKHipCSk5mZm5ubm5ubm5v/////////////////////////////QkJMTFFRVllk + anN+hIqNkpmbnaGhoaGfn52d//////////////////////////9GRkxMTEhASFNYWmRteIKHjZKXm6Gj + pKSko6Gfn////////////////////////0ZGRkJCOzszPENVU1lhanN+hYqQl5uho6WlpaSjoZ////// + ////////////////REREPDwzMzMqPWllVVZcZnB4goeKkJecoqaqqaelpKGf//////////////////9E + Pjw8NSUlJRAe/PmoXlhaZG1zfoSHipGYqKirpqmnpaShn////////////////04+PjUlJSUBJKzU5e77 + lWNZYWpzeIKFiY+W+O/7q6qpp6WjoZ3/////////////TkM+NRoaGgQV8MCx4uz0+3JbYWZweH6Ehous + 397u/auqqaeloZ+b////////////Qz44KhoaBB3xw7Kt3Obt+otjWmRqc3iBeozww8rq9f2rqqmnpJ+b + //////////9OQzgnAAAEJPDCtLCt2eTs9P5uW1xkanN7fYDHubDk7fb9q6qppaGdm/////////9DPzYf + AgsW8MS6s7Ct0uLm7fqVY1lcZmx6cfLDtq/c5u32/auqpKOdmf///////1A/OSgHEhbxvsO8t7KuzNnk + 7PT+blhZXGNlgMu8tK/S4urt9v2rpqGfmZf//////1A/MigMGRfr1sfEwLizr8/i5u37i1RRWF5f8cK3 + sq6t0+Lm7PT7q6afmZP//////1A/LBsNGR5H68vHxcG7tbDT5Oz0/mdMVFdg1ru0sK6urrDO3uj5/qKg + mZL//////085LBsKESQeR+vWvsbDvLax2ebt+n1QT0Xww7WxsLCytLe7wd33qKKemZL/////UE9BKxwJ + Cg8ZHiZK27/HxMC3sOLq7v5pX/C9tbGwsbO3u8HH1vGMj5qbmZKN////UE9BKwwKCAcLFBUXSuDWvsXA + ts3k6vPv7+Gyrq+wsrfAxcjxgIyLjpSZl5CK////UE9BIw0LCQcFBxAkHiZK277Eu7PT5OTk4tnPra2v + tsDI8oBxfXqGiI2Tk42H////XU86Ig8NCggFAgIHExUXStHHvbev09zc2dPSz9LQxNaDX2VudXZ+goeQ + ko2E////XU86IhAODAoHBAEAAQ0dLkrLw7myrdLT0s/S09nh+GhpXmNrbXBzeISKkIqC////XU86EREP + DQsIBQIBAAARFibXxrmyrq3MzMzP2eLn92leW1xhZGZqbX6Fiod+////Z1c6EhIRDwwKBwQBAAAEGRfg + xrexrq2tra3P2eLp85ZeWFlZWlxcZHCCh4V4////b109KRMREA4MCQYDAQADGS7WwLOwra2trq2t0+Lm + 7vuLVFFRVlZWWWZ4hYJz////b11LMRMTERANCwgFAgIOHtvBtbGvra6vsbGwrtnk7PX7ckhISEhRUVpw + fnhw////b2dXPSkTEhEPDQoICRIX38CzsK+urrCztri3tLDc5u31+15AQEBASFZmc3Bw/////29XPTEY + ExIRDw0OGWDFt7Kvrq2tsLO6vcK9u7ax3Obt9ftvOzM7O1Fcamb//////29lSz0UGBMSERgW8MKzr6+t + ra2usrvG1svHw8C4sdzm7fX6lTwzM0hWYWT//////29vVz0xFBQUHS3WvLKvrq2tra2xt8bxSuvRyMW9 + uLHc5uzt+qhDM0BRWWT///////93ZUs3GR0eg9bBt7Kvra2tra+zvfEXLSZK28jFvbix2eTq7vlpPkhR + Vv////////90b1dJJB4m0cfCu7Wwra2trrG61S0UFBUuStvIxb24ssnY4/dSPkxWWv//////////d2VX + Uh4m4L/Gwru1sK2usLXFYBIEBREVF0rRyMW9urfA2i06PExW////////////dHdlSUUuSuC/xsK7tbCw + tL3xGQUBAQMQHRdK277FwcLfTRk+RlNi/////////////3d0ZVJFLkrgy8bCu7W0u9YWCgQCAQEDDh0X + StG+x9ZNJDg8TFj///////////////95dGVSRS5K17/Gwru7xhcTCQcFBAMBAw4VLuvW1k0kNjxGU/// + ////////////////f3RlUkUuSte/xsPF8R0OCwoIBwUEAwUTFi5HTR0yPkRU//////////////////// + /393ZVJFTUrXy77bHhMPDQwKCQgHBQQJFBUWJDQ+RFT///////////////////////9/eWVpX2BH8tsX + GRIRDw4NCwoJBwYFITA6OUNEVP//////////////////////////eXl0aXFoYC0dGBMSERAPDQwLCiAo + Mjk/Q05V/////////////////////////////3d/fH1pcVJLPTowMDAvLys0NDk/P05OVVX///////// + ////////////////////////d398dGVlV1dPQUFBQU9PUFBQUFVV//////////////////////////// + //////////90eX95b2dnZ11dXV5eXl5eXv////////////////////////////////////////////9v + cnJycnJubm5eXv////////////////////////////////////////////////////////////////// + ////////////////////////////////AAD///////8AAP//wB///wAA//wAAf//AAD/8AAAf/8AAP/A + AAAf/wAA/4AAAA//AAD/AAAAB/8AAP4AAAAD/wAA/AAAAAH/AAD4AAAAAP8AAPAAAAAAfwAA4AAAAAA/ + AADgAAAAAD8AAMAAAAAAHwAAwAAAAAAfAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAAAA + AAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAgAAAAAAPAACAAAAAAA8AAIAAAAAADwAAwAAAAAAfAADAAAAAAB8AAOAA + AAAAPwAA4AAAAAA/AADwAAAAAH8AAPgAAAAA/wAA/AAAAAH/AAD+AAAAA/8AAP8AAAAH/wAA/4AAAA// + AAD/wAAAH/8AAP/wAAB//wAA//wAAf//AAD//4AP//8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAC9AAAAuwAAALkAAAC2AAAAswAAALEAAAClAAAAowAAAKEA + AACcAAAAkQAAAG0AAABpAAAAZAAAAF0AAABYAAAANgAAADAAAAAqAAAAIgAAABMAAAAHAAAAhgEBAL8C + AgC8AgIAqAICAKECAgBPAQEAQgEBALsDAwCyAwMArQMDAH0CAgC3BAQAiwMDALMFBQC8BwcA3AkJAKUH + BwBVBAQAzgsLALwKCgCqCQkAOwMDAOgNDQAPAQEAXQcHAJcMDACgDg4AvBISAPkaGgDNFhYAWwoKAOcb + GwC2FhYA2hwcAKsXFwDDGxsAuxwcALUbGwDKICAA8ycnAJMZGQBFDAwA0yYmAOUtLQC2JCQA/TQ0APAy + MgDGLCwA+Do6AKwoKAD/PDwA1TMzAP8+PgDpOjoA/0REAPBAQADIOTkAwDc3AP9KSgC3NTUATRcXANdC + QgD/T08A+E1NAM1AQAAqDQ0A5khIACYMDADxTU0Avj09AKw5OQCVMTEA/1VVAMFCQgC6QUEAsT4+AP9b + WwDISUkAvkZGALFCQgBpJycAzU1NAAgDAwD/YmIANBQUAOhcXAD/ZmYAu0tLAPhnZwD/a2sAs0xMALxR + UQD/cnIAkUFBAHk2NgCkS0sA/3Z2AJtISAC2VVUAzmNjAP98fADodXUASyYmAP+EhAD2gYEAqFlZABYM + DAD/jIwAm1hYAGc7OwD+k5MAqmNjANJ9fQD/mpoA/56eAP+iogD/qKgA/6qqAN6WlgD/ra0A+6qqAP+w + sABzUVEA/7i4AOurqwD/u7sA/729APK3twCFZWUA/8PDAL6RkQD/ysoA16urAPXExAD3ysoAwqamAMyx + sQAhHR0AKScnAB0cHAAA//8AAP39AAD7+wAA+PgAAPb2AAD19QAA8/MAAPHxAADv7wAA7e0AAOrqAADm + 5gAA5OQAAOPjAADh4QAA398AAN3dAADY2AAA19cAAM3NAADLywAAx8cAAMPDAADBwQAAtbUAALCwAACt + rQAAqakAAKamAACjowAAlZUAAJKSAABmZgAAZGQAAY2NAAGCggACvLwAA/7+AAPs7AADwsIAApycAAT8 + /AAEtLQABK6uAAJcXAAEl5cAB/n5AAf09AAG2NgABaKiAASRkQADbGwACPX1AAR4eAAJ/v4ADv//AAZm + ZgAQ+voACpycABT//wALiooAFfT0ABz9/QAe6OgAI/39AAk6OgAs/f0ALu7uACKurgAz/f0AHo+PADz8 + /AA86+sAPNXVAEn9/QBG7+8AInBwAFL+/gA2oaEAVPX1AF/9/QAECgoAYOTkAFzT0wBr8fEAaM7OAGO8 + vABx1dUAgN7eAHzIyACQ5eUAfpeXAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////9janB3foKFiP////////////// + /////////////0lJUWNzfoWIiouMjI6Q//////////////////////9ERERJUWNwe4KJjpKUlZSS//// + //////////////9FPj4zMzZKTlVqc36IjJSYmpiVlP//////////////QjY2LSkwdf5XTV9te4KFjZmb + nJqYlP///////////0I2LSYfHOfr9YBOX213f4eR8fienZqYlP//////////OCYZIWvH3Ojz/GhVanN8 + g6HT6vufnZqV/////////zgpGx3ftqrZ5fD3hltjb3p91a3j8/2fnZiS//////9BNCAc1ry3r6bh6vP8 + aF9sdKK3q9rq8/2fnJKQ/////z0yIxPPwby3rqbj7feDWWR90LCqpOHq8vuelo7/////PSoXERbDwr24 + sajl8PliXqK0rKmoqcni7P6bjP///0Y6KgkNExbExb+6s9Lo7pF9yqioqa2zts3pl5OMif//RjolBAoO + ExbPxsC5sNzl5uLZo6WpsLrGoISHj4uF//9GOyIDBAoMERX02Lu0qdrh3trZzK7Uon10en+JioL//1A8 + JAQCAwcXDxMWxbWrpNna2t7g71NeaGxvd4KIfv//XEMgBgQBAAMJDRTktaqlo8jZ3uPsdVRWX19qe4V3 + //9lQysgBgMBAAkQgb2tqKamqKjR4er2dk5LTVVwfnP//2VSORogBgYLHd20q6emp6ywsq7S5fD6gFdF + SWNzbf//YWE5JwcHIRLOrKempaars7rHuLLX6PD3/GZFUWpj////bkgxFxBay7OrpqSkqLDL5Ma/urHR + 5e3y+UZLVf////9uYj8o5MW8tq+opaaruIEUFtbAuK+o4OLxQ0RL/////2JxXlMu1sG8tq+pqa/fEA0T + 9Ma+uLS01DU4RE3//////3F2Z1gWw8G8t7Kx1B0ICA8Vz8K+u9UdMj5H/////////3l4Z1hpw8G9usdY + CwACFxEWw8LYLCs2Rf//////////Ynl4Z1hpw8LA2A4FAAAHDBMu5CwnOEVO////////////Znl4Z2uB + z9sRCwQBAAIKDBwvMThCTP//////////////Znl2dX1rQCEaHyIZGB4rMTxBQkz///////////////// + /3GAeHReSDw3NzI6Oj1GSkr//////////////////////11xeXJuZWBcT1dXV0pK//////////////// + ////////////XGVlZGRkV0//////////////////////////////4B///wAD//4AAf/4AAB/8AAAP+AA + AB/gAAAfwAAAD4AAAAeAAAAHgAAABwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AA + AAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gAAH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvAAAALsAAAC6AAAAsgAAALEAAACwAAAArQAAAKcAAACfAAAAkwAAAH4A + AABtAAAAPAAAAKgEBAChBQUAYAMDADsCAgBVBAQAOwMDAKIMDAC0Dg4Avg8PANEWFgBoCwsA5xoaALsV + FQDFGBgAsxYWADwICACoFxcAgBISAPYuLgDfKSkA4y0tAJwfHwCyJCQAzy0tAOAxMQDzNzcA8zk5APA5 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAJGRkYLISEhHxwcHEB+FxeKtB4exd8o + KOr/ODj//0VF//9QUP//W1v//2Zm//9wcP//eHj//39///+Ghv//jIz//5GR//+Wlv//mZn/2YaG7aNo + aNJZOjquAAAAfwAAAF8AAAA7AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BZmZmBT09PRUwMDA1jB4eiMQa + Gs/0Hh75/ysr//86Ov//SEj//1ZW//9lZf//cXH//319//+Ghv//jo7//5OT//+Zmf//nZ3//6Cg//+k + pP//pqb//6en//+oqP/0oqL5tHl53F9BQbMAAAB9AAAAVgAAAC0AAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wGSkpIHSkpKH3Qp + KV66Hx++6yEh9fsmJv/9Li7//zU1//9DQ///T0///11d//9tbf//enr//4aG//+Pj///l5f//56e//+k + pP//qqr//66u//+wsP//s7P//7Oz//+zs///s7P//7Oz/+6np/ahcXHUNCYmngICAmwAAAA8AAAAFwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////AoCA + gAhEREQimyQkhNAgINz0JSX/9y0t//kvL//8MjL//zQ0//86Ov//RET//1BQ//9aWv//aGj//3R0//9/ + f///ior//5aW//+goP//qqr//7Ky//+3t///vLz//76+//++vv//vb3//7u7//+5uf//t7f/y5GR52VJ + SbcCAgJ5BAQERwAAABoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8DqqqqCU5OTiSsJSWW3CIi7O8lJf/yKir/9Ssr//cqKv/7KCj//iUl//0nJ//4MTH/9zk5//1F + Rf//UVH//19f//9ra///eHj//4WF//+Skv//np7//6mp//+zs///vLz//8LC///Fxf//xsb//8XF///C + wv//vr7//7u7/+KkpPKAXFzDAgICgAAAAEoAAAAaAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wOzs7MKWlpaIrAkJJrfISHz7CUl/+4kJP/wIiL/9B4e//YaGv/5FRX/+BER/+sS + Ev/WICD/3C0t//Q1Nf/+QkL//05O//9bW///Z2f//3V1//+Bgf//jY3//5ub//+mpv//srL//7y8//7D + w//9yMj//svL///Kyv//x8f//8LC//++vv/ura33iGNjxwQEBIAAAABGAAAAFwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////A9XV1QZsbGwariYmkNseHvPnISH/6SAg/+saGv/tFRX/8Q8P//UM + DP/xCQn/1QcH/6EPD/+KLS3/qzk5/983N//7PT3//0lJ//9WVv//YmL//2xs//94eP//hIT//4+P//+a + mv/9paX/9Kur/+Wrq//js7P/7sLC//vMzP/+zs7//8nJ///ExP//v7//7q2t94FeXsMCAgJ5AAAAPAAA + ABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Bo6OjhKoLCxz0iAg6uIbG//kGhr/5hUV/+gP + D//sCQn/7QQE/+MEBP+vAQH/WAcH/0NiYv9anJz/iG5u/8dAQP/1PT3//0ZG//9SUv//Xl7//2ho//9z + c///fHz//4aG//2QkP/wk5P/y4WF/5Rqav+QgYH/u56e/+a+vv/7zs7//8/P///Ly///xMT//76+/+Ol + pfJnSkq3AgICbAAAAC0AAAAIAAAAAAAAAAAAAAAAAAAAAP///wH///8Ev7+/DJg8PEPGISHU3Rsb/98V + Ff/hDg7/4wkJ/+YFBf/kAwP/0AEB/4MBAf8qNTX/CcDA/ybo6P9L6ur/ccDA/6NkZP/hQkL//END//9P + T///Wlr//2Rk//9ubv//eXn//4KC//aGhv/Penr/f09P/zdXV/8/u7v/esXF/7mqqv/pwcH//M7O///P + z///ysr//8PD//+9vf/LkpLnNicnngMDA1cAAAAbAAAAAwAAAAAAAAAAAAAAAP///wL///8HgICAFrch + IajZHR3/2hYW/9sNDf/dBgb/4AIC/98CAv/LAQH/cAAA/x5AQP8Dzc3/APf3/x7///9C/f3/Y/Hx/4S5 + uf/DTk7/9END//5MTP//VVX//2Bg//9qav//c3P//Hx8/+d6ev+eWVn/PCQk/w9/f/8X5ub/VvLy/4vZ + 2f/CsLD/68PD//zOzv//zs7//8jI///AwP//uLj/oXJy1AYGBn8AAAA7AAAACwAAAAAAAAAAAAAAAP// + /wTMzMwKqykpYc0eHvHVFhb/1g4O/9gGBv/aAgL/3AAA/8sAAP9+AAD/GkBA/wO8vP8A8/P/AP7+/xb/ + //81////Vf///3Lh4f+oXl7/5kRE//xGRv//UFD//1pa//9kZP//bW3/9nNz/8lmZv9kNjb/EUdH/wK5 + uf8C9/f/Ov7+/2v39/+X1NT/xrCw/+zDw//9zs7//8zM///Fxf//u7v/7qio92NGRrQDAwNgAAAAHgAA + AAIAAAAAAAAAAP///wZxcXESuyEht9EaGv/RERH/0wYG/9QBAf/XAQH/ywAA/4kAAP8YRkb/AsPD/wDv + 7/8A+fn/AP7+/xD///8o////Rv///2Px8f+JmZn/x01N//RDQ///Skr//1NT//9cXP/8ZWX/5mVl/5tJ + Sf8vGBj/A5ub/wHh4f8A+fn/Jf///0////91+Pj/mdXV/8awsP/swsL//MvL///IyP//v7///7W1/7d+ + ft0GBgaBAAAAOgAAAAoAAAAAAAAAAP///weqJiZVyR0d9MwVFf/ODAz/zgMD/84AAP+7AAD/awAA/xdD + Q/8CsrL/AN/f/wDw8P8A+fn/AP7+/wn///8c////Nv///1X9/f9y39//o2pq/+NDQ//8Q0P//0tL//9U + VP/2Wlr/y1JS/2cuLv8TKyv/ALy8/wDp6f8A+vr/FP///zX///9X////efPz/5vW1v/JsLD/7sLC//zH + x///wcH//7a2//SmpvldPz+vAwMDVwAAABYAAAAAAAAAALOzswq3IyOfyhwc/8kREf/JBwf/xQEB/6kA + AP9hAAD/Ez4+/wKNjf8AuLj/ANHR/wDm5v8A9PT/APz8/wL///8R////KP///0X///9j8vL/ipWV/8xH + R//2PDz//0FB//1JSf/pTEz/oTo6/zQVFf8FeHj/ANbW/wDv7/8A+/v/CP///x////84////V////3X1 + 9f+Zzs7/x6ys/+u9vf/8wMD//ri4//+srP+mbW3TBwcHcQYGBikAAAADAAAAAIVHRxm9ISHaxhkZ/8UM + DP/EBQX/ugAA/40AAP9BAAD/DB0d/wFqav8AnJz/ALa2/wDPz/8A4+P/APLy/wD7+/8G////G////zb/ + //9V+fn/dsLC/6lcXP/kOzv//Tc3//c+Pv/MOTn/aCEh/xI9Pf8Bv7//AObm/wD09P8A/Pz/Af///w3/ + //8a/v7/L/39/0n5+f9o7u7/j8TE/8Ojo//tt7f//Li4//+urv/bjIztFxISiwQEBD4AAAAKAAAAAKgk + JFXFIyP/wxcX/8EJCf/AAgL/twAA/5QAAP9UAAD/GgAA/wMfH/8AcnL/AJaW/wCvr/8Ax8f/ANzc/wDs + 7P8A+Pj/C/7+/yb///9G/f3/Ze3t/4WoqP/DQUH/7i8v/+cwMP+hJyf/OA8P/wZubv8A29v/AO/v/wD4 + +P8A/Pz/AP39/wD8/P8A+fn/BfX1/xXv7/8y4uL/XLq6/5qTk//drKz/+bW1//+trf//n5//ZD8/sQYG + BlEAAAASAAAAALIlJYnCISH/vhQU/74HB/+/AgL/vgAA/60AAP+FAAD/TwAA/xsAAP8DFxf/AGdn/wCM + jP8Apqb/AL29/wDT0/8A6Oj/APf3/xP+/v8z////Uv39/23c3P+eTk7/xyws/7YjI/9dEhL/E0RE/wG4 + uP8A7e3/APb2/wD5+f8A+fn/APX1/wDv7/8A5ub/ANra/wPGxv8Pqqr/N319/41sbP/epKT/+7Oz//+s + rP//np7/mFtbygoKCmIAAAAZAAAAALcoKLG/ISH/uxMT/7sHB/+9AgL/wAAA/78AAP+yAAD/jwAA/1sA + AP8nAAD/CAIC/wFHR/8Afn7/AJub/wC0tP8Az8//AObm/wD5+f8d/v7/Pf///1X09P9wjo7/gjs7/2Qg + IP8gSkr/AsvL/wDt7f8A9/f/APj4/wD39/8A8fH/AOfn/wDZ2f8Ax8f/AZub/whfX/8fOjr/Xjw8/7h5 + ef/wpqb//rGx//+qqv//nZ3/vG1t3RAQEG8AAAAgAAAAALcpKdG8IiL/uRMT/7gGBv+5AQH/vgAA/8MA + AP/EAAD/uwAA/54AAP9uAAD/PAAA/xIAAP8CKyv/AGVl/wCPj/8Ar6//AM/P/wDp6f8D+/v/Jf7+/z39 + /f9I3d3/R7Cw/zGmpv8Sy8v/APX1/wD8/P8A+/v/APn5/wDz8/8A5+f/ANDQ/wCtrf8DhIT/Ej09/zYb + G/9vODj/smFh/+aGhv/7oaH//6ur//+np///mpr/13Z26w8PD3gAAAAlAAAAALksLOe6IyP/thIS/7QE + BP+2AQH/uwAA/8AAAP/FAAD/yQAA/8UAAP+xAAD/iQAA/1cAAP8pAAD/CgAA/wFHR/8Ajo7/ALa2/wDY + 2P8A8PD/DP39/yP///8u/f3/LPj4/yD4+P8R/f3/Bf///wD///8A////APv7/wDq6v8AzMz/BISE/xIt + Lf8xFRX/ZCsr/55HR//MX1//63Nz//qDg///lpb//6Oj//+jo///lpb/63t79RQUFIAGBgYpAAAAALsx + Mfe3IiL/shAQ/7EDA/+zAQH/uAAA/70AAP/CAAD/yAAA/84AAP/OAAD/xAAA/6YAAP91AAD/OQAA/wwA + AP8BUVH/AJub/wDIyP8A5+f/APr6/w3///8Y////Gf///xP///8N////CP///wf///8I////Bubm/wKx + sf8MYWH/KxUV/2IiIv+bOjr/yU9P/+hfX//2Zmb//HBw//94eP//iYn//5mZ//+dnf//kpL/+Hx8+xUV + FYQGBgYrAAAAALs0NP60IiL/rw4O/64DA/+wAAD/tQAA/7oAAP+/AAD/xQAA/8sAAP/RAAD/1QAA/9IA + AP+2AAD/egAA/zEAAP8HDAz/AHd3/wC6uv8A4OD/APX1/wD///8J////C////wr///8H////CP///w3/ + //8T/f3/GsnJ/yZiYv9KGRn/iSgo/8Y+Pv/nTU3/9ldX//xdXf//YGD//2Rk//9tbf//fX3//46O//+X + l///jIz//nh4/xgYGIEGBgYpAAAAALo4OPezJSX/rA8P/6sCAv+tAAD/sgAA/7cAAP+8AAD/wgAA/8gA + AP/OAAD/0wAA/9gAAP/UAAD/rgAA/2gAAP8fAAD/AzU1/wChof8A4OD/APT0/wD9/f8B////A////wP/ + //8E////B////xD///8d/f3/LdfX/0h9ff+FMDD/zTc3//NDQ//9S0v//09P//9SUv//VVX//1hY//9e + Xv//cHD//4OD//+QkP//hob/+G5u/BkZGXsHBwcmAAAAALg+PuizKyv/qhIS/6gCAv+qAAD/rgAA/7MA + AP+5AAD/vgAA/8QAAP/KAAD/0AAA/9YAAP/aAAD/ygAA/5MAAP86AAD/CCUl/wCgoP8A5eX/APb2/wD9 + /f8A////AP///wD///8B////Bv///xD///8h////N/b2/1PKyv+IWlr/zz4+//k9Pf//QED//0ND//9G + Rv//SEj//0pK//9QUP//YmL//3h4//+IiP//gID/7GJi9RsbG3IICAghAAAAALZBQdOzMDD/qRUV/6UE + BP+nAQH/qwAA/7AAAP+1AAD/ugAA/8AAAP/GAAD/zAAA/9IAAP/XAAD/zQAA/5UAAP8xAAD/BWpq/wDM + zP8A8PD/APn5/wD+/v8A/v7/AP///wD9/f8A/v7/Af7+/wv///8d////N////1Ly8v9zvr7/qVtb/+g6 + Ov//NDT//zc3//86Ov//Ozv//z4+//9CQv//VVX//2tr//+AgP//eHj/3FdX6R4eHmcKCgoaAAAAALRD + Q7S0ODj/qhwc/6QICP+lAgL/pwAA/6wAAP+xAAD/tgAA/7wAAP/CAAD/yAAA/84AAP/OAAD/tAAA/1EA + AP8PTEz/AcfH/wDt7f8A9/f/APv7/wD+/v8A/f3/APv7/wD39/8A9vb/APj4/wD8/P8R/v7/Kv///0f9 + /f9k9fX/hL+//71PT//6Kir//yoq//8rK///Li7//zAw//82Nv//R0f//2Ji//91df//bm7/xUxM2iMj + I1gAAAASAAAAALFBQYq2QED/rCcn/6QPD/+jBQX/pAAA/6gAAP+tAAD/sgAA/7cAAP+9AAD/wgAA/8EA + AP+oAAD/QQAA/wx/f/8B0ND/APHx/wD4+P8A+/v/AP39/wD9/f8A+Pj/APHx/wDp6f8A5OT/AObm/wDu + 7v8A+fn/FP7+/zH///9P////bPX1/4y6uv/OQED/+x4e//8dHf//Hx///yIi//8oKP//PDz//1VV//9m + Zv//YGD/qkJCwykpKUUAAAAKAAAAALE9PU+3R0f/rS8v/6MVFf+hCAj/oQEB/6QAAP+pAAD/rQAA/7MA + AP+3AAD/tQAA/44AAP8wDw//Bqys/wDn5/8A9fX/APr6/wD8/P8A/v7/AP7+/wD5+f8A8PD/AN/f/wDL + y/8Aw8P/AMjI/wDX1/8A6Oj/APf3/xb9/f80////Uv///2719f+Ltrb/vkZG//UVFf//EBD//xUV//8b + G///MTH//0hI//9bW///Vlb/iDw8nzU1NTBAQEAEAAAAALEzMwqzRUXZsDo6/6YfH/+gDQ3/ngEB/6EA + AP+kAAD/qQAA/6sAAP+iAAD/agAA/xtDQ/8DwsL/APDw/wD6+v8A+/v/AP7+/wD+/v8A/v7/APz8/wD0 + 9P8A29v/AaWl/wFtbf8Ac3P/AJ6e/wC3t/8Azs7/AOTk/wD39/8W/v7/Nf///1H///9p9/f/f9jY/6Rt + bf/qERH//wcH//8REf//Jyf//z4+//9OTv/jSUntSzw8ak1NTR7///8B////AQAAAACwQkKbtEVF/6kq + Kv+hFBT/nQUF/5wAAP+dAAD/mAAA/4AAAP9DAAD/D2pq/wHR0f8A8/P/APv7/wD9/f8A/v7/AP///wD/ + //8A/v7/APf3/wDl5f8CoqL/Cj8//xAFBf8HERH/AVBQ/wCHh/8Ara3/AMrK/wDk5P8A9/f/Fv7+/zH/ + //9L////Xv39/27f3/+LfHz/0Rwc//oPD///IiL//zU1//9BQf+/Pz/MRkZGSWlpaRH///8B////AQAA + AACuPT1LtktL8602Nv+kHx//mgoK/5EBAf9+AAD/UgAA/yYSEv8Jb2//AcbG/wDn5/8A9fX/APv7/wD+ + /v8A////AP///wD+/v8A+/v/APHx/wHJyf8TQUH/PAAA/0oAAP8qAAD/CgEB/wFISP8AiIj/AKur/wDI + yP8A5OT/APb2/xD9/f8n/v7/Ofv7/0bv7/9XtbX/kDQ0/94aGv/6KSn//Tc3//U4OPmVQUGWXV1dLL+/ + vwgAAAAAAAAAAAAAAAAAAAAAsUZGr7JDQ/+nLS3/mxQU/4IGBv9bAQH/JQIC/wdRUf8BmJj/AMHB/wDZ + 2f8A7Oz/APj4/wD+/v8A////AP///wD9/f8A9vb/AN/f/wiPj/9MAAD/lwAA/5sAAP9wAAD/NAAA/wsA + AP8BR0f/AImJ/wCrq/8AyMj/AOTk/wD09P8C+fn/EPPz/xzX1/81e3v/iRkZ/9wbG//3Kyv/+zg4/8w5 + OdVYWFhRi4uLFv///wQAAAAAAAAAAAAAAAAAAAAArT4+UrNLS+6uPT3/nyUl/4MQEP9VBgb/IQEB/wUh + If8Aenr/AKWl/wDCwv8A29v/AO3t/wD4+P8A/v7/AP39/wD5+f8A6+v/BKqq/zMREf+pAAD/ywAA/8gA + AP+sAAD/dwAA/zcAAP8KAAD/AVFR/wCIiP8ArKz/AMnJ/wDf3/8A5ub/Ac7O/wqBgf9JBwf/sA8P/+kd + Hf/3Ly//7TY29p9CQpR0dHQus7OzCv///wMAAAAAAAAAAAAAAAAAAAAAAAAAAK9FRZu0Skr/qDY2/5Ie + Hv9sDg7/NgMD/w8AAP8CKir/AH19/wClpf8AwsL/ANzc/wDt7f8A+Pj/APn5/wDv7/8Bycn/HTs7/5UA + AP/JAAD/0gAA/9MAAP/MAAD/sQAA/3oAAP86AAD/DAAA/wFKSv8AjIz/AK+v/wDFxf8AwcH/CHx8/zUJ + Cf+SBgb/2RMT//AlJf/1MzP/wjw8xGtra0WmpqYX////BP///wEAAAAAAAAAAAAAAAAAAAAAAAAAAKo5 + OSiwSUnKsUhI/6UzM/+MHh7/YwwM/zMEBP8PAQH/Aisr/wB1df8ApaX/AMLC/wDb2/8A6+v/AO7u/wDa + 2v8Oamr/ZgAA/74AAP/LAAD/zgAA/9AAAP/RAAD/zQAA/7QAAP99AAD/PQAA/wsAAP8AWVn/AJCQ/wCe + nv8Ia2v/MwkJ/4kDA//QDQ3/6hwc//AsLP/UODjgjlJSa5WVlSTo6OgL////Av///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACtPz9ZtE9P47FHR/+kMzP/ihwc/2MODv8yBQX/DgEB/wMuLv8Afn7/AKam/wDB + wf8A19f/ANra/wSlpf88AAD/pQAA/8EAAP/FAAD/yAAA/8sAAP/NAAD/0AAA/80AAP+0AAD/dwAA/zEA + AP8GFBT/AmNj/wZhYf8wCwv/hAQE/8oLC//kGBj/7CYm/90xMe6pRESNi4uLLtLS0hH///8F////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0REdLRQUO+xSEj/ozIy/4kcHP9hDg7/MAQE/w0B + Af8CMDD/AH9//wCkpP8Aubn/Aa6u/xo8PP9+AAD/tQAA/7wAAP+/AAD/wgAA/8UAAP/IAAD/ywAA/80A + AP/JAAD/pwAA/2YAAP8tAAD/GggI/zIGBv9/AwP/xgoK/+AWFv/nJSX/4S8v9LQ8PJ6MjIwz3NzcFv// + /wr///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALBHR361U1PwskpK/6Q1 + Nf+NIiL/YxER/zMICP8QBAT/AzEx/wB0dP8Bj4//Dk1N/1sAAP+lAAD/swAA/7cAAP+6AAD/vQAA/8AA + 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 + yf+AAU3/wANP/+AHYf8= + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/TutorialWindow.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/TutorialWindow.vb new file mode 100644 index 00000000..a72d1c60 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/TutorialWindow.vb @@ -0,0 +1,181 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.IO +Imports System.Collections.ObjectModel +Imports System.Runtime.InteropServices +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D + +Namespace D3D10Tutorial02_WinFormsControl + ''' + ''' This application displays a triangle using Direct3D 10 + ''' + ''' http://msdn.microsoft.com/en-us/library/bb172486(VS.85).aspx + ''' http://msdn.microsoft.com/en-us/library/bb172487(VS.85).aspx + ''' + ''' Copyright (c) Microsoft Corporation. All rights reserved. + ''' + Partial Public Class TutorialWindow + Inherits Form + #Region "Fields" + Private device As D3DDevice + Private swapChain As SwapChain + Private renderTargetView As RenderTargetView + Private backColor_Renamed As New ColorRgba(0.0F, 0.125F, 0.3F, 1.0F) + + Private effect As Effect + Private technique As EffectTechnique + Private vertexLayout As InputLayout + Private vertexBuffer As D3DBuffer + Private needsResizing As Boolean + #End Region + + #Region "Structs" + _ + Private Class SimpleVertexArray + ' An array of 3 Vectors + _ + Public vertices() As Vector3F = { New Vector3F() With {.X = 0.0F, .Y = 0.5F, .Z = 0.5F}, New Vector3F() With {.X = 0.5F, .Y = -0.5F, .Z = 0.5F}, New Vector3F() With {.X = -0.5F, .Y = -0.5F, .Z = 0.5F} } + End Class + #End Region + + #Region "TutorialWindow()" + ''' + ''' Initializes a new instance of the class. + ''' + Public Sub New() + InitializeComponent() + End Sub + #End Region + + #Region "TutorialWindow_Load()" + Private Sub TutorialWindow_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load + InitDevice() + directControl.Render = AddressOf Me.RenderScene + End Sub + #End Region + + #Region "directControl_SizeChanged()" + Private Sub directControl_SizeChanged(ByVal sender As Object, ByVal e As EventArgs) Handles directControl.SizeChanged + needsResizing = True + End Sub + #End Region + + #Region "TutorialWindow_FormClosing()" + Private Sub TutorialWindow_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles MyBase.FormClosing + directControl.Render = Nothing + device.ClearState() + End Sub + #End Region + + #Region "InitDevice()" + ''' + ''' Create Direct3D device and swap chain + ''' + Protected Sub InitDevice() + device = D3DDevice.CreateDeviceAndSwapChain(directControl.Handle) + swapChain = device.SwapChain + + SetViews() + + ' Create the effect + Using effectStream As FileStream = File.OpenRead("Tutorial02.fxo") + effect = device.CreateEffectFromCompiledBinary(New BinaryReader(effectStream)) + End Using + + ' Obtain the technique + technique = effect.GetTechniqueByName("Render") + + ' Define the input layout + Dim layout() As InputElementDescription = _ + { _ + New InputElementDescription() With _ + { _ + .SemanticName = "POSITION", _ + .SemanticIndex = 0, _ + .Format = Format.R32G32B32Float, _ + .InputSlot = 0, _ + .AlignedByteOffset = 0, _ + .InputSlotClass = InputClassification.PerVertexData, _ + .InstanceDataStepRate = 0 _ + } _ + } + + Dim passDesc As PassDescription = technique.GetPassByIndex(0).Description + + vertexLayout = device.CreateInputLayout(layout, passDesc.InputAssemblerInputSignature, passDesc.InputAssemblerInputSignatureSize) + + device.IA.InputLayout = vertexLayout + + Dim vertex As New SimpleVertexArray() + + Dim bd As New BufferDescription() With {.Usage = Usage.Default, .ByteWidth = CUInt(Marshal.SizeOf(vertex)), .BindingOptions = BindingOptions.VertexBuffer, .CpuAccessOptions = CpuAccessOptions.None, .MiscellaneousResourceOptions = MiscellaneousResourceOptions.None} + + Dim vertexData As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(vertex)) + Marshal.StructureToPtr(vertex, vertexData, False) + + Dim InitData As New SubresourceData() With {.SystemMemory = vertexData, .SystemMemoryPitch = 0, .SystemMemorySlicePitch = 0} + + 'D3DBuffer buffer = null; + vertexBuffer = device.CreateBuffer(bd, InitData) + + ' Set vertex buffer + Dim stride As UInteger = CUInt(Marshal.SizeOf(GetType(Vector3F))) + Dim offset As UInteger = 0 + device.IA.SetVertexBuffers(0, New Collection(Of D3DBuffer) (New D3DBuffer() {vertexBuffer}), New UInteger() { stride }, New UInteger() { offset }) + + ' Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList + Marshal.FreeCoTaskMem(vertexData) + End Sub + #End Region + + #Region "SetViews()" + Private Sub SetViews() + ' Create a render target view + Using pBuffer As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(pBuffer) + End Using + + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}, Nothing) + + ' Setup the viewport + Dim vp As New Viewport() With {.Width = CUInt(directControl.ClientSize.Width), .Height = CUInt(directControl.ClientSize.Height), .MinDepth = 0.0f, .MaxDepth = 1.0f, .TopLeftX = 0, .TopLeftY = 0} + + device.RS.Viewports = New Viewport() {vp} + End Sub + #End Region + + #Region "RenderScene()" + ''' + ''' Render the frame + ''' + Protected Sub RenderScene() + If needsResizing Then + needsResizing = False + renderTargetView.Dispose() + Dim sd As SwapChainDescription = swapChain.Description + swapChain.ResizeBuffers(sd.BufferCount, CUInt(directControl.ClientSize.Width), CUInt(directControl.ClientSize.Height), sd.BufferDescription.Format, sd.Options) + SetViews() + End If + ' Just clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor_Renamed) + + Dim techDesc As TechniqueDescription = technique.Description + + For p As UInteger = 0 To techDesc.Passes - 1UI + technique.GetPassByIndex(p).Apply() + device.Draw(3, 0) + Next p + + swapChain.Present(0, PresentOptions.None) + End Sub + #End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/directx.ico b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial02_WinFormsControl/directx.ico differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/D3D10Tutorial04_WinFormsControl.vbproj b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/D3D10Tutorial04_WinFormsControl.vbproj new file mode 100644 index 00000000..17d29e2a --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/D3D10Tutorial04_WinFormsControl.vbproj @@ -0,0 +1,118 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {D0E3965D-10DF-45FC-A05F-39D67EDA760E} + WinExe + + + D3D10Tutorial04_WinFormsControl + v3.5 + On + Binary + Off + On + 512 + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + 3.0 + + + + + + 3.0 + + + + + + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + TutorialWindow.vb + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + PreserveNewest + + + PreserveNewest + + + True + Settings.settings + True + + + Form + + + TutorialWindow.vb + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/D3DStructs.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/D3DStructs.vb new file mode 100644 index 00000000..c9b36954 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/D3DStructs.vb @@ -0,0 +1,37 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Runtime.InteropServices +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D + +Namespace D3D10Tutorial04_WinFormsControl + #Region "SimpleVertex" + _ + Public Structure SimpleVertex + _ + Public Pos As Vector3F + _ + Public Color As Vector4F + End Structure + #End Region + + #Region "Cube" + Public Class Cube + Public Vertices As New CubeVertices() + Public Indices As New CubeIndices() + + _ + Public Class CubeVertices + _ + Private vertices() As SimpleVertex = { New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Color = New Vector4F (0.0f, 1.0f, 0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Color = New Vector4F (0.0f, 1.0f, 0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Color = New Vector4F (0.0f, 1.0f, 1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Color = New Vector4F (1.0f, 0.0f, 0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Color = New Vector4F (1.0f, 0.0f, 1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Color = New Vector4F (1.0f, 1.0f, 0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Color = New Vector4F (1.0f, 1.0f, 1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Color = New Vector4F (0.0f, 0.0f, 0.0f, 1.0f)} } + End Class + + _ + Public Class CubeIndices + _ + Private indices() As UInteger = { 3,1,0, 2,1,3, 0,5,4, 1,5,0, 3,4,7, 0,4,3, 1,6,5, 2,6,1, 2,7,6, 3,7,2, 6,4,5, 7,4,6 } + End Class + End Class + #End Region +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..6e6bb09b --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/My Project/AssemblyInfo.vb @@ -0,0 +1,40 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/My Project/Resources.Designer.vb new file mode 100644 index 00000000..b5a64a5f --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/My Project/Resources.Designer.vb @@ -0,0 +1,64 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My.Resources + + + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If (resourceMan Is Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/My Project/Settings.Designer.vb new file mode 100644 index 00000000..34f1fe80 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Program.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Program.vb new file mode 100644 index 00000000..ea28b321 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Program.vb @@ -0,0 +1,22 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms + +Namespace D3D10Tutorial04_WinFormsControl + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New TutorialWindow()) + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Tutorial04.fx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Tutorial04.fx new file mode 100644 index 00000000..e30071ed --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Tutorial04.fx @@ -0,0 +1,55 @@ +//-------------------------------------------------------------------------------------- +// File: Tutorial04.fx +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + +//-------------------------------------------------------------------------------------- +// Constant Buffer Variables +//-------------------------------------------------------------------------------------- +matrix World; +matrix View; +matrix Projection; + + +//-------------------------------------------------------------------------------------- +struct VS_OUTPUT +{ + float4 Pos : SV_POSITION; + float4 Color : COLOR0; +}; + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +VS_OUTPUT VS( float4 Pos : POSITION, float4 Color : COLOR ) +{ + VS_OUTPUT output = (VS_OUTPUT)0; + output.Pos = mul( Pos, World ); + output.Pos = mul( output.Pos, View ); + output.Pos = mul( output.Pos, Projection ); + output.Color = Color; + return output; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( VS_OUTPUT input ) : SV_Target +{ + return input.Color; +} + + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS() ) ); + } +} + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Tutorial04.fxo b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Tutorial04.fxo new file mode 100644 index 00000000..34736379 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/Tutorial04.fxo differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/TutorialWindow.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/TutorialWindow.Designer.vb new file mode 100644 index 00000000..43b9fa77 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/TutorialWindow.Designer.vb @@ -0,0 +1,61 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace D3D10Tutorial04_WinFormsControl + Partial Public Class TutorialWindow + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Dim resources As New System.ComponentModel.ComponentResourceManager(GetType(TutorialWindow)) + Me.directControl = New Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl() + Me.SuspendLayout() + ' + ' directControl + ' + Me.directControl.Dock = System.Windows.Forms.DockStyle.Fill + Me.directControl.Location = New System.Drawing.Point(0, 0) + Me.directControl.Name = "directControl" + Me.directControl.Size = New System.Drawing.Size(624, 442) + Me.directControl.TabIndex = 4 +' Me.directControl.SizeChanged += New System.EventHandler(Me.directControl_SizeChanged) + ' + ' TutorialWindow + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6F, 13F) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(624, 442) + Me.Controls.Add(Me.directControl) + Me.Icon = (CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)) + Me.Name = "TutorialWindow" + Me.Text = "Direct3D 10 Tutorial 4: 3D Spaces" +' Me.Load += New System.EventHandler(Me.TutorialWindow_Load) +' Me.FormClosing += New System.Windows.Forms.FormClosingEventHandler(Me.TutorialWindow_FormClosing) + Me.ResumeLayout(False) + + End Sub + + #End Region + + Private WithEvents directControl As Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl + End Class +End Namespace + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/TutorialWindow.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/TutorialWindow.resx new file mode 100644 index 00000000..0dd393c3 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/TutorialWindow.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAAABABoBgAAlgAAACAgEAAAAAQA6AIAAP4GAAAQEBAAAAAEACgBAADmCQAAMDAAAAAA + CACoDgAADgsAACAgAAAAAAgAqAgAALYZAAAQEAAAAAAIAGgFAABeIgAAMDAAAAAAIACoJQAAxicAACAg + AAAAACAAqBAAAG5NAAAQEAAAAAAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAAAA + AAD//wAA////AACAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMy2t7a2bMzMzMzMzMzMzMzMzMzMzMzMu7a3tnd2d2ZszMzMzMzMzMzMzMzMzMy7t7tr + a2dnZmZmbMzMzMzMzMzMzMzMzLu7e2tnZnZmZmZmZmzMzMzMzMzMzMzMy7u3u7e2tmdmZmZmZmbMzMzM + zMzMzMzMt7e7u3tra2Z2ZmZmZmZszMzMzMzMzMzLu7u7u7u7d7Z2ZmZmZmZmzMzMzMzMzMx7O7u7s3N7 + trd2tmZmZuZmbMzMzMzMzMu7u7uzNye7e2trZmd3ZmZmZszMzMzMzLO7u7MzqmZ3t7Z3ZrdyZmbmZmzM + zMzMy7u7s7MKqqZre2t2t3AqpmZmZmbMzMzMx7OzuzIqqqpnt7a3ZzIqamZm5mbMzMzMO7u7syKqqqpm + e3trYzKqqmZmZmZszMzMu7OzMiqqqqpqe7a2syKqqmpmZmZszMzLszszIiqqqqqmd7t7cCqqqqamZmZm + zMzHu7swAiKqqqqqZ3u3MCqqqqpqZmZmzMzLMzMzACIqKqqqZ7t7Aqqqqqqqd2ZmzMzLO7szMAIiqqqq + anszIqqqqqoid2ZmzMxzszOzMwAiIqqqpmMyKqqqqqIie2ZnbMy7O7OzszAAIiqqqqd6qqqqoiIzd2Zm + bMw3szs7OzMwAiKqqqqqqqqqIDN3tmZ2bMy7M7OzuzszACKqqqqqqqoiA3trZrZmvMxzOzOzs7O7MAIq + qqqqqqcjN7a3t2ZnfMw7M7Ozs7s7MwIqqqqqqqoje3t3a3d2fMx7OzM7O7O7MzAqqqqqqqpnt7e7trZ3 + fMy3MzOzuzuzswKqqqqqqqqme7tra2dnfMx7M7M7M7O7MwKqqqqqqqpqZ7u7u7a2vMx3szszs7OzMqqq + qqqqqqqmpnu7t7tnfMzLczM7OzswKqqqqqoqKqqqpme7u7e7zMzHOzOzMzMCqqqqqqIiKqqqpqZ7u7e2 + zMzLc7MzMzKqqqqqqiIAIiqqqmpnu7t7zMzMtzMzMCKqqqqqqgMwACIqqqqne7e8zMzMN7MzAiqqqqqq + ojMzACIqqqqnO3u8zMzMxzszACKqqqqqIDszMwIiqqIjO7vMzMzMy3MzAAIiqqqqA7O7MwAiIqIDu3vM + zMzMzHtzMwAioqqiM7s7szMCIiAzu7zMzMzMzMe3MwAiKqojM7O7O7MAIgO7u8zMzMzMzMx7MzAAIqID + O7OzuzMwAzO7vMzMzMzMzMzHdzMAAiIzszuzs7MzM7t7zMzMzMzMzMzMtzcwACMzOzM7OzuzM3u8zMzM + zMzMzMzMx7s3MDMzs7Ozs7Ozu7vMzMzMzMzMzMzMzHdzMzOzMzs7Ozs7t7zMzMzMzMzMzMzMzMy3d7cz + s7M7O3u3vMzMzMzMzMzMzMzMzMzMt3t7e3t7e7e8zMzMzMzMzMzMzMzMzMzMzMe3t7e3t8zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz///////8AAP///////wAA///AH///AAD//AAB//8AAP/w + AAB//wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/AAD8AAAAAf8AAPgAAAAA/wAA8AAAAAB/ + AADgAAAAAD8AAOAAAAAAPwAAwAAAAAAfAADAAAAAAB8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAIAA + AAAADwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAADAAAAAAB8AAMAA + AAAAHwAA4AAAAAA/AADgAAAAAD8AAPAAAAAAfwAA+AAAAAD/AAD8AAAAAf8AAP4AAAAD/wAA/wAAAAf/ + AAD/gAAAD/8AAP/AAAAf/wAA//AAAH//AAD//AAB//8AAP//gA///wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgIAAgAAAAIAAgACAgAAAwMDAAICA + gAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzLe2tmbMzMzMzMzMzMzMy3dnZ2ZmZmzMzMzMzMzMzHu7t3ZmZmZmzMzMzMzMzHu7u7 + t7a2ZmZmbMzMzMzMu7uzd3trZmZ2ZmbMzMzMy7uzMqZ7tnd3dmZmbMzMzMuzMCqma2t2cKpmZmzMzMy7 + MyKqqqe2tzKqpmZmzMzLszIqqqpmu3cKqqamZmzMyzMCIqqqpndzKqqqZmZszMszACIqqqprMKqqqqp2 + bMxzszACIiqqpzKqqqoidmbMOzszACIqqqqqqqqiA3ZmzLs7MzAAIqqqqqqiA3dmZsxzM7MzMAKqqqqq + I3trdmfMu7M7OzMAqqqqqqO3trdmzHMzs7MzAqqqqqqqe3t3a8x7OzszMqqqqqqqpme7trbMtzMzMCqq + qqqiqqqmZ7trzMtzMwKqqqqiAiKqqqZ7fMzHszAqqqqqoAAiqqqiu7zMw3MwIiqqqiMwAiqqI7e8zMy3 + MAIiqqIzMwIiIjO7zMzMx3MAIiogM7MAIiM7vMzMzMNzcAIiIzszMAIDu7zMzMzMdzMwIgM7OzMzO3vM + zMzMzMt3MwMzs7OzM7u8zMzMzMzMx3c3Mzs7O7e8zMzMzMzMzMw3e3t7e7e7zMzMzMzMzMzMzMN7e3t8 + zMzMzMzM////////////4B///wAD//4AAf/4AAB/8AAAP+AAAB/gAAAfwAAAD4AAAAeAAAAHgAAABwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AAAAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gA + AH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzM + zMzMzMzMzMzLZmbMzMzMy7e2ZmbMzMyzB3dndmzMyzKqe3CmZszDCqpnMqpmzLMyqqcKqqZsOzAqqqqi + dmwzszCqqie2bDMzMqqqZ7tsMzAqqqqme7zDAqqiAqqrzMcyqqMwojvMzHMqCzAjvMzMxzIzMzvMzMzM + xze7zMzM//+zMPg/a2vgD6pmwAfMzIADMyKAA6e2AAGqpgABzMwAATIqAAFmuwABqqaAA2zMgAMCIsAH + pnfgD6qq+D9szCgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWAAAA0QAAAM4A + AADNAAAAywAAAMgAAADGAAAAxQAAAMIAAADBAAAAvgAAALwAAAC6AAAAtwAAALUAAACzAAAAsAAAAK0A + AACpAAAApgAAAJwAAABzAAAAZwAAADwAAACiAQEAkgEBAN0CAgDAAgIAvQICAH0BAQBWAQEAzgMDAMMD + AwC/AwMAsAMDALQEBACGAwMA5wYGACUBAQDTBgYAxQYGAKQFBQDXBwcAuQcHAMAICABIAwMAMgICALQI + CACtCAgAoQcHAMcKCgD5Dg4AvgsLAOEODgDMDAwAmgoKANIPDwDFEREArQ8PAPoXFwDpFxcApBERANwY + GADJGRkA/iEhALcYGAD0IyMA1B4eAOQiIgBjDw8A7SUlABoEBAD9KioAlxkZAAwCAgClHR0A9SwsADMJ + CQDXJycAuSIiAMYoKAD+NDQAiRwcAPQ0NADnNDQA2jIyAP47OwCqKSkA9j09AP5CQgD+RkYA9ENDAP9J + SQC6NjYAyzw8AGYfHwA1EBAA/05OAPhNTQDlR0cA/1FRAKg3NwD/VVUAu0BAAEkZGQCKMDAA/1paAPZX + VwD2WloA/15eAMhLSwC3RUUA/2FhAG4qKgC/TEwA/2ZmALFHRwDoX18A9mZmALVLSwD/bGwAtk5OAMxZ + WQDmZWUAr01NAKBHRwD/cnIAt1JSADMXFwD2c3MA/3h4ACkUFAD/fX0A/4GBAOl3dwD/hoYA+oODAPaG + hgD/jY0AqF1dAGY5OQD/k5MA5oaGAMVzcwD/mZkA8JOTAP+engD/oqIA+6GhAKNpaQCEVVUA/6amAMuF + hQD/rKwA8KamAP+ysgD0q6sA/7a2APuzswD/ubkA+bW1AP++vgDgqakA/8LCAP/FxQD/yckA6Lm5AP/O + zgCOc3MA/M3NAOzCwgDDq6sAMy0tAAD+/gAA/f0AAPv7AAD5+QAA9/cAAPT0AADx8QAA7+8AAO3tAADp + 6QAA5uYAAOTkAADg4AAA398AANraAADT0wAAyckAAI6OAAB9fQABzs4AAcbGAAHCwgABuroAAbS0AAGt + rQABpKQAAZubAAGHhwAC+fkAAvf3AAF1dQAD//8AA/v7AAX19QAG//8ABubmAAJSUgAJ//8ADP//AAnA + wAAIj48ABmhoAAMxMQAQ8/MAEf7+AAqBgQAGSUkAFv7+AA+qqgAW6+sADH5+AAQoKAAWysoAHf7+ABzX + 1wAo/v4AJujoADT//wAt19cAMuLiADf29gA7/v4ABhgYAEf9/QBU/v4AUPDwAD2wsAAYREQAFj09ABAs + LABO1NQAZPDwAGr29gB29fUAPHx8AC9dXQBarq4Ac93dAIC+vgBDYmIAltTUAIeYmAAAAAAA//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////XGRqcHh+hIeK//// + //////////////////////////////////////////9ISFZaZGpzfoKEh4qNjZCSk/////////////// + ////////////////////////QEBIVlxmc36Eh4qNkJKSk5eXl5mZ//////////////////////////// + /////0xCSEhRWWFteIKHipCSk5mZm5ubm5ubm5v/////////////////////////////QkJMTFFRVllk + anN+hIqNkpmbnaGhoaGfn52d//////////////////////////9GRkxMTEhASFNYWmRteIKHjZKXm6Gj + pKSko6Gfn////////////////////////0ZGRkJCOzszPENVU1lhanN+hYqQl5uho6WlpaSjoZ////// + ////////////////REREPDwzMzMqPWllVVZcZnB4goeKkJecoqaqqaelpKGf//////////////////9E + Pjw8NSUlJRAe/PmoXlhaZG1zfoSHipGYqKirpqmnpaShn////////////////04+PjUlJSUBJKzU5e77 + lWNZYWpzeIKFiY+W+O/7q6qpp6WjoZ3/////////////TkM+NRoaGgQV8MCx4uz0+3JbYWZweH6Ehous + 397u/auqqaeloZ+b////////////Qz44KhoaBB3xw7Kt3Obt+otjWmRqc3iBeozww8rq9f2rqqmnpJ+b + //////////9OQzgnAAAEJPDCtLCt2eTs9P5uW1xkanN7fYDHubDk7fb9q6qppaGdm/////////9DPzYf + AgsW8MS6s7Ct0uLm7fqVY1lcZmx6cfLDtq/c5u32/auqpKOdmf///////1A/OSgHEhbxvsO8t7KuzNnk + 7PT+blhZXGNlgMu8tK/S4urt9v2rpqGfmZf//////1A/MigMGRfr1sfEwLizr8/i5u37i1RRWF5f8cK3 + sq6t0+Lm7PT7q6afmZP//////1A/LBsNGR5H68vHxcG7tbDT5Oz0/mdMVFdg1ru0sK6urrDO3uj5/qKg + mZL//////085LBsKESQeR+vWvsbDvLax2ebt+n1QT0Xww7WxsLCytLe7wd33qKKemZL/////UE9BKxwJ + Cg8ZHiZK27/HxMC3sOLq7v5pX/C9tbGwsbO3u8HH1vGMj5qbmZKN////UE9BKwwKCAcLFBUXSuDWvsXA + ts3k6vPv7+Gyrq+wsrfAxcjxgIyLjpSZl5CK////UE9BIw0LCQcFBxAkHiZK277Eu7PT5OTk4tnPra2v + tsDI8oBxfXqGiI2Tk42H////XU86Ig8NCggFAgIHExUXStHHvbev09zc2dPSz9LQxNaDX2VudXZ+goeQ + ko2E////XU86IhAODAoHBAEAAQ0dLkrLw7myrdLT0s/S09nh+GhpXmNrbXBzeISKkIqC////XU86EREP + DQsIBQIBAAARFibXxrmyrq3MzMzP2eLn92leW1xhZGZqbX6Fiod+////Z1c6EhIRDwwKBwQBAAAEGRfg + xrexrq2tra3P2eLp85ZeWFlZWlxcZHCCh4V4////b109KRMREA4MCQYDAQADGS7WwLOwra2trq2t0+Lm + 7vuLVFFRVlZWWWZ4hYJz////b11LMRMTERANCwgFAgIOHtvBtbGvra6vsbGwrtnk7PX7ckhISEhRUVpw + fnhw////b2dXPSkTEhEPDQoICRIX38CzsK+urrCztri3tLDc5u31+15AQEBASFZmc3Bw/////29XPTEY + ExIRDw0OGWDFt7Kvrq2tsLO6vcK9u7ax3Obt9ftvOzM7O1Fcamb//////29lSz0UGBMSERgW8MKzr6+t + ra2usrvG1svHw8C4sdzm7fX6lTwzM0hWYWT//////29vVz0xFBQUHS3WvLKvrq2tra2xt8bxSuvRyMW9 + uLHc5uzt+qhDM0BRWWT///////93ZUs3GR0eg9bBt7Kvra2tra+zvfEXLSZK28jFvbix2eTq7vlpPkhR + Vv////////90b1dJJB4m0cfCu7Wwra2trrG61S0UFBUuStvIxb24ssnY4/dSPkxWWv//////////d2VX + Uh4m4L/Gwru1sK2usLXFYBIEBREVF0rRyMW9urfA2i06PExW////////////dHdlSUUuSuC/xsK7tbCw + tL3xGQUBAQMQHRdK277FwcLfTRk+RlNi/////////////3d0ZVJFLkrgy8bCu7W0u9YWCgQCAQEDDh0X + StG+x9ZNJDg8TFj///////////////95dGVSRS5K17/Gwru7xhcTCQcFBAMBAw4VLuvW1k0kNjxGU/// + ////////////////f3RlUkUuSte/xsPF8R0OCwoIBwUEAwUTFi5HTR0yPkRU//////////////////// + /393ZVJFTUrXy77bHhMPDQwKCQgHBQQJFBUWJDQ+RFT///////////////////////9/eWVpX2BH8tsX + GRIRDw4NCwoJBwYFITA6OUNEVP//////////////////////////eXl0aXFoYC0dGBMSERAPDQwLCiAo + Mjk/Q05V/////////////////////////////3d/fH1pcVJLPTowMDAvLys0NDk/P05OVVX///////// + ////////////////////////d398dGVlV1dPQUFBQU9PUFBQUFVV//////////////////////////// + //////////90eX95b2dnZ11dXV5eXl5eXv////////////////////////////////////////////9v + cnJycnJubm5eXv////////////////////////////////////////////////////////////////// + ////////////////////////////////AAD///////8AAP//wB///wAA//wAAf//AAD/8AAAf/8AAP/A + AAAf/wAA/4AAAA//AAD/AAAAB/8AAP4AAAAD/wAA/AAAAAH/AAD4AAAAAP8AAPAAAAAAfwAA4AAAAAA/ + AADgAAAAAD8AAMAAAAAAHwAAwAAAAAAfAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAAAA + AAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAgAAAAAAPAACAAAAAAA8AAIAAAAAADwAAwAAAAAAfAADAAAAAAB8AAOAA + AAAAPwAA4AAAAAA/AADwAAAAAH8AAPgAAAAA/wAA/AAAAAH/AAD+AAAAA/8AAP8AAAAH/wAA/4AAAA// + AAD/wAAAH/8AAP/wAAB//wAA//wAAf//AAD//4AP//8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAC9AAAAuwAAALkAAAC2AAAAswAAALEAAAClAAAAowAAAKEA + AACcAAAAkQAAAG0AAABpAAAAZAAAAF0AAABYAAAANgAAADAAAAAqAAAAIgAAABMAAAAHAAAAhgEBAL8C + AgC8AgIAqAICAKECAgBPAQEAQgEBALsDAwCyAwMArQMDAH0CAgC3BAQAiwMDALMFBQC8BwcA3AkJAKUH + BwBVBAQAzgsLALwKCgCqCQkAOwMDAOgNDQAPAQEAXQcHAJcMDACgDg4AvBISAPkaGgDNFhYAWwoKAOcb + GwC2FhYA2hwcAKsXFwDDGxsAuxwcALUbGwDKICAA8ycnAJMZGQBFDAwA0yYmAOUtLQC2JCQA/TQ0APAy + MgDGLCwA+Do6AKwoKAD/PDwA1TMzAP8+PgDpOjoA/0REAPBAQADIOTkAwDc3AP9KSgC3NTUATRcXANdC + QgD/T08A+E1NAM1AQAAqDQ0A5khIACYMDADxTU0Avj09AKw5OQCVMTEA/1VVAMFCQgC6QUEAsT4+AP9b + WwDISUkAvkZGALFCQgBpJycAzU1NAAgDAwD/YmIANBQUAOhcXAD/ZmYAu0tLAPhnZwD/a2sAs0xMALxR + UQD/cnIAkUFBAHk2NgCkS0sA/3Z2AJtISAC2VVUAzmNjAP98fADodXUASyYmAP+EhAD2gYEAqFlZABYM + DAD/jIwAm1hYAGc7OwD+k5MAqmNjANJ9fQD/mpoA/56eAP+iogD/qKgA/6qqAN6WlgD/ra0A+6qqAP+w + sABzUVEA/7i4AOurqwD/u7sA/729APK3twCFZWUA/8PDAL6RkQD/ysoA16urAPXExAD3ysoAwqamAMyx + sQAhHR0AKScnAB0cHAAA//8AAP39AAD7+wAA+PgAAPb2AAD19QAA8/MAAPHxAADv7wAA7e0AAOrqAADm + 5gAA5OQAAOPjAADh4QAA398AAN3dAADY2AAA19cAAM3NAADLywAAx8cAAMPDAADBwQAAtbUAALCwAACt + rQAAqakAAKamAACjowAAlZUAAJKSAABmZgAAZGQAAY2NAAGCggACvLwAA/7+AAPs7AADwsIAApycAAT8 + /AAEtLQABK6uAAJcXAAEl5cAB/n5AAf09AAG2NgABaKiAASRkQADbGwACPX1AAR4eAAJ/v4ADv//AAZm + ZgAQ+voACpycABT//wALiooAFfT0ABz9/QAe6OgAI/39AAk6OgAs/f0ALu7uACKurgAz/f0AHo+PADz8 + /AA86+sAPNXVAEn9/QBG7+8AInBwAFL+/gA2oaEAVPX1AF/9/QAECgoAYOTkAFzT0wBr8fEAaM7OAGO8 + vABx1dUAgN7eAHzIyACQ5eUAfpeXAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////9janB3foKFiP////////////// + /////////////0lJUWNzfoWIiouMjI6Q//////////////////////9ERERJUWNwe4KJjpKUlZSS//// + //////////////9FPj4zMzZKTlVqc36IjJSYmpiVlP//////////////QjY2LSkwdf5XTV9te4KFjZmb + nJqYlP///////////0I2LSYfHOfr9YBOX213f4eR8fienZqYlP//////////OCYZIWvH3Ojz/GhVanN8 + g6HT6vufnZqV/////////zgpGx3ftqrZ5fD3hltjb3p91a3j8/2fnZiS//////9BNCAc1ry3r6bh6vP8 + aF9sdKK3q9rq8/2fnJKQ/////z0yIxPPwby3rqbj7feDWWR90LCqpOHq8vuelo7/////PSoXERbDwr24 + sajl8PliXqK0rKmoqcni7P6bjP///0Y6KgkNExbExb+6s9Lo7pF9yqioqa2zts3pl5OMif//RjolBAoO + ExbPxsC5sNzl5uLZo6WpsLrGoISHj4uF//9GOyIDBAoMERX02Lu0qdrh3trZzK7Uon10en+JioL//1A8 + JAQCAwcXDxMWxbWrpNna2t7g71NeaGxvd4KIfv//XEMgBgQBAAMJDRTktaqlo8jZ3uPsdVRWX19qe4V3 + //9lQysgBgMBAAkQgb2tqKamqKjR4er2dk5LTVVwfnP//2VSORogBgYLHd20q6emp6ywsq7S5fD6gFdF + SWNzbf//YWE5JwcHIRLOrKempaars7rHuLLX6PD3/GZFUWpj////bkgxFxBay7OrpqSkqLDL5Ma/urHR + 5e3y+UZLVf////9uYj8o5MW8tq+opaaruIEUFtbAuK+o4OLxQ0RL/////2JxXlMu1sG8tq+pqa/fEA0T + 9Ma+uLS01DU4RE3//////3F2Z1gWw8G8t7Kx1B0ICA8Vz8K+u9UdMj5H/////////3l4Z1hpw8G9usdY + CwACFxEWw8LYLCs2Rf//////////Ynl4Z1hpw8LA2A4FAAAHDBMu5CwnOEVO////////////Znl4Z2uB + z9sRCwQBAAIKDBwvMThCTP//////////////Znl2dX1rQCEaHyIZGB4rMTxBQkz///////////////// + /3GAeHReSDw3NzI6Oj1GSkr//////////////////////11xeXJuZWBcT1dXV0pK//////////////// + ////////////XGVlZGRkV0//////////////////////////////4B///wAD//4AAf/4AAB/8AAAP+AA + AB/gAAAfwAAAD4AAAAeAAAAHgAAABwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AA + AAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gAAH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvAAAALsAAAC6AAAAsgAAALEAAACwAAAArQAAAKcAAACfAAAAkwAAAH4A + AABtAAAAPAAAAKgEBAChBQUAYAMDADsCAgBVBAQAOwMDAKIMDAC0Dg4Avg8PANEWFgBoCwsA5xoaALsV + FQDFGBgAsxYWADwICACoFxcAgBISAPYuLgDfKSkA4y0tAJwfHwCyJCQAzy0tAOAxMQDzNzcA8zk5APA5 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAJGRkYLISEhHxwcHEB+FxeKtB4exd8o + KOr/ODj//0VF//9QUP//W1v//2Zm//9wcP//eHj//39///+Ghv//jIz//5GR//+Wlv//mZn/2YaG7aNo + aNJZOjquAAAAfwAAAF8AAAA7AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BZmZmBT09PRUwMDA1jB4eiMQa + Gs/0Hh75/ysr//86Ov//SEj//1ZW//9lZf//cXH//319//+Ghv//jo7//5OT//+Zmf//nZ3//6Cg//+k + pP//pqb//6en//+oqP/0oqL5tHl53F9BQbMAAAB9AAAAVgAAAC0AAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wGSkpIHSkpKH3Qp + KV66Hx++6yEh9fsmJv/9Li7//zU1//9DQ///T0///11d//9tbf//enr//4aG//+Pj///l5f//56e//+k + pP//qqr//66u//+wsP//s7P//7Oz//+zs///s7P//7Oz/+6np/ahcXHUNCYmngICAmwAAAA8AAAAFwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////AoCA + gAhEREQimyQkhNAgINz0JSX/9y0t//kvL//8MjL//zQ0//86Ov//RET//1BQ//9aWv//aGj//3R0//9/ + f///ior//5aW//+goP//qqr//7Ky//+3t///vLz//76+//++vv//vb3//7u7//+5uf//t7f/y5GR52VJ + SbcCAgJ5BAQERwAAABoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8DqqqqCU5OTiSsJSWW3CIi7O8lJf/yKir/9Ssr//cqKv/7KCj//iUl//0nJ//4MTH/9zk5//1F + Rf//UVH//19f//9ra///eHj//4WF//+Skv//np7//6mp//+zs///vLz//8LC///Fxf//xsb//8XF///C + wv//vr7//7u7/+KkpPKAXFzDAgICgAAAAEoAAAAaAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wOzs7MKWlpaIrAkJJrfISHz7CUl/+4kJP/wIiL/9B4e//YaGv/5FRX/+BER/+sS + Ev/WICD/3C0t//Q1Nf/+QkL//05O//9bW///Z2f//3V1//+Bgf//jY3//5ub//+mpv//srL//7y8//7D + w//9yMj//svL///Kyv//x8f//8LC//++vv/ura33iGNjxwQEBIAAAABGAAAAFwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////A9XV1QZsbGwariYmkNseHvPnISH/6SAg/+saGv/tFRX/8Q8P//UM + DP/xCQn/1QcH/6EPD/+KLS3/qzk5/983N//7PT3//0lJ//9WVv//YmL//2xs//94eP//hIT//4+P//+a + mv/9paX/9Kur/+Wrq//js7P/7sLC//vMzP/+zs7//8nJ///ExP//v7//7q2t94FeXsMCAgJ5AAAAPAAA + ABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Bo6OjhKoLCxz0iAg6uIbG//kGhr/5hUV/+gP + D//sCQn/7QQE/+MEBP+vAQH/WAcH/0NiYv9anJz/iG5u/8dAQP/1PT3//0ZG//9SUv//Xl7//2ho//9z + c///fHz//4aG//2QkP/wk5P/y4WF/5Rqav+QgYH/u56e/+a+vv/7zs7//8/P///Ly///xMT//76+/+Ol + pfJnSkq3AgICbAAAAC0AAAAIAAAAAAAAAAAAAAAAAAAAAP///wH///8Ev7+/DJg8PEPGISHU3Rsb/98V + Ff/hDg7/4wkJ/+YFBf/kAwP/0AEB/4MBAf8qNTX/CcDA/ybo6P9L6ur/ccDA/6NkZP/hQkL//END//9P + T///Wlr//2Rk//9ubv//eXn//4KC//aGhv/Penr/f09P/zdXV/8/u7v/esXF/7mqqv/pwcH//M7O///P + z///ysr//8PD//+9vf/LkpLnNicnngMDA1cAAAAbAAAAAwAAAAAAAAAAAAAAAP///wL///8HgICAFrch + IajZHR3/2hYW/9sNDf/dBgb/4AIC/98CAv/LAQH/cAAA/x5AQP8Dzc3/APf3/x7///9C/f3/Y/Hx/4S5 + uf/DTk7/9END//5MTP//VVX//2Bg//9qav//c3P//Hx8/+d6ev+eWVn/PCQk/w9/f/8X5ub/VvLy/4vZ + 2f/CsLD/68PD//zOzv//zs7//8jI///AwP//uLj/oXJy1AYGBn8AAAA7AAAACwAAAAAAAAAAAAAAAP// + /wTMzMwKqykpYc0eHvHVFhb/1g4O/9gGBv/aAgL/3AAA/8sAAP9+AAD/GkBA/wO8vP8A8/P/AP7+/xb/ + //81////Vf///3Lh4f+oXl7/5kRE//xGRv//UFD//1pa//9kZP//bW3/9nNz/8lmZv9kNjb/EUdH/wK5 + uf8C9/f/Ov7+/2v39/+X1NT/xrCw/+zDw//9zs7//8zM///Fxf//u7v/7qio92NGRrQDAwNgAAAAHgAA + AAIAAAAAAAAAAP///wZxcXESuyEht9EaGv/RERH/0wYG/9QBAf/XAQH/ywAA/4kAAP8YRkb/AsPD/wDv + 7/8A+fn/AP7+/xD///8o////Rv///2Px8f+JmZn/x01N//RDQ///Skr//1NT//9cXP/8ZWX/5mVl/5tJ + Sf8vGBj/A5ub/wHh4f8A+fn/Jf///0////91+Pj/mdXV/8awsP/swsL//MvL///IyP//v7///7W1/7d+ + ft0GBgaBAAAAOgAAAAoAAAAAAAAAAP///weqJiZVyR0d9MwVFf/ODAz/zgMD/84AAP+7AAD/awAA/xdD + Q/8CsrL/AN/f/wDw8P8A+fn/AP7+/wn///8c////Nv///1X9/f9y39//o2pq/+NDQ//8Q0P//0tL//9U + VP/2Wlr/y1JS/2cuLv8TKyv/ALy8/wDp6f8A+vr/FP///zX///9X////efPz/5vW1v/JsLD/7sLC//zH + x///wcH//7a2//SmpvldPz+vAwMDVwAAABYAAAAAAAAAALOzswq3IyOfyhwc/8kREf/JBwf/xQEB/6kA + AP9hAAD/Ez4+/wKNjf8AuLj/ANHR/wDm5v8A9PT/APz8/wL///8R////KP///0X///9j8vL/ipWV/8xH + R//2PDz//0FB//1JSf/pTEz/oTo6/zQVFf8FeHj/ANbW/wDv7/8A+/v/CP///x////84////V////3X1 + 9f+Zzs7/x6ys/+u9vf/8wMD//ri4//+srP+mbW3TBwcHcQYGBikAAAADAAAAAIVHRxm9ISHaxhkZ/8UM + DP/EBQX/ugAA/40AAP9BAAD/DB0d/wFqav8AnJz/ALa2/wDPz/8A4+P/APLy/wD7+/8G////G////zb/ + //9V+fn/dsLC/6lcXP/kOzv//Tc3//c+Pv/MOTn/aCEh/xI9Pf8Bv7//AObm/wD09P8A/Pz/Af///w3/ + //8a/v7/L/39/0n5+f9o7u7/j8TE/8Ojo//tt7f//Li4//+urv/bjIztFxISiwQEBD4AAAAKAAAAAKgk + JFXFIyP/wxcX/8EJCf/AAgL/twAA/5QAAP9UAAD/GgAA/wMfH/8AcnL/AJaW/wCvr/8Ax8f/ANzc/wDs + 7P8A+Pj/C/7+/yb///9G/f3/Ze3t/4WoqP/DQUH/7i8v/+cwMP+hJyf/OA8P/wZubv8A29v/AO/v/wD4 + +P8A/Pz/AP39/wD8/P8A+fn/BfX1/xXv7/8y4uL/XLq6/5qTk//drKz/+bW1//+trf//n5//ZD8/sQYG + BlEAAAASAAAAALIlJYnCISH/vhQU/74HB/+/AgL/vgAA/60AAP+FAAD/TwAA/xsAAP8DFxf/AGdn/wCM + jP8Apqb/AL29/wDT0/8A6Oj/APf3/xP+/v8z////Uv39/23c3P+eTk7/xyws/7YjI/9dEhL/E0RE/wG4 + uP8A7e3/APb2/wD5+f8A+fn/APX1/wDv7/8A5ub/ANra/wPGxv8Pqqr/N319/41sbP/epKT/+7Oz//+s + rP//np7/mFtbygoKCmIAAAAZAAAAALcoKLG/ISH/uxMT/7sHB/+9AgL/wAAA/78AAP+yAAD/jwAA/1sA + AP8nAAD/CAIC/wFHR/8Afn7/AJub/wC0tP8Az8//AObm/wD5+f8d/v7/Pf///1X09P9wjo7/gjs7/2Qg + IP8gSkr/AsvL/wDt7f8A9/f/APj4/wD39/8A8fH/AOfn/wDZ2f8Ax8f/AZub/whfX/8fOjr/Xjw8/7h5 + ef/wpqb//rGx//+qqv//nZ3/vG1t3RAQEG8AAAAgAAAAALcpKdG8IiL/uRMT/7gGBv+5AQH/vgAA/8MA + AP/EAAD/uwAA/54AAP9uAAD/PAAA/xIAAP8CKyv/AGVl/wCPj/8Ar6//AM/P/wDp6f8D+/v/Jf7+/z39 + /f9I3d3/R7Cw/zGmpv8Sy8v/APX1/wD8/P8A+/v/APn5/wDz8/8A5+f/ANDQ/wCtrf8DhIT/Ej09/zYb + G/9vODj/smFh/+aGhv/7oaH//6ur//+np///mpr/13Z26w8PD3gAAAAlAAAAALksLOe6IyP/thIS/7QE + BP+2AQH/uwAA/8AAAP/FAAD/yQAA/8UAAP+xAAD/iQAA/1cAAP8pAAD/CgAA/wFHR/8Ajo7/ALa2/wDY + 2P8A8PD/DP39/yP///8u/f3/LPj4/yD4+P8R/f3/Bf///wD///8A////APv7/wDq6v8AzMz/BISE/xIt + Lf8xFRX/ZCsr/55HR//MX1//63Nz//qDg///lpb//6Oj//+jo///lpb/63t79RQUFIAGBgYpAAAAALsx + Mfe3IiL/shAQ/7EDA/+zAQH/uAAA/70AAP/CAAD/yAAA/84AAP/OAAD/xAAA/6YAAP91AAD/OQAA/wwA + AP8BUVH/AJub/wDIyP8A5+f/APr6/w3///8Y////Gf///xP///8N////CP///wf///8I////Bubm/wKx + sf8MYWH/KxUV/2IiIv+bOjr/yU9P/+hfX//2Zmb//HBw//94eP//iYn//5mZ//+dnf//kpL/+Hx8+xUV + FYQGBgYrAAAAALs0NP60IiL/rw4O/64DA/+wAAD/tQAA/7oAAP+/AAD/xQAA/8sAAP/RAAD/1QAA/9IA + AP+2AAD/egAA/zEAAP8HDAz/AHd3/wC6uv8A4OD/APX1/wD///8J////C////wr///8H////CP///w3/ + //8T/f3/GsnJ/yZiYv9KGRn/iSgo/8Y+Pv/nTU3/9ldX//xdXf//YGD//2Rk//9tbf//fX3//46O//+X + l///jIz//nh4/xgYGIEGBgYpAAAAALo4OPezJSX/rA8P/6sCAv+tAAD/sgAA/7cAAP+8AAD/wgAA/8gA + AP/OAAD/0wAA/9gAAP/UAAD/rgAA/2gAAP8fAAD/AzU1/wChof8A4OD/APT0/wD9/f8B////A////wP/ + //8E////B////xD///8d/f3/LdfX/0h9ff+FMDD/zTc3//NDQ//9S0v//09P//9SUv//VVX//1hY//9e + Xv//cHD//4OD//+QkP//hob/+G5u/BkZGXsHBwcmAAAAALg+PuizKyv/qhIS/6gCAv+qAAD/rgAA/7MA + AP+5AAD/vgAA/8QAAP/KAAD/0AAA/9YAAP/aAAD/ygAA/5MAAP86AAD/CCUl/wCgoP8A5eX/APb2/wD9 + /f8A////AP///wD///8B////Bv///xD///8h////N/b2/1PKyv+IWlr/zz4+//k9Pf//QED//0ND//9G + Rv//SEj//0pK//9QUP//YmL//3h4//+IiP//gID/7GJi9RsbG3IICAghAAAAALZBQdOzMDD/qRUV/6UE + BP+nAQH/qwAA/7AAAP+1AAD/ugAA/8AAAP/GAAD/zAAA/9IAAP/XAAD/zQAA/5UAAP8xAAD/BWpq/wDM + zP8A8PD/APn5/wD+/v8A/v7/AP///wD9/f8A/v7/Af7+/wv///8d////N////1Ly8v9zvr7/qVtb/+g6 + Ov//NDT//zc3//86Ov//Ozv//z4+//9CQv//VVX//2tr//+AgP//eHj/3FdX6R4eHmcKCgoaAAAAALRD + Q7S0ODj/qhwc/6QICP+lAgL/pwAA/6wAAP+xAAD/tgAA/7wAAP/CAAD/yAAA/84AAP/OAAD/tAAA/1EA + AP8PTEz/AcfH/wDt7f8A9/f/APv7/wD+/v8A/f3/APv7/wD39/8A9vb/APj4/wD8/P8R/v7/Kv///0f9 + /f9k9fX/hL+//71PT//6Kir//yoq//8rK///Li7//zAw//82Nv//R0f//2Ji//91df//bm7/xUxM2iMj + I1gAAAASAAAAALFBQYq2QED/rCcn/6QPD/+jBQX/pAAA/6gAAP+tAAD/sgAA/7cAAP+9AAD/wgAA/8EA + AP+oAAD/QQAA/wx/f/8B0ND/APHx/wD4+P8A+/v/AP39/wD9/f8A+Pj/APHx/wDp6f8A5OT/AObm/wDu + 7v8A+fn/FP7+/zH///9P////bPX1/4y6uv/OQED/+x4e//8dHf//Hx///yIi//8oKP//PDz//1VV//9m + Zv//YGD/qkJCwykpKUUAAAAKAAAAALE9PU+3R0f/rS8v/6MVFf+hCAj/oQEB/6QAAP+pAAD/rQAA/7MA + AP+3AAD/tQAA/44AAP8wDw//Bqys/wDn5/8A9fX/APr6/wD8/P8A/v7/AP7+/wD5+f8A8PD/AN/f/wDL + y/8Aw8P/AMjI/wDX1/8A6Oj/APf3/xb9/f80////Uv///2719f+Ltrb/vkZG//UVFf//EBD//xUV//8b + G///MTH//0hI//9bW///Vlb/iDw8nzU1NTBAQEAEAAAAALEzMwqzRUXZsDo6/6YfH/+gDQ3/ngEB/6EA + AP+kAAD/qQAA/6sAAP+iAAD/agAA/xtDQ/8DwsL/APDw/wD6+v8A+/v/AP7+/wD+/v8A/v7/APz8/wD0 + 9P8A29v/AaWl/wFtbf8Ac3P/AJ6e/wC3t/8Azs7/AOTk/wD39/8W/v7/Nf///1H///9p9/f/f9jY/6Rt + bf/qERH//wcH//8REf//Jyf//z4+//9OTv/jSUntSzw8ak1NTR7///8B////AQAAAACwQkKbtEVF/6kq + Kv+hFBT/nQUF/5wAAP+dAAD/mAAA/4AAAP9DAAD/D2pq/wHR0f8A8/P/APv7/wD9/f8A/v7/AP///wD/ + //8A/v7/APf3/wDl5f8CoqL/Cj8//xAFBf8HERH/AVBQ/wCHh/8Ara3/AMrK/wDk5P8A9/f/Fv7+/zH/ + //9L////Xv39/27f3/+LfHz/0Rwc//oPD///IiL//zU1//9BQf+/Pz/MRkZGSWlpaRH///8B////AQAA + AACuPT1LtktL8602Nv+kHx//mgoK/5EBAf9+AAD/UgAA/yYSEv8Jb2//AcbG/wDn5/8A9fX/APv7/wD+ + /v8A////AP///wD+/v8A+/v/APHx/wHJyf8TQUH/PAAA/0oAAP8qAAD/CgEB/wFISP8AiIj/AKur/wDI + yP8A5OT/APb2/xD9/f8n/v7/Ofv7/0bv7/9XtbX/kDQ0/94aGv/6KSn//Tc3//U4OPmVQUGWXV1dLL+/ + vwgAAAAAAAAAAAAAAAAAAAAAsUZGr7JDQ/+nLS3/mxQU/4IGBv9bAQH/JQIC/wdRUf8BmJj/AMHB/wDZ + 2f8A7Oz/APj4/wD+/v8A////AP///wD9/f8A9vb/AN/f/wiPj/9MAAD/lwAA/5sAAP9wAAD/NAAA/wsA + AP8BR0f/AImJ/wCrq/8AyMj/AOTk/wD09P8C+fn/EPPz/xzX1/81e3v/iRkZ/9wbG//3Kyv/+zg4/8w5 + OdVYWFhRi4uLFv///wQAAAAAAAAAAAAAAAAAAAAArT4+UrNLS+6uPT3/nyUl/4MQEP9VBgb/IQEB/wUh + If8Aenr/AKWl/wDCwv8A29v/AO3t/wD4+P8A/v7/AP39/wD5+f8A6+v/BKqq/zMREf+pAAD/ywAA/8gA + AP+sAAD/dwAA/zcAAP8KAAD/AVFR/wCIiP8ArKz/AMnJ/wDf3/8A5ub/Ac7O/wqBgf9JBwf/sA8P/+kd + Hf/3Ly//7TY29p9CQpR0dHQus7OzCv///wMAAAAAAAAAAAAAAAAAAAAAAAAAAK9FRZu0Skr/qDY2/5Ie + Hv9sDg7/NgMD/w8AAP8CKir/AH19/wClpf8AwsL/ANzc/wDt7f8A+Pj/APn5/wDv7/8Bycn/HTs7/5UA + AP/JAAD/0gAA/9MAAP/MAAD/sQAA/3oAAP86AAD/DAAA/wFKSv8AjIz/AK+v/wDFxf8AwcH/CHx8/zUJ + Cf+SBgb/2RMT//AlJf/1MzP/wjw8xGtra0WmpqYX////BP///wEAAAAAAAAAAAAAAAAAAAAAAAAAAKo5 + OSiwSUnKsUhI/6UzM/+MHh7/YwwM/zMEBP8PAQH/Aisr/wB1df8ApaX/AMLC/wDb2/8A6+v/AO7u/wDa + 2v8Oamr/ZgAA/74AAP/LAAD/zgAA/9AAAP/RAAD/zQAA/7QAAP99AAD/PQAA/wsAAP8AWVn/AJCQ/wCe + nv8Ia2v/MwkJ/4kDA//QDQ3/6hwc//AsLP/UODjgjlJSa5WVlSTo6OgL////Av///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACtPz9ZtE9P47FHR/+kMzP/ihwc/2MODv8yBQX/DgEB/wMuLv8Afn7/AKam/wDB + wf8A19f/ANra/wSlpf88AAD/pQAA/8EAAP/FAAD/yAAA/8sAAP/NAAD/0AAA/80AAP+0AAD/dwAA/zEA + AP8GFBT/AmNj/wZhYf8wCwv/hAQE/8oLC//kGBj/7CYm/90xMe6pRESNi4uLLtLS0hH///8F////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0REdLRQUO+xSEj/ozIy/4kcHP9hDg7/MAQE/w0B + Af8CMDD/AH9//wCkpP8Aubn/Aa6u/xo8PP9+AAD/tQAA/7wAAP+/AAD/wgAA/8UAAP/IAAD/ywAA/80A + AP/JAAD/pwAA/2YAAP8tAAD/GggI/zIGBv9/AwP/xgoK/+AWFv/nJSX/4S8v9LQ8PJ6MjIwz3NzcFv// + /wr///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALBHR361U1PwskpK/6Q1 + Nf+NIiL/YxER/zMICP8QBAT/AzEx/wB0dP8Bj4//Dk1N/1sAAP+lAAD/swAA/7cAAP+6AAD/vQAA/8AA + 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 + yf+AAU3/wANP/+AHYf8= + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/TutorialWindow.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/TutorialWindow.vb new file mode 100644 index 00000000..514c54ff --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/TutorialWindow.vb @@ -0,0 +1,276 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.IO +Imports System.Runtime.InteropServices +Imports System.Windows.Forms +Imports System.Windows.Media.Media3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + +Namespace D3D10Tutorial04_WinFormsControl + ''' + ''' This application displays a 3D cube using Direct3D 10 + ''' + ''' http://msdn.microsoft.com/en-us/library/bb172488(VS.85).aspx + ''' + ''' Copyright (c) Microsoft Corporation. All rights reserved. + ''' + Partial Public Class TutorialWindow + Inherits Form + #Region "Fields" + Private device As D3DDevice + Private swapChain As SwapChain + Private renderTargetView As RenderTargetView + Private backColor_Renamed As New ColorRgba(0.0F, 0.125F, 0.3F, 1.0F) + + Private effect As Effect + Private technique As EffectTechnique + Private vertexLayout As InputLayout + Private vertexBuffer As D3DBuffer + Private indexBuffer As D3DBuffer + + Private worldVariable As EffectMatrixVariable + Private viewVariable As EffectMatrixVariable + Private projectionVariable As EffectMatrixVariable + + Private worldMatrix As Matrix4x4F + Private viewMatrix As Matrix4x4F + Private projectionMatrix As Matrix4x4F + + Private t As Single = 0f + Private dwTimeStart As UInteger = CUInt(Environment.TickCount) + Private needsResizing As Boolean + #End Region + + #Region "TutorialWindow()" + ''' + ''' Initializes a new instance of the class. + ''' + Public Sub New() + InitializeComponent() + End Sub + #End Region + + #Region "TutorialWindow_Load()" + Private Sub TutorialWindow_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load + InitDevice() + directControl.Render = AddressOf Me.RenderScene + End Sub + #End Region + + #Region "directControl_SizeChanged()" + Private Sub directControl_SizeChanged(ByVal sender As Object, ByVal e As EventArgs) Handles directControl.SizeChanged + needsResizing = True + End Sub + #End Region + + #Region "TutorialWindow_FormClosing()" + Private Sub TutorialWindow_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles MyBase.FormClosing + directControl.Render = Nothing + device.ClearState() + End Sub + #End Region + + #Region "InitDevice()" + ''' + ''' Create Direct3D device and swap chain + ''' + Protected Sub InitDevice() + device = D3DDevice.CreateDeviceAndSwapChain(directControl.Handle) + swapChain = device.SwapChain + + SetViews() + + ' Create the effect + Using effectStream As FileStream = File.OpenRead("Tutorial04.fxo") + effect = device.CreateEffectFromCompiledBinary(New BinaryReader(effectStream)) + End Using + + ' Obtain the technique + technique = effect.GetTechniqueByName("Render") + + ' Obtain the variables + worldVariable = effect.GetVariableByName("World").AsMatrix() + viewVariable = effect.GetVariableByName("View").AsMatrix() + projectionVariable = effect.GetVariableByName("Projection").AsMatrix() + + InitVertexLayout() + InitVertexBuffer() + InitIndexBuffer() + + ' Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList + + InitMatrices() + needsResizing = False + End Sub + #End Region + + #Region "SetViews()" + Private Sub SetViews() + ' Create a render target view + Using pBuffer As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(pBuffer) + End Using + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}) + + ' Setup the viewport + Dim vp As New Viewport() With {.Width = CUInt(directControl.ClientSize.Width), .Height = CUInt(directControl.ClientSize.Height), .MinDepth = 0.0f, .MaxDepth = 1.0f, .TopLeftX = 0, .TopLeftY = 0} + + device.RS.Viewports = New Viewport() {vp} + End Sub + #End Region + +#Region "InitVertexLayout()" + Private Sub InitVertexLayout() + ' Define the input layout + ' The layout determines the stride in the vertex buffer, + ' so changes in layout need to be reflected in SetVertexBuffers + Dim layout() As InputElementDescription = _ + { _ + New InputElementDescription With _ + { _ + .SemanticName = "POSITION", _ + .SemanticIndex = 0, _ + .Format = Format.R32G32B32Float, _ + .InputSlot = 0, _ + .AlignedByteOffset = 0, _ + .InputSlotClass = InputClassification.PerVertexData, _ + .InstanceDataStepRate = 0 _ + }, _ + New InputElementDescription() With _ + { _ + .SemanticName = "COLOR", _ + .SemanticIndex = 0, _ + .Format = Format.R32G32B32A32Float, _ + .InputSlot = 0, _ + .AlignedByteOffset = 12, _ + .InputSlotClass = InputClassification.PerVertexData, _ + .InstanceDataStepRate = 0 _ + } _ + } + + Dim passDesc As PassDescription = technique.GetPassByIndex(0).Description + + vertexLayout = device.CreateInputLayout(layout, passDesc.InputAssemblerInputSignature, passDesc.InputAssemblerInputSignatureSize) + + device.IA.InputLayout = vertexLayout + End Sub +#End Region + + #Region "InitVertexBuffer()" + Private Sub InitVertexBuffer() + Dim cube As New Cube() + + Dim verticesData As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Vertices)) + Marshal.StructureToPtr(cube.Vertices, verticesData, True) + + Dim bufferDesc As New BufferDescription() With _ + { _ + .Usage = Usage.Default, _ + .ByteWidth = CUInt(Marshal.SizeOf(cube.Vertices)), _ + .BindingOptions = BindingOptions.VertexBuffer, _ + .CpuAccessOptions = CpuAccessOptions.None, _ + .MiscellaneousResourceOptions = MiscellaneousResourceOptions.None _ + } + + Dim InitData As New SubresourceData() With {.SystemMemory = verticesData} + + 'D3DBuffer buffer = null; + vertexBuffer = device.CreateBuffer(bufferDesc, InitData) + + ' Set vertex buffer + Dim stride As UInteger = CUInt(Marshal.SizeOf(GetType(SimpleVertex))) + Dim offset As UInteger = 0 + device.IA.SetVertexBuffers(0, New D3DBuffer() {vertexBuffer}, New UInteger() {stride}, New UInteger() {offset}) + Marshal.FreeCoTaskMem(verticesData) + End Sub +#End Region + +#Region "InitIndexBuffer()" + Private Sub InitIndexBuffer() + Dim cube As New Cube() + + Dim indicesData As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Indices)) + Marshal.StructureToPtr(cube.Indices, indicesData, True) + + Dim bufferDesc As New BufferDescription() With {.Usage = Usage.Default, .ByteWidth = CUInt(Marshal.SizeOf(cube.Indices)), .BindingOptions = BindingOptions.IndexBuffer, .CpuAccessOptions = CpuAccessOptions.None, .MiscellaneousResourceOptions = MiscellaneousResourceOptions.None} + + Dim initData As New SubresourceData() With {.SystemMemory = indicesData} + + indexBuffer = device.CreateBuffer(bufferDesc, initData) + device.IA.IndexBuffer = New IndexBuffer(indexBuffer, Format.R32UInt, 0) + Marshal.FreeCoTaskMem(indicesData) + End Sub +#End Region + + #Region "InitMatrices()" + Private Sub InitMatrices() + ' Initialize the world matrices + worldMatrix = Matrix4x4F.Identity + + ' Initialize the view matrix + Dim Eye As New Vector3F(0.0f, 2.0f, -5.0f) + Dim At As New Vector3F(0.0f, 0.0f, 0.0f) + Dim Up As New Vector3F(0.0f, 1.0f, 0.0f) + + viewMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixLookAtLH(Eye, At, Up) + + ' Initialize the projection matrix + projectionMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixPerspectiveFovLH(CSng(Math.PI) * 0.5F, (CSng(Me.ClientSize.Width) / CSng(Me.ClientSize.Height)), 0.1F, 100.0F) + + ' Update Variables that never change + viewVariable.Matrix = viewMatrix + projectionVariable.Matrix = projectionMatrix + End Sub + #End Region + + #Region "RenderScene()" + ''' + ''' Render the frame + ''' + Protected Sub RenderScene() + If needsResizing Then + needsResizing = False + renderTargetView.Dispose() + Dim sd As SwapChainDescription = swapChain.Description + swapChain.ResizeBuffers(sd.BufferCount, CUInt(directControl.ClientSize.Width), CUInt(directControl.ClientSize.Height), sd.BufferDescription.Format, sd.Options) + SetViews() + ' Update the projection matrix + projectionMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixPerspectiveFovLH(CSng(Math.PI) * 0.5F, (CSng(directControl.ClientSize.Width) / CSng(directControl.ClientSize.Height)), 0.1F, 100.0F) + projectionVariable.Matrix = projectionMatrix + End If + t = (Environment.TickCount - dwTimeStart) / 50.0F + + ' Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor_Renamed) + + ' Rotate the cube + Dim rt As New RotateTransform3D(New AxisAngleRotation3D(New Vector3D(0, 1, 0), t)) + worldMatrix = rt.Value.ToMatrix4x4F() + + ' + ' Update variables that change once per frame + ' + worldVariable.Matrix = worldMatrix + + ' + ' Render the cube + ' + Dim techDesc As TechniqueDescription = technique.Description + + For p As UInteger = 0 To techDesc.Passes - 1UI + technique.GetPassByIndex(p).Apply() + device.DrawIndexed(36, 0, 0) + Next p + + swapChain.Present(0, PresentOptions.None) + End Sub + #End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/directx.ico b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial04_WinFormsControl/directx.ico differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/D3D10Tutorial05_WinFormsControl.vbproj b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/D3D10Tutorial05_WinFormsControl.vbproj new file mode 100644 index 00000000..6166b67b --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/D3D10Tutorial05_WinFormsControl.vbproj @@ -0,0 +1,118 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75} + WinExe + + + D3D10Tutorial05_WinFormsControl + v3.5 + On + Binary + Off + On + 512 + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + 3.0 + + + + + + 3.0 + + + + + + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + TutorialWindow.vb + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + PreserveNewest + + + PreserveNewest + + + True + Settings.settings + True + + + Form + + + TutorialWindow.vb + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/D3DStructs.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/D3DStructs.vb new file mode 100644 index 00000000..e78576f9 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/D3DStructs.vb @@ -0,0 +1,38 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Runtime.InteropServices +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D + +Namespace D3D10Tutorial05_WinFormsControl + #Region "SimpleVertex" + _ + Public Structure SimpleVertex + _ + Public Pos As Vector3F + _ + Public Color As Vector4F + End Structure + #End Region + + #Region "Cube" + Public Class Cube + Public Vertices As New CubeVertices() + Public Indices As New CubeIndices() + + _ + Public Class CubeVertices + _ + Private vertices() As SimpleVertex = { New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Color = New Vector4F (0.0f, 0.0f, 1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Color = New Vector4F (0.0f, 1.0f, 0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Color = New Vector4F (0.0f, 1.0f, 1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Color = New Vector4F (1.0f, 0.0f, 0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Color = New Vector4F (1.0f, 0.0f, 1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Color = New Vector4F (1.0f, 1.0f, 0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Color = New Vector4F (1.0f, 1.0f, 1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Color = New Vector4F (0.0f, 0.0f, 0.0f, 1.0f)} } + End Class + + _ + Public Class CubeIndices + _ + Private indices() As UInteger = { 3,1,0, 2,1,3, 0,5,4, 1,5,0, 3,4,7, 0,4,3, 1,6,5, 2,6,1, 2,7,6, 3,7,2, 6,4,5, 7,4,6 } + End Class + End Class + #End Region +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..5e2eb31a --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/My Project/AssemblyInfo.vb @@ -0,0 +1,40 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/My Project/Resources.Designer.vb new file mode 100644 index 00000000..b5a64a5f --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/My Project/Resources.Designer.vb @@ -0,0 +1,64 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My.Resources + + + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If (resourceMan Is Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/My Project/Settings.Designer.vb new file mode 100644 index 00000000..34f1fe80 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Program.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Program.vb new file mode 100644 index 00000000..29569b34 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Program.vb @@ -0,0 +1,22 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms + +Namespace D3D10Tutorial05_WinFormsControl + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New TutorialWindow()) + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Tutorial05.fx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Tutorial05.fx new file mode 100644 index 00000000..2134bec2 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Tutorial05.fx @@ -0,0 +1,63 @@ +//-------------------------------------------------------------------------------------- +// File: Tutorial05.fx +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + +//-------------------------------------------------------------------------------------- +// Constant Buffer Variables +//-------------------------------------------------------------------------------------- +matrix World; +matrix View; +matrix Projection; + +//-------------------------------------------------------------------------------------- +struct VS_INPUT +{ + float4 Pos : POSITION; + float4 Color : COLOR; +}; + +struct PS_INPUT +{ + float4 Pos : SV_POSITION; + float4 Color : COLOR; +}; + + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +PS_INPUT VS( VS_INPUT input ) +{ + PS_INPUT output = (PS_INPUT)0; + output.Pos = mul( input.Pos, World ); + output.Pos = mul( output.Pos, View ); + output.Pos = mul( output.Pos, Projection ); + output.Color = input.Color; + + return output; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( PS_INPUT input) : SV_Target +{ + return input.Color; +} + + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS() ) ); + } +} + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Tutorial05.fxo b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Tutorial05.fxo new file mode 100644 index 00000000..34736379 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/Tutorial05.fxo differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/TutorialWindow.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/TutorialWindow.Designer.vb new file mode 100644 index 00000000..e7b33d66 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/TutorialWindow.Designer.vb @@ -0,0 +1,61 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace D3D10Tutorial05_WinFormsControl + Partial Public Class TutorialWindow + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Dim resources As New System.ComponentModel.ComponentResourceManager(GetType(TutorialWindow)) + Me.directControl = New Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl() + Me.SuspendLayout() + ' + ' directControl + ' + Me.directControl.Dock = System.Windows.Forms.DockStyle.Fill + Me.directControl.Location = New System.Drawing.Point(0, 0) + Me.directControl.Name = "directControl" + Me.directControl.Size = New System.Drawing.Size(624, 442) + Me.directControl.TabIndex = 4 +' Me.directControl.SizeChanged += New System.EventHandler(Me.directControl_SizeChanged) + ' + ' TutorialWindow + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6F, 13F) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(624, 442) + Me.Controls.Add(Me.directControl) + Me.Icon = (CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)) + Me.Name = "TutorialWindow" + Me.Text = "Direct3D 10 Tutorial 5: 3D Transformation" +' Me.Load += New System.EventHandler(Me.TutorialWindow_Load) +' Me.FormClosing += New System.Windows.Forms.FormClosingEventHandler(Me.TutorialWindow_FormClosing) + Me.ResumeLayout(False) + + End Sub + + #End Region + + Private WithEvents directControl As Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl + End Class +End Namespace + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/TutorialWindow.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/TutorialWindow.resx new file mode 100644 index 00000000..0dd393c3 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/TutorialWindow.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAAABABoBgAAlgAAACAgEAAAAAQA6AIAAP4GAAAQEBAAAAAEACgBAADmCQAAMDAAAAAA + CACoDgAADgsAACAgAAAAAAgAqAgAALYZAAAQEAAAAAAIAGgFAABeIgAAMDAAAAAAIACoJQAAxicAACAg + AAAAACAAqBAAAG5NAAAQEAAAAAAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAAAA + AAD//wAA////AACAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMy2t7a2bMzMzMzMzMzMzMzMzMzMzMzMu7a3tnd2d2ZszMzMzMzMzMzMzMzMzMy7t7tr + a2dnZmZmbMzMzMzMzMzMzMzMzLu7e2tnZnZmZmZmZmzMzMzMzMzMzMzMy7u3u7e2tmdmZmZmZmbMzMzM + zMzMzMzMt7e7u3tra2Z2ZmZmZmZszMzMzMzMzMzLu7u7u7u7d7Z2ZmZmZmZmzMzMzMzMzMx7O7u7s3N7 + trd2tmZmZuZmbMzMzMzMzMu7u7uzNye7e2trZmd3ZmZmZszMzMzMzLO7u7MzqmZ3t7Z3ZrdyZmbmZmzM + zMzMy7u7s7MKqqZre2t2t3AqpmZmZmbMzMzMx7OzuzIqqqpnt7a3ZzIqamZm5mbMzMzMO7u7syKqqqpm + e3trYzKqqmZmZmZszMzMu7OzMiqqqqpqe7a2syKqqmpmZmZszMzLszszIiqqqqqmd7t7cCqqqqamZmZm + zMzHu7swAiKqqqqqZ3u3MCqqqqpqZmZmzMzLMzMzACIqKqqqZ7t7Aqqqqqqqd2ZmzMzLO7szMAIiqqqq + anszIqqqqqoid2ZmzMxzszOzMwAiIqqqpmMyKqqqqqIie2ZnbMy7O7OzszAAIiqqqqd6qqqqoiIzd2Zm + bMw3szs7OzMwAiKqqqqqqqqqIDN3tmZ2bMy7M7OzuzszACKqqqqqqqoiA3trZrZmvMxzOzOzs7O7MAIq + qqqqqqcjN7a3t2ZnfMw7M7Ozs7s7MwIqqqqqqqoje3t3a3d2fMx7OzM7O7O7MzAqqqqqqqpnt7e7trZ3 + fMy3MzOzuzuzswKqqqqqqqqme7tra2dnfMx7M7M7M7O7MwKqqqqqqqpqZ7u7u7a2vMx3szszs7OzMqqq + qqqqqqqmpnu7t7tnfMzLczM7OzswKqqqqqoqKqqqpme7u7e7zMzHOzOzMzMCqqqqqqIiKqqqpqZ7u7e2 + zMzLc7MzMzKqqqqqqiIAIiqqqmpnu7t7zMzMtzMzMCKqqqqqqgMwACIqqqqne7e8zMzMN7MzAiqqqqqq + ojMzACIqqqqnO3u8zMzMxzszACKqqqqqIDszMwIiqqIjO7vMzMzMy3MzAAIiqqqqA7O7MwAiIqIDu3vM + zMzMzHtzMwAioqqiM7s7szMCIiAzu7zMzMzMzMe3MwAiKqojM7O7O7MAIgO7u8zMzMzMzMx7MzAAIqID + O7OzuzMwAzO7vMzMzMzMzMzHdzMAAiIzszuzs7MzM7t7zMzMzMzMzMzMtzcwACMzOzM7OzuzM3u8zMzM + zMzMzMzMx7s3MDMzs7Ozs7Ozu7vMzMzMzMzMzMzMzHdzMzOzMzs7Ozs7t7zMzMzMzMzMzMzMzMy3d7cz + s7M7O3u3vMzMzMzMzMzMzMzMzMzMt3t7e3t7e7e8zMzMzMzMzMzMzMzMzMzMzMe3t7e3t8zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz///////8AAP///////wAA///AH///AAD//AAB//8AAP/w + AAB//wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/AAD8AAAAAf8AAPgAAAAA/wAA8AAAAAB/ + AADgAAAAAD8AAOAAAAAAPwAAwAAAAAAfAADAAAAAAB8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAIAA + AAAADwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAADAAAAAAB8AAMAA + AAAAHwAA4AAAAAA/AADgAAAAAD8AAPAAAAAAfwAA+AAAAAD/AAD8AAAAAf8AAP4AAAAD/wAA/wAAAAf/ + AAD/gAAAD/8AAP/AAAAf/wAA//AAAH//AAD//AAB//8AAP//gA///wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgIAAgAAAAIAAgACAgAAAwMDAAICA + gAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzLe2tmbMzMzMzMzMzMzMy3dnZ2ZmZmzMzMzMzMzMzHu7t3ZmZmZmzMzMzMzMzHu7u7 + t7a2ZmZmbMzMzMzMu7uzd3trZmZ2ZmbMzMzMy7uzMqZ7tnd3dmZmbMzMzMuzMCqma2t2cKpmZmzMzMy7 + MyKqqqe2tzKqpmZmzMzLszIqqqpmu3cKqqamZmzMyzMCIqqqpndzKqqqZmZszMszACIqqqprMKqqqqp2 + bMxzszACIiqqpzKqqqoidmbMOzszACIqqqqqqqqiA3ZmzLs7MzAAIqqqqqqiA3dmZsxzM7MzMAKqqqqq + I3trdmfMu7M7OzMAqqqqqqO3trdmzHMzs7MzAqqqqqqqe3t3a8x7OzszMqqqqqqqpme7trbMtzMzMCqq + qqqiqqqmZ7trzMtzMwKqqqqiAiKqqqZ7fMzHszAqqqqqoAAiqqqiu7zMw3MwIiqqqiMwAiqqI7e8zMy3 + MAIiqqIzMwIiIjO7zMzMx3MAIiogM7MAIiM7vMzMzMNzcAIiIzszMAIDu7zMzMzMdzMwIgM7OzMzO3vM + zMzMzMt3MwMzs7OzM7u8zMzMzMzMx3c3Mzs7O7e8zMzMzMzMzMw3e3t7e7e7zMzMzMzMzMzMzMN7e3t8 + zMzMzMzM////////////4B///wAD//4AAf/4AAB/8AAAP+AAAB/gAAAfwAAAD4AAAAeAAAAHgAAABwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AAAAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gA + AH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzM + zMzMzMzMzMzLZmbMzMzMy7e2ZmbMzMyzB3dndmzMyzKqe3CmZszDCqpnMqpmzLMyqqcKqqZsOzAqqqqi + dmwzszCqqie2bDMzMqqqZ7tsMzAqqqqme7zDAqqiAqqrzMcyqqMwojvMzHMqCzAjvMzMxzIzMzvMzMzM + xze7zMzM//+zMPg/a2vgD6pmwAfMzIADMyKAA6e2AAGqpgABzMwAATIqAAFmuwABqqaAA2zMgAMCIsAH + pnfgD6qq+D9szCgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWAAAA0QAAAM4A + AADNAAAAywAAAMgAAADGAAAAxQAAAMIAAADBAAAAvgAAALwAAAC6AAAAtwAAALUAAACzAAAAsAAAAK0A + AACpAAAApgAAAJwAAABzAAAAZwAAADwAAACiAQEAkgEBAN0CAgDAAgIAvQICAH0BAQBWAQEAzgMDAMMD + AwC/AwMAsAMDALQEBACGAwMA5wYGACUBAQDTBgYAxQYGAKQFBQDXBwcAuQcHAMAICABIAwMAMgICALQI + CACtCAgAoQcHAMcKCgD5Dg4AvgsLAOEODgDMDAwAmgoKANIPDwDFEREArQ8PAPoXFwDpFxcApBERANwY + GADJGRkA/iEhALcYGAD0IyMA1B4eAOQiIgBjDw8A7SUlABoEBAD9KioAlxkZAAwCAgClHR0A9SwsADMJ + CQDXJycAuSIiAMYoKAD+NDQAiRwcAPQ0NADnNDQA2jIyAP47OwCqKSkA9j09AP5CQgD+RkYA9ENDAP9J + SQC6NjYAyzw8AGYfHwA1EBAA/05OAPhNTQDlR0cA/1FRAKg3NwD/VVUAu0BAAEkZGQCKMDAA/1paAPZX + VwD2WloA/15eAMhLSwC3RUUA/2FhAG4qKgC/TEwA/2ZmALFHRwDoX18A9mZmALVLSwD/bGwAtk5OAMxZ + WQDmZWUAr01NAKBHRwD/cnIAt1JSADMXFwD2c3MA/3h4ACkUFAD/fX0A/4GBAOl3dwD/hoYA+oODAPaG + hgD/jY0AqF1dAGY5OQD/k5MA5oaGAMVzcwD/mZkA8JOTAP+engD/oqIA+6GhAKNpaQCEVVUA/6amAMuF + hQD/rKwA8KamAP+ysgD0q6sA/7a2APuzswD/ubkA+bW1AP++vgDgqakA/8LCAP/FxQD/yckA6Lm5AP/O + zgCOc3MA/M3NAOzCwgDDq6sAMy0tAAD+/gAA/f0AAPv7AAD5+QAA9/cAAPT0AADx8QAA7+8AAO3tAADp + 6QAA5uYAAOTkAADg4AAA398AANraAADT0wAAyckAAI6OAAB9fQABzs4AAcbGAAHCwgABuroAAbS0AAGt + rQABpKQAAZubAAGHhwAC+fkAAvf3AAF1dQAD//8AA/v7AAX19QAG//8ABubmAAJSUgAJ//8ADP//AAnA + wAAIj48ABmhoAAMxMQAQ8/MAEf7+AAqBgQAGSUkAFv7+AA+qqgAW6+sADH5+AAQoKAAWysoAHf7+ABzX + 1wAo/v4AJujoADT//wAt19cAMuLiADf29gA7/v4ABhgYAEf9/QBU/v4AUPDwAD2wsAAYREQAFj09ABAs + LABO1NQAZPDwAGr29gB29fUAPHx8AC9dXQBarq4Ac93dAIC+vgBDYmIAltTUAIeYmAAAAAAA//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////XGRqcHh+hIeK//// + //////////////////////////////////////////9ISFZaZGpzfoKEh4qNjZCSk/////////////// + ////////////////////////QEBIVlxmc36Eh4qNkJKSk5eXl5mZ//////////////////////////// + /////0xCSEhRWWFteIKHipCSk5mZm5ubm5ubm5v/////////////////////////////QkJMTFFRVllk + anN+hIqNkpmbnaGhoaGfn52d//////////////////////////9GRkxMTEhASFNYWmRteIKHjZKXm6Gj + pKSko6Gfn////////////////////////0ZGRkJCOzszPENVU1lhanN+hYqQl5uho6WlpaSjoZ////// + ////////////////REREPDwzMzMqPWllVVZcZnB4goeKkJecoqaqqaelpKGf//////////////////9E + Pjw8NSUlJRAe/PmoXlhaZG1zfoSHipGYqKirpqmnpaShn////////////////04+PjUlJSUBJKzU5e77 + lWNZYWpzeIKFiY+W+O/7q6qpp6WjoZ3/////////////TkM+NRoaGgQV8MCx4uz0+3JbYWZweH6Ehous + 397u/auqqaeloZ+b////////////Qz44KhoaBB3xw7Kt3Obt+otjWmRqc3iBeozww8rq9f2rqqmnpJ+b + //////////9OQzgnAAAEJPDCtLCt2eTs9P5uW1xkanN7fYDHubDk7fb9q6qppaGdm/////////9DPzYf + AgsW8MS6s7Ct0uLm7fqVY1lcZmx6cfLDtq/c5u32/auqpKOdmf///////1A/OSgHEhbxvsO8t7KuzNnk + 7PT+blhZXGNlgMu8tK/S4urt9v2rpqGfmZf//////1A/MigMGRfr1sfEwLizr8/i5u37i1RRWF5f8cK3 + sq6t0+Lm7PT7q6afmZP//////1A/LBsNGR5H68vHxcG7tbDT5Oz0/mdMVFdg1ru0sK6urrDO3uj5/qKg + mZL//////085LBsKESQeR+vWvsbDvLax2ebt+n1QT0Xww7WxsLCytLe7wd33qKKemZL/////UE9BKxwJ + Cg8ZHiZK27/HxMC3sOLq7v5pX/C9tbGwsbO3u8HH1vGMj5qbmZKN////UE9BKwwKCAcLFBUXSuDWvsXA + ts3k6vPv7+Gyrq+wsrfAxcjxgIyLjpSZl5CK////UE9BIw0LCQcFBxAkHiZK277Eu7PT5OTk4tnPra2v + tsDI8oBxfXqGiI2Tk42H////XU86Ig8NCggFAgIHExUXStHHvbev09zc2dPSz9LQxNaDX2VudXZ+goeQ + ko2E////XU86IhAODAoHBAEAAQ0dLkrLw7myrdLT0s/S09nh+GhpXmNrbXBzeISKkIqC////XU86EREP + DQsIBQIBAAARFibXxrmyrq3MzMzP2eLn92leW1xhZGZqbX6Fiod+////Z1c6EhIRDwwKBwQBAAAEGRfg + xrexrq2tra3P2eLp85ZeWFlZWlxcZHCCh4V4////b109KRMREA4MCQYDAQADGS7WwLOwra2trq2t0+Lm + 7vuLVFFRVlZWWWZ4hYJz////b11LMRMTERANCwgFAgIOHtvBtbGvra6vsbGwrtnk7PX7ckhISEhRUVpw + fnhw////b2dXPSkTEhEPDQoICRIX38CzsK+urrCztri3tLDc5u31+15AQEBASFZmc3Bw/////29XPTEY + ExIRDw0OGWDFt7Kvrq2tsLO6vcK9u7ax3Obt9ftvOzM7O1Fcamb//////29lSz0UGBMSERgW8MKzr6+t + ra2usrvG1svHw8C4sdzm7fX6lTwzM0hWYWT//////29vVz0xFBQUHS3WvLKvrq2tra2xt8bxSuvRyMW9 + uLHc5uzt+qhDM0BRWWT///////93ZUs3GR0eg9bBt7Kvra2tra+zvfEXLSZK28jFvbix2eTq7vlpPkhR + Vv////////90b1dJJB4m0cfCu7Wwra2trrG61S0UFBUuStvIxb24ssnY4/dSPkxWWv//////////d2VX + Uh4m4L/Gwru1sK2usLXFYBIEBREVF0rRyMW9urfA2i06PExW////////////dHdlSUUuSuC/xsK7tbCw + tL3xGQUBAQMQHRdK277FwcLfTRk+RlNi/////////////3d0ZVJFLkrgy8bCu7W0u9YWCgQCAQEDDh0X + StG+x9ZNJDg8TFj///////////////95dGVSRS5K17/Gwru7xhcTCQcFBAMBAw4VLuvW1k0kNjxGU/// + ////////////////f3RlUkUuSte/xsPF8R0OCwoIBwUEAwUTFi5HTR0yPkRU//////////////////// + /393ZVJFTUrXy77bHhMPDQwKCQgHBQQJFBUWJDQ+RFT///////////////////////9/eWVpX2BH8tsX + GRIRDw4NCwoJBwYFITA6OUNEVP//////////////////////////eXl0aXFoYC0dGBMSERAPDQwLCiAo + Mjk/Q05V/////////////////////////////3d/fH1pcVJLPTowMDAvLys0NDk/P05OVVX///////// + ////////////////////////d398dGVlV1dPQUFBQU9PUFBQUFVV//////////////////////////// + //////////90eX95b2dnZ11dXV5eXl5eXv////////////////////////////////////////////9v + cnJycnJubm5eXv////////////////////////////////////////////////////////////////// + ////////////////////////////////AAD///////8AAP//wB///wAA//wAAf//AAD/8AAAf/8AAP/A + AAAf/wAA/4AAAA//AAD/AAAAB/8AAP4AAAAD/wAA/AAAAAH/AAD4AAAAAP8AAPAAAAAAfwAA4AAAAAA/ + AADgAAAAAD8AAMAAAAAAHwAAwAAAAAAfAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAAAA + AAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAgAAAAAAPAACAAAAAAA8AAIAAAAAADwAAwAAAAAAfAADAAAAAAB8AAOAA + AAAAPwAA4AAAAAA/AADwAAAAAH8AAPgAAAAA/wAA/AAAAAH/AAD+AAAAA/8AAP8AAAAH/wAA/4AAAA// + AAD/wAAAH/8AAP/wAAB//wAA//wAAf//AAD//4AP//8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAC9AAAAuwAAALkAAAC2AAAAswAAALEAAAClAAAAowAAAKEA + AACcAAAAkQAAAG0AAABpAAAAZAAAAF0AAABYAAAANgAAADAAAAAqAAAAIgAAABMAAAAHAAAAhgEBAL8C + AgC8AgIAqAICAKECAgBPAQEAQgEBALsDAwCyAwMArQMDAH0CAgC3BAQAiwMDALMFBQC8BwcA3AkJAKUH + BwBVBAQAzgsLALwKCgCqCQkAOwMDAOgNDQAPAQEAXQcHAJcMDACgDg4AvBISAPkaGgDNFhYAWwoKAOcb + GwC2FhYA2hwcAKsXFwDDGxsAuxwcALUbGwDKICAA8ycnAJMZGQBFDAwA0yYmAOUtLQC2JCQA/TQ0APAy + MgDGLCwA+Do6AKwoKAD/PDwA1TMzAP8+PgDpOjoA/0REAPBAQADIOTkAwDc3AP9KSgC3NTUATRcXANdC + QgD/T08A+E1NAM1AQAAqDQ0A5khIACYMDADxTU0Avj09AKw5OQCVMTEA/1VVAMFCQgC6QUEAsT4+AP9b + WwDISUkAvkZGALFCQgBpJycAzU1NAAgDAwD/YmIANBQUAOhcXAD/ZmYAu0tLAPhnZwD/a2sAs0xMALxR + UQD/cnIAkUFBAHk2NgCkS0sA/3Z2AJtISAC2VVUAzmNjAP98fADodXUASyYmAP+EhAD2gYEAqFlZABYM + DAD/jIwAm1hYAGc7OwD+k5MAqmNjANJ9fQD/mpoA/56eAP+iogD/qKgA/6qqAN6WlgD/ra0A+6qqAP+w + sABzUVEA/7i4AOurqwD/u7sA/729APK3twCFZWUA/8PDAL6RkQD/ysoA16urAPXExAD3ysoAwqamAMyx + sQAhHR0AKScnAB0cHAAA//8AAP39AAD7+wAA+PgAAPb2AAD19QAA8/MAAPHxAADv7wAA7e0AAOrqAADm + 5gAA5OQAAOPjAADh4QAA398AAN3dAADY2AAA19cAAM3NAADLywAAx8cAAMPDAADBwQAAtbUAALCwAACt + rQAAqakAAKamAACjowAAlZUAAJKSAABmZgAAZGQAAY2NAAGCggACvLwAA/7+AAPs7AADwsIAApycAAT8 + /AAEtLQABK6uAAJcXAAEl5cAB/n5AAf09AAG2NgABaKiAASRkQADbGwACPX1AAR4eAAJ/v4ADv//AAZm + ZgAQ+voACpycABT//wALiooAFfT0ABz9/QAe6OgAI/39AAk6OgAs/f0ALu7uACKurgAz/f0AHo+PADz8 + /AA86+sAPNXVAEn9/QBG7+8AInBwAFL+/gA2oaEAVPX1AF/9/QAECgoAYOTkAFzT0wBr8fEAaM7OAGO8 + vABx1dUAgN7eAHzIyACQ5eUAfpeXAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////9janB3foKFiP////////////// + /////////////0lJUWNzfoWIiouMjI6Q//////////////////////9ERERJUWNwe4KJjpKUlZSS//// + //////////////9FPj4zMzZKTlVqc36IjJSYmpiVlP//////////////QjY2LSkwdf5XTV9te4KFjZmb + nJqYlP///////////0I2LSYfHOfr9YBOX213f4eR8fienZqYlP//////////OCYZIWvH3Ojz/GhVanN8 + g6HT6vufnZqV/////////zgpGx3ftqrZ5fD3hltjb3p91a3j8/2fnZiS//////9BNCAc1ry3r6bh6vP8 + aF9sdKK3q9rq8/2fnJKQ/////z0yIxPPwby3rqbj7feDWWR90LCqpOHq8vuelo7/////PSoXERbDwr24 + sajl8PliXqK0rKmoqcni7P6bjP///0Y6KgkNExbExb+6s9Lo7pF9yqioqa2zts3pl5OMif//RjolBAoO + ExbPxsC5sNzl5uLZo6WpsLrGoISHj4uF//9GOyIDBAoMERX02Lu0qdrh3trZzK7Uon10en+JioL//1A8 + JAQCAwcXDxMWxbWrpNna2t7g71NeaGxvd4KIfv//XEMgBgQBAAMJDRTktaqlo8jZ3uPsdVRWX19qe4V3 + //9lQysgBgMBAAkQgb2tqKamqKjR4er2dk5LTVVwfnP//2VSORogBgYLHd20q6emp6ywsq7S5fD6gFdF + SWNzbf//YWE5JwcHIRLOrKempaars7rHuLLX6PD3/GZFUWpj////bkgxFxBay7OrpqSkqLDL5Ma/urHR + 5e3y+UZLVf////9uYj8o5MW8tq+opaaruIEUFtbAuK+o4OLxQ0RL/////2JxXlMu1sG8tq+pqa/fEA0T + 9Ma+uLS01DU4RE3//////3F2Z1gWw8G8t7Kx1B0ICA8Vz8K+u9UdMj5H/////////3l4Z1hpw8G9usdY + CwACFxEWw8LYLCs2Rf//////////Ynl4Z1hpw8LA2A4FAAAHDBMu5CwnOEVO////////////Znl4Z2uB + z9sRCwQBAAIKDBwvMThCTP//////////////Znl2dX1rQCEaHyIZGB4rMTxBQkz///////////////// + /3GAeHReSDw3NzI6Oj1GSkr//////////////////////11xeXJuZWBcT1dXV0pK//////////////// + ////////////XGVlZGRkV0//////////////////////////////4B///wAD//4AAf/4AAB/8AAAP+AA + AB/gAAAfwAAAD4AAAAeAAAAHgAAABwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AA + AAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gAAH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvAAAALsAAAC6AAAAsgAAALEAAACwAAAArQAAAKcAAACfAAAAkwAAAH4A + AABtAAAAPAAAAKgEBAChBQUAYAMDADsCAgBVBAQAOwMDAKIMDAC0Dg4Avg8PANEWFgBoCwsA5xoaALsV + FQDFGBgAsxYWADwICACoFxcAgBISAPYuLgDfKSkA4y0tAJwfHwCyJCQAzy0tAOAxMQDzNzcA8zk5APA5 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAJGRkYLISEhHxwcHEB+FxeKtB4exd8o + KOr/ODj//0VF//9QUP//W1v//2Zm//9wcP//eHj//39///+Ghv//jIz//5GR//+Wlv//mZn/2YaG7aNo + aNJZOjquAAAAfwAAAF8AAAA7AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BZmZmBT09PRUwMDA1jB4eiMQa + Gs/0Hh75/ysr//86Ov//SEj//1ZW//9lZf//cXH//319//+Ghv//jo7//5OT//+Zmf//nZ3//6Cg//+k + pP//pqb//6en//+oqP/0oqL5tHl53F9BQbMAAAB9AAAAVgAAAC0AAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wGSkpIHSkpKH3Qp + KV66Hx++6yEh9fsmJv/9Li7//zU1//9DQ///T0///11d//9tbf//enr//4aG//+Pj///l5f//56e//+k + pP//qqr//66u//+wsP//s7P//7Oz//+zs///s7P//7Oz/+6np/ahcXHUNCYmngICAmwAAAA8AAAAFwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////AoCA + gAhEREQimyQkhNAgINz0JSX/9y0t//kvL//8MjL//zQ0//86Ov//RET//1BQ//9aWv//aGj//3R0//9/ + f///ior//5aW//+goP//qqr//7Ky//+3t///vLz//76+//++vv//vb3//7u7//+5uf//t7f/y5GR52VJ + SbcCAgJ5BAQERwAAABoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8DqqqqCU5OTiSsJSWW3CIi7O8lJf/yKir/9Ssr//cqKv/7KCj//iUl//0nJ//4MTH/9zk5//1F + Rf//UVH//19f//9ra///eHj//4WF//+Skv//np7//6mp//+zs///vLz//8LC///Fxf//xsb//8XF///C + wv//vr7//7u7/+KkpPKAXFzDAgICgAAAAEoAAAAaAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wOzs7MKWlpaIrAkJJrfISHz7CUl/+4kJP/wIiL/9B4e//YaGv/5FRX/+BER/+sS + Ev/WICD/3C0t//Q1Nf/+QkL//05O//9bW///Z2f//3V1//+Bgf//jY3//5ub//+mpv//srL//7y8//7D + w//9yMj//svL///Kyv//x8f//8LC//++vv/ura33iGNjxwQEBIAAAABGAAAAFwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////A9XV1QZsbGwariYmkNseHvPnISH/6SAg/+saGv/tFRX/8Q8P//UM + DP/xCQn/1QcH/6EPD/+KLS3/qzk5/983N//7PT3//0lJ//9WVv//YmL//2xs//94eP//hIT//4+P//+a + mv/9paX/9Kur/+Wrq//js7P/7sLC//vMzP/+zs7//8nJ///ExP//v7//7q2t94FeXsMCAgJ5AAAAPAAA + ABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Bo6OjhKoLCxz0iAg6uIbG//kGhr/5hUV/+gP + D//sCQn/7QQE/+MEBP+vAQH/WAcH/0NiYv9anJz/iG5u/8dAQP/1PT3//0ZG//9SUv//Xl7//2ho//9z + c///fHz//4aG//2QkP/wk5P/y4WF/5Rqav+QgYH/u56e/+a+vv/7zs7//8/P///Ly///xMT//76+/+Ol + pfJnSkq3AgICbAAAAC0AAAAIAAAAAAAAAAAAAAAAAAAAAP///wH///8Ev7+/DJg8PEPGISHU3Rsb/98V + Ff/hDg7/4wkJ/+YFBf/kAwP/0AEB/4MBAf8qNTX/CcDA/ybo6P9L6ur/ccDA/6NkZP/hQkL//END//9P + T///Wlr//2Rk//9ubv//eXn//4KC//aGhv/Penr/f09P/zdXV/8/u7v/esXF/7mqqv/pwcH//M7O///P + z///ysr//8PD//+9vf/LkpLnNicnngMDA1cAAAAbAAAAAwAAAAAAAAAAAAAAAP///wL///8HgICAFrch + IajZHR3/2hYW/9sNDf/dBgb/4AIC/98CAv/LAQH/cAAA/x5AQP8Dzc3/APf3/x7///9C/f3/Y/Hx/4S5 + uf/DTk7/9END//5MTP//VVX//2Bg//9qav//c3P//Hx8/+d6ev+eWVn/PCQk/w9/f/8X5ub/VvLy/4vZ + 2f/CsLD/68PD//zOzv//zs7//8jI///AwP//uLj/oXJy1AYGBn8AAAA7AAAACwAAAAAAAAAAAAAAAP// + /wTMzMwKqykpYc0eHvHVFhb/1g4O/9gGBv/aAgL/3AAA/8sAAP9+AAD/GkBA/wO8vP8A8/P/AP7+/xb/ + //81////Vf///3Lh4f+oXl7/5kRE//xGRv//UFD//1pa//9kZP//bW3/9nNz/8lmZv9kNjb/EUdH/wK5 + uf8C9/f/Ov7+/2v39/+X1NT/xrCw/+zDw//9zs7//8zM///Fxf//u7v/7qio92NGRrQDAwNgAAAAHgAA + AAIAAAAAAAAAAP///wZxcXESuyEht9EaGv/RERH/0wYG/9QBAf/XAQH/ywAA/4kAAP8YRkb/AsPD/wDv + 7/8A+fn/AP7+/xD///8o////Rv///2Px8f+JmZn/x01N//RDQ///Skr//1NT//9cXP/8ZWX/5mVl/5tJ + Sf8vGBj/A5ub/wHh4f8A+fn/Jf///0////91+Pj/mdXV/8awsP/swsL//MvL///IyP//v7///7W1/7d+ + ft0GBgaBAAAAOgAAAAoAAAAAAAAAAP///weqJiZVyR0d9MwVFf/ODAz/zgMD/84AAP+7AAD/awAA/xdD + Q/8CsrL/AN/f/wDw8P8A+fn/AP7+/wn///8c////Nv///1X9/f9y39//o2pq/+NDQ//8Q0P//0tL//9U + VP/2Wlr/y1JS/2cuLv8TKyv/ALy8/wDp6f8A+vr/FP///zX///9X////efPz/5vW1v/JsLD/7sLC//zH + x///wcH//7a2//SmpvldPz+vAwMDVwAAABYAAAAAAAAAALOzswq3IyOfyhwc/8kREf/JBwf/xQEB/6kA + AP9hAAD/Ez4+/wKNjf8AuLj/ANHR/wDm5v8A9PT/APz8/wL///8R////KP///0X///9j8vL/ipWV/8xH + R//2PDz//0FB//1JSf/pTEz/oTo6/zQVFf8FeHj/ANbW/wDv7/8A+/v/CP///x////84////V////3X1 + 9f+Zzs7/x6ys/+u9vf/8wMD//ri4//+srP+mbW3TBwcHcQYGBikAAAADAAAAAIVHRxm9ISHaxhkZ/8UM + DP/EBQX/ugAA/40AAP9BAAD/DB0d/wFqav8AnJz/ALa2/wDPz/8A4+P/APLy/wD7+/8G////G////zb/ + //9V+fn/dsLC/6lcXP/kOzv//Tc3//c+Pv/MOTn/aCEh/xI9Pf8Bv7//AObm/wD09P8A/Pz/Af///w3/ + //8a/v7/L/39/0n5+f9o7u7/j8TE/8Ojo//tt7f//Li4//+urv/bjIztFxISiwQEBD4AAAAKAAAAAKgk + JFXFIyP/wxcX/8EJCf/AAgL/twAA/5QAAP9UAAD/GgAA/wMfH/8AcnL/AJaW/wCvr/8Ax8f/ANzc/wDs + 7P8A+Pj/C/7+/yb///9G/f3/Ze3t/4WoqP/DQUH/7i8v/+cwMP+hJyf/OA8P/wZubv8A29v/AO/v/wD4 + +P8A/Pz/AP39/wD8/P8A+fn/BfX1/xXv7/8y4uL/XLq6/5qTk//drKz/+bW1//+trf//n5//ZD8/sQYG + BlEAAAASAAAAALIlJYnCISH/vhQU/74HB/+/AgL/vgAA/60AAP+FAAD/TwAA/xsAAP8DFxf/AGdn/wCM + jP8Apqb/AL29/wDT0/8A6Oj/APf3/xP+/v8z////Uv39/23c3P+eTk7/xyws/7YjI/9dEhL/E0RE/wG4 + uP8A7e3/APb2/wD5+f8A+fn/APX1/wDv7/8A5ub/ANra/wPGxv8Pqqr/N319/41sbP/epKT/+7Oz//+s + rP//np7/mFtbygoKCmIAAAAZAAAAALcoKLG/ISH/uxMT/7sHB/+9AgL/wAAA/78AAP+yAAD/jwAA/1sA + AP8nAAD/CAIC/wFHR/8Afn7/AJub/wC0tP8Az8//AObm/wD5+f8d/v7/Pf///1X09P9wjo7/gjs7/2Qg + IP8gSkr/AsvL/wDt7f8A9/f/APj4/wD39/8A8fH/AOfn/wDZ2f8Ax8f/AZub/whfX/8fOjr/Xjw8/7h5 + ef/wpqb//rGx//+qqv//nZ3/vG1t3RAQEG8AAAAgAAAAALcpKdG8IiL/uRMT/7gGBv+5AQH/vgAA/8MA + AP/EAAD/uwAA/54AAP9uAAD/PAAA/xIAAP8CKyv/AGVl/wCPj/8Ar6//AM/P/wDp6f8D+/v/Jf7+/z39 + /f9I3d3/R7Cw/zGmpv8Sy8v/APX1/wD8/P8A+/v/APn5/wDz8/8A5+f/ANDQ/wCtrf8DhIT/Ej09/zYb + G/9vODj/smFh/+aGhv/7oaH//6ur//+np///mpr/13Z26w8PD3gAAAAlAAAAALksLOe6IyP/thIS/7QE + BP+2AQH/uwAA/8AAAP/FAAD/yQAA/8UAAP+xAAD/iQAA/1cAAP8pAAD/CgAA/wFHR/8Ajo7/ALa2/wDY + 2P8A8PD/DP39/yP///8u/f3/LPj4/yD4+P8R/f3/Bf///wD///8A////APv7/wDq6v8AzMz/BISE/xIt + Lf8xFRX/ZCsr/55HR//MX1//63Nz//qDg///lpb//6Oj//+jo///lpb/63t79RQUFIAGBgYpAAAAALsx + Mfe3IiL/shAQ/7EDA/+zAQH/uAAA/70AAP/CAAD/yAAA/84AAP/OAAD/xAAA/6YAAP91AAD/OQAA/wwA + AP8BUVH/AJub/wDIyP8A5+f/APr6/w3///8Y////Gf///xP///8N////CP///wf///8I////Bubm/wKx + sf8MYWH/KxUV/2IiIv+bOjr/yU9P/+hfX//2Zmb//HBw//94eP//iYn//5mZ//+dnf//kpL/+Hx8+xUV + FYQGBgYrAAAAALs0NP60IiL/rw4O/64DA/+wAAD/tQAA/7oAAP+/AAD/xQAA/8sAAP/RAAD/1QAA/9IA + AP+2AAD/egAA/zEAAP8HDAz/AHd3/wC6uv8A4OD/APX1/wD///8J////C////wr///8H////CP///w3/ + //8T/f3/GsnJ/yZiYv9KGRn/iSgo/8Y+Pv/nTU3/9ldX//xdXf//YGD//2Rk//9tbf//fX3//46O//+X + l///jIz//nh4/xgYGIEGBgYpAAAAALo4OPezJSX/rA8P/6sCAv+tAAD/sgAA/7cAAP+8AAD/wgAA/8gA + AP/OAAD/0wAA/9gAAP/UAAD/rgAA/2gAAP8fAAD/AzU1/wChof8A4OD/APT0/wD9/f8B////A////wP/ + //8E////B////xD///8d/f3/LdfX/0h9ff+FMDD/zTc3//NDQ//9S0v//09P//9SUv//VVX//1hY//9e + Xv//cHD//4OD//+QkP//hob/+G5u/BkZGXsHBwcmAAAAALg+PuizKyv/qhIS/6gCAv+qAAD/rgAA/7MA + AP+5AAD/vgAA/8QAAP/KAAD/0AAA/9YAAP/aAAD/ygAA/5MAAP86AAD/CCUl/wCgoP8A5eX/APb2/wD9 + /f8A////AP///wD///8B////Bv///xD///8h////N/b2/1PKyv+IWlr/zz4+//k9Pf//QED//0ND//9G + Rv//SEj//0pK//9QUP//YmL//3h4//+IiP//gID/7GJi9RsbG3IICAghAAAAALZBQdOzMDD/qRUV/6UE + BP+nAQH/qwAA/7AAAP+1AAD/ugAA/8AAAP/GAAD/zAAA/9IAAP/XAAD/zQAA/5UAAP8xAAD/BWpq/wDM + zP8A8PD/APn5/wD+/v8A/v7/AP///wD9/f8A/v7/Af7+/wv///8d////N////1Ly8v9zvr7/qVtb/+g6 + Ov//NDT//zc3//86Ov//Ozv//z4+//9CQv//VVX//2tr//+AgP//eHj/3FdX6R4eHmcKCgoaAAAAALRD + Q7S0ODj/qhwc/6QICP+lAgL/pwAA/6wAAP+xAAD/tgAA/7wAAP/CAAD/yAAA/84AAP/OAAD/tAAA/1EA + AP8PTEz/AcfH/wDt7f8A9/f/APv7/wD+/v8A/f3/APv7/wD39/8A9vb/APj4/wD8/P8R/v7/Kv///0f9 + /f9k9fX/hL+//71PT//6Kir//yoq//8rK///Li7//zAw//82Nv//R0f//2Ji//91df//bm7/xUxM2iMj + I1gAAAASAAAAALFBQYq2QED/rCcn/6QPD/+jBQX/pAAA/6gAAP+tAAD/sgAA/7cAAP+9AAD/wgAA/8EA + AP+oAAD/QQAA/wx/f/8B0ND/APHx/wD4+P8A+/v/AP39/wD9/f8A+Pj/APHx/wDp6f8A5OT/AObm/wDu + 7v8A+fn/FP7+/zH///9P////bPX1/4y6uv/OQED/+x4e//8dHf//Hx///yIi//8oKP//PDz//1VV//9m + Zv//YGD/qkJCwykpKUUAAAAKAAAAALE9PU+3R0f/rS8v/6MVFf+hCAj/oQEB/6QAAP+pAAD/rQAA/7MA + AP+3AAD/tQAA/44AAP8wDw//Bqys/wDn5/8A9fX/APr6/wD8/P8A/v7/AP7+/wD5+f8A8PD/AN/f/wDL + y/8Aw8P/AMjI/wDX1/8A6Oj/APf3/xb9/f80////Uv///2719f+Ltrb/vkZG//UVFf//EBD//xUV//8b + G///MTH//0hI//9bW///Vlb/iDw8nzU1NTBAQEAEAAAAALEzMwqzRUXZsDo6/6YfH/+gDQ3/ngEB/6EA + AP+kAAD/qQAA/6sAAP+iAAD/agAA/xtDQ/8DwsL/APDw/wD6+v8A+/v/AP7+/wD+/v8A/v7/APz8/wD0 + 9P8A29v/AaWl/wFtbf8Ac3P/AJ6e/wC3t/8Azs7/AOTk/wD39/8W/v7/Nf///1H///9p9/f/f9jY/6Rt + bf/qERH//wcH//8REf//Jyf//z4+//9OTv/jSUntSzw8ak1NTR7///8B////AQAAAACwQkKbtEVF/6kq + Kv+hFBT/nQUF/5wAAP+dAAD/mAAA/4AAAP9DAAD/D2pq/wHR0f8A8/P/APv7/wD9/f8A/v7/AP///wD/ + //8A/v7/APf3/wDl5f8CoqL/Cj8//xAFBf8HERH/AVBQ/wCHh/8Ara3/AMrK/wDk5P8A9/f/Fv7+/zH/ + //9L////Xv39/27f3/+LfHz/0Rwc//oPD///IiL//zU1//9BQf+/Pz/MRkZGSWlpaRH///8B////AQAA + AACuPT1LtktL8602Nv+kHx//mgoK/5EBAf9+AAD/UgAA/yYSEv8Jb2//AcbG/wDn5/8A9fX/APv7/wD+ + /v8A////AP///wD+/v8A+/v/APHx/wHJyf8TQUH/PAAA/0oAAP8qAAD/CgEB/wFISP8AiIj/AKur/wDI + yP8A5OT/APb2/xD9/f8n/v7/Ofv7/0bv7/9XtbX/kDQ0/94aGv/6KSn//Tc3//U4OPmVQUGWXV1dLL+/ + vwgAAAAAAAAAAAAAAAAAAAAAsUZGr7JDQ/+nLS3/mxQU/4IGBv9bAQH/JQIC/wdRUf8BmJj/AMHB/wDZ + 2f8A7Oz/APj4/wD+/v8A////AP///wD9/f8A9vb/AN/f/wiPj/9MAAD/lwAA/5sAAP9wAAD/NAAA/wsA + AP8BR0f/AImJ/wCrq/8AyMj/AOTk/wD09P8C+fn/EPPz/xzX1/81e3v/iRkZ/9wbG//3Kyv/+zg4/8w5 + OdVYWFhRi4uLFv///wQAAAAAAAAAAAAAAAAAAAAArT4+UrNLS+6uPT3/nyUl/4MQEP9VBgb/IQEB/wUh + If8Aenr/AKWl/wDCwv8A29v/AO3t/wD4+P8A/v7/AP39/wD5+f8A6+v/BKqq/zMREf+pAAD/ywAA/8gA + AP+sAAD/dwAA/zcAAP8KAAD/AVFR/wCIiP8ArKz/AMnJ/wDf3/8A5ub/Ac7O/wqBgf9JBwf/sA8P/+kd + Hf/3Ly//7TY29p9CQpR0dHQus7OzCv///wMAAAAAAAAAAAAAAAAAAAAAAAAAAK9FRZu0Skr/qDY2/5Ie + Hv9sDg7/NgMD/w8AAP8CKir/AH19/wClpf8AwsL/ANzc/wDt7f8A+Pj/APn5/wDv7/8Bycn/HTs7/5UA + AP/JAAD/0gAA/9MAAP/MAAD/sQAA/3oAAP86AAD/DAAA/wFKSv8AjIz/AK+v/wDFxf8AwcH/CHx8/zUJ + Cf+SBgb/2RMT//AlJf/1MzP/wjw8xGtra0WmpqYX////BP///wEAAAAAAAAAAAAAAAAAAAAAAAAAAKo5 + OSiwSUnKsUhI/6UzM/+MHh7/YwwM/zMEBP8PAQH/Aisr/wB1df8ApaX/AMLC/wDb2/8A6+v/AO7u/wDa + 2v8Oamr/ZgAA/74AAP/LAAD/zgAA/9AAAP/RAAD/zQAA/7QAAP99AAD/PQAA/wsAAP8AWVn/AJCQ/wCe + nv8Ia2v/MwkJ/4kDA//QDQ3/6hwc//AsLP/UODjgjlJSa5WVlSTo6OgL////Av///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACtPz9ZtE9P47FHR/+kMzP/ihwc/2MODv8yBQX/DgEB/wMuLv8Afn7/AKam/wDB + wf8A19f/ANra/wSlpf88AAD/pQAA/8EAAP/FAAD/yAAA/8sAAP/NAAD/0AAA/80AAP+0AAD/dwAA/zEA + AP8GFBT/AmNj/wZhYf8wCwv/hAQE/8oLC//kGBj/7CYm/90xMe6pRESNi4uLLtLS0hH///8F////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0REdLRQUO+xSEj/ozIy/4kcHP9hDg7/MAQE/w0B + Af8CMDD/AH9//wCkpP8Aubn/Aa6u/xo8PP9+AAD/tQAA/7wAAP+/AAD/wgAA/8UAAP/IAAD/ywAA/80A + AP/JAAD/pwAA/2YAAP8tAAD/GggI/zIGBv9/AwP/xgoK/+AWFv/nJSX/4S8v9LQ8PJ6MjIwz3NzcFv// + /wr///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALBHR361U1PwskpK/6Q1 + Nf+NIiL/YxER/zMICP8QBAT/AzEx/wB0dP8Bj4//Dk1N/1sAAP+lAAD/swAA/7cAAP+6AAD/vQAA/8AA + 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 + yf+AAU3/wANP/+AHYf8= + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/TutorialWindow.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/TutorialWindow.vb new file mode 100644 index 00000000..0cf01b69 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/TutorialWindow.vb @@ -0,0 +1,284 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.IO +Imports System.Runtime.InteropServices +Imports System.Windows.Forms +Imports System.Windows.Media.Media3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + +Namespace D3D10Tutorial05_WinFormsControl + ''' + ''' This application demonstrates animation using matrix transformations + ''' + ''' http://msdn.microsoft.com/en-us/library/bb172489(VS.85).aspx + ''' + ''' Copyright (c) Microsoft Corporation. All rights reserved. + ''' + Partial Public Class TutorialWindow + Inherits Form + #Region "Fields" + Private device As D3DDevice + Private swapChain As SwapChain + Private renderTargetView As RenderTargetView + Private depthStencil As Texture2D + Private depthStencilView As DepthStencilView + Private backColor_Renamed As New ColorRgba(0.0F, 0.125F, 0.3F, 1.0F) + + Private effect As Effect + Private technique As EffectTechnique + Private vertexLayout As InputLayout + Private vertexBuffer As D3DBuffer + Private indexBuffer As D3DBuffer + + Private worldVariable As EffectMatrixVariable + Private viewVariable As EffectMatrixVariable + Private projectionVariable As EffectMatrixVariable + + Private cube As New Cube() + + Private viewMatrix As Matrix4x4F + Private projectionMatrix As Matrix4x4F + + Private t As Single = 0f + Private dwTimeStart As UInteger = CUInt(Environment.TickCount) + Private needsResizing As Boolean + #End Region + + #Region "TutorialWindow()" + ''' + ''' Initializes a new instance of the class. + ''' + Public Sub New() + InitializeComponent() + End Sub + #End Region + + #Region "TutorialWindow_Load()" + Private Sub TutorialWindow_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load + InitDevice() + directControl.Render = AddressOf Me.RenderScene + End Sub + #End Region + + #Region "directControl_SizeChanged()" + Private Sub directControl_SizeChanged(ByVal sender As Object, ByVal e As EventArgs) Handles directControl.SizeChanged + needsResizing = True + End Sub + #End Region + + #Region "TutorialWindow_FormClosing()" + Private Sub TutorialWindow_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles MyBase.FormClosing + directControl.Render = Nothing + device.ClearState() + End Sub + #End Region + + #Region "InitDevice()" + ''' + ''' Create Direct3D device and swap chain + ''' + Protected Sub InitDevice() + device = D3DDevice.CreateDeviceAndSwapChain(directControl.Handle) + swapChain = device.SwapChain + + SetViews() + + ' Create the effect + Using effectStream As FileStream = File.OpenRead("Tutorial05.fxo") + effect = device.CreateEffectFromCompiledBinary(New BinaryReader(effectStream)) + End Using + + ' Obtain the technique + technique = effect.GetTechniqueByName("Render") + + ' Obtain the variables + worldVariable = effect.GetVariableByName("World").AsMatrix() + viewVariable = effect.GetVariableByName("View").AsMatrix() + projectionVariable = effect.GetVariableByName("Projection").AsMatrix() + + InitVertexLayout() + InitVertexBuffer() + InitIndexBuffer() + + ' Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList + + InitMatrices() + needsResizing = False + End Sub + #End Region + + #Region "SetViews()" + Private Sub SetViews() + ' Create a render target view + Using pBuffer As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(pBuffer) + End Using + + ' Create depth stencil texture + Dim descDepth As New Texture2DDescription() With {.Width = CUInt(directControl.ClientSize.Width), .Height = CUInt(directControl.ClientSize.Height), .MipLevels = 1, .ArraySize = 1, .Format = Format.D32Float, .SampleDescription = New SampleDescription() With {.Count = 1, .Quality = 0}, .BindingOptions = BindingOptions.DepthStencil} + + depthStencil = device.CreateTexture2D(descDepth) + + ' Create the depth stencil view + Dim depthStencilViewDesc As New DepthStencilViewDescription() With {.Format = descDepth.Format, .ViewDimension = DepthStencilViewDimension.Texture2D} + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc) + + 'bind the views to the device + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}, depthStencilView) + + ' Setup the viewport + Dim vp As New Viewport() With {.Width = CUInt(directControl.ClientSize.Width), .Height = CUInt(directControl.ClientSize.Height), .MinDepth = 0.0F, .MaxDepth = 1.0F, .TopLeftX = 0, .TopLeftY = 0} + + device.RS.Viewports = New Viewport() {vp} + End Sub +#End Region + +#Region "InitVertexLayout()" + Private Sub InitVertexLayout() + ' Define the input layout + ' The layout determines the stride in the vertex buffer, + ' so changes in layout need to be reflected in SetVertexBuffers + Dim layout() As InputElementDescription = {New InputElementDescription() With {.SemanticName = "POSITION", .SemanticIndex = 0, .Format = Format.R32G32B32Float, .InputSlot = 0, .AlignedByteOffset = 0, .InputSlotClass = InputClassification.PerVertexData, .InstanceDataStepRate = 0}, New InputElementDescription() With {.SemanticName = "COLOR", .SemanticIndex = 0, .Format = Format.R32G32B32A32Float, .InputSlot = 0, .AlignedByteOffset = 12, .InputSlotClass = InputClassification.PerVertexData, .InstanceDataStepRate = 0}} + + Dim passDesc As PassDescription = technique.GetPassByIndex(0).Description + + vertexLayout = device.CreateInputLayout(layout, passDesc.InputAssemblerInputSignature, passDesc.InputAssemblerInputSignatureSize) + + device.IA.InputLayout = vertexLayout + End Sub +#End Region + +#Region "InitVertexBuffer()" + Private Sub InitVertexBuffer() + Dim verticesData As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Vertices)) + Marshal.StructureToPtr(cube.Vertices, verticesData, True) + + Dim bufferDesc As New BufferDescription() With {.Usage = Usage.Default, .ByteWidth = CUInt(Marshal.SizeOf(cube.Vertices)), .BindingOptions = BindingOptions.VertexBuffer, .CpuAccessOptions = CpuAccessOptions.None, .MiscellaneousResourceOptions = MiscellaneousResourceOptions.None} + + Dim InitData As New SubresourceData() With {.SystemMemory = verticesData} + + 'D3DBuffer buffer = null; + vertexBuffer = device.CreateBuffer(bufferDesc, InitData) + + ' Set vertex buffer + Dim stride As UInteger = CUInt(Marshal.SizeOf(GetType(SimpleVertex))) + Dim offset As UInteger = 0 + device.IA.SetVertexBuffers(0, New D3DBuffer() {vertexBuffer}, New UInteger() {stride}, New UInteger() {offset}) + Marshal.FreeCoTaskMem(verticesData) + End Sub +#End Region + +#Region "InitIndexBuffer()" + Private Sub InitIndexBuffer() + Dim indicesData As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Indices)) + Marshal.StructureToPtr(cube.Indices, indicesData, True) + + Dim bufferDesc As New BufferDescription() With {.Usage = Usage.Default, .ByteWidth = CUInt(Marshal.SizeOf(cube.Indices)), .BindingOptions = BindingOptions.IndexBuffer, .CpuAccessOptions = CpuAccessOptions.None, .MiscellaneousResourceOptions = MiscellaneousResourceOptions.None} + + Dim initData As New SubresourceData() With {.SystemMemory = indicesData} + + indexBuffer = device.CreateBuffer(bufferDesc, initData) + device.IA.IndexBuffer = New IndexBuffer(indexBuffer, Format.R32UInt, 0) + Marshal.FreeCoTaskMem(indicesData) + End Sub +#End Region + + #Region "InitMatrices()" + Private Sub InitMatrices() + ' Initialize the view matrix + Dim Eye As New Vector3F(0.0f, 4.0f, -10.0f) + Dim At As New Vector3F(0.0f, 0.0f, 0.0f) + Dim Up As New Vector3F(0.0f, 1.0f, 0.0f) + + viewMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixLookAtLH(Eye, At, Up) + + ' Initialize the projection matrix + projectionMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixPerspectiveFovLH(CSng(Math.PI) * 0.25F, (CSng(Me.ClientSize.Width) / CSng(Me.ClientSize.Height)), 0.1F, 100.0F) + + ' Update Variables that never change + viewVariable.Matrix = viewMatrix + projectionVariable.Matrix = projectionMatrix + End Sub + #End Region + + #Region "RenderScene()" + ''' + ''' Render the frame + ''' + Protected Sub RenderScene() + If needsResizing Then + needsResizing = False + renderTargetView.Dispose() + Dim sd As SwapChainDescription = swapChain.Description + swapChain.ResizeBuffers(sd.BufferCount, CUInt(directControl.ClientSize.Width), CUInt(directControl.ClientSize.Height), sd.BufferDescription.Format, sd.Options) + SetViews() + ' Update the projection matrix + projectionMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixPerspectiveFovLH(CSng(Math.PI) * 0.25F, (CSng(directControl.ClientSize.Width) / CSng(directControl.ClientSize.Height)), 0.1F, 100.0F) + projectionVariable.Matrix = projectionMatrix + End If + Dim worldMatrix1 As Matrix4x4F + Dim worldMatrix2 As Matrix4x4F + + t = (Environment.TickCount - dwTimeStart) / 50.0f + + ' 1st Cube: Rotate around the origin + 'WPF transforms used here use degrees as opposed to D3DX which uses radians in the native tutorial + '360 degrees == 2 * Math.PI + 'world1 matrix rotates the first cube by t degrees + Dim rt1 As New RotateTransform3D(New AxisAngleRotation3D(New Vector3D(0, 1, 0), t)) + worldMatrix1 = rt1.Value.ToMatrix4x4F() + + ' 2nd Cube: Rotate around the 1st cube + Dim tg As New Transform3DGroup() + 'spin the cube + tg.Children.Add(New RotateTransform3D(New AxisAngleRotation3D(New Vector3D(0, 0, 1), -t))) + 'scale it down + tg.Children.Add(New ScaleTransform3D(0.3, 0.3, 0.3)) + 'translate it (move to orbit) + tg.Children.Add(New TranslateTransform3D(-4, 0, 0)) + 'orbit around the big cube + tg.Children.Add(New RotateTransform3D(New AxisAngleRotation3D(New Vector3D(0, 1, 0), -2 * t))) + worldMatrix2 = tg.Value.ToMatrix4x4F() + + ' Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor_Renamed) + + ' Clear the depth buffer to 1.0 (max depth) + device.ClearDepthStencilView(depthStencilView, ClearOptions.Depth, 1.0F, CByte(0)) + + Dim techDesc As TechniqueDescription = technique.Description + + ' + ' Update variables that change once per frame + ' + worldVariable.Matrix = worldMatrix1 + + ' + ' Render the 1st cube + ' + For p As UInteger = 0 To techDesc.Passes - 1UI + technique.GetPassByIndex(p).Apply() + device.DrawIndexed(36, 0, 0) + Next p + + ' + ' Render the 2nd cube + ' + worldVariable.Matrix = worldMatrix2 + For p As UInteger = 0 To techDesc.Passes - 1UI + technique.GetPassByIndex(p).Apply() + device.DrawIndexed(36, 0, 0) + Next p + + swapChain.Present(0, PresentOptions.None) + End Sub + #End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/directx.ico b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial05_WinFormsControl/directx.ico differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/D3D10Tutorial06_WinFormsControl.vbproj b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/D3D10Tutorial06_WinFormsControl.vbproj new file mode 100644 index 00000000..3aaeb2e2 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/D3D10Tutorial06_WinFormsControl.vbproj @@ -0,0 +1,118 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {43D713E1-7B99-4C89-8B31-A2210392B284} + WinExe + + + D3D10Tutorial06_WinFormsControl + v3.5 + On + Binary + Off + On + 512 + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + 3.0 + + + + + + 3.0 + + + + + + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + TutorialWindow.vb + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + PreserveNewest + + + PreserveNewest + + + True + Settings.settings + True + + + Form + + + TutorialWindow.vb + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/D3DStructs.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/D3DStructs.vb new file mode 100644 index 00000000..b843da51 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/D3DStructs.vb @@ -0,0 +1,38 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Runtime.InteropServices +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D + +Namespace D3D10Tutorial06_WinFormsControl + #Region "SimpleVertex" + _ + Public Structure SimpleVertex + _ + Public Pos As Vector3F + _ + Public Normal As Vector3F + End Structure + #End Region + + #Region "Cube" + Public Class Cube + Public Vertices As New CubeVertices() + Public Indices As New CubeIndices() + + _ + Public Class CubeVertices + _ + Private vertices() As SimpleVertex = { New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Normal = New Vector3F (0.0f, 1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Normal = New Vector3F (0.0f, 1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Normal = New Vector3F (0.0f, 1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Normal = New Vector3F (0.0f, 1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Normal = New Vector3F (0.0f, -1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Normal = New Vector3F (0.0f, -1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Normal = New Vector3F (0.0f, -1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Normal = New Vector3F (0.0f, -1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Normal = New Vector3F (-1.0f, 0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Normal = New Vector3F (-1.0f, 0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Normal = New Vector3F (-1.0f, 0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Normal = New Vector3F (-1.0f, 0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Normal = New Vector3F (1.0f, 0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Normal = New Vector3F (1.0f, 0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Normal = New Vector3F (1.0f, 0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Normal = New Vector3F (1.0f, 0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Normal = New Vector3F (0.0f, 0.0f, -1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Normal = New Vector3F (0.0f, 0.0f, -1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Normal = New Vector3F (0.0f, 0.0f, -1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Normal = New Vector3F (0.0f, 0.0f, -1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Normal = New Vector3F (0.0f, 0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Normal = New Vector3F (0.0f, 0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Normal = New Vector3F (0.0f, 0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Normal = New Vector3F (0.0f, 0.0f, 1.0f)} } + End Class + + _ + Public Class CubeIndices + _ + Private indices() As UInteger = { 3,1,0, 2,1,3, 6,4,5, 7,4,6, 11,9,8, 10,9,11, 14,12,13, 15,12,14, 19,17,16, 18,17,19, 22,20,21, 23,20,22 } + End Class + End Class + #End Region +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..c1ba4165 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/My Project/AssemblyInfo.vb @@ -0,0 +1,40 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/My Project/Resources.Designer.vb new file mode 100644 index 00000000..b5a64a5f --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/My Project/Resources.Designer.vb @@ -0,0 +1,64 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My.Resources + + + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If (resourceMan Is Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/My Project/Settings.Designer.vb new file mode 100644 index 00000000..34f1fe80 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Program.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Program.vb new file mode 100644 index 00000000..d1b08030 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Program.vb @@ -0,0 +1,22 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms + +Namespace D3D10Tutorial06_WinFormsControl + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New TutorialWindow()) + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Tutorial06.fx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Tutorial06.fx new file mode 100644 index 00000000..0542b0d4 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Tutorial06.fx @@ -0,0 +1,96 @@ +//-------------------------------------------------------------------------------------- +// File: Tutorial06.fx +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + + +//-------------------------------------------------------------------------------------- +// Constant Buffer Variables +//-------------------------------------------------------------------------------------- +matrix World; +matrix View; +matrix Projection; +float4 vLightDir[2]; +float4 vLightColor[2]; +float4 vOutputColor; + + +//-------------------------------------------------------------------------------------- +struct VS_INPUT +{ + float4 Pos : POSITION; + float3 Norm : NORMAL; +}; + +struct PS_INPUT +{ + float4 Pos : SV_POSITION; + float3 Norm : TEXCOORD0; +}; + + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +PS_INPUT VS( VS_INPUT input ) +{ + PS_INPUT output = (PS_INPUT)0; + output.Pos = mul( input.Pos, World ); + output.Pos = mul( output.Pos, View ); + output.Pos = mul( output.Pos, Projection ); + output.Norm = mul( input.Norm, World ); + + return output; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( PS_INPUT input) : SV_Target +{ + float4 finalColor = 0; + + //do NdotL lighting for 2 lights + for(int i=0; i<2; i++) + { + finalColor += saturate( dot( (float3)vLightDir[i],input.Norm) * vLightColor[i] ); + } + finalColor.a = 1; + return finalColor; +} + + +//-------------------------------------------------------------------------------------- +// PSSolid - render a solid color +//-------------------------------------------------------------------------------------- +float4 PSSolid( PS_INPUT input) : SV_Target +{ + return vOutputColor; +} + + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS() ) ); + } +} + + +//-------------------------------------------------------------------------------------- +technique10 RenderLight +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PSSolid() ) ); + } +} + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Tutorial06.fxo b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Tutorial06.fxo new file mode 100644 index 00000000..0bfc8607 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/Tutorial06.fxo differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/TutorialWindow.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/TutorialWindow.Designer.vb new file mode 100644 index 00000000..5e84d2e4 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/TutorialWindow.Designer.vb @@ -0,0 +1,60 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace D3D10Tutorial06_WinFormsControl + Partial Public Class TutorialWindow + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Dim resources As New System.ComponentModel.ComponentResourceManager(GetType(TutorialWindow)) + Me.directControl = New Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl() + Me.SuspendLayout() + ' + ' directControl + ' + Me.directControl.Dock = System.Windows.Forms.DockStyle.Fill + Me.directControl.Location = New System.Drawing.Point(0, 0) + Me.directControl.Name = "directControl" + Me.directControl.Size = New System.Drawing.Size(624, 442) + Me.directControl.TabIndex = 4 +' Me.directControl.SizeChanged += New System.EventHandler(Me.directControl_SizeChanged) + ' + ' TutorialWindow + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6F, 13F) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(624, 442) + Me.Controls.Add(Me.directControl) + Me.Icon = (CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)) + Me.Name = "TutorialWindow" + Me.Text = "Direct3D 10 Tutorial 6: Lighting" +' Me.Load += New System.EventHandler(Me.TutorialWindow_Load) + Me.ResumeLayout(False) + + End Sub + + #End Region + + Private WithEvents directControl As Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl + End Class +End Namespace + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/TutorialWindow.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/TutorialWindow.resx new file mode 100644 index 00000000..0dd393c3 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/TutorialWindow.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAAABABoBgAAlgAAACAgEAAAAAQA6AIAAP4GAAAQEBAAAAAEACgBAADmCQAAMDAAAAAA + CACoDgAADgsAACAgAAAAAAgAqAgAALYZAAAQEAAAAAAIAGgFAABeIgAAMDAAAAAAIACoJQAAxicAACAg + AAAAACAAqBAAAG5NAAAQEAAAAAAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAAAA + AAD//wAA////AACAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMy2t7a2bMzMzMzMzMzMzMzMzMzMzMzMu7a3tnd2d2ZszMzMzMzMzMzMzMzMzMy7t7tr + a2dnZmZmbMzMzMzMzMzMzMzMzLu7e2tnZnZmZmZmZmzMzMzMzMzMzMzMy7u3u7e2tmdmZmZmZmbMzMzM + zMzMzMzMt7e7u3tra2Z2ZmZmZmZszMzMzMzMzMzLu7u7u7u7d7Z2ZmZmZmZmzMzMzMzMzMx7O7u7s3N7 + trd2tmZmZuZmbMzMzMzMzMu7u7uzNye7e2trZmd3ZmZmZszMzMzMzLO7u7MzqmZ3t7Z3ZrdyZmbmZmzM + zMzMy7u7s7MKqqZre2t2t3AqpmZmZmbMzMzMx7OzuzIqqqpnt7a3ZzIqamZm5mbMzMzMO7u7syKqqqpm + e3trYzKqqmZmZmZszMzMu7OzMiqqqqpqe7a2syKqqmpmZmZszMzLszszIiqqqqqmd7t7cCqqqqamZmZm + zMzHu7swAiKqqqqqZ3u3MCqqqqpqZmZmzMzLMzMzACIqKqqqZ7t7Aqqqqqqqd2ZmzMzLO7szMAIiqqqq + anszIqqqqqoid2ZmzMxzszOzMwAiIqqqpmMyKqqqqqIie2ZnbMy7O7OzszAAIiqqqqd6qqqqoiIzd2Zm + bMw3szs7OzMwAiKqqqqqqqqqIDN3tmZ2bMy7M7OzuzszACKqqqqqqqoiA3trZrZmvMxzOzOzs7O7MAIq + qqqqqqcjN7a3t2ZnfMw7M7Ozs7s7MwIqqqqqqqoje3t3a3d2fMx7OzM7O7O7MzAqqqqqqqpnt7e7trZ3 + fMy3MzOzuzuzswKqqqqqqqqme7tra2dnfMx7M7M7M7O7MwKqqqqqqqpqZ7u7u7a2vMx3szszs7OzMqqq + qqqqqqqmpnu7t7tnfMzLczM7OzswKqqqqqoqKqqqpme7u7e7zMzHOzOzMzMCqqqqqqIiKqqqpqZ7u7e2 + zMzLc7MzMzKqqqqqqiIAIiqqqmpnu7t7zMzMtzMzMCKqqqqqqgMwACIqqqqne7e8zMzMN7MzAiqqqqqq + ojMzACIqqqqnO3u8zMzMxzszACKqqqqqIDszMwIiqqIjO7vMzMzMy3MzAAIiqqqqA7O7MwAiIqIDu3vM + zMzMzHtzMwAioqqiM7s7szMCIiAzu7zMzMzMzMe3MwAiKqojM7O7O7MAIgO7u8zMzMzMzMx7MzAAIqID + O7OzuzMwAzO7vMzMzMzMzMzHdzMAAiIzszuzs7MzM7t7zMzMzMzMzMzMtzcwACMzOzM7OzuzM3u8zMzM + zMzMzMzMx7s3MDMzs7Ozs7Ozu7vMzMzMzMzMzMzMzHdzMzOzMzs7Ozs7t7zMzMzMzMzMzMzMzMy3d7cz + s7M7O3u3vMzMzMzMzMzMzMzMzMzMt3t7e3t7e7e8zMzMzMzMzMzMzMzMzMzMzMe3t7e3t8zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz///////8AAP///////wAA///AH///AAD//AAB//8AAP/w + AAB//wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/AAD8AAAAAf8AAPgAAAAA/wAA8AAAAAB/ + AADgAAAAAD8AAOAAAAAAPwAAwAAAAAAfAADAAAAAAB8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAIAA + AAAADwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAADAAAAAAB8AAMAA + AAAAHwAA4AAAAAA/AADgAAAAAD8AAPAAAAAAfwAA+AAAAAD/AAD8AAAAAf8AAP4AAAAD/wAA/wAAAAf/ + AAD/gAAAD/8AAP/AAAAf/wAA//AAAH//AAD//AAB//8AAP//gA///wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgIAAgAAAAIAAgACAgAAAwMDAAICA + gAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzLe2tmbMzMzMzMzMzMzMy3dnZ2ZmZmzMzMzMzMzMzHu7t3ZmZmZmzMzMzMzMzHu7u7 + t7a2ZmZmbMzMzMzMu7uzd3trZmZ2ZmbMzMzMy7uzMqZ7tnd3dmZmbMzMzMuzMCqma2t2cKpmZmzMzMy7 + MyKqqqe2tzKqpmZmzMzLszIqqqpmu3cKqqamZmzMyzMCIqqqpndzKqqqZmZszMszACIqqqprMKqqqqp2 + bMxzszACIiqqpzKqqqoidmbMOzszACIqqqqqqqqiA3ZmzLs7MzAAIqqqqqqiA3dmZsxzM7MzMAKqqqqq + I3trdmfMu7M7OzMAqqqqqqO3trdmzHMzs7MzAqqqqqqqe3t3a8x7OzszMqqqqqqqpme7trbMtzMzMCqq + qqqiqqqmZ7trzMtzMwKqqqqiAiKqqqZ7fMzHszAqqqqqoAAiqqqiu7zMw3MwIiqqqiMwAiqqI7e8zMy3 + MAIiqqIzMwIiIjO7zMzMx3MAIiogM7MAIiM7vMzMzMNzcAIiIzszMAIDu7zMzMzMdzMwIgM7OzMzO3vM + zMzMzMt3MwMzs7OzM7u8zMzMzMzMx3c3Mzs7O7e8zMzMzMzMzMw3e3t7e7e7zMzMzMzMzMzMzMN7e3t8 + zMzMzMzM////////////4B///wAD//4AAf/4AAB/8AAAP+AAAB/gAAAfwAAAD4AAAAeAAAAHgAAABwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AAAAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gA + AH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzM + zMzMzMzMzMzLZmbMzMzMy7e2ZmbMzMyzB3dndmzMyzKqe3CmZszDCqpnMqpmzLMyqqcKqqZsOzAqqqqi + dmwzszCqqie2bDMzMqqqZ7tsMzAqqqqme7zDAqqiAqqrzMcyqqMwojvMzHMqCzAjvMzMxzIzMzvMzMzM + xze7zMzM//+zMPg/a2vgD6pmwAfMzIADMyKAA6e2AAGqpgABzMwAATIqAAFmuwABqqaAA2zMgAMCIsAH + pnfgD6qq+D9szCgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWAAAA0QAAAM4A + AADNAAAAywAAAMgAAADGAAAAxQAAAMIAAADBAAAAvgAAALwAAAC6AAAAtwAAALUAAACzAAAAsAAAAK0A + AACpAAAApgAAAJwAAABzAAAAZwAAADwAAACiAQEAkgEBAN0CAgDAAgIAvQICAH0BAQBWAQEAzgMDAMMD + AwC/AwMAsAMDALQEBACGAwMA5wYGACUBAQDTBgYAxQYGAKQFBQDXBwcAuQcHAMAICABIAwMAMgICALQI + CACtCAgAoQcHAMcKCgD5Dg4AvgsLAOEODgDMDAwAmgoKANIPDwDFEREArQ8PAPoXFwDpFxcApBERANwY + GADJGRkA/iEhALcYGAD0IyMA1B4eAOQiIgBjDw8A7SUlABoEBAD9KioAlxkZAAwCAgClHR0A9SwsADMJ + CQDXJycAuSIiAMYoKAD+NDQAiRwcAPQ0NADnNDQA2jIyAP47OwCqKSkA9j09AP5CQgD+RkYA9ENDAP9J + SQC6NjYAyzw8AGYfHwA1EBAA/05OAPhNTQDlR0cA/1FRAKg3NwD/VVUAu0BAAEkZGQCKMDAA/1paAPZX + VwD2WloA/15eAMhLSwC3RUUA/2FhAG4qKgC/TEwA/2ZmALFHRwDoX18A9mZmALVLSwD/bGwAtk5OAMxZ + WQDmZWUAr01NAKBHRwD/cnIAt1JSADMXFwD2c3MA/3h4ACkUFAD/fX0A/4GBAOl3dwD/hoYA+oODAPaG + hgD/jY0AqF1dAGY5OQD/k5MA5oaGAMVzcwD/mZkA8JOTAP+engD/oqIA+6GhAKNpaQCEVVUA/6amAMuF + hQD/rKwA8KamAP+ysgD0q6sA/7a2APuzswD/ubkA+bW1AP++vgDgqakA/8LCAP/FxQD/yckA6Lm5AP/O + zgCOc3MA/M3NAOzCwgDDq6sAMy0tAAD+/gAA/f0AAPv7AAD5+QAA9/cAAPT0AADx8QAA7+8AAO3tAADp + 6QAA5uYAAOTkAADg4AAA398AANraAADT0wAAyckAAI6OAAB9fQABzs4AAcbGAAHCwgABuroAAbS0AAGt + rQABpKQAAZubAAGHhwAC+fkAAvf3AAF1dQAD//8AA/v7AAX19QAG//8ABubmAAJSUgAJ//8ADP//AAnA + wAAIj48ABmhoAAMxMQAQ8/MAEf7+AAqBgQAGSUkAFv7+AA+qqgAW6+sADH5+AAQoKAAWysoAHf7+ABzX + 1wAo/v4AJujoADT//wAt19cAMuLiADf29gA7/v4ABhgYAEf9/QBU/v4AUPDwAD2wsAAYREQAFj09ABAs + LABO1NQAZPDwAGr29gB29fUAPHx8AC9dXQBarq4Ac93dAIC+vgBDYmIAltTUAIeYmAAAAAAA//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////XGRqcHh+hIeK//// + //////////////////////////////////////////9ISFZaZGpzfoKEh4qNjZCSk/////////////// + ////////////////////////QEBIVlxmc36Eh4qNkJKSk5eXl5mZ//////////////////////////// + /////0xCSEhRWWFteIKHipCSk5mZm5ubm5ubm5v/////////////////////////////QkJMTFFRVllk + anN+hIqNkpmbnaGhoaGfn52d//////////////////////////9GRkxMTEhASFNYWmRteIKHjZKXm6Gj + pKSko6Gfn////////////////////////0ZGRkJCOzszPENVU1lhanN+hYqQl5uho6WlpaSjoZ////// + ////////////////REREPDwzMzMqPWllVVZcZnB4goeKkJecoqaqqaelpKGf//////////////////9E + Pjw8NSUlJRAe/PmoXlhaZG1zfoSHipGYqKirpqmnpaShn////////////////04+PjUlJSUBJKzU5e77 + lWNZYWpzeIKFiY+W+O/7q6qpp6WjoZ3/////////////TkM+NRoaGgQV8MCx4uz0+3JbYWZweH6Ehous + 397u/auqqaeloZ+b////////////Qz44KhoaBB3xw7Kt3Obt+otjWmRqc3iBeozww8rq9f2rqqmnpJ+b + //////////9OQzgnAAAEJPDCtLCt2eTs9P5uW1xkanN7fYDHubDk7fb9q6qppaGdm/////////9DPzYf + AgsW8MS6s7Ct0uLm7fqVY1lcZmx6cfLDtq/c5u32/auqpKOdmf///////1A/OSgHEhbxvsO8t7KuzNnk + 7PT+blhZXGNlgMu8tK/S4urt9v2rpqGfmZf//////1A/MigMGRfr1sfEwLizr8/i5u37i1RRWF5f8cK3 + sq6t0+Lm7PT7q6afmZP//////1A/LBsNGR5H68vHxcG7tbDT5Oz0/mdMVFdg1ru0sK6urrDO3uj5/qKg + mZL//////085LBsKESQeR+vWvsbDvLax2ebt+n1QT0Xww7WxsLCytLe7wd33qKKemZL/////UE9BKxwJ + Cg8ZHiZK27/HxMC3sOLq7v5pX/C9tbGwsbO3u8HH1vGMj5qbmZKN////UE9BKwwKCAcLFBUXSuDWvsXA + ts3k6vPv7+Gyrq+wsrfAxcjxgIyLjpSZl5CK////UE9BIw0LCQcFBxAkHiZK277Eu7PT5OTk4tnPra2v + tsDI8oBxfXqGiI2Tk42H////XU86Ig8NCggFAgIHExUXStHHvbev09zc2dPSz9LQxNaDX2VudXZ+goeQ + ko2E////XU86IhAODAoHBAEAAQ0dLkrLw7myrdLT0s/S09nh+GhpXmNrbXBzeISKkIqC////XU86EREP + DQsIBQIBAAARFibXxrmyrq3MzMzP2eLn92leW1xhZGZqbX6Fiod+////Z1c6EhIRDwwKBwQBAAAEGRfg + xrexrq2tra3P2eLp85ZeWFlZWlxcZHCCh4V4////b109KRMREA4MCQYDAQADGS7WwLOwra2trq2t0+Lm + 7vuLVFFRVlZWWWZ4hYJz////b11LMRMTERANCwgFAgIOHtvBtbGvra6vsbGwrtnk7PX7ckhISEhRUVpw + fnhw////b2dXPSkTEhEPDQoICRIX38CzsK+urrCztri3tLDc5u31+15AQEBASFZmc3Bw/////29XPTEY + ExIRDw0OGWDFt7Kvrq2tsLO6vcK9u7ax3Obt9ftvOzM7O1Fcamb//////29lSz0UGBMSERgW8MKzr6+t + ra2usrvG1svHw8C4sdzm7fX6lTwzM0hWYWT//////29vVz0xFBQUHS3WvLKvrq2tra2xt8bxSuvRyMW9 + uLHc5uzt+qhDM0BRWWT///////93ZUs3GR0eg9bBt7Kvra2tra+zvfEXLSZK28jFvbix2eTq7vlpPkhR + Vv////////90b1dJJB4m0cfCu7Wwra2trrG61S0UFBUuStvIxb24ssnY4/dSPkxWWv//////////d2VX + Uh4m4L/Gwru1sK2usLXFYBIEBREVF0rRyMW9urfA2i06PExW////////////dHdlSUUuSuC/xsK7tbCw + tL3xGQUBAQMQHRdK277FwcLfTRk+RlNi/////////////3d0ZVJFLkrgy8bCu7W0u9YWCgQCAQEDDh0X + StG+x9ZNJDg8TFj///////////////95dGVSRS5K17/Gwru7xhcTCQcFBAMBAw4VLuvW1k0kNjxGU/// + ////////////////f3RlUkUuSte/xsPF8R0OCwoIBwUEAwUTFi5HTR0yPkRU//////////////////// + /393ZVJFTUrXy77bHhMPDQwKCQgHBQQJFBUWJDQ+RFT///////////////////////9/eWVpX2BH8tsX + GRIRDw4NCwoJBwYFITA6OUNEVP//////////////////////////eXl0aXFoYC0dGBMSERAPDQwLCiAo + Mjk/Q05V/////////////////////////////3d/fH1pcVJLPTowMDAvLys0NDk/P05OVVX///////// + ////////////////////////d398dGVlV1dPQUFBQU9PUFBQUFVV//////////////////////////// + //////////90eX95b2dnZ11dXV5eXl5eXv////////////////////////////////////////////9v + cnJycnJubm5eXv////////////////////////////////////////////////////////////////// + ////////////////////////////////AAD///////8AAP//wB///wAA//wAAf//AAD/8AAAf/8AAP/A + AAAf/wAA/4AAAA//AAD/AAAAB/8AAP4AAAAD/wAA/AAAAAH/AAD4AAAAAP8AAPAAAAAAfwAA4AAAAAA/ + AADgAAAAAD8AAMAAAAAAHwAAwAAAAAAfAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAAAA + AAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAgAAAAAAPAACAAAAAAA8AAIAAAAAADwAAwAAAAAAfAADAAAAAAB8AAOAA + AAAAPwAA4AAAAAA/AADwAAAAAH8AAPgAAAAA/wAA/AAAAAH/AAD+AAAAA/8AAP8AAAAH/wAA/4AAAA// + AAD/wAAAH/8AAP/wAAB//wAA//wAAf//AAD//4AP//8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAC9AAAAuwAAALkAAAC2AAAAswAAALEAAAClAAAAowAAAKEA + AACcAAAAkQAAAG0AAABpAAAAZAAAAF0AAABYAAAANgAAADAAAAAqAAAAIgAAABMAAAAHAAAAhgEBAL8C + AgC8AgIAqAICAKECAgBPAQEAQgEBALsDAwCyAwMArQMDAH0CAgC3BAQAiwMDALMFBQC8BwcA3AkJAKUH + BwBVBAQAzgsLALwKCgCqCQkAOwMDAOgNDQAPAQEAXQcHAJcMDACgDg4AvBISAPkaGgDNFhYAWwoKAOcb + GwC2FhYA2hwcAKsXFwDDGxsAuxwcALUbGwDKICAA8ycnAJMZGQBFDAwA0yYmAOUtLQC2JCQA/TQ0APAy + MgDGLCwA+Do6AKwoKAD/PDwA1TMzAP8+PgDpOjoA/0REAPBAQADIOTkAwDc3AP9KSgC3NTUATRcXANdC + QgD/T08A+E1NAM1AQAAqDQ0A5khIACYMDADxTU0Avj09AKw5OQCVMTEA/1VVAMFCQgC6QUEAsT4+AP9b + WwDISUkAvkZGALFCQgBpJycAzU1NAAgDAwD/YmIANBQUAOhcXAD/ZmYAu0tLAPhnZwD/a2sAs0xMALxR + UQD/cnIAkUFBAHk2NgCkS0sA/3Z2AJtISAC2VVUAzmNjAP98fADodXUASyYmAP+EhAD2gYEAqFlZABYM + DAD/jIwAm1hYAGc7OwD+k5MAqmNjANJ9fQD/mpoA/56eAP+iogD/qKgA/6qqAN6WlgD/ra0A+6qqAP+w + sABzUVEA/7i4AOurqwD/u7sA/729APK3twCFZWUA/8PDAL6RkQD/ysoA16urAPXExAD3ysoAwqamAMyx + sQAhHR0AKScnAB0cHAAA//8AAP39AAD7+wAA+PgAAPb2AAD19QAA8/MAAPHxAADv7wAA7e0AAOrqAADm + 5gAA5OQAAOPjAADh4QAA398AAN3dAADY2AAA19cAAM3NAADLywAAx8cAAMPDAADBwQAAtbUAALCwAACt + rQAAqakAAKamAACjowAAlZUAAJKSAABmZgAAZGQAAY2NAAGCggACvLwAA/7+AAPs7AADwsIAApycAAT8 + /AAEtLQABK6uAAJcXAAEl5cAB/n5AAf09AAG2NgABaKiAASRkQADbGwACPX1AAR4eAAJ/v4ADv//AAZm + ZgAQ+voACpycABT//wALiooAFfT0ABz9/QAe6OgAI/39AAk6OgAs/f0ALu7uACKurgAz/f0AHo+PADz8 + /AA86+sAPNXVAEn9/QBG7+8AInBwAFL+/gA2oaEAVPX1AF/9/QAECgoAYOTkAFzT0wBr8fEAaM7OAGO8 + vABx1dUAgN7eAHzIyACQ5eUAfpeXAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////9janB3foKFiP////////////// + /////////////0lJUWNzfoWIiouMjI6Q//////////////////////9ERERJUWNwe4KJjpKUlZSS//// + //////////////9FPj4zMzZKTlVqc36IjJSYmpiVlP//////////////QjY2LSkwdf5XTV9te4KFjZmb + nJqYlP///////////0I2LSYfHOfr9YBOX213f4eR8fienZqYlP//////////OCYZIWvH3Ojz/GhVanN8 + g6HT6vufnZqV/////////zgpGx3ftqrZ5fD3hltjb3p91a3j8/2fnZiS//////9BNCAc1ry3r6bh6vP8 + aF9sdKK3q9rq8/2fnJKQ/////z0yIxPPwby3rqbj7feDWWR90LCqpOHq8vuelo7/////PSoXERbDwr24 + sajl8PliXqK0rKmoqcni7P6bjP///0Y6KgkNExbExb+6s9Lo7pF9yqioqa2zts3pl5OMif//RjolBAoO + ExbPxsC5sNzl5uLZo6WpsLrGoISHj4uF//9GOyIDBAoMERX02Lu0qdrh3trZzK7Uon10en+JioL//1A8 + JAQCAwcXDxMWxbWrpNna2t7g71NeaGxvd4KIfv//XEMgBgQBAAMJDRTktaqlo8jZ3uPsdVRWX19qe4V3 + //9lQysgBgMBAAkQgb2tqKamqKjR4er2dk5LTVVwfnP//2VSORogBgYLHd20q6emp6ywsq7S5fD6gFdF + SWNzbf//YWE5JwcHIRLOrKempaars7rHuLLX6PD3/GZFUWpj////bkgxFxBay7OrpqSkqLDL5Ma/urHR + 5e3y+UZLVf////9uYj8o5MW8tq+opaaruIEUFtbAuK+o4OLxQ0RL/////2JxXlMu1sG8tq+pqa/fEA0T + 9Ma+uLS01DU4RE3//////3F2Z1gWw8G8t7Kx1B0ICA8Vz8K+u9UdMj5H/////////3l4Z1hpw8G9usdY + CwACFxEWw8LYLCs2Rf//////////Ynl4Z1hpw8LA2A4FAAAHDBMu5CwnOEVO////////////Znl4Z2uB + z9sRCwQBAAIKDBwvMThCTP//////////////Znl2dX1rQCEaHyIZGB4rMTxBQkz///////////////// + /3GAeHReSDw3NzI6Oj1GSkr//////////////////////11xeXJuZWBcT1dXV0pK//////////////// + ////////////XGVlZGRkV0//////////////////////////////4B///wAD//4AAf/4AAB/8AAAP+AA + AB/gAAAfwAAAD4AAAAeAAAAHgAAABwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AA + AAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gAAH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvAAAALsAAAC6AAAAsgAAALEAAACwAAAArQAAAKcAAACfAAAAkwAAAH4A + AABtAAAAPAAAAKgEBAChBQUAYAMDADsCAgBVBAQAOwMDAKIMDAC0Dg4Avg8PANEWFgBoCwsA5xoaALsV + FQDFGBgAsxYWADwICACoFxcAgBISAPYuLgDfKSkA4y0tAJwfHwCyJCQAzy0tAOAxMQDzNzcA8zk5APA5 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAJGRkYLISEhHxwcHEB+FxeKtB4exd8o + KOr/ODj//0VF//9QUP//W1v//2Zm//9wcP//eHj//39///+Ghv//jIz//5GR//+Wlv//mZn/2YaG7aNo + aNJZOjquAAAAfwAAAF8AAAA7AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BZmZmBT09PRUwMDA1jB4eiMQa + Gs/0Hh75/ysr//86Ov//SEj//1ZW//9lZf//cXH//319//+Ghv//jo7//5OT//+Zmf//nZ3//6Cg//+k + pP//pqb//6en//+oqP/0oqL5tHl53F9BQbMAAAB9AAAAVgAAAC0AAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wGSkpIHSkpKH3Qp + KV66Hx++6yEh9fsmJv/9Li7//zU1//9DQ///T0///11d//9tbf//enr//4aG//+Pj///l5f//56e//+k + pP//qqr//66u//+wsP//s7P//7Oz//+zs///s7P//7Oz/+6np/ahcXHUNCYmngICAmwAAAA8AAAAFwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////AoCA + gAhEREQimyQkhNAgINz0JSX/9y0t//kvL//8MjL//zQ0//86Ov//RET//1BQ//9aWv//aGj//3R0//9/ + f///ior//5aW//+goP//qqr//7Ky//+3t///vLz//76+//++vv//vb3//7u7//+5uf//t7f/y5GR52VJ + SbcCAgJ5BAQERwAAABoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8DqqqqCU5OTiSsJSWW3CIi7O8lJf/yKir/9Ssr//cqKv/7KCj//iUl//0nJ//4MTH/9zk5//1F + Rf//UVH//19f//9ra///eHj//4WF//+Skv//np7//6mp//+zs///vLz//8LC///Fxf//xsb//8XF///C + wv//vr7//7u7/+KkpPKAXFzDAgICgAAAAEoAAAAaAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wOzs7MKWlpaIrAkJJrfISHz7CUl/+4kJP/wIiL/9B4e//YaGv/5FRX/+BER/+sS + Ev/WICD/3C0t//Q1Nf/+QkL//05O//9bW///Z2f//3V1//+Bgf//jY3//5ub//+mpv//srL//7y8//7D + w//9yMj//svL///Kyv//x8f//8LC//++vv/ura33iGNjxwQEBIAAAABGAAAAFwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////A9XV1QZsbGwariYmkNseHvPnISH/6SAg/+saGv/tFRX/8Q8P//UM + DP/xCQn/1QcH/6EPD/+KLS3/qzk5/983N//7PT3//0lJ//9WVv//YmL//2xs//94eP//hIT//4+P//+a + mv/9paX/9Kur/+Wrq//js7P/7sLC//vMzP/+zs7//8nJ///ExP//v7//7q2t94FeXsMCAgJ5AAAAPAAA + ABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Bo6OjhKoLCxz0iAg6uIbG//kGhr/5hUV/+gP + D//sCQn/7QQE/+MEBP+vAQH/WAcH/0NiYv9anJz/iG5u/8dAQP/1PT3//0ZG//9SUv//Xl7//2ho//9z + c///fHz//4aG//2QkP/wk5P/y4WF/5Rqav+QgYH/u56e/+a+vv/7zs7//8/P///Ly///xMT//76+/+Ol + pfJnSkq3AgICbAAAAC0AAAAIAAAAAAAAAAAAAAAAAAAAAP///wH///8Ev7+/DJg8PEPGISHU3Rsb/98V + Ff/hDg7/4wkJ/+YFBf/kAwP/0AEB/4MBAf8qNTX/CcDA/ybo6P9L6ur/ccDA/6NkZP/hQkL//END//9P + T///Wlr//2Rk//9ubv//eXn//4KC//aGhv/Penr/f09P/zdXV/8/u7v/esXF/7mqqv/pwcH//M7O///P + z///ysr//8PD//+9vf/LkpLnNicnngMDA1cAAAAbAAAAAwAAAAAAAAAAAAAAAP///wL///8HgICAFrch + IajZHR3/2hYW/9sNDf/dBgb/4AIC/98CAv/LAQH/cAAA/x5AQP8Dzc3/APf3/x7///9C/f3/Y/Hx/4S5 + uf/DTk7/9END//5MTP//VVX//2Bg//9qav//c3P//Hx8/+d6ev+eWVn/PCQk/w9/f/8X5ub/VvLy/4vZ + 2f/CsLD/68PD//zOzv//zs7//8jI///AwP//uLj/oXJy1AYGBn8AAAA7AAAACwAAAAAAAAAAAAAAAP// + /wTMzMwKqykpYc0eHvHVFhb/1g4O/9gGBv/aAgL/3AAA/8sAAP9+AAD/GkBA/wO8vP8A8/P/AP7+/xb/ + //81////Vf///3Lh4f+oXl7/5kRE//xGRv//UFD//1pa//9kZP//bW3/9nNz/8lmZv9kNjb/EUdH/wK5 + uf8C9/f/Ov7+/2v39/+X1NT/xrCw/+zDw//9zs7//8zM///Fxf//u7v/7qio92NGRrQDAwNgAAAAHgAA + AAIAAAAAAAAAAP///wZxcXESuyEht9EaGv/RERH/0wYG/9QBAf/XAQH/ywAA/4kAAP8YRkb/AsPD/wDv + 7/8A+fn/AP7+/xD///8o////Rv///2Px8f+JmZn/x01N//RDQ///Skr//1NT//9cXP/8ZWX/5mVl/5tJ + Sf8vGBj/A5ub/wHh4f8A+fn/Jf///0////91+Pj/mdXV/8awsP/swsL//MvL///IyP//v7///7W1/7d+ + ft0GBgaBAAAAOgAAAAoAAAAAAAAAAP///weqJiZVyR0d9MwVFf/ODAz/zgMD/84AAP+7AAD/awAA/xdD + Q/8CsrL/AN/f/wDw8P8A+fn/AP7+/wn///8c////Nv///1X9/f9y39//o2pq/+NDQ//8Q0P//0tL//9U + VP/2Wlr/y1JS/2cuLv8TKyv/ALy8/wDp6f8A+vr/FP///zX///9X////efPz/5vW1v/JsLD/7sLC//zH + x///wcH//7a2//SmpvldPz+vAwMDVwAAABYAAAAAAAAAALOzswq3IyOfyhwc/8kREf/JBwf/xQEB/6kA + AP9hAAD/Ez4+/wKNjf8AuLj/ANHR/wDm5v8A9PT/APz8/wL///8R////KP///0X///9j8vL/ipWV/8xH + R//2PDz//0FB//1JSf/pTEz/oTo6/zQVFf8FeHj/ANbW/wDv7/8A+/v/CP///x////84////V////3X1 + 9f+Zzs7/x6ys/+u9vf/8wMD//ri4//+srP+mbW3TBwcHcQYGBikAAAADAAAAAIVHRxm9ISHaxhkZ/8UM + DP/EBQX/ugAA/40AAP9BAAD/DB0d/wFqav8AnJz/ALa2/wDPz/8A4+P/APLy/wD7+/8G////G////zb/ + //9V+fn/dsLC/6lcXP/kOzv//Tc3//c+Pv/MOTn/aCEh/xI9Pf8Bv7//AObm/wD09P8A/Pz/Af///w3/ + //8a/v7/L/39/0n5+f9o7u7/j8TE/8Ojo//tt7f//Li4//+urv/bjIztFxISiwQEBD4AAAAKAAAAAKgk + JFXFIyP/wxcX/8EJCf/AAgL/twAA/5QAAP9UAAD/GgAA/wMfH/8AcnL/AJaW/wCvr/8Ax8f/ANzc/wDs + 7P8A+Pj/C/7+/yb///9G/f3/Ze3t/4WoqP/DQUH/7i8v/+cwMP+hJyf/OA8P/wZubv8A29v/AO/v/wD4 + +P8A/Pz/AP39/wD8/P8A+fn/BfX1/xXv7/8y4uL/XLq6/5qTk//drKz/+bW1//+trf//n5//ZD8/sQYG + BlEAAAASAAAAALIlJYnCISH/vhQU/74HB/+/AgL/vgAA/60AAP+FAAD/TwAA/xsAAP8DFxf/AGdn/wCM + jP8Apqb/AL29/wDT0/8A6Oj/APf3/xP+/v8z////Uv39/23c3P+eTk7/xyws/7YjI/9dEhL/E0RE/wG4 + uP8A7e3/APb2/wD5+f8A+fn/APX1/wDv7/8A5ub/ANra/wPGxv8Pqqr/N319/41sbP/epKT/+7Oz//+s + rP//np7/mFtbygoKCmIAAAAZAAAAALcoKLG/ISH/uxMT/7sHB/+9AgL/wAAA/78AAP+yAAD/jwAA/1sA + AP8nAAD/CAIC/wFHR/8Afn7/AJub/wC0tP8Az8//AObm/wD5+f8d/v7/Pf///1X09P9wjo7/gjs7/2Qg + IP8gSkr/AsvL/wDt7f8A9/f/APj4/wD39/8A8fH/AOfn/wDZ2f8Ax8f/AZub/whfX/8fOjr/Xjw8/7h5 + ef/wpqb//rGx//+qqv//nZ3/vG1t3RAQEG8AAAAgAAAAALcpKdG8IiL/uRMT/7gGBv+5AQH/vgAA/8MA + AP/EAAD/uwAA/54AAP9uAAD/PAAA/xIAAP8CKyv/AGVl/wCPj/8Ar6//AM/P/wDp6f8D+/v/Jf7+/z39 + /f9I3d3/R7Cw/zGmpv8Sy8v/APX1/wD8/P8A+/v/APn5/wDz8/8A5+f/ANDQ/wCtrf8DhIT/Ej09/zYb + G/9vODj/smFh/+aGhv/7oaH//6ur//+np///mpr/13Z26w8PD3gAAAAlAAAAALksLOe6IyP/thIS/7QE + BP+2AQH/uwAA/8AAAP/FAAD/yQAA/8UAAP+xAAD/iQAA/1cAAP8pAAD/CgAA/wFHR/8Ajo7/ALa2/wDY + 2P8A8PD/DP39/yP///8u/f3/LPj4/yD4+P8R/f3/Bf///wD///8A////APv7/wDq6v8AzMz/BISE/xIt + Lf8xFRX/ZCsr/55HR//MX1//63Nz//qDg///lpb//6Oj//+jo///lpb/63t79RQUFIAGBgYpAAAAALsx + Mfe3IiL/shAQ/7EDA/+zAQH/uAAA/70AAP/CAAD/yAAA/84AAP/OAAD/xAAA/6YAAP91AAD/OQAA/wwA + AP8BUVH/AJub/wDIyP8A5+f/APr6/w3///8Y////Gf///xP///8N////CP///wf///8I////Bubm/wKx + sf8MYWH/KxUV/2IiIv+bOjr/yU9P/+hfX//2Zmb//HBw//94eP//iYn//5mZ//+dnf//kpL/+Hx8+xUV + FYQGBgYrAAAAALs0NP60IiL/rw4O/64DA/+wAAD/tQAA/7oAAP+/AAD/xQAA/8sAAP/RAAD/1QAA/9IA + AP+2AAD/egAA/zEAAP8HDAz/AHd3/wC6uv8A4OD/APX1/wD///8J////C////wr///8H////CP///w3/ + //8T/f3/GsnJ/yZiYv9KGRn/iSgo/8Y+Pv/nTU3/9ldX//xdXf//YGD//2Rk//9tbf//fX3//46O//+X + l///jIz//nh4/xgYGIEGBgYpAAAAALo4OPezJSX/rA8P/6sCAv+tAAD/sgAA/7cAAP+8AAD/wgAA/8gA + AP/OAAD/0wAA/9gAAP/UAAD/rgAA/2gAAP8fAAD/AzU1/wChof8A4OD/APT0/wD9/f8B////A////wP/ + //8E////B////xD///8d/f3/LdfX/0h9ff+FMDD/zTc3//NDQ//9S0v//09P//9SUv//VVX//1hY//9e + Xv//cHD//4OD//+QkP//hob/+G5u/BkZGXsHBwcmAAAAALg+PuizKyv/qhIS/6gCAv+qAAD/rgAA/7MA + AP+5AAD/vgAA/8QAAP/KAAD/0AAA/9YAAP/aAAD/ygAA/5MAAP86AAD/CCUl/wCgoP8A5eX/APb2/wD9 + /f8A////AP///wD///8B////Bv///xD///8h////N/b2/1PKyv+IWlr/zz4+//k9Pf//QED//0ND//9G + Rv//SEj//0pK//9QUP//YmL//3h4//+IiP//gID/7GJi9RsbG3IICAghAAAAALZBQdOzMDD/qRUV/6UE + BP+nAQH/qwAA/7AAAP+1AAD/ugAA/8AAAP/GAAD/zAAA/9IAAP/XAAD/zQAA/5UAAP8xAAD/BWpq/wDM + zP8A8PD/APn5/wD+/v8A/v7/AP///wD9/f8A/v7/Af7+/wv///8d////N////1Ly8v9zvr7/qVtb/+g6 + Ov//NDT//zc3//86Ov//Ozv//z4+//9CQv//VVX//2tr//+AgP//eHj/3FdX6R4eHmcKCgoaAAAAALRD + Q7S0ODj/qhwc/6QICP+lAgL/pwAA/6wAAP+xAAD/tgAA/7wAAP/CAAD/yAAA/84AAP/OAAD/tAAA/1EA + AP8PTEz/AcfH/wDt7f8A9/f/APv7/wD+/v8A/f3/APv7/wD39/8A9vb/APj4/wD8/P8R/v7/Kv///0f9 + /f9k9fX/hL+//71PT//6Kir//yoq//8rK///Li7//zAw//82Nv//R0f//2Ji//91df//bm7/xUxM2iMj + I1gAAAASAAAAALFBQYq2QED/rCcn/6QPD/+jBQX/pAAA/6gAAP+tAAD/sgAA/7cAAP+9AAD/wgAA/8EA + AP+oAAD/QQAA/wx/f/8B0ND/APHx/wD4+P8A+/v/AP39/wD9/f8A+Pj/APHx/wDp6f8A5OT/AObm/wDu + 7v8A+fn/FP7+/zH///9P////bPX1/4y6uv/OQED/+x4e//8dHf//Hx///yIi//8oKP//PDz//1VV//9m + Zv//YGD/qkJCwykpKUUAAAAKAAAAALE9PU+3R0f/rS8v/6MVFf+hCAj/oQEB/6QAAP+pAAD/rQAA/7MA + AP+3AAD/tQAA/44AAP8wDw//Bqys/wDn5/8A9fX/APr6/wD8/P8A/v7/AP7+/wD5+f8A8PD/AN/f/wDL + y/8Aw8P/AMjI/wDX1/8A6Oj/APf3/xb9/f80////Uv///2719f+Ltrb/vkZG//UVFf//EBD//xUV//8b + G///MTH//0hI//9bW///Vlb/iDw8nzU1NTBAQEAEAAAAALEzMwqzRUXZsDo6/6YfH/+gDQ3/ngEB/6EA + AP+kAAD/qQAA/6sAAP+iAAD/agAA/xtDQ/8DwsL/APDw/wD6+v8A+/v/AP7+/wD+/v8A/v7/APz8/wD0 + 9P8A29v/AaWl/wFtbf8Ac3P/AJ6e/wC3t/8Azs7/AOTk/wD39/8W/v7/Nf///1H///9p9/f/f9jY/6Rt + bf/qERH//wcH//8REf//Jyf//z4+//9OTv/jSUntSzw8ak1NTR7///8B////AQAAAACwQkKbtEVF/6kq + Kv+hFBT/nQUF/5wAAP+dAAD/mAAA/4AAAP9DAAD/D2pq/wHR0f8A8/P/APv7/wD9/f8A/v7/AP///wD/ + //8A/v7/APf3/wDl5f8CoqL/Cj8//xAFBf8HERH/AVBQ/wCHh/8Ara3/AMrK/wDk5P8A9/f/Fv7+/zH/ + //9L////Xv39/27f3/+LfHz/0Rwc//oPD///IiL//zU1//9BQf+/Pz/MRkZGSWlpaRH///8B////AQAA + AACuPT1LtktL8602Nv+kHx//mgoK/5EBAf9+AAD/UgAA/yYSEv8Jb2//AcbG/wDn5/8A9fX/APv7/wD+ + /v8A////AP///wD+/v8A+/v/APHx/wHJyf8TQUH/PAAA/0oAAP8qAAD/CgEB/wFISP8AiIj/AKur/wDI + yP8A5OT/APb2/xD9/f8n/v7/Ofv7/0bv7/9XtbX/kDQ0/94aGv/6KSn//Tc3//U4OPmVQUGWXV1dLL+/ + vwgAAAAAAAAAAAAAAAAAAAAAsUZGr7JDQ/+nLS3/mxQU/4IGBv9bAQH/JQIC/wdRUf8BmJj/AMHB/wDZ + 2f8A7Oz/APj4/wD+/v8A////AP///wD9/f8A9vb/AN/f/wiPj/9MAAD/lwAA/5sAAP9wAAD/NAAA/wsA + AP8BR0f/AImJ/wCrq/8AyMj/AOTk/wD09P8C+fn/EPPz/xzX1/81e3v/iRkZ/9wbG//3Kyv/+zg4/8w5 + OdVYWFhRi4uLFv///wQAAAAAAAAAAAAAAAAAAAAArT4+UrNLS+6uPT3/nyUl/4MQEP9VBgb/IQEB/wUh + If8Aenr/AKWl/wDCwv8A29v/AO3t/wD4+P8A/v7/AP39/wD5+f8A6+v/BKqq/zMREf+pAAD/ywAA/8gA + AP+sAAD/dwAA/zcAAP8KAAD/AVFR/wCIiP8ArKz/AMnJ/wDf3/8A5ub/Ac7O/wqBgf9JBwf/sA8P/+kd + Hf/3Ly//7TY29p9CQpR0dHQus7OzCv///wMAAAAAAAAAAAAAAAAAAAAAAAAAAK9FRZu0Skr/qDY2/5Ie + Hv9sDg7/NgMD/w8AAP8CKir/AH19/wClpf8AwsL/ANzc/wDt7f8A+Pj/APn5/wDv7/8Bycn/HTs7/5UA + AP/JAAD/0gAA/9MAAP/MAAD/sQAA/3oAAP86AAD/DAAA/wFKSv8AjIz/AK+v/wDFxf8AwcH/CHx8/zUJ + Cf+SBgb/2RMT//AlJf/1MzP/wjw8xGtra0WmpqYX////BP///wEAAAAAAAAAAAAAAAAAAAAAAAAAAKo5 + OSiwSUnKsUhI/6UzM/+MHh7/YwwM/zMEBP8PAQH/Aisr/wB1df8ApaX/AMLC/wDb2/8A6+v/AO7u/wDa + 2v8Oamr/ZgAA/74AAP/LAAD/zgAA/9AAAP/RAAD/zQAA/7QAAP99AAD/PQAA/wsAAP8AWVn/AJCQ/wCe + nv8Ia2v/MwkJ/4kDA//QDQ3/6hwc//AsLP/UODjgjlJSa5WVlSTo6OgL////Av///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACtPz9ZtE9P47FHR/+kMzP/ihwc/2MODv8yBQX/DgEB/wMuLv8Afn7/AKam/wDB + wf8A19f/ANra/wSlpf88AAD/pQAA/8EAAP/FAAD/yAAA/8sAAP/NAAD/0AAA/80AAP+0AAD/dwAA/zEA + AP8GFBT/AmNj/wZhYf8wCwv/hAQE/8oLC//kGBj/7CYm/90xMe6pRESNi4uLLtLS0hH///8F////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0REdLRQUO+xSEj/ozIy/4kcHP9hDg7/MAQE/w0B + Af8CMDD/AH9//wCkpP8Aubn/Aa6u/xo8PP9+AAD/tQAA/7wAAP+/AAD/wgAA/8UAAP/IAAD/ywAA/80A + AP/JAAD/pwAA/2YAAP8tAAD/GggI/zIGBv9/AwP/xgoK/+AWFv/nJSX/4S8v9LQ8PJ6MjIwz3NzcFv// + /wr///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALBHR361U1PwskpK/6Q1 + Nf+NIiL/YxER/zMICP8QBAT/AzEx/wB0dP8Bj4//Dk1N/1sAAP+lAAD/swAA/7cAAP+6AAD/vQAA/8AA + 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 + yf+AAU3/wANP/+AHYf8= + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/TutorialWindow.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/TutorialWindow.vb new file mode 100644 index 00000000..3d20f1e9 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/TutorialWindow.vb @@ -0,0 +1,298 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.IO +Imports System.Runtime.InteropServices +Imports System.Windows.Forms +Imports System.Windows.Media.Media3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + +Namespace D3D10Tutorial06_WinFormsControl + ''' + ''' This application demonstrates simple lighting in the vertex shader + ''' + ''' http://msdn.microsoft.com/en-us/library/bb172490(VS.85).aspx + ''' + ''' Copyright (c) Microsoft Corporation. All rights reserved. + ''' + Partial Public Class TutorialWindow + Inherits Form + #Region "Fields" + Private device As D3DDevice + Private swapChain As SwapChain + Private renderTargetView As RenderTargetView + Private depthStencil As Texture2D + Private depthStencilView As DepthStencilView + Private backColor_Renamed As New ColorRgba(0.0F, 0.125F, 0.3F, 1.0F) + + Private effect As Effect + Private technique As EffectTechnique + Private techniqueLight As EffectTechnique + + Private vertexLayout As InputLayout + Private vertexBuffer As D3DBuffer + Private indexBuffer As D3DBuffer + + 'variables from the .fx file + Private worldVariable As EffectMatrixVariable + Private viewVariable As EffectMatrixVariable + Private projectionVariable As EffectMatrixVariable + + Private lightDirVariable As EffectVectorVariable + Private lightColorVariable As EffectVectorVariable + Private outputColorVariable As EffectVectorVariable + + Private cube As New Cube() + + Private viewMatrix As Matrix4x4F + Private projectionMatrix As Matrix4x4F + + Private t As Single = 0f + Private dwTimeStart As UInteger = CUInt(Environment.TickCount) + Private needsResizing As Boolean + #End Region + + #Region "TutorialWindow()" + ''' + ''' Initializes a new instance of the class. + ''' + Public Sub New() + InitializeComponent() + End Sub + #End Region + + #Region "TutorialWindow_Load()" + Private Sub TutorialWindow_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load + InitDevice() + directControl.Render = AddressOf Me.RenderScene + End Sub + #End Region + + #Region "directControl_SizeChanged()" + Private Sub directControl_SizeChanged(ByVal sender As Object, ByVal e As EventArgs) Handles directControl.SizeChanged + needsResizing = True + End Sub + #End Region + + #Region "InitDevice()" + ''' + ''' Create Direct3D device and swap chain + ''' + Protected Sub InitDevice() + device = D3DDevice.CreateDeviceAndSwapChain(directControl.Handle) + swapChain = device.SwapChain + + SetViews() + + ' Create the effect + Using effectStream As FileStream = File.OpenRead("Tutorial06.fxo") + effect = device.CreateEffectFromCompiledBinary(New BinaryReader(effectStream)) + End Using + + ' Obtain the technique + technique = effect.GetTechniqueByName("Render") + techniqueLight = effect.GetTechniqueByName("RenderLight") + + ' Obtain the variables + worldVariable = effect.GetVariableByName("World").AsMatrix() + viewVariable = effect.GetVariableByName("View").AsMatrix() + projectionVariable = effect.GetVariableByName("Projection").AsMatrix() + + lightDirVariable = effect.GetVariableByName("vLightDir").AsVector() + lightColorVariable = effect.GetVariableByName("vLightColor").AsVector() + outputColorVariable = effect.GetVariableByName("vOutputColor").AsVector() + + InitVertexLayout() + InitVertexBuffer() + InitIndexBuffer() + + ' Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList + + InitMatrices() + End Sub + #End Region + + #Region "SetViews()" + Private Sub SetViews() + ' Create a render target view + Using pBuffer As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(pBuffer) + End Using + + ' Create depth stencil texture + Dim descDepth As New Texture2DDescription() With {.Width = CUInt(directControl.ClientSize.Width), .Height = CUInt(directControl.ClientSize.Height), .MipLevels = 1, .ArraySize = 1, .Format = Format.D32Float, .SampleDescription = New SampleDescription() With {.Count = 1, .Quality = 0}, .BindingOptions = BindingOptions.DepthStencil} + + depthStencil = device.CreateTexture2D(descDepth) + + ' Create the depth stencil view + Dim depthStencilViewDesc As New DepthStencilViewDescription() With {.Format = descDepth.Format, .ViewDimension = DepthStencilViewDimension.Texture2D} + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc) + + 'bind the views to the device + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}, depthStencilView) + + ' Setup the viewport + Dim vp As New Viewport() With {.Width = CUInt(directControl.ClientSize.Width), .Height = CUInt(directControl.ClientSize.Height), .MinDepth = 0.0F, .MaxDepth = 1.0F, .TopLeftX = 0, .TopLeftY = 0} + + device.RS.Viewports = New Viewport() {vp} + End Sub +#End Region + +#Region "InitVertexLayout()" + Private Sub InitVertexLayout() + ' Define the input layout + ' The layout determines the stride in the vertex buffer, + ' so changes in layout need to be reflected in SetVertexBuffers + Dim layout() As InputElementDescription = {New InputElementDescription() With {.SemanticName = "POSITION", .SemanticIndex = 0, .Format = Format.R32G32B32Float, .InputSlot = 0, .AlignedByteOffset = 0, .InputSlotClass = InputClassification.PerVertexData, .InstanceDataStepRate = 0}, New InputElementDescription() With {.SemanticName = "NORMAL", .SemanticIndex = 0, .Format = Format.R32G32B32Float, .InputSlot = 0, .AlignedByteOffset = 12, .InputSlotClass = InputClassification.PerVertexData, .InstanceDataStepRate = 0}} + + Dim passDesc As PassDescription = technique.GetPassByIndex(0).Description + + vertexLayout = device.CreateInputLayout(layout, passDesc.InputAssemblerInputSignature, passDesc.InputAssemblerInputSignatureSize) + + device.IA.InputLayout = vertexLayout + End Sub +#End Region + +#Region "InitVertexBuffer()" + Private Sub InitVertexBuffer() + Dim verticesData As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Vertices)) + Marshal.StructureToPtr(cube.Vertices, verticesData, True) + + Dim bufferDesc As New BufferDescription() With {.Usage = Usage.Default, .ByteWidth = CUInt(Marshal.SizeOf(cube.Vertices)), .BindingOptions = BindingOptions.VertexBuffer, .CpuAccessOptions = CpuAccessOptions.None, .MiscellaneousResourceOptions = MiscellaneousResourceOptions.None} + + Dim InitData As New SubresourceData() With {.SystemMemory = verticesData} + + 'D3DBuffer buffer = null; + vertexBuffer = device.CreateBuffer(bufferDesc, InitData) + + ' Set vertex buffer + Dim stride As UInteger = CUInt(Marshal.SizeOf(GetType(SimpleVertex))) + Dim offset As UInteger = 0 + device.IA.SetVertexBuffers(0, New D3DBuffer() {vertexBuffer}, New UInteger() {stride}, New UInteger() {offset}) + Marshal.FreeCoTaskMem(verticesData) + End Sub +#End Region + +#Region "InitIndexBuffer()" + Private Sub InitIndexBuffer() + Dim indicesData As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Indices)) + Marshal.StructureToPtr(cube.Indices, indicesData, True) + + Dim bufferDesc As New BufferDescription() With {.Usage = Usage.Default, .ByteWidth = CUInt(Marshal.SizeOf(cube.Indices)), .BindingOptions = BindingOptions.IndexBuffer, .CpuAccessOptions = CpuAccessOptions.None, .MiscellaneousResourceOptions = MiscellaneousResourceOptions.None} + + Dim initData As New SubresourceData() With {.SystemMemory = indicesData} + + indexBuffer = device.CreateBuffer(bufferDesc, initData) + device.IA.IndexBuffer = New IndexBuffer(indexBuffer, Format.R32UInt, 0) + Marshal.FreeCoTaskMem(indicesData) + End Sub +#End Region + + #Region "InitMatrices()" + Private Sub InitMatrices() + ' Initialize the view matrix + Dim Eye As New Vector3F(0.0f, 4.0f, -10.0f) + Dim At As New Vector3F(0.0f, 0.0f, 0.0f) + Dim Up As New Vector3F(0.0f, 1.0f, 0.0f) + + viewMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixLookAtLH(Eye, At, Up) + + '// Initialize the projection matrix + projectionMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixPerspectiveFovLH(CSng(Math.PI) * 0.25F, (CSng(Me.ClientSize.Width) / CSng(Me.ClientSize.Height)), 0.5F, 100.0F) + + ' Update Variables that never change + viewVariable.Matrix = viewMatrix + projectionVariable.Matrix = projectionMatrix + End Sub + #End Region + + #Region "RenderScene()" + ''' + ''' Render the frame + ''' + Protected Sub RenderScene() + If needsResizing Then + needsResizing = False + renderTargetView.Dispose() + Dim sd As SwapChainDescription = swapChain.Description + swapChain.ResizeBuffers(sd.BufferCount, CUInt(directControl.ClientSize.Width), CUInt(directControl.ClientSize.Height), sd.BufferDescription.Format, sd.Options) + SetViews() + ' Update the projection matrix + projectionMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixPerspectiveFovLH(CSng(Math.PI) * 0.25f, (CSng(directControl.ClientSize.Width) / CSng(directControl.ClientSize.Height)), 0.5f, 100.0f) + projectionVariable.Matrix = projectionMatrix + End If + Dim worldMatrix As Matrix4x4F + + t = (Environment.TickCount - dwTimeStart) / 50.0f + + 'WPF transforms used here use degrees as opposed to D3DX which uses radians in the native tutorial + '360 degrees == 2 * Math.PI + 'world matrix rotates the first cube by t degrees + Dim rt1 As New RotateTransform3D(New AxisAngleRotation3D(New Vector3D(0, 1, 0), t)) + worldMatrix = rt1.Value.ToMatrix4x4F() + + 'Setup our lighting parameters + Dim vLightDirs() As Vector4F = { New Vector4F(-0.577f, 0.577f, -0.577f, 1.0f), New Vector4F(0.0f, 0.0f, -1.0f, 1.0f) } + Dim vLightColors() As Vector4F = { New Vector4F (0.5f, 0.5f, 0.5f, 1.0f), New Vector4F (0.5f, 0.0f, 0.0f, 1.0f) } + + 'rotate the second light around the origin + 'create a rotation matrix + Dim rt2 As New RotateTransform3D(New AxisAngleRotation3D(New Vector3D(0, 2, 0), -t)) + 'rotate vLightDirs[1] vector using the rotation matrix + Dim vDir As New Vector3D(vLightDirs(1).X, vLightDirs(1).Y, vLightDirs(1).Z) + vDir = rt2.Transform(vDir) + vLightDirs(1).X = CSng(vDir.X) + vLightDirs(1).Y = CSng(vDir.Y) + vLightDirs(1).Z = CSng(vDir.Z) + + ' Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor_Renamed) + + ' Clear the depth buffer to 1.0 (max depth) + device.ClearDepthStencilView(depthStencilView, ClearOptions.Depth, 1.0F, CByte(0)) + + ' + ' Update variables that change once per frame + ' + worldVariable.Matrix = worldMatrix + lightDirVariable.SetFloatVectorArray(vLightDirs) + lightColorVariable.SetFloatVectorArray(vLightColors) + + ' + ' Render the cube + ' + Dim techDesc As TechniqueDescription = technique.Description + For p As UInteger = 0 To techDesc.Passes - 1UI + technique.GetPassByIndex(p).Apply() + device.DrawIndexed(36, 0, 0) + Next p + + ' + ' Render each light + ' + Dim techLightDesc As TechniqueDescription = techniqueLight.Description + For m As Integer = 0 To 1 + Dim vLightPos As New Vector3F(vLightDirs(m).X * 5, vLightDirs(m).Y * 5, vLightDirs(m).Z * 5) + Dim tg As New Transform3DGroup() + tg.Children.Add(New ScaleTransform3D(0.2, 0.2, 0.2)) + tg.Children.Add(New TranslateTransform3D(vLightPos.X, vLightPos.Y, vLightPos.Z)) + worldVariable.Matrix = tg.Value.ToMatrix4x4F() + outputColorVariable.FloatVector = New Vector4F (vLightColors(m).X, vLightColors(m).Y, vLightColors(m).Z, vLightColors(m).W) + + For p As UInteger = 0 To techLightDesc.Passes - 1UI + techniqueLight.GetPassByIndex(p).Apply() + device.DrawIndexed(36, 0, 0) + Next p + Next m + + swapChain.Present(0, PresentOptions.None) + End Sub + #End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/directx.ico b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial06_WinFormsControl/directx.ico differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Application.xaml b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Application.xaml new file mode 100644 index 00000000..96fdda09 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Application.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Application.xaml.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Application.xaml.vb new file mode 100644 index 00000000..ba0ec82c --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Application.xaml.vb @@ -0,0 +1,16 @@ +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Configuration +Imports System.Data +Imports System.Linq +Imports System.Windows + +Namespace D3D10Tutorial07_WPF + ''' + ''' Interaction logic for App.xaml + ''' + Partial Public Class App + Inherits Application + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/D3D10Tutorial07_WPF.vbproj b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/D3D10Tutorial07_WPF.vbproj new file mode 100644 index 00000000..b4ba9bcb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/D3D10Tutorial07_WPF.vbproj @@ -0,0 +1,136 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1} + WinExe + + + D3D10Tutorial07_WPF + v3.5 + On + Binary + Off + On + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + Application.xaml + Code + + + TutorialWindow.xaml + Code + + + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + PreserveNewest + + + PreserveNewest + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/D3DStructs.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/D3DStructs.vb new file mode 100644 index 00000000..60b3f942 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/D3DStructs.vb @@ -0,0 +1,38 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Runtime.InteropServices +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D + +Namespace D3D10Tutorial07_WPF + #Region "SimpleVertex" + _ + Public Structure SimpleVertex + _ + Public Pos As Vector3F + _ + Public Tex As Vector2F + End Structure + #End Region + + #Region "Cube" + Public Class Cube + Public Vertices As New CubeVertices() + Public Indices As New CubeIndices() + + _ + Public Class CubeVertices + _ + Private vertices() As SimpleVertex = { New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Tex = New Vector2F (0.0f, 1.0f)} } + End Class + + _ + Public Class CubeIndices + _ + Private indices() As UInteger = { 3,1,0, 2,1,3, 6,4,5, 7,4,6, 11,9,8, 10,9,11, 14,12,13, 15,12,14, 19,17,16, 18,17,19, 22,20,21, 23,20,22 } + End Class + End Class + #End Region +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..132bafdf --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/My Project/AssemblyInfo.vb @@ -0,0 +1,49 @@ +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Resources +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + '(used if a resource is not found in the page, + ' or application resource dictionaries) + '(used if a resource is not found in the page, + ' app, or any theme specific resource dictionaries) + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/My Project/Resources.Designer.vb new file mode 100644 index 00000000..4f35feb2 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.3053 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My.Resources + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If (resourceMan Is Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/My Project/Settings.Designer.vb new file mode 100644 index 00000000..d008d68d --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/My Project/Settings.Designer.vb @@ -0,0 +1,27 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.3053 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/My Project/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Tutorial07.fx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Tutorial07.fx new file mode 100644 index 00000000..33e7aff7 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Tutorial07.fx @@ -0,0 +1,75 @@ +//-------------------------------------------------------------------------------------- +// File: Tutorial07.fx +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + +//-------------------------------------------------------------------------------------- +// Constant Buffer Variables +//-------------------------------------------------------------------------------------- +Texture2D txDiffuse; +SamplerState samLinear +{ + Filter = MIN_MAG_MIP_LINEAR; + AddressU = Wrap; + AddressV = Wrap; +}; + +cbuffer cbNeverChanges +{ + matrix View; +}; + +cbuffer cbChangeOnResize +{ + matrix Projection; +}; + +cbuffer cbChangesEveryFrame +{ + matrix World; + float4 vMeshColor; +}; + +struct VS_INPUT +{ + float4 Pos : POSITION; + float2 Tex : TEXCOORD; +}; + +struct PS_INPUT +{ + float4 Pos : SV_POSITION; + float2 Tex : TEXCOORD0; +}; +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +PS_INPUT VS( VS_INPUT input ) +{ + PS_INPUT output = (PS_INPUT)0; + output.Pos = mul( input.Pos, World ); + output.Pos = mul( output.Pos, View ); + output.Pos = mul( output.Pos, Projection ); + output.Tex = input.Tex; + + return output; +} +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( PS_INPUT input) : SV_Target +{ + return txDiffuse.Sample( samLinear, input.Tex ) * vMeshColor; +} +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS() ) ); + } +} + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Tutorial07.fxo b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Tutorial07.fxo new file mode 100644 index 00000000..cb026042 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/Tutorial07.fxo differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/TutorialWindow.xaml b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/TutorialWindow.xaml new file mode 100644 index 00000000..687ad42b --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/TutorialWindow.xaml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/TutorialWindow.xaml.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/TutorialWindow.xaml.vb new file mode 100644 index 00000000..a211fce0 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/TutorialWindow.xaml.vb @@ -0,0 +1,252 @@ +Imports Microsoft.VisualBasic +Imports System.Windows +Imports Microsoft.WindowsAPICodePack.DirectX.Controls +Imports System.Runtime.InteropServices +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports System.Collections.ObjectModel +Imports System +Imports Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities +Imports System.IO +Imports System.Windows.Media.Media3D +Namespace D3D10Tutorial07_WPF + ''' + ''' Interaction logic for Window1.xaml + ''' + Partial Public Class TutorialWindow + Inherits Window +#Region "Fields" + Private device As D3DDevice + Private swapChain As SwapChain + Private renderTargetView As RenderTargetView + Private textureRV As ShaderResourceView + Private backColor As New ColorRgba(0.0F, 0.125F, 0.3F, 1.0F) + Private meshColor As New Vector4F() With {.x = 0.7F, .y = 0.7F, .z = 0.7F, .w = 1.0F} + + 'INSTANT VB NOTE: The variable effect was renamed since Visual Basic does not allow class members with the same name: + Private effect_Renamed As Effect + Private technique As EffectTechnique + + Private vertexLayout As InputLayout + Private vertexBuffer As D3DBuffer + Private indexBuffer As D3DBuffer + + 'variables from the .fx file + Private worldVariable As EffectMatrixVariable + Private viewVariable As EffectMatrixVariable + Private projectionVariable As EffectMatrixVariable + + Private meshColorVariable As EffectVectorVariable + Private diffuseVariable As EffectShaderResourceVariable + + Private cube As New Cube() + + Private viewMatrix As Matrix4x4F + Private projectionMatrix As Matrix4x4F + + Private currentTime As Single = 0.0F + Private startTime As UInteger = CUInt(Environment.TickCount) + Private needsResizing As Boolean + +#End Region + +#Region "Constructor" + + Public Sub New() + InitializeComponent() + AddHandler host.Loaded, AddressOf host_Loaded + End Sub + +#End Region + +#Region "Event Handlers" + + Private Sub host_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) + InitDevice() + host.Render = AddressOf RenderScene + End Sub + +#End Region + +#Region "InitDevice()" + ''' + ''' Create Direct3D device and swap chain + ''' + Protected Sub InitDevice() + device = D3DDevice1.CreateDeviceAndSwapChain1(host.Handle) + swapChain = device.SwapChain + + SetViews() + ' Create the effect + Using effectStream As FileStream = File.OpenRead("Tutorial07.fxo") + effect_Renamed = device.CreateEffectFromCompiledBinary(New BinaryReader(effectStream)) + End Using + + ' Obtain the technique + technique = effect_Renamed.GetTechniqueByName("Render") + + ' Obtain the variables + worldVariable = effect_Renamed.GetVariableByName("World").AsMatrix() + viewVariable = effect_Renamed.GetVariableByName("View").AsMatrix() + projectionVariable = effect_Renamed.GetVariableByName("Projection").AsMatrix() + meshColorVariable = effect_Renamed.GetVariableByName("vMeshColor").AsVector() + diffuseVariable = effect_Renamed.GetVariableByName("txDiffuse").AsShaderResource() + + InitVertexLayout() + InitVertexBuffer() + InitIndexBuffer() + + ' Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList + + ' Load the Texture + Using stream As FileStream = File.OpenRead("seafloor.png") + textureRV = TextureLoader.LoadTexture(device, stream) + End Using + + InitMatrices() + + diffuseVariable.Resource = textureRV + End Sub +#End Region + +#Region "SetViews()" + Private Sub SetViews() + ' Create a render target view + Using buffer As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(buffer) + End Using + + 'bind the views to the device + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}) + + ' Setup the viewport + Dim vp As New Viewport() With {.Width = CUInt(host.ActualWidth), .Height = CUInt(host.ActualHeight), .MinDepth = 0.0F, .MaxDepth = 1.0F, .TopLeftX = 0, .TopLeftY = 0} + + device.RS.Viewports = New Viewport() {vp} + End Sub +#End Region + +#Region "InitVertexLayout()" + Private Sub InitVertexLayout() + ' Define the input layout + ' The layout determines the stride in the vertex buffer, + ' so changes in layout need to be reflected in SetVertexBuffers + Dim layout() As InputElementDescription = {New InputElementDescription() With {.SemanticName = "POSITION", .SemanticIndex = 0, .Format = Format.R32G32B32Float, .InputSlot = 0, .AlignedByteOffset = 0, .InputSlotClass = InputClassification.PerVertexData, .InstanceDataStepRate = 0}, New InputElementDescription() With {.SemanticName = "TEXCOORD", .SemanticIndex = 0, .Format = Format.R32G32Float, .InputSlot = 0, .AlignedByteOffset = 12, .InputSlotClass = InputClassification.PerVertexData, .InstanceDataStepRate = 0}} + + Dim passDesc As PassDescription = technique.GetPassByIndex(0).Description + + vertexLayout = device.CreateInputLayout(layout, passDesc.InputAssemblerInputSignature, passDesc.InputAssemblerInputSignatureSize) + + device.IA.InputLayout = vertexLayout + End Sub +#End Region + +#Region "InitVertexBuffer()" + Private Sub InitVertexBuffer() + Dim verticesData As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Vertices)) + Marshal.StructureToPtr(cube.Vertices, verticesData, True) + + Dim bufferDesc As New BufferDescription() With {.Usage = Usage.Default, .ByteWidth = CUInt(Marshal.SizeOf(cube.Vertices)), .BindingOptions = BindingOptions.VertexBuffer, .CpuAccessOptions = CpuAccessOptions.None, .MiscellaneousResourceOptions = MiscellaneousResourceOptions.None} + + Dim InitData As New SubresourceData() With {.SystemMemory = verticesData} + + vertexBuffer = device.CreateBuffer(bufferDesc, InitData) + + ' Set vertex buffer + Dim stride As UInteger = CUInt(Marshal.SizeOf(GetType(SimpleVertex))) + Dim offset As UInteger = 0 + device.IA.SetVertexBuffers(0, New D3DBuffer() {vertexBuffer}, New UInteger() {stride}, New UInteger() {offset}) + Marshal.FreeCoTaskMem(verticesData) + End Sub +#End Region + +#Region "InitIndexBuffer()" + Private Sub InitIndexBuffer() + Dim indicesData As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Indices)) + Marshal.StructureToPtr(cube.Indices, indicesData, True) + + Dim bufferDesc As New BufferDescription() With {.Usage = Usage.Default, .ByteWidth = CUInt(Marshal.SizeOf(cube.Indices)), .BindingOptions = BindingOptions.IndexBuffer, .CpuAccessOptions = CpuAccessOptions.None, .MiscellaneousResourceOptions = MiscellaneousResourceOptions.None} + + Dim initData As New SubresourceData() With {.SystemMemory = indicesData} + + indexBuffer = device.CreateBuffer(bufferDesc, initData) + device.IA.IndexBuffer = New IndexBuffer(indexBuffer, Format.R32UInt, 0) + Marshal.FreeCoTaskMem(indicesData) + End Sub +#End Region + +#Region "InitMatrices()" + Private Sub InitMatrices() + ' Initialize the view matrix + Dim Eye As New Vector3F(0.0F, 3.0F, -6.0F) + Dim At As New Vector3F(0.0F, 0.0F, 0.0F) + Dim Up As New Vector3F(0.0F, 1.0F, 0.0F) + + viewMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixLookAtLH(Eye, At, Up) + + ' Initialize the projection matrix + projectionMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixPerspectiveFovLH(CSng(Math.PI) * 0.25F, (CSng(host.ActualWidth) / CSng(host.ActualHeight)), 0.5F, 100.0F) + + ' Update Variables that never change + viewVariable.Matrix = viewMatrix + projectionVariable.Matrix = projectionMatrix + End Sub +#End Region + +#Region "RenderScene" + ''' + ''' Render the frame + ''' + Protected Sub RenderScene() + If (needsResizing) Then + renderTargetView.Dispose() + Dim sd As SwapChainDescription = swapChain.Description + swapChain.ResizeBuffers(sd.BufferCount, CUInt(host.ActualWidth), CUInt(host.ActualHeight), sd.BufferDescription.Format, sd.Options) + SetViews() + InitMatrices() + End If + Dim worldMatrix As Matrix4x4F + + currentTime = (Environment.TickCount - startTime) / 1000.0F + + 'WPF transforms used here use degrees as opposed to D3DX which uses radians in the native tutorial + '360 degrees == 2 * Math.PI + 'world matrix rotates the first cube by t degrees + Dim rotateTransform As New RotateTransform3D(New AxisAngleRotation3D(New Vector3D(0, 1, 0), currentTime * 30)) + worldMatrix = rotateTransform.Value.ToMatrix4x4F() + + ' Modify the color + meshColor.X = (CSng(Math.Sin(currentTime * 1.0F)) + 1.0F) * 0.5F + meshColor.Y = (CSng(Math.Cos(currentTime * 3.0F)) + 1.0F) * 0.5F + meshColor.Z = (CSng(Math.Sin(currentTime * 5.0F)) + 1.0F) * 0.5F + + ' Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor) + + ' + ' Update variables that change once per frame + ' + worldVariable.Matrix = worldMatrix + meshColorVariable.FloatVector = meshColor + + ' + ' Render the cube + ' + Dim techDesc As TechniqueDescription = technique.Description + For p As UInteger = 0 To techDesc.Passes - 1UI + technique.GetPassByIndex(p).Apply() + device.DrawIndexed(36, 0, 0) + Next p + + swapChain.Present(0, PresentOptions.None) + End Sub + +#End Region + + Private Sub host_SizeChanged(ByVal sender As System.Object, ByVal e As System.Windows.SizeChangedEventArgs) + needsResizing = True + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/seafloor.png b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/seafloor.png new file mode 100644 index 00000000..4ce440f9 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WPF/seafloor.png differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/D3D10Tutorial07_WinFormsControl.vbproj b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/D3D10Tutorial07_WinFormsControl.vbproj new file mode 100644 index 00000000..7cf4e295 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/D3D10Tutorial07_WinFormsControl.vbproj @@ -0,0 +1,121 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {CE251D57-5072-44E7-8238-C977F610BBD1} + WinExe + + + D3D10Tutorial07_WinFormsControl + v3.5 + On + Binary + Off + On + 512 + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + 3.0 + + + + + + 3.0 + + + + + + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + TutorialWindow.vb + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + PreserveNewest + + + PreserveNewest + + + True + Settings.settings + True + + + Form + + + TutorialWindow.vb + + + + + + PreserveNewest + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/D3DStructs.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/D3DStructs.vb new file mode 100644 index 00000000..4ac592fe --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/D3DStructs.vb @@ -0,0 +1,38 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Runtime.InteropServices +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D + +Namespace D3D10Tutorial07_WinFormsControl + #Region "SimpleVertex" + _ + Public Structure SimpleVertex + _ + Public Pos As Vector3F + _ + Public Tex As Vector2F + End Structure + #End Region + + #Region "Cube" + Public Class Cube + Public Vertices As New CubeVertices() + Public Indices As New CubeIndices() + + _ + Public Class CubeVertices + _ + Private vertices() As SimpleVertex = { New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Tex = New Vector2F (0.0f, 1.0f)} } + End Class + + _ + Public Class CubeIndices + _ + Private indices() As UInteger = { 3,1,0, 2,1,3, 6,4,5, 7,4,6, 11,9,8, 10,9,11, 14,12,13, 15,12,14, 19,17,16, 18,17,19, 22,20,21, 23,20,22 } + End Class + End Class + #End Region +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..4007ffbc --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/My Project/AssemblyInfo.vb @@ -0,0 +1,40 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/My Project/Resources.Designer.vb new file mode 100644 index 00000000..b5a64a5f --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/My Project/Resources.Designer.vb @@ -0,0 +1,64 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My.Resources + + + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If (resourceMan Is Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/My Project/Settings.Designer.vb new file mode 100644 index 00000000..34f1fe80 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Program.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Program.vb new file mode 100644 index 00000000..b226f708 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Program.vb @@ -0,0 +1,22 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms + +Namespace D3D10Tutorial07_WinFormsControl + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New TutorialWindow()) + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Tutorial07.fx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Tutorial07.fx new file mode 100644 index 00000000..104eb059 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Tutorial07.fx @@ -0,0 +1,81 @@ +//-------------------------------------------------------------------------------------- +// File: Tutorial07.fx +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + +//-------------------------------------------------------------------------------------- +// Constant Buffer Variables +//-------------------------------------------------------------------------------------- +Texture2D txDiffuse; +SamplerState samLinear +{ + Filter = MIN_MAG_MIP_LINEAR; + AddressU = Wrap; + AddressV = Wrap; +}; + +cbuffer cbNeverChanges +{ + matrix View; +}; + +cbuffer cbChangeOnResize +{ + matrix Projection; +}; + +cbuffer cbChangesEveryFrame +{ + matrix World; + float4 vMeshColor; +}; + +struct VS_INPUT +{ + float4 Pos : POSITION; + float2 Tex : TEXCOORD; +}; + +struct PS_INPUT +{ + float4 Pos : SV_POSITION; + float2 Tex : TEXCOORD0; +}; + + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +PS_INPUT VS( VS_INPUT input ) +{ + PS_INPUT output = (PS_INPUT)0; + output.Pos = mul( input.Pos, World ); + output.Pos = mul( output.Pos, View ); + output.Pos = mul( output.Pos, Projection ); + output.Tex = input.Tex; + + return output; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( PS_INPUT input) : SV_Target +{ + return txDiffuse.Sample( samLinear, input.Tex ) * vMeshColor; +} + + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS() ) ); + } +} + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Tutorial07.fxo b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Tutorial07.fxo new file mode 100644 index 00000000..cb026042 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/Tutorial07.fxo differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/TutorialWindow.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/TutorialWindow.Designer.vb new file mode 100644 index 00000000..e126c5b3 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/TutorialWindow.Designer.vb @@ -0,0 +1,60 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace D3D10Tutorial07_WinFormsControl + Partial Public Class TutorialWindow + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Dim resources As New System.ComponentModel.ComponentResourceManager(GetType(TutorialWindow)) + Me.directControl = New Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl() + Me.SuspendLayout() + ' + ' directControl + ' + Me.directControl.Dock = System.Windows.Forms.DockStyle.Fill + Me.directControl.Location = New System.Drawing.Point(0, 0) + Me.directControl.Name = "directControl" + Me.directControl.Size = New System.Drawing.Size(624, 442) + Me.directControl.TabIndex = 4 +' Me.directControl.SizeChanged += New System.EventHandler(Me.directControl_SizeChanged) + ' + ' TutorialWindow + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6F, 13F) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(624, 442) + Me.Controls.Add(Me.directControl) + Me.Icon = (CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)) + Me.Name = "TutorialWindow" + Me.Text = "Direct3D 10 Tutorial 7: Texture Mapping and Constant Buffers" +' Me.Load += New System.EventHandler(Me.TutorialWindow_Load) + Me.ResumeLayout(False) + + End Sub + + #End Region + + Private WithEvents directControl As Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl + End Class +End Namespace + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/TutorialWindow.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/TutorialWindow.resx new file mode 100644 index 00000000..0dd393c3 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/TutorialWindow.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAAABABoBgAAlgAAACAgEAAAAAQA6AIAAP4GAAAQEBAAAAAEACgBAADmCQAAMDAAAAAA + CACoDgAADgsAACAgAAAAAAgAqAgAALYZAAAQEAAAAAAIAGgFAABeIgAAMDAAAAAAIACoJQAAxicAACAg + AAAAACAAqBAAAG5NAAAQEAAAAAAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAAAA + AAD//wAA////AACAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMy2t7a2bMzMzMzMzMzMzMzMzMzMzMzMu7a3tnd2d2ZszMzMzMzMzMzMzMzMzMy7t7tr + a2dnZmZmbMzMzMzMzMzMzMzMzLu7e2tnZnZmZmZmZmzMzMzMzMzMzMzMy7u3u7e2tmdmZmZmZmbMzMzM + zMzMzMzMt7e7u3tra2Z2ZmZmZmZszMzMzMzMzMzLu7u7u7u7d7Z2ZmZmZmZmzMzMzMzMzMx7O7u7s3N7 + trd2tmZmZuZmbMzMzMzMzMu7u7uzNye7e2trZmd3ZmZmZszMzMzMzLO7u7MzqmZ3t7Z3ZrdyZmbmZmzM + zMzMy7u7s7MKqqZre2t2t3AqpmZmZmbMzMzMx7OzuzIqqqpnt7a3ZzIqamZm5mbMzMzMO7u7syKqqqpm + e3trYzKqqmZmZmZszMzMu7OzMiqqqqpqe7a2syKqqmpmZmZszMzLszszIiqqqqqmd7t7cCqqqqamZmZm + zMzHu7swAiKqqqqqZ3u3MCqqqqpqZmZmzMzLMzMzACIqKqqqZ7t7Aqqqqqqqd2ZmzMzLO7szMAIiqqqq + anszIqqqqqoid2ZmzMxzszOzMwAiIqqqpmMyKqqqqqIie2ZnbMy7O7OzszAAIiqqqqd6qqqqoiIzd2Zm + bMw3szs7OzMwAiKqqqqqqqqqIDN3tmZ2bMy7M7OzuzszACKqqqqqqqoiA3trZrZmvMxzOzOzs7O7MAIq + qqqqqqcjN7a3t2ZnfMw7M7Ozs7s7MwIqqqqqqqoje3t3a3d2fMx7OzM7O7O7MzAqqqqqqqpnt7e7trZ3 + fMy3MzOzuzuzswKqqqqqqqqme7tra2dnfMx7M7M7M7O7MwKqqqqqqqpqZ7u7u7a2vMx3szszs7OzMqqq + qqqqqqqmpnu7t7tnfMzLczM7OzswKqqqqqoqKqqqpme7u7e7zMzHOzOzMzMCqqqqqqIiKqqqpqZ7u7e2 + zMzLc7MzMzKqqqqqqiIAIiqqqmpnu7t7zMzMtzMzMCKqqqqqqgMwACIqqqqne7e8zMzMN7MzAiqqqqqq + ojMzACIqqqqnO3u8zMzMxzszACKqqqqqIDszMwIiqqIjO7vMzMzMy3MzAAIiqqqqA7O7MwAiIqIDu3vM + zMzMzHtzMwAioqqiM7s7szMCIiAzu7zMzMzMzMe3MwAiKqojM7O7O7MAIgO7u8zMzMzMzMx7MzAAIqID + O7OzuzMwAzO7vMzMzMzMzMzHdzMAAiIzszuzs7MzM7t7zMzMzMzMzMzMtzcwACMzOzM7OzuzM3u8zMzM + zMzMzMzMx7s3MDMzs7Ozs7Ozu7vMzMzMzMzMzMzMzHdzMzOzMzs7Ozs7t7zMzMzMzMzMzMzMzMy3d7cz + s7M7O3u3vMzMzMzMzMzMzMzMzMzMt3t7e3t7e7e8zMzMzMzMzMzMzMzMzMzMzMe3t7e3t8zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz///////8AAP///////wAA///AH///AAD//AAB//8AAP/w + AAB//wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/AAD8AAAAAf8AAPgAAAAA/wAA8AAAAAB/ + AADgAAAAAD8AAOAAAAAAPwAAwAAAAAAfAADAAAAAAB8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAIAA + AAAADwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAADAAAAAAB8AAMAA + AAAAHwAA4AAAAAA/AADgAAAAAD8AAPAAAAAAfwAA+AAAAAD/AAD8AAAAAf8AAP4AAAAD/wAA/wAAAAf/ + AAD/gAAAD/8AAP/AAAAf/wAA//AAAH//AAD//AAB//8AAP//gA///wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgIAAgAAAAIAAgACAgAAAwMDAAICA + gAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzLe2tmbMzMzMzMzMzMzMy3dnZ2ZmZmzMzMzMzMzMzHu7t3ZmZmZmzMzMzMzMzHu7u7 + t7a2ZmZmbMzMzMzMu7uzd3trZmZ2ZmbMzMzMy7uzMqZ7tnd3dmZmbMzMzMuzMCqma2t2cKpmZmzMzMy7 + MyKqqqe2tzKqpmZmzMzLszIqqqpmu3cKqqamZmzMyzMCIqqqpndzKqqqZmZszMszACIqqqprMKqqqqp2 + bMxzszACIiqqpzKqqqoidmbMOzszACIqqqqqqqqiA3ZmzLs7MzAAIqqqqqqiA3dmZsxzM7MzMAKqqqqq + I3trdmfMu7M7OzMAqqqqqqO3trdmzHMzs7MzAqqqqqqqe3t3a8x7OzszMqqqqqqqpme7trbMtzMzMCqq + qqqiqqqmZ7trzMtzMwKqqqqiAiKqqqZ7fMzHszAqqqqqoAAiqqqiu7zMw3MwIiqqqiMwAiqqI7e8zMy3 + MAIiqqIzMwIiIjO7zMzMx3MAIiogM7MAIiM7vMzMzMNzcAIiIzszMAIDu7zMzMzMdzMwIgM7OzMzO3vM + zMzMzMt3MwMzs7OzM7u8zMzMzMzMx3c3Mzs7O7e8zMzMzMzMzMw3e3t7e7e7zMzMzMzMzMzMzMN7e3t8 + zMzMzMzM////////////4B///wAD//4AAf/4AAB/8AAAP+AAAB/gAAAfwAAAD4AAAAeAAAAHgAAABwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AAAAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gA + AH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzM + zMzMzMzMzMzLZmbMzMzMy7e2ZmbMzMyzB3dndmzMyzKqe3CmZszDCqpnMqpmzLMyqqcKqqZsOzAqqqqi + dmwzszCqqie2bDMzMqqqZ7tsMzAqqqqme7zDAqqiAqqrzMcyqqMwojvMzHMqCzAjvMzMxzIzMzvMzMzM + xze7zMzM//+zMPg/a2vgD6pmwAfMzIADMyKAA6e2AAGqpgABzMwAATIqAAFmuwABqqaAA2zMgAMCIsAH + pnfgD6qq+D9szCgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWAAAA0QAAAM4A + AADNAAAAywAAAMgAAADGAAAAxQAAAMIAAADBAAAAvgAAALwAAAC6AAAAtwAAALUAAACzAAAAsAAAAK0A + AACpAAAApgAAAJwAAABzAAAAZwAAADwAAACiAQEAkgEBAN0CAgDAAgIAvQICAH0BAQBWAQEAzgMDAMMD + AwC/AwMAsAMDALQEBACGAwMA5wYGACUBAQDTBgYAxQYGAKQFBQDXBwcAuQcHAMAICABIAwMAMgICALQI + CACtCAgAoQcHAMcKCgD5Dg4AvgsLAOEODgDMDAwAmgoKANIPDwDFEREArQ8PAPoXFwDpFxcApBERANwY + GADJGRkA/iEhALcYGAD0IyMA1B4eAOQiIgBjDw8A7SUlABoEBAD9KioAlxkZAAwCAgClHR0A9SwsADMJ + CQDXJycAuSIiAMYoKAD+NDQAiRwcAPQ0NADnNDQA2jIyAP47OwCqKSkA9j09AP5CQgD+RkYA9ENDAP9J + SQC6NjYAyzw8AGYfHwA1EBAA/05OAPhNTQDlR0cA/1FRAKg3NwD/VVUAu0BAAEkZGQCKMDAA/1paAPZX + VwD2WloA/15eAMhLSwC3RUUA/2FhAG4qKgC/TEwA/2ZmALFHRwDoX18A9mZmALVLSwD/bGwAtk5OAMxZ + WQDmZWUAr01NAKBHRwD/cnIAt1JSADMXFwD2c3MA/3h4ACkUFAD/fX0A/4GBAOl3dwD/hoYA+oODAPaG + hgD/jY0AqF1dAGY5OQD/k5MA5oaGAMVzcwD/mZkA8JOTAP+engD/oqIA+6GhAKNpaQCEVVUA/6amAMuF + hQD/rKwA8KamAP+ysgD0q6sA/7a2APuzswD/ubkA+bW1AP++vgDgqakA/8LCAP/FxQD/yckA6Lm5AP/O + zgCOc3MA/M3NAOzCwgDDq6sAMy0tAAD+/gAA/f0AAPv7AAD5+QAA9/cAAPT0AADx8QAA7+8AAO3tAADp + 6QAA5uYAAOTkAADg4AAA398AANraAADT0wAAyckAAI6OAAB9fQABzs4AAcbGAAHCwgABuroAAbS0AAGt + rQABpKQAAZubAAGHhwAC+fkAAvf3AAF1dQAD//8AA/v7AAX19QAG//8ABubmAAJSUgAJ//8ADP//AAnA + wAAIj48ABmhoAAMxMQAQ8/MAEf7+AAqBgQAGSUkAFv7+AA+qqgAW6+sADH5+AAQoKAAWysoAHf7+ABzX + 1wAo/v4AJujoADT//wAt19cAMuLiADf29gA7/v4ABhgYAEf9/QBU/v4AUPDwAD2wsAAYREQAFj09ABAs + LABO1NQAZPDwAGr29gB29fUAPHx8AC9dXQBarq4Ac93dAIC+vgBDYmIAltTUAIeYmAAAAAAA//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////XGRqcHh+hIeK//// + //////////////////////////////////////////9ISFZaZGpzfoKEh4qNjZCSk/////////////// + ////////////////////////QEBIVlxmc36Eh4qNkJKSk5eXl5mZ//////////////////////////// + /////0xCSEhRWWFteIKHipCSk5mZm5ubm5ubm5v/////////////////////////////QkJMTFFRVllk + anN+hIqNkpmbnaGhoaGfn52d//////////////////////////9GRkxMTEhASFNYWmRteIKHjZKXm6Gj + pKSko6Gfn////////////////////////0ZGRkJCOzszPENVU1lhanN+hYqQl5uho6WlpaSjoZ////// + ////////////////REREPDwzMzMqPWllVVZcZnB4goeKkJecoqaqqaelpKGf//////////////////9E + Pjw8NSUlJRAe/PmoXlhaZG1zfoSHipGYqKirpqmnpaShn////////////////04+PjUlJSUBJKzU5e77 + lWNZYWpzeIKFiY+W+O/7q6qpp6WjoZ3/////////////TkM+NRoaGgQV8MCx4uz0+3JbYWZweH6Ehous + 397u/auqqaeloZ+b////////////Qz44KhoaBB3xw7Kt3Obt+otjWmRqc3iBeozww8rq9f2rqqmnpJ+b + //////////9OQzgnAAAEJPDCtLCt2eTs9P5uW1xkanN7fYDHubDk7fb9q6qppaGdm/////////9DPzYf + AgsW8MS6s7Ct0uLm7fqVY1lcZmx6cfLDtq/c5u32/auqpKOdmf///////1A/OSgHEhbxvsO8t7KuzNnk + 7PT+blhZXGNlgMu8tK/S4urt9v2rpqGfmZf//////1A/MigMGRfr1sfEwLizr8/i5u37i1RRWF5f8cK3 + sq6t0+Lm7PT7q6afmZP//////1A/LBsNGR5H68vHxcG7tbDT5Oz0/mdMVFdg1ru0sK6urrDO3uj5/qKg + mZL//////085LBsKESQeR+vWvsbDvLax2ebt+n1QT0Xww7WxsLCytLe7wd33qKKemZL/////UE9BKxwJ + Cg8ZHiZK27/HxMC3sOLq7v5pX/C9tbGwsbO3u8HH1vGMj5qbmZKN////UE9BKwwKCAcLFBUXSuDWvsXA + ts3k6vPv7+Gyrq+wsrfAxcjxgIyLjpSZl5CK////UE9BIw0LCQcFBxAkHiZK277Eu7PT5OTk4tnPra2v + tsDI8oBxfXqGiI2Tk42H////XU86Ig8NCggFAgIHExUXStHHvbev09zc2dPSz9LQxNaDX2VudXZ+goeQ + ko2E////XU86IhAODAoHBAEAAQ0dLkrLw7myrdLT0s/S09nh+GhpXmNrbXBzeISKkIqC////XU86EREP + DQsIBQIBAAARFibXxrmyrq3MzMzP2eLn92leW1xhZGZqbX6Fiod+////Z1c6EhIRDwwKBwQBAAAEGRfg + xrexrq2tra3P2eLp85ZeWFlZWlxcZHCCh4V4////b109KRMREA4MCQYDAQADGS7WwLOwra2trq2t0+Lm + 7vuLVFFRVlZWWWZ4hYJz////b11LMRMTERANCwgFAgIOHtvBtbGvra6vsbGwrtnk7PX7ckhISEhRUVpw + fnhw////b2dXPSkTEhEPDQoICRIX38CzsK+urrCztri3tLDc5u31+15AQEBASFZmc3Bw/////29XPTEY + ExIRDw0OGWDFt7Kvrq2tsLO6vcK9u7ax3Obt9ftvOzM7O1Fcamb//////29lSz0UGBMSERgW8MKzr6+t + ra2usrvG1svHw8C4sdzm7fX6lTwzM0hWYWT//////29vVz0xFBQUHS3WvLKvrq2tra2xt8bxSuvRyMW9 + uLHc5uzt+qhDM0BRWWT///////93ZUs3GR0eg9bBt7Kvra2tra+zvfEXLSZK28jFvbix2eTq7vlpPkhR + Vv////////90b1dJJB4m0cfCu7Wwra2trrG61S0UFBUuStvIxb24ssnY4/dSPkxWWv//////////d2VX + Uh4m4L/Gwru1sK2usLXFYBIEBREVF0rRyMW9urfA2i06PExW////////////dHdlSUUuSuC/xsK7tbCw + tL3xGQUBAQMQHRdK277FwcLfTRk+RlNi/////////////3d0ZVJFLkrgy8bCu7W0u9YWCgQCAQEDDh0X + StG+x9ZNJDg8TFj///////////////95dGVSRS5K17/Gwru7xhcTCQcFBAMBAw4VLuvW1k0kNjxGU/// + ////////////////f3RlUkUuSte/xsPF8R0OCwoIBwUEAwUTFi5HTR0yPkRU//////////////////// + /393ZVJFTUrXy77bHhMPDQwKCQgHBQQJFBUWJDQ+RFT///////////////////////9/eWVpX2BH8tsX + GRIRDw4NCwoJBwYFITA6OUNEVP//////////////////////////eXl0aXFoYC0dGBMSERAPDQwLCiAo + Mjk/Q05V/////////////////////////////3d/fH1pcVJLPTowMDAvLys0NDk/P05OVVX///////// + ////////////////////////d398dGVlV1dPQUFBQU9PUFBQUFVV//////////////////////////// + //////////90eX95b2dnZ11dXV5eXl5eXv////////////////////////////////////////////9v + cnJycnJubm5eXv////////////////////////////////////////////////////////////////// + ////////////////////////////////AAD///////8AAP//wB///wAA//wAAf//AAD/8AAAf/8AAP/A + AAAf/wAA/4AAAA//AAD/AAAAB/8AAP4AAAAD/wAA/AAAAAH/AAD4AAAAAP8AAPAAAAAAfwAA4AAAAAA/ + AADgAAAAAD8AAMAAAAAAHwAAwAAAAAAfAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAAAA + AAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAgAAAAAAPAACAAAAAAA8AAIAAAAAADwAAwAAAAAAfAADAAAAAAB8AAOAA + AAAAPwAA4AAAAAA/AADwAAAAAH8AAPgAAAAA/wAA/AAAAAH/AAD+AAAAA/8AAP8AAAAH/wAA/4AAAA// + AAD/wAAAH/8AAP/wAAB//wAA//wAAf//AAD//4AP//8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAC9AAAAuwAAALkAAAC2AAAAswAAALEAAAClAAAAowAAAKEA + AACcAAAAkQAAAG0AAABpAAAAZAAAAF0AAABYAAAANgAAADAAAAAqAAAAIgAAABMAAAAHAAAAhgEBAL8C + AgC8AgIAqAICAKECAgBPAQEAQgEBALsDAwCyAwMArQMDAH0CAgC3BAQAiwMDALMFBQC8BwcA3AkJAKUH + BwBVBAQAzgsLALwKCgCqCQkAOwMDAOgNDQAPAQEAXQcHAJcMDACgDg4AvBISAPkaGgDNFhYAWwoKAOcb + GwC2FhYA2hwcAKsXFwDDGxsAuxwcALUbGwDKICAA8ycnAJMZGQBFDAwA0yYmAOUtLQC2JCQA/TQ0APAy + MgDGLCwA+Do6AKwoKAD/PDwA1TMzAP8+PgDpOjoA/0REAPBAQADIOTkAwDc3AP9KSgC3NTUATRcXANdC + QgD/T08A+E1NAM1AQAAqDQ0A5khIACYMDADxTU0Avj09AKw5OQCVMTEA/1VVAMFCQgC6QUEAsT4+AP9b + WwDISUkAvkZGALFCQgBpJycAzU1NAAgDAwD/YmIANBQUAOhcXAD/ZmYAu0tLAPhnZwD/a2sAs0xMALxR + UQD/cnIAkUFBAHk2NgCkS0sA/3Z2AJtISAC2VVUAzmNjAP98fADodXUASyYmAP+EhAD2gYEAqFlZABYM + DAD/jIwAm1hYAGc7OwD+k5MAqmNjANJ9fQD/mpoA/56eAP+iogD/qKgA/6qqAN6WlgD/ra0A+6qqAP+w + sABzUVEA/7i4AOurqwD/u7sA/729APK3twCFZWUA/8PDAL6RkQD/ysoA16urAPXExAD3ysoAwqamAMyx + sQAhHR0AKScnAB0cHAAA//8AAP39AAD7+wAA+PgAAPb2AAD19QAA8/MAAPHxAADv7wAA7e0AAOrqAADm + 5gAA5OQAAOPjAADh4QAA398AAN3dAADY2AAA19cAAM3NAADLywAAx8cAAMPDAADBwQAAtbUAALCwAACt + rQAAqakAAKamAACjowAAlZUAAJKSAABmZgAAZGQAAY2NAAGCggACvLwAA/7+AAPs7AADwsIAApycAAT8 + /AAEtLQABK6uAAJcXAAEl5cAB/n5AAf09AAG2NgABaKiAASRkQADbGwACPX1AAR4eAAJ/v4ADv//AAZm + ZgAQ+voACpycABT//wALiooAFfT0ABz9/QAe6OgAI/39AAk6OgAs/f0ALu7uACKurgAz/f0AHo+PADz8 + /AA86+sAPNXVAEn9/QBG7+8AInBwAFL+/gA2oaEAVPX1AF/9/QAECgoAYOTkAFzT0wBr8fEAaM7OAGO8 + vABx1dUAgN7eAHzIyACQ5eUAfpeXAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////9janB3foKFiP////////////// + /////////////0lJUWNzfoWIiouMjI6Q//////////////////////9ERERJUWNwe4KJjpKUlZSS//// + //////////////9FPj4zMzZKTlVqc36IjJSYmpiVlP//////////////QjY2LSkwdf5XTV9te4KFjZmb + nJqYlP///////////0I2LSYfHOfr9YBOX213f4eR8fienZqYlP//////////OCYZIWvH3Ojz/GhVanN8 + g6HT6vufnZqV/////////zgpGx3ftqrZ5fD3hltjb3p91a3j8/2fnZiS//////9BNCAc1ry3r6bh6vP8 + aF9sdKK3q9rq8/2fnJKQ/////z0yIxPPwby3rqbj7feDWWR90LCqpOHq8vuelo7/////PSoXERbDwr24 + sajl8PliXqK0rKmoqcni7P6bjP///0Y6KgkNExbExb+6s9Lo7pF9yqioqa2zts3pl5OMif//RjolBAoO + ExbPxsC5sNzl5uLZo6WpsLrGoISHj4uF//9GOyIDBAoMERX02Lu0qdrh3trZzK7Uon10en+JioL//1A8 + JAQCAwcXDxMWxbWrpNna2t7g71NeaGxvd4KIfv//XEMgBgQBAAMJDRTktaqlo8jZ3uPsdVRWX19qe4V3 + //9lQysgBgMBAAkQgb2tqKamqKjR4er2dk5LTVVwfnP//2VSORogBgYLHd20q6emp6ywsq7S5fD6gFdF + SWNzbf//YWE5JwcHIRLOrKempaars7rHuLLX6PD3/GZFUWpj////bkgxFxBay7OrpqSkqLDL5Ma/urHR + 5e3y+UZLVf////9uYj8o5MW8tq+opaaruIEUFtbAuK+o4OLxQ0RL/////2JxXlMu1sG8tq+pqa/fEA0T + 9Ma+uLS01DU4RE3//////3F2Z1gWw8G8t7Kx1B0ICA8Vz8K+u9UdMj5H/////////3l4Z1hpw8G9usdY + CwACFxEWw8LYLCs2Rf//////////Ynl4Z1hpw8LA2A4FAAAHDBMu5CwnOEVO////////////Znl4Z2uB + z9sRCwQBAAIKDBwvMThCTP//////////////Znl2dX1rQCEaHyIZGB4rMTxBQkz///////////////// + /3GAeHReSDw3NzI6Oj1GSkr//////////////////////11xeXJuZWBcT1dXV0pK//////////////// + ////////////XGVlZGRkV0//////////////////////////////4B///wAD//4AAf/4AAB/8AAAP+AA + AB/gAAAfwAAAD4AAAAeAAAAHgAAABwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AA + AAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gAAH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvAAAALsAAAC6AAAAsgAAALEAAACwAAAArQAAAKcAAACfAAAAkwAAAH4A + AABtAAAAPAAAAKgEBAChBQUAYAMDADsCAgBVBAQAOwMDAKIMDAC0Dg4Avg8PANEWFgBoCwsA5xoaALsV + FQDFGBgAsxYWADwICACoFxcAgBISAPYuLgDfKSkA4y0tAJwfHwCyJCQAzy0tAOAxMQDzNzcA8zk5APA5 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAJGRkYLISEhHxwcHEB+FxeKtB4exd8o + KOr/ODj//0VF//9QUP//W1v//2Zm//9wcP//eHj//39///+Ghv//jIz//5GR//+Wlv//mZn/2YaG7aNo + aNJZOjquAAAAfwAAAF8AAAA7AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BZmZmBT09PRUwMDA1jB4eiMQa + Gs/0Hh75/ysr//86Ov//SEj//1ZW//9lZf//cXH//319//+Ghv//jo7//5OT//+Zmf//nZ3//6Cg//+k + pP//pqb//6en//+oqP/0oqL5tHl53F9BQbMAAAB9AAAAVgAAAC0AAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wGSkpIHSkpKH3Qp + KV66Hx++6yEh9fsmJv/9Li7//zU1//9DQ///T0///11d//9tbf//enr//4aG//+Pj///l5f//56e//+k + pP//qqr//66u//+wsP//s7P//7Oz//+zs///s7P//7Oz/+6np/ahcXHUNCYmngICAmwAAAA8AAAAFwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////AoCA + gAhEREQimyQkhNAgINz0JSX/9y0t//kvL//8MjL//zQ0//86Ov//RET//1BQ//9aWv//aGj//3R0//9/ + f///ior//5aW//+goP//qqr//7Ky//+3t///vLz//76+//++vv//vb3//7u7//+5uf//t7f/y5GR52VJ + SbcCAgJ5BAQERwAAABoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8DqqqqCU5OTiSsJSWW3CIi7O8lJf/yKir/9Ssr//cqKv/7KCj//iUl//0nJ//4MTH/9zk5//1F + Rf//UVH//19f//9ra///eHj//4WF//+Skv//np7//6mp//+zs///vLz//8LC///Fxf//xsb//8XF///C + wv//vr7//7u7/+KkpPKAXFzDAgICgAAAAEoAAAAaAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wOzs7MKWlpaIrAkJJrfISHz7CUl/+4kJP/wIiL/9B4e//YaGv/5FRX/+BER/+sS + Ev/WICD/3C0t//Q1Nf/+QkL//05O//9bW///Z2f//3V1//+Bgf//jY3//5ub//+mpv//srL//7y8//7D + w//9yMj//svL///Kyv//x8f//8LC//++vv/ura33iGNjxwQEBIAAAABGAAAAFwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////A9XV1QZsbGwariYmkNseHvPnISH/6SAg/+saGv/tFRX/8Q8P//UM + DP/xCQn/1QcH/6EPD/+KLS3/qzk5/983N//7PT3//0lJ//9WVv//YmL//2xs//94eP//hIT//4+P//+a + mv/9paX/9Kur/+Wrq//js7P/7sLC//vMzP/+zs7//8nJ///ExP//v7//7q2t94FeXsMCAgJ5AAAAPAAA + ABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Bo6OjhKoLCxz0iAg6uIbG//kGhr/5hUV/+gP + D//sCQn/7QQE/+MEBP+vAQH/WAcH/0NiYv9anJz/iG5u/8dAQP/1PT3//0ZG//9SUv//Xl7//2ho//9z + c///fHz//4aG//2QkP/wk5P/y4WF/5Rqav+QgYH/u56e/+a+vv/7zs7//8/P///Ly///xMT//76+/+Ol + pfJnSkq3AgICbAAAAC0AAAAIAAAAAAAAAAAAAAAAAAAAAP///wH///8Ev7+/DJg8PEPGISHU3Rsb/98V + Ff/hDg7/4wkJ/+YFBf/kAwP/0AEB/4MBAf8qNTX/CcDA/ybo6P9L6ur/ccDA/6NkZP/hQkL//END//9P + T///Wlr//2Rk//9ubv//eXn//4KC//aGhv/Penr/f09P/zdXV/8/u7v/esXF/7mqqv/pwcH//M7O///P + z///ysr//8PD//+9vf/LkpLnNicnngMDA1cAAAAbAAAAAwAAAAAAAAAAAAAAAP///wL///8HgICAFrch + IajZHR3/2hYW/9sNDf/dBgb/4AIC/98CAv/LAQH/cAAA/x5AQP8Dzc3/APf3/x7///9C/f3/Y/Hx/4S5 + uf/DTk7/9END//5MTP//VVX//2Bg//9qav//c3P//Hx8/+d6ev+eWVn/PCQk/w9/f/8X5ub/VvLy/4vZ + 2f/CsLD/68PD//zOzv//zs7//8jI///AwP//uLj/oXJy1AYGBn8AAAA7AAAACwAAAAAAAAAAAAAAAP// + /wTMzMwKqykpYc0eHvHVFhb/1g4O/9gGBv/aAgL/3AAA/8sAAP9+AAD/GkBA/wO8vP8A8/P/AP7+/xb/ + //81////Vf///3Lh4f+oXl7/5kRE//xGRv//UFD//1pa//9kZP//bW3/9nNz/8lmZv9kNjb/EUdH/wK5 + uf8C9/f/Ov7+/2v39/+X1NT/xrCw/+zDw//9zs7//8zM///Fxf//u7v/7qio92NGRrQDAwNgAAAAHgAA + AAIAAAAAAAAAAP///wZxcXESuyEht9EaGv/RERH/0wYG/9QBAf/XAQH/ywAA/4kAAP8YRkb/AsPD/wDv + 7/8A+fn/AP7+/xD///8o////Rv///2Px8f+JmZn/x01N//RDQ///Skr//1NT//9cXP/8ZWX/5mVl/5tJ + Sf8vGBj/A5ub/wHh4f8A+fn/Jf///0////91+Pj/mdXV/8awsP/swsL//MvL///IyP//v7///7W1/7d+ + ft0GBgaBAAAAOgAAAAoAAAAAAAAAAP///weqJiZVyR0d9MwVFf/ODAz/zgMD/84AAP+7AAD/awAA/xdD + Q/8CsrL/AN/f/wDw8P8A+fn/AP7+/wn///8c////Nv///1X9/f9y39//o2pq/+NDQ//8Q0P//0tL//9U + VP/2Wlr/y1JS/2cuLv8TKyv/ALy8/wDp6f8A+vr/FP///zX///9X////efPz/5vW1v/JsLD/7sLC//zH + x///wcH//7a2//SmpvldPz+vAwMDVwAAABYAAAAAAAAAALOzswq3IyOfyhwc/8kREf/JBwf/xQEB/6kA + AP9hAAD/Ez4+/wKNjf8AuLj/ANHR/wDm5v8A9PT/APz8/wL///8R////KP///0X///9j8vL/ipWV/8xH + R//2PDz//0FB//1JSf/pTEz/oTo6/zQVFf8FeHj/ANbW/wDv7/8A+/v/CP///x////84////V////3X1 + 9f+Zzs7/x6ys/+u9vf/8wMD//ri4//+srP+mbW3TBwcHcQYGBikAAAADAAAAAIVHRxm9ISHaxhkZ/8UM + DP/EBQX/ugAA/40AAP9BAAD/DB0d/wFqav8AnJz/ALa2/wDPz/8A4+P/APLy/wD7+/8G////G////zb/ + //9V+fn/dsLC/6lcXP/kOzv//Tc3//c+Pv/MOTn/aCEh/xI9Pf8Bv7//AObm/wD09P8A/Pz/Af///w3/ + //8a/v7/L/39/0n5+f9o7u7/j8TE/8Ojo//tt7f//Li4//+urv/bjIztFxISiwQEBD4AAAAKAAAAAKgk + JFXFIyP/wxcX/8EJCf/AAgL/twAA/5QAAP9UAAD/GgAA/wMfH/8AcnL/AJaW/wCvr/8Ax8f/ANzc/wDs + 7P8A+Pj/C/7+/yb///9G/f3/Ze3t/4WoqP/DQUH/7i8v/+cwMP+hJyf/OA8P/wZubv8A29v/AO/v/wD4 + +P8A/Pz/AP39/wD8/P8A+fn/BfX1/xXv7/8y4uL/XLq6/5qTk//drKz/+bW1//+trf//n5//ZD8/sQYG + BlEAAAASAAAAALIlJYnCISH/vhQU/74HB/+/AgL/vgAA/60AAP+FAAD/TwAA/xsAAP8DFxf/AGdn/wCM + jP8Apqb/AL29/wDT0/8A6Oj/APf3/xP+/v8z////Uv39/23c3P+eTk7/xyws/7YjI/9dEhL/E0RE/wG4 + uP8A7e3/APb2/wD5+f8A+fn/APX1/wDv7/8A5ub/ANra/wPGxv8Pqqr/N319/41sbP/epKT/+7Oz//+s + rP//np7/mFtbygoKCmIAAAAZAAAAALcoKLG/ISH/uxMT/7sHB/+9AgL/wAAA/78AAP+yAAD/jwAA/1sA + AP8nAAD/CAIC/wFHR/8Afn7/AJub/wC0tP8Az8//AObm/wD5+f8d/v7/Pf///1X09P9wjo7/gjs7/2Qg + IP8gSkr/AsvL/wDt7f8A9/f/APj4/wD39/8A8fH/AOfn/wDZ2f8Ax8f/AZub/whfX/8fOjr/Xjw8/7h5 + ef/wpqb//rGx//+qqv//nZ3/vG1t3RAQEG8AAAAgAAAAALcpKdG8IiL/uRMT/7gGBv+5AQH/vgAA/8MA + AP/EAAD/uwAA/54AAP9uAAD/PAAA/xIAAP8CKyv/AGVl/wCPj/8Ar6//AM/P/wDp6f8D+/v/Jf7+/z39 + /f9I3d3/R7Cw/zGmpv8Sy8v/APX1/wD8/P8A+/v/APn5/wDz8/8A5+f/ANDQ/wCtrf8DhIT/Ej09/zYb + G/9vODj/smFh/+aGhv/7oaH//6ur//+np///mpr/13Z26w8PD3gAAAAlAAAAALksLOe6IyP/thIS/7QE + BP+2AQH/uwAA/8AAAP/FAAD/yQAA/8UAAP+xAAD/iQAA/1cAAP8pAAD/CgAA/wFHR/8Ajo7/ALa2/wDY + 2P8A8PD/DP39/yP///8u/f3/LPj4/yD4+P8R/f3/Bf///wD///8A////APv7/wDq6v8AzMz/BISE/xIt + Lf8xFRX/ZCsr/55HR//MX1//63Nz//qDg///lpb//6Oj//+jo///lpb/63t79RQUFIAGBgYpAAAAALsx + Mfe3IiL/shAQ/7EDA/+zAQH/uAAA/70AAP/CAAD/yAAA/84AAP/OAAD/xAAA/6YAAP91AAD/OQAA/wwA + AP8BUVH/AJub/wDIyP8A5+f/APr6/w3///8Y////Gf///xP///8N////CP///wf///8I////Bubm/wKx + sf8MYWH/KxUV/2IiIv+bOjr/yU9P/+hfX//2Zmb//HBw//94eP//iYn//5mZ//+dnf//kpL/+Hx8+xUV + FYQGBgYrAAAAALs0NP60IiL/rw4O/64DA/+wAAD/tQAA/7oAAP+/AAD/xQAA/8sAAP/RAAD/1QAA/9IA + AP+2AAD/egAA/zEAAP8HDAz/AHd3/wC6uv8A4OD/APX1/wD///8J////C////wr///8H////CP///w3/ + //8T/f3/GsnJ/yZiYv9KGRn/iSgo/8Y+Pv/nTU3/9ldX//xdXf//YGD//2Rk//9tbf//fX3//46O//+X + l///jIz//nh4/xgYGIEGBgYpAAAAALo4OPezJSX/rA8P/6sCAv+tAAD/sgAA/7cAAP+8AAD/wgAA/8gA + AP/OAAD/0wAA/9gAAP/UAAD/rgAA/2gAAP8fAAD/AzU1/wChof8A4OD/APT0/wD9/f8B////A////wP/ + //8E////B////xD///8d/f3/LdfX/0h9ff+FMDD/zTc3//NDQ//9S0v//09P//9SUv//VVX//1hY//9e + Xv//cHD//4OD//+QkP//hob/+G5u/BkZGXsHBwcmAAAAALg+PuizKyv/qhIS/6gCAv+qAAD/rgAA/7MA + AP+5AAD/vgAA/8QAAP/KAAD/0AAA/9YAAP/aAAD/ygAA/5MAAP86AAD/CCUl/wCgoP8A5eX/APb2/wD9 + /f8A////AP///wD///8B////Bv///xD///8h////N/b2/1PKyv+IWlr/zz4+//k9Pf//QED//0ND//9G + Rv//SEj//0pK//9QUP//YmL//3h4//+IiP//gID/7GJi9RsbG3IICAghAAAAALZBQdOzMDD/qRUV/6UE + BP+nAQH/qwAA/7AAAP+1AAD/ugAA/8AAAP/GAAD/zAAA/9IAAP/XAAD/zQAA/5UAAP8xAAD/BWpq/wDM + zP8A8PD/APn5/wD+/v8A/v7/AP///wD9/f8A/v7/Af7+/wv///8d////N////1Ly8v9zvr7/qVtb/+g6 + Ov//NDT//zc3//86Ov//Ozv//z4+//9CQv//VVX//2tr//+AgP//eHj/3FdX6R4eHmcKCgoaAAAAALRD + Q7S0ODj/qhwc/6QICP+lAgL/pwAA/6wAAP+xAAD/tgAA/7wAAP/CAAD/yAAA/84AAP/OAAD/tAAA/1EA + AP8PTEz/AcfH/wDt7f8A9/f/APv7/wD+/v8A/f3/APv7/wD39/8A9vb/APj4/wD8/P8R/v7/Kv///0f9 + /f9k9fX/hL+//71PT//6Kir//yoq//8rK///Li7//zAw//82Nv//R0f//2Ji//91df//bm7/xUxM2iMj + I1gAAAASAAAAALFBQYq2QED/rCcn/6QPD/+jBQX/pAAA/6gAAP+tAAD/sgAA/7cAAP+9AAD/wgAA/8EA + AP+oAAD/QQAA/wx/f/8B0ND/APHx/wD4+P8A+/v/AP39/wD9/f8A+Pj/APHx/wDp6f8A5OT/AObm/wDu + 7v8A+fn/FP7+/zH///9P////bPX1/4y6uv/OQED/+x4e//8dHf//Hx///yIi//8oKP//PDz//1VV//9m + Zv//YGD/qkJCwykpKUUAAAAKAAAAALE9PU+3R0f/rS8v/6MVFf+hCAj/oQEB/6QAAP+pAAD/rQAA/7MA + AP+3AAD/tQAA/44AAP8wDw//Bqys/wDn5/8A9fX/APr6/wD8/P8A/v7/AP7+/wD5+f8A8PD/AN/f/wDL + y/8Aw8P/AMjI/wDX1/8A6Oj/APf3/xb9/f80////Uv///2719f+Ltrb/vkZG//UVFf//EBD//xUV//8b + G///MTH//0hI//9bW///Vlb/iDw8nzU1NTBAQEAEAAAAALEzMwqzRUXZsDo6/6YfH/+gDQ3/ngEB/6EA + AP+kAAD/qQAA/6sAAP+iAAD/agAA/xtDQ/8DwsL/APDw/wD6+v8A+/v/AP7+/wD+/v8A/v7/APz8/wD0 + 9P8A29v/AaWl/wFtbf8Ac3P/AJ6e/wC3t/8Azs7/AOTk/wD39/8W/v7/Nf///1H///9p9/f/f9jY/6Rt + bf/qERH//wcH//8REf//Jyf//z4+//9OTv/jSUntSzw8ak1NTR7///8B////AQAAAACwQkKbtEVF/6kq + Kv+hFBT/nQUF/5wAAP+dAAD/mAAA/4AAAP9DAAD/D2pq/wHR0f8A8/P/APv7/wD9/f8A/v7/AP///wD/ + //8A/v7/APf3/wDl5f8CoqL/Cj8//xAFBf8HERH/AVBQ/wCHh/8Ara3/AMrK/wDk5P8A9/f/Fv7+/zH/ + //9L////Xv39/27f3/+LfHz/0Rwc//oPD///IiL//zU1//9BQf+/Pz/MRkZGSWlpaRH///8B////AQAA + AACuPT1LtktL8602Nv+kHx//mgoK/5EBAf9+AAD/UgAA/yYSEv8Jb2//AcbG/wDn5/8A9fX/APv7/wD+ + /v8A////AP///wD+/v8A+/v/APHx/wHJyf8TQUH/PAAA/0oAAP8qAAD/CgEB/wFISP8AiIj/AKur/wDI + yP8A5OT/APb2/xD9/f8n/v7/Ofv7/0bv7/9XtbX/kDQ0/94aGv/6KSn//Tc3//U4OPmVQUGWXV1dLL+/ + vwgAAAAAAAAAAAAAAAAAAAAAsUZGr7JDQ/+nLS3/mxQU/4IGBv9bAQH/JQIC/wdRUf8BmJj/AMHB/wDZ + 2f8A7Oz/APj4/wD+/v8A////AP///wD9/f8A9vb/AN/f/wiPj/9MAAD/lwAA/5sAAP9wAAD/NAAA/wsA + AP8BR0f/AImJ/wCrq/8AyMj/AOTk/wD09P8C+fn/EPPz/xzX1/81e3v/iRkZ/9wbG//3Kyv/+zg4/8w5 + OdVYWFhRi4uLFv///wQAAAAAAAAAAAAAAAAAAAAArT4+UrNLS+6uPT3/nyUl/4MQEP9VBgb/IQEB/wUh + If8Aenr/AKWl/wDCwv8A29v/AO3t/wD4+P8A/v7/AP39/wD5+f8A6+v/BKqq/zMREf+pAAD/ywAA/8gA + AP+sAAD/dwAA/zcAAP8KAAD/AVFR/wCIiP8ArKz/AMnJ/wDf3/8A5ub/Ac7O/wqBgf9JBwf/sA8P/+kd + Hf/3Ly//7TY29p9CQpR0dHQus7OzCv///wMAAAAAAAAAAAAAAAAAAAAAAAAAAK9FRZu0Skr/qDY2/5Ie + Hv9sDg7/NgMD/w8AAP8CKir/AH19/wClpf8AwsL/ANzc/wDt7f8A+Pj/APn5/wDv7/8Bycn/HTs7/5UA + AP/JAAD/0gAA/9MAAP/MAAD/sQAA/3oAAP86AAD/DAAA/wFKSv8AjIz/AK+v/wDFxf8AwcH/CHx8/zUJ + Cf+SBgb/2RMT//AlJf/1MzP/wjw8xGtra0WmpqYX////BP///wEAAAAAAAAAAAAAAAAAAAAAAAAAAKo5 + OSiwSUnKsUhI/6UzM/+MHh7/YwwM/zMEBP8PAQH/Aisr/wB1df8ApaX/AMLC/wDb2/8A6+v/AO7u/wDa + 2v8Oamr/ZgAA/74AAP/LAAD/zgAA/9AAAP/RAAD/zQAA/7QAAP99AAD/PQAA/wsAAP8AWVn/AJCQ/wCe + nv8Ia2v/MwkJ/4kDA//QDQ3/6hwc//AsLP/UODjgjlJSa5WVlSTo6OgL////Av///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACtPz9ZtE9P47FHR/+kMzP/ihwc/2MODv8yBQX/DgEB/wMuLv8Afn7/AKam/wDB + wf8A19f/ANra/wSlpf88AAD/pQAA/8EAAP/FAAD/yAAA/8sAAP/NAAD/0AAA/80AAP+0AAD/dwAA/zEA + AP8GFBT/AmNj/wZhYf8wCwv/hAQE/8oLC//kGBj/7CYm/90xMe6pRESNi4uLLtLS0hH///8F////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0REdLRQUO+xSEj/ozIy/4kcHP9hDg7/MAQE/w0B + Af8CMDD/AH9//wCkpP8Aubn/Aa6u/xo8PP9+AAD/tQAA/7wAAP+/AAD/wgAA/8UAAP/IAAD/ywAA/80A + AP/JAAD/pwAA/2YAAP8tAAD/GggI/zIGBv9/AwP/xgoK/+AWFv/nJSX/4S8v9LQ8PJ6MjIwz3NzcFv// + /wr///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALBHR361U1PwskpK/6Q1 + Nf+NIiL/YxER/zMICP8QBAT/AzEx/wB0dP8Bj4//Dk1N/1sAAP+lAAD/swAA/7cAAP+6AAD/vQAA/8AA + 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 + yf+AAU3/wANP/+AHYf8= + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/TutorialWindow.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/TutorialWindow.vb new file mode 100644 index 00000000..587ae86f --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/TutorialWindow.vb @@ -0,0 +1,263 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.IO +Imports System.Runtime.InteropServices +Imports System.Windows.Forms +Imports System.Windows.Media.Media3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + +Namespace D3D10Tutorial07_WinFormsControl + ''' + ''' This application demonstrates texturing + ''' + ''' http://msdn.microsoft.com/en-us/library/bb172491(VS.85).aspx + ''' + ''' Copyright (c) Microsoft Corporation. All rights reserved. + ''' + Partial Public Class TutorialWindow + Inherits Form + #Region "Fields" + Private device As D3DDevice + Private swapChain As SwapChain + Private renderTargetView As RenderTargetView + Private textureRV As ShaderResourceView + Private backColor_Renamed As New ColorRgba(0.0F, 0.125F, 0.3F, 1.0F) + Private meshColor As New Vector4F(0.7f, 0.7f, 0.7f, 1.0f) + + Private effect As Effect + Private technique As EffectTechnique + + Private vertexLayout As InputLayout + Private vertexBuffer As D3DBuffer + Private indexBuffer As D3DBuffer + + 'variables from the .fx file + Private worldVariable As EffectMatrixVariable + Private viewVariable As EffectMatrixVariable + Private projectionVariable As EffectMatrixVariable + + Private meshColorVariable As EffectVectorVariable + Private diffuseVariable As EffectShaderResourceVariable + + Private cube As New Cube() + + Private viewMatrix As Matrix4x4F + Private projectionMatrix As Matrix4x4F + + Private currentTime As Single = 0f + Private dwTimeStart As UInteger = CUInt(Environment.TickCount) + Private needsResizing As Boolean + #End Region + + #Region "TutorialWindow()" + ''' + ''' Initializes a new instance of the class. + ''' + Public Sub New() + InitializeComponent() + End Sub + #End Region + + #Region "TutorialWindow_Load()" + Private Sub TutorialWindow_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load + InitDevice() + directControl.Render = AddressOf Me.RenderScene + End Sub + #End Region + + #Region "directControl_SizeChanged()" + Private Sub directControl_SizeChanged(ByVal sender As Object, ByVal e As EventArgs) Handles directControl.SizeChanged + needsResizing = True + End Sub + #End Region + + #Region "InitDevice()" + ''' + ''' Create Direct3D device and swap chain + ''' + Protected Sub InitDevice() + device = D3DDevice1.CreateDeviceAndSwapChain1(directControl.Handle) + swapChain = device.SwapChain + + SetViews() + + ' Create the effect + Using effectStream As FileStream = File.OpenRead("Tutorial07.fxo") + effect = device.CreateEffectFromCompiledBinary(New BinaryReader(effectStream)) + End Using + + ' Obtain the technique + technique = effect.GetTechniqueByName("Render") + + ' Obtain the variables + worldVariable = effect.GetVariableByName("World").AsMatrix() + viewVariable = effect.GetVariableByName("View").AsMatrix() + projectionVariable = effect.GetVariableByName("Projection").AsMatrix() + meshColorVariable = effect.GetVariableByName("vMeshColor").AsVector() + diffuseVariable = effect.GetVariableByName("txDiffuse").AsShaderResource() + + InitVertexLayout() + InitVertexBuffer() + InitIndexBuffer() + + ' Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList + + ' Load the Texture + Using stream As FileStream = File.OpenRead("seafloor.png") + textureRV = TextureLoader.LoadTexture(device, stream) + End Using + + InitMatrices() + + diffuseVariable.Resource = textureRV + needsResizing = False + End Sub + #End Region + + #Region "SetViews()" + ''' + ''' Sets the views that depend on background buffer dimensions + ''' + Private Sub SetViews() + ' Create a render target view + Using pBuffer As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(pBuffer) + End Using + + 'bind the render target to the device + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}, Nothing) + + ' Setup the viewport + Dim vp As New Viewport() With {.Width = CUInt(directControl.ClientSize.Width), .Height = CUInt(directControl.ClientSize.Height), .MinDepth = 0.0f, .MaxDepth = 1.0f, .TopLeftX = 0, .TopLeftY = 0} + + device.RS.Viewports = New Viewport() {vp} + End Sub + #End Region + + #Region "InitVertexLayout()" + Private Sub InitVertexLayout() + ' Define the input layout + ' The layout determines the stride in the vertex buffer, + ' so changes in layout need to be reflected in SetVertexBuffers + Dim layout() As InputElementDescription = {New InputElementDescription() With {.SemanticName = "POSITION", .SemanticIndex = 0, .Format = Format.R32G32B32Float, .InputSlot = 0, .AlignedByteOffset = 0, .InputSlotClass = InputClassification.PerVertexData, .InstanceDataStepRate = 0}, New InputElementDescription() With {.SemanticName = "TEXCOORD", .SemanticIndex = 0, .Format = Format.R32G32Float, .InputSlot = 0, .AlignedByteOffset = 12, .InputSlotClass = InputClassification.PerVertexData, .InstanceDataStepRate = 0}} + + Dim passDesc As PassDescription = technique.GetPassByIndex(0).Description + + vertexLayout = device.CreateInputLayout(layout, passDesc.InputAssemblerInputSignature, passDesc.InputAssemblerInputSignatureSize) + + device.IA.InputLayout = vertexLayout + End Sub + #End Region + + #Region "InitVertexBuffer()" + Private Sub InitVertexBuffer() + Dim verticesData As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Vertices)) + Marshal.StructureToPtr(cube.Vertices, verticesData, True) + + Dim bufferDesc As New BufferDescription() With {.Usage = Usage.Default, .ByteWidth = CUInt(Marshal.SizeOf(cube.Vertices)), .BindingOptions = BindingOptions.VertexBuffer, .CpuAccessOptions = CpuAccessOptions.None, .MiscellaneousResourceOptions = MiscellaneousResourceOptions.None} + + Dim InitData As New SubresourceData() With {.SystemMemory = verticesData} + + vertexBuffer = device.CreateBuffer(bufferDesc, InitData) + + ' Set vertex buffer + Dim stride As UInteger = CUInt(Marshal.SizeOf(GetType(SimpleVertex))) + Dim offset As UInteger = 0 + device.IA.SetVertexBuffers(0, New D3DBuffer() {vertexBuffer}, New UInteger() {stride}, New UInteger() {offset}) + Marshal.FreeCoTaskMem(verticesData) + End Sub +#End Region + +#Region "InitIndexBuffer()" + Private Sub InitIndexBuffer() + Dim indicesData As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Indices)) + Marshal.StructureToPtr(cube.Indices, indicesData, True) + + Dim bufferDesc As New BufferDescription() With {.Usage = Usage.Default, .ByteWidth = CUInt(Marshal.SizeOf(cube.Indices)), .BindingOptions = BindingOptions.IndexBuffer, .CpuAccessOptions = CpuAccessOptions.None, .MiscellaneousResourceOptions = MiscellaneousResourceOptions.None} + + Dim initData As New SubresourceData() With {.SystemMemory = indicesData} + + indexBuffer = device.CreateBuffer(bufferDesc, initData) + device.IA.IndexBuffer = New IndexBuffer(indexBuffer, Format.R32UInt, 0) + Marshal.FreeCoTaskMem(indicesData) + End Sub +#End Region + + #Region "InitMatrices()" + Private Sub InitMatrices() + ' Initialize the view matrix + Dim Eye As New Vector3F(0.0f, 3.0f, -6.0f) + Dim At As New Vector3F(0.0f, 0.0f, 0.0f) + Dim Up As New Vector3F(0.0f, 1.0f, 0.0f) + + viewMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixLookAtLH(Eye, At, Up) + + ' Initialize the projection matrix + projectionMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixPerspectiveFovLH(CSng(Math.PI) * 0.25F, (CSng(Me.ClientSize.Width) / CSng(Me.ClientSize.Height)), 0.5F, 100.0F) + + ' Update Variables that never change + viewVariable.Matrix = viewMatrix + projectionVariable.Matrix = projectionMatrix + End Sub + #End Region + + #Region "RenderScene()" + ''' + ''' Render the frame + ''' + Protected Sub RenderScene() + If needsResizing Then + needsResizing = False + renderTargetView.Dispose() + Dim sd As SwapChainDescription = swapChain.Description + swapChain.ResizeBuffers(sd.BufferCount, CUInt(directControl.ClientSize.Width), CUInt(directControl.ClientSize.Height), sd.BufferDescription.Format, sd.Options) + SetViews() + ' Update the projection matrix + projectionMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixPerspectiveFovLH(CSng(Math.PI) * 0.25F, (CSng(directControl.ClientSize.Width) / CSng(directControl.ClientSize.Height)), 0.5F, 100.0F) + projectionVariable.Matrix = projectionMatrix + End If + Dim worldMatrix As Matrix4x4F + + currentTime = (Environment.TickCount - dwTimeStart) / 1000.0f + + 'WPF transforms used here use degrees as opposed to D3DX which uses radians in the native tutorial + '360 degrees == 2 * Math.PI + 'world matrix rotates the first cube by t degrees + Dim rt1 As New RotateTransform3D(New AxisAngleRotation3D(New Vector3D(0, 1, 0), currentTime*30)) + worldMatrix = rt1.Value.ToMatrix4x4F() + + ' Modify the color + meshColor.X = (CSng(Math.Sin(currentTime * 1.0f)) + 1.0f) * 0.5f + meshColor.Y = (CSng(Math.Cos(currentTime * 3.0f)) + 1.0f) * 0.5f + meshColor.Z = (CSng(Math.Sin(currentTime * 5.0f)) + 1.0f) * 0.5f + + ' Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor_Renamed) + + ' + ' Update variables that change once per frame + ' + worldVariable.Matrix = worldMatrix + meshColorVariable.FloatVector = meshColor + + ' + ' Render the cube + ' + Dim techDesc As TechniqueDescription = technique.Description + For p As UInteger = 0 To techDesc.Passes - 1UI + technique.GetPassByIndex(p).Apply() + device.DrawIndexed(36, 0, 0) + Next p + + swapChain.Present(0, PresentOptions.None) + End Sub + #End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/directx.ico b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/directx.ico differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/seafloor.png b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/seafloor.png new file mode 100644 index 00000000..4ce440f9 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsControl/seafloor.png differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/D3D10Tutorial07_WinFormsWindow.vbproj b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/D3D10Tutorial07_WinFormsWindow.vbproj new file mode 100644 index 00000000..558dfcc1 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/D3D10Tutorial07_WinFormsWindow.vbproj @@ -0,0 +1,115 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {9DCD7874-4D07-413B-9E64-AA947B11D9FC} + WinExe + + + D3D10Tutorial07 + v3.5 + On + Binary + Off + On + 512 + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + 3.0 + + + + 3.5 + + + + + 3.0 + + + + + + Form + + + TutorialWindow.vb + + + + + TutorialWindow.vb + Designer + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + PreserveNewest + + + PreserveNewest + + + + True + Settings.settings + True + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/D3DStructs.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/D3DStructs.vb new file mode 100644 index 00000000..925b7ee4 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/D3DStructs.vb @@ -0,0 +1,38 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Runtime.InteropServices +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D + +Namespace D3D10Tutorial07 + #Region "SimpleVertex" + _ + Public Structure SimpleVertex + _ + Public Pos As Vector3F + _ + Public Tex As Vector2F + End Structure + #End Region + + #Region "Cube" + Public Class Cube + Public Vertices As New CubeVertices() + Public Indices As New CubeIndices() + + _ + Public Class CubeVertices + _ + Private vertices() As SimpleVertex = { New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Tex = New Vector2F (0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Tex = New Vector2F (0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Tex = New Vector2F (1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Tex = New Vector2F (1.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Tex = New Vector2F (0.0f, 1.0f)} } + End Class + + _ + Public Class CubeIndices + _ + Private indices() As UInteger = { 3,1,0, 2,1,3, 6,4,5, 7,4,6, 11,9,8, 10,9,11, 14,12,13, 15,12,14, 19,17,16, 18,17,19, 22,20,21, 23,20,22 } + End Class + End Class + #End Region +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..86d81aea --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/My Project/AssemblyInfo.vb @@ -0,0 +1,37 @@ +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/My Project/Resources.Designer.vb new file mode 100644 index 00000000..4f35feb2 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/My Project/Resources.Designer.vb @@ -0,0 +1,62 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.3053 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My.Resources + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If (resourceMan Is Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/My Project/Settings.Designer.vb new file mode 100644 index 00000000..d008d68d --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/My Project/Settings.Designer.vb @@ -0,0 +1,27 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.3053 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Program.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Program.vb new file mode 100644 index 00000000..5940402a --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Program.vb @@ -0,0 +1,21 @@ +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Linq +Imports System.Windows.Forms + +Namespace D3D10Tutorial07 + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New TutorialWindow()) + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Tutorial07.fx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Tutorial07.fx new file mode 100644 index 00000000..33e7aff7 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Tutorial07.fx @@ -0,0 +1,75 @@ +//-------------------------------------------------------------------------------------- +// File: Tutorial07.fx +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + +//-------------------------------------------------------------------------------------- +// Constant Buffer Variables +//-------------------------------------------------------------------------------------- +Texture2D txDiffuse; +SamplerState samLinear +{ + Filter = MIN_MAG_MIP_LINEAR; + AddressU = Wrap; + AddressV = Wrap; +}; + +cbuffer cbNeverChanges +{ + matrix View; +}; + +cbuffer cbChangeOnResize +{ + matrix Projection; +}; + +cbuffer cbChangesEveryFrame +{ + matrix World; + float4 vMeshColor; +}; + +struct VS_INPUT +{ + float4 Pos : POSITION; + float2 Tex : TEXCOORD; +}; + +struct PS_INPUT +{ + float4 Pos : SV_POSITION; + float2 Tex : TEXCOORD0; +}; +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +PS_INPUT VS( VS_INPUT input ) +{ + PS_INPUT output = (PS_INPUT)0; + output.Pos = mul( input.Pos, World ); + output.Pos = mul( output.Pos, View ); + output.Pos = mul( output.Pos, Projection ); + output.Tex = input.Tex; + + return output; +} +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( PS_INPUT input) : SV_Target +{ + return txDiffuse.Sample( samLinear, input.Tex ) * vMeshColor; +} +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS() ) ); + } +} + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Tutorial07.fxo b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Tutorial07.fxo new file mode 100644 index 00000000..cb026042 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/Tutorial07.fxo differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/TutorialWindow.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/TutorialWindow.Designer.vb new file mode 100644 index 00000000..dd91df82 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/TutorialWindow.Designer.vb @@ -0,0 +1,45 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace D3D10Tutorial07 + Partial Public Class TutorialWindow + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Me.SuspendLayout() + ' + 'TutorialWindow + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(639, 474) + Me.Name = "TutorialWindow" + Me.Text = "D3D 10 Tutorial 7: Texture Mapping and Constant Buffers (Double Click inside wind" & _ + "ow to set Full Screen)" + Me.ResumeLayout(False) + + End Sub + + #End Region + End Class +End Namespace + diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/TutorialWindow.resx b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/TutorialWindow.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/TutorialWindow.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/TutorialWindow.vb b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/TutorialWindow.vb new file mode 100644 index 00000000..b59ad49a --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/TutorialWindow.vb @@ -0,0 +1,298 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms +Imports System.Runtime.InteropServices +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports System.IO +Imports Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities +Imports System.Windows.Media.Media3D + +Namespace D3D10Tutorial07 + ''' + ''' This application demonstrates texturing + ''' + ''' http://msdn.microsoft.com/en-us/library/bb172491(VS.85).aspx + ''' + ''' Copyright (c) Microsoft Corporation. All rights reserved. + ''' + Partial Public Class TutorialWindow + Inherits Form + #Region "Fields" + Private device As D3DDevice + Private swapChain As SwapChain + Private renderTargetView As RenderTargetView + Private textureRV As ShaderResourceView + Private backColor_Renamed As New ColorRgba(0.0F, 0.125F, 0.3F, 1.0F) + Private meshColor As New Vector4F(0.7f, 0.7f, 0.7f, 1.0f) + + Private effect As Effect + Private technique As EffectTechnique + + Private vertexLayout As InputLayout + Private vertexBuffer As D3DBuffer + Private indexBuffer As D3DBuffer + + 'variables from the .fx file + Private worldVariable As EffectMatrixVariable + Private viewVariable As EffectMatrixVariable + Private projectionVariable As EffectMatrixVariable + + Private meshColorVariable As EffectVectorVariable + Private diffuseVariable As EffectShaderResourceVariable + + Private cube As New Cube() + + Private viewMatrix As Matrix4x4F + Private projectionMatrix As Matrix4x4F + + Private currentTime As Single = 0f + Private dwTimeStart As UInteger = CUInt(Environment.TickCount) + Private active As Boolean + #End Region + + #Region "TutorialWindow()" + ''' + ''' Initializes a new instance of the class. + ''' + Public Sub New() + InitializeComponent() + End Sub + #End Region + + #Region "TutorialWindow_Load()" + Private Sub TutorialWindow_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load + InitDevice() + End Sub + #End Region + + #Region "WndProc()" + ''' + ''' Forces the window paint event + ''' + ''' + Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message) + Invalidate() + MyBase.WndProc(m) + End Sub + #End Region + + #Region "OnMouseDoubleClick()" + ''' + ''' Switches full-screen mode + ''' + ''' + Protected Overrides Sub OnMouseDoubleClick(ByVal e As MouseEventArgs) + If active Then + swapChain.IsFullScreen = Not swapChain.IsFullScreen + End If + End Sub + #End Region + + #Region "OnPaintBackground()" + Protected Overrides Sub OnPaintBackground(ByVal e As PaintEventArgs) + ' Leave empty so that invalidate does not redraw the background causing flickering + End Sub + #End Region + + #Region "OnPaint()" + Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) + If active Then + RenderScene() + End If + End Sub + #End Region + + #Region "OnSizeChanged()" + Protected Overrides Sub OnSizeChanged(ByVal e As EventArgs) + If active Then + renderTargetView.Dispose() + Dim sd As SwapChainDescription = swapChain.Description + swapChain.ResizeBuffers(sd.BufferCount, CUInt(ClientSize.Width), CUInt(ClientSize.Height), sd.BufferDescription.Format, sd.Options) + SetViews() + ' Update the projection matrix + projectionMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixPerspectiveFovLH(CSng(Math.PI) * 0.25F, (CSng(ClientSize.Width) / CSng(ClientSize.Height)), 0.5F, 100.0F) + projectionVariable.Matrix = projectionMatrix + End If + MyBase.OnSizeChanged(e) + End Sub + #End Region + + #Region "InitDevice()" + ''' + ''' Create Direct3D device and swap chain + ''' + Protected Sub InitDevice() + device = D3DDevice.CreateDeviceAndSwapChain(Me.Handle) + swapChain = device.SwapChain + + SetViews() + + ' Create the effect + Using effectStream As FileStream = File.OpenRead("Tutorial07.fxo") + effect = device.CreateEffectFromCompiledBinary(New BinaryReader(effectStream)) + End Using + + ' Obtain the technique + technique = effect.GetTechniqueByName("Render") + + ' Obtain the variables + worldVariable = effect.GetVariableByName("World").AsMatrix() + viewVariable = effect.GetVariableByName("View").AsMatrix() + projectionVariable = effect.GetVariableByName("Projection").AsMatrix() + meshColorVariable = effect.GetVariableByName("vMeshColor").AsVector() + diffuseVariable = effect.GetVariableByName("txDiffuse").AsShaderResource() + + InitVertexLayout() + InitVertexBuffer() + InitIndexBuffer() + + ' Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList + + ' Load the Texture + Using stream As FileStream = File.OpenRead("seafloor.png") + textureRV = TextureLoader.LoadTexture(device, stream) + End Using + + InitMatrices() + + diffuseVariable.Resource = textureRV + active = True + End Sub + #End Region + + #Region "SetViews()" + ''' + ''' Sets the views that depend on background buffer dimensions + ''' + Private Sub SetViews() + ' Create a render target view + Using pBuffer As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(pBuffer) + End Using + + 'bind the render target to the device + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}) + + ' Setup the viewport + Dim vp As New Viewport() With {.Width = CUInt(ClientSize.Width), .Height = CUInt(ClientSize.Height), .MinDepth = 0.0f, .MaxDepth = 1.0f, .TopLeftX = 0, .TopLeftY = 0} + + device.RS.Viewports = New Viewport() {vp} + End Sub + #End Region + + #Region "InitVertexLayout()" + Private Sub InitVertexLayout() + ' Define the input layout + ' The layout determines the stride in the vertex buffer, + ' so changes in layout need to be reflected in SetVertexBuffers + Dim layout() As InputElementDescription = {New InputElementDescription() With {.SemanticName = "POSITION", .SemanticIndex = 0, .Format = Format.R32G32B32Float, .InputSlot = 0, .AlignedByteOffset = 0, .InputSlotClass = InputClassification.PerVertexData, .InstanceDataStepRate = 0}, New InputElementDescription() With {.SemanticName = "TEXCOORD", .SemanticIndex = 0, .Format = Format.R32G32Float, .InputSlot = 0, .AlignedByteOffset = 12, .InputSlotClass = InputClassification.PerVertexData, .InstanceDataStepRate = 0}} + + Dim passDesc As PassDescription = technique.GetPassByIndex(0).Description + + vertexLayout = device.CreateInputLayout(layout, passDesc.InputAssemblerInputSignature, passDesc.InputAssemblerInputSignatureSize) + + device.IA.InputLayout = vertexLayout + End Sub + #End Region + + #Region "InitVertexBuffer()" + Private Sub InitVertexBuffer() + Dim verticesData As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Vertices)) + Marshal.StructureToPtr(cube.Vertices, verticesData, True) + + Dim bufferDesc As New BufferDescription() With {.Usage = Usage.Default, .ByteWidth = CUInt(Marshal.SizeOf(cube.Vertices)), .BindingOptions = BindingOptions.VertexBuffer, .CpuAccessOptions = CpuAccessOptions.None, .MiscellaneousResourceOptions = MiscellaneousResourceOptions.None} + + Dim InitData As New SubresourceData() With {.SystemMemory = verticesData} + + vertexBuffer = device.CreateBuffer(bufferDesc, InitData) + + ' Set vertex buffer + Dim stride As UInteger = CUInt(Marshal.SizeOf(GetType(SimpleVertex))) + Dim offset As UInteger = 0 + device.IA.SetVertexBuffers(0, New D3DBuffer() {vertexBuffer}, New UInteger() {stride}, New UInteger() {offset}) + Marshal.FreeCoTaskMem(verticesData) + End Sub +#End Region + +#Region "InitIndexBuffer()" + Private Sub InitIndexBuffer() + Dim indicesData As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Indices)) + Marshal.StructureToPtr(cube.Indices, indicesData, True) + + Dim bufferDesc As New BufferDescription() With {.Usage = Usage.Default, .ByteWidth = CUInt(Marshal.SizeOf(cube.Indices)), .BindingOptions = BindingOptions.IndexBuffer, .CpuAccessOptions = CpuAccessOptions.None, .MiscellaneousResourceOptions = MiscellaneousResourceOptions.None} + + Dim initData As New SubresourceData() With {.SystemMemory = indicesData} + + indexBuffer = device.CreateBuffer(bufferDesc, initData) + device.IA.IndexBuffer = New IndexBuffer(indexBuffer, Format.R32UInt, 0) + Marshal.FreeCoTaskMem(indicesData) + End Sub +#End Region + + #Region "InitMatrices()" + Private Sub InitMatrices() + ' Initialize the view matrix + Dim Eye As New Vector3F(0.0f, 3.0f, -6.0f) + Dim At As New Vector3F(0.0f, 0.0f, 0.0f) + Dim Up As New Vector3F(0.0f, 1.0f, 0.0f) + + viewMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixLookAtLH(Eye, At, Up) + + ' Initialize the projection matrix + projectionMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixPerspectiveFovLH(CSng(Math.PI) * 0.25F, (CSng(Me.ClientSize.Width) / CSng(Me.ClientSize.Height)), 0.5F, 100.0F) + + ' Update Variables that never change + viewVariable.Matrix = viewMatrix + projectionVariable.Matrix = projectionMatrix + End Sub + #End Region + + #Region "RenderScene()" + ''' + ''' Render the frame + ''' + Protected Sub RenderScene() + Dim worldMatrix As Matrix4x4F + + currentTime = (Environment.TickCount - dwTimeStart) / 1000.0f + + 'WPF transforms used here use degrees as opposed to D3DX which uses radians in the native tutorial + '360 degrees == 2 * Math.PI + 'world matrix rotates the first cube by t degrees + Dim rt1 As New RotateTransform3D(New AxisAngleRotation3D(New Vector3D(0, 1, 0), currentTime * 30)) + worldMatrix = rt1.Value.ToMatrix4x4F() + + ' Modify the color + meshColor.X = (CSng(Math.Sin(currentTime * 1.0f)) + 1.0f) * 0.5f + meshColor.Y = (CSng(Math.Cos(currentTime * 3.0f)) + 1.0f) * 0.5f + meshColor.Z = (CSng(Math.Sin(currentTime * 5.0f)) + 1.0f) * 0.5f + + ' Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor_Renamed) + + ' + ' Update variables that change once per frame + ' + worldVariable.Matrix = worldMatrix + meshColorVariable.FloatVector = meshColor + + ' + ' Render the cube + ' + Dim techDesc As TechniqueDescription = technique.Description + For p As UInteger = 0 To techDesc.Passes - 1UI + technique.GetPassByIndex(p).Apply() + device.DrawIndexed(36, 0, 0) + Next p + + swapChain.Present(0, PresentOptions.None) + End Sub + #End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/seafloor.png b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/seafloor.png new file mode 100644 index 00000000..4ce440f9 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorial07_WinFormsWindow/seafloor.png differ diff --git a/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorials.sln b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorials.sln new file mode 100644 index 00000000..e8e127a5 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/Tutorials/D3D10Tutorials.sln @@ -0,0 +1,244 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial01_WinFormsWindow", "D3D10Tutorial01_WinFormsWindow\D3D10Tutorial01_WinFormsWindow.vbproj", "{6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{9C745BF5-CC84-4EBF-985A-90082602187C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorial01", "Tutorial01", "{766E54C7-446F-4118-94A6-9ED20B121176}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial01_WinFormsControl", "D3D10Tutorial01_WinFormsControl\D3D10Tutorial01_WinFormsControl.vbproj", "{9AE5997A-8072-41C0-9324-BC886BFD6C66}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial01_WPF", "D3D10Tutorial01_WPF\D3D10Tutorial01_WPF.vbproj", "{980315C4-115D-482E-A484-4AFDD0A4B569}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorial02", "Tutorial02", "{F5CF288A-6377-4165-BA56-8EF9672CF9EF}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial02_WinFormsControl", "D3D10Tutorial02_WinFormsControl\D3D10Tutorial02_WinFormsControl.vbproj", "{33CD3CE3-DAB1-4790-A861-B296FE85DEF6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorial04", "Tutorial04", "{99CA5CC3-F035-4190-BD72-201247E32AA5}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial04_WinFormsControl", "D3D10Tutorial04_WinFormsControl\D3D10Tutorial04_WinFormsControl.vbproj", "{D0E3965D-10DF-45FC-A05F-39D67EDA760E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorial05", "Tutorial05", "{31D97374-70E0-431D-B9CC-B4B149E7F880}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial05_WinFormsControl", "D3D10Tutorial05_WinFormsControl\D3D10Tutorial05_WinFormsControl.vbproj", "{87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorial06", "Tutorial06", "{642B3904-1AE9-45CA-B7AD-E98DE4566B20}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial06_WinFormsControl", "D3D10Tutorial06_WinFormsControl\D3D10Tutorial06_WinFormsControl.vbproj", "{43D713E1-7B99-4C89-8B31-A2210392B284}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorial07", "Tutorial07", "{5AC52C0D-F69C-4575-B516-CE401BD68FDB}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial07_WinFormsControl", "D3D10Tutorial07_WinFormsControl\D3D10Tutorial07_WinFormsControl.vbproj", "{CE251D57-5072-44E7-8238-C977F610BBD1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Direct3DUtilities", "..\..\UtilitiesLibrary\D3DUtilities\Direct3DUtilities.vbproj", "{8A152DCF-12AE-492B-9F24-060B90B2DDD0}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial07_WinFormsWindow", "D3D10Tutorial07_WinFormsWindow\D3D10Tutorial07_WinFormsWindow.vbproj", "{9DCD7874-4D07-413B-9E64-AA947B11D9FC}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "D3D10Tutorial07_WPF", "D3D10Tutorial07_WPF\D3D10Tutorial07_WPF.vbproj", "{FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Win32.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|Win32.Build.0 = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Debug|x64.ActiveCfg = Debug|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|Any CPU.Build.0 = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|Win32.ActiveCfg = Release|Any CPU + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA}.Release|x64.ActiveCfg = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Win32.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|Win32.Build.0 = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Debug|x64.ActiveCfg = Debug|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|Any CPU.Build.0 = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|Win32.ActiveCfg = Release|Any CPU + {9AE5997A-8072-41C0-9324-BC886BFD6C66}.Release|x64.ActiveCfg = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Any CPU.Build.0 = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Win32.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|Win32.Build.0 = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Debug|x64.ActiveCfg = Debug|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|Any CPU.ActiveCfg = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|Any CPU.Build.0 = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|Win32.ActiveCfg = Release|Any CPU + {980315C4-115D-482E-A484-4AFDD0A4B569}.Release|x64.ActiveCfg = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Win32.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|Win32.Build.0 = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Debug|x64.ActiveCfg = Debug|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|Any CPU.Build.0 = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|Win32.ActiveCfg = Release|Any CPU + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6}.Release|x64.ActiveCfg = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Win32.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|Win32.Build.0 = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Debug|x64.ActiveCfg = Debug|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|Any CPU.Build.0 = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|Win32.ActiveCfg = Release|Any CPU + {D0E3965D-10DF-45FC-A05F-39D67EDA760E}.Release|x64.ActiveCfg = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Any CPU.Build.0 = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Win32.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|Win32.Build.0 = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Debug|x64.ActiveCfg = Debug|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|Any CPU.ActiveCfg = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|Any CPU.Build.0 = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|Win32.ActiveCfg = Release|Any CPU + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75}.Release|x64.ActiveCfg = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Any CPU.Build.0 = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Win32.ActiveCfg = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|Win32.Build.0 = Debug|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|x64.ActiveCfg = Debug|x64 + {43D713E1-7B99-4C89-8B31-A2210392B284}.Debug|x64.Build.0 = Debug|x64 + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|Any CPU.ActiveCfg = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|Any CPU.Build.0 = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|Win32.ActiveCfg = Release|Any CPU + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|x64.ActiveCfg = Release|x64 + {43D713E1-7B99-4C89-8B31-A2210392B284}.Release|x64.Build.0 = Release|x64 + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|Win32.Build.0 = Debug|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|x64.ActiveCfg = Debug|x64 + {CE251D57-5072-44E7-8238-C977F610BBD1}.Debug|x64.Build.0 = Debug|x64 + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|Any CPU.Build.0 = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|Win32.ActiveCfg = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|Win32.Build.0 = Release|Any CPU + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|x64.ActiveCfg = Release|x64 + {CE251D57-5072-44E7-8238-C977F610BBD1}.Release|x64.Build.0 = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.ActiveCfg = Release|Win32 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Win32.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|x64.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Win32.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|x64.ActiveCfg = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Debug|x64.ActiveCfg = Debug|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|Any CPU.Build.0 = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|Win32.ActiveCfg = Release|Any CPU + {9DCD7874-4D07-413B-9E64-AA947B11D9FC}.Release|x64.ActiveCfg = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|Win32.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Debug|x64.ActiveCfg = Debug|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|Any CPU.Build.0 = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|Win32.ActiveCfg = Release|Any CPU + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1}.Release|x64.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {6FA669D0-E4F4-4A67-AC78-8D13B5A89DDA} = {766E54C7-446F-4118-94A6-9ED20B121176} + {9AE5997A-8072-41C0-9324-BC886BFD6C66} = {766E54C7-446F-4118-94A6-9ED20B121176} + {980315C4-115D-482E-A484-4AFDD0A4B569} = {766E54C7-446F-4118-94A6-9ED20B121176} + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} = {9C745BF5-CC84-4EBF-985A-90082602187C} + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} = {9C745BF5-CC84-4EBF-985A-90082602187C} + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} = {9C745BF5-CC84-4EBF-985A-90082602187C} + {33CD3CE3-DAB1-4790-A861-B296FE85DEF6} = {F5CF288A-6377-4165-BA56-8EF9672CF9EF} + {D0E3965D-10DF-45FC-A05F-39D67EDA760E} = {99CA5CC3-F035-4190-BD72-201247E32AA5} + {87688E47-DBCC-4B1D-8A0A-04D0E2DDCF75} = {31D97374-70E0-431D-B9CC-B4B149E7F880} + {43D713E1-7B99-4C89-8B31-A2210392B284} = {642B3904-1AE9-45CA-B7AD-E98DE4566B20} + {CE251D57-5072-44E7-8238-C977F610BBD1} = {5AC52C0D-F69C-4575-B516-CE401BD68FDB} + {9DCD7874-4D07-413B-9E64-AA947B11D9FC} = {5AC52C0D-F69C-4575-B516-CE401BD68FDB} + {FBA608F6-633A-4AE1-8FDB-D705C1F0A0A1} = {5AC52C0D-F69C-4575-B516-CE401BD68FDB} + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/D3DStructs.vb b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/D3DStructs.vb new file mode 100644 index 00000000..60f74e6b --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/D3DStructs.vb @@ -0,0 +1,38 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Runtime.InteropServices +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D + +Namespace WindowsFlag + #Region "SimpleVertex" + _ + Public Structure SimpleVertex + _ + Public Pos As Vector3F + _ + Public Normal As Vector3F + End Structure + #End Region + + #Region "Cube" + Public Class Cube + Public Vertices As New CubeVertices() + Public Indices As New CubeIndices() + + _ + Public Class CubeVertices + _ + Private vertices() As SimpleVertex = { New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Normal = New Vector3F (0.0f, 1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Normal = New Vector3F (0.0f, 1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Normal = New Vector3F (0.0f, 1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Normal = New Vector3F (0.0f, 1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Normal = New Vector3F (0.0f, -1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Normal = New Vector3F (0.0f, -1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Normal = New Vector3F (0.0f, -1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Normal = New Vector3F (0.0f, -1.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Normal = New Vector3F (-1.0f, 0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Normal = New Vector3F (-1.0f, 0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Normal = New Vector3F (-1.0f, 0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Normal = New Vector3F (-1.0f, 0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Normal = New Vector3F (1.0f, 0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Normal = New Vector3F (1.0f, 0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Normal = New Vector3F (1.0f, 0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Normal = New Vector3F (1.0f, 0.0f, 0.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, -1.0f), .Normal = New Vector3F (0.0f, 0.0f, -1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, -1.0f), .Normal = New Vector3F (0.0f, 0.0f, -1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, -1.0f), .Normal = New Vector3F (0.0f, 0.0f, -1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, -1.0f), .Normal = New Vector3F (0.0f, 0.0f, -1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, -1.0f, 1.0f), .Normal = New Vector3F (0.0f, 0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, -1.0f, 1.0f), .Normal = New Vector3F (0.0f, 0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (1.0f, 1.0f, 1.0f), .Normal = New Vector3F (0.0f, 0.0f, 1.0f)}, New SimpleVertex() With {.Pos = New Vector3F (-1.0f, 1.0f, 1.0f), .Normal = New Vector3F (0.0f, 0.0f, 1.0f)} } + End Class + + _ + Public Class CubeIndices + _ + Private indices() As UInteger = { 3,1,0, 2,1,3, 6,4,5, 7,4,6, 11,9,8, 10,9,11, 14,12,13, 15,12,14, 19,17,16, 18,17,19, 22,20,21, 23,20,22 } + End Class + End Class + #End Region +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/Effects.vb b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/Effects.vb new file mode 100644 index 00000000..490e0efc --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/Effects.vb @@ -0,0 +1,89 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.IO +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities +Imports System.Reflection + +Namespace WindowsFlag + ''' + ''' This class wraps the shaders + ''' + Friend Class Effects + #Region "Private fields" + Private effect As Effect + Private technique_Renamed As EffectTechnique + Private worldVariable As EffectMatrixVariable + Private viewVariable As EffectMatrixVariable + Private projectionVariable As EffectMatrixVariable + + Private lightDirVariable As EffectVectorVariable + Private lightColorVariable As EffectVectorVariable + Private baseColorVariable As EffectVectorVariable + + Private vLightDirs() As Vector4F = {New Vector4F(0.0F, 1.0F, 3.0F, 1.0F), New Vector4F(0.0F, 1.0F, -3.0F, 1.0F)} + + Private vLightColors() As Vector4F = {New Vector4F(0.25F, 0.25F, 0.25F, 0.25F), New Vector4F(0.25F, 0.25F, 0.25F, 0.25F)} + + #End Region + + #Region "Internal properties" + Friend WriteOnly Property WorldMatrix() As Matrix4x4F + Set(ByVal value As Matrix4x4F) + worldVariable.Matrix = value + End Set + End Property + + Friend WriteOnly Property ViewMatrix() As Matrix4x4F + Set(ByVal value As Matrix4x4F) + viewVariable.Matrix = value + End Set + End Property + + Friend WriteOnly Property ProjectionMatrix() As Matrix4x4F + Set(ByVal value As Matrix4x4F) + projectionVariable.Matrix = value + End Set + End Property + + Friend WriteOnly Property BaseColor() As Vector4F + Set(ByVal value As Vector4F) + baseColorVariable.FloatVector = value + End Set + End Property + + Friend ReadOnly Property Technique() As EffectTechnique + Get + Return technique_Renamed + End Get + End Property + #End Region + + Public Sub New(ByVal device As D3DDevice) + ' File compiled using the following command: + ' "$(DXSDK_DIR)\utilities\bin\x86\fxc" "WindowsFlag.fx" /T fx_4_0 /Fo "WindowsFlag.fxo" + Using stream As Stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("WindowsFlag.fxo") + effect = device.CreateEffectFromCompiledBinary(stream) + End Using + ' Obtain the technique + technique_Renamed = effect.GetTechniqueByName("Render") + + ' Obtain the variables + worldVariable = effect.GetVariableByName("World").AsMatrix() + viewVariable = effect.GetVariableByName("View").AsMatrix() + projectionVariable = effect.GetVariableByName("Projection").AsMatrix() + + lightDirVariable = effect.GetVariableByName("vLightDir").AsVector() + lightColorVariable = effect.GetVariableByName("vLightColor").AsVector() + baseColorVariable = effect.GetVariableByName("vBaseColor").AsVector() + + ' Set constants + lightColorVariable.SetFloatVectorArray(vLightColors) + lightDirVariable.SetFloatVectorArray(vLightDirs) + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..35b51455 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/My Project/AssemblyInfo.vb @@ -0,0 +1,40 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/My Project/Resources.Designer.vb new file mode 100644 index 00000000..4c44cf97 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/My Project/Resources.Designer.vb @@ -0,0 +1,65 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System + +Namespace My.Resources + + + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/My Project/Settings.Designer.vb new file mode 100644 index 00000000..34f1fe80 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/Program.vb b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/Program.vb new file mode 100644 index 00000000..0a5168be --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/Program.vb @@ -0,0 +1,22 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms + +Namespace WindowsFlag + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New Window()) + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/Window.Designer.vb b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/Window.Designer.vb new file mode 100644 index 00000000..bfeecf6e --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/Window.Designer.vb @@ -0,0 +1,86 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace WindowsFlag + Partial Public Class Window + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Window)) + Me.directControl = New Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl + Me.label1 = New System.Windows.Forms.Label + Me.label2 = New System.Windows.Forms.Label + Me.SuspendLayout() + ' + 'directControl + ' + Me.directControl.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.directControl.Location = New System.Drawing.Point(0, 0) + Me.directControl.Name = "directControl" + Me.directControl.Size = New System.Drawing.Size(624, 442) + Me.directControl.TabIndex = 4 + ' + 'label1 + ' + Me.label1.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left), System.Windows.Forms.AnchorStyles) + Me.label1.AutoSize = True + Me.label1.Location = New System.Drawing.Point(12, 447) + Me.label1.Name = "label1" + Me.label1.Size = New System.Drawing.Size(0, 13) + Me.label1.TabIndex = 5 + ' + 'label2 + ' + Me.label2.Anchor = CType((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.label2.AutoSize = True + Me.label2.Location = New System.Drawing.Point(278, 447) + Me.label2.Name = "label2" + Me.label2.Size = New System.Drawing.Size(138, 13) + Me.label2.TabIndex = 6 + Me.label2.Text = "Drag/scroll to move camera" + ' + 'Window + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(624, 469) + Me.Controls.Add(Me.label2) + Me.Controls.Add(Me.label1) + Me.Controls.Add(Me.directControl) + Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon) + Me.Name = "Window" + Me.Text = "Windows Flag" + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + #End Region + + Private WithEvents directControl As Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl + Private label1 As System.Windows.Forms.Label + Private label2 As System.Windows.Forms.Label + End Class +End Namespace + diff --git a/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/Window.resx b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/Window.resx new file mode 100644 index 00000000..0dd393c3 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/Window.resx @@ -0,0 +1,546 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAkAMDAQAAAABABoBgAAlgAAACAgEAAAAAQA6AIAAP4GAAAQEBAAAAAEACgBAADmCQAAMDAAAAAA + CACoDgAADgsAACAgAAAAAAgAqAgAALYZAAAQEAAAAAAIAGgFAABeIgAAMDAAAAAAIACoJQAAxicAACAg + AAAAACAAqBAAAG5NAAAQEAAAAAAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAICAAIAAAACAAIAAgIAAAMDAwACAgIAAAAD/AAD/AAAA//8A/wAAAAAA + AAD//wAA////AACAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMy2t7a2bMzMzMzMzMzMzMzMzMzMzMzMu7a3tnd2d2ZszMzMzMzMzMzMzMzMzMy7t7tr + a2dnZmZmbMzMzMzMzMzMzMzMzLu7e2tnZnZmZmZmZmzMzMzMzMzMzMzMy7u3u7e2tmdmZmZmZmbMzMzM + zMzMzMzMt7e7u3tra2Z2ZmZmZmZszMzMzMzMzMzLu7u7u7u7d7Z2ZmZmZmZmzMzMzMzMzMx7O7u7s3N7 + trd2tmZmZuZmbMzMzMzMzMu7u7uzNye7e2trZmd3ZmZmZszMzMzMzLO7u7MzqmZ3t7Z3ZrdyZmbmZmzM + zMzMy7u7s7MKqqZre2t2t3AqpmZmZmbMzMzMx7OzuzIqqqpnt7a3ZzIqamZm5mbMzMzMO7u7syKqqqpm + e3trYzKqqmZmZmZszMzMu7OzMiqqqqpqe7a2syKqqmpmZmZszMzLszszIiqqqqqmd7t7cCqqqqamZmZm + zMzHu7swAiKqqqqqZ3u3MCqqqqpqZmZmzMzLMzMzACIqKqqqZ7t7Aqqqqqqqd2ZmzMzLO7szMAIiqqqq + anszIqqqqqoid2ZmzMxzszOzMwAiIqqqpmMyKqqqqqIie2ZnbMy7O7OzszAAIiqqqqd6qqqqoiIzd2Zm + bMw3szs7OzMwAiKqqqqqqqqqIDN3tmZ2bMy7M7OzuzszACKqqqqqqqoiA3trZrZmvMxzOzOzs7O7MAIq + qqqqqqcjN7a3t2ZnfMw7M7Ozs7s7MwIqqqqqqqoje3t3a3d2fMx7OzM7O7O7MzAqqqqqqqpnt7e7trZ3 + fMy3MzOzuzuzswKqqqqqqqqme7tra2dnfMx7M7M7M7O7MwKqqqqqqqpqZ7u7u7a2vMx3szszs7OzMqqq + qqqqqqqmpnu7t7tnfMzLczM7OzswKqqqqqoqKqqqpme7u7e7zMzHOzOzMzMCqqqqqqIiKqqqpqZ7u7e2 + zMzLc7MzMzKqqqqqqiIAIiqqqmpnu7t7zMzMtzMzMCKqqqqqqgMwACIqqqqne7e8zMzMN7MzAiqqqqqq + ojMzACIqqqqnO3u8zMzMxzszACKqqqqqIDszMwIiqqIjO7vMzMzMy3MzAAIiqqqqA7O7MwAiIqIDu3vM + zMzMzHtzMwAioqqiM7s7szMCIiAzu7zMzMzMzMe3MwAiKqojM7O7O7MAIgO7u8zMzMzMzMx7MzAAIqID + O7OzuzMwAzO7vMzMzMzMzMzHdzMAAiIzszuzs7MzM7t7zMzMzMzMzMzMtzcwACMzOzM7OzuzM3u8zMzM + zMzMzMzMx7s3MDMzs7Ozs7Ozu7vMzMzMzMzMzMzMzHdzMzOzMzs7Ozs7t7zMzMzMzMzMzMzMzMy3d7cz + s7M7O3u3vMzMzMzMzMzMzMzMzMzMt3t7e3t7e7e8zMzMzMzMzMzMzMzMzMzMzMe3t7e3t8zMzMzMzMzM + zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMz///////8AAP///////wAA///AH///AAD//AAB//8AAP/w + AAB//wAA/8AAAB//AAD/gAAAD/8AAP8AAAAH/wAA/gAAAAP/AAD8AAAAAf8AAPgAAAAA/wAA8AAAAAB/ + AADgAAAAAD8AAOAAAAAAPwAAwAAAAAAfAADAAAAAAB8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAIAA + AAAADwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAADAAAAAAB8AAMAA + AAAAHwAA4AAAAAA/AADgAAAAAD8AAPAAAAAAfwAA+AAAAAD/AAD8AAAAAf8AAP4AAAAD/wAA/wAAAAf/ + AAD/gAAAD/8AAP/AAAAf/wAA//AAAH//AAD//AAB//8AAP//gA///wAA////////AAAoAAAAIAAAAEAA + AAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgIAAgAAAAIAAgACAgAAAwMDAAICA + gAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM + zMzMzMzMzMzMzMzLe2tmbMzMzMzMzMzMzMy3dnZ2ZmZmzMzMzMzMzMzHu7t3ZmZmZmzMzMzMzMzHu7u7 + t7a2ZmZmbMzMzMzMu7uzd3trZmZ2ZmbMzMzMy7uzMqZ7tnd3dmZmbMzMzMuzMCqma2t2cKpmZmzMzMy7 + MyKqqqe2tzKqpmZmzMzLszIqqqpmu3cKqqamZmzMyzMCIqqqpndzKqqqZmZszMszACIqqqprMKqqqqp2 + bMxzszACIiqqpzKqqqoidmbMOzszACIqqqqqqqqiA3ZmzLs7MzAAIqqqqqqiA3dmZsxzM7MzMAKqqqqq + I3trdmfMu7M7OzMAqqqqqqO3trdmzHMzs7MzAqqqqqqqe3t3a8x7OzszMqqqqqqqpme7trbMtzMzMCqq + qqqiqqqmZ7trzMtzMwKqqqqiAiKqqqZ7fMzHszAqqqqqoAAiqqqiu7zMw3MwIiqqqiMwAiqqI7e8zMy3 + MAIiqqIzMwIiIjO7zMzMx3MAIiogM7MAIiM7vMzMzMNzcAIiIzszMAIDu7zMzMzMdzMwIgM7OzMzO3vM + zMzMzMt3MwMzs7OzM7u8zMzMzMzMx3c3Mzs7O7e8zMzMzMzMzMw3e3t7e7e7zMzMzMzMzMzMzMN7e3t8 + zMzMzMzM////////////4B///wAD//4AAf/4AAB/8AAAP+AAAB/gAAAfwAAAD4AAAAeAAAAHgAAABwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AAAAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gA + AH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgIAAgAAAAIAAgACAgAAAwMDAAICAgAAAAP8AAP8AAAD//wD/AAAAAAAAAP//AAD///8AAIAAAMzM + zMzMzMzMzMzLZmbMzMzMy7e2ZmbMzMyzB3dndmzMyzKqe3CmZszDCqpnMqpmzLMyqqcKqqZsOzAqqqqi + dmwzszCqqie2bDMzMqqqZ7tsMzAqqqqme7zDAqqiAqqrzMcyqqMwojvMzHMqCzAjvMzMxzIzMzvMzMzM + xze7zMzM//+zMPg/a2vgD6pmwAfMzIADMyKAA6e2AAGqpgABzMwAATIqAAFmuwABqqaAA2zMgAMCIsAH + pnfgD6qq+D9szCgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWAAAA0QAAAM4A + AADNAAAAywAAAMgAAADGAAAAxQAAAMIAAADBAAAAvgAAALwAAAC6AAAAtwAAALUAAACzAAAAsAAAAK0A + AACpAAAApgAAAJwAAABzAAAAZwAAADwAAACiAQEAkgEBAN0CAgDAAgIAvQICAH0BAQBWAQEAzgMDAMMD + AwC/AwMAsAMDALQEBACGAwMA5wYGACUBAQDTBgYAxQYGAKQFBQDXBwcAuQcHAMAICABIAwMAMgICALQI + CACtCAgAoQcHAMcKCgD5Dg4AvgsLAOEODgDMDAwAmgoKANIPDwDFEREArQ8PAPoXFwDpFxcApBERANwY + GADJGRkA/iEhALcYGAD0IyMA1B4eAOQiIgBjDw8A7SUlABoEBAD9KioAlxkZAAwCAgClHR0A9SwsADMJ + CQDXJycAuSIiAMYoKAD+NDQAiRwcAPQ0NADnNDQA2jIyAP47OwCqKSkA9j09AP5CQgD+RkYA9ENDAP9J + SQC6NjYAyzw8AGYfHwA1EBAA/05OAPhNTQDlR0cA/1FRAKg3NwD/VVUAu0BAAEkZGQCKMDAA/1paAPZX + VwD2WloA/15eAMhLSwC3RUUA/2FhAG4qKgC/TEwA/2ZmALFHRwDoX18A9mZmALVLSwD/bGwAtk5OAMxZ + WQDmZWUAr01NAKBHRwD/cnIAt1JSADMXFwD2c3MA/3h4ACkUFAD/fX0A/4GBAOl3dwD/hoYA+oODAPaG + hgD/jY0AqF1dAGY5OQD/k5MA5oaGAMVzcwD/mZkA8JOTAP+engD/oqIA+6GhAKNpaQCEVVUA/6amAMuF + hQD/rKwA8KamAP+ysgD0q6sA/7a2APuzswD/ubkA+bW1AP++vgDgqakA/8LCAP/FxQD/yckA6Lm5AP/O + zgCOc3MA/M3NAOzCwgDDq6sAMy0tAAD+/gAA/f0AAPv7AAD5+QAA9/cAAPT0AADx8QAA7+8AAO3tAADp + 6QAA5uYAAOTkAADg4AAA398AANraAADT0wAAyckAAI6OAAB9fQABzs4AAcbGAAHCwgABuroAAbS0AAGt + rQABpKQAAZubAAGHhwAC+fkAAvf3AAF1dQAD//8AA/v7AAX19QAG//8ABubmAAJSUgAJ//8ADP//AAnA + wAAIj48ABmhoAAMxMQAQ8/MAEf7+AAqBgQAGSUkAFv7+AA+qqgAW6+sADH5+AAQoKAAWysoAHf7+ABzX + 1wAo/v4AJujoADT//wAt19cAMuLiADf29gA7/v4ABhgYAEf9/QBU/v4AUPDwAD2wsAAYREQAFj09ABAs + LABO1NQAZPDwAGr29gB29fUAPHx8AC9dXQBarq4Ac93dAIC+vgBDYmIAltTUAIeYmAAAAAAA//////// + //////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////XGRqcHh+hIeK//// + //////////////////////////////////////////9ISFZaZGpzfoKEh4qNjZCSk/////////////// + ////////////////////////QEBIVlxmc36Eh4qNkJKSk5eXl5mZ//////////////////////////// + /////0xCSEhRWWFteIKHipCSk5mZm5ubm5ubm5v/////////////////////////////QkJMTFFRVllk + anN+hIqNkpmbnaGhoaGfn52d//////////////////////////9GRkxMTEhASFNYWmRteIKHjZKXm6Gj + pKSko6Gfn////////////////////////0ZGRkJCOzszPENVU1lhanN+hYqQl5uho6WlpaSjoZ////// + ////////////////REREPDwzMzMqPWllVVZcZnB4goeKkJecoqaqqaelpKGf//////////////////9E + Pjw8NSUlJRAe/PmoXlhaZG1zfoSHipGYqKirpqmnpaShn////////////////04+PjUlJSUBJKzU5e77 + lWNZYWpzeIKFiY+W+O/7q6qpp6WjoZ3/////////////TkM+NRoaGgQV8MCx4uz0+3JbYWZweH6Ehous + 397u/auqqaeloZ+b////////////Qz44KhoaBB3xw7Kt3Obt+otjWmRqc3iBeozww8rq9f2rqqmnpJ+b + //////////9OQzgnAAAEJPDCtLCt2eTs9P5uW1xkanN7fYDHubDk7fb9q6qppaGdm/////////9DPzYf + AgsW8MS6s7Ct0uLm7fqVY1lcZmx6cfLDtq/c5u32/auqpKOdmf///////1A/OSgHEhbxvsO8t7KuzNnk + 7PT+blhZXGNlgMu8tK/S4urt9v2rpqGfmZf//////1A/MigMGRfr1sfEwLizr8/i5u37i1RRWF5f8cK3 + sq6t0+Lm7PT7q6afmZP//////1A/LBsNGR5H68vHxcG7tbDT5Oz0/mdMVFdg1ru0sK6urrDO3uj5/qKg + mZL//////085LBsKESQeR+vWvsbDvLax2ebt+n1QT0Xww7WxsLCytLe7wd33qKKemZL/////UE9BKxwJ + Cg8ZHiZK27/HxMC3sOLq7v5pX/C9tbGwsbO3u8HH1vGMj5qbmZKN////UE9BKwwKCAcLFBUXSuDWvsXA + ts3k6vPv7+Gyrq+wsrfAxcjxgIyLjpSZl5CK////UE9BIw0LCQcFBxAkHiZK277Eu7PT5OTk4tnPra2v + tsDI8oBxfXqGiI2Tk42H////XU86Ig8NCggFAgIHExUXStHHvbev09zc2dPSz9LQxNaDX2VudXZ+goeQ + ko2E////XU86IhAODAoHBAEAAQ0dLkrLw7myrdLT0s/S09nh+GhpXmNrbXBzeISKkIqC////XU86EREP + DQsIBQIBAAARFibXxrmyrq3MzMzP2eLn92leW1xhZGZqbX6Fiod+////Z1c6EhIRDwwKBwQBAAAEGRfg + xrexrq2tra3P2eLp85ZeWFlZWlxcZHCCh4V4////b109KRMREA4MCQYDAQADGS7WwLOwra2trq2t0+Lm + 7vuLVFFRVlZWWWZ4hYJz////b11LMRMTERANCwgFAgIOHtvBtbGvra6vsbGwrtnk7PX7ckhISEhRUVpw + fnhw////b2dXPSkTEhEPDQoICRIX38CzsK+urrCztri3tLDc5u31+15AQEBASFZmc3Bw/////29XPTEY + ExIRDw0OGWDFt7Kvrq2tsLO6vcK9u7ax3Obt9ftvOzM7O1Fcamb//////29lSz0UGBMSERgW8MKzr6+t + ra2usrvG1svHw8C4sdzm7fX6lTwzM0hWYWT//////29vVz0xFBQUHS3WvLKvrq2tra2xt8bxSuvRyMW9 + uLHc5uzt+qhDM0BRWWT///////93ZUs3GR0eg9bBt7Kvra2tra+zvfEXLSZK28jFvbix2eTq7vlpPkhR + Vv////////90b1dJJB4m0cfCu7Wwra2trrG61S0UFBUuStvIxb24ssnY4/dSPkxWWv//////////d2VX + Uh4m4L/Gwru1sK2usLXFYBIEBREVF0rRyMW9urfA2i06PExW////////////dHdlSUUuSuC/xsK7tbCw + tL3xGQUBAQMQHRdK277FwcLfTRk+RlNi/////////////3d0ZVJFLkrgy8bCu7W0u9YWCgQCAQEDDh0X + StG+x9ZNJDg8TFj///////////////95dGVSRS5K17/Gwru7xhcTCQcFBAMBAw4VLuvW1k0kNjxGU/// + ////////////////f3RlUkUuSte/xsPF8R0OCwoIBwUEAwUTFi5HTR0yPkRU//////////////////// + /393ZVJFTUrXy77bHhMPDQwKCQgHBQQJFBUWJDQ+RFT///////////////////////9/eWVpX2BH8tsX + GRIRDw4NCwoJBwYFITA6OUNEVP//////////////////////////eXl0aXFoYC0dGBMSERAPDQwLCiAo + Mjk/Q05V/////////////////////////////3d/fH1pcVJLPTowMDAvLys0NDk/P05OVVX///////// + ////////////////////////d398dGVlV1dPQUFBQU9PUFBQUFVV//////////////////////////// + //////////90eX95b2dnZ11dXV5eXl5eXv////////////////////////////////////////////9v + cnJycnJubm5eXv////////////////////////////////////////////////////////////////// + ////////////////////////////////AAD///////8AAP//wB///wAA//wAAf//AAD/8AAAf/8AAP/A + AAAf/wAA/4AAAA//AAD/AAAAB/8AAP4AAAAD/wAA/AAAAAH/AAD4AAAAAP8AAPAAAAAAfwAA4AAAAAA/ + AADgAAAAAD8AAMAAAAAAHwAAwAAAAAAfAACAAAAAAA8AAIAAAAAADwAAgAAAAAAPAACAAAAAAA8AAAAA + AAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAcAAAAAAAAABwAAAAAAAAAH + AAAAAAAAAAcAAAAAAAAABwAAgAAAAAAPAACAAAAAAA8AAIAAAAAADwAAwAAAAAAfAADAAAAAAB8AAOAA + AAAAPwAA4AAAAAA/AADwAAAAAH8AAPgAAAAA/wAA/AAAAAH/AAD+AAAAA/8AAP8AAAAH/wAA/4AAAA// + AAD/wAAAH/8AAP/wAAB//wAA//wAAf//AAD//4AP//8AAP///////wAAKAAAACAAAABAAAAAAQAIAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAC9AAAAuwAAALkAAAC2AAAAswAAALEAAAClAAAAowAAAKEA + AACcAAAAkQAAAG0AAABpAAAAZAAAAF0AAABYAAAANgAAADAAAAAqAAAAIgAAABMAAAAHAAAAhgEBAL8C + AgC8AgIAqAICAKECAgBPAQEAQgEBALsDAwCyAwMArQMDAH0CAgC3BAQAiwMDALMFBQC8BwcA3AkJAKUH + BwBVBAQAzgsLALwKCgCqCQkAOwMDAOgNDQAPAQEAXQcHAJcMDACgDg4AvBISAPkaGgDNFhYAWwoKAOcb + GwC2FhYA2hwcAKsXFwDDGxsAuxwcALUbGwDKICAA8ycnAJMZGQBFDAwA0yYmAOUtLQC2JCQA/TQ0APAy + MgDGLCwA+Do6AKwoKAD/PDwA1TMzAP8+PgDpOjoA/0REAPBAQADIOTkAwDc3AP9KSgC3NTUATRcXANdC + QgD/T08A+E1NAM1AQAAqDQ0A5khIACYMDADxTU0Avj09AKw5OQCVMTEA/1VVAMFCQgC6QUEAsT4+AP9b + WwDISUkAvkZGALFCQgBpJycAzU1NAAgDAwD/YmIANBQUAOhcXAD/ZmYAu0tLAPhnZwD/a2sAs0xMALxR + UQD/cnIAkUFBAHk2NgCkS0sA/3Z2AJtISAC2VVUAzmNjAP98fADodXUASyYmAP+EhAD2gYEAqFlZABYM + DAD/jIwAm1hYAGc7OwD+k5MAqmNjANJ9fQD/mpoA/56eAP+iogD/qKgA/6qqAN6WlgD/ra0A+6qqAP+w + sABzUVEA/7i4AOurqwD/u7sA/729APK3twCFZWUA/8PDAL6RkQD/ysoA16urAPXExAD3ysoAwqamAMyx + sQAhHR0AKScnAB0cHAAA//8AAP39AAD7+wAA+PgAAPb2AAD19QAA8/MAAPHxAADv7wAA7e0AAOrqAADm + 5gAA5OQAAOPjAADh4QAA398AAN3dAADY2AAA19cAAM3NAADLywAAx8cAAMPDAADBwQAAtbUAALCwAACt + rQAAqakAAKamAACjowAAlZUAAJKSAABmZgAAZGQAAY2NAAGCggACvLwAA/7+AAPs7AADwsIAApycAAT8 + /AAEtLQABK6uAAJcXAAEl5cAB/n5AAf09AAG2NgABaKiAASRkQADbGwACPX1AAR4eAAJ/v4ADv//AAZm + ZgAQ+voACpycABT//wALiooAFfT0ABz9/QAe6OgAI/39AAk6OgAs/f0ALu7uACKurgAz/f0AHo+PADz8 + /AA86+sAPNXVAEn9/QBG7+8AInBwAFL+/gA2oaEAVPX1AF/9/QAECgoAYOTkAFzT0wBr8fEAaM7OAGO8 + vABx1dUAgN7eAHzIyACQ5eUAfpeXAAAAAAD///////////////////////////////////////////// + //////////////////////////////////////////////////////9janB3foKFiP////////////// + /////////////0lJUWNzfoWIiouMjI6Q//////////////////////9ERERJUWNwe4KJjpKUlZSS//// + //////////////9FPj4zMzZKTlVqc36IjJSYmpiVlP//////////////QjY2LSkwdf5XTV9te4KFjZmb + nJqYlP///////////0I2LSYfHOfr9YBOX213f4eR8fienZqYlP//////////OCYZIWvH3Ojz/GhVanN8 + g6HT6vufnZqV/////////zgpGx3ftqrZ5fD3hltjb3p91a3j8/2fnZiS//////9BNCAc1ry3r6bh6vP8 + aF9sdKK3q9rq8/2fnJKQ/////z0yIxPPwby3rqbj7feDWWR90LCqpOHq8vuelo7/////PSoXERbDwr24 + sajl8PliXqK0rKmoqcni7P6bjP///0Y6KgkNExbExb+6s9Lo7pF9yqioqa2zts3pl5OMif//RjolBAoO + ExbPxsC5sNzl5uLZo6WpsLrGoISHj4uF//9GOyIDBAoMERX02Lu0qdrh3trZzK7Uon10en+JioL//1A8 + JAQCAwcXDxMWxbWrpNna2t7g71NeaGxvd4KIfv//XEMgBgQBAAMJDRTktaqlo8jZ3uPsdVRWX19qe4V3 + //9lQysgBgMBAAkQgb2tqKamqKjR4er2dk5LTVVwfnP//2VSORogBgYLHd20q6emp6ywsq7S5fD6gFdF + SWNzbf//YWE5JwcHIRLOrKempaars7rHuLLX6PD3/GZFUWpj////bkgxFxBay7OrpqSkqLDL5Ma/urHR + 5e3y+UZLVf////9uYj8o5MW8tq+opaaruIEUFtbAuK+o4OLxQ0RL/////2JxXlMu1sG8tq+pqa/fEA0T + 9Ma+uLS01DU4RE3//////3F2Z1gWw8G8t7Kx1B0ICA8Vz8K+u9UdMj5H/////////3l4Z1hpw8G9usdY + CwACFxEWw8LYLCs2Rf//////////Ynl4Z1hpw8LA2A4FAAAHDBMu5CwnOEVO////////////Znl4Z2uB + z9sRCwQBAAIKDBwvMThCTP//////////////Znl2dX1rQCEaHyIZGB4rMTxBQkz///////////////// + /3GAeHReSDw3NzI6Oj1GSkr//////////////////////11xeXJuZWBcT1dXV0pK//////////////// + ////////////XGVlZGRkV0//////////////////////////////4B///wAD//4AAf/4AAB/8AAAP+AA + AB/gAAAfwAAAD4AAAAeAAAAHgAAABwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAB4AA + AAeAAAAHwAAAD+AAAB/gAAAf8AAAP/gAAH/+AAH//wAD///gH/8oAAAAEAAAACAAAAABAAgAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAvAAAALsAAAC6AAAAsgAAALEAAACwAAAArQAAAKcAAACfAAAAkwAAAH4A + AABtAAAAPAAAAKgEBAChBQUAYAMDADsCAgBVBAQAOwMDAKIMDAC0Dg4Avg8PANEWFgBoCwsA5xoaALsV + FQDFGBgAsxYWADwICACoFxcAgBISAPYuLgDfKSkA4y0tAJwfHwCyJCQAzy0tAOAxMQDzNzcA8zk5APA5 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICAgAJGRkYLISEhHxwcHEB+FxeKtB4exd8o + KOr/ODj//0VF//9QUP//W1v//2Zm//9wcP//eHj//39///+Ghv//jIz//5GR//+Wlv//mZn/2YaG7aNo + aNJZOjquAAAAfwAAAF8AAAA7AAAAGwAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BZmZmBT09PRUwMDA1jB4eiMQa + Gs/0Hh75/ysr//86Ov//SEj//1ZW//9lZf//cXH//319//+Ghv//jo7//5OT//+Zmf//nZ3//6Cg//+k + pP//pqb//6en//+oqP/0oqL5tHl53F9BQbMAAAB9AAAAVgAAAC0AAAAQAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////Af///wGSkpIHSkpKH3Qp + KV66Hx++6yEh9fsmJv/9Li7//zU1//9DQ///T0///11d//9tbf//enr//4aG//+Pj///l5f//56e//+k + pP//qqr//66u//+wsP//s7P//7Oz//+zs///s7P//7Oz/+6np/ahcXHUNCYmngICAmwAAAA8AAAAFwAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wH///8B////AoCA + gAhEREQimyQkhNAgINz0JSX/9y0t//kvL//8MjL//zQ0//86Ov//RET//1BQ//9aWv//aGj//3R0//9/ + f///ior//5aW//+goP//qqr//7Ky//+3t///vLz//76+//++vv//vb3//7u7//+5uf//t7f/y5GR52VJ + SbcCAgJ5BAQERwAAABoAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8DqqqqCU5OTiSsJSWW3CIi7O8lJf/yKir/9Ssr//cqKv/7KCj//iUl//0nJ//4MTH/9zk5//1F + Rf//UVH//19f//9ra///eHj//4WF//+Skv//np7//6mp//+zs///vLz//8LC///Fxf//xsb//8XF///C + wv//vr7//7u7/+KkpPKAXFzDAgICgAAAAEoAAAAaAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wOzs7MKWlpaIrAkJJrfISHz7CUl/+4kJP/wIiL/9B4e//YaGv/5FRX/+BER/+sS + Ev/WICD/3C0t//Q1Nf/+QkL//05O//9bW///Z2f//3V1//+Bgf//jY3//5ub//+mpv//srL//7y8//7D + w//9yMj//svL///Kyv//x8f//8LC//++vv/ura33iGNjxwQEBIAAAABGAAAAFwAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD///8B////A9XV1QZsbGwariYmkNseHvPnISH/6SAg/+saGv/tFRX/8Q8P//UM + DP/xCQn/1QcH/6EPD/+KLS3/qzk5/983N//7PT3//0lJ//9WVv//YmL//2xs//94eP//hIT//4+P//+a + mv/9paX/9Kur/+Wrq//js7P/7sLC//vMzP/+zs7//8nJ///ExP//v7//7q2t94FeXsMCAgJ5AAAAPAAA + ABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAD///8C////Bo6OjhKoLCxz0iAg6uIbG//kGhr/5hUV/+gP + D//sCQn/7QQE/+MEBP+vAQH/WAcH/0NiYv9anJz/iG5u/8dAQP/1PT3//0ZG//9SUv//Xl7//2ho//9z + c///fHz//4aG//2QkP/wk5P/y4WF/5Rqav+QgYH/u56e/+a+vv/7zs7//8/P///Ly///xMT//76+/+Ol + pfJnSkq3AgICbAAAAC0AAAAIAAAAAAAAAAAAAAAAAAAAAP///wH///8Ev7+/DJg8PEPGISHU3Rsb/98V + Ff/hDg7/4wkJ/+YFBf/kAwP/0AEB/4MBAf8qNTX/CcDA/ybo6P9L6ur/ccDA/6NkZP/hQkL//END//9P + T///Wlr//2Rk//9ubv//eXn//4KC//aGhv/Penr/f09P/zdXV/8/u7v/esXF/7mqqv/pwcH//M7O///P + z///ysr//8PD//+9vf/LkpLnNicnngMDA1cAAAAbAAAAAwAAAAAAAAAAAAAAAP///wL///8HgICAFrch + IajZHR3/2hYW/9sNDf/dBgb/4AIC/98CAv/LAQH/cAAA/x5AQP8Dzc3/APf3/x7///9C/f3/Y/Hx/4S5 + uf/DTk7/9END//5MTP//VVX//2Bg//9qav//c3P//Hx8/+d6ev+eWVn/PCQk/w9/f/8X5ub/VvLy/4vZ + 2f/CsLD/68PD//zOzv//zs7//8jI///AwP//uLj/oXJy1AYGBn8AAAA7AAAACwAAAAAAAAAAAAAAAP// + /wTMzMwKqykpYc0eHvHVFhb/1g4O/9gGBv/aAgL/3AAA/8sAAP9+AAD/GkBA/wO8vP8A8/P/AP7+/xb/ + //81////Vf///3Lh4f+oXl7/5kRE//xGRv//UFD//1pa//9kZP//bW3/9nNz/8lmZv9kNjb/EUdH/wK5 + uf8C9/f/Ov7+/2v39/+X1NT/xrCw/+zDw//9zs7//8zM///Fxf//u7v/7qio92NGRrQDAwNgAAAAHgAA + AAIAAAAAAAAAAP///wZxcXESuyEht9EaGv/RERH/0wYG/9QBAf/XAQH/ywAA/4kAAP8YRkb/AsPD/wDv + 7/8A+fn/AP7+/xD///8o////Rv///2Px8f+JmZn/x01N//RDQ///Skr//1NT//9cXP/8ZWX/5mVl/5tJ + Sf8vGBj/A5ub/wHh4f8A+fn/Jf///0////91+Pj/mdXV/8awsP/swsL//MvL///IyP//v7///7W1/7d+ + ft0GBgaBAAAAOgAAAAoAAAAAAAAAAP///weqJiZVyR0d9MwVFf/ODAz/zgMD/84AAP+7AAD/awAA/xdD + Q/8CsrL/AN/f/wDw8P8A+fn/AP7+/wn///8c////Nv///1X9/f9y39//o2pq/+NDQ//8Q0P//0tL//9U + VP/2Wlr/y1JS/2cuLv8TKyv/ALy8/wDp6f8A+vr/FP///zX///9X////efPz/5vW1v/JsLD/7sLC//zH + x///wcH//7a2//SmpvldPz+vAwMDVwAAABYAAAAAAAAAALOzswq3IyOfyhwc/8kREf/JBwf/xQEB/6kA + AP9hAAD/Ez4+/wKNjf8AuLj/ANHR/wDm5v8A9PT/APz8/wL///8R////KP///0X///9j8vL/ipWV/8xH + R//2PDz//0FB//1JSf/pTEz/oTo6/zQVFf8FeHj/ANbW/wDv7/8A+/v/CP///x////84////V////3X1 + 9f+Zzs7/x6ys/+u9vf/8wMD//ri4//+srP+mbW3TBwcHcQYGBikAAAADAAAAAIVHRxm9ISHaxhkZ/8UM + DP/EBQX/ugAA/40AAP9BAAD/DB0d/wFqav8AnJz/ALa2/wDPz/8A4+P/APLy/wD7+/8G////G////zb/ + //9V+fn/dsLC/6lcXP/kOzv//Tc3//c+Pv/MOTn/aCEh/xI9Pf8Bv7//AObm/wD09P8A/Pz/Af///w3/ + //8a/v7/L/39/0n5+f9o7u7/j8TE/8Ojo//tt7f//Li4//+urv/bjIztFxISiwQEBD4AAAAKAAAAAKgk + JFXFIyP/wxcX/8EJCf/AAgL/twAA/5QAAP9UAAD/GgAA/wMfH/8AcnL/AJaW/wCvr/8Ax8f/ANzc/wDs + 7P8A+Pj/C/7+/yb///9G/f3/Ze3t/4WoqP/DQUH/7i8v/+cwMP+hJyf/OA8P/wZubv8A29v/AO/v/wD4 + +P8A/Pz/AP39/wD8/P8A+fn/BfX1/xXv7/8y4uL/XLq6/5qTk//drKz/+bW1//+trf//n5//ZD8/sQYG + BlEAAAASAAAAALIlJYnCISH/vhQU/74HB/+/AgL/vgAA/60AAP+FAAD/TwAA/xsAAP8DFxf/AGdn/wCM + jP8Apqb/AL29/wDT0/8A6Oj/APf3/xP+/v8z////Uv39/23c3P+eTk7/xyws/7YjI/9dEhL/E0RE/wG4 + uP8A7e3/APb2/wD5+f8A+fn/APX1/wDv7/8A5ub/ANra/wPGxv8Pqqr/N319/41sbP/epKT/+7Oz//+s + rP//np7/mFtbygoKCmIAAAAZAAAAALcoKLG/ISH/uxMT/7sHB/+9AgL/wAAA/78AAP+yAAD/jwAA/1sA + AP8nAAD/CAIC/wFHR/8Afn7/AJub/wC0tP8Az8//AObm/wD5+f8d/v7/Pf///1X09P9wjo7/gjs7/2Qg + IP8gSkr/AsvL/wDt7f8A9/f/APj4/wD39/8A8fH/AOfn/wDZ2f8Ax8f/AZub/whfX/8fOjr/Xjw8/7h5 + ef/wpqb//rGx//+qqv//nZ3/vG1t3RAQEG8AAAAgAAAAALcpKdG8IiL/uRMT/7gGBv+5AQH/vgAA/8MA + AP/EAAD/uwAA/54AAP9uAAD/PAAA/xIAAP8CKyv/AGVl/wCPj/8Ar6//AM/P/wDp6f8D+/v/Jf7+/z39 + /f9I3d3/R7Cw/zGmpv8Sy8v/APX1/wD8/P8A+/v/APn5/wDz8/8A5+f/ANDQ/wCtrf8DhIT/Ej09/zYb + G/9vODj/smFh/+aGhv/7oaH//6ur//+np///mpr/13Z26w8PD3gAAAAlAAAAALksLOe6IyP/thIS/7QE + BP+2AQH/uwAA/8AAAP/FAAD/yQAA/8UAAP+xAAD/iQAA/1cAAP8pAAD/CgAA/wFHR/8Ajo7/ALa2/wDY + 2P8A8PD/DP39/yP///8u/f3/LPj4/yD4+P8R/f3/Bf///wD///8A////APv7/wDq6v8AzMz/BISE/xIt + Lf8xFRX/ZCsr/55HR//MX1//63Nz//qDg///lpb//6Oj//+jo///lpb/63t79RQUFIAGBgYpAAAAALsx + Mfe3IiL/shAQ/7EDA/+zAQH/uAAA/70AAP/CAAD/yAAA/84AAP/OAAD/xAAA/6YAAP91AAD/OQAA/wwA + AP8BUVH/AJub/wDIyP8A5+f/APr6/w3///8Y////Gf///xP///8N////CP///wf///8I////Bubm/wKx + sf8MYWH/KxUV/2IiIv+bOjr/yU9P/+hfX//2Zmb//HBw//94eP//iYn//5mZ//+dnf//kpL/+Hx8+xUV + FYQGBgYrAAAAALs0NP60IiL/rw4O/64DA/+wAAD/tQAA/7oAAP+/AAD/xQAA/8sAAP/RAAD/1QAA/9IA + AP+2AAD/egAA/zEAAP8HDAz/AHd3/wC6uv8A4OD/APX1/wD///8J////C////wr///8H////CP///w3/ + //8T/f3/GsnJ/yZiYv9KGRn/iSgo/8Y+Pv/nTU3/9ldX//xdXf//YGD//2Rk//9tbf//fX3//46O//+X + l///jIz//nh4/xgYGIEGBgYpAAAAALo4OPezJSX/rA8P/6sCAv+tAAD/sgAA/7cAAP+8AAD/wgAA/8gA + AP/OAAD/0wAA/9gAAP/UAAD/rgAA/2gAAP8fAAD/AzU1/wChof8A4OD/APT0/wD9/f8B////A////wP/ + //8E////B////xD///8d/f3/LdfX/0h9ff+FMDD/zTc3//NDQ//9S0v//09P//9SUv//VVX//1hY//9e + Xv//cHD//4OD//+QkP//hob/+G5u/BkZGXsHBwcmAAAAALg+PuizKyv/qhIS/6gCAv+qAAD/rgAA/7MA + AP+5AAD/vgAA/8QAAP/KAAD/0AAA/9YAAP/aAAD/ygAA/5MAAP86AAD/CCUl/wCgoP8A5eX/APb2/wD9 + /f8A////AP///wD///8B////Bv///xD///8h////N/b2/1PKyv+IWlr/zz4+//k9Pf//QED//0ND//9G + Rv//SEj//0pK//9QUP//YmL//3h4//+IiP//gID/7GJi9RsbG3IICAghAAAAALZBQdOzMDD/qRUV/6UE + BP+nAQH/qwAA/7AAAP+1AAD/ugAA/8AAAP/GAAD/zAAA/9IAAP/XAAD/zQAA/5UAAP8xAAD/BWpq/wDM + zP8A8PD/APn5/wD+/v8A/v7/AP///wD9/f8A/v7/Af7+/wv///8d////N////1Ly8v9zvr7/qVtb/+g6 + Ov//NDT//zc3//86Ov//Ozv//z4+//9CQv//VVX//2tr//+AgP//eHj/3FdX6R4eHmcKCgoaAAAAALRD + Q7S0ODj/qhwc/6QICP+lAgL/pwAA/6wAAP+xAAD/tgAA/7wAAP/CAAD/yAAA/84AAP/OAAD/tAAA/1EA + AP8PTEz/AcfH/wDt7f8A9/f/APv7/wD+/v8A/f3/APv7/wD39/8A9vb/APj4/wD8/P8R/v7/Kv///0f9 + /f9k9fX/hL+//71PT//6Kir//yoq//8rK///Li7//zAw//82Nv//R0f//2Ji//91df//bm7/xUxM2iMj + I1gAAAASAAAAALFBQYq2QED/rCcn/6QPD/+jBQX/pAAA/6gAAP+tAAD/sgAA/7cAAP+9AAD/wgAA/8EA + AP+oAAD/QQAA/wx/f/8B0ND/APHx/wD4+P8A+/v/AP39/wD9/f8A+Pj/APHx/wDp6f8A5OT/AObm/wDu + 7v8A+fn/FP7+/zH///9P////bPX1/4y6uv/OQED/+x4e//8dHf//Hx///yIi//8oKP//PDz//1VV//9m + Zv//YGD/qkJCwykpKUUAAAAKAAAAALE9PU+3R0f/rS8v/6MVFf+hCAj/oQEB/6QAAP+pAAD/rQAA/7MA + AP+3AAD/tQAA/44AAP8wDw//Bqys/wDn5/8A9fX/APr6/wD8/P8A/v7/AP7+/wD5+f8A8PD/AN/f/wDL + y/8Aw8P/AMjI/wDX1/8A6Oj/APf3/xb9/f80////Uv///2719f+Ltrb/vkZG//UVFf//EBD//xUV//8b + G///MTH//0hI//9bW///Vlb/iDw8nzU1NTBAQEAEAAAAALEzMwqzRUXZsDo6/6YfH/+gDQ3/ngEB/6EA + AP+kAAD/qQAA/6sAAP+iAAD/agAA/xtDQ/8DwsL/APDw/wD6+v8A+/v/AP7+/wD+/v8A/v7/APz8/wD0 + 9P8A29v/AaWl/wFtbf8Ac3P/AJ6e/wC3t/8Azs7/AOTk/wD39/8W/v7/Nf///1H///9p9/f/f9jY/6Rt + bf/qERH//wcH//8REf//Jyf//z4+//9OTv/jSUntSzw8ak1NTR7///8B////AQAAAACwQkKbtEVF/6kq + Kv+hFBT/nQUF/5wAAP+dAAD/mAAA/4AAAP9DAAD/D2pq/wHR0f8A8/P/APv7/wD9/f8A/v7/AP///wD/ + //8A/v7/APf3/wDl5f8CoqL/Cj8//xAFBf8HERH/AVBQ/wCHh/8Ara3/AMrK/wDk5P8A9/f/Fv7+/zH/ + //9L////Xv39/27f3/+LfHz/0Rwc//oPD///IiL//zU1//9BQf+/Pz/MRkZGSWlpaRH///8B////AQAA + AACuPT1LtktL8602Nv+kHx//mgoK/5EBAf9+AAD/UgAA/yYSEv8Jb2//AcbG/wDn5/8A9fX/APv7/wD+ + /v8A////AP///wD+/v8A+/v/APHx/wHJyf8TQUH/PAAA/0oAAP8qAAD/CgEB/wFISP8AiIj/AKur/wDI + yP8A5OT/APb2/xD9/f8n/v7/Ofv7/0bv7/9XtbX/kDQ0/94aGv/6KSn//Tc3//U4OPmVQUGWXV1dLL+/ + vwgAAAAAAAAAAAAAAAAAAAAAsUZGr7JDQ/+nLS3/mxQU/4IGBv9bAQH/JQIC/wdRUf8BmJj/AMHB/wDZ + 2f8A7Oz/APj4/wD+/v8A////AP///wD9/f8A9vb/AN/f/wiPj/9MAAD/lwAA/5sAAP9wAAD/NAAA/wsA + AP8BR0f/AImJ/wCrq/8AyMj/AOTk/wD09P8C+fn/EPPz/xzX1/81e3v/iRkZ/9wbG//3Kyv/+zg4/8w5 + OdVYWFhRi4uLFv///wQAAAAAAAAAAAAAAAAAAAAArT4+UrNLS+6uPT3/nyUl/4MQEP9VBgb/IQEB/wUh + If8Aenr/AKWl/wDCwv8A29v/AO3t/wD4+P8A/v7/AP39/wD5+f8A6+v/BKqq/zMREf+pAAD/ywAA/8gA + AP+sAAD/dwAA/zcAAP8KAAD/AVFR/wCIiP8ArKz/AMnJ/wDf3/8A5ub/Ac7O/wqBgf9JBwf/sA8P/+kd + Hf/3Ly//7TY29p9CQpR0dHQus7OzCv///wMAAAAAAAAAAAAAAAAAAAAAAAAAAK9FRZu0Skr/qDY2/5Ie + Hv9sDg7/NgMD/w8AAP8CKir/AH19/wClpf8AwsL/ANzc/wDt7f8A+Pj/APn5/wDv7/8Bycn/HTs7/5UA + AP/JAAD/0gAA/9MAAP/MAAD/sQAA/3oAAP86AAD/DAAA/wFKSv8AjIz/AK+v/wDFxf8AwcH/CHx8/zUJ + Cf+SBgb/2RMT//AlJf/1MzP/wjw8xGtra0WmpqYX////BP///wEAAAAAAAAAAAAAAAAAAAAAAAAAAKo5 + OSiwSUnKsUhI/6UzM/+MHh7/YwwM/zMEBP8PAQH/Aisr/wB1df8ApaX/AMLC/wDb2/8A6+v/AO7u/wDa + 2v8Oamr/ZgAA/74AAP/LAAD/zgAA/9AAAP/RAAD/zQAA/7QAAP99AAD/PQAA/wsAAP8AWVn/AJCQ/wCe + nv8Ia2v/MwkJ/4kDA//QDQ3/6hwc//AsLP/UODjgjlJSa5WVlSTo6OgL////Av///wEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACtPz9ZtE9P47FHR/+kMzP/ihwc/2MODv8yBQX/DgEB/wMuLv8Afn7/AKam/wDB + wf8A19f/ANra/wSlpf88AAD/pQAA/8EAAP/FAAD/yAAA/8sAAP/NAAD/0AAA/80AAP+0AAD/dwAA/zEA + AP8GFBT/AmNj/wZhYf8wCwv/hAQE/8oLC//kGBj/7CYm/90xMe6pRESNi4uLLtLS0hH///8F////AQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr0REdLRQUO+xSEj/ozIy/4kcHP9hDg7/MAQE/w0B + Af8CMDD/AH9//wCkpP8Aubn/Aa6u/xo8PP9+AAD/tQAA/7wAAP+/AAD/wgAA/8UAAP/IAAD/ywAA/80A + AP/JAAD/pwAA/2YAAP8tAAD/GggI/zIGBv9/AwP/xgoK/+AWFv/nJSX/4S8v9LQ8PJ6MjIwz3NzcFv// + /wr///8DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALBHR361U1PwskpK/6Q1 + Nf+NIiL/YxER/zMICP8QBAT/AzEx/wB0dP8Bj4//Dk1N/1sAAP+lAAD/swAA/7cAAP+6AAD/vQAA/8AA + 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 + yf+AAU3/wANP/+AHYf8= + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/Window.vb b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/Window.vb new file mode 100644 index 00000000..c6536589 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/Window.vb @@ -0,0 +1,344 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Runtime.InteropServices +Imports System.Windows.Forms +Imports System.Windows.Media.Media3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + +Namespace WindowsFlag + ''' + ''' This application demonstrates animation using matrix transformations of 1600 cubes + ''' + ''' Copyright (c) Microsoft Corporation. All rights reserved. + ''' + Partial Public Class Window + Inherits Form + #Region "Fields" + Private viewSync As New Object() + Private device As D3DDevice + Private swapChain As SwapChain + Private renderTargetView As RenderTargetView + Private depthStencil As Texture2D + Private depthStencilView As DepthStencilView + Private backColor_Renamed As New ColorRgba(0.0F, 0.125F, 0.3F, 1.0F) + + Private vertexLayout As InputLayout + Private vertexBuffer As D3DBuffer + Private indexBuffer As D3DBuffer + + Private effects As Effects + + Private flagShells As Integer = 20 + + Private Eye As New Vector3F(0.0f, 0.0f, -1.0f) + Private At As New Vector3F(0.0f, 0.0f, 0.0f) + Private Up As New Vector3F(0.0f, 1.0f, 0.0f) + + Private cube As New Cube() + + Private t As Single = 0f + Private lastPresentTime As Single = 0f + Private lastPresentCount As UInteger = 0 + Private dwTimeStart As Integer = Environment.TickCount + + Private isDrag As Boolean = False + Private lastLocation As New System.Drawing.Point(Integer.MaxValue, Integer.MaxValue) + Private needsResizing As Boolean + #End Region + + #Region "Window()" + Public Sub New() + InitializeComponent() + End Sub + #End Region + + #Region "Window_Load()" + Private Sub Window_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load + InitializeDevice() + MoveCameraAroundCenter(-10, -29) + ScaleCameraDistance(51) + directControl.Render = AddressOf Me.RenderScene + End Sub + #End Region + + #Region "directControl_SizeChanged()" + Private Sub directControl_SizeChanged(ByVal sender As Object, ByVal e As EventArgs) Handles directControl.SizeChanged + needsResizing = True + End Sub + #End Region + + #Region "InitDevice()" + ''' + ''' Creates Direct3D device and swap chain, + ''' Initializes buffers, + ''' Loads and initializes the shader + ''' + Protected Sub InitializeDevice() + device = D3DDevice.CreateDeviceAndSwapChain(directControl.Handle) + swapChain = device.SwapChain + + SetViews() + + effects = New Effects(device) + + InitializeVertexLayout() + InitializeVertexBuffer() + InitializeIndexBuffer() + + ' Set primitive topology + device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList + + effects.ViewMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixLookAtLH(Eye, At, Up) + effects.ProjectionMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixPerspectiveFovLH(CSng(Math.PI) * 0.25F, (CSng(Me.ClientSize.Width) / CSng(Me.ClientSize.Height)), 0.1F, 4000.0F) + End Sub +#End Region + + #Region "SetViews()" + Private Sub SetViews() + ' Create a render target view + Using pBuffer As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(pBuffer) + End Using + + ' Create depth stencil texture + Dim descDepth As New Texture2DDescription() With {.Width = CUInt(directControl.ClientSize.Width), .Height = CUInt(directControl.ClientSize.Height), .MipLevels = 1, .ArraySize = 1, .Format = Format.D32Float, .SampleDescription = New SampleDescription() With {.Count = 1, .Quality = 0}, .BindingOptions = BindingOptions.DepthStencil} + + depthStencil = device.CreateTexture2D(descDepth) + + ' Create the depth stencil view + Dim depthStencilViewDesc As New DepthStencilViewDescription() With {.Format = descDepth.Format, .ViewDimension = DepthStencilViewDimension.Texture2D} + depthStencilView = device.CreateDepthStencilView(depthStencil, depthStencilViewDesc) + + 'bind the views to the device + device.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}, depthStencilView) + + ' Setup the viewport + Dim vp As New Viewport() With {.Width = CUInt(directControl.ClientSize.Width), .Height = CUInt(directControl.ClientSize.Height), .MinDepth = 0.0F, .MaxDepth = 1.0F, .TopLeftX = 0, .TopLeftY = 0} + + device.RS.Viewports = New Viewport() {vp} + End Sub + #End Region + + #Region "InitializeVertexLayout()" + Private Sub InitializeVertexLayout() + ' Define the input layout + ' The layout determines the stride in the vertex buffer, + ' so changes in layout need to be reflected in SetVertexBuffers + Dim layout() As InputElementDescription = {New InputElementDescription() With {.SemanticName = "POSITION", .SemanticIndex = 0, .Format = Format.R32G32B32Float, .InputSlot = 0, .AlignedByteOffset = 0, .InputSlotClass = InputClassification.PerVertexData, .InstanceDataStepRate = 0}, New InputElementDescription() With {.SemanticName = "NORMAL", .SemanticIndex = 0, .Format = Format.R32G32B32Float, .InputSlot = 0, .AlignedByteOffset = 12, .InputSlotClass = InputClassification.PerVertexData, .InstanceDataStepRate = 0}} + + Dim passDesc As PassDescription = effects.Technique.GetPassByIndex(0).Description + + vertexLayout = device.CreateInputLayout(layout, passDesc.InputAssemblerInputSignature, passDesc.InputAssemblerInputSignatureSize) + + device.IA.InputLayout = vertexLayout + End Sub + #End Region + + #Region "InitializeVertexBuffer()" + Private Sub InitializeVertexBuffer() + Dim verticesData As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Vertices)) + Marshal.StructureToPtr(cube.Vertices, verticesData, True) + + Dim bufferDesc As New BufferDescription() With {.Usage = Usage.Default, .ByteWidth = CUInt(Marshal.SizeOf(cube.Vertices)), .BindingOptions = BindingOptions.VertexBuffer, .CpuAccessOptions = CpuAccessOptions.None, .MiscellaneousResourceOptions = MiscellaneousResourceOptions.None} + + Dim InitData As New SubresourceData() With {.SystemMemory = verticesData} + + 'D3DBuffer buffer = null; + vertexBuffer = device.CreateBuffer(bufferDesc, InitData) + + ' Set vertex buffer + Dim stride As UInteger = CUInt(Marshal.SizeOf(GetType(SimpleVertex))) + Dim offset As UInteger = 0 + device.IA.SetVertexBuffers(0, New D3DBuffer() {vertexBuffer}, New UInteger() {stride}, New UInteger() {offset}) + Marshal.FreeCoTaskMem(verticesData) + End Sub +#End Region + + #Region "InitializeIndexBuffer()" + Private Sub InitializeIndexBuffer() + Dim indicesData As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(cube.Indices)) + Marshal.StructureToPtr(cube.Indices, indicesData, True) + + Dim bufferDesc As New BufferDescription() With {.Usage = Usage.Default, .ByteWidth = CUInt(Marshal.SizeOf(cube.Indices)), .BindingOptions = BindingOptions.IndexBuffer, .CpuAccessOptions = CpuAccessOptions.None, .MiscellaneousResourceOptions = MiscellaneousResourceOptions.None} + + Dim initData As New SubresourceData() With {.SystemMemory = indicesData} + + indexBuffer = device.CreateBuffer(bufferDesc, initData) + device.IA.IndexBuffer = New IndexBuffer(indexBuffer, Format.R32UInt, 0) + Marshal.FreeCoTaskMem(indicesData) + End Sub +#End Region + + #Region "RenderScene()" + ''' + ''' Render the frame + ''' + Protected Sub RenderScene() + SyncLock viewSync + t = (Environment.TickCount - dwTimeStart) / 1000.0F + If lastPresentTime = 0 Then + lastPresentTime = t + lastPresentCount = swapChain.LastPresentCount + End If + + If t - lastPresentTime > 1.0F Then ' if one second has elapsed + Dim currentPresentCount As UInteger = swapChain.LastPresentCount + Dim presentCount As UInteger = currentPresentCount - lastPresentCount + Dim currentframerate As Single = CSng(presentCount) / (t - lastPresentTime) + Dim fps As String = String.Format("{0} fps", currentframerate) + label1.BeginInvoke(New MethodInvoker(Function() AnonymousMethod1(fps))) + lastPresentTime = t + lastPresentCount = currentPresentCount + End If + + If (needsResizing) Then + needsResizing = False + renderTargetView.Dispose() + Dim sd As SwapChainDescription = swapChain.Description + swapChain.ResizeBuffers(sd.BufferCount, CType(directControl.ClientSize.Width, UInteger), CType(directControl.ClientSize.Height, UInteger), sd.BufferDescription.Format, sd.Options) + SetViews() + effects.ProjectionMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixPerspectiveFovLH(CSng(Math.PI) * 0.25F, (CSng(Me.ClientSize.Width) / CSng(Me.ClientSize.Height)), 0.1F, 4000.0F) + End If + + ' Clear the backbuffer + device.ClearRenderTargetView(renderTargetView, backColor_Renamed) + + ' Clear the depth buffer to 1.0 (max depth) + device.ClearDepthStencilView(depthStencilView, ClearOptions.Depth, 1.0F, CByte(0)) + + RenderFlag(t, t * 180 / Math.PI, flagShells) + swapChain.Present(0, PresentOptions.None) + End SyncLock + End Sub + + Private Function AnonymousMethod1(ByVal fps As String) As Object + label1.Text = fps + Return Nothing + End Function + + Private Sub RenderFlag(ByVal t As Single, ByVal a As Double, ByVal shells As Integer) + Dim techDesc As TechniqueDescription = effects.Technique.Description + For x As Integer = -shells To shells + For z As Integer = -shells To shells + Dim height As Single = (CSng(Math.Sin(0.5 * (x + 4 * t))) + CSng(Math.Cos(0.25 * (z + 2 * t)))) + Dim vBaseColor As Vector4F = New Vector4F(0.0F, 0.0F, 0.0F, 1.0F) + If x < 0 AndAlso z > 0 Then + vBaseColor.X = 0.75F + 0.125F * height 'red + ElseIf x > 0 AndAlso z > 0 Then + vBaseColor.Y = 0.75F + 0.125F * height 'green + ElseIf x < 0 AndAlso z < 0 Then + vBaseColor.Z = 0.75F + 0.125F * height 'blue + ElseIf x > 0 AndAlso z < 0 Then + vBaseColor.X = 0.75F + 0.125F * height + vBaseColor.Y = 0.75F + 0.125F * height + Else + Continue For + End If + effects.BaseColor = vBaseColor + + Dim yScale As Single = 5.0F + 0.5F * height + effects.WorldMatrix = MatrixMath.MatrixScale(0.35F, yScale, 0.35F) * MatrixMath.MatrixTranslate(x, yScale - 10, z) + + For p As UInteger = 0 To techDesc.Passes - 1UI + effects.Technique.GetPassByIndex(p).Apply() + device.DrawIndexed(36, 0, 0) + Next p + Next z + Next x + End Sub + #End Region + + #Region "MoveCameraAroundCenter()" + Private Sub MoveCameraAroundCenter(ByVal leftRight As Double, ByVal topDown As Double) + ' Use WPF maths for camera rotation. + ' It is slower than using Matrix4F and Vector4F, + ' but camera calculations are only done once per camera move + Dim tg As New Transform3DGroup() + 'left/right drags rotate around the camera's up vector + Dim leftRightRotationAxis As New Vector3D(Up.x, Up.y, Up.z) + 'top/down drags rotate around the vector that is perpendicular + 'to both Up and Eye (camera location) - their cross product + Dim topDownRotationAxis As Vector3D = Vector3D.CrossProduct(leftRightRotationAxis, New Vector3D(Eye.x, Eye.y, Eye.z)) + tg.Children.Add(New RotateTransform3D(New AxisAngleRotation3D(leftRightRotationAxis, leftRight))) + tg.Children.Add(New RotateTransform3D(New AxisAngleRotation3D(topDownRotationAxis, topDown))) + Dim newEye As Vector3D = tg.Transform(New Vector3D(Eye.x, Eye.y, Eye.z)) + Dim newUp As Vector3D = tg.Transform(New Vector3D(Up.x, Up.y, Up.z)) + Eye.x = CSng(newEye.X) + Eye.y = CSng(newEye.Y) + Eye.z = CSng(newEye.Z) + Up.x = CSng(newUp.X) + Up.y = CSng(newUp.Y) + Up.z = CSng(newUp.Z) + + effects.ViewMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixLookAtLH(Eye, At, Up) + End Sub +#End Region + + #Region "ScaleCameraDistance()" + Private Sub ScaleCameraDistance(ByVal scale As Single) + Dim eye4 As New Vector4F(Eye.x, Eye.y, Eye.z, 0) + Dim transform As Matrix4x4F = MatrixMath.MatrixScale(scale, scale, scale) + eye4 = MatrixMath.VectorMultiply(transform, eye4) + Eye = New Vector3F(eye4.x, eye4.y, eye4.z) + + effects.ViewMatrix = Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities.Camera.MatrixLookAtLH(Eye, At, Up) + End Sub +#End Region + + #Region "Event handlers for camera control" + #Region "directControl_MouseMove()" + Private Sub directControl_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles directControl.MouseMove, MyBase.MouseMove + If isDrag Then + SyncLock viewSync + ' Rotate the camera + Dim leftRight As Double = lastLocation.X - e.X + Dim topDown As Double = lastLocation.Y - e.Y + MoveCameraAroundCenter(leftRight, topDown) + lastLocation = e.Location + End SyncLock + End If + End Sub +#End Region + + #Region "OnMouseWheel()" + Protected Overrides Sub OnMouseWheel(ByVal e As MouseEventArgs) + MyBase.OnMouseWheel(e) + SyncLock viewSync + If e.Delta <> 0 Then + Dim scale As Single + If e.Delta <= 0 Then + scale = -(0.01F * e.Delta) + Else + scale = 100.0F / e.Delta + End If + ScaleCameraDistance(scale) + End If + End SyncLock + End Sub +#End Region + + #Region "directControl_MouseUp()" + Private Sub directControl_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles directControl.MouseUp + If e.Button = MouseButtons.Left Then + isDrag = False + End If + End Sub +#End Region + + #Region "directControl_MouseDown()" + Private Sub directControl_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles directControl.MouseDown + If e.Button = MouseButtons.Left Then + isDrag = True + lastLocation = e.Location + End If + End Sub +#End Region + #End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/WindowsFlag.fx b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/WindowsFlag.fx new file mode 100644 index 00000000..6633cc93 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/WindowsFlag.fx @@ -0,0 +1,75 @@ +//-------------------------------------------------------------------------------------- +// File: WindowsFlag.fx +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// +// For HLSL functions reference check: +// http://msdn.microsoft.com/en-us/library/bb509611(VS.85).aspx +// +//-------------------------------------------------------------------------------------- + + +//-------------------------------------------------------------------------------------- +// Constant Buffer Variables +//-------------------------------------------------------------------------------------- +matrix World; +matrix View; +matrix Projection; +float4 vLightDir[2]; +float4 vLightColor[2]; +float4 vBaseColor; + +//-------------------------------------------------------------------------------------- +struct VS_INPUT +{ + float4 Pos : POSITION; + float3 Norm : NORMAL; +}; + +struct PS_INPUT +{ + float4 Pos : SV_POSITION; + float3 Norm : TEXCOORD0; +}; + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +PS_INPUT VS( VS_INPUT input ) +{ + PS_INPUT output = (PS_INPUT)0; + output.Pos = mul( input.Pos, World ); + output.Pos = mul( output.Pos, View ); + output.Pos = mul( output.Pos, Projection ); + output.Norm = mul( input.Norm, World ); + + return output; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PS( PS_INPUT input) : SV_Target +{ + float4 finalColor = 0; + + //do NdotL lighting for 2 lights + for(int i=0; i<2; i++) + { + finalColor += saturate( dot( (float3)vLightDir[i], input.Norm) * vLightColor[i] * vBaseColor ) / 2; + } + finalColor.a = 1.0; + return finalColor; +} + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS() ) ); + } +} diff --git a/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/WindowsFlag.fxo b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/WindowsFlag.fxo new file mode 100644 index 00000000..37aa8168 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/WindowsFlag.fxo differ diff --git a/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/WindowsFlag.sln b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/WindowsFlag.sln new file mode 100644 index 00000000..c26aa05a --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/WindowsFlag.sln @@ -0,0 +1,79 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WindowsFlag", "WindowsFlag.vbproj", "{F235C99B-05D2-4A53-902C-E1691D7511B8}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{A24FD854-9F1B-43C5-B232-AFD34BEC56A8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Direct3DUtilities", "..\..\UtilitiesLibrary\D3DUtilities\Direct3DUtilities.vbproj", "{8A152DCF-12AE-492B-9F24-060B90B2DDD0}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|Win32.ActiveCfg = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Debug|Win32.Build.0 = Debug|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|Any CPU.Build.0 = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {F235C99B-05D2-4A53-902C-E1691D7511B8}.Release|Win32.ActiveCfg = Release|Any CPU + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Win32.ActiveCfg = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Debug|Win32.Build.0 = Debug|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Any CPU.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {8A152DCF-12AE-492B-9F24-060B90B2DDD0}.Release|Win32.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} = {A24FD854-9F1B-43C5-B232-AFD34BEC56A8} + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} = {A24FD854-9F1B-43C5-B232-AFD34BEC56A8} + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} = {A24FD854-9F1B-43C5-B232-AFD34BEC56A8} + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/WindowsFlag.vbproj b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/WindowsFlag.vbproj new file mode 100644 index 00000000..6420efeb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/WindowsFlag.vbproj @@ -0,0 +1,124 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {F235C99B-05D2-4A53-902C-E1691D7511B8} + WinExe + + + WindowsFlag + v3.5 + On + Binary + Off + On + 512 + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + 3.0 + + + + + + + + 3.0 + + + + + + + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + Window.vb + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + PreserveNewest + + + True + Settings.settings + True + + + Form + + + Window.vb + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/directx.ico b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/directx.ico new file mode 100644 index 00000000..763b1153 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D10/WindowsFlag/directx.ico differ diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Application.xaml b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Application.xaml new file mode 100644 index 00000000..f1bb156d --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Application.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Application.xaml.vb b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Application.xaml.vb new file mode 100644 index 00000000..c34903c8 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Application.xaml.vb @@ -0,0 +1,19 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Configuration +Imports System.Data +Imports System.Linq +Imports System.Windows + +Namespace Tutorial02_WPF + ''' + ''' Interaction logic for App.xaml + ''' + Partial Public Class App + Inherits Application + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..ac80eaee --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/My Project/AssemblyInfo.vb @@ -0,0 +1,56 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Resources +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + + '(used if a resource is not found in the page, + ' or application resource dictionaries) + '(used if a resource is not found in the page, + ' app, or any theme specific resource dictionaries) + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/My Project/Resources.Designer.vb new file mode 100644 index 00000000..d2f79bec --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/My Project/Resources.Designer.vb @@ -0,0 +1,65 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4927 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System + +Namespace My.Resources + + + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/My Project/Settings.Designer.vb new file mode 100644 index 00000000..7d1408f0 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4927 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/My Project/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Render.hlsl b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Render.hlsl new file mode 100644 index 00000000..997346cc --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Render.hlsl @@ -0,0 +1,36 @@ +//-------------------------------------------------------------------------------------- +// File: Render.hlsl +// +// The shaders for rendering tessellated mesh and base mesh +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +float4 VertShader( float4 Pos : POSITION ) : SV_POSITION +{ + return Pos; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PixShader( float4 Pos : SV_POSITION ) : SV_TARGET +{ + return float4( 1.0f, 1.0f, 0.0f, 1.0f ); // Yellow, with Alpha = 1 +} + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VertShader() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PixShader() ) ); + } +} \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Render.ps b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Render.ps new file mode 100644 index 00000000..8ac1fccb Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Render.ps differ diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Render.vs b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Render.vs new file mode 100644 index 00000000..ec6c18e4 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Render.vs differ diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Tutorial02_WPF.vbproj b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Tutorial02_WPF.vbproj new file mode 100644 index 00000000..45775430 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Tutorial02_WPF.vbproj @@ -0,0 +1,128 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3} + WinExe + + + Tutorial02_WPF + v3.5 + On + Binary + Off + On + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + false + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + false + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + Application.xaml + Code + + + Window1.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Window1.xaml b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Window1.xaml new file mode 100644 index 00000000..b49ede62 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Window1.xaml @@ -0,0 +1,17 @@ + + + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Window1.xaml.vb b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Window1.xaml.vb new file mode 100644 index 00000000..57c3a0ff --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WPF/Window1.xaml.vb @@ -0,0 +1,173 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.IO +Imports System.Runtime.InteropServices +Imports System.Windows +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D11 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics + +Namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11 + ''' + ''' Interaction logic for Window1.xaml + ''' + Partial Public Class Window1 + Inherits Window + #Region "Structs" + + _ + Private Class SimpleVertexArray + ' An array of 3 Vectors + _ + Public vertices() As Vector3F = { New Vector3F() With {.x = 0.0F, .y = 0.5F, .z = 0.5F}, New Vector3F() With {.x = 0.5F, .y = -0.5F, .z = 0.5F}, New Vector3F() With {.x = -0.5F, .y = -0.5F, .z = 0.5F} } + End Class + #End Region + + Public Sub New() + InitializeComponent() + End Sub + + #Region "Private Fields" + + Private device As D3DDevice + Private deviceContext As DeviceContext + Private renderTargetView As RenderTargetView + Private pixelShader As PixelShader + Private vertexShader As VertexShader + Private vertexBuffer As D3DBuffer + Private swapChain As SwapChain + Private needsResizing As Boolean + #End Region + + #Region "Window_Loaded()" + ''' + ''' Handles the Loaded event of the window. + ''' + ''' The source of the event. + ''' The instance containing the event data. + Private Sub Window_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) + InitDevice() + host.Render = AddressOf RenderScene + End Sub + #End Region + + #Region "Init device" + + ''' + ''' Init device and required resources + ''' + Private Sub InitDevice() + ' device creation + device = D3DDevice.CreateDeviceAndSwapChain(host.Handle) + swapChain = device.SwapChain + deviceContext = device.ImmediateContext + + SetViews() + + ' vertex shader & layout + + ' Open precompiled vertex shader + ' This file was compiled using: fxc Render.hlsl /T vs_4_0 /EVertShader /FoRender.vs + Using stream As Stream = Application.ResourceAssembly.GetManifestResourceStream("Render.vs") + vertexShader = device.CreateVertexShader(stream) + deviceContext.VS.Shader = vertexShader + + ' input layout is for the vert shader + Dim inputElementDescription As New InputElementDescription() + inputElementDescription.SemanticName = "POSITION" + inputElementDescription.SemanticIndex = 0 + inputElementDescription.Format = Format.R32G32B32Float + inputElementDescription.InputSlot = 0 + inputElementDescription.AlignedByteOffset = 0 + inputElementDescription.InputSlotClass = InputClassification.PerVertexData + inputElementDescription.InstanceDataStepRate = 0 + stream.Position = 0 + Dim inputLayout As InputLayout = device.CreateInputLayout(New InputElementDescription() {inputElementDescription}, stream) + deviceContext.IA.InputLayout = inputLayout + End Using + + ' Open precompiled vertex shader + ' This file was compiled using: fxc Render.hlsl /T ps_4_0 /EPixShader /FoRender.ps + Using stream As Stream = Application.ResourceAssembly.GetManifestResourceStream("Render.ps") + pixelShader = device.CreatePixelShader(stream) + End Using + deviceContext.PS.SetShader(pixelShader, Nothing) + + ' create some geometry to draw (1 triangle) + Dim vertex As New SimpleVertexArray() + + ' put the vertices into a vertex buffer + + Dim bufferDescription As New BufferDescription() + bufferDescription.Usage = Usage.Default + bufferDescription.ByteWidth = CUInt(Marshal.SizeOf(vertex)) + bufferDescription.BindingOptions = BindingOptions.VertexBuffer + + Dim subresourceData As New SubresourceData() + + Dim vertexData As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(vertex)) + Marshal.StructureToPtr(vertex, vertexData, False) + + subresourceData.SystemMemory = vertexData + vertexBuffer = device.CreateBuffer(bufferDescription, subresourceData) + + + deviceContext.IA.SetVertexBuffers(0, New D3DBuffer() { vertexBuffer }, New UInteger() { 12 }, New UInteger() { 0 }) + deviceContext.IA.PrimitiveTopology = PrimitiveTopology.TriangleList + + Marshal.FreeCoTaskMem(vertexData) + End Sub + #End Region + + #Region "SetViews() + Private Sub SetViews() + Dim texture2D As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(texture2D) + deviceContext.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}) + texture2D.Dispose() + + ' viewport + Dim desc As SwapChainDescription = swapChain.Description + Dim viewport As New Viewport() + viewport.Width = desc.BufferDescription.Width + viewport.Height = desc.BufferDescription.Height + viewport.MinDepth = 0.0F + viewport.MaxDepth = 1.0F + viewport.TopLeftX = 0 + viewport.TopLeftY = 0 + + deviceContext.RS.Viewports = New Viewport() {viewport} + End Sub + #End Region + + #Region "Render Scene" + + ''' + ''' Draw scene + ''' + Private Sub RenderScene() + If (needsResizing) Then + needsResizing = False + renderTargetView.Dispose() + Dim sd As SwapChainDescription = swapChain.Description + swapChain.ResizeBuffers(sd.BufferCount, CUInt(host.ActualWidth), CUInt(host.ActualHeight), sd.BufferDescription.Format, sd.Options) + SetViews() + End If + deviceContext.ClearRenderTargetView(renderTargetView, New ColorRgba(0.2F, 0.125F, 0.3F, 1.0F)) + + deviceContext.Draw(3, 0) + + swapChain.Present(0, 0) + End Sub + #End Region + + #Region "host_SizeChanged()" + Private Sub host_SizeChanged(ByVal sender As System.Object, ByVal e As System.Windows.SizeChangedEventArgs) + needsResizing = True + End Sub + #End Region + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Form1.Designer.vb b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Form1.Designer.vb new file mode 100644 index 00000000..dae18cea --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Form1.Designer.vb @@ -0,0 +1,58 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11 + Partial Public Class Form1 + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Me.directControl = New Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl + Me.SuspendLayout() + ' + 'directControl + ' + Me.directControl.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.directControl.Location = New System.Drawing.Point(12, 12) + Me.directControl.Name = "directControl" + Me.directControl.Size = New System.Drawing.Size(606, 426) + Me.directControl.TabIndex = 0 + ' + 'Form1 + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(630, 450) + Me.Controls.Add(Me.directControl) + Me.Name = "Form1" + Me.Text = "Direct3D 11 Tutorial 02" + Me.ResumeLayout(False) + + End Sub + + #End Region + + Private WithEvents directControl As Microsoft.WindowsAPICodePack.DirectX.Controls.DirectControl + End Class +End Namespace + diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Form1.resx b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Form1.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Form1.vb b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Form1.vb new file mode 100644 index 00000000..cdc6f3a8 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Form1.vb @@ -0,0 +1,148 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.IO +Imports System.Reflection +Imports System.Runtime.InteropServices +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D11 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics + +Namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11 + Partial Public Class Form1 + Inherits Form + #Region "Structs" + + _ + Private Class SimpleVertexArray + ' An array of 3 Vectors + _ + Public vertices() As Vector3F = { New Vector3F() With {.x = 0.0F, .y = 0.5F, .z = 0.5F}, New Vector3F() With {.x = 0.5F, .y = -0.5F, .z = 0.5F}, New Vector3F() With {.x = -0.5F, .y = -0.5F, .z = 0.5F} } + End Class + #End Region + + Public Sub New() + InitializeComponent() + End Sub + + Private device As D3DDevice + Private deviceContext As DeviceContext + Private renderTargetView As RenderTargetView + Private pixelShader As PixelShader + Private vertexShader As VertexShader + Private vertexBuffer As D3DBuffer + Private swapChain As SwapChain + Private needsResizing As Boolean + + + Private Sub directControl_Load(ByVal sender As Object, ByVal e As EventArgs) Handles directControl.Load + InitDevice() + directControl.Render = AddressOf RenderScene + End Sub + + Private Sub InitDevice() + device = D3DDevice.CreateDeviceAndSwapChain(directControl.Handle) + swapChain = device.SwapChain + deviceContext = device.ImmediateContext + + SetViews() + + ' Open precompiled vertex shader + ' This file was compiled using: fxc Render.hlsl /T vs_4_0 /EVertShader /FoRender.vs + Using stream As Stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("Render.vs") + vertexShader = device.CreateVertexShader(stream) + End Using + + deviceContext.VS.SetShader(vertexShader, Nothing) + + ' input layout is for the vert shader + Dim inputElementDescription As New InputElementDescription() + inputElementDescription.SemanticName = "POSITION" + inputElementDescription.SemanticIndex = 0 + inputElementDescription.Format = Format.R32G32B32Float + inputElementDescription.InputSlot = 0 + inputElementDescription.AlignedByteOffset = 0 + inputElementDescription.InputSlotClass = InputClassification.PerVertexData + inputElementDescription.InstanceDataStepRate = 0 + + Dim inputLayout As InputLayout + Using stream As Stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("Render.vs") + inputLayout = device.CreateInputLayout(New InputElementDescription() {inputElementDescription}, stream) + End Using + deviceContext.IA.InputLayout = inputLayout + + ' Open precompiled pixel shader + ' This file was compiled using: fxc Render.hlsl /T ps_4_0 /EPixShader /FoRender.ps + Using stream As Stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("Render.ps") + pixelShader = device.CreatePixelShader(stream) + End Using + deviceContext.PS.SetShader(pixelShader, Nothing) + + + ' create some geometry to draw (1 triangle) + Dim vertex As New SimpleVertexArray() + + ' put the vertices into a vertex buffer + + Dim bufferDescription As New BufferDescription() + bufferDescription.Usage = Usage.Default + bufferDescription.ByteWidth = CUInt(Marshal.SizeOf(vertex)) + bufferDescription.BindingOptions = BindingOptions.VertexBuffer + + Dim subresourceData As New SubresourceData() + + Dim vertexData As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(vertex)) + Marshal.StructureToPtr(vertex, vertexData, False) + + subresourceData.SystemMemory = vertexData + vertexBuffer = device.CreateBuffer(bufferDescription, subresourceData) + + + deviceContext.IA.SetVertexBuffers(0, New D3DBuffer() {vertexBuffer}, New UInteger() {12}, New UInteger() {0}) + deviceContext.IA.PrimitiveTopology = PrimitiveTopology.TriangleList + + Marshal.FreeCoTaskMem(vertexData) + End Sub + + Private Sub SetViews() + Dim texture2D As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(texture2D) + deviceContext.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}) + texture2D.Dispose() + + ' viewport + Dim desc As SwapChainDescription = swapChain.Description + Dim viewport As New Viewport() + viewport.Width = desc.BufferDescription.Width + viewport.Height = desc.BufferDescription.Height + viewport.MinDepth = 0.0F + viewport.MaxDepth = 1.0F + viewport.TopLeftX = 0 + viewport.TopLeftY = 0 + + deviceContext.RS.Viewports = New Viewport() {viewport} + End Sub + + Private Sub RenderScene() + If needsResizing Then + needsResizing = False + renderTargetView.Dispose() + Dim sd As SwapChainDescription = swapChain.Description + swapChain.ResizeBuffers(sd.BufferCount, CUInt(directControl.ClientSize.Width), CUInt(directControl.ClientSize.Height), sd.BufferDescription.Format, sd.Options) + SetViews() + End If + deviceContext.ClearRenderTargetView(renderTargetView, New ColorRgba(0.2F, 0.125F, 0.3F, 1.0F)) + + deviceContext.Draw(3, 0) + + swapChain.Present(0, 0) + End Sub + + Private Sub directControl_SizeChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles directControl.SizeChanged + needsResizing = True + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..7df82a91 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/My Project/AssemblyInfo.vb @@ -0,0 +1,40 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/My Project/Resources.Designer.vb new file mode 100644 index 00000000..322e4cab --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/My Project/Resources.Designer.vb @@ -0,0 +1,65 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.3053 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System + +Namespace My.Resources + + + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/My Project/Settings.Designer.vb new file mode 100644 index 00000000..519cc78c --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.3053 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Program.vb b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Program.vb new file mode 100644 index 00000000..e0592b07 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Program.vb @@ -0,0 +1,24 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Linq +Imports System.Windows.Forms + +Namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11 + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New Form1()) + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Render.hlsl b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Render.hlsl new file mode 100644 index 00000000..997346cc --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Render.hlsl @@ -0,0 +1,36 @@ +//-------------------------------------------------------------------------------------- +// File: Render.hlsl +// +// The shaders for rendering tessellated mesh and base mesh +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +float4 VertShader( float4 Pos : POSITION ) : SV_POSITION +{ + return Pos; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PixShader( float4 Pos : SV_POSITION ) : SV_TARGET +{ + return float4( 1.0f, 1.0f, 0.0f, 1.0f ); // Yellow, with Alpha = 1 +} + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VertShader() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PixShader() ) ); + } +} \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Render.ps b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Render.ps new file mode 100644 index 00000000..8ac1fccb Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Render.ps differ diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Render.vs b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Render.vs new file mode 100644 index 00000000..ec6c18e4 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Render.vs differ diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Tutorial02_WinFormsControl.vbproj b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Tutorial02_WinFormsControl.vbproj new file mode 100644 index 00000000..b0a4419c --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsControl/Tutorial02_WinFormsControl.vbproj @@ -0,0 +1,121 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E} + WinExe + + + Tutorial02_WinFormsControl + v3.5 + On + Binary + Off + On + 512 + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + false + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + false + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + Form + + + Form1.vb + + + + + Form1.vb + Designer + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + + True + Settings.settings + True + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Form1.Designer.vb b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Form1.Designer.vb new file mode 100644 index 00000000..8111147b --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Form1.Designer.vb @@ -0,0 +1,43 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11 + Partial Public Class Form1 + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Me.SuspendLayout() + ' + 'Form1 + ' + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None + Me.ClientSize = New System.Drawing.Size(630, 450) + Me.Name = "Form1" + Me.Text = "Direct3D 11 Tutorial 02 (Double click inside window to set Full Screen mode)" + Me.ResumeLayout(False) + + End Sub + + #End Region + End Class +End Namespace + diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Form1.resx b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Form1.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Form1.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Form1.vb b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Form1.vb new file mode 100644 index 00000000..11c04051 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Form1.vb @@ -0,0 +1,192 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.IO +Imports System.Reflection +Imports System.Runtime.InteropServices +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D11 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics + +Namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11 + Partial Public Class Form1 + Inherits Form + #Region "Structs" + + _ + Private Class SimpleVertexArray + ' An array of 3 Vectors + _ + Public vertices() As Vector3F = { New Vector3F() With {.x = 0.0F, .y = 0.5F, .z = 0.5F}, New Vector3F() With {.x = 0.5F, .y = -0.5F, .z = 0.5F}, New Vector3F() With {.x = -0.5F, .y = -0.5F, .z = 0.5F} } + End Class + #End Region + + Private device As D3DDevice + Private deviceContext As DeviceContext + Private renderTargetView As RenderTargetView + Private pixelShader As PixelShader + Private vertexShader As VertexShader + Private vertexBuffer As D3DBuffer + Private swapChain As SwapChain + + Public Sub New() + InitializeComponent() + + SetStyle(ControlStyles.UserPaint, True) + SetStyle(ControlStyles.AllPaintingInWmPaint, True) + UpdateStyles() + + End Sub + + Protected Overrides Sub OnMouseDoubleClick(ByVal e As MouseEventArgs) + If Not swapChain Is Nothing Then + swapChain.IsFullScreen = Not swapChain.IsFullScreen + End If + + End Sub + + Protected Overrides Sub OnShown(ByVal e As EventArgs) + MyBase.OnShown(e) + + ' device creation + device = D3DDevice.CreateDeviceAndSwapChain(Handle) + swapChain = device.SwapChain + deviceContext = device.ImmediateContext + + SetViews() + + ' Open precompiled vertex shader + ' This file was compiled using: fxc Render.hlsl /T vs_4_0 /EVertShader /FoRender.vs + Using stream As Stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("Render.vs") + vertexShader = device.CreateVertexShader(stream) + End Using + + deviceContext.VS.SetShader(vertexShader, Nothing) + + ' input layout is for the vert shader + Dim inputElementDescription As New InputElementDescription() + inputElementDescription.SemanticName = "POSITION" + inputElementDescription.SemanticIndex = 0 + inputElementDescription.Format = Format.R32G32B32Float + inputElementDescription.InputSlot = 0 + inputElementDescription.AlignedByteOffset = 0 + inputElementDescription.InputSlotClass = InputClassification.PerVertexData + inputElementDescription.InstanceDataStepRate = 0 + + Dim inputLayout As InputLayout + Using stream As Stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("Render.vs") + inputLayout = device.CreateInputLayout(New InputElementDescription() {inputElementDescription}, stream) + End Using + deviceContext.IA.InputLayout = inputLayout + + ' Open precompiled vertex shader + ' This file was compiled using: fxc Render.hlsl /T ps_4_0 /EPixShader /FoRender.ps + Using stream As Stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("Render.ps") + pixelShader = device.CreatePixelShader(stream) + End Using + deviceContext.PS.SetShader(pixelShader, Nothing) + + + ' create some geometry to draw (1 triangle) + Dim vertex As New SimpleVertexArray() + + ' put the vertices into a vertex buffer + + Dim bufferDescription As New BufferDescription() + bufferDescription.Usage = Usage.Default + bufferDescription.ByteWidth = CUInt(Marshal.SizeOf(vertex)) + bufferDescription.BindingOptions = BindingOptions.VertexBuffer + + Dim subresourceData As New SubresourceData() + + Dim vertexData As IntPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(vertex)) + Marshal.StructureToPtr(vertex, vertexData, False) + + subresourceData.SystemMemory = vertexData + vertexBuffer = device.CreateBuffer(bufferDescription, subresourceData) + + + deviceContext.IA.SetVertexBuffers(0, New D3DBuffer() { vertexBuffer }, New UInteger() { 12 }, New UInteger() { 0 }) + deviceContext.IA.PrimitiveTopology = PrimitiveTopology.TriangleList + + Marshal.FreeCoTaskMem(vertexData) + End Sub + + Private Sub SetViews() + Dim texture2D As Texture2D = swapChain.GetBuffer(Of Texture2D)(0) + renderTargetView = device.CreateRenderTargetView(texture2D) + deviceContext.OM.RenderTargets = New OutputMergerRenderTargets(New RenderTargetView() {renderTargetView}) + texture2D.Dispose() + + ' viewport + Dim desc As SwapChainDescription = swapChain.Description + Dim viewport As New Viewport() + viewport.Width = desc.BufferDescription.Width + viewport.Height = desc.BufferDescription.Height + viewport.MinDepth = 0.0F + viewport.MaxDepth = 1.0F + viewport.TopLeftX = 0 + viewport.TopLeftY = 0 + + deviceContext.RS.Viewports = New Viewport() {viewport} + End Sub + + Protected Overrides Sub OnPaintBackground(ByVal e As PaintEventArgs) + ' Do not paint to prevent flickering + End Sub + + Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs) + ' Not required unless we need other controls! + ' base.OnPaint(e); + + deviceContext.ClearRenderTargetView(renderTargetView, New ColorRgba(0.2f, 0.125f, 0.3f, 1.0f)) + + deviceContext.Draw(3, 0) + + swapChain.Present(0, 0) + End Sub + + Protected Overrides Sub OnClosed(ByVal e As EventArgs) + ' dispose all the DirectX bits + + deviceContext.ClearState() + deviceContext.Flush() + + + If vertexBuffer IsNot Nothing Then + vertexBuffer.Dispose() + End If + + If vertexShader IsNot Nothing Then + vertexShader.Dispose() + End If + + If pixelShader IsNot Nothing Then + pixelShader.Dispose() + End If + + If renderTargetView IsNot Nothing Then + renderTargetView.Dispose() + End If + + If device IsNot Nothing Then + device.Dispose() + End If + + MyBase.OnClosed(e) + End Sub + + Private Sub Form1_SizeChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.SizeChanged + If renderTargetView IsNot Nothing Then + renderTargetView.Dispose() + Dim sd As SwapChainDescription = swapChain.Description + swapChain.ResizeBuffers(sd.BufferCount, CUInt(Me.ClientSize.Width), CUInt(Me.ClientSize.Height), sd.BufferDescription.Format, sd.Options) + SetViews() + Invalidate() + End If + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..7df82a91 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/My Project/AssemblyInfo.vb @@ -0,0 +1,40 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/My Project/Resources.Designer.vb b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/My Project/Resources.Designer.vb new file mode 100644 index 00000000..322e4cab --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/My Project/Resources.Designer.vb @@ -0,0 +1,65 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.3053 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System + +Namespace My.Resources + + + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + ' This class was auto-generated by the StronglyTypedResourceBuilder + ' class via a tool like ResGen or Visual Studio. + ' To add or remove a member, edit your .ResX file then rerun ResGen + ' with the /str option, or rebuild your VS project. + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + +' internal Resources() +' { +' } + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set(ByVal value As System.Globalization.CultureInfo) + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/My Project/Resources.resx b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/My Project/Settings.Designer.vb b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/My Project/Settings.Designer.vb new file mode 100644 index 00000000..519cc78c --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.3053 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/My Project/Settings.settings b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Program.vb b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Program.vb new file mode 100644 index 00000000..e0592b07 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Program.vb @@ -0,0 +1,24 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Linq +Imports System.Windows.Forms + +Namespace Microsoft.WindowsAPICodePack.Samples.Direct3D11 + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New Form1()) + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Render.hlsl b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Render.hlsl new file mode 100644 index 00000000..997346cc --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Render.hlsl @@ -0,0 +1,36 @@ +//-------------------------------------------------------------------------------------- +// File: Render.hlsl +// +// The shaders for rendering tessellated mesh and base mesh +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + + +//-------------------------------------------------------------------------------------- +// Vertex Shader +//-------------------------------------------------------------------------------------- +float4 VertShader( float4 Pos : POSITION ) : SV_POSITION +{ + return Pos; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shader +//-------------------------------------------------------------------------------------- +float4 PixShader( float4 Pos : SV_POSITION ) : SV_TARGET +{ + return float4( 1.0f, 1.0f, 0.0f, 1.0f ); // Yellow, with Alpha = 1 +} + +//-------------------------------------------------------------------------------------- +technique10 Render +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VertShader() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PixShader() ) ); + } +} \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Render.ps b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Render.ps new file mode 100644 index 00000000..8ac1fccb Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Render.ps differ diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Render.vs b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Render.vs new file mode 100644 index 00000000..ec6c18e4 Binary files /dev/null and b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Render.vs differ diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Tutorial02_WinFormsWindow.vbproj b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Tutorial02_WinFormsWindow.vbproj new file mode 100644 index 00000000..c31894f7 --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorial02_WinFormsWindow/Tutorial02_WinFormsWindow.vbproj @@ -0,0 +1,117 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {7F4B3540-1E98-48D5-A826-78E4755ACCD5} + WinExe + + + Tutorial02_WinFormsWindow + v3.5 + On + Binary + Off + On + 512 + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + false + + + pdbonly + true + bin\Release\ + false + true + prompt + false + x86 + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + Form + + + Form1.vb + + + + + Form1.vb + Designer + + + ResXFileCodeGenerator + Resources.Designer.vb + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + + True + Settings.settings + True + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorials.sln b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorials.sln new file mode 100644 index 00000000..6d7c05bb --- /dev/null +++ b/source/Samples/DirectX/VB/Direct3D11/Tutorials/D3D11Tutorials.sln @@ -0,0 +1,96 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Tutorial02_WinFormsControl", "D3D11Tutorial02_WinFormsControl\Tutorial02_WinFormsControl.vbproj", "{60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.WindowsAPICodePack.DirectX", "..\..\..\..\..\WindowsAPICodePack\DirectX\DirectX\DirectX.vcproj", "{446B1E21-65A1-4F56-AA2C-D2E24058B2B8}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Tutorial02_WPF", "D3D11Tutorial02_WPF\Tutorial02_WPF.vbproj", "{D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Controls", "..\..\..\UtilitiesLibrary\Controls\DirectXControls.vcproj", "{5D4F4B06-1572-4E57-9007-93ECA5A07A11}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Tutorial02_WinFormsWindow", "D3D11Tutorial02_WinFormsWindow\Tutorial02_WinFormsWindow.vbproj", "{7F4B3540-1E98-48D5-A826-78E4755ACCD5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|Win32.ActiveCfg = Debug|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|x64.ActiveCfg = Debug|x64 + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Debug|x64.Build.0 = Debug|x64 + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|Any CPU.Build.0 = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|Win32.ActiveCfg = Release|Any CPU + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|x64.ActiveCfg = Release|x64 + {60C3FBA4-7CF7-4CA9-9C15-B9917E84915E}.Release|x64.Build.0 = Release|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.ActiveCfg = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|Win32.Build.0 = Debug|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Debug|x64.ActiveCfg = Debug|x64 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Any CPU.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Mixed Platforms.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.ActiveCfg = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|Win32.Build.0 = Release|Win32 + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8}.Release|x64.ActiveCfg = Release|x64 + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|Win32.ActiveCfg = Debug|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|x64.ActiveCfg = Debug|x64 + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Debug|x64.Build.0 = Debug|x64 + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|Any CPU.Build.0 = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|Win32.ActiveCfg = Release|Any CPU + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|x64.ActiveCfg = Release|x64 + {D4B368F8-3F85-4BA3-B7CF-E02AD3463FE3}.Release|x64.Build.0 = Release|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.ActiveCfg = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|Win32.Build.0 = Debug|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Debug|x64.ActiveCfg = Debug|x64 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Any CPU.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Mixed Platforms.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.ActiveCfg = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|Win32.Build.0 = Release|Win32 + {5D4F4B06-1572-4E57-9007-93ECA5A07A11}.Release|x64.ActiveCfg = Release|x64 + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|Win32.ActiveCfg = Debug|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|x64.ActiveCfg = Debug|x64 + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Debug|x64.Build.0 = Debug|x64 + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|Any CPU.Build.0 = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|Win32.ActiveCfg = Release|Any CPU + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|x64.ActiveCfg = Release|x64 + {7F4B3540-1E98-48D5-A826-78E4755ACCD5}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/DirectX/VB/UtilitiesLibrary/D3DUtilities/Camera/Camera.vb b/source/Samples/DirectX/VB/UtilitiesLibrary/D3DUtilities/Camera/Camera.vb new file mode 100644 index 00000000..b4bf1fae --- /dev/null +++ b/source/Samples/DirectX/VB/UtilitiesLibrary/D3DUtilities/Camera/Camera.vb @@ -0,0 +1,35 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D + +Namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + Public NotInheritable Class Camera + Private Sub New() + End Sub + Public Shared Function MatrixLookAtLH(ByVal eye As Vector3F, ByVal at As Vector3F, ByVal up As Vector3F) As Matrix4x4F + Dim right, vec As Vector3F + + vec = at - eye + vec.NormalizeInPlace() + right = Vector3F.Cross(up, vec) + up = Vector3F.Cross(vec, right) + right.NormalizeInPlace() + up.NormalizeInPlace() + Return New Matrix4x4F(right.x, up.x, vec.x, 0.0f, right.y, up.y, vec.y, 0.0f, right.z, up.z, vec.z, 0.0f, -Vector3F.Dot(right, eye), -Vector3F.Dot(up, eye), -Vector3F.Dot(vec, eye), 1.0f) + End Function + + Public Shared Function MatrixPerspectiveFovLH(ByVal fovy As Single, ByVal aspect As Single, ByVal zn As Single, ByVal zf As Single) As Matrix4x4F + Dim ret As New Matrix4x4F() + ret.M11 = 1.0f / (aspect * CSng(Math.Tan(fovy / 2))) + ret.M22 = 1.0f / CSng(Math.Tan(fovy / 2)) + ret.M33 = zf / (zf - zn) + ret.M34 = 1 + ret.M43 = (zf * zn) / (zn - zf) + ret.M44 = 0 + Return ret + End Function + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/UtilitiesLibrary/D3DUtilities/Direct3DUtilities.vbproj b/source/Samples/DirectX/VB/UtilitiesLibrary/D3DUtilities/Direct3DUtilities.vbproj new file mode 100644 index 00000000..a72ecae5 --- /dev/null +++ b/source/Samples/DirectX/VB/UtilitiesLibrary/D3DUtilities/Direct3DUtilities.vbproj @@ -0,0 +1,88 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Library + + + DirectXUtilities + v3.5 + On + Binary + Off + On + 512 + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + 3.0 + + + 3.0 + + + + 3.5 + + + + + 3.5 + + + 3.0 + + + + + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + + + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/UtilitiesLibrary/D3DUtilities/Math/Matrix.vb b/source/Samples/DirectX/VB/UtilitiesLibrary/D3DUtilities/Math/Matrix.vb new file mode 100644 index 00000000..f24e2d8b --- /dev/null +++ b/source/Samples/DirectX/VB/UtilitiesLibrary/D3DUtilities/Math/Matrix.vb @@ -0,0 +1,56 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Runtime.InteropServices +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D + +Namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + _ + Public Class MatrixMath + #Region "operator *" + + Public Shared Function VectorMultiply(ByVal a As Matrix4x4F, ByVal b As Vector4F) As Vector4F + Return New Vector4F(a.M11 * b.x + a.M12 * b.y + a.M13 * b.z + a.M14 * b.w, a.M21 * b.x + a.M22 * b.y + a.M23 * b.z + a.M24 * b.w, a.M31 * b.x + a.M32 * b.y + a.M33 * b.z + a.M34 * b.w, a.M41 * b.x + a.M42 * b.y + a.M43 * b.z + a.M44 * b.w) + End Function + #End Region + + #Region "MatrixScale" + Public Shared Function MatrixScale(ByVal x As Single, ByVal y As Single, ByVal z As Single) As Matrix4x4F + Return New Matrix4x4F(x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1) + End Function + #End Region + + #Region "MatrixTranslate" + Public Shared Function MatrixTranslate(ByVal x As Single, ByVal y As Single, ByVal z As Single) As Matrix4x4F + Return New Matrix4x4F(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, x, y, z, 1) + End Function + #End Region + + #Region "MatrixRotationX" + Public Shared Function MatrixRotationX(ByVal angle As Single) As Matrix4x4F + Dim sin As Single = CSng(Math.Sin(angle)) + Dim cos As Single = CSng(Math.Cos(angle)) + Return New Matrix4x4F(1, 0, 0, 0, 0, cos, sin, 0, 0, -sin, cos, 0, 0, 0, 0, 1) + End Function + #End Region + + #Region "MatrixRotationY" + Public Shared Function MatrixRotationY(ByVal angle As Single) As Matrix4x4F + Dim sin As Single = CSng(Math.Sin(angle)) + Dim cos As Single = CSng(Math.Cos(angle)) + Return New Matrix4x4F(cos, 0, -sin, 0, 0, 1, 0, 0, sin, 0, cos, 0, 0, 0, 0, 1) + End Function + #End Region + + #Region "MatrixRotationZ" + Public Shared Function MatrixRotationZ(ByVal angle As Single) As Matrix4x4F + Dim sin As Single = CSng(Math.Sin(angle)) + Dim cos As Single = CSng(Math.Cos(angle)) + Return New Matrix4x4F(cos, sin, 0, 0, -sin, cos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1) + End Function + #End Region + End Class + +End Namespace diff --git a/source/Samples/DirectX/VB/UtilitiesLibrary/D3DUtilities/Math/MatrixUtilities.vb b/source/Samples/DirectX/VB/UtilitiesLibrary/D3DUtilities/Math/MatrixUtilities.vb new file mode 100644 index 00000000..e2b4e03d --- /dev/null +++ b/source/Samples/DirectX/VB/UtilitiesLibrary/D3DUtilities/Math/MatrixUtilities.vb @@ -0,0 +1,97 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Media.Media3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D + + +Namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + Public Module MatrixExtensions + _ + Public Function ToMatrix4x4F(ByVal source As Matrix3D) As Matrix4x4F + Return New Matrix4x4F(CSng(source.M11), CSng(source.M12), CSng(source.M13), CSng(source.M14), CSng(source.M21), CSng(source.M22), CSng(source.M23), CSng(source.M24), CSng(source.M31), CSng(source.M32), CSng(source.M33), CSng(source.M34), CSng(source.OffsetX), CSng(source.OffsetY), CSng(source.OffsetZ), CSng(source.M44)) + End Function + + _ + Public Function ToMatrix3D(ByVal source As Matrix4x4F) As Matrix3D + Dim destination As New Matrix3D() + destination.M11 = CSng(source.M11) + destination.M12 = CSng(source.M12) + destination.M13 = CSng(source.M13) + destination.M14 = CSng(source.M14) + + destination.M21 = CSng(source.M21) + destination.M22 = CSng(source.M22) + destination.M23 = CSng(source.M23) + destination.M24 = CSng(source.M24) + + destination.M31 = CSng(source.M31) + destination.M32 = CSng(source.M32) + destination.M33 = CSng(source.M33) + destination.M34 = CSng(source.M34) + + destination.OffsetX = CSng(source.M41) + destination.OffsetY = CSng(source.M42) + destination.OffsetZ = CSng(source.M43) + destination.M44 = CSng(source.M44) + + Return destination + End Function + + #Region "PerspectiveCamera extensions" + ''' + ''' Returns the world*perspective matrix for the camera + ''' + ''' The WPF camera + ''' The aspect ratio of the device surface + ''' + _ + Public Function ToMatrix3DLH(ByVal camera As PerspectiveCamera, ByVal aspectRatio As Double) As Matrix3D + Dim tg As New Transform3DGroup() + tg.Children.Add(New MatrixTransform3D(GetLookAtMatrixLH(camera))) + tg.Children.Add(camera.Transform) + tg.Children.Add(New MatrixTransform3D(GetPerspectiveMatrixLH(camera, aspectRatio))) + Return tg.Value + End Function + + _ + Public Function ToViewLH(ByVal camera As PerspectiveCamera) As Matrix3D + Return GetLookAtMatrixLH(camera) + End Function + + _ + Public Function ToPerspectiveLH(ByVal camera As PerspectiveCamera, ByVal aspectRatio As Double) As Matrix3D + Return GetPerspectiveMatrixLH(camera, aspectRatio) + End Function + #End Region + + #Region "PerspectiveCamera implementation" + Friend Function GetPerspectiveMatrixLH(ByVal camera As PerspectiveCamera, ByVal aspectRatio As Double) As Matrix3D + Dim fov As Double = (camera.FieldOfView / 360.0) * 2.0 * Math.PI + Dim zn As Double = camera.NearPlaneDistance + Dim zf As Double = camera.FarPlaneDistance + Dim f As Double = 1.0 / Math.Tan(fov / 2.0) + Dim xScale As Double = f / aspectRatio + Dim yScale As Double = f + Dim n As Double = (1.0 / (zf - zn)) + Dim m33 As Double = zf * n + Dim m43 As Double = -zf * zn * n + + Return New Matrix3D(xScale, 0, 0, 0, 0, yScale, 0, 0, 0, 0, m33, 1, 0, 0, m43, 0) + End Function + + Friend Function GetLookAtMatrixLH(ByVal camera As PerspectiveCamera) As Matrix3D + Dim f As New Vector3D(camera.Position.X - camera.LookDirection.X, camera.Position.Y - camera.LookDirection.Y, camera.Position.Z - camera.LookDirection.Z) + f.Normalize() + Dim vUpActual As Vector3D = camera.UpDirection + vUpActual.Normalize() + Dim s As Vector3D = Vector3D.CrossProduct(f, vUpActual) + Dim u As Vector3D = Vector3D.CrossProduct(s, f) + + Return New Matrix3D(s.X, u.X, -f.X, 0, s.Y, u.Y, -f.Y, 0, s.Z, u.Z, -f.Z, 0, -camera.Position.X, -camera.Position.Y, -camera.Position.Z, 1) + End Function + #End Region + End Module +End Namespace diff --git a/source/Samples/DirectX/VB/UtilitiesLibrary/D3DUtilities/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/UtilitiesLibrary/D3DUtilities/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..db8122d9 --- /dev/null +++ b/source/Samples/DirectX/VB/UtilitiesLibrary/D3DUtilities/My Project/AssemblyInfo.vb @@ -0,0 +1,40 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/UtilitiesLibrary/D3DUtilities/Texture/TextureLoader.vb b/source/Samples/DirectX/VB/UtilitiesLibrary/D3DUtilities/Texture/TextureLoader.vb new file mode 100644 index 00000000..91adc3cf --- /dev/null +++ b/source/Samples/DirectX/VB/UtilitiesLibrary/D3DUtilities/Texture/TextureLoader.vb @@ -0,0 +1,86 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.IO +Imports System.Runtime.InteropServices + + +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports Microsoft.WindowsAPICodePack.DirectX.WindowsImagingComponent + +Namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + Public Class TextureLoader + ''' + ''' Creates a ShaderResourceView from a bitmap in a Stream. + ''' + ''' The Direct3D device that will own the ShaderResourceView + ''' Any Windows Imaging Component decodable image + ''' + Public Shared Function LoadTexture(ByVal device As D3DDevice, ByVal stream As Stream) As ShaderResourceView + Dim factory As ImagingFactory + + factory = ImagingFactory.Create() + + Dim bitmapDecoder As BitmapDecoder = factory.CreateDecoderFromStream(stream, DecodeMetadataCacheOption.OnDemand) + + If bitmapDecoder.FrameCount = 0 Then + Throw New ArgumentException("Image file successfully loaded, but it has no image frames.") + End If + + Dim bitmapFrameDecode As BitmapFrameDecode = bitmapDecoder.GetFrame(0) + Dim bitmapSource As BitmapSource = bitmapFrameDecode.ToBitmapSource() + + ' create texture description + Dim textureDescription As New Texture2DDescription() With _ + { _ + .Width = bitmapSource.Size.Width, _ + .Height = bitmapSource.Size.Height, _ + .MipLevels = 1, _ + .ArraySize = 1, _ + .Format = Format.R8G8B8A8UNorm, _ + .SampleDescription = New SampleDescription() With _ + { _ + .Count = 1, _ + .Quality = 0 _ + }, _ + .Usage = Usage.Dynamic, _ + .BindingOptions = BindingOptions.ShaderResource, _ + .CpuAccessOptions = CpuAccessOptions.Write, _ + .MiscellaneousResourceOptions = MiscellaneousResourceOptions.None _ + } + + ' create texture + Dim texture As Texture2D = device.CreateTexture2D(textureDescription) + + ' Create a format converter + Dim converter As FormatConverter = factory.CreateFormatConverter() + converter.Initialize(bitmapSource, PixelFormats.Prgba32Bpp, BitmapDitherType.None, BitmapPaletteType.Custom) + + ' get bitmap data + Dim buffer() As Byte = converter.CopyPixels() + + ' Copy bitmap data to texture + Dim texmap As MappedTexture2D = texture.Map(0, Map.WriteDiscard, Direct3D10.MapOptions.None) + Marshal.Copy(buffer, 0, texmap.Data, buffer.Length) + texture.Unmap(0) + + ' create shader resource view description + Dim srvDescription As New ShaderResourceViewDescription() With _ + { _ + .Format = textureDescription.Format, _ + .ViewDimension = ShaderResourceViewDimension.Texture2D, _ + .Texture2D = New Texture2DShaderResourceView() With _ + { _ + .MipLevels = textureDescription.MipLevels, _ + .MostDetailedMip = 0 _ + } _ + } + + ' create shader resource view from texture + Return device.CreateShaderResourceView(texture, srvDescription) + End Function + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/AirplaneMesh.vb b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/AirplaneMesh.vb new file mode 100644 index 00000000..af3c8309 --- /dev/null +++ b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/AirplaneMesh.vb @@ -0,0 +1,38 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Media.Media3D + +Namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + ''' + ''' A specialization of an XMesh that rotates the propeller of "airplane 2.x". + ''' + Public Class AirplaneXMesh + Inherits XMesh + Private propRotation As Double = 0 + Private hubOffsetX As Double =.05 + Private hubOffsetY As Double =.43 + Private propZOffset As Double = -3.7 + Private propAngle As Double = 20 + + Protected Overrides Function PartAnimation(ByVal partName As String) As Matrix3D + If partName = "propeller" Then + Dim group As New Transform3DGroup() + + group.Children.Add(New TranslateTransform3D(-hubOffsetX, -hubOffsetY, -propZOffset)) + group.Children.Add(New RotateTransform3D(New AxisAngleRotation3D(New Vector3D(1, 0, 0), -propAngle), 0, 0, 0)) + group.Children.Add(New RotateTransform3D(New AxisAngleRotation3D(New Vector3D(0, 0, 1), propRotation), 0, 0, 0)) + group.Children.Add(New RotateTransform3D(New AxisAngleRotation3D(New Vector3D(1, 0, 0), +propAngle), 0, 0, 0)) + group.Children.Add(New TranslateTransform3D(+hubOffsetX, +hubOffsetY, +propZOffset)) + + propRotation += 11 + + Return group.Value + Else + Return Matrix3D.Identity + End If + End Function + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/MeshLoader.vbproj b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/MeshLoader.vbproj new file mode 100644 index 00000000..07cf808a --- /dev/null +++ b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/MeshLoader.vbproj @@ -0,0 +1,98 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {B28ADA8B-BD7E-4C11-8298-C39F7C456365} + Library + + + MeshLoader + v3.5 + On + Binary + Off + On + 512 + + + + + + + true + full + false + bin\Debug\ + true + true + prompt + x86 + + + pdbonly + true + bin\Release\ + false + true + prompt + x86 + + + + 3.0 + + + 3.0 + + + + 3.5 + + + + 3.0 + + + + + + + + + + + + + + + + + + {446B1E21-65A1-4F56-AA2C-D2E24058B2B8} + Microsoft.WindowsAPICodePack.DirectX + + + {5D4F4B06-1572-4E57-9007-93ECA5A07A11} + Controls + + + {453FF234-24EC-4CC3-83DA-6D6C54388899} + Microsoft.WindowsAPICodePack.DirectX.Direct3DX10 + + + {8A152DCF-12AE-492B-9F24-060B90B2DDD0} + Direct3DUtilities + + + + + \ No newline at end of file diff --git a/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/My Project/AssemblyInfo.vb b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..226b4e2b --- /dev/null +++ b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/My Project/AssemblyInfo.vb @@ -0,0 +1,39 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/Texturizer.vb b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/Texturizer.vb new file mode 100644 index 00000000..c6d8eacb --- /dev/null +++ b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/Texturizer.vb @@ -0,0 +1,215 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Runtime.InteropServices +Imports System.IO + +Imports Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities +Imports Microsoft.WindowsAPICodePack.DirectX +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports System.Windows.Media.Media3D + + +Namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + ''' + ''' A Mesh that allows for changing textures within the scene + ''' + Public Class Texturizer + Inherits XMesh + ''' + ''' If true shows one texture at a time + ''' + Public Property ShowOneTexture() As Boolean + Get + Return showOneTexture_Renamed + End Get + Set(ByVal value As Boolean) + showOneTexture_Renamed = value + End Set + End Property + Private showOneTexture_Renamed As Boolean = True + + ''' + ''' This method sets which part to texture during rendering. + ''' + ''' + Public Sub PartToTexture(ByVal partName As String) + If String.IsNullOrEmpty(partName) Then + Throw New ArgumentException("Must be a non-empty string", "partName") + End If + + partEmphasis.Clear() + + For Each part In rootParts + If BuildEmphasisDictionary(part, partName, False) Then + Exit For + End If + Next part + End Sub + + Private partEmphasis As New HashSet(Of Part) + + ''' + ''' Builds a dictionary of parts to be emphasized if displaying wireframe. + ''' + ''' + ''' During rendering, as the mesh tree is traversed each part is checked to + ''' see whether it should be displayed as wireframe or not. A part in the dictionary + ''' built by this method will be rendered as a solid part, otherwise the part + ''' will be rendered as wireframe. + ''' This method traverses the mesh tree looking for the named part. Once that + ''' named part is found, that part and all its children are added to the dictionary. + ''' The traversal is terminated once the named part has been found and all of its + ''' children have also been traversed (and added to the dictionary). + ''' + ''' The current part to inspect + ''' The name of the root part to emphasize during rendering + ''' True if the parent of this part will be emphasized, false otherwise + ''' True if this part has been emphasized, false otherwise + Private Function BuildEmphasisDictionary(ByVal part As Part, ByVal partName As String, ByVal fEmphasizeParent As Boolean) As Boolean + If fEmphasizeParent OrElse (Not String.IsNullOrEmpty(part.name) AndAlso part.name = partName) Then + partEmphasis.Add(part) + fEmphasizeParent = True + End If + + For Each childPart In part.parts + If BuildEmphasisDictionary(childPart, partName, fEmphasizeParent) And Not fEmphasizeParent Then + Exit For + End If + Next childPart + + Return fEmphasizeParent + End Function + + ''' + ''' Clears the alternate texture list (restoring the model's textures) + ''' + Public Sub RevertTextures() + alternateTextures.Clear() + End Sub + + ''' + ''' Gets a list of the names of the parts in the mesh + ''' + ''' + Public Function GetParts() As List(Of String) + Dim partNames As New List(Of String)() + + If rootParts IsNot Nothing Then + For Each part In rootParts + GetParts(part, partNames) + Next + End If + + Return partNames + End Function + + Private Sub GetParts(ByVal part As Part, ByVal names As List(Of String)) + If Not String.IsNullOrEmpty(part.name) Then + names.Add(part.name) + End If + + For Each childPart In part.parts + GetParts(childPart, names) + Next childPart + End Sub + + + ''' + ''' Creates an alternate texture for a part + ''' + ''' The name of the part to create the texture for. + ''' The path to the image to be used for the texture. + Public Sub SwapTexture(ByVal partName As String, ByVal imagePath As String) + If partName IsNot Nothing Then + If File.Exists(imagePath) Then + Dim stream As FileStream = File.OpenRead(imagePath) + + Try + Dim srv As ShaderResourceView = TextureLoader.LoadTexture(Me.manager.device, stream) + If srv IsNot Nothing Then + alternateTextures(partName) = srv + End If + Catch e1 As COMException + System.Windows.MessageBox.Show("Not a valid image.") + End Try + + Else + alternateTextures(partName) = Nothing + End If + End If + End Sub + Private alternateTextures As New Dictionary(Of String, ShaderResourceView)() + + Private solidRasterizerState As RasterizerState + Private wireframeRasterizerState As RasterizerState + Private currentRasterizerState As RasterizerState + + Friend Overrides Function UpdateRasterizerStateForPart(ByVal part As Part) As ShaderResourceView + Dim state As RasterizerState = _ + If(ShowOneTexture And Not partEmphasis.Contains(part), wireframeRasterizerState, solidRasterizerState) + + If state IsNot currentRasterizerState Then + currentRasterizerState = state + Me.manager.device.RS.State = state + End If + + Dim textureOverride As ShaderResourceView + + textureOverride = Nothing + If Not alternateTextures.TryGetValue(part.name, textureOverride) Then + textureOverride = Nothing + End If + + Return textureOverride + End Function + + ''' + ''' Renders the mesh with the specified transformation. This alternate render method + ''' supplements the base class rendering to provide part-by-part texturing support. + ''' + ''' + Public Overloads Sub Render(ByVal modelTransform As Matrix3D) + ' setup rasterization + Dim rasterizerDesc As New RasterizerDescription With _ + { _ + .FillMode = FillMode.Solid, _ + .CullMode = CullMode.Back, _ + .FrontCounterclockwise = False, _ + .DepthBias = 0, _ + .DepthBiasClamp = 0, _ + .SlopeScaledDepthBias = 0, _ + .DepthClipEnable = True, _ + .ScissorEnable = False, _ + .MultisampleEnable = True, _ + .AntiAliasedLineEnable = True _ + } + + Try + solidRasterizerState = Me.manager.device.CreateRasterizerState(rasterizerDesc) + + rasterizerDesc.FillMode = FillMode.Wireframe + wireframeRasterizerState = Me.manager.device.CreateRasterizerState(rasterizerDesc) + + MyBase.Render(modelTransform.ToMatrix4x4F()) + Finally + If solidRasterizerState IsNot Nothing Then + solidRasterizerState.Dispose() + solidRasterizerState = Nothing + End If + + If wireframeRasterizerState IsNot Nothing Then + wireframeRasterizerState.Dispose() + wireframeRasterizerState = Nothing + End If + + currentRasterizerState = Nothing + End Try + End Sub + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/XMesh.fx b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/XMesh.fx new file mode 100644 index 00000000..a28d95b2 --- /dev/null +++ b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/XMesh.fx @@ -0,0 +1,165 @@ +//-------------------------------------------------------------------------------------- +// File: SimpleSample.fx +// +// The effect file for the SimpleSample sample. +// +// Copyright (c) Microsoft Corporation. All rights reserved. +//-------------------------------------------------------------------------------------- + + +//-------------------------------------------------------------------------------------- +// Global variables +//-------------------------------------------------------------------------------------- +float3 LightDir = float3(0,0.707,-0.707); // Light's direction in world space +float4 MaterialColor; +matrix World; +matrix View; +matrix Projection; +float Brightness = 1.5; + +//----------------------------------------------------------------------------------------- +// Textures and Samplers +//----------------------------------------------------------------------------------------- +Texture2D tex2D; +SamplerState linearSampler +{ + Filter = MIN_MAG_MIP_LINEAR; + AddressU = Wrap; + AddressV = Wrap; +}; + +//-------------------------------------------------------------------------------------- +// shader input/output structure +//-------------------------------------------------------------------------------------- +struct VS_INPUT +{ + float4 Position : POSITION; // vertex position + float4 Normal : NORMAL; // this normal comes in per-vertex + float4 Color : COLOR; + float2 TextureUV : TEXCOORD; // vertex texture coords +}; + + +struct GSPS_INPUT +{ + float4 Position : SV_POSITION; + float4 Normal : NORMAL; + float4 Color : COLOR; + float2 TextureUV : TEXCOORD0; // vertex texture coords +}; + + +//-------------------------------------------------------------------------------------- +// Vertex Shaders +//-------------------------------------------------------------------------------------- +GSPS_INPUT VS_textured( VS_INPUT input ) +{ + GSPS_INPUT output = (GSPS_INPUT)0; + float3 vNormalWorldSpace; + + output.Position = mul( input.Position, World ); + output.Position = mul( output.Position, View ); + output.Position = mul( output.Position, Projection ); + + // Calc diffuse lighting color + vNormalWorldSpace = normalize(mul(input.Normal, World)); + output.Color.rgb = max(0.3,dot(vNormalWorldSpace, LightDir)).rrr * Brightness; + output.Color.a = 1.0f; + + output.TextureUV = input.TextureUV; + + return output; +} + +GSPS_INPUT VS_vertexColor( VS_INPUT input ) +{ + GSPS_INPUT output = (GSPS_INPUT)0; + + output.Position = mul( input.Position, World ); + output.Position = mul( output.Position, View ); + output.Position = mul( output.Position, Projection ); + + output.Color = input.Color * Brightness; + + output.TextureUV = input.TextureUV; + + return output; +} + + +//-------------------------------------------------------------------------------------- +// Pixel Shaders +//-------------------------------------------------------------------------------------- +float4 PS_textured( GSPS_INPUT input ) : SV_Target +{ + return tex2D.Sample( linearSampler, input.TextureUV ) * input.Color; +} + +float4 PS_vertexColor( GSPS_INPUT input ) : SV_Target +{ + return input.Color; +} + +float4 PS_materialColor( GSPS_INPUT input ) : SV_Target +{ + return MaterialColor * Brightness / 2.0; +} + + +//-------------------------------------------------------------------------------------- +// Geometry Shader +//-------------------------------------------------------------------------------------- +[maxvertexcount(9)] +void GS( triangle GSPS_INPUT input[3], inout TriangleStream TriStream ) +{ + GSPS_INPUT output; + + for( int t=0; t < 3; t++ ) + { + for( int v = 0; v < 3; v++ ) + { + output.Position = input[v].Position; + output.Position.w = output.Position.w + (10 * t); + output.Position.z = output.Position.z + (10 * t); + + output.Normal = input[v].Normal; + output.Color = input[v].Color; + output.TextureUV = input[v].TextureUV; + TriStream.Append( output ); + } + TriStream.RestartStrip(); + } +} + +//-------------------------------------------------------------------------------------- +// Techniques +//-------------------------------------------------------------------------------------- +technique10 RenderTextured +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS_textured() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS_textured() ) ); + } +} + +technique10 RenderVertexColor +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS_vertexColor() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS_vertexColor() ) ); + } +} + +technique10 RenderMaterialColor +{ + pass P0 + { + SetVertexShader( CompileShader( vs_4_0, VS_textured() ) ); + SetGeometryShader( NULL ); + SetPixelShader( CompileShader( ps_4_0, PS_materialColor() ) ); + } +} diff --git a/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/XMesh.fxo b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/XMesh.fxo new file mode 100644 index 00000000..9f863cfa Binary files /dev/null and b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/XMesh.fxo differ diff --git a/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/XMesh.vb b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/XMesh.vb new file mode 100644 index 00000000..266188db --- /dev/null +++ b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/XMesh.vb @@ -0,0 +1,248 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.IO +Imports Microsoft.WindowsAPICodePack.DirectX +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports System.Windows.Media.Media3D +Imports System.Runtime.InteropServices + +Namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + ''' + ''' + ''' + Public Class XMesh + Implements IDisposable + #Region "public methods" + ''' + ''' Renders the mesh with the specified transformation + ''' + ''' + Public Sub Render(ByVal modelTransform As Matrix4x4F) + ' setup rasterization + Dim rDescription As New RasterizerDescription() With _ + { _ + .FillMode = If(wireFrame, FillMode.Wireframe, FillMode.Solid), _ + .CullMode = CullMode.Back, _ + .FrontCounterClockwise = False, _ + .DepthBias = 0, _ + .DepthBiasClamp = 0, _ + .SlopeScaledDepthBias = 0, _ + .DepthClipEnable = True, _ + .ScissorEnable = False, _ + .MultisampleEnable = True, _ + .AntialiasedLineEnable = True _ + } + + Using rState As RasterizerState = Me.manager.device.CreateRasterizerState(rDescription) + Me.manager.device.RS.State = rState + + Me.manager.brightnessVariable.AsSingle = Me.lightIntensity_Renamed + + If rootParts IsNot Nothing Then + Dim transform As Matrix3D = modelTransform.ToMatrix3D() + + For Each part As Part In rootParts + RenderPart(part, transform, Nothing) + Next + End If + + ' Note: see comment regarding input layout in RenderPart() + ' method; the same thing applies to the render state of the + ' rasterizer stage of the pipeline. + Me.manager.device.RS.State = Nothing + End Using + End Sub + #End Region + + #Region "public properties" + ''' + ''' Displays the unshaded wireframe if true + ''' + Public Property ShowWireFrame() As Boolean + Get + Return wireFrame + End Get + Set(ByVal value As Boolean) + wireFrame = value + End Set + End Property + Private wireFrame As Boolean = False + + ''' + ''' Sets the intensity of the light used in rendering. + ''' + Public Property LightIntensity() As Single + Get + Return lightIntensity_Renamed + End Get + Set(ByVal value As Single) + lightIntensity_Renamed = value + End Set + End Property + Private lightIntensity_Renamed As Single = 1.0F + #End Region + + #Region "virtual methods" + Protected Overridable Function PartAnimation(ByVal partName As String) As Matrix3D + Return Matrix3D.Identity + End Function + + Friend Overridable Function UpdateRasterizerStateForPart(ByVal part As Part) As ShaderResourceView + ' Empty base implementation + Return Nothing + End Function +#End Region + +#Region "implementation" + Friend Sub New() + End Sub + + Friend Sub Load(ByVal path As String, ByVal manager As XMeshManager) + Me.manager = manager + Dim loader As New XMeshTextLoader(Me.manager.device) + rootParts = loader.XMeshFromFile(path) + End Sub + + Private Sub RenderPart(ByVal part As Part, ByVal parentMatrix As Matrix3D, ByVal parentTextureOverride As ShaderResourceView) + ' set part transform + Dim partGroup As New Transform3DGroup() + partGroup.Children.Add(New MatrixTransform3D(PartAnimation(part.name))) + partGroup.Children.Add(New MatrixTransform3D(part.partTransform.ToMatrix3D())) + partGroup.Children.Add(New MatrixTransform3D(parentMatrix)) + + parentMatrix = partGroup.Value + + Dim textureOverride As ShaderResourceView = UpdateRasterizerStateForPart(part) + + If textureOverride Is Nothing Then + textureOverride = parentTextureOverride + Else + parentTextureOverride = textureOverride + End If + + If part.vertexBuffer IsNot Nothing Then + Dim technique As EffectTechnique = Nothing + + If textureOverride IsNot Nothing Then + technique = Me.manager.techniqueRenderTexture + Me.manager.diffuseVariable.Resource = textureOverride + ElseIf part.material Is Nothing Then + technique = Me.manager.techniqueRenderVertexColor + Else + If part.material.textureResource IsNot Nothing Then + technique = Me.manager.techniqueRenderTexture + Me.manager.diffuseVariable.Resource = part.material.textureResource + Else + technique = Me.manager.techniqueRenderMaterialColor + Me.manager.materialColorVariable.FloatVector = part.material.materialColor + End If + End If + + Me.manager.worldVariable.Matrix = parentMatrix.ToMatrix4x4F() + + ' set up vertex buffer and index buffer + Dim stride As UInteger = CType(Marshal.SizeOf(GetType(XMeshVertex)), UInteger) + Dim offset As UInteger = 0 + Me.manager.device.IA.SetVertexBuffers(0, New D3DBuffer() _ + {part.vertexBuffer}, _ + New UInteger() {stride}, _ + New UInteger() {offset}) + + ' Set primitive topology + Me.manager.device.IA.PrimitiveTopology = PrimitiveTopology.TriangleList + + Dim techDesc As TechniqueDescription = technique.Description + For p As UInteger = 0 To CType(techDesc.Passes - 1, UInteger) + technique.GetPassByIndex(p).Apply() + Dim passDescription As PassDescription = technique.GetPassByIndex(p).Description + + Using inputLayout As InputLayout = Me.manager.device.CreateInputLayout( _ + part.dataDescription, _ + passDescription.InputAssemblerInputSignature, _ + passDescription.InputAssemblerInputSignatureSize) + + ' set vertex layout + Me.manager.device.IA.InputLayout = inputLayout + + ' draw part + Me.manager.device.Draw(CType(part.vertexCount, UInteger), 0) + + ' Note: In Direct3D 10, the device will not retain a reference + ' to the input layout, so it's important to reset the device's + ' input layout before disposing the object. Were this code + ' using Direct3D 11, the device would in fact retain a reference + ' and so it would be safe to go ahead and dispose the input + ' layout without resetting it; in that case, there could be just + ' a single assignment to null outside the 'for' loop, or even + ' no assignment at all. + Me.manager.device.IA.InputLayout = Nothing + End Using + Next p + End If + + For Each childPart In part.parts + RenderPart(childPart, parentMatrix, parentTextureOverride) + Next childPart + End Sub + + + ''' + ''' The root part of this mesh + ''' + Friend rootParts As IEnumerable(Of Part) + + ''' + ''' The object that manages the XMeshes + ''' + Friend manager As XMeshManager + +#End Region + +#Region "IDisposable Members" + Public Sub Dispose() Implements IDisposable.Dispose + Dispose(True) + GC.SuppressFinalize(Me) + End Sub + + Private disposed As Boolean + + Private Sub DisposePart(ByVal part As Part) + If part.vertexBuffer IsNot Nothing Then + part.vertexBuffer.Dispose() + part.vertexBuffer = Nothing + End If + If (part.material IsNot Nothing) And (part.material.textureResource IsNot Nothing) Then + part.material.textureResource.Dispose() + part.material.textureResource = Nothing + End If + + For Each childPart In part.parts + DisposePart(childPart) + Next childPart + + part.parts = Nothing + End Sub + + ''' + ''' Releases resources no longer needed. + ''' + Protected Overridable Sub Dispose(ByVal disposing As Boolean) + If Not disposed And rootParts IsNot Nothing Then + For Each part In rootParts + DisposePart(part) + Next part + rootParts = Nothing + disposed = True + End If + End Sub +#End Region ' Disposable Members + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/XMeshLoader.XDataObject.vb b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/XMeshLoader.XDataObject.vb new file mode 100644 index 00000000..94075989 --- /dev/null +++ b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/XMeshLoader.XDataObject.vb @@ -0,0 +1,541 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports System +Imports System.Collections.Generic +Imports System.Collections.ObjectModel +Imports System.Diagnostics +Imports System.Globalization +Imports System.IO +Imports System.Linq +Imports System.Text +Imports System.Text.RegularExpressions + + +Namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + ' XDataObject functionality is only needed by the mesh-loading + ' code, thus private to the XMeshTextLoader class. + Partial Friend Class XMeshTextLoader + ''' + ''' Helper method to retrieve an immediate child of the + ''' given with the given named type. + ''' + ''' The instance the children of which to search + ''' The template name of the .x file type to retrieve + ''' The one child of the given type if present, null if no such child is present. + ''' There are more than one child of the given type. + Private Shared Function GetSingleChild(ByVal dataObject As IXDataObject, ByVal type As String) As IXDataObject + Return dataObject.Children.SingleOrDefault(Function(obj) obj.DataObjectType = type) + End Function + + ''' + ''' The base interface type for all data objects found in the .x file + ''' + Private Interface IXDataObject + ''' + ''' Returns true if the data object corresponds to some specific object that can + ''' be represented visually. For example, a frame or a mesh. + ''' Returns false if the data object is simply used as a data member of some other data object. + ''' For example, the vertices or materials for a mesh. + ''' + ReadOnly Property IsVisualObject() As Boolean + + ''' + ''' The template name of the data object's type. + ''' + ReadOnly Property DataObjectType() As String + + ''' + ''' The name of the data object itself (may be empty). + ''' + ReadOnly Property Name() As String + + ''' + ''' The text contained within the body of the data object, once + ''' all known data members of the data object have been parsed and + ''' removed from the body. + ''' + ReadOnly Property Body() As String + + ''' + ''' The immediate children of the data object. + ''' + ReadOnly Property Children() As IEnumerable(Of IXDataObject) + End Interface + + ''' + ''' Indicates the restriction type of an . A data object + ''' with the restriction can contain any data object of any type + ''' as children. A data object with the restriction can contain + ''' only data objects of the types listed in the . + ''' A data object with the restriction may not contain any + ''' child data objects. + ''' + Private Enum TemplateRestriction + Open + Restricted + Closed + End Enum + + ''' + ''' A data object having the type "template". + ''' + Private Interface IXTemplateObject + Inherits IXDataObject + + ReadOnly Property Restrictions() As IEnumerable(Of IXTemplateObject) + ReadOnly Property Restricted() As TemplateRestriction + End Interface + + ''' + ''' A factory class used to create instances from + ''' text input. + ''' + Private Class XDataObjectFactory + ''' + ''' Creates an enumeration of data objects represented by the given text. + ''' + ''' The text to parse. After the method returns, this will reference a new string containing all the text that was not parsed. + ''' An enumeration of instances represented by the text. + Public Shared Function ExtractDataObjects(ByRef inputText As String) As IEnumerable(Of IXDataObject) + Return New XDataObjectFactory().ExtractDataObjectsImpl(inputText) + End Function + + Private Sub New() + + End Sub + + +#Region "Regex initialization" + + Private Const defaultOptions As RegexOptions = RegexOptions.IgnorePatternWhitespace Or RegexOptions.Compiled + + ''' + ''' An expression describing the basic structure of an .x file data object + ''' + Private Shared dataObjectRegex As New Regex( _ + " (?[\w_]+)" & _ + "(:?\s+(?[^\s{]+))?\s*" & _ + "{(?" & _ + "(?>" & _ + "[^{}]+|" & _ + "{(?)|" & _ + "}(?<-bracket>)" & _ + ")*" & _ + "(?(bracket)(?!))" & _ + ")}", defaultOptions) + + ''' + ''' An expression describing a reference to another data object, as found within the body of an .x file data object. + ''' + Private Shared bodyReferenceRegex As New Regex( _ + " {\s*(?[\w_]+)?\s*(?\<\w{8}-\w{4}-\w{4}-\w{4}-\w{12}\>)?\s*}", defaultOptions) + + ''' + ''' An expression describing a UUID declaration of a data object defined in an .x file. + ''' + Private Shared uuidDeclarationRegex As New Regex( _ + " (?\<\w{8}-\w{4}-\w{4}-\w{4}-\w{12}\>)", defaultOptions) + + ''' + ''' An expression describing the restrictions for a template data object defined in an .x file. + ''' + Private Shared restrictionsDeclarationRegex As New Regex( _ + " (?<=([^\w\s_]+\s*|^\s*))" & _ + "(?\[\s*" & _ + "(" & _ + "(?\.\.\.)|" & _ + "(?(?[\w_]+)(\s*(?\<\w{8}-\w{4}-\w{4}-\w{4}-\w{12}\>))?)" & _ + "(\s*,\s*" & _ + "(?(?[\w_]+)(\s*(?\<\w{8}-\w{4}-\w{4}-\w{4}-\w{12}\>))?)" & _ + ")*" & _ + ")" & _ + "\s*\])", defaultOptions Or RegexOptions.ExplicitCapture) + + ''' + ''' An expression describing an individual restriction declaration within a template object defined in an .x file. + ''' + Private Shared restrictionDeclarationRegex As New Regex( _ + " (?[\w_]+)(\s*(?\<\w{8}-\w{4}-\w{4}-\w{4}-\w{12}\>))?", defaultOptions) + +#End Region ' Regex initialization + + ''' + ''' Implementation of + ''' + ''' Private implementation ensures that only the can create this. + Private Class XDataObject + Implements IXDataObject + + Public Overridable ReadOnly Property IsVisualObject() As Boolean Implements IXDataObject.IsVisualObject + Get + Return DataObjectType = "Frame" Or DataObjectType = "Mesh" + End Get + End Property + + Private _DataObjectType As String + Public ReadOnly Property DataObjectType() As String Implements IXDataObject.DataObjectType + Get + Return _DataObjectType + End Get + End Property + + Private _Name As String + Public ReadOnly Property Name() As String Implements IXDataObject.Name + Get + Return _Name + End Get + End Property + + Private _Body As String + Public ReadOnly Property Body() As String Implements IXDataObject.Body + Get + Return _Body + End Get + End Property + + Private _Children As IEnumerable(Of IXDataObject) + Public ReadOnly Property Children() As IEnumerable(Of IXDataObject) Implements IXDataObject.Children + Get + Return _Children + End Get + End Property + + ''' + ''' Constructor. + ''' + ''' The template name of the type of the data object + ''' The name of the data object + ''' The remaining unparsed body text of the data object + ''' The factory used to create this object + ''' Thrown if the or arguments are null. + ''' The factory passed in is used to further parse the object's body text, including + ''' resolving references to previously defined objects and templates. + Public Sub New(ByVal type As String, ByVal name As String, ByVal body As String, ByVal factory As XDataObjectFactory) + If type Is Nothing Then + Throw New ArgumentNullException("type") + End If + + If factory Is Nothing Then + Throw New ArgumentNullException("factory") + End If + + _DataObjectType = type + _Name = name + _Children = factory.ExtractDataObjectsImpl(body) + _Body = body + End Sub + End Class + + ''' + ''' Implementation of + ''' + ''' Private implementation ensures that only the can create this. + Private Class XTemplateObject + Inherits XDataObject + Implements IXTemplateObject + + Public Overrides ReadOnly Property IsVisualObject() As Boolean + Get + Return False + End Get + End Property + + Private _Restrictions As IEnumerable(Of IXTemplateObject) + Public ReadOnly Property Restrictions() As IEnumerable(Of IXTemplateObject) Implements IXTemplateObject.Restrictions + Get + Return _Restrictions + End Get + End Property + + Private _Restricted As TemplateRestriction + Public ReadOnly Property Restricted() As TemplateRestriction Implements IXTemplateObject.Restricted + Get + Return _Restricted + End Get + End Property + + ''' + ''' Constructor for template objects having the restriction. + ''' + ''' The name of the template object + ''' The remaining unparsed body of the template object + ''' The factory used to create this object + ''' A list of template objects representing the only valid types of data object children for this type + ''' + Public Sub New(ByVal name As String, ByVal body As String, ByVal factory As XDataObjectFactory, ByVal restrictions As IList(Of IXTemplateObject)) + MyBase.New("template", name, body, factory) + + _Restrictions = New ReadOnlyCollection(Of IXTemplateObject)(restrictions) + _Restricted = TemplateRestriction.Restricted + End Sub + + ''' + ''' Constructor for template objects having the or restriction. + ''' + ''' The name of the template object + ''' The remaining unparsed body of the template object + ''' The factory used to create this object + ''' The type of restriction of the template object + ''' Thrown if the restriction given is not either or . + ''' + Public Sub New(ByVal name As String, ByVal body As String, ByVal factory As XDataObjectFactory, ByVal restricted As TemplateRestriction) + MyBase.New("template", name, body, factory) + + If restricted = TemplateRestriction.Restricted Then + Throw New ArgumentException("A restricted template must have actual restrictions. Without any, the restricted state may be only 'Open' or 'Closed'") + End If + + _Restrictions = Nothing + _Restricted = restricted + End Sub + End Class + + Private objectDictionary As Dictionary(Of String, XDataObject) = New Dictionary(Of String, XDataObject)() + + ''' + ''' The actual implementation to extract data objects from input text complying with the .x file format. + ''' + ''' The text to parse + ''' An enumeration of instances represented within the .x file text. + Private Function ExtractDataObjectsImpl(ByRef inputText As String) As IEnumerable(Of IXDataObject) + Dim dataObjects As IEnumerable(Of IXDataObject) = _ + ExtractByRegex(Of IXDataObject)(inputText, dataObjectRegex, AddressOf ExtractDataObject) + + Dim dataReferences As IEnumerable(Of IXDataObject) = _ + ExtractByRegex(Of IXDataObject)(inputText, bodyReferenceRegex, AddressOf ExtractReference) + + Return dataObjects.Concat(dataReferences) + End Function + + ''' + ''' Given a regex match for a data object, create a new instance + ''' for the text matched. + ''' + ''' The match groups for the matched regex expression + ''' A new instance based on the given regex match + Private Function ExtractDataObject(ByVal groups As GroupCollection) As XDataObject + Dim typeName As String = groups("type").Value + Dim name As String = groups("name").Value + Dim body As String = groups("body").Value + Dim uuid As String = Nothing + + Dim dataObject As XDataObject + + If typeName = "template" Then + dataObject = CreateTemplateObject(name, body, uuid) + Else + uuid = ExtractUuid(body) + dataObject = New XDataObject(typeName, name, body, Me) + End If + + RegisterObject(uuid, dataObject) + + Return dataObject + End Function + + Private Function ExtractReference(ByVal groups As GroupCollection) As XDataObject + If groups("uuid").Success Then + Return objectDictionary(groups("uuid").Value) + End If + + Return objectDictionary(groups("name").Value) + End Function + + ''' + ''' Creates an for the given "template" data object + ''' type. Parses the UUID, and also the restriction list from the body, matching + ''' restriction references to known template objects when possible. + ''' + ''' The name of the template + ''' The remaining unparsed body text for the template + ''' Receives the declared UUID for the new template object + ''' A new instance + Private Function CreateTemplateObject(ByVal name As String, ByRef body As String, ByRef uuid As String) As XTemplateObject + Dim restrictEnums As IEnumerable(Of IEnumerable(Of IXTemplateObject)) = _ + ExtractByRegex(Of IEnumerable(Of IXTemplateObject))( _ + body, restrictionsDeclarationRegex, AddressOf ExtractRestriction) + Dim restrictList As List(Of IXTemplateObject) = New List(Of IXTemplateObject)() + Dim isOpen As Boolean = False + + For Each restrictEnum As IEnumerable(Of IXTemplateObject) In restrictEnums + For Each restrictObject As IXTemplateObject In restrictEnum + If restrictObject Is Nothing Then + isOpen = True + ElseIf Not isOpen Then + restrictList.Add(restrictObject) + Else + Throw New InvalidDataException( _ + String.Format(CultureInfo.InvariantCulture, _ + "Template ""{0}"" mixes open restriction with non-open.", _ + name)) + End If + Next + Next + + uuid = ExtractUuid(body) + + Return If(restrictList.Count > 0, _ + New XTemplateObject(name, body, Me, restrictList), _ + New XTemplateObject(name, body, Me, _ + If(isOpen, TemplateRestriction.Open, TemplateRestriction.Closed))) + End Function + + ''' + ''' For a given restriction declaration, extracts the given templates + ''' referenced within the declaration, or null if the declaration is of + ''' an open restriction. + ''' + ''' The match groups for the matched regex expression + ''' The enumeration of represented within the single restriction declaration. + ''' The .x file format should not include multiple restriction declarations for + ''' a given template object. However, it is theoretically legal to have multiple declarations + ''' as long as they don't conflict (i.e. they either all are for an open restriction, or they + ''' all list templates for a restricted restriction). This parser will attempt to resolve + ''' such theoretically legal multiple declarations if present. + Private Function ExtractRestriction(ByVal groups As GroupCollection) As IEnumerable(Of IXTemplateObject) + Dim returnEnumeration As List(Of IXTemplateObject) = New List(Of IXTemplateObject)() + + If groups("open").Success Then + returnEnumeration.Add(Nothing) + Else + For Each reference As Capture In groups("ref").Captures + Dim restrictMatch As Match = restrictionDeclarationRegex.Match(reference.Value) + Dim dataObject As XDataObject + + If restrictMatch.Groups("uuid").Success Then + dataObject = RetrieveObject(restrictMatch.Groups("uuid").Value) + If dataObject Is Nothing Then + dataObject = RetrieveObject(restrictMatch.Groups("name").Value) + End If + Else + dataObject = RetrieveObject(restrictMatch.Groups("name").Value) + End If + + If dataObject IsNot Nothing Then + returnEnumeration.Add(CType(dataObject, IXTemplateObject)) + End If + Next + End If + + Return returnEnumeration + End Function + + ''' + ''' Registers a given object in the factory's object cache + ''' + ''' The object's UUID, if present, null otherwise. + ''' The data object itself. + ''' The object's name will be used as the object key if no UUID is present. + ''' Note: the object dictionary will only ever contain the object + ''' most recently seen with a given name and/or UUID. Ideally, + ''' a .x file will not use the same name for two different objects, + ''' and the specification is not clear on whether that's legal and + ''' if so, how to resolve duplicates (especially when it's possible + ''' to infer the correct object based on the expected type of object). + ''' In this implementation, however, no attempt is made to resolve + ''' duplicates intelligently this may lead to the failure to populate + ''' some particular piece of the object tree, when a most recent + ''' object of a given name or UUID is not of the expected type. + Private Sub RegisterObject(ByVal uuid As String, ByVal dataObject As XDataObject) + If uuid IsNot Nothing Then +#If DEBUG Then + If objectDictionary.ContainsKey(uuid) Then + Debug.WriteLine(String.Format("Key {0} already present", uuid)) + End If +#End If + objectDictionary(uuid) = dataObject + End If + + If Not String.IsNullOrEmpty(dataObject.Name) Then +#If DEBUG Then + If objectDictionary.ContainsKey(dataObject.Name) Then + Debug.WriteLine(String.Format("Key {0} already present", dataObject.Name)) + End If +#End If + objectDictionary(dataObject.Name) = dataObject + End If + End Sub + + ''' + ''' Retrieves an with the given key. + ''' + ''' The key of the object being requested. + ''' The with the given key in the factory's cache, null if the object is not present. + Private Function RetrieveObject(ByVal key As String) As XDataObject + If objectDictionary.ContainsKey(key) Then + Return objectDictionary(key) + End If + + Return Nothing + End Function + + ''' + ''' Extracts a UUID declaration from a data object body if present. + ''' + ''' The current unparsed .x file body of the data object + ''' The UUID declaration if found, null otherwise. + ''' For template objects, be sure to parse the template restrictions + ''' before trying to extract the UUID, so that any UUID references found in the + ''' template restrictions don't get picked up by this method. + Private Function ExtractUuid(ByRef body As String) As String + Dim uuid As String + + Try + uuid = ExtractByRegex(body, uuidDeclarationRegex, _ + Function(uuidGroups) uuidGroups("uuid").Value).SingleOrDefault() + Catch exc As InvalidOperationException + Throw New System.IO.InvalidDataException("Each data object may declare only one UUID", exc) + End Try + + Return uuid + End Function + + ''' + ''' Processes the given text using the given regex. For every match, the text + ''' corresponding to that match is removed from the input text, and the + ''' delegate is invoked to obtain whatever object instance corresponds to the + ''' matched text. + ''' + ''' The type of object that will be returned for any matched text + ''' The text to parse. On return, this will reference to a new String containing only the text that was not parsed into new objects + ''' The regex expression to use to match text + ''' The delegate invoked for any matching text, and which returns a new object instance corresponding to the matched text + ''' An enumeration of the objects created by parsing the text + Private Shared Function ExtractByRegex(Of T)(ByRef inputText As String, _ + ByVal regex As Regex, ByVal processGroup As Func(Of GroupCollection, T)) As IEnumerable(Of T) + + Dim bodyBuilder As StringBuilder = Nothing + Dim dataObjects As List(Of T) = New List(Of T)() + Dim matchObject As Match = regex.Match(inputText) + Dim indexCopy As Integer = 0 + + While matchObject.Success + + ' Deferring creation of the StringBuilder has a couple + ' of beneficial effects: the buffer can be pre-sized to + ' a likely reasonable size more importantly, the code can + ' avoid making a copy of the original input if no sub-objects + ' were found. + If bodyBuilder Is Nothing Then + bodyBuilder = New StringBuilder(inputText.Length - matchObject.Length) + End If + + bodyBuilder.Append(inputText.Substring(indexCopy, matchObject.Index - indexCopy)) + indexCopy = matchObject.Index + matchObject.Length + + dataObjects.Add(processGroup(matchObject.Groups)) + + matchObject = matchObject.NextMatch() + End While + + If bodyBuilder IsNot Nothing Then + bodyBuilder.Append(inputText.Substring(indexCopy)) + + inputText = bodyBuilder.ToString() + End If + + Return dataObjects + End Function + End Class + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/XMeshLoader.vb b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/XMeshLoader.vb new file mode 100644 index 00000000..4681782a --- /dev/null +++ b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/XMeshLoader.vb @@ -0,0 +1,724 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Globalization +Imports System.Text +Imports System.Text.RegularExpressions +Imports System.IO +Imports System.Linq +Imports System.Runtime.InteropServices +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports System.Diagnostics +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3DX10 + + +Namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + ''' + ''' The format of each XMesh vertex + ''' + _ + Public Structure XMeshVertex + ''' + ''' The vertex location + ''' + _ + Public Vertex As Vector4F + + ''' + ''' The vertex normal + ''' + _ + Public Normal As Vector4F + + ''' + ''' The vertex color + ''' + _ + Public Color As Vector4F + + ''' + ''' The texture coordinates (U,V) + ''' + _ + Public Texture As Vector2F + End Structure + + ''' + ''' A part is a piece of a scene + ''' + Friend Structure Part + ''' + ''' The name of the part + ''' + Public name As String + + ''' + ''' A description of the part data format + ''' + Public dataDescription() As InputElementDescription + + ''' + ''' The vertex buffer for the part + ''' + Public vertexBuffer As D3DBuffer + + ''' + ''' The number of vertices in the vertex buffer + ''' + Public vertexCount As Integer + + ''' + ''' The part texture/material + ''' + Public material As Material + + ''' + ''' The parts that are sub-parts of this part + ''' + Public parts As List(Of Part) + + ''' + ''' The transformation to be applied to this part relative to the scene + ''' + Public partTransform As Matrix4x4F + End Structure + + Friend Class Material + ''' + ''' The difuse color of the material + ''' + Public materialColor As Vector4F + + ''' + ''' The exponent of the specular color + ''' + Public specularPower As Single + + ''' + ''' The specualr color + ''' + Public specularColor As Vector3F + + ''' + ''' The emissive color + ''' + Public emissiveColor As Vector3F + + ''' + ''' The part texture + ''' + Public textureResource As ShaderResourceView + End Class + + + ''' + ''' Specifies how a particular mesh should be shaded + ''' + Friend Structure MaterialSpecification + ''' + ''' The difuse color of the material + ''' + Public materialColor As Vector4F + + ''' + ''' The exponent of the specular color + ''' + Public specularPower As Single + + ''' + ''' The specualr color + ''' + Public specularColor As Vector3F + + ''' + ''' The emissive color + ''' + Public emissiveColor As Vector3F + + ''' + ''' The name of the texture file + ''' + Public textureFileName As String + End Structure + + ''' + ''' Loads a text formated .X file + ''' + Partial Friend Class XMeshTextLoader + +#Region "Input element descriptions" + Private Shared description() As InputElementDescription = _ + { _ + New InputElementDescription With _ + { _ + .SemanticName = "POSITION", _ + .SemanticIndex = 0, _ + .Format = Format.R32G32B32A32Float, _ + .InputSlot = 0, _ + .AlignedByteOffset = 0, _ + .InputSlotClass = InputClassification.PerVertexData, _ + .InstanceDataStepRate = 0 _ + }, _ + New InputElementDescription With _ + { _ + .SemanticName = "NORMAL", _ + .SemanticIndex = 0, _ + .Format = Format.R32G32B32A32Float, _ + .InputSlot = 0, _ + .AlignedByteOffset = 16, _ + .InputSlotClass = InputClassification.PerVertexData, _ + .InstanceDataStepRate = 0 _ + }, _ + New InputElementDescription With _ + { _ + .SemanticName = "COLOR", _ + .SemanticIndex = 0, _ + .Format = Format.R32G32B32A32Float, _ + .InputSlot = 0, _ + .AlignedByteOffset = 32, _ + .InputSlotClass = InputClassification.PerVertexData, _ + .InstanceDataStepRate = 0 _ + }, _ + New InputElementDescription With _ + { _ + .SemanticName = "TEXCOORD", _ + .SemanticIndex = 0, _ + .Format = Format.R32G32Float, _ + .InputSlot = 0, _ + .AlignedByteOffset = 48, _ + .InputSlotClass = InputClassification.PerVertexData, _ + .InstanceDataStepRate = 0 _ + } _ + } +#End Region + + Private device As D3DDevice + Private meshDirectory As String = "" + + ''' + ''' Constructor that associates a device with the resulting mesh + ''' + ''' + Public Sub New(ByVal device As D3DDevice) + Me.device = device + End Sub + + ''' + ''' Loads the mesh from the file + ''' + ''' + ''' + Public Function XMeshFromFile(ByVal path As String) As IEnumerable(Of Part) + Dim meshPath As String = Nothing + + Dim xFile As StreamReader + If File.Exists(path) Then + meshPath = path + Else + Dim sdkMediaPath As String = GetDXSDKMediaPath() & path + If File.Exists(sdkMediaPath) Then + meshPath = sdkMediaPath + End If + End If + + If meshPath Is Nothing Then + Throw New System.IO.FileNotFoundException("Could not find mesh file.") + Else + meshDirectory = System.IO.Path.GetDirectoryName(meshPath) + End If + + xFile = File.OpenText(meshPath) + + ValidateHeader(xFile) + + Dim data As String = xFile.ReadToEnd() + Return ExtractRootParts(data) + End Function + + ''' + ''' Returns the path to the DX SDK dir + ''' + ''' + Private Function GetDXSDKMediaPath() As String + Return Environment.GetEnvironmentVariable("DXSDK_DIR") + End Function + + ''' + ''' Validates the header of the .X file. Enforces the text-only requirement of this code. + ''' + ''' + Private Sub ValidateHeader(ByVal xFile As StreamReader) + Dim fileHeader As String = xFile.ReadLine() + Dim headerParse As New Regex("xof (?\d\d)(?\d\d)(?\w\w\w[\w\s])(?\d\d\d\d)") + Dim m As Match = headerParse.Match(fileHeader) + + If Not m.Success Then + Throw New System.IO.InvalidDataException("Invalid .X file.") + End If + + If m.Groups.Count <> 5 Then + Throw New System.IO.InvalidDataException("Invalid .X file.") + End If + + If m.Groups("vermajor").ToString() <> "03" Then ' version 3.x supported + Throw New System.IO.InvalidDataException("Unknown .X file version.") + End If + + If m.Groups("format").ToString() <> "txt " Then + Throw New System.IO.InvalidDataException("Only text .X files are supported.") + End If + End Sub + + ''' + ''' Parses the root scene of the .X file + ''' + ''' + Private Function ExtractRootParts(ByVal data As String) As IEnumerable(Of Part) + Return XDataObjectFactory.ExtractDataObjects(data) _ + .Where(Function(obj) obj.IsVisualObject) _ + .Select(Function(obj) PartFromDataObject(obj)) _ + .ToList() + End Function + + Private Function PartFromDataObject(ByVal dataObject As IXDataObject) As Part + Dim part As New Part() + + part.parts = New List(Of Part)() + + part.name = dataObject.Name + + Select Case dataObject.DataObjectType + Case "Frame" + ' Frame data objects translate to parts with only a transform, + ' and no vertices, materials, etc. + part.partTransform = ExtractFrameTransformation(dataObject) + For Each childObject As IXDataObject In dataObject.Children.Where(Function(obj) obj.IsVisualObject) + part.parts.Add(PartFromDataObject(childObject)) + Next childObject + Case "Mesh" + ' Mesh data objects inherit transform from their parent, + ' but do have vertices, materials, etc. + part.partTransform = Matrix4x4F.Identity + part.dataDescription = description + LoadMesh(part, dataObject) + Case Else + Throw New ArgumentException( _ + String.Format(CultureInfo.InvariantCulture, _ + "Object type ""{0}"" is incorrect. Only Frame or Mesh data objects can be converted to Part instances", _ + dataObject.DataObjectType)) + End Select + + Return part + End Function + + ''' + ''' Extracts the transformation associated with the current frame + ''' + ''' + ''' + ''' + Private Function ExtractFrameTransformation(ByVal dataObject As IXDataObject) As Matrix4x4F + Dim matrixObject As IXDataObject = GetSingleChild(dataObject, "FrameTransformMatrix") + + If matrixObject Is Nothing Then + Return Matrix4x4F.Identity + End If + + Dim rawMatrixData As String = matrixObject.Body + + Dim matrixData As New Regex("([-\d\.,\s]+);;") + Dim data As Match = matrixData.Match(rawMatrixData) + If Not data.Success Then + Throw New System.IO.InvalidDataException("Error parsing frame transformation.") + End If + + Dim values() As String = data.Groups(1).ToString().Split(New Char() {","c}) + If values.Length <> 16 Then + Throw New System.IO.InvalidDataException("Error parsing frame transformation.") + End If + Dim fvalues(15) As Single + For n As Integer = 0 To 15 + fvalues(n) = Single.Parse(values(n), CultureInfo.InvariantCulture) + Next n + + Return New Matrix4x4F(fvalues) + End Function + + Private findArrayCount As New Regex("([\d]+);") + Private findVector4F As New Regex("([-\d]+\.[\d]+);([-\d]+\.[\d]+);([-\d]+\.[\d]+);([-\d]+\.[\d]+);") + Private findVector3F As New Regex("([-\d]+\.[\d]+);([-\d]+\.[\d]+);([-\d]+\.[\d]+);") + Private findVector2F As New Regex("([-\d]+\.[\d]+);([-\d]+\.[\d]+);") + Private findScalarF As New Regex("([-\d]+\.[\d]+);") + + + ''' + ''' Loads the first material for a mesh + ''' + ''' + ''' + Private Function LoadMeshMaterialList(ByVal dataObject As IXDataObject) As List(Of MaterialSpecification) + Dim materials = From child In dataObject.Children _ + Where child.DataObjectType = "Material" _ + Select LoadMeshMaterial(child) + + Return New List(Of MaterialSpecification)(materials) + End Function + + ''' + ''' Loads a MeshMaterial subresource + ''' + ''' + ''' + Private Function LoadMeshMaterial(ByVal dataObject As IXDataObject) As MaterialSpecification + Dim m As New MaterialSpecification() + Dim dataOffset As Integer = 0 + Dim color As Match = findVector4F.Match(dataObject.Body, dataOffset) + If Not color.Success Then + Throw New System.IO.InvalidDataException("problem reading material color") + End If + m.materialColor.X = Single.Parse(color.Groups(1).ToString(), CultureInfo.InvariantCulture) + m.materialColor.Y = Single.Parse(color.Groups(2).ToString(), CultureInfo.InvariantCulture) + m.materialColor.Z = Single.Parse(color.Groups(3).ToString(), CultureInfo.InvariantCulture) + m.materialColor.W = Single.Parse(color.Groups(4).ToString(), CultureInfo.InvariantCulture) + dataOffset = color.Index + color.Length + + Dim power As Match = findScalarF.Match(dataObject.Body, dataOffset) + If Not power.Success Then + Throw New System.IO.InvalidDataException("problem reading material specular color exponent") + End If + m.specularPower = Single.Parse(power.Groups(1).ToString(), CultureInfo.InvariantCulture) + dataOffset = power.Index + power.Length + + Dim specular As Match = findVector3F.Match(dataObject.Body, dataOffset) + If Not specular.Success Then + Throw New System.IO.InvalidDataException("problem reading material specular color") + End If + m.specularColor.X = Single.Parse(specular.Groups(1).ToString(), CultureInfo.InvariantCulture) + m.specularColor.Y = Single.Parse(specular.Groups(2).ToString(), CultureInfo.InvariantCulture) + m.specularColor.Z = Single.Parse(specular.Groups(3).ToString(), CultureInfo.InvariantCulture) + dataOffset = specular.Index + specular.Length + + Dim emissive As Match = findVector3F.Match(dataObject.Body, dataOffset) + If Not emissive.Success Then + Throw New System.IO.InvalidDataException("problem reading material emissive color") + End If + m.emissiveColor.X = Single.Parse(emissive.Groups(1).ToString(), CultureInfo.InvariantCulture) + m.emissiveColor.Y = Single.Parse(emissive.Groups(2).ToString(), CultureInfo.InvariantCulture) + m.emissiveColor.Z = Single.Parse(emissive.Groups(3).ToString(), CultureInfo.InvariantCulture) + dataOffset = emissive.Index + emissive.Length + + Dim filenameObject As IXDataObject = GetSingleChild(dataObject, "TextureFilename") + + If filenameObject IsNot Nothing Then + Dim findFilename As New Regex("[\s]+""([\\\w\.]+)"";") + Dim filename As Match = findFilename.Match(filenameObject.Body) + If Not filename.Success Then + Throw New System.IO.InvalidDataException("problem reading texture filename") + End If + m.textureFileName = filename.Groups(1).ToString() + End If + + Return m + End Function + + Friend Class IndexedMeshNormals + Public normalVectors As List(Of Vector4F) + Public normalIndexMap As List(Of Int32) + End Class + + ''' + ''' Loads the indexed normal vectors for a mesh + ''' + ''' + ''' + Private Function LoadMeshNormals(ByVal dataObject As IXDataObject) As IndexedMeshNormals + Dim indexedMeshNormals As New IndexedMeshNormals() + + Dim normalCount As Match = findArrayCount.Match(dataObject.Body) + If Not normalCount.Success Then + Throw New System.IO.InvalidDataException("problem reading mesh normals count") + End If + + indexedMeshNormals.normalVectors = New List(Of Vector4F)() + Dim normals As Integer = Integer.Parse(normalCount.Groups(1).Value, CultureInfo.InvariantCulture) + Dim dataOffset As Integer = normalCount.Index + normalCount.Length + For normalIndex As Integer = 0 To normals - 1 + Dim normal As Match = findVector3F.Match(dataObject.Body, dataOffset) + If Not normal.Success Then + Throw New System.IO.InvalidDataException("problem reading mesh normal vector") + Else + dataOffset = normal.Index + normal.Length + End If + + indexedMeshNormals.normalVectors.Add( _ + New Vector4F( _ + Single.Parse(normal.Groups(1).Value, CultureInfo.InvariantCulture), _ + Single.Parse(normal.Groups(2).Value, CultureInfo.InvariantCulture), _ + Single.Parse(normal.Groups(3).Value, CultureInfo.InvariantCulture), 1.0F)) + Next normalIndex + + Dim faceNormalCount As Match = findArrayCount.Match(dataObject.Body, dataOffset) + If Not faceNormalCount.Success Then + Throw New System.IO.InvalidDataException("problem reading mesh normals count") + End If + + indexedMeshNormals.normalIndexMap = New List(Of Int32)() + Dim faceCount As Integer = Integer.Parse(faceNormalCount.Groups(1).Value, CultureInfo.InvariantCulture) + dataOffset = faceNormalCount.Index + faceNormalCount.Length + For faceNormalIndex As Integer = 0 To faceCount - 1 + Dim normalFace As Match = findVertexIndex.Match(dataObject.Body, dataOffset) + If Not normalFace.Success Then + Throw New System.IO.InvalidDataException("problem reading mesh normal face") + Else + dataOffset = normalFace.Index + normalFace.Length + End If + + Dim vertexIndexes() As String = normalFace.Groups(2).Value.Split(New Char() {","c}) + + For n As Integer = 0 To vertexIndexes.Length - 3 + indexedMeshNormals.normalIndexMap.Add(Integer.Parse(vertexIndexes(0), CultureInfo.InvariantCulture)) + indexedMeshNormals.normalIndexMap.Add(Integer.Parse(vertexIndexes(1 + n), CultureInfo.InvariantCulture)) + indexedMeshNormals.normalIndexMap.Add(Integer.Parse(vertexIndexes(2 + n), CultureInfo.InvariantCulture)) + Next n + Next faceNormalIndex + + Return indexedMeshNormals + End Function + + ''' + ''' Loads the per vertex color for a mesh + ''' + ''' + ''' + Private Function LoadMeshColors(ByVal dataObject As IXDataObject) As Dictionary(Of Integer, Vector4F) + Dim findVertexColor As New Regex("([\d]+); ([\d]+\.[\d]+);([\d]+\.[\d]+);([\d]+\.[\d]+);([\d]+\.[\d]+);;") + + Dim vertexCount As Match = findArrayCount.Match(dataObject.Body) + If Not vertexCount.Success Then + Throw New System.IO.InvalidDataException("problem reading vertex colors count") + End If + + Dim colorDictionary As New Dictionary(Of Integer, Vector4F)() + Dim vertices As Integer = Integer.Parse(vertexCount.Groups(1).Value, CultureInfo.InvariantCulture) + Dim dataOffset As Integer = vertexCount.Index + vertexCount.Length + For vertexIndex As Integer = 0 To vertices - 1 + Dim vertexColor As Match = findVertexColor.Match(dataObject.Body, dataOffset) + If Not vertexColor.Success Then + Throw New System.IO.InvalidDataException("problem reading vertex colors") + Else + dataOffset = vertexColor.Index + vertexColor.Length + End If + + colorDictionary(Integer.Parse(vertexColor.Groups(1).Value, CultureInfo.InvariantCulture)) = _ + New Vector4F( _ + Single.Parse(vertexColor.Groups(2).Value, CultureInfo.InvariantCulture), _ + Single.Parse(vertexColor.Groups(3).Value, CultureInfo.InvariantCulture), _ + Single.Parse(vertexColor.Groups(4).Value, CultureInfo.InvariantCulture), _ + Single.Parse(vertexColor.Groups(5).Value, CultureInfo.InvariantCulture)) + Next vertexIndex + + Return colorDictionary + End Function + + ''' + ''' Loads the texture coordinates(U,V) for a mesh + ''' + ''' + ''' + Private Function LoadMeshTextureCoordinates(ByVal dataObject As IXDataObject) As List(Of Vector2F) + Dim coordinateCount As Match = findArrayCount.Match(dataObject.Body) + If Not coordinateCount.Success Then + Throw New System.IO.InvalidDataException("problem reading mesh texture coordinates count") + End If + + Dim textureCoordinates As New List(Of Vector2F)() + Dim coordinates As Integer = Integer.Parse(coordinateCount.Groups(1).Value, CultureInfo.InvariantCulture) + Dim dataOffset As Integer = coordinateCount.Index + coordinateCount.Length + For coordinateIndex As Integer = 0 To coordinates - 1 + Dim coordinate As Match = findVector2F.Match(dataObject.Body, dataOffset) + If Not coordinate.Success Then + Throw New System.IO.InvalidDataException("problem reading texture coordinate count") + Else + dataOffset = coordinate.Index + coordinate.Length + End If + + textureCoordinates.Add(New Vector2F(Single.Parse(coordinate.Groups(1).Value, CultureInfo.InvariantCulture), Single.Parse(coordinate.Groups(2).Value, CultureInfo.InvariantCulture))) + Next coordinateIndex + + Return textureCoordinates + End Function + + Private findVertexIndex As New Regex("([\d]+);[\s]*([\d,]+)?;") + + ''' + ''' Loads a mesh and creates the vertex/index buffers for the part + ''' + ''' + ''' + Private Sub LoadMesh(ByRef part As Part, ByVal dataObject As IXDataObject) + + ' load vertex data + Dim dataOffset As Integer = 0 + Dim vertexCount As Match = findArrayCount.Match(dataObject.Body) + If Not vertexCount.Success Then + Throw New System.IO.InvalidDataException("problem reading vertex count") + End If + + Dim vertexList As New List(Of Vector4F)() + Dim vertices As Integer = Integer.Parse(vertexCount.Groups(1).Value, CultureInfo.InvariantCulture) + dataOffset = vertexCount.Index + vertexCount.Length + For vertexIndex As Integer = 0 To vertices - 1 + Dim vertex As Match = findVector3F.Match(dataObject.Body, dataOffset) + If Not vertex.Success Then + Throw New System.IO.InvalidDataException("problem reading vertex") + Else + dataOffset = vertex.Index + vertex.Length + End If + + vertexList.Add(New Vector4F(Single.Parse(vertex.Groups(1).Value, CultureInfo.InvariantCulture), Single.Parse(vertex.Groups(2).Value, CultureInfo.InvariantCulture), Single.Parse(vertex.Groups(3).Value, CultureInfo.InvariantCulture), 1.0F)) + Next vertexIndex + + ' load triangle index data + Dim triangleIndexCount As Match = findArrayCount.Match(dataObject.Body, dataOffset) + dataOffset = triangleIndexCount.Index + triangleIndexCount.Length + If Not triangleIndexCount.Success Then + Throw New System.IO.InvalidDataException("problem reading index count") + End If + + Dim triangleIndiciesList As New List(Of Int32)() + Dim triangleIndexListCount As Integer = Integer.Parse(triangleIndexCount.Groups(1).Value, CultureInfo.InvariantCulture) + dataOffset = triangleIndexCount.Index + triangleIndexCount.Length + For triangleIndicyIndex As Integer = 0 To triangleIndexListCount - 1 + Dim indexEntry As Match = findVertexIndex.Match(dataObject.Body, dataOffset) + If Not indexEntry.Success Then + Throw New System.IO.InvalidDataException("problem reading vertex index entry") + Else + dataOffset = indexEntry.Index + indexEntry.Length + End If + + Dim indexEntryCount As Integer = Integer.Parse(indexEntry.Groups(1).Value, CultureInfo.InvariantCulture) + Dim vertexIndexes() As String = indexEntry.Groups(2).Value.Split(New Char() {","c}) + If indexEntryCount <> vertexIndexes.Length Then + Throw New System.IO.InvalidDataException("vertex index count does not equal count of indicies found") + End If + + For entryIndex As Integer = 0 To indexEntryCount - 3 + triangleIndiciesList.Add(Integer.Parse(vertexIndexes(0), CultureInfo.InvariantCulture)) + triangleIndiciesList.Add(Integer.Parse(vertexIndexes(1 + entryIndex).ToString(), CultureInfo.InvariantCulture)) + triangleIndiciesList.Add(Integer.Parse(vertexIndexes(2 + entryIndex).ToString(), CultureInfo.InvariantCulture)) + Next entryIndex + Next triangleIndicyIndex + + ' load mesh colors + Dim vertexColorData As IXDataObject = GetSingleChild(dataObject, "MeshVertexColors") + Dim colorDictionary As Dictionary(Of Integer, Vector4F) = Nothing + If vertexColorData IsNot Nothing Then + colorDictionary = LoadMeshColors(vertexColorData) + End If + + ' load mesh normals + Dim meshNormalData As IXDataObject = GetSingleChild(dataObject, "MeshNormals") + Dim meshNormals As IndexedMeshNormals = Nothing + If meshNormalData IsNot Nothing Then + meshNormals = LoadMeshNormals(meshNormalData) + End If + + ' load mesh texture coordinates + Dim meshTextureCoordsData As IXDataObject = GetSingleChild(dataObject, "MeshTextureCoords") + Dim meshTextureCoords As List(Of Vector2F) = Nothing + If meshTextureCoordsData IsNot Nothing Then + meshTextureCoords = LoadMeshTextureCoordinates(meshTextureCoordsData) + End If + + ' load mesh material + Dim meshMaterialsData As IXDataObject = GetSingleChild(dataObject, "MeshMaterialList") + Dim meshMaterials As List(Of MaterialSpecification) = Nothing + If meshMaterialsData IsNot Nothing Then + meshMaterials = LoadMeshMaterialList(meshMaterialsData) + End If + + ' copy vertex data to HGLOBAL + Dim byteLength As Integer = Marshal.SizeOf(GetType(XMeshVertex)) * triangleIndiciesList.Count + Dim nativeVertex As IntPtr = Marshal.AllocHGlobal(byteLength) + Dim byteBuffer(byteLength - 1) As Byte + Dim varray(triangleIndiciesList.Count - 1) As XMeshVertex + For n As Integer = 0 To triangleIndiciesList.Count - 1 + Dim vertex As New XMeshVertex() With _ + { _ + .Vertex = vertexList(triangleIndiciesList(n)), _ + .Normal = If((meshNormals Is Nothing), _ + New Vector4F(0, 0, 0, 1.0F), _ + meshNormals.normalVectors(meshNormals.normalIndexMap(n))), _ + .Color = (If((colorDictionary Is Nothing), _ + New Vector4F(0, 0, 0, 0), _ + colorDictionary(triangleIndiciesList(n)))), _ + .Texture = (If((meshTextureCoords Is Nothing), _ + New Vector2F(0, 0), _ + meshTextureCoords(triangleIndiciesList(n)))) _ + } + Dim vertexData() As Byte = RawSerialize(vertex) + Buffer.BlockCopy(vertexData, 0, byteBuffer, vertexData.Length * n, vertexData.Length) + Next n + Marshal.Copy(byteBuffer, 0, nativeVertex, byteLength) + + ' build vertex buffer + Dim bdv As New BufferDescription() With {.Usage = Usage.Default, .ByteWidth = CUInt(Marshal.SizeOf(GetType(XMeshVertex)) * triangleIndiciesList.Count), .BindingOptions = BindingOptions.VertexBuffer, .CpuAccessOptions = CpuAccessOptions.None, .MiscellaneousResourceOptions = MiscellaneousResourceOptions.None} + Dim vertexInit As New SubresourceData() With {.SystemMemory = nativeVertex} + + part.vertexBuffer = device.CreateBuffer(bdv, vertexInit) + Debug.Assert(part.vertexBuffer IsNot Nothing) + + part.vertexCount = triangleIndiciesList.Count + + If meshMaterials IsNot Nothing Then + ' only a single material is currently supported + Dim m As MaterialSpecification = meshMaterials(0) + + part.material = New Material() With {.emissiveColor = m.emissiveColor, .specularColor = m.specularColor, .materialColor = m.materialColor, .specularPower = m.specularPower} + + Dim texturePath As String = "" + If File.Exists(m.textureFileName) Then + texturePath = m.textureFileName + End If + If File.Exists(meshDirectory & "\" & m.textureFileName) Then + texturePath = meshDirectory & "\" & m.textureFileName + End If + If File.Exists(meshDirectory & "\..\" & m.textureFileName) Then + texturePath = meshDirectory & "\..\" & m.textureFileName + End If + + If texturePath.Length = 0 Then + part.material.textureResource = Nothing + Else + part.material.textureResource = D3D10XHelpers.CreateShaderResourceViewFromFile(device, texturePath) + End If + End If + + Marshal.FreeHGlobal(nativeVertex) + End Sub + + ''' + ''' Copies an arbitrary structure into a byte array + ''' + ''' + ''' + Public Function RawSerialize(ByVal anything As Object) As Byte() + Dim rawsize As Integer = Marshal.SizeOf(anything) + Dim buffer As IntPtr = Marshal.AllocHGlobal(rawsize) + + Try + Marshal.StructureToPtr(anything, buffer, False) + Dim rawdatas(rawsize - 1) As Byte + Marshal.Copy(buffer, rawdatas, 0, rawsize) + Return rawdatas + Finally + Marshal.FreeHGlobal(buffer) + End Try + End Function + End Class +End Namespace diff --git a/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/XMeshManager.vb b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/XMeshManager.vb new file mode 100644 index 00000000..b7416ac4 --- /dev/null +++ b/source/Samples/DirectX/VB/UtilitiesLibrary/MeshLoader/XMeshManager.vb @@ -0,0 +1,103 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports Microsoft.WindowsAPICodePack.DirectX +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D +Imports Microsoft.WindowsAPICodePack.DirectX.Direct3D10 +Imports Microsoft.WindowsAPICodePack.DirectX.Graphics +Imports System.Windows.Media.Media3D +Imports System.Runtime.InteropServices +Imports System.Reflection +Imports System.IO + +Namespace Microsoft.WindowsAPICodePack.DirectX.DirectXUtilities + + ''' + ''' Manages the XMesh file loading + ''' + Public Class XMeshManager + Implements IDisposable + Friend device As D3DDevice + + Friend effect As Effect + Friend techniqueRenderTexture As EffectTechnique + Friend techniqueRenderVertexColor As EffectTechnique + Friend techniqueRenderMaterialColor As EffectTechnique + + Friend brightnessVariable As EffectScalarVariable + Friend materialColorVariable As EffectVectorVariable + Friend worldVariable As EffectMatrixVariable + Friend viewVariable As EffectMatrixVariable + Friend projectionVariable As EffectMatrixVariable + Friend diffuseVariable As EffectShaderResourceVariable + + ''' + ''' Creates the mesh manager + ''' + ''' + Public Sub New(ByVal device As D3DDevice) + Me.device = device + + ' Create the effect + 'XMesh.fxo was compiled from XMesh.fx using: + ' "$(DXSDK_DIR)utilities\bin\x86\fxc" "$(ProjectDir)Mesh\MeshLoaders\XMesh.fx" /T fx_4_0 /Fo"$(ProjectDir)Mesh\MeshLoaders\XMesh.fxo" + Using effectStream As Stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("XMesh.fxo") + effect = device.CreateEffectFromCompiledBinary(New BinaryReader(effectStream)) + End Using + + ' Obtain the techniques + techniqueRenderTexture = effect.GetTechniqueByName("RenderTextured") + techniqueRenderVertexColor = effect.GetTechniqueByName("RenderVertexColor") + techniqueRenderMaterialColor = effect.GetTechniqueByName("RenderMaterialColor") + + ' Obtain the variables + brightnessVariable = effect.GetVariableByName("Brightness").AsScalar() + materialColorVariable = effect.GetVariableByName("MaterialColor").AsVector() + worldVariable = effect.GetVariableByName("World").AsMatrix() + viewVariable = effect.GetVariableByName("View").AsMatrix() + projectionVariable = effect.GetVariableByName("Projection").AsMatrix() + diffuseVariable = effect.GetVariableByName("tex2D").AsShaderResource() + End Sub + + Public Sub SetViewAndProjection(ByVal view As Matrix4x4F, ByVal projection As Matrix4x4F) + viewVariable.Matrix = view + projectionVariable.Matrix = projection + End Sub + + ''' + ''' Returns an XMesh object that contains the data from a specified .X file. + ''' + ''' + ''' + Public Function Open(ByVal path As String) As XMesh + Dim mesh As New XMesh() + mesh.Load(path, Me) + Return mesh + End Function + + ''' + ''' Reutrns a specialization of an XMesh object that contains the data from a specified .X file + ''' + ''' + ''' + ''' + Public Function Open(Of T As {XMesh, New})(ByVal path As String) As T + Dim mesh As New T() + mesh.Load(path, Me) + Return mesh + End Function + + #Region "IDisposable Members" + + ''' + ''' Cleans up the memory allocated by the manager. + ''' + Public Sub Dispose() Implements IDisposable.Dispose + effect.Dispose() + End Sub + + #End Region + End Class +End Namespace diff --git a/source/Samples/ExplorerBrowser/CS/ExplorerBrowser.sln b/source/Samples/ExplorerBrowser/CS/ExplorerBrowser.sln new file mode 100644 index 00000000..0174c720 --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/ExplorerBrowser.sln @@ -0,0 +1,48 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExplorerBrowserDemo", "WinForms\ExplorerBrowserDemo.csproj", "{2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPFExplorerBrowserDemo", "WPF\WPFExplorerBrowserDemo\WPFExplorerBrowserDemo.csproj", "{85C322BA-C046-4416-87D2-D79AE92A1E65}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.Release|Any CPU.Build.0 = Release|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.Debug|Any CPU.Build.0 = Debug|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.Release|Any CPU.ActiveCfg = Release|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/App.xaml b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/App.xaml new file mode 100644 index 00000000..b3622e16 --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/App.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/App.xaml.cs b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/App.xaml.cs new file mode 100644 index 00000000..c7360dfe --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/App.xaml.cs @@ -0,0 +1,16 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Windows; + +namespace Microsoft.WindowsAPICodePack.Samples +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/ExplorerBrowserTestWindow.xaml b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/ExplorerBrowserTestWindow.xaml new file mode 100644 index 00000000..61b67865 --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/ExplorerBrowserTestWindow.xaml @@ -0,0 +1,377 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + View Mode + + + + + + + + + + + + Navigation Options + + + Always Navigate + Navigate Once + + + + + + + + + + + + Pane Options + + + Advanced Query + Commands + Commands-Organize + Commands-View + Details + Navigation + Preview + Query + + + + + + + + + + + + Thumbnail Size + + + + + + + + + + + + + + + + Content Options + + + + + Align Left + Auto Arrange + CheckSelect + Extended Tiles + Full Row Select + Hide File Names + No Browser View State + No Column Header + No Header In All Views + No Icons + No Sub Folders + Single Click Activate + Single Selection + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/ExplorerBrowserTestWindow.xaml.cs b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/ExplorerBrowserTestWindow.xaml.cs new file mode 100644 index 00000000..33503505 --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/ExplorerBrowserTestWindow.xaml.cs @@ -0,0 +1,131 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Windows; +using System.Windows.Data; +using System.Windows.Controls; +using System.Linq; + +using Microsoft.WindowsAPICodePack.Shell; +using Microsoft.WindowsAPICodePack.Controls; + +namespace Microsoft.WindowsAPICodePack.Samples +{ + /// + /// Interaction logic for Window1.xaml + /// + public partial class ExplorerBrowserTestWindow : Window + { + public ExplorerBrowserTestWindow() + { + InitializeComponent(); + + var sortedKnownFolders = + from folder in KnownFolders.All + where (folder.CanonicalName != null && + folder.CanonicalName.Length > 0 && + ((ShellObject)folder).Thumbnail.BitmapSource != null && + folder.CanonicalName.CompareTo("Network") != 0 && + folder.CanonicalName.CompareTo("NetHood") != 0) + orderby folder.CanonicalName + select folder; + knownFoldersCombo.ItemsSource = sortedKnownFolders; + + var viewModes = + from mode in Enums.Get() + orderby mode.ToString() + select mode; + ViewModeCombo.ItemsSource = viewModes; + ViewModeCombo.Text = "Auto"; + + this.Loaded += new RoutedEventHandler(ExplorerBrowserTestWindow_Loaded); + } + + void ExplorerBrowserTestWindow_Loaded(object sender, RoutedEventArgs e) + { + // Navigate to initial folder + eb.ExplorerBrowserControl.Navigate((ShellObject)KnownFolders.Desktop); + } + + private void navigateFileButton_Click(object sender, RoutedEventArgs e) + { + try + { + ShellFile sf = ShellFile.FromFilePath(navigateFileTextBox.Text); + eb.ExplorerBrowserControl.Navigate(sf); + } + catch + { + MessageBox.Show("Navigation not possible!"); + } + } + + private void navigateFolderButton_Click(object sender, RoutedEventArgs e) + { + try + { + ShellFileSystemFolder sf = ShellFileSystemFolder.FromFolderPath(navigateFolderTextBox.Text); + eb.ExplorerBrowserControl.Navigate(sf); + } + catch + { + MessageBox.Show("Navigation not possible!"); + } + } + + private void navigateKnownFolderButton_Click(object sender, RoutedEventArgs e) + { + try + { + IKnownFolder kf = knownFoldersCombo.Items[knownFoldersCombo.SelectedIndex] as IKnownFolder; + eb.ExplorerBrowserControl.Navigate((ShellObject)kf); + } + catch + { + MessageBox.Show("Navigation not possible!"); + } + } + + private void ClearNavigationLog_Click(object sender, RoutedEventArgs e) + { + eb.ExplorerBrowserControl.NavigationLog.ClearLog(); + } + } + + public static class Enums + { + public static IEnumerable Get() + { + return System.Enum.GetValues(typeof(T)).Cast(); + } + } + + public class TriCheckToPaneVisibilityState : IValueConverter + { + #region IValueConverter Members + + public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + if (value == null) + return PaneVisibilityState.DoNotCare; + else if ((bool)value == true) + return PaneVisibilityState.Show; + else + return PaneVisibilityState.Hide; + } + + public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) + { + if ((PaneVisibilityState)value == PaneVisibilityState.DoNotCare) + return null; + else if ((PaneVisibilityState)value == PaneVisibilityState.Show) + return true; + else + return false; + } + + #endregion + } + +} diff --git a/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/Properties/AssemblyInfo.cs b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..0e842de3 --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/Properties/AssemblyInfo.cs @@ -0,0 +1,54 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("WPFExplorerBrowser")] +[assembly: AssemblyDescription("WPF ExplorerBrowser Demo")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible( false )] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/Properties/Resources.Designer.cs b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/Properties/Resources.Designer.cs new file mode 100644 index 00000000..ba31972c --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.1434 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WPFExplorerBrowserDemo.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute( "System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0" )] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute( )] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute( )] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute( "Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode" )] + internal Resources( ) + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute( global::System.ComponentModel.EditorBrowsableState.Advanced )] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if( ( resourceMan == null ) ) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager( "WPFExplorerBrowserDemo.Properties.Resources", typeof( Resources ).Assembly ); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute( global::System.ComponentModel.EditorBrowsableState.Advanced )] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/Properties/Resources.resx b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/Properties/Settings.Designer.cs b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/Properties/Settings.Designer.cs new file mode 100644 index 00000000..7217579a --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.1434 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace WPFExplorerBrowserDemo.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute( )] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute( "Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0" )] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ( (Settings)( global::System.Configuration.ApplicationSettingsBase.Synchronized( new Settings( ) ) ) ); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/Properties/Settings.settings b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/WPFExplorerBrowserDemo.csproj b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/WPFExplorerBrowserDemo.csproj new file mode 100644 index 00000000..860965e0 --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WPF/WPFExplorerBrowserDemo/WPFExplorerBrowserDemo.csproj @@ -0,0 +1,153 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {85C322BA-C046-4416-87D2-D79AE92A1E65} + WinExe + Properties + WPFExplorerBrowserDemo + WPFExplorerBrowserDemo + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + + + + + + + 3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + 3.5 + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + App.xaml + Code + + + ExplorerBrowserTestWindow.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/ExplorerBrowser/CS/WinForms/ExplorerBrowserDemo.csproj b/source/Samples/ExplorerBrowser/CS/WinForms/ExplorerBrowserDemo.csproj new file mode 100644 index 00000000..bf3117f1 --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WinForms/ExplorerBrowserDemo.csproj @@ -0,0 +1,157 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D} + WinExe + Properties + ExplorerBrowser + ExplorerBrowser + v3.5 + 512 + + + + + + + + + 3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + AllRules.ruleset + x86 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + 3.0 + + + 3.0 + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + 3.0 + + + 3.0 + + + + + Form + + + ExplorerBrowserTestForm.cs + + + + + ExplorerBrowserTestForm.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/ExplorerBrowser/CS/WinForms/ExplorerBrowserTestForm.Designer.cs b/source/Samples/ExplorerBrowser/CS/WinForms/ExplorerBrowserTestForm.Designer.cs new file mode 100644 index 00000000..9184cdbf --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WinForms/ExplorerBrowserTestForm.Designer.cs @@ -0,0 +1,484 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + + +namespace Microsoft.WindowsAPICodePack.Samples +{ + partial class ExplorerBrowserTestForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.itemsTextBox = new System.Windows.Forms.RichTextBox(); + this.label7 = new System.Windows.Forms.Label(); + this.filePathNavigate = new System.Windows.Forms.Button(); + this.filePathEdit = new System.Windows.Forms.TextBox(); + this.knownFolderNavigate = new System.Windows.Forms.Button(); + this.label6 = new System.Windows.Forms.Label(); + this.knownFolderCombo = new System.Windows.Forms.ComboBox(); + this.navigateButton = new System.Windows.Forms.Button(); + this.label5 = new System.Windows.Forms.Label(); + this.pathEdit = new System.Windows.Forms.TextBox(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.visibilityPropertyGrid = new System.Windows.Forms.PropertyGrid(); + this.contentPropertyGrid = new System.Windows.Forms.PropertyGrid(); + this.navigationPropertyGrid = new System.Windows.Forms.PropertyGrid(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.clearHistoryButton = new System.Windows.Forms.Button(); + this.forwardButton = new System.Windows.Forms.Button(); + this.navigationHistoryCombo = new System.Windows.Forms.ComboBox(); + this.backButton = new System.Windows.Forms.Button(); + this.failNavigationCheckBox = new System.Windows.Forms.CheckBox(); + this.splitContainer3 = new System.Windows.Forms.SplitContainer(); + this.explorerBrowser = new Microsoft.WindowsAPICodePack.Controls.WindowsForms.ExplorerBrowser(); + this.itemsTabControl = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.selectedItemsTextBox = new System.Windows.Forms.RichTextBox(); + this.tabPage3 = new System.Windows.Forms.TabPage(); + this.eventHistoryTextBox = new System.Windows.Forms.RichTextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.splitContainer3.Panel1.SuspendLayout(); + this.splitContainer3.Panel2.SuspendLayout(); + this.splitContainer3.SuspendLayout(); + this.itemsTabControl.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tabPage2.SuspendLayout(); + this.tabPage3.SuspendLayout(); + this.SuspendLayout(); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(3, 494); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(83, 13); + this.label2.TabIndex = 8; + this.label2.Text = "Content Options"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(3, 12); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(97, 13); + this.label3.TabIndex = 9; + this.label3.Text = "Navigation Options"; + // + // itemsTextBox + // + this.itemsTextBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.itemsTextBox.Location = new System.Drawing.Point(3, 3); + this.itemsTextBox.Name = "itemsTextBox"; + this.itemsTextBox.Size = new System.Drawing.Size(602, 158); + this.itemsTextBox.TabIndex = 0; + this.itemsTextBox.Text = ""; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(30, 11); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(51, 13); + this.label7.TabIndex = 8; + this.label7.Text = "File Path:"; + // + // filePathNavigate + // + this.filePathNavigate.Enabled = false; + this.filePathNavigate.Location = new System.Drawing.Point(464, 5); + this.filePathNavigate.Name = "filePathNavigate"; + this.filePathNavigate.Size = new System.Drawing.Size(126, 22); + this.filePathNavigate.TabIndex = 7; + this.filePathNavigate.Text = "Navigate File"; + this.filePathNavigate.UseVisualStyleBackColor = true; + this.filePathNavigate.Click += new System.EventHandler(this.filePathNavigate_Click); + // + // filePathEdit + // + this.filePathEdit.Location = new System.Drawing.Point(87, 7); + this.filePathEdit.Name = "filePathEdit"; + this.filePathEdit.Size = new System.Drawing.Size(359, 20); + this.filePathEdit.TabIndex = 6; + this.filePathEdit.TextChanged += new System.EventHandler(this.filePathEdit_TextChanged); + // + // knownFolderNavigate + // + this.knownFolderNavigate.Enabled = false; + this.knownFolderNavigate.Location = new System.Drawing.Point(464, 60); + this.knownFolderNavigate.Name = "knownFolderNavigate"; + this.knownFolderNavigate.Size = new System.Drawing.Size(126, 23); + this.knownFolderNavigate.TabIndex = 5; + this.knownFolderNavigate.Text = "Navigate Known Folder"; + this.knownFolderNavigate.UseVisualStyleBackColor = true; + this.knownFolderNavigate.Click += new System.EventHandler(this.knownFolderNavigate_Click); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(6, 66); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(75, 13); + this.label6.TabIndex = 4; + this.label6.Text = "Known Folder:"; + // + // knownFolderCombo + // + this.knownFolderCombo.FormattingEnabled = true; + this.knownFolderCombo.Location = new System.Drawing.Point(87, 63); + this.knownFolderCombo.Name = "knownFolderCombo"; + this.knownFolderCombo.Size = new System.Drawing.Size(359, 21); + this.knownFolderCombo.TabIndex = 3; + this.knownFolderCombo.SelectedIndexChanged += new System.EventHandler(this.knownFolderCombo_SelectedIndexChanged); + // + // navigateButton + // + this.navigateButton.Enabled = false; + this.navigateButton.Location = new System.Drawing.Point(464, 32); + this.navigateButton.Name = "navigateButton"; + this.navigateButton.Size = new System.Drawing.Size(127, 23); + this.navigateButton.TabIndex = 2; + this.navigateButton.Text = "Navigate Path"; + this.navigateButton.UseVisualStyleBackColor = true; + this.navigateButton.Click += new System.EventHandler(this.navigateButton_Click); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(17, 38); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(64, 13); + this.label5.TabIndex = 1; + this.label5.Text = "Folder Path:"; + // + // pathEdit + // + this.pathEdit.Location = new System.Drawing.Point(87, 34); + this.pathEdit.Name = "pathEdit"; + this.pathEdit.Size = new System.Drawing.Size(359, 20); + this.pathEdit.TabIndex = 0; + this.pathEdit.TextChanged += new System.EventHandler(this.pathEdit_TextChanged); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer1.IsSplitterFixed = true; + this.splitContainer1.Location = new System.Drawing.Point(0, 0); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.label1); + this.splitContainer1.Panel1.Controls.Add(this.visibilityPropertyGrid); + this.splitContainer1.Panel1.Controls.Add(this.contentPropertyGrid); + this.splitContainer1.Panel1.Controls.Add(this.navigationPropertyGrid); + this.splitContainer1.Panel1.Controls.Add(this.label2); + this.splitContainer1.Panel1.Controls.Add(this.label3); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.splitContainer2); + this.splitContainer1.Size = new System.Drawing.Size(841, 904); + this.splitContainer1.SplitterDistance = 221; + this.splitContainer1.TabIndex = 11; + // + // visibilityPropertyGrid + // + this.visibilityPropertyGrid.Location = new System.Drawing.Point(6, 230); + this.visibilityPropertyGrid.Name = "visibilityPropertyGrid"; + this.visibilityPropertyGrid.Size = new System.Drawing.Size(213, 248); + this.visibilityPropertyGrid.TabIndex = 13; + // + // contentPropertyGrid + // + this.contentPropertyGrid.Location = new System.Drawing.Point(6, 510); + this.contentPropertyGrid.Name = "contentPropertyGrid"; + this.contentPropertyGrid.Size = new System.Drawing.Size(212, 391); + this.contentPropertyGrid.TabIndex = 12; + // + // navigationPropertyGrid + // + this.navigationPropertyGrid.Location = new System.Drawing.Point(6, 28); + this.navigationPropertyGrid.Name = "navigationPropertyGrid"; + this.navigationPropertyGrid.Size = new System.Drawing.Size(212, 183); + this.navigationPropertyGrid.TabIndex = 11; + // + // splitContainer2 + // + this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer2.IsSplitterFixed = true; + this.splitContainer2.Location = new System.Drawing.Point(0, 0); + this.splitContainer2.Name = "splitContainer2"; + this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.clearHistoryButton); + this.splitContainer2.Panel1.Controls.Add(this.forwardButton); + this.splitContainer2.Panel1.Controls.Add(this.navigationHistoryCombo); + this.splitContainer2.Panel1.Controls.Add(this.backButton); + this.splitContainer2.Panel1.Controls.Add(this.failNavigationCheckBox); + this.splitContainer2.Panel1.Controls.Add(this.label5); + this.splitContainer2.Panel1.Controls.Add(this.pathEdit); + this.splitContainer2.Panel1.Controls.Add(this.label7); + this.splitContainer2.Panel1.Controls.Add(this.navigateButton); + this.splitContainer2.Panel1.Controls.Add(this.filePathNavigate); + this.splitContainer2.Panel1.Controls.Add(this.knownFolderCombo); + this.splitContainer2.Panel1.Controls.Add(this.filePathEdit); + this.splitContainer2.Panel1.Controls.Add(this.label6); + this.splitContainer2.Panel1.Controls.Add(this.knownFolderNavigate); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.splitContainer3); + this.splitContainer2.Size = new System.Drawing.Size(616, 904); + this.splitContainer2.SplitterDistance = 139; + this.splitContainer2.TabIndex = 0; + // + // clearHistoryButton + // + this.clearHistoryButton.Location = new System.Drawing.Point(466, 112); + this.clearHistoryButton.Name = "clearHistoryButton"; + this.clearHistoryButton.Size = new System.Drawing.Size(125, 23); + this.clearHistoryButton.TabIndex = 14; + this.clearHistoryButton.Text = "Clear History"; + this.clearHistoryButton.UseVisualStyleBackColor = true; + this.clearHistoryButton.Click += new System.EventHandler(this.clearHistoryButton_Click); + // + // forwardButton + // + this.forwardButton.Font = new System.Drawing.Font("Comic Sans MS", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.forwardButton.Location = new System.Drawing.Point(62, 87); + this.forwardButton.Name = "forwardButton"; + this.forwardButton.Size = new System.Drawing.Size(48, 48); + this.forwardButton.TabIndex = 13; + this.forwardButton.Text = ">"; + this.forwardButton.UseVisualStyleBackColor = true; + this.forwardButton.Click += new System.EventHandler(this.forwardButton_Click); + // + // navigationHistoryCombo + // + this.navigationHistoryCombo.FormattingEnabled = true; + this.navigationHistoryCombo.Location = new System.Drawing.Point(129, 99); + this.navigationHistoryCombo.Name = "navigationHistoryCombo"; + this.navigationHistoryCombo.Size = new System.Drawing.Size(317, 21); + this.navigationHistoryCombo.TabIndex = 12; + this.navigationHistoryCombo.SelectedIndexChanged += new System.EventHandler(this.navigationHistoryCombo_SelectedIndexChanged); + // + // backButton + // + this.backButton.Font = new System.Drawing.Font("Comic Sans MS", 18F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.backButton.Location = new System.Drawing.Point(8, 87); + this.backButton.Name = "backButton"; + this.backButton.Size = new System.Drawing.Size(48, 48); + this.backButton.TabIndex = 10; + this.backButton.Text = "<"; + this.backButton.UseVisualStyleBackColor = true; + this.backButton.Click += new System.EventHandler(this.backButton_Click); + // + // failNavigationCheckBox + // + this.failNavigationCheckBox.AutoSize = true; + this.failNavigationCheckBox.Location = new System.Drawing.Point(466, 92); + this.failNavigationCheckBox.Name = "failNavigationCheckBox"; + this.failNavigationCheckBox.Size = new System.Drawing.Size(138, 17); + this.failNavigationCheckBox.TabIndex = 9; + this.failNavigationCheckBox.Text = "Force Navigation to Fail"; + this.failNavigationCheckBox.UseVisualStyleBackColor = true; + // + // splitContainer3 + // + this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer3.IsSplitterFixed = true; + this.splitContainer3.Location = new System.Drawing.Point(0, 0); + this.splitContainer3.Name = "splitContainer3"; + this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer3.Panel1 + // + this.splitContainer3.Panel1.Controls.Add(this.explorerBrowser); + // + // splitContainer3.Panel2 + // + this.splitContainer3.Panel2.Controls.Add(this.itemsTabControl); + this.splitContainer3.Size = new System.Drawing.Size(616, 761); + this.splitContainer3.SplitterDistance = 567; + this.splitContainer3.TabIndex = 0; + // + // explorerBrowser + // + this.explorerBrowser.Dock = System.Windows.Forms.DockStyle.Fill; + this.explorerBrowser.Location = new System.Drawing.Point(0, 0); + this.explorerBrowser.Name = "explorerBrowser"; + this.explorerBrowser.PropertyBagName = "Microsoft.WindowsAPICodePack.Controls.WindowsForms.ExplorerBrowser"; + this.explorerBrowser.Size = new System.Drawing.Size(616, 567); + this.explorerBrowser.TabIndex = 0; + // + // itemsTabControl + // + this.itemsTabControl.Controls.Add(this.tabPage1); + this.itemsTabControl.Controls.Add(this.tabPage2); + this.itemsTabControl.Controls.Add(this.tabPage3); + this.itemsTabControl.Dock = System.Windows.Forms.DockStyle.Fill; + this.itemsTabControl.Location = new System.Drawing.Point(0, 0); + this.itemsTabControl.Name = "itemsTabControl"; + this.itemsTabControl.SelectedIndex = 0; + this.itemsTabControl.Size = new System.Drawing.Size(616, 190); + this.itemsTabControl.TabIndex = 1; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.itemsTextBox); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(608, 164); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "Items (Count=0)"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.selectedItemsTextBox); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(608, 164); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "Selected Items (Count=0)"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // selectedItemsTextBox + // + this.selectedItemsTextBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.selectedItemsTextBox.Location = new System.Drawing.Point(3, 3); + this.selectedItemsTextBox.Name = "selectedItemsTextBox"; + this.selectedItemsTextBox.Size = new System.Drawing.Size(602, 158); + this.selectedItemsTextBox.TabIndex = 0; + this.selectedItemsTextBox.Text = ""; + // + // tabPage3 + // + this.tabPage3.Controls.Add(this.eventHistoryTextBox); + this.tabPage3.Location = new System.Drawing.Point(4, 22); + this.tabPage3.Name = "tabPage3"; + this.tabPage3.Size = new System.Drawing.Size(608, 164); + this.tabPage3.TabIndex = 2; + this.tabPage3.Text = "Event History"; + this.tabPage3.UseVisualStyleBackColor = true; + // + // eventHistoryTextBox + // + this.eventHistoryTextBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.eventHistoryTextBox.Location = new System.Drawing.Point(0, 0); + this.eventHistoryTextBox.Name = "eventHistoryTextBox"; + this.eventHistoryTextBox.Size = new System.Drawing.Size(608, 164); + this.eventHistoryTextBox.TabIndex = 0; + this.eventHistoryTextBox.Text = ""; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(3, 214); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(71, 13); + this.label1.TabIndex = 14; + this.label1.Text = "Pane Options"; + // + // ExplorerBrowserTestForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(841, 904); + this.Controls.Add(this.splitContainer1); + this.Name = "ExplorerBrowserTestForm"; + this.Text = "Explorer Browser Demo"; + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel1.PerformLayout(); + this.splitContainer2.Panel2.ResumeLayout(false); + this.splitContainer2.ResumeLayout(false); + this.splitContainer3.Panel1.ResumeLayout(false); + this.splitContainer3.Panel2.ResumeLayout(false); + this.splitContainer3.ResumeLayout(false); + this.itemsTabControl.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage2.ResumeLayout(false); + this.tabPage3.ResumeLayout(false); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Button navigateButton; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.TextBox pathEdit; + private System.Windows.Forms.Button knownFolderNavigate; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.ComboBox knownFolderCombo; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Button filePathNavigate; + private System.Windows.Forms.TextBox filePathEdit; + private System.Windows.Forms.RichTextBox itemsTextBox; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.SplitContainer splitContainer3; + private Microsoft.WindowsAPICodePack.Controls.WindowsForms.ExplorerBrowser explorerBrowser; + private System.Windows.Forms.PropertyGrid navigationPropertyGrid; + private System.Windows.Forms.PropertyGrid contentPropertyGrid; + private System.Windows.Forms.PropertyGrid visibilityPropertyGrid; + private System.Windows.Forms.CheckBox failNavigationCheckBox; + private System.Windows.Forms.TabControl itemsTabControl; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.RichTextBox selectedItemsTextBox; + private System.Windows.Forms.Button forwardButton; + private System.Windows.Forms.ComboBox navigationHistoryCombo; + private System.Windows.Forms.Button backButton; + private System.Windows.Forms.TabPage tabPage3; + private System.Windows.Forms.RichTextBox eventHistoryTextBox; + private System.Windows.Forms.Button clearHistoryButton; + private System.Windows.Forms.Label label1; + + } +} + diff --git a/source/Samples/ExplorerBrowser/CS/WinForms/ExplorerBrowserTestForm.cs b/source/Samples/ExplorerBrowser/CS/WinForms/ExplorerBrowserTestForm.cs new file mode 100644 index 00000000..8d963995 --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WinForms/ExplorerBrowserTestForm.cs @@ -0,0 +1,294 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.Shell; +using System.Windows.Forms.Integration; +using System.Reflection; +using System.Runtime.InteropServices; +using Microsoft.WindowsAPICodePack.Controls; +using System.Threading; + +namespace Microsoft.WindowsAPICodePack.Samples +{ + public partial class ExplorerBrowserTestForm : Form + { + System.Windows.Forms.Timer uiDecoupleTimer = new System.Windows.Forms.Timer(); + AutoResetEvent selectionChanged = new AutoResetEvent(false); + AutoResetEvent itemsChanged = new AutoResetEvent(false); + + public ExplorerBrowserTestForm() + { + InitializeComponent(); + + // initialize known folder combo box + List knownFolderList = new List(); + foreach (IKnownFolder folder in KnownFolders.All) + { + knownFolderList.Add(folder.CanonicalName); + } + knownFolderList.Sort(); + knownFolderCombo.Items.AddRange(knownFolderList.ToArray()); + + // initial property grids + navigationPropertyGrid.SelectedObject = explorerBrowser.NavigationOptions; + visibilityPropertyGrid.SelectedObject = explorerBrowser.NavigationOptions.PaneVisibility; + contentPropertyGrid.SelectedObject = explorerBrowser.ContentOptions; + + // setup ExplorerBrowser navigation events + explorerBrowser.NavigationPending += new EventHandler(explorerBrowser_NavigationPending); + explorerBrowser.NavigationFailed += new EventHandler(explorerBrowser_NavigationFailed); + explorerBrowser.NavigationComplete += new EventHandler(explorerBrowser_NavigationComplete); + explorerBrowser.ItemsChanged += new EventHandler(explorerBrowser_ItemsChanged); + explorerBrowser.SelectionChanged += new EventHandler(explorerBrowser_SelectionChanged); + explorerBrowser.ViewEnumerationComplete += new EventHandler(explorerBrowser_ViewEnumerationComplete); + + // set up Navigation log event and button state + explorerBrowser.NavigationLog.NavigationLogChanged += new EventHandler(NavigationLog_NavigationLogChanged); + this.backButton.Enabled = false; + this.forwardButton.Enabled = false; + + uiDecoupleTimer.Tick += new EventHandler(uiDecoupleTimer_Tick); + uiDecoupleTimer.Interval = 100; + uiDecoupleTimer.Start(); + } + + void uiDecoupleTimer_Tick(object sender, EventArgs e) + { + if (selectionChanged.WaitOne(1)) + { + StringBuilder itemsText = new StringBuilder(); + + foreach (ShellObject item in explorerBrowser.SelectedItems) + { + if (item != null) + itemsText.AppendLine("\tItem = " + item.GetDisplayName(DisplayNameType.Default)); + } + + this.selectedItemsTextBox.Text = itemsText.ToString(); + this.itemsTabControl.TabPages[1].Text = "Selected Items (Count=" + explorerBrowser.SelectedItems.Count.ToString() + ")"; + } + + if (itemsChanged.WaitOne(1)) + { + // update items text box + StringBuilder itemsText = new StringBuilder(); + + foreach (ShellObject item in explorerBrowser.Items) + { + if (item != null) + itemsText.AppendLine("\tItem = " + item.GetDisplayName(DisplayNameType.Default)); + } + + this.itemsTextBox.Text = itemsText.ToString(); + this.itemsTabControl.TabPages[0].Text = "Items (Count=" + explorerBrowser.Items.Count.ToString() + ")"; + } + } + + void explorerBrowser_ViewEnumerationComplete(object sender, EventArgs e) + { + // This event is BeginInvoked to decouple the ExplorerBrowser UI from this UI + BeginInvoke(new MethodInvoker(delegate() + { + this.eventHistoryTextBox.Text = + this.eventHistoryTextBox.Text + + "View enumeration complete.\n"; + })); + + selectionChanged.Set(); + itemsChanged.Set(); + } + + + protected override void OnShown(EventArgs e) + { + base.OnShown(e); + explorerBrowser.Navigate((ShellObject)KnownFolders.Desktop); + } + + void NavigationLog_NavigationLogChanged(object sender, NavigationLogEventArgs args) + { + // This event is BeginInvoked to decouple the ExplorerBrowser UI from this UI + BeginInvoke(new MethodInvoker(delegate() + { + // calculate button states + if (args.CanNavigateBackwardChanged) + { + this.backButton.Enabled = explorerBrowser.NavigationLog.CanNavigateBackward; + } + if (args.CanNavigateForwardChanged) + { + this.forwardButton.Enabled = explorerBrowser.NavigationLog.CanNavigateForward; + } + + // update history combo box + if (args.LocationsChanged) + { + this.navigationHistoryCombo.Items.Clear(); + foreach (ShellObject shobj in this.explorerBrowser.NavigationLog.Locations) + { + this.navigationHistoryCombo.Items.Add(shobj.Name); + } + } + if (this.explorerBrowser.NavigationLog.CurrentLocationIndex == -1) + this.navigationHistoryCombo.Text = ""; + else + this.navigationHistoryCombo.SelectedIndex = this.explorerBrowser.NavigationLog.CurrentLocationIndex; + })); + } + + void explorerBrowser_SelectionChanged(object sender, EventArgs e) + { + selectionChanged.Set(); + } + + void explorerBrowser_ItemsChanged(object sender, EventArgs e) + { + itemsChanged.Set(); + } + + void explorerBrowser_NavigationComplete(object sender, NavigationCompleteEventArgs args) + { + // This event is BeginInvoked to decouple the ExplorerBrowser UI from this UI + BeginInvoke(new MethodInvoker(delegate() + { + // update event history text box + string location = (args.NewLocation == null) ? "(unknown)" : args.NewLocation.Name; + this.eventHistoryTextBox.Text = + this.eventHistoryTextBox.Text + + "Navigation completed. New Location = " + location + "\n"; + })); + } + + void explorerBrowser_NavigationFailed(object sender, NavigationFailedEventArgs args) + { + // This event is BeginInvoked to decouple the ExplorerBrowser UI from this UI + BeginInvoke(new MethodInvoker(delegate() + { + // update event history text box + string location = (args.FailedLocation == null) ? "(unknown)" : args.FailedLocation.Name; + this.eventHistoryTextBox.Text = + this.eventHistoryTextBox.Text + + "Navigation failed. Failed Location = " + location + "\n"; + + if (this.explorerBrowser.NavigationLog.CurrentLocationIndex == -1) + this.navigationHistoryCombo.Text = ""; + else + this.navigationHistoryCombo.SelectedIndex = this.explorerBrowser.NavigationLog.CurrentLocationIndex; + })); + } + + void explorerBrowser_NavigationPending(object sender, NavigationPendingEventArgs args) + { + // fail navigation if check selected (this must be synchronous) + args.Cancel = this.failNavigationCheckBox.Checked; + + + // This portion is BeginInvoked to decouple the ExplorerBrowser UI from this UI + BeginInvoke(new MethodInvoker(delegate() + { + // update event history text box + string message = ""; + string location = (args.PendingLocation == null) ? "(unknown)" : args.PendingLocation.Name; + if (args.Cancel) + { + message = "Navigation Failing. Pending Location = " + location; + } + else + { + message = "Navigation Pending. Pending Location = " + location; + } + this.eventHistoryTextBox.Text = + this.eventHistoryTextBox.Text + message + "\n"; + })); + } + + private void navigateButton_Click(object sender, EventArgs e) + { + try + { + // navigate to specific folder + explorerBrowser.Navigate(ShellFileSystemFolder.FromFolderPath(pathEdit.Text)); + } + catch (COMException) + { + MessageBox.Show("Navigation not possible."); + } + } + + private void filePathNavigate_Click(object sender, EventArgs e) + { + try + { + // Navigates to a specified file (must be a container file to work, i.e., ZIP, CAB) + this.explorerBrowser.Navigate(ShellFile.FromFilePath(this.filePathEdit.Text)); + } + catch (COMException) + { + MessageBox.Show("Navigation not possible."); + } + } + + private void knownFolderNavigate_Click(object sender, EventArgs e) + { + try + { + // Navigate to a known folder + IKnownFolder kf = + KnownFolderHelper.FromCanonicalName( + this.knownFolderCombo.Items[knownFolderCombo.SelectedIndex].ToString()); + + this.explorerBrowser.Navigate((ShellObject)kf); + } + catch (COMException) + { + MessageBox.Show("Navigation not possible."); + } + } + + private void forwardButton_Click(object sender, EventArgs e) + { + // Move forwards through navigation log + explorerBrowser.NavigateLogLocation(NavigationLogDirection.Forward); + } + + private void backButton_Click(object sender, EventArgs e) + { + // Move backwards through navigation log + explorerBrowser.NavigateLogLocation(NavigationLogDirection.Backward); + } + + private void navigationHistoryCombo_SelectedIndexChanged(object sender, EventArgs e) + { + // navigating to specific index in navigation log + explorerBrowser.NavigateLogLocation(this.navigationHistoryCombo.SelectedIndex); + } + + private void clearHistoryButton_Click(object sender, EventArgs e) + { + // clear navigation log + explorerBrowser.NavigationLog.ClearLog(); + } + + private void filePathEdit_TextChanged(object sender, EventArgs e) + { + filePathNavigate.Enabled = (filePathEdit.Text.Length > 0); + } + + private void pathEdit_TextChanged(object sender, EventArgs e) + { + navigateButton.Enabled = (pathEdit.Text.Length > 0); + } + + private void knownFolderCombo_SelectedIndexChanged(object sender, EventArgs e) + { + knownFolderNavigate.Enabled = (knownFolderCombo.Text.Length > 0); + } + } +} diff --git a/source/Samples/ExplorerBrowser/CS/WinForms/ExplorerBrowserTestForm.resx b/source/Samples/ExplorerBrowser/CS/WinForms/ExplorerBrowserTestForm.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WinForms/ExplorerBrowserTestForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/ExplorerBrowser/CS/WinForms/Program.cs b/source/Samples/ExplorerBrowser/CS/WinForms/Program.cs new file mode 100644 index 00000000..5d8f7b01 --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WinForms/Program.cs @@ -0,0 +1,21 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; + +namespace Microsoft.WindowsAPICodePack.Samples +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new ExplorerBrowserTestForm()); + } + } +} diff --git a/source/Samples/ExplorerBrowser/CS/WinForms/Properties/AssemblyInfo.cs b/source/Samples/ExplorerBrowser/CS/WinForms/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..50c15d8b --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WinForms/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ExplorerBrowser")] +[assembly: AssemblyDescription("ExplorerBrowser Demo")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("e4863e9d-cdb6-46f1-b1c9-8d1abd4480b2")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/ExplorerBrowser/CS/WinForms/Properties/Resources.Designer.cs b/source/Samples/ExplorerBrowser/CS/WinForms/Properties/Resources.Designer.cs new file mode 100644 index 00000000..8c6ce07d --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WinForms/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.1434 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ExplorerBrowser.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ExplorerBrowser.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/ExplorerBrowser/CS/WinForms/Properties/Resources.resx b/source/Samples/ExplorerBrowser/CS/WinForms/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WinForms/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/ExplorerBrowser/CS/WinForms/Properties/Settings.Designer.cs b/source/Samples/ExplorerBrowser/CS/WinForms/Properties/Settings.Designer.cs new file mode 100644 index 00000000..b9ba1abd --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WinForms/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.1434 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ExplorerBrowser.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/ExplorerBrowser/CS/WinForms/Properties/Settings.settings b/source/Samples/ExplorerBrowser/CS/WinForms/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/ExplorerBrowser/CS/WinForms/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/ExplorerBrowser/VB/ExplorerBrowser.sln b/source/Samples/ExplorerBrowser/VB/ExplorerBrowser.sln new file mode 100644 index 00000000..582fb8ba --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/ExplorerBrowser.sln @@ -0,0 +1,48 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ExplorerBrowserDemo", "WinForms\ExplorerBrowserDemo.vbproj", "{2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WPFExplorerBrowserDemo", "WPF\WPFExplorerBrowserDemo\WPFExplorerBrowserDemo.vbproj", "{85C322BA-C046-4416-87D2-D79AE92A1E65}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2AACFF7E-F4B1-44F6-92C6-20ACBB647A4D}.Release|Any CPU.Build.0 = Release|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.Debug|Any CPU.Build.0 = Debug|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.Release|Any CPU.ActiveCfg = Release|Any CPU + {85C322BA-C046-4416-87D2-D79AE92A1E65}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/Application.xaml b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/Application.xaml new file mode 100644 index 00000000..b3622e16 --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/Application.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/Application.xaml.vb b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/Application.xaml.vb new file mode 100644 index 00000000..c091e8d5 --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/Application.xaml.vb @@ -0,0 +1,17 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Configuration +Imports System.Windows + +Namespace Microsoft.WindowsAPICodePack.Samples + ''' + ''' Interaction logic for App.xaml + ''' + Partial Public Class App + Inherits Application + End Class +End Namespace diff --git a/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/ExplorerBrowserTestWindow.xaml b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/ExplorerBrowserTestWindow.xaml new file mode 100644 index 00000000..f6edf841 --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/ExplorerBrowserTestWindow.xaml @@ -0,0 +1,374 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + View Mode + + + + + + + + + + + + Navigation Options + + + Always Navigate + Navigate Once + + + + + + + + + + + + Pane Options + + + Advanced Query + Commands + Commands-Organize + Commands-View + Details + Navigation + Preview + Query + + + + + + + + + + + + Thumbnail Size + + + + + + + + + + + + + + + + Content Options + + + + + Align Left + Auto Arrange + CheckSelect + Extended Tiles + Full Row Select + Hide File Names + No Browser View State + No Column Header + No Header In All Views + No Icons + No Sub Folders + Single Click Activate + Single Selection + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/ExplorerBrowserTestWindow.xaml.vb b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/ExplorerBrowserTestWindow.xaml.vb new file mode 100644 index 00000000..2afbbf61 --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/ExplorerBrowserTestWindow.xaml.vb @@ -0,0 +1,111 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Windows +Imports System.Windows.Data +Imports System.Windows.Controls +Imports System.Linq + +Imports Microsoft.WindowsAPICodePack.Shell +Imports Microsoft.WindowsAPICodePack.Controls + +Namespace Microsoft.WindowsAPICodePack.Samples + ''' + ''' Interaction logic for Window1.xaml + ''' + Partial Public Class ExplorerBrowserTestWindow + Inherits Window + Public Sub New() + InitializeComponent() + + Dim sortedKnownFolders = From folder In KnownFolders.All _ + Where (folder.CanonicalName IsNot Nothing AndAlso folder.CanonicalName.Length > 0 AndAlso (CType(folder, ShellObject)).Thumbnail.BitmapSource IsNot Nothing AndAlso folder.CanonicalName.CompareTo("Network") <> 0 AndAlso folder.CanonicalName.CompareTo("NetHood") <> 0) _ + Order By folder.CanonicalName _ + Select folder + knownFoldersCombo.ItemsSource = sortedKnownFolders + + Dim viewModes = From mode In Enums.Get(Of ExplorerBrowserViewMode)() _ + Order By mode.ToString() _ + Select mode + ViewModeCombo.ItemsSource = viewModes + ViewModeCombo.Text = "Auto" + + AddHandler Loaded, AddressOf ExplorerBrowserTestWindow_Loaded + End Sub + + Private Sub ExplorerBrowserTestWindow_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' Navigate to initial folder + eb.ExplorerBrowserControl.Navigate(CType(KnownFolders.Desktop, ShellObject)) + End Sub + + Private Sub navigateFileButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + Try + Dim sf As ShellFile = ShellFile.FromFilePath(navigateFileTextBox.Text) + eb.ExplorerBrowserControl.Navigate(sf) + Catch + MessageBox.Show("Navigation not possible!") + End Try + End Sub + + Private Sub navigateFolderButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + Try + Dim sf As ShellFileSystemFolder = ShellFileSystemFolder.FromFolderPath(navigateFolderTextBox.Text) + eb.ExplorerBrowserControl.Navigate(sf) + Catch + MessageBox.Show("Navigation not possible!") + End Try + End Sub + + Private Sub navigateKnownFolderButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + Try + Dim kf As IKnownFolder = TryCast(knownFoldersCombo.Items(knownFoldersCombo.SelectedIndex), IKnownFolder) + eb.ExplorerBrowserControl.Navigate(CType(kf, ShellObject)) + Catch + MessageBox.Show("Navigation not possible!") + End Try + End Sub + + Private Sub ClearNavigationLog_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + eb.ExplorerBrowserControl.NavigationLog.ClearLog() + End Sub + End Class + + Public NotInheritable Class Enums + Private Sub New() + End Sub + Public Shared Function [Get](Of T)() As IEnumerable(Of T) + Return System.Enum.GetValues(GetType(T)).Cast(Of T)() + End Function + End Class + + Public Class TriCheckToPaneVisibilityState + Implements IValueConverter + #Region "IValueConverter Members" + + Public Function Convert(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.Convert + If value Is Nothing Then + Return PaneVisibilityState.DoNotCare + ElseIf CBool(value) = True Then + Return PaneVisibilityState.Show + Else + Return PaneVisibilityState.Hide + End If + End Function + + Public Function ConvertBack(ByVal value As Object, ByVal targetType As Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack + If CType(value, PaneVisibilityState) = PaneVisibilityState.DoNotCare Then + Return Nothing + ElseIf CType(value, PaneVisibilityState) = PaneVisibilityState.Show Then + Return True + Else + Return False + End If + End Function + + #End Region + End Class + +End Namespace diff --git a/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/My Project/AssemblyInfo.vb b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..03783193 --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/My Project/AssemblyInfo.vb @@ -0,0 +1,53 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Resources +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + + '(used if a resource is not found in the page, + ' or application resource dictionaries) + '(used if a resource is not found in the page, + ' app, or any theme specific resource dictionaries) + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' + + diff --git a/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/My Project/Resources.Designer.vb b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/My Project/Resources.Designer.vb new file mode 100644 index 00000000..e96b8aff --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/My Project/Resources.resx b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/My Project/Settings.Designer.vb b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/My Project/Settings.Designer.vb new file mode 100644 index 00000000..f2ffe239 --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class Settings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()),Settings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As Settings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Settings + Get + Return Global.Settings.Default + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/My Project/Settings.settings b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/My Project/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/WPFExplorerBrowserDemo.vbproj b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/WPFExplorerBrowserDemo.vbproj new file mode 100644 index 00000000..d02a50bc --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WPF/WPFExplorerBrowserDemo/WPFExplorerBrowserDemo.vbproj @@ -0,0 +1,145 @@ + + + + Debug + AnyCPU + {222AD218-65BD-4F71-AF7F-8EA742DF645F} + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + WPFExplorerBrowserDemo + WinExe + 3.0 + v3.5 + On + Binary + Off + On + 512 + + + + + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + false + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + .\bin\Debug\ + true + true + prompt + AllRules.ruleset + + + + 3.0 + + + 3.0 + + + + 3.5 + + + + 3.0 + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + Application.xaml + Code + + + ExplorerBrowserTestWindow.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + Designer + My.Resources + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + \ No newline at end of file diff --git a/source/Samples/ExplorerBrowser/VB/WinForms/ExplorerBrowserDemo.vbproj b/source/Samples/ExplorerBrowser/VB/WinForms/ExplorerBrowserDemo.vbproj new file mode 100644 index 00000000..778d1539 --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WinForms/ExplorerBrowserDemo.vbproj @@ -0,0 +1,132 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {63451B99-617D-40BF-88AE-F5E8643F9FBA} + WinExe + + + ExplorerBrowser + v3.5 + On + Binary + Off + On + 512 + + + + + + + + + 3.5 + + + true + full + false + bin\Debug\ + true + true + prompt + true + + AllRules.ruleset + + + pdbonly + true + bin\Release\ + false + true + prompt + + AllRules.ruleset + + + + 3.0 + + + 3.0 + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + 3.0 + + + 3.0 + + + + + Form + + + ExplorerBrowserTestForm.vb + + + + + ExplorerBrowserTestForm.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + Designer + My.Resources + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + True + Settings.settings + True + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + \ No newline at end of file diff --git a/source/Samples/ExplorerBrowser/VB/WinForms/ExplorerBrowserTestForm.Designer.vb b/source/Samples/ExplorerBrowser/VB/WinForms/ExplorerBrowserTestForm.Designer.vb new file mode 100644 index 00000000..680f9709 --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WinForms/ExplorerBrowserTestForm.Designer.vb @@ -0,0 +1,472 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + + +Imports Microsoft.VisualBasic +Imports System +Namespace Microsoft.WindowsAPICodePack.Samples + Partial Public Class ExplorerBrowserTestForm + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Me.label2 = New System.Windows.Forms.Label + Me.label3 = New System.Windows.Forms.Label + Me.itemsTextBox = New System.Windows.Forms.RichTextBox + Me.label7 = New System.Windows.Forms.Label + Me.filePathNavigate = New System.Windows.Forms.Button + Me.filePathEdit = New System.Windows.Forms.TextBox + Me.knownFolderNavigate = New System.Windows.Forms.Button + Me.label6 = New System.Windows.Forms.Label + Me.knownFolderCombo = New System.Windows.Forms.ComboBox + Me.navigateButton = New System.Windows.Forms.Button + Me.label5 = New System.Windows.Forms.Label + Me.pathEdit = New System.Windows.Forms.TextBox + Me.splitContainer1 = New System.Windows.Forms.SplitContainer + Me.visibilityPropertyGrid = New System.Windows.Forms.PropertyGrid + Me.contentPropertyGrid = New System.Windows.Forms.PropertyGrid + Me.navigationPropertyGrid = New System.Windows.Forms.PropertyGrid + Me.splitContainer2 = New System.Windows.Forms.SplitContainer + Me.clearHistoryButton = New System.Windows.Forms.Button + Me.forwardButton = New System.Windows.Forms.Button + Me.navigationHistoryCombo = New System.Windows.Forms.ComboBox + Me.backButton = New System.Windows.Forms.Button + Me.failNavigationCheckBox = New System.Windows.Forms.CheckBox + Me.splitContainer3 = New System.Windows.Forms.SplitContainer + Me.explorerBrowser = New Microsoft.WindowsAPICodePack.Controls.WindowsForms.ExplorerBrowser + Me.itemsTabControl = New System.Windows.Forms.TabControl + Me.tabPage1 = New System.Windows.Forms.TabPage + Me.tabPage2 = New System.Windows.Forms.TabPage + Me.selectedItemsTextBox = New System.Windows.Forms.RichTextBox + Me.tabPage3 = New System.Windows.Forms.TabPage + Me.eventHistoryTextBox = New System.Windows.Forms.RichTextBox + Me.Label1 = New System.Windows.Forms.Label + Me.splitContainer1.Panel1.SuspendLayout() + Me.splitContainer1.Panel2.SuspendLayout() + Me.splitContainer1.SuspendLayout() + Me.splitContainer2.Panel1.SuspendLayout() + Me.splitContainer2.Panel2.SuspendLayout() + Me.splitContainer2.SuspendLayout() + Me.splitContainer3.Panel1.SuspendLayout() + Me.splitContainer3.Panel2.SuspendLayout() + Me.splitContainer3.SuspendLayout() + Me.itemsTabControl.SuspendLayout() + Me.tabPage1.SuspendLayout() + Me.tabPage2.SuspendLayout() + Me.tabPage3.SuspendLayout() + Me.SuspendLayout() + ' + 'label2 + ' + Me.label2.AutoSize = True + Me.label2.Location = New System.Drawing.Point(3, 494) + Me.label2.Name = "label2" + Me.label2.Size = New System.Drawing.Size(83, 13) + Me.label2.TabIndex = 8 + Me.label2.Text = "Content Options" + ' + 'label3 + ' + Me.label3.AutoSize = True + Me.label3.Location = New System.Drawing.Point(3, 12) + Me.label3.Name = "label3" + Me.label3.Size = New System.Drawing.Size(97, 13) + Me.label3.TabIndex = 9 + Me.label3.Text = "Navigation Options" + ' + 'itemsTextBox + ' + Me.itemsTextBox.Dock = System.Windows.Forms.DockStyle.Fill + Me.itemsTextBox.Location = New System.Drawing.Point(3, 3) + Me.itemsTextBox.Name = "itemsTextBox" + Me.itemsTextBox.Size = New System.Drawing.Size(602, 158) + Me.itemsTextBox.TabIndex = 0 + Me.itemsTextBox.Text = "" + ' + 'label7 + ' + Me.label7.AutoSize = True + Me.label7.Location = New System.Drawing.Point(30, 11) + Me.label7.Name = "label7" + Me.label7.Size = New System.Drawing.Size(51, 13) + Me.label7.TabIndex = 8 + Me.label7.Text = "File Path:" + ' + 'filePathNavigate + ' + Me.filePathNavigate.Enabled = False + Me.filePathNavigate.Location = New System.Drawing.Point(464, 5) + Me.filePathNavigate.Name = "filePathNavigate" + Me.filePathNavigate.Size = New System.Drawing.Size(126, 22) + Me.filePathNavigate.TabIndex = 7 + Me.filePathNavigate.Text = "Navigate File" + Me.filePathNavigate.UseVisualStyleBackColor = True + ' + 'filePathEdit + ' + Me.filePathEdit.Location = New System.Drawing.Point(87, 7) + Me.filePathEdit.Name = "filePathEdit" + Me.filePathEdit.Size = New System.Drawing.Size(359, 20) + Me.filePathEdit.TabIndex = 6 + ' + 'knownFolderNavigate + ' + Me.knownFolderNavigate.Enabled = False + Me.knownFolderNavigate.Location = New System.Drawing.Point(464, 60) + Me.knownFolderNavigate.Name = "knownFolderNavigate" + Me.knownFolderNavigate.Size = New System.Drawing.Size(126, 23) + Me.knownFolderNavigate.TabIndex = 5 + Me.knownFolderNavigate.Text = "Navigate Known Folder" + Me.knownFolderNavigate.UseVisualStyleBackColor = True + ' + 'label6 + ' + Me.label6.AutoSize = True + Me.label6.Location = New System.Drawing.Point(6, 66) + Me.label6.Name = "label6" + Me.label6.Size = New System.Drawing.Size(75, 13) + Me.label6.TabIndex = 4 + Me.label6.Text = "Known Folder:" + ' + 'knownFolderCombo + ' + Me.knownFolderCombo.FormattingEnabled = True + Me.knownFolderCombo.Location = New System.Drawing.Point(87, 63) + Me.knownFolderCombo.Name = "knownFolderCombo" + Me.knownFolderCombo.Size = New System.Drawing.Size(359, 21) + Me.knownFolderCombo.TabIndex = 3 + ' + 'navigateButton + ' + Me.navigateButton.Enabled = False + Me.navigateButton.Location = New System.Drawing.Point(464, 32) + Me.navigateButton.Name = "navigateButton" + Me.navigateButton.Size = New System.Drawing.Size(127, 23) + Me.navigateButton.TabIndex = 2 + Me.navigateButton.Text = "Navigate Path" + Me.navigateButton.UseVisualStyleBackColor = True + ' + 'label5 + ' + Me.label5.AutoSize = True + Me.label5.Location = New System.Drawing.Point(17, 38) + Me.label5.Name = "label5" + Me.label5.Size = New System.Drawing.Size(64, 13) + Me.label5.TabIndex = 1 + Me.label5.Text = "Folder Path:" + ' + 'pathEdit + ' + Me.pathEdit.Location = New System.Drawing.Point(87, 34) + Me.pathEdit.Name = "pathEdit" + Me.pathEdit.Size = New System.Drawing.Size(359, 20) + Me.pathEdit.TabIndex = 0 + ' + 'splitContainer1 + ' + Me.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill + Me.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel1 + Me.splitContainer1.IsSplitterFixed = True + Me.splitContainer1.Location = New System.Drawing.Point(0, 0) + Me.splitContainer1.Name = "splitContainer1" + ' + 'splitContainer1.Panel1 + ' + Me.splitContainer1.Panel1.Controls.Add(Me.Label1) + Me.splitContainer1.Panel1.Controls.Add(Me.visibilityPropertyGrid) + Me.splitContainer1.Panel1.Controls.Add(Me.contentPropertyGrid) + Me.splitContainer1.Panel1.Controls.Add(Me.navigationPropertyGrid) + Me.splitContainer1.Panel1.Controls.Add(Me.label2) + Me.splitContainer1.Panel1.Controls.Add(Me.label3) + ' + 'splitContainer1.Panel2 + ' + Me.splitContainer1.Panel2.Controls.Add(Me.splitContainer2) + Me.splitContainer1.Size = New System.Drawing.Size(841, 904) + Me.splitContainer1.SplitterDistance = 221 + Me.splitContainer1.TabIndex = 11 + ' + 'visibilityPropertyGrid + ' + Me.visibilityPropertyGrid.Location = New System.Drawing.Point(6, 230) + Me.visibilityPropertyGrid.Name = "visibilityPropertyGrid" + Me.visibilityPropertyGrid.Size = New System.Drawing.Size(213, 248) + Me.visibilityPropertyGrid.TabIndex = 13 + ' + 'contentPropertyGrid + ' + Me.contentPropertyGrid.Location = New System.Drawing.Point(6, 510) + Me.contentPropertyGrid.Name = "contentPropertyGrid" + Me.contentPropertyGrid.Size = New System.Drawing.Size(212, 391) + Me.contentPropertyGrid.TabIndex = 12 + ' + 'navigationPropertyGrid + ' + Me.navigationPropertyGrid.Location = New System.Drawing.Point(6, 28) + Me.navigationPropertyGrid.Name = "navigationPropertyGrid" + Me.navigationPropertyGrid.Size = New System.Drawing.Size(212, 183) + Me.navigationPropertyGrid.TabIndex = 11 + ' + 'splitContainer2 + ' + Me.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill + Me.splitContainer2.FixedPanel = System.Windows.Forms.FixedPanel.Panel1 + Me.splitContainer2.IsSplitterFixed = True + Me.splitContainer2.Location = New System.Drawing.Point(0, 0) + Me.splitContainer2.Name = "splitContainer2" + Me.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal + ' + 'splitContainer2.Panel1 + ' + Me.splitContainer2.Panel1.Controls.Add(Me.clearHistoryButton) + Me.splitContainer2.Panel1.Controls.Add(Me.forwardButton) + Me.splitContainer2.Panel1.Controls.Add(Me.navigationHistoryCombo) + Me.splitContainer2.Panel1.Controls.Add(Me.backButton) + Me.splitContainer2.Panel1.Controls.Add(Me.failNavigationCheckBox) + Me.splitContainer2.Panel1.Controls.Add(Me.label5) + Me.splitContainer2.Panel1.Controls.Add(Me.pathEdit) + Me.splitContainer2.Panel1.Controls.Add(Me.label7) + Me.splitContainer2.Panel1.Controls.Add(Me.navigateButton) + Me.splitContainer2.Panel1.Controls.Add(Me.filePathNavigate) + Me.splitContainer2.Panel1.Controls.Add(Me.knownFolderCombo) + Me.splitContainer2.Panel1.Controls.Add(Me.filePathEdit) + Me.splitContainer2.Panel1.Controls.Add(Me.label6) + Me.splitContainer2.Panel1.Controls.Add(Me.knownFolderNavigate) + ' + 'splitContainer2.Panel2 + ' + Me.splitContainer2.Panel2.Controls.Add(Me.splitContainer3) + Me.splitContainer2.Size = New System.Drawing.Size(616, 904) + Me.splitContainer2.SplitterDistance = 139 + Me.splitContainer2.TabIndex = 0 + ' + 'clearHistoryButton + ' + Me.clearHistoryButton.Location = New System.Drawing.Point(466, 112) + Me.clearHistoryButton.Name = "clearHistoryButton" + Me.clearHistoryButton.Size = New System.Drawing.Size(125, 23) + Me.clearHistoryButton.TabIndex = 14 + Me.clearHistoryButton.Text = "Clear History" + Me.clearHistoryButton.UseVisualStyleBackColor = True + ' + 'forwardButton + ' + Me.forwardButton.Font = New System.Drawing.Font("Comic Sans MS", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.forwardButton.Location = New System.Drawing.Point(62, 87) + Me.forwardButton.Name = "forwardButton" + Me.forwardButton.Size = New System.Drawing.Size(48, 48) + Me.forwardButton.TabIndex = 13 + Me.forwardButton.Text = ">" + Me.forwardButton.UseVisualStyleBackColor = True + ' + 'navigationHistoryCombo + ' + Me.navigationHistoryCombo.FormattingEnabled = True + Me.navigationHistoryCombo.Location = New System.Drawing.Point(129, 99) + Me.navigationHistoryCombo.Name = "navigationHistoryCombo" + Me.navigationHistoryCombo.Size = New System.Drawing.Size(317, 21) + Me.navigationHistoryCombo.TabIndex = 12 + ' + 'backButton + ' + Me.backButton.Font = New System.Drawing.Font("Comic Sans MS", 18.0!, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) + Me.backButton.Location = New System.Drawing.Point(8, 87) + Me.backButton.Name = "backButton" + Me.backButton.Size = New System.Drawing.Size(48, 48) + Me.backButton.TabIndex = 10 + Me.backButton.Text = "<" + Me.backButton.UseVisualStyleBackColor = True + ' + 'failNavigationCheckBox + ' + Me.failNavigationCheckBox.AutoSize = True + Me.failNavigationCheckBox.Location = New System.Drawing.Point(466, 92) + Me.failNavigationCheckBox.Name = "failNavigationCheckBox" + Me.failNavigationCheckBox.Size = New System.Drawing.Size(138, 17) + Me.failNavigationCheckBox.TabIndex = 9 + Me.failNavigationCheckBox.Text = "Force Navigation to Fail" + Me.failNavigationCheckBox.UseVisualStyleBackColor = True + ' + 'splitContainer3 + ' + Me.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill + Me.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel2 + Me.splitContainer3.IsSplitterFixed = True + Me.splitContainer3.Location = New System.Drawing.Point(0, 0) + Me.splitContainer3.Name = "splitContainer3" + Me.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal + ' + 'splitContainer3.Panel1 + ' + Me.splitContainer3.Panel1.Controls.Add(Me.explorerBrowser) + ' + 'splitContainer3.Panel2 + ' + Me.splitContainer3.Panel2.Controls.Add(Me.itemsTabControl) + Me.splitContainer3.Size = New System.Drawing.Size(616, 761) + Me.splitContainer3.SplitterDistance = 567 + Me.splitContainer3.TabIndex = 0 + ' + 'explorerBrowser + ' + Me.explorerBrowser.Dock = System.Windows.Forms.DockStyle.Fill + Me.explorerBrowser.Location = New System.Drawing.Point(0, 0) + Me.explorerBrowser.Name = "explorerBrowser" + Me.explorerBrowser.PropertyBagName = "Microsoft.WindowsAPICodePack.Controls.WindowsForms.ExplorerBrowser" + Me.explorerBrowser.Size = New System.Drawing.Size(616, 567) + Me.explorerBrowser.TabIndex = 0 + ' + 'itemsTabControl + ' + Me.itemsTabControl.Controls.Add(Me.tabPage1) + Me.itemsTabControl.Controls.Add(Me.tabPage2) + Me.itemsTabControl.Controls.Add(Me.tabPage3) + Me.itemsTabControl.Dock = System.Windows.Forms.DockStyle.Fill + Me.itemsTabControl.Location = New System.Drawing.Point(0, 0) + Me.itemsTabControl.Name = "itemsTabControl" + Me.itemsTabControl.SelectedIndex = 0 + Me.itemsTabControl.Size = New System.Drawing.Size(616, 190) + Me.itemsTabControl.TabIndex = 1 + ' + 'tabPage1 + ' + Me.tabPage1.Controls.Add(Me.itemsTextBox) + Me.tabPage1.Location = New System.Drawing.Point(4, 22) + Me.tabPage1.Name = "tabPage1" + Me.tabPage1.Padding = New System.Windows.Forms.Padding(3) + Me.tabPage1.Size = New System.Drawing.Size(608, 164) + Me.tabPage1.TabIndex = 0 + Me.tabPage1.Text = "Items (Count=0)" + Me.tabPage1.UseVisualStyleBackColor = True + ' + 'tabPage2 + ' + Me.tabPage2.Controls.Add(Me.selectedItemsTextBox) + Me.tabPage2.Location = New System.Drawing.Point(4, 22) + Me.tabPage2.Name = "tabPage2" + Me.tabPage2.Padding = New System.Windows.Forms.Padding(3) + Me.tabPage2.Size = New System.Drawing.Size(608, 164) + Me.tabPage2.TabIndex = 1 + Me.tabPage2.Text = "Selected Items (Count=0)" + Me.tabPage2.UseVisualStyleBackColor = True + ' + 'selectedItemsTextBox + ' + Me.selectedItemsTextBox.Dock = System.Windows.Forms.DockStyle.Fill + Me.selectedItemsTextBox.Location = New System.Drawing.Point(3, 3) + Me.selectedItemsTextBox.Name = "selectedItemsTextBox" + Me.selectedItemsTextBox.Size = New System.Drawing.Size(602, 158) + Me.selectedItemsTextBox.TabIndex = 0 + Me.selectedItemsTextBox.Text = "" + ' + 'tabPage3 + ' + Me.tabPage3.Controls.Add(Me.eventHistoryTextBox) + Me.tabPage3.Location = New System.Drawing.Point(4, 22) + Me.tabPage3.Name = "tabPage3" + Me.tabPage3.Size = New System.Drawing.Size(608, 164) + Me.tabPage3.TabIndex = 2 + Me.tabPage3.Text = "Event History" + Me.tabPage3.UseVisualStyleBackColor = True + ' + 'eventHistoryTextBox + ' + Me.eventHistoryTextBox.Dock = System.Windows.Forms.DockStyle.Fill + Me.eventHistoryTextBox.Location = New System.Drawing.Point(0, 0) + Me.eventHistoryTextBox.Name = "eventHistoryTextBox" + Me.eventHistoryTextBox.Size = New System.Drawing.Size(608, 164) + Me.eventHistoryTextBox.TabIndex = 0 + Me.eventHistoryTextBox.Text = "" + ' + 'Label1 + ' + Me.Label1.AutoSize = True + Me.Label1.Location = New System.Drawing.Point(3, 214) + Me.Label1.Name = "Label1" + Me.Label1.Size = New System.Drawing.Size(71, 13) + Me.Label1.TabIndex = 14 + Me.Label1.Text = "Pane Options" + ' + 'ExplorerBrowserTestForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(841, 904) + Me.Controls.Add(Me.splitContainer1) + Me.Name = "ExplorerBrowserTestForm" + Me.Text = "Explorer Browser Demo" + Me.splitContainer1.Panel1.ResumeLayout(False) + Me.splitContainer1.Panel1.PerformLayout() + Me.splitContainer1.Panel2.ResumeLayout(False) + Me.splitContainer1.ResumeLayout(False) + Me.splitContainer2.Panel1.ResumeLayout(False) + Me.splitContainer2.Panel1.PerformLayout() + Me.splitContainer2.Panel2.ResumeLayout(False) + Me.splitContainer2.ResumeLayout(False) + Me.splitContainer3.Panel1.ResumeLayout(False) + Me.splitContainer3.Panel2.ResumeLayout(False) + Me.splitContainer3.ResumeLayout(False) + Me.itemsTabControl.ResumeLayout(False) + Me.tabPage1.ResumeLayout(False) + Me.tabPage2.ResumeLayout(False) + Me.tabPage3.ResumeLayout(False) + Me.ResumeLayout(False) + + End Sub + + #End Region + + Private label2 As System.Windows.Forms.Label + Private label3 As System.Windows.Forms.Label + Private WithEvents navigateButton As System.Windows.Forms.Button + Private label5 As System.Windows.Forms.Label + Private WithEvents pathEdit As System.Windows.Forms.TextBox + Private WithEvents knownFolderNavigate As System.Windows.Forms.Button + Private label6 As System.Windows.Forms.Label + Private WithEvents knownFolderCombo As System.Windows.Forms.ComboBox + Private label7 As System.Windows.Forms.Label + Private WithEvents filePathNavigate As System.Windows.Forms.Button + Private WithEvents filePathEdit As System.Windows.Forms.TextBox + Private itemsTextBox As System.Windows.Forms.RichTextBox + Private splitContainer1 As System.Windows.Forms.SplitContainer + Private splitContainer2 As System.Windows.Forms.SplitContainer + Private splitContainer3 As System.Windows.Forms.SplitContainer + Private explorerBrowser As Microsoft.WindowsAPICodePack.Controls.WindowsForms.ExplorerBrowser + Private navigationPropertyGrid As System.Windows.Forms.PropertyGrid + Private contentPropertyGrid As System.Windows.Forms.PropertyGrid + Private visibilityPropertyGrid As System.Windows.Forms.PropertyGrid + Private failNavigationCheckBox As System.Windows.Forms.CheckBox + Private itemsTabControl As System.Windows.Forms.TabControl + Private tabPage1 As System.Windows.Forms.TabPage + Private tabPage2 As System.Windows.Forms.TabPage + Private selectedItemsTextBox As System.Windows.Forms.RichTextBox + Private WithEvents forwardButton As System.Windows.Forms.Button + Private WithEvents navigationHistoryCombo As System.Windows.Forms.ComboBox + Private WithEvents backButton As System.Windows.Forms.Button + Private tabPage3 As System.Windows.Forms.TabPage + Private eventHistoryTextBox As System.Windows.Forms.RichTextBox + Private WithEvents clearHistoryButton As System.Windows.Forms.Button + Friend WithEvents Label1 As System.Windows.Forms.Label + + End Class +End Namespace + diff --git a/source/Samples/ExplorerBrowser/VB/WinForms/ExplorerBrowserTestForm.resx b/source/Samples/ExplorerBrowser/VB/WinForms/ExplorerBrowserTestForm.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WinForms/ExplorerBrowserTestForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/ExplorerBrowser/VB/WinForms/ExplorerBrowserTestForm.vb b/source/Samples/ExplorerBrowser/VB/WinForms/ExplorerBrowserTestForm.vb new file mode 100644 index 00000000..90fdb6e6 --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WinForms/ExplorerBrowserTestForm.vb @@ -0,0 +1,254 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +Imports System.Data +Imports System.Drawing +Imports System.Linq +Imports System.Text +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.Shell +Imports System.Windows.Forms.Integration +Imports System.Reflection +Imports System.Runtime.InteropServices +Imports Microsoft.WindowsAPICodePack.Controls +Imports System.Threading + +Namespace Microsoft.WindowsAPICodePack.Samples + Partial Public Class ExplorerBrowserTestForm + Inherits Form + Dim uiDecoupleTimer As New System.Windows.Forms.Timer + Dim selectionChanged As New AutoResetEvent(False) + Dim itemsChanged As New AutoResetEvent(False) + + Public Sub New() + InitializeComponent() + + ' initialize known folder combo box + Dim knownFolderList As New List(Of String)() + For Each folder As IKnownFolder In KnownFolders.All + knownFolderList.Add(folder.CanonicalName) + Next folder + knownFolderList.Sort() + knownFolderCombo.Items.AddRange(knownFolderList.ToArray()) + + ' initial property grids + navigationPropertyGrid.SelectedObject = explorerBrowser.NavigationOptions + visibilityPropertyGrid.SelectedObject = explorerBrowser.NavigationOptions.PaneVisibility + contentPropertyGrid.SelectedObject = explorerBrowser.ContentOptions + + ' setup ExplorerBrowser navigation events + AddHandler explorerBrowser.NavigationPending, AddressOf explorerBrowser_NavigationPending + AddHandler explorerBrowser.NavigationFailed, AddressOf explorerBrowser_NavigationFailed + AddHandler explorerBrowser.NavigationComplete, AddressOf explorerBrowser_NavigationComplete + AddHandler explorerBrowser.ItemsChanged, AddressOf explorerBrowser_ItemsChanged + AddHandler explorerBrowser.SelectionChanged, AddressOf explorerBrowser_SelectionChanged + AddHandler explorerBrowser.ViewEnumerationComplete, AddressOf explorerBrowser_ViewEnumerationComplete + + + ' set up Navigation log event and button state + AddHandler explorerBrowser.NavigationLog.NavigationLogChanged, AddressOf NavigationLog_NavigationLogChanged + Me.backButton.Enabled = False + Me.forwardButton.Enabled = False + + AddHandler uiDecoupleTimer.Tick, AddressOf uiDecoupleTimer_Tick + Me.uiDecoupleTimer.Interval = 100 + uiDecoupleTimer.Start() + + End Sub + + Private Sub uiDecoupleTimer_Tick( ByVal sender As Object, ByVal args As EventArgs ) + If (selectionChanged.WaitOne(1)) Then + Dim itemsText As New StringBuilder() + For Each item As ShellObject In explorerBrowser.SelectedItems + If item IsNot Nothing Then + itemsText.AppendLine(Constants.vbTab & "Item = " & item.GetDisplayName(DisplayNameType.Default)) + End If + Next item + Me.selectedItemsTextBox.Text = itemsText.ToString() + Me.itemsTabControl.TabPages(1).Text = "Selected Items (Count=" & explorerBrowser.SelectedItems.Count.ToString() & ")" + End If + + If (itemsChanged.WaitOne(1)) Then + Dim itemsText As New StringBuilder() + For Each item As ShellObject In explorerBrowser.Items + If item IsNot Nothing Then + itemsText.AppendLine(Constants.vbTab & "Item = " & item.GetDisplayName(DisplayNameType.Default)) + End If + Next item + Me.itemsTextBox.Text = itemsText.ToString() + Me.itemsTabControl.TabPages(0).Text = "Items (Count=" & explorerBrowser.Items.Count.ToString() & ")" + End If + End Sub + + Private Sub explorerBrowser_ViewEnumerationComplete(ByVal sender As Object, ByVal args As EventArgs) + ' This event is BeginInvoked to decouple the ExplorerBrowser UI from this UI + BeginInvoke(New MethodInvoker(Function() AnonymousMethod2())) + + selectionChanged.Set() + itemsChanged.Set() + End Sub + Private Function AnonymousMethod2() As Object + Me.eventHistoryTextBox.Text = Me.eventHistoryTextBox.Text & "View enumeration complete." & Constants.vbLf + Return Nothing + End Function + + + Protected Overrides Sub OnShown(ByVal e As EventArgs) + MyBase.OnShown(e) + explorerBrowser.Navigate(CType(KnownFolders.Desktop, ShellObject)) + End Sub + + Private Sub NavigationLog_NavigationLogChanged(ByVal sender As Object, ByVal args As NavigationLogEventArgs) + ' This event is BeginInvoked to decouple the ExplorerBrowser UI from this UI + ' calculate button states + ' update history combo box + BeginInvoke(New MethodInvoker(Function() AnonymousMethod1(args))) + End Sub + + Private Function AnonymousMethod1(ByVal args As NavigationLogEventArgs) As Object + If args.CanNavigateBackwardChanged Then + Me.backButton.Enabled = explorerBrowser.NavigationLog.CanNavigateBackward + End If + If args.CanNavigateForwardChanged Then + Me.forwardButton.Enabled = explorerBrowser.NavigationLog.CanNavigateForward + End If + If args.LocationsChanged Then + Me.navigationHistoryCombo.Items.Clear() + For Each shobj As ShellObject In Me.explorerBrowser.NavigationLog.Locations + Me.navigationHistoryCombo.Items.Add(shobj.Name) + Next shobj + End If + If Me.explorerBrowser.NavigationLog.CurrentLocationIndex = -1 Then + Me.navigationHistoryCombo.Text = "" + Else + Me.navigationHistoryCombo.SelectedIndex = Me.explorerBrowser.NavigationLog.CurrentLocationIndex + End If + Return Nothing + End Function + + Private Sub explorerBrowser_SelectionChanged(ByVal sender As Object, ByVal e As EventArgs) + selectionChanged.Set() + End Sub + + Private Sub explorerBrowser_ItemsChanged(ByVal sender As Object, ByVal e As EventArgs) + itemsChanged.Set() + End Sub + + Private Sub explorerBrowser_NavigationComplete(ByVal sender As Object, ByVal args As NavigationCompleteEventArgs) + ' This event is BeginInvoked to decouple the ExplorerBrowser UI from this UI + ' update event history text box + BeginInvoke(New MethodInvoker(Function() AnonymousMethod4(args))) + End Sub + + Private Function AnonymousMethod4(ByVal args As NavigationCompleteEventArgs) As Object + Dim location As String = If((args.NewLocation Is Nothing), "(unknown)", args.NewLocation.Name) + Me.eventHistoryTextBox.Text = Me.eventHistoryTextBox.Text & "Navigation completed. New Location = " & location & Constants.vbLf + Return Nothing + End Function + + Private Sub explorerBrowser_NavigationFailed(ByVal sender As Object, ByVal args As NavigationFailedEventArgs) + ' This event is BeginInvoked to decouple the ExplorerBrowser UI from this UI + ' update event history text box + BeginInvoke(New MethodInvoker(Function() AnonymousMethod5(args))) + End Sub + + Private Function AnonymousMethod5(ByVal args As NavigationFailedEventArgs) As Object + Dim location As String = If((args.FailedLocation Is Nothing), "(unknown)", args.FailedLocation.Name) + Me.eventHistoryTextBox.Text = Me.eventHistoryTextBox.Text & "Navigation failed. Failed Location = " & location & Constants.vbLf + If Me.explorerBrowser.NavigationLog.CurrentLocationIndex = -1 Then + Me.navigationHistoryCombo.Text = "" + Else + Me.navigationHistoryCombo.SelectedIndex = Me.explorerBrowser.NavigationLog.CurrentLocationIndex + End If + Return Nothing + End Function + + Private Sub explorerBrowser_NavigationPending(ByVal sender As Object, ByVal args As NavigationPendingEventArgs) + ' fail navigation if check selected (this must be synchronous) + args.Cancel = Me.failNavigationCheckBox.Checked + + + ' This portion is BeginInvoked to decouple the ExplorerBrowser UI from this UI + ' update event history text box + BeginInvoke(New MethodInvoker(Function() AnonymousMethod6(args))) + End Sub + + Private Function AnonymousMethod6(ByVal args As NavigationPendingEventArgs) As Object + Dim message As String = "" + Dim location As String = If((args.PendingLocation Is Nothing), "(unknown)", args.PendingLocation.Name) + If args.Cancel Then + message = "Navigation Failing. Pending Location = " & location + Else + message = "Navigation Pending. Pending Location = " & location + End If + Me.eventHistoryTextBox.Text = Me.eventHistoryTextBox.Text & message & Constants.vbLf + Return Nothing + End Function + + Private Sub navigateButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles navigateButton.Click + Try + ' navigate to specific folder + explorerBrowser.Navigate(ShellFileSystemFolder.FromFolderPath(pathEdit.Text)) + Catch e1 As COMException + MessageBox.Show("Navigation not possible.") + End Try + End Sub + + Private Sub filePathNavigate_Click(ByVal sender As Object, ByVal e As EventArgs) Handles filePathNavigate.Click + Try + ' Navigates to a specified file (must be a container file to work, i.e., ZIP, CAB) + Me.explorerBrowser.Navigate(ShellFile.FromFilePath(Me.filePathEdit.Text)) + Catch e1 As COMException + MessageBox.Show("Navigation not possible.") + End Try + End Sub + + Private Sub knownFolderNavigate_Click(ByVal sender As Object, ByVal e As EventArgs) Handles knownFolderNavigate.Click + Try + ' Navigate to a known folder + Dim kf As IKnownFolder = KnownFolderHelper.FromCanonicalName(Me.knownFolderCombo.Items(knownFolderCombo.SelectedIndex).ToString()) + + Me.explorerBrowser.Navigate(CType(kf, ShellObject)) + Catch e1 As COMException + MessageBox.Show("Navigation not possible.") + End Try + End Sub + + Private Sub forwardButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles forwardButton.Click + ' Move forwards through navigation log + explorerBrowser.NavigateLogLocation(NavigationLogDirection.Forward) + End Sub + + Private Sub backButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles backButton.Click + ' Move backwards through navigation log + explorerBrowser.NavigateLogLocation(NavigationLogDirection.Backward) + End Sub + + Private Sub navigationHistoryCombo_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles navigationHistoryCombo.SelectedIndexChanged + ' navigating to specific index in navigation log + explorerBrowser.NavigateLogLocation(Me.navigationHistoryCombo.SelectedIndex) + End Sub + + Private Sub clearHistoryButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles clearHistoryButton.Click + ' clear navigation log + explorerBrowser.NavigationLog.ClearLog() + End Sub + + Private Sub filePathEdit_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles filePathEdit.TextChanged + filePathNavigate.Enabled = (filePathEdit.Text.Length > 0) + End Sub + + Private Sub pathEdit_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pathEdit.TextChanged + navigateButton.Enabled = (pathEdit.Text.Length > 0) + End Sub + + Private Sub knownFolderCombo_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles knownFolderCombo.TextChanged + knownFolderNavigate.Enabled = (knownFolderCombo.Text.Length > 0) + End Sub + + End Class +End Namespace diff --git a/source/Samples/ExplorerBrowser/VB/WinForms/My Project/AssemblyInfo.vb b/source/Samples/ExplorerBrowser/VB/WinForms/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..48eb3519 --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WinForms/My Project/AssemblyInfo.vb @@ -0,0 +1,37 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' + + diff --git a/source/Samples/ExplorerBrowser/VB/WinForms/My Project/Resources.Designer.vb b/source/Samples/ExplorerBrowser/VB/WinForms/My Project/Resources.Designer.vb new file mode 100644 index 00000000..e96b8aff --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WinForms/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/ExplorerBrowser/VB/WinForms/My Project/Resources.resx b/source/Samples/ExplorerBrowser/VB/WinForms/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WinForms/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/ExplorerBrowser/VB/WinForms/My Project/Settings.Designer.vb b/source/Samples/ExplorerBrowser/VB/WinForms/My Project/Settings.Designer.vb new file mode 100644 index 00000000..f2ffe239 --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WinForms/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class Settings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()),Settings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As Settings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Settings + Get + Return Global.Settings.Default + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/ExplorerBrowser/VB/WinForms/My Project/Settings.settings b/source/Samples/ExplorerBrowser/VB/WinForms/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WinForms/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/ExplorerBrowser/VB/WinForms/Program.vb b/source/Samples/ExplorerBrowser/VB/WinForms/Program.vb new file mode 100644 index 00000000..bf738863 --- /dev/null +++ b/source/Samples/ExplorerBrowser/VB/WinForms/Program.vb @@ -0,0 +1,22 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms + +Namespace Microsoft.WindowsAPICodePack.Samples + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New ExplorerBrowserTestForm()) + End Sub + End Class +End Namespace diff --git a/source/Samples/ExtendedLinguisticServices/ELSDemo/CS/ELSSamples.csproj b/source/Samples/ExtendedLinguisticServices/ELSDemo/CS/ELSSamples.csproj new file mode 100644 index 00000000..f7c39c76 --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/ELSDemo/CS/ELSSamples.csproj @@ -0,0 +1,97 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {238AF76E-0D42-4F01-A852-12E65D84A885} + Exe + Properties + ELSSamples + ELSSamples + v3.5 + 512 + + + + + + + + + 3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + + + + + + + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9} + ExtendedLinguisticServices + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/ExtendedLinguisticServices/ELSDemo/CS/ELSSamples.sln b/source/Samples/ExtendedLinguisticServices/ELSDemo/CS/ELSSamples.sln new file mode 100644 index 00000000..9e31a4cd --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/ELSDemo/CS/ELSSamples.sln @@ -0,0 +1,33 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ELSSamples", "ELSSamples.csproj", "{238AF76E-0D42-4F01-A852-12E65D84A885}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExtendedLinguisticServices", "..\..\..\..\WindowsAPICodePack\ExtendedLinguisticServices\ExtendedLinguisticServices.csproj", "{B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {238AF76E-0D42-4F01-A852-12E65D84A885}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {238AF76E-0D42-4F01-A852-12E65D84A885}.Debug|Any CPU.Build.0 = Debug|Any CPU + {238AF76E-0D42-4F01-A852-12E65D84A885}.Release|Any CPU.ActiveCfg = Release|Any CPU + {238AF76E-0D42-4F01-A852-12E65D84A885}.Release|Any CPU.Build.0 = Release|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/ExtendedLinguisticServices/ELSDemo/CS/Program.cs b/source/Samples/ExtendedLinguisticServices/ELSDemo/CS/Program.cs new file mode 100644 index 00000000..16eba358 --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/ELSDemo/CS/Program.cs @@ -0,0 +1,204 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using Microsoft.WindowsAPICodePack.ExtendedLinguisticServices; +using System.Threading; +using System.Runtime.Serialization.Formatters.Binary; +using System.IO; + +namespace ELSSamples +{ + + public class Program + { + + public static void Main(string[] args) + { + if (!MappingService.IsPlatformSupported) + { + Console.WriteLine("This demo requires to be run on Windows 7"); + return; + } + + UsageSamples(); + Console.Write("Press any key to continue . . ."); + Console.ReadKey(); + } + + public static void UsageSamples() + { + /* + Getting LAD, calling RecognizeText, exam the result with formatter, deal with exceptions, and cleanup. + Getting SD, calling RecongizeText, exam each data ranges with formatter, and cleanup. + Getting all services of transliteration, output their descriptions to a console. + Getting the transliteration service which supports Cyrillic to Latin, and deal with exceptions. + Async version for #2. The code should deal with exceptions. + */ + LADUsageSample(); + SDUsageSample(); + TransliterationEnumSample(); + CyrlToLatinTransUsageSample1(); + CyrlToLatinTransUsageSample2(); + SDUsageSampleAsync(); + } + + public static void LADUsageSample() + { + try + { + MappingService languageDetection = new MappingService( + MappingAvailableServices.LanguageDetection); + using (MappingPropertyBag bag = + languageDetection.RecognizeText("This is English", null)) + { + string[] languages = bag.GetResultRanges()[0].FormatData( + new StringArrayFormatter()); + foreach (string language in languages) + { + Console.WriteLine("Recognized language: {0}", language); + } + } + } + catch (LinguisticException exc) + { + Console.WriteLine("Error calling ELS: {0}, HResult: {1}", + exc.ResultState.ErrorMessage, exc.ResultState.HResult); + } + } + + public static void SDUsageSample() + { + try + { + MappingService scriptDetection = new MappingService( + MappingAvailableServices.ScriptDetection); + using (MappingPropertyBag bag = + scriptDetection.RecognizeText("This is English. АБВГД.", null)) + { + MappingDataRange[] ranges = bag.GetResultRanges(); + Console.WriteLine("Recognized {0} script ranges", ranges.Length); + NullTerminatedStringFormatter formatter = new NullTerminatedStringFormatter(); + foreach (MappingDataRange range in ranges) + { + Console.WriteLine("Range from {0} to {1}, script {2}", + range.StartIndex, range.EndIndex, range.FormatData(formatter)); + } + } + } + catch (LinguisticException exc) + { + Console.WriteLine("Error calling ELS: {0}, HResult: {1}", + exc.ResultState.ErrorMessage, exc.ResultState.HResult); + } + } + + public static void TransliterationEnumSample() + { + try + { + MappingEnumOptions enumOptions = new MappingEnumOptions(); + enumOptions.Category = "Transliteration"; + MappingService[] transliterationServices = MappingService.GetServices(enumOptions); + foreach (MappingService service in transliterationServices) + { + Console.WriteLine("Service: {0}", service.Description); + } + } + catch (LinguisticException exc) + { + Console.WriteLine("Error calling ELS: {0}, HResult: {1}", + exc.ResultState.ErrorMessage, exc.ResultState.HResult); + } + } + + public static void CyrlToLatinTransUsageSample1() + { + try + { + MappingService cyrlToLatin = new MappingService( + MappingAvailableServices.TransliterationCyrillicToLatin); + using (MappingPropertyBag bag = cyrlToLatin.RecognizeText("АБВГД.", null)) + { + string transliterated = bag.GetResultRanges()[0].FormatData(new StringFormatter()); + Console.WriteLine("Transliterated text: {0}", transliterated); + } + } + catch (LinguisticException exc) + { + Console.WriteLine("Error calling ELS: {0}, HResult: {1}", + exc.ResultState.ErrorMessage, exc.ResultState.HResult); + } + } + + public static void CyrlToLatinTransUsageSample2() + { + try + { + MappingEnumOptions enumOptions = new MappingEnumOptions(); + enumOptions.InputScript = "Cyrl"; + enumOptions.OutputScript = "Latn"; + enumOptions.Category = "Transliteration"; + MappingService[] cyrlToLatin = MappingService.GetServices(enumOptions); + using (MappingPropertyBag bag = cyrlToLatin[0].RecognizeText("АБВГД.", null)) + { + string transliterated = bag.GetResultRanges()[0].FormatData(new StringFormatter()); + Console.WriteLine("Transliterated text: {0}", transliterated); + } + } + catch (LinguisticException exc) + { + Console.WriteLine("Error calling ELS: {0}, HResult: {1}", + exc.ResultState.ErrorMessage, exc.ResultState.HResult); + } + } + + public static void SDSampleCallback(IAsyncResult iAsyncResult) + { + MappingRecognizeAsyncResult asyncResult = + (MappingRecognizeAsyncResult)iAsyncResult; + if (asyncResult.Succeeded) + { + try + { + MappingDataRange[] ranges = asyncResult.PropertyBag.GetResultRanges(); + Console.WriteLine("Recognized {0} script ranges", ranges.Length); + NullTerminatedStringFormatter formatter = new NullTerminatedStringFormatter(); + foreach (MappingDataRange range in ranges) + { + Console.WriteLine("Range from {0} to {1}, script {2}, text \"{3}\"", + range.StartIndex, range.EndIndex, range.FormatData(formatter), + asyncResult.Text.Substring((int)range.StartIndex, + (int)(range.EndIndex - range.StartIndex + 1))); + } + } + finally + { + asyncResult.PropertyBag.Dispose(); + } + } + else + { + Console.WriteLine("Error calling ELS: {0}, HResult: {1}", + asyncResult.ResultState.ErrorMessage, asyncResult.ResultState.HResult); + } + } + + public static void SDUsageSampleAsync() + { + try + { + MappingService scriptDetection = new MappingService( + MappingAvailableServices.ScriptDetection); + MappingRecognizeAsyncResult asyncResult = scriptDetection.BeginRecognizeText( + "This is English. АБВГД.", null, SDSampleCallback, null); + MappingService.EndRecognizeText(asyncResult); + } + catch (LinguisticException exc) + { + Console.WriteLine("Error calling ELS: {0}, HResult: {1}", + exc.ResultState.ErrorMessage, exc.ResultState.HResult); + } + } + + } +} diff --git a/source/Samples/ExtendedLinguisticServices/ELSDemo/CS/Properties/AssemblyInfo.cs b/source/Samples/ExtendedLinguisticServices/ELSDemo/CS/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..c64e0b28 --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/ELSDemo/CS/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ExtendedLinguisticServices")] +[assembly: AssemblyDescription("Extended Linguistic Services Samples")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("8b2570fa-060b-4ca9-ac3b-cc0246a9b2f9")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/ExtendedLinguisticServices/ELSDemo/VB/ELSSamples.sln b/source/Samples/ExtendedLinguisticServices/ELSDemo/VB/ELSSamples.sln new file mode 100644 index 00000000..d4f228a5 --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/ELSDemo/VB/ELSSamples.sln @@ -0,0 +1,33 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ELSSamples", "ELSSamples.vbproj", "{238AF76E-0D42-4F01-A852-12E65D84A885}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExtendedLinguisticServices", "..\..\..\..\WindowsAPICodePack\ExtendedLinguisticServices\ExtendedLinguisticServices.csproj", "{B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {238AF76E-0D42-4F01-A852-12E65D84A885}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {238AF76E-0D42-4F01-A852-12E65D84A885}.Debug|Any CPU.Build.0 = Debug|Any CPU + {238AF76E-0D42-4F01-A852-12E65D84A885}.Release|Any CPU.ActiveCfg = Release|Any CPU + {238AF76E-0D42-4F01-A852-12E65D84A885}.Release|Any CPU.Build.0 = Release|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/ExtendedLinguisticServices/ELSDemo/VB/ELSSamples.vbproj b/source/Samples/ExtendedLinguisticServices/ELSDemo/VB/ELSSamples.vbproj new file mode 100644 index 00000000..d80da6b3 --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/ELSDemo/VB/ELSSamples.vbproj @@ -0,0 +1,71 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {A5B41CCB-A5AE-46CD-A49B-847677402DB2} + Exe + + + ELSSamples + v3.5 + On + Binary + Off + On + 512 + + + + + + + + + 3.5 + + + true + full + false + bin\Debug\ + true + true + prompt + + AllRules.ruleset + + + pdbonly + true + bin\Release\ + false + true + prompt + + AllRules.ruleset + + + + + + + + + + + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9} + ExtendedLinguisticServices + + + + + \ No newline at end of file diff --git a/source/Samples/ExtendedLinguisticServices/ELSDemo/VB/My Project/AssemblyInfo.vb b/source/Samples/ExtendedLinguisticServices/ELSDemo/VB/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..7e61861a --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/ELSDemo/VB/My Project/AssemblyInfo.vb @@ -0,0 +1,37 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' + + diff --git a/source/Samples/ExtendedLinguisticServices/ELSDemo/VB/Program.vb b/source/Samples/ExtendedLinguisticServices/ELSDemo/VB/Program.vb new file mode 100644 index 00000000..aafd59d6 --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/ELSDemo/VB/Program.vb @@ -0,0 +1,141 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports Microsoft.WindowsAPICodePack.ExtendedLinguisticServices +Imports System.Threading +Imports System.Runtime.Serialization.Formatters.Binary +Imports System.IO + +Namespace ELSSamples + + Public Class Program + + Public Shared Sub Main(ByVal args() As String) + If MappingService.IsPlatformSupported <> True Then + Console.WriteLine("This demo requires to be run on Windows 7") + Return + End If + UsageSamples() + Console.Write("Press any key to continue . . .") + Console.ReadKey() + End Sub + + Public Shared Sub UsageSamples() +' +' Getting LAD, calling RecognizeText, exam the result with formatter, deal with exceptions, and cleanup. +' Getting SD, calling RecongizeText, exam each data ranges with formatter, and cleanup. +' Getting all services of transliteration, output their descriptions to a console. +' Getting the transliteration service which supports Cyrillic to Latin, and deal with exceptions. +' Async version for #2. The code should deal with exceptions. +' + LADUsageSample() + SDUsageSample() + TransliterationEnumSample() + CyrlToLatinTransUsageSample1() + CyrlToLatinTransUsageSample2() + SDUsageSampleAsync() + End Sub + + Public Shared Sub LADUsageSample() + Try + Dim languageDetection As New MappingService(MappingAvailableServices.LanguageDetection) + Using bag As MappingPropertyBag = languageDetection.RecognizeText("This is English", Nothing) + Dim languages() As String = bag.GetResultRanges()(0).FormatData(New StringArrayFormatter()) + For Each language As String In languages + Console.WriteLine("Recognized language: {0}", language) + Next language + End Using + Catch exc As LinguisticException + Console.WriteLine("Error calling ELS: {0}, HResult: {1}", exc.ResultState.ErrorMessage, exc.ResultState.HResult) + End Try + End Sub + + Public Shared Sub SDUsageSample() + Try + Dim scriptDetection As New MappingService(MappingAvailableServices.ScriptDetection) + Using bag As MappingPropertyBag = scriptDetection.RecognizeText("This is English. АБВГД.", Nothing) + Dim ranges() As MappingDataRange = bag.GetResultRanges() + Console.WriteLine("Recognized {0} script ranges", ranges.Length) + Dim formatter As New NullTerminatedStringFormatter() + For Each range As MappingDataRange In ranges + Console.WriteLine("Range from {0} to {1}, script {2}", range.StartIndex, range.EndIndex, range.FormatData(formatter)) + Next range + End Using + Catch exc As LinguisticException + Console.WriteLine("Error calling ELS: {0}, HResult: {1}", exc.ResultState.ErrorMessage, exc.ResultState.HResult) + End Try + End Sub + + Public Shared Sub TransliterationEnumSample() + Try + Dim enumOptions As New MappingEnumOptions() + enumOptions.Category = "Transliteration" + Dim transliterationServices() As MappingService = MappingService.GetServices(enumOptions) + For Each service As MappingService In transliterationServices + Console.WriteLine("Service: {0}", service.Description) + Next service + Catch exc As LinguisticException + Console.WriteLine("Error calling ELS: {0}, HResult: {1}", exc.ResultState.ErrorMessage, exc.ResultState.HResult) + End Try + End Sub + + Public Shared Sub CyrlToLatinTransUsageSample1() + Try + Dim cyrlToLatin As New MappingService(MappingAvailableServices.TransliterationCyrillicToLatin) + Using bag As MappingPropertyBag = cyrlToLatin.RecognizeText("АБВГД.", Nothing) + Dim transliterated As String = bag.GetResultRanges()(0).FormatData(New StringFormatter()) + Console.WriteLine("Transliterated text: {0}", transliterated) + End Using + Catch exc As LinguisticException + Console.WriteLine("Error calling ELS: {0}, HResult: {1}", exc.ResultState.ErrorMessage, exc.ResultState.HResult) + End Try + End Sub + + Public Shared Sub CyrlToLatinTransUsageSample2() + Try + Dim enumOptions As New MappingEnumOptions() + enumOptions.InputScript = "Cyrl" + enumOptions.OutputScript = "Latn" + enumOptions.Category = "Transliteration" + Dim cyrlToLatin() As MappingService = MappingService.GetServices(enumOptions) + Using bag As MappingPropertyBag = cyrlToLatin(0).RecognizeText("АБВГД.", Nothing) + Dim transliterated As String = bag.GetResultRanges()(0).FormatData(New StringFormatter()) + Console.WriteLine("Transliterated text: {0}", transliterated) + End Using + Catch exc As LinguisticException + Console.WriteLine("Error calling ELS: {0}, HResult: {1}", exc.ResultState.ErrorMessage, exc.ResultState.HResult) + End Try + End Sub + + Public Shared Sub SDSampleCallback(ByVal iAsyncResult As IAsyncResult) + Dim asyncResult As MappingRecognizeAsyncResult = CType(iAsyncResult, MappingRecognizeAsyncResult) + If asyncResult.Succeeded Then + Try + Dim ranges() As MappingDataRange = asyncResult.PropertyBag.GetResultRanges() + Console.WriteLine("Recognized {0} script ranges", ranges.Length) + Dim formatter As New NullTerminatedStringFormatter() + For Each range As MappingDataRange In ranges + Console.WriteLine("Range from {0} to {1}, script {2}, text ""{3}""", range.StartIndex, range.EndIndex, range.FormatData(formatter), asyncResult.Text.Substring(CInt(Fix(range.StartIndex)), CInt(Fix(range.EndIndex - range.StartIndex + 1)))) + Next range + Finally + asyncResult.PropertyBag.Dispose() + End Try + Else + Console.WriteLine("Error calling ELS: {0}, HResult: {1}", asyncResult.ResultState.ErrorMessage, asyncResult.ResultState.HResult) + End If + End Sub + + Public Shared Sub SDUsageSampleAsync() + Try + Dim scriptDetection As New MappingService(MappingAvailableServices.ScriptDetection) + Dim asyncResult As MappingRecognizeAsyncResult = scriptDetection.BeginRecognizeText("This is English. АБВГД.", Nothing, AddressOf SDSampleCallback, Nothing) + MappingService.EndRecognizeText(asyncResult) + Catch exc As LinguisticException + Console.WriteLine("Error calling ELS: {0}, HResult: {1}", exc.ResultState.ErrorMessage, exc.ResultState.HResult) + End Try + End Sub + + End Class +End Namespace diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Program.cs b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Program.cs new file mode 100644 index 00000000..d19332eb --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Program.cs @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.ExtendedLinguisticServices; + +namespace Transliterator +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + + if (!MappingService.IsPlatformSupported) + { + MessageBox.Show("This demo requires to be run on Windows 7", "Demo needs Windows 7", MessageBoxButtons.OK, MessageBoxIcon.Error); + System.Environment.Exit(0); + return; + } + + Application.Run(new Transliterator()); + } + } +} diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Properties/AssemblyInfo.cs b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..5b266c54 --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Transliterator")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("8d406750-0a62-4860-ae1b-f76ceaaa73a1")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Properties/Resources.Designer.cs b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Properties/Resources.Designer.cs new file mode 100644 index 00000000..a32413e2 --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Transliterator.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Transliterator.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Properties/Resources.resx b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Properties/Settings.Designer.cs b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Properties/Settings.Designer.cs new file mode 100644 index 00000000..be0d3c3b --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Transliterator.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Properties/Settings.settings b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/CS/ScrollbarTextBox.cs b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/ScrollbarTextBox.cs new file mode 100644 index 00000000..f829a40b --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/ScrollbarTextBox.cs @@ -0,0 +1,66 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Diagnostics; + +namespace Transliterator +{ + public class ScrollbarTextBox : TextBox + { + private const int WM_HSCROLL = 0x114; + private const int WM_VSCROLL = 0x115; + + public event ScrollEventHandler OnHorizontalScroll = null; + public event ScrollEventHandler OnVerticalScroll = null; + + private static ScrollEventType[] scrollEventType = new ScrollEventType[] + { ScrollEventType.SmallDecrement, + ScrollEventType.SmallIncrement, + ScrollEventType.LargeDecrement, + ScrollEventType.LargeIncrement, + ScrollEventType.ThumbPosition, + ScrollEventType.ThumbTrack, + ScrollEventType.First, + ScrollEventType.Last, + ScrollEventType.EndScroll + }; + + private ScrollEventType GetEventType(uint wParam) + { + if (wParam < scrollEventType.Length) + { + return scrollEventType[wParam]; + } + else + { + return ScrollEventType.EndScroll; + } + } + + protected override void WndProc(ref Message m) + { + base.WndProc(ref m); + + if (m.Msg == WM_HSCROLL) + { + if (OnHorizontalScroll != null) + { + uint wParam = (uint)m.WParam.ToInt32(); + OnHorizontalScroll(this, new ScrollEventArgs(GetEventType(wParam & 0xffff), (int)(wParam >> 16))); + } + } + else if (m.Msg == WM_VSCROLL) + { + if (OnVerticalScroll != null) + { + uint wParam = (uint)m.WParam.ToInt32(); + OnVerticalScroll(this, new ScrollEventArgs(GetEventType(wParam & 0xffff), (int)(wParam >> 16))); + } + } + } + } +} diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Transliterator.Designer.cs b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Transliterator.Designer.cs new file mode 100644 index 00000000..9b8c619b --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Transliterator.Designer.cs @@ -0,0 +1,351 @@ +namespace Transliterator +{ + partial class Transliterator + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel(); + this.textBoxResult = new ScrollbarTextBox(); + this.textBoxSource = new ScrollbarTextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel(); + this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel(); + this.btnBrowse = new System.Windows.Forms.Button(); + this.btnConvert = new System.Windows.Forms.Button(); + this.btnHelp = new System.Windows.Forms.Button(); + this.btnClose = new System.Windows.Forms.Button(); + this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.comboBoxServices = new System.Windows.Forms.ComboBox(); + this.tableLayoutPanel6 = new System.Windows.Forms.TableLayoutPanel(); + this.label3 = new System.Windows.Forms.Label(); + this.textBoxSourceFile = new System.Windows.Forms.TextBox(); + this.tableLayoutPanel1.SuspendLayout(); + this.tableLayoutPanel2.SuspendLayout(); + this.tableLayoutPanel3.SuspendLayout(); + this.tableLayoutPanel4.SuspendLayout(); + this.tableLayoutPanel5.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.tableLayoutPanel6.SuspendLayout(); + this.SuspendLayout(); + // + // tableLayoutPanel1 + // + this.tableLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel1.ColumnCount = 1; + this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel2, 0, 1); + this.tableLayoutPanel1.Controls.Add(this.tableLayoutPanel3, 0, 0); + this.tableLayoutPanel1.Location = new System.Drawing.Point(12, 12); + this.tableLayoutPanel1.Name = "tableLayoutPanel1"; + this.tableLayoutPanel1.RowCount = 2; + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 160F)); + this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel1.Size = new System.Drawing.Size(679, 471); + this.tableLayoutPanel1.TabIndex = 0; + // + // tableLayoutPanel2 + // + this.tableLayoutPanel2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel2.ColumnCount = 3; + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel2.Controls.Add(this.textBoxResult, 2, 1); + this.tableLayoutPanel2.Controls.Add(this.textBoxSource, 0, 1); + this.tableLayoutPanel2.Controls.Add(this.label1, 0, 0); + this.tableLayoutPanel2.Controls.Add(this.label2, 2, 0); + this.tableLayoutPanel2.Location = new System.Drawing.Point(3, 163); + this.tableLayoutPanel2.Name = "tableLayoutPanel2"; + this.tableLayoutPanel2.RowCount = 2; + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel2.Size = new System.Drawing.Size(673, 305); + this.tableLayoutPanel2.TabIndex = 0; + // + // textBoxResult + // + this.textBoxResult.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxResult.HideSelection = false; + this.textBoxResult.Location = new System.Drawing.Point(349, 23); + this.textBoxResult.Multiline = true; + this.textBoxResult.Name = "textBoxResult"; + this.textBoxResult.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBoxResult.Size = new System.Drawing.Size(321, 279); + this.textBoxResult.TabIndex = 7; + this.textBoxResult.OnVerticalScroll += new System.Windows.Forms.ScrollEventHandler(this.textBoxResult_OnVerticalScroll); + this.textBoxResult.MouseMove += new System.Windows.Forms.MouseEventHandler(this.textBoxResult_MouseMove); + this.textBoxResult.MouseDown += new System.Windows.Forms.MouseEventHandler(this.textBoxResult_MouseDown); + // + // textBoxSource + // + this.textBoxSource.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxSource.HideSelection = false; + this.textBoxSource.Location = new System.Drawing.Point(3, 23); + this.textBoxSource.Multiline = true; + this.textBoxSource.Name = "textBoxSource"; + this.textBoxSource.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBoxSource.Size = new System.Drawing.Size(320, 279); + this.textBoxSource.TabIndex = 5; + this.textBoxSource.OnVerticalScroll += new System.Windows.Forms.ScrollEventHandler(this.textBoxSource_OnVerticalScroll); + this.textBoxSource.MouseMove += new System.Windows.Forms.MouseEventHandler(this.textBoxSource_MouseMove); + this.textBoxSource.MouseDown += new System.Windows.Forms.MouseEventHandler(this.textBoxSource_MouseDown); + this.textBoxSource.TextChanged += new System.EventHandler(this.textBoxSource_TextChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(3, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(101, 13); + this.label1.TabIndex = 4; + this.label1.Text = "Text for conversion:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(349, 0); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(91, 13); + this.label2.TabIndex = 6; + this.label2.Text = "Conversion result:"; + // + // tableLayoutPanel3 + // + this.tableLayoutPanel3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel3.ColumnCount = 2; + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 100F)); + this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel4, 1, 0); + this.tableLayoutPanel3.Controls.Add(this.tableLayoutPanel5, 0, 0); + this.tableLayoutPanel3.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel3.Name = "tableLayoutPanel3"; + this.tableLayoutPanel3.RowCount = 1; + this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel3.Size = new System.Drawing.Size(673, 145); + this.tableLayoutPanel3.TabIndex = 1; + // + // tableLayoutPanel4 + // + this.tableLayoutPanel4.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel4.ColumnCount = 1; + this.tableLayoutPanel4.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel4.Controls.Add(this.btnBrowse, 0, 0); + this.tableLayoutPanel4.Controls.Add(this.btnConvert, 0, 1); + this.tableLayoutPanel4.Controls.Add(this.btnHelp, 0, 2); + this.tableLayoutPanel4.Controls.Add(this.btnClose, 0, 3); + this.tableLayoutPanel4.Location = new System.Drawing.Point(576, 3); + this.tableLayoutPanel4.Name = "tableLayoutPanel4"; + this.tableLayoutPanel4.RowCount = 4; + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel4.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); + this.tableLayoutPanel4.Size = new System.Drawing.Size(94, 139); + this.tableLayoutPanel4.TabIndex = 0; + // + // btnBrowse + // + this.btnBrowse.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.btnBrowse.Location = new System.Drawing.Point(16, 3); + this.btnBrowse.Name = "btnBrowse"; + this.btnBrowse.Size = new System.Drawing.Size(75, 23); + this.btnBrowse.TabIndex = 8; + this.btnBrowse.Text = "Browse..."; + this.btnBrowse.UseVisualStyleBackColor = true; + this.btnBrowse.Click += new System.EventHandler(this.btnBrowse_Click); + // + // btnConvert + // + this.btnConvert.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.btnConvert.Location = new System.Drawing.Point(16, 39); + this.btnConvert.Name = "btnConvert"; + this.btnConvert.Size = new System.Drawing.Size(75, 23); + this.btnConvert.TabIndex = 9; + this.btnConvert.Text = "Convert"; + this.btnConvert.UseVisualStyleBackColor = true; + this.btnConvert.Click += new System.EventHandler(this.btnConvert_Click); + // + // btnHelp + // + this.btnHelp.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.btnHelp.Location = new System.Drawing.Point(16, 73); + this.btnHelp.Name = "btnHelp"; + this.btnHelp.Size = new System.Drawing.Size(75, 23); + this.btnHelp.TabIndex = 10; + this.btnHelp.Text = "Help"; + this.btnHelp.UseVisualStyleBackColor = true; + this.btnHelp.Click += new System.EventHandler(this.btnHelp_Click); + // + // btnClose + // + this.btnClose.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.btnClose.Location = new System.Drawing.Point(16, 109); + this.btnClose.Name = "btnClose"; + this.btnClose.Size = new System.Drawing.Size(75, 23); + this.btnClose.TabIndex = 11; + this.btnClose.Text = "Close"; + this.btnClose.UseVisualStyleBackColor = true; + this.btnClose.Click += new System.EventHandler(this.btnClose_Click); + // + // tableLayoutPanel5 + // + this.tableLayoutPanel5.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel5.ColumnCount = 1; + this.tableLayoutPanel5.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel5.Controls.Add(this.groupBox1, 0, 1); + this.tableLayoutPanel5.Controls.Add(this.tableLayoutPanel6, 0, 0); + this.tableLayoutPanel5.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel5.Name = "tableLayoutPanel5"; + this.tableLayoutPanel5.RowCount = 2; + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 40.28777F)); + this.tableLayoutPanel5.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 59.71223F)); + this.tableLayoutPanel5.Size = new System.Drawing.Size(567, 139); + this.tableLayoutPanel5.TabIndex = 1; + // + // groupBox1 + // + this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox1.Controls.Add(this.comboBoxServices); + this.groupBox1.Location = new System.Drawing.Point(3, 58); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(561, 78); + this.groupBox1.TabIndex = 2; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Tranliteration service"; + // + // comboBoxServices + // + this.comboBoxServices.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.comboBoxServices.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxServices.FormattingEnabled = true; + this.comboBoxServices.Location = new System.Drawing.Point(39, 31); + this.comboBoxServices.Name = "comboBoxServices"; + this.comboBoxServices.Size = new System.Drawing.Size(488, 21); + this.comboBoxServices.TabIndex = 3; + this.comboBoxServices.SelectedIndexChanged += new System.EventHandler(this.comboBoxServices_SelectedIndexChanged); + // + // tableLayoutPanel6 + // + this.tableLayoutPanel6.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tableLayoutPanel6.ColumnCount = 2; + this.tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 80F)); + this.tableLayoutPanel6.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel6.Controls.Add(this.label3, 0, 0); + this.tableLayoutPanel6.Controls.Add(this.textBoxSourceFile, 1, 0); + this.tableLayoutPanel6.Location = new System.Drawing.Point(3, 3); + this.tableLayoutPanel6.Name = "tableLayoutPanel6"; + this.tableLayoutPanel6.RowCount = 1; + this.tableLayoutPanel6.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel6.Size = new System.Drawing.Size(561, 49); + this.tableLayoutPanel6.TabIndex = 1; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(3, 0); + this.label3.Name = "label3"; + this.label3.Padding = new System.Windows.Forms.Padding(0, 6, 0, 0); + this.label3.Size = new System.Drawing.Size(60, 19); + this.label3.TabIndex = 0; + this.label3.Text = "Source file:"; + // + // textBoxSourceFile + // + this.textBoxSourceFile.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.textBoxSourceFile.Location = new System.Drawing.Point(83, 3); + this.textBoxSourceFile.Name = "textBoxSourceFile"; + this.textBoxSourceFile.Size = new System.Drawing.Size(475, 20); + this.textBoxSourceFile.TabIndex = 1; + this.textBoxSourceFile.KeyDown += new System.Windows.Forms.KeyEventHandler(this.textBoxSourceFile_KeyDown); + // + // Transliterator + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(703, 495); + this.Controls.Add(this.tableLayoutPanel1); + this.Name = "Transliterator"; + this.Text = "Transliterator"; + this.tableLayoutPanel1.ResumeLayout(false); + this.tableLayoutPanel2.ResumeLayout(false); + this.tableLayoutPanel2.PerformLayout(); + this.tableLayoutPanel3.ResumeLayout(false); + this.tableLayoutPanel4.ResumeLayout(false); + this.tableLayoutPanel5.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.tableLayoutPanel6.ResumeLayout(false); + this.tableLayoutPanel6.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2; + private ScrollbarTextBox textBoxResult; + private ScrollbarTextBox textBoxSource; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4; + private System.Windows.Forms.Button btnBrowse; + private System.Windows.Forms.Button btnConvert; + private System.Windows.Forms.Button btnHelp; + private System.Windows.Forms.Button btnClose; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.ComboBox comboBoxServices; + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel6; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox textBoxSourceFile; + + } +} + diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Transliterator.cs b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Transliterator.cs new file mode 100644 index 00000000..642f737c --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Transliterator.cs @@ -0,0 +1,311 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using System.Diagnostics; +using Microsoft.WindowsAPICodePack.ExtendedLinguisticServices; +using Microsoft.WindowsAPICodePack.Shell; +using System.IO; +using System.Runtime.InteropServices; +using Microsoft.WindowsAPICodePack.Dialogs; + +namespace Transliterator +{ + public partial class Transliterator : Form + { + public const int SB_LINEUP = 0; + public const int SB_LINEDOWN = 1; + public const int SB_PAGEUP = 2; + public const int SB_PAGEDOWN = 3; + public const int SB_THUMBPOSITION = 4; + public const int SB_THUMBTRACK = 5; + public const int SB_TOP = 6; + public const int SB_BOTTOM = 7; + public const int SB_ENDSCROLL = 8; + private const int WM_HSCROLL = 0x114; + private const int WM_VSCROLL = 0x115; + + private const string categoryTransliteration = "Transliteration"; + private MappingService[] transliterationServices = null; + private Guid? guidService = null; + + [DllImport("user32.dll")] + private static extern int SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam); + + public Transliterator() + { + InitializeComponent(); + + MinimumSize = this.Size; + + string fileName = Path.GetFullPath("sample.txt"); + if (File.Exists(fileName)) + { + textBoxSourceFile.Text = fileName; + textBoxSource.Text = File.ReadAllText(fileName); + } + + transliterationServices = GetSpecifiedMappingServices(categoryTransliteration); + if ( (transliterationServices != null) && ( transliterationServices.Count() > 0 ) ) + { + foreach (MappingService ms in transliterationServices) + { + comboBoxServices.Items.Add(new DataItem() { Name = ms.Description, guid = ms.Guid }); + } + comboBoxServices.SelectedIndex = 0; + } + + } + + private MappingService[] GetSpecifiedMappingServices( string CategoryName ) + { + MappingService[] transliterationServices = null; + try + { + MappingEnumOptions enumOptions = new MappingEnumOptions() { Category = CategoryName }; + transliterationServices = MappingService.GetServices(enumOptions); + } + catch (LinguisticException exc) + { + ShowErrorMessage(String.Format("Error calling ELS: {0}, HResult: {1}", + exc.ResultState.ErrorMessage, exc.ResultState.HResult)); + } + return transliterationServices; + } + + private string LanguageConverter(Guid serviceGuid, string sourceContent) + { + string transliterated = null; + if ((sourceContent != null) && (sourceContent.Length > 0)) + { + try + { + MappingService mapService = new MappingService(serviceGuid); + using (MappingPropertyBag bag = mapService.RecognizeText(sourceContent, null)) + { + transliterated = bag.GetResultRanges()[0].FormatData(new StringFormatter()); + } + } + catch (LinguisticException exc) + { + ShowErrorMessage(String.Format("Error calling ELS: {0}, HResult: {1}", + exc.ResultState.ErrorMessage, exc.ResultState.HResult)); + } + } + return transliterated; + } + + private void ShowErrorMessage(string msg) + { + TaskDialog td = new TaskDialog() + { + StandardButtons = TaskDialogStandardButtons.Close, + Caption = "Error", + InstructionText = msg, + Icon = TaskDialogStandardIcon.Error + }; + + TaskDialogResult res = td.Show(); + } + + + private void btnBrowse_Click(object sender, EventArgs e) + { + CommonOpenFileDialog openFileDialog = new CommonOpenFileDialog(); + openFileDialog.AllowNonFileSystemItems = true; + openFileDialog.Title = "Select source file"; + openFileDialog.InitialDirectory = Application.StartupPath; + openFileDialog.Filters.Add(new CommonFileDialogFilter("Text files (*.txt)", "*.txt")); + openFileDialog.RestoreDirectory = true; + + if (openFileDialog.ShowDialog() != CommonFileDialogResult.Cancel) + { + try + { + textBoxSourceFile.Text = openFileDialog.FileAsShellObject.ParsingName; + textBoxSource.Text = File.ReadAllText(textBoxSourceFile.Text); + textBoxResult.Text = ""; + } + catch (Exception ex) + { + ShowErrorMessage(ex.Message); + } + } + } + + private void btnConvert_Click(object sender, EventArgs e) + { + try + { + Debug.Assert(guidService != null); + string result = LanguageConverter(guidService.GetValueOrDefault(), textBoxSource.Text); + if ((result != null) && (result.Length > 0)) + { + textBoxResult.Text = result; + } + } + catch (Exception ex) + { + ShowErrorMessage(ex.Message); + } + } + + private void btnHelp_Click(object sender, EventArgs e) + { + TaskDialog taskHelp = new TaskDialog(); + taskHelp.Caption = "Help"; + taskHelp.Text = "Steps to use the tool:\n\n"; + taskHelp.Text += "1) Use the Browse button to load the unicode text from a "; + taskHelp.Text += "text file or copy and paste text "; + taskHelp.Text += "directly to the text box under the 'Text for conversion:' label,\n"; + taskHelp.Text += "2) Choose a tranliteration service from the drop down list,\n"; + taskHelp.Text += "3) Click the Convert button.\n\n"; + taskHelp.Text += "This demo uses the Extended Linguistic Services API in the Windows API Code "; + taskHelp.Text += "Pack for Microsoft .NET Framework."; + taskHelp.DetailsExpandedText = "Windows API Code Pack for .NET Framework"; + + // Enable the hyperlinks + taskHelp.HyperlinksEnabled = true; + taskHelp.HyperlinkClick += new EventHandler(taskHelp_HyperlinkClick); + + taskHelp.Cancelable = true; + + taskHelp.Icon = TaskDialogStandardIcon.Information; + taskHelp.Show(); + } + + private void btnClose_Click(object sender, EventArgs e) + { + this.Close(); + } + + static void taskHelp_HyperlinkClick(object sender, TaskDialogHyperlinkClickedEventArgs e) + { + // Launch the application associated with http links + Process.Start(e.LinkText); + } + + private void textBoxSource_MouseDown(object sender, MouseEventArgs e) + { + if (textBoxSource.Capture) + { + textBoxResult.SelectionLength = 0; + } + } + + private void textBoxSource_MouseMove(object sender, MouseEventArgs e) + { + if ((textBoxSource.Capture) && (textBoxSource.SelectionLength > 0)) + { + textBoxResult.SelectionStart = textBoxSource.SelectionStart; + textBoxResult.SelectionLength = textBoxSource.SelectionLength; + } + } + + private void textBoxResult_MouseDown(object sender, MouseEventArgs e) + { + if (textBoxResult.Capture) + { + textBoxSource.SelectionLength = 0; + } + } + + private void textBoxResult_MouseMove(object sender, MouseEventArgs e) + { + if ((textBoxResult.Capture) && (textBoxResult.SelectionLength > 0)) + { + textBoxSource.SelectionStart = textBoxResult.SelectionStart; + textBoxSource.SelectionLength = textBoxResult.SelectionLength; + } + } + + private void textBoxSource_TextChanged(object sender, EventArgs e) + { + // Enable the "Convert" button only when source text is not empty + btnConvert.Enabled = textBoxSource.Text.Length > 0; + } + + private void textBoxSourceFile_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Enter) + { + try + { + textBoxSource.Text = File.ReadAllText(textBoxSourceFile.Text); + } + catch (Exception ex) + { + ShowErrorMessage(ex.Message); + } + } + } + + private void comboBoxServices_SelectedIndexChanged(object sender, EventArgs e) + { + ComboBox cb = (ComboBox)sender; + DataItem di = (DataItem)comboBoxServices.Items[cb.SelectedIndex]; + guidService = di.guid; + } + + private void textBoxSource_OnVerticalScroll(object sender, ScrollEventArgs e) + { + //Look all the Type you want to control. I've put some here : + //This type is when you click on the scrollbar buttons up/down. + if (textBoxSource.Capture == true) + { + if (e.Type == ScrollEventType.SmallIncrement) + { + SendMessage(textBoxResult.Handle, WM_VSCROLL, SB_LINEDOWN, 0); + } + else if (e.Type == ScrollEventType.SmallDecrement) + { + SendMessage(textBoxResult.Handle, WM_VSCROLL, SB_LINEUP, 0); + } + else if (e.Type == ScrollEventType.ThumbTrack) + { + SendMessage(textBoxResult.Handle, WM_VSCROLL, (SB_THUMBTRACK | (e.NewValue << 16)), 0); + } + } + } + + private void textBoxResult_OnVerticalScroll(object sender, ScrollEventArgs e) + { + //Look all the Type you want to control. I've put some here : + //This type is when you click on the scrollbar buttons up/down. + if (textBoxResult.Capture == true) + { + if (e.Type == ScrollEventType.SmallIncrement) + { + SendMessage(textBoxSource.Handle, WM_VSCROLL, SB_LINEDOWN, 0); + } + else if (e.Type == ScrollEventType.SmallDecrement) + { + SendMessage(textBoxSource.Handle, WM_VSCROLL, SB_LINEUP, 0); + } + else if (e.Type == ScrollEventType.ThumbTrack) + { + SendMessage(textBoxSource.Handle, WM_VSCROLL, (SB_THUMBTRACK | (e.NewValue << 16)), 0); + } + } + } + + } + + class DataItem : System.Object + { + public Guid guid { get; set; } + public string Name { get; set; } + + public override string ToString() + { + return Name; + } + } + +} diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Transliterator.csproj b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Transliterator.csproj new file mode 100644 index 00000000..cae1022f --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Transliterator.csproj @@ -0,0 +1,156 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {24435C75-34D7-48A7-A5C5-248782EABB93} + WinExe + Properties + Transliterator + Transliterator + v3.5 + 512 + + + + + + + + + 3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + Component + + + Form + + + Transliterator.cs + + + + + Transliterator.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9} + ExtendedLinguisticServices + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + PreserveNewest + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Transliterator.resx b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Transliterator.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Transliterator.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Transliterator.sln b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Transliterator.sln new file mode 100644 index 00000000..175a3f24 --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/Transliterator.sln @@ -0,0 +1,48 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Transliterator", "Transliterator.csproj", "{24435C75-34D7-48A7-A5C5-248782EABB93}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExtendedLinguisticServices", "..\..\..\..\WindowsAPICodePack\ExtendedLinguisticServices\ExtendedLinguisticServices.csproj", "{B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {24435C75-34D7-48A7-A5C5-248782EABB93}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {24435C75-34D7-48A7-A5C5-248782EABB93}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {24435C75-34D7-48A7-A5C5-248782EABB93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {24435C75-34D7-48A7-A5C5-248782EABB93}.Debug|Any CPU.Build.0 = Debug|Any CPU + {24435C75-34D7-48A7-A5C5-248782EABB93}.Release|Any CPU.ActiveCfg = Release|Any CPU + {24435C75-34D7-48A7-A5C5-248782EABB93}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/CS/sample.txt b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/sample.txt new file mode 100644 index 00000000..f0bba8a0 --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/CS/sample.txt @@ -0,0 +1,15 @@ +中新网9月1日电 中央气象台今日发布天气预报称,未来三天,海南东部将有较强降水,华南等地有高温天气。 + +受冷暖空气共同影响,未来三天,青藏高原中东部、内蒙古中东部、东北中西部、华北北部和南部部分地区、黄淮东部、江淮东部、江南东部、华南南部沿海、云南中南部、四川北部等地有小到中雨或阵雨,其中,海南东部等地的局部地区有大雨,上述部分地区并伴有雷雨大风等强对流天气。 + +9月2日,受冷空气影响,新疆西部和北部有小到中雨,局部地区有大雨,并伴有5~7级风,山口地区风力可达8级;气温将下降4~8℃。 + +未来三天,福建大部、广东大部、广西大部、江西南部、四川东部、重庆等地有35℃以上高温天气。 + +具体预报如下: + +9月1日08时至2日08时,新疆西部和北部、西藏中部、青海东部和南部、甘肃东南部、川西高原北部、内蒙古中东部、东北西部、华北北部、黄淮东南部、江淮东部、江南东部、华南南部、云南中南部以及台湾北部等地有小到中雨或阵雨,其中,海南东部的部分地区有大雨,降水量有25~30毫米。新疆西部、内蒙古中东部、黑龙江西部、河北北部、山西北部、陕西北部、甘肃南部、青海东北部和中南部、西藏中北部、江南东部、华南东部和南部、云南南部等地将有雷暴天气,其中青海西南部、西藏中部偏北的部分地区有冰雹,浙江南部、福建、广东南部沿海、云南南部等地局地有短时强降水或雷雨大风等强对流天气。新疆西北部、内蒙古东部、东北西部等地有4~6级风。黄海南部海域将有4-6级偏东风;东海大部海域、台湾海峡、台湾以东洋面和以南海域将有5-6级东北风;南海北部海域将有4-5级东北风;南海南部海域将有4-6级西南风。 + +2日08时至3日08时,新疆西南部和北部、西藏中部、青海东部和南部、甘肃大部、内蒙古中东部、东北西部、华北北部、黄淮东部、江淮东部、江南东部、华南南部、四川西北部、云南中南部以及台湾等地有小到中雨或阵雨,其中,新疆天山附近地区、海南东部的局部地区有大雨或暴雨,上述部分地区并伴有雷雨大风等强对流天气。新疆北部有5~7级偏北风,山口地区风力可达8级,内蒙古东部、东北北部等地有4~5级风。黄海中部和南部海域将有4-5级偏东风;东海北部海域、南海北部和中部海域将有4-6级东北风;东海南部海域、台湾海峡、台湾以东洋面和以南海域将有5-7级东北风;南海南部海域将有5-6级西南风。 + +3日08时至4日08时,新疆西南部和东北部、西藏中部、青海东部和南部、西北地区中东部、内蒙古西部和东南部局部地区、东北地区中西部、华北南部局部地区、浙江中东部、福建东部、广东南部、广西南部、四川北部、云南中南部以及海南、台湾等地有小到中雨或阵雨,其中,海南东南部、台湾东部等地的部分地区有大雨。上述部分地区并伴有雷雨大风等强对流天气。新疆北部有5~6级偏北风,山口地区风力有7级。东海大部海域、台湾海峡、台湾以东洋面和以南海域、南海北部将有5~7级偏北或偏东风。 diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/VB/My Project/AssemblyInfo.vb b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..c115c0ac --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/My Project/AssemblyInfo.vb @@ -0,0 +1,39 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/VB/My Project/Resources.Designer.vb b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/My Project/Resources.Designer.vb new file mode 100644 index 00000000..e96b8aff --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/VB/My Project/Resources.resx b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/VB/My Project/Settings.Designer.vb b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/My Project/Settings.Designer.vb new file mode 100644 index 00000000..f2ffe239 --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class Settings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()),Settings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As Settings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Settings + Get + Return Global.Settings.Default + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/VB/My Project/Settings.settings b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/VB/Program.vb b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/Program.vb new file mode 100644 index 00000000..8e4b0f2f --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/Program.vb @@ -0,0 +1,32 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Linq +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.ExtendedLinguisticServices + +Namespace Transliterator + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + + If MappingService.IsPlatformSupported <> True Then + MessageBox.Show("This demo requires to be run on Windows 7", "Demo needs Windows 7", MessageBoxButtons.OK, MessageBoxIcon.Error) + System.Environment.Exit(0) + Return + End If + + + Application.Run(New Transliterator()) + End Sub + End Class +End Namespace diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/VB/ScrollbarTextBox.vb b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/ScrollbarTextBox.vb new file mode 100644 index 00000000..9edec0fb --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/ScrollbarTextBox.vb @@ -0,0 +1,46 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Linq +Imports System.Text +Imports System.Windows.Forms +Imports System.Diagnostics + +Namespace Transliterator + Public Class ScrollbarTextBox + Inherits TextBox + Private Const WM_HSCROLL As Integer = &H114 + Private Const WM_VSCROLL As Integer = &H115 + + Public Event OnHorizontalScroll As ScrollEventHandler + Public Event OnVerticalScroll As ScrollEventHandler + + Private Shared ScrollEventTypeArray() As ScrollEventType = {ScrollEventType.SmallDecrement, ScrollEventType.SmallIncrement, ScrollEventType.LargeDecrement, ScrollEventType.LargeIncrement, ScrollEventType.ThumbPosition, ScrollEventType.ThumbTrack, ScrollEventType.First, ScrollEventType.Last, ScrollEventType.EndScroll} + + Private Function GetEventType(ByVal wParam As UInteger) As ScrollEventType + If wParam < ScrollEventTypeArray.Length Then + Return ScrollEventTypeArray(CInt(wParam)) + Else + Return ScrollEventType.EndScroll + End If + End Function + + Protected Overrides Sub WndProc(ByRef m As Message) + MyBase.WndProc(m) + + If m.Msg = WM_HSCROLL Then + If OnHorizontalScrollEvent IsNot Nothing Then + Dim wParam As UInteger = CUInt(m.WParam.ToInt32()) + RaiseEvent OnHorizontalScroll(Me, New ScrollEventArgs(GetEventType(CUInt(wParam And &HFFFF)), CInt(Fix(wParam >> 16)))) + End If + ElseIf m.Msg = WM_VSCROLL Then + If OnVerticalScrollEvent IsNot Nothing Then + Dim wParam As UInteger = CUInt(m.WParam.ToInt32()) + RaiseEvent OnVerticalScroll(Me, New ScrollEventArgs(GetEventType(CUInt(wParam And &HFFFF)), CInt(Fix(wParam >> 16)))) + End If + End If + End Sub + End Class +End Namespace diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/VB/Transliterator.Designer.vb b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/Transliterator.Designer.vb new file mode 100644 index 00000000..656c9e4a --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/Transliterator.Designer.vb @@ -0,0 +1,329 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace Transliterator + Partial Friend Class Transliterator + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + +#Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Me.tableLayoutPanel1 = New System.Windows.Forms.TableLayoutPanel() + Me.tableLayoutPanel2 = New System.Windows.Forms.TableLayoutPanel() + Me.textBoxResult = New ScrollbarTextBox() + Me.textBoxSource = New ScrollbarTextBox() + Me.label1 = New System.Windows.Forms.Label() + Me.label2 = New System.Windows.Forms.Label() + Me.tableLayoutPanel3 = New System.Windows.Forms.TableLayoutPanel() + Me.tableLayoutPanel4 = New System.Windows.Forms.TableLayoutPanel() + Me.btnBrowse = New System.Windows.Forms.Button() + Me.btnConvert = New System.Windows.Forms.Button() + Me.btnHelp = New System.Windows.Forms.Button() + Me.btnClose = New System.Windows.Forms.Button() + Me.tableLayoutPanel5 = New System.Windows.Forms.TableLayoutPanel() + Me.groupBox1 = New System.Windows.Forms.GroupBox() + Me.comboBoxServices = New System.Windows.Forms.ComboBox() + Me.tableLayoutPanel6 = New System.Windows.Forms.TableLayoutPanel() + Me.label3 = New System.Windows.Forms.Label() + Me.textBoxSourceFile = New System.Windows.Forms.TextBox() + Me.tableLayoutPanel1.SuspendLayout() + Me.tableLayoutPanel2.SuspendLayout() + Me.tableLayoutPanel3.SuspendLayout() + Me.tableLayoutPanel4.SuspendLayout() + Me.tableLayoutPanel5.SuspendLayout() + Me.groupBox1.SuspendLayout() + Me.tableLayoutPanel6.SuspendLayout() + Me.SuspendLayout() + ' + ' tableLayoutPanel1 + ' + Me.tableLayoutPanel1.Anchor = (CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)) + Me.tableLayoutPanel1.ColumnCount = 1 + Me.tableLayoutPanel1.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0F)) + Me.tableLayoutPanel1.Controls.Add(Me.tableLayoutPanel2, 0, 1) + Me.tableLayoutPanel1.Controls.Add(Me.tableLayoutPanel3, 0, 0) + Me.tableLayoutPanel1.Location = New System.Drawing.Point(12, 12) + Me.tableLayoutPanel1.Name = "tableLayoutPanel1" + Me.tableLayoutPanel1.RowCount = 2 + Me.tableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 160.0F)) + Me.tableLayoutPanel1.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0F)) + Me.tableLayoutPanel1.Size = New System.Drawing.Size(679, 471) + Me.tableLayoutPanel1.TabIndex = 0 + ' + ' tableLayoutPanel2 + ' + Me.tableLayoutPanel2.Anchor = (CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)) + Me.tableLayoutPanel2.ColumnCount = 3 + Me.tableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0F)) + Me.tableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20.0F)) + Me.tableLayoutPanel2.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0F)) + Me.tableLayoutPanel2.Controls.Add(Me.textBoxResult, 2, 1) + Me.tableLayoutPanel2.Controls.Add(Me.textBoxSource, 0, 1) + Me.tableLayoutPanel2.Controls.Add(Me.label1, 0, 0) + Me.tableLayoutPanel2.Controls.Add(Me.label2, 2, 0) + Me.tableLayoutPanel2.Location = New System.Drawing.Point(3, 163) + Me.tableLayoutPanel2.Name = "tableLayoutPanel2" + Me.tableLayoutPanel2.RowCount = 2 + Me.tableLayoutPanel2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20.0F)) + Me.tableLayoutPanel2.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0F)) + Me.tableLayoutPanel2.Size = New System.Drawing.Size(673, 305) + Me.tableLayoutPanel2.TabIndex = 0 + ' + ' textBoxResult + ' + Me.textBoxResult.Anchor = (CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)) + Me.textBoxResult.HideSelection = False + Me.textBoxResult.Location = New System.Drawing.Point(349, 23) + Me.textBoxResult.Multiline = True + Me.textBoxResult.Name = "textBoxResult" + Me.textBoxResult.ScrollBars = System.Windows.Forms.ScrollBars.Both + Me.textBoxResult.Size = New System.Drawing.Size(321, 279) + Me.textBoxResult.TabIndex = 7 + ' Me.textBoxResult.OnVerticalScroll += New System.Windows.Forms.ScrollEventHandler(Me.textBoxResult_OnVerticalScroll) + ' Me.textBoxResult.MouseMove += New System.Windows.Forms.MouseEventHandler(Me.textBoxResult_MouseMove) + ' Me.textBoxResult.MouseDown += New System.Windows.Forms.MouseEventHandler(Me.textBoxResult_MouseDown) + ' + ' textBoxSource + ' + Me.textBoxSource.Anchor = (CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)) + Me.textBoxSource.HideSelection = False + Me.textBoxSource.Location = New System.Drawing.Point(3, 23) + Me.textBoxSource.Multiline = True + Me.textBoxSource.Name = "textBoxSource" + Me.textBoxSource.ScrollBars = System.Windows.Forms.ScrollBars.Both + Me.textBoxSource.Size = New System.Drawing.Size(320, 279) + Me.textBoxSource.TabIndex = 5 + ' Me.textBoxSource.OnVerticalScroll += New System.Windows.Forms.ScrollEventHandler(Me.textBoxSource_OnVerticalScroll) + ' Me.textBoxSource.MouseMove += New System.Windows.Forms.MouseEventHandler(Me.textBoxSource_MouseMove) + ' Me.textBoxSource.MouseDown += New System.Windows.Forms.MouseEventHandler(Me.textBoxSource_MouseDown) + ' Me.textBoxSource.TextChanged += New System.EventHandler(Me.textBoxSource_TextChanged) + ' + ' label1 + ' + Me.label1.AutoSize = True + Me.label1.Location = New System.Drawing.Point(3, 0) + Me.label1.Name = "label1" + Me.label1.Size = New System.Drawing.Size(101, 13) + Me.label1.TabIndex = 4 + Me.label1.Text = "Text for conversion:" + ' + ' label2 + ' + Me.label2.AutoSize = True + Me.label2.Location = New System.Drawing.Point(349, 0) + Me.label2.Name = "label2" + Me.label2.Size = New System.Drawing.Size(91, 13) + Me.label2.TabIndex = 6 + Me.label2.Text = "Conversion result:" + ' + ' tableLayoutPanel3 + ' + Me.tableLayoutPanel3.Anchor = (CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)) + Me.tableLayoutPanel3.ColumnCount = 2 + Me.tableLayoutPanel3.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0F)) + Me.tableLayoutPanel3.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 100.0F)) + Me.tableLayoutPanel3.Controls.Add(Me.tableLayoutPanel4, 1, 0) + Me.tableLayoutPanel3.Controls.Add(Me.tableLayoutPanel5, 0, 0) + Me.tableLayoutPanel3.Location = New System.Drawing.Point(3, 3) + Me.tableLayoutPanel3.Name = "tableLayoutPanel3" + Me.tableLayoutPanel3.RowCount = 1 + Me.tableLayoutPanel3.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0F)) + Me.tableLayoutPanel3.Size = New System.Drawing.Size(673, 145) + Me.tableLayoutPanel3.TabIndex = 1 + ' + ' tableLayoutPanel4 + ' + Me.tableLayoutPanel4.Anchor = (CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)) + Me.tableLayoutPanel4.ColumnCount = 1 + Me.tableLayoutPanel4.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0F)) + Me.tableLayoutPanel4.Controls.Add(Me.btnBrowse, 0, 0) + Me.tableLayoutPanel4.Controls.Add(Me.btnConvert, 0, 1) + Me.tableLayoutPanel4.Controls.Add(Me.btnHelp, 0, 2) + Me.tableLayoutPanel4.Controls.Add(Me.btnClose, 0, 3) + Me.tableLayoutPanel4.Location = New System.Drawing.Point(576, 3) + Me.tableLayoutPanel4.Name = "tableLayoutPanel4" + Me.tableLayoutPanel4.RowCount = 4 + Me.tableLayoutPanel4.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0F)) + Me.tableLayoutPanel4.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0F)) + Me.tableLayoutPanel4.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0F)) + Me.tableLayoutPanel4.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25.0F)) + Me.tableLayoutPanel4.Size = New System.Drawing.Size(94, 139) + Me.tableLayoutPanel4.TabIndex = 0 + ' + ' btnBrowse + ' + Me.btnBrowse.Anchor = (CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)) + Me.btnBrowse.Location = New System.Drawing.Point(16, 3) + Me.btnBrowse.Name = "btnBrowse" + Me.btnBrowse.Size = New System.Drawing.Size(75, 23) + Me.btnBrowse.TabIndex = 8 + Me.btnBrowse.Text = "Browse..." + Me.btnBrowse.UseVisualStyleBackColor = True + ' Me.btnBrowse.Click += New System.EventHandler(Me.btnBrowse_Click) + ' + ' btnConvert + ' + Me.btnConvert.Anchor = System.Windows.Forms.AnchorStyles.Right + Me.btnConvert.Location = New System.Drawing.Point(16, 39) + Me.btnConvert.Name = "btnConvert" + Me.btnConvert.Size = New System.Drawing.Size(75, 23) + Me.btnConvert.TabIndex = 9 + Me.btnConvert.Text = "Convert" + Me.btnConvert.UseVisualStyleBackColor = True + ' Me.btnConvert.Click += New System.EventHandler(Me.btnConvert_Click) + ' + ' btnHelp + ' + Me.btnHelp.Anchor = System.Windows.Forms.AnchorStyles.Right + Me.btnHelp.Location = New System.Drawing.Point(16, 73) + Me.btnHelp.Name = "btnHelp" + Me.btnHelp.Size = New System.Drawing.Size(75, 23) + Me.btnHelp.TabIndex = 10 + Me.btnHelp.Text = "Help" + Me.btnHelp.UseVisualStyleBackColor = True + ' Me.btnHelp.Click += New System.EventHandler(Me.btnHelp_Click) + ' + ' btnClose + ' + Me.btnClose.Anchor = System.Windows.Forms.AnchorStyles.Right + Me.btnClose.Location = New System.Drawing.Point(16, 109) + Me.btnClose.Name = "btnClose" + Me.btnClose.Size = New System.Drawing.Size(75, 23) + Me.btnClose.TabIndex = 11 + Me.btnClose.Text = "Close" + Me.btnClose.UseVisualStyleBackColor = True + ' Me.btnClose.Click += New System.EventHandler(Me.btnClose_Click) + ' + ' tableLayoutPanel5 + ' + Me.tableLayoutPanel5.Anchor = (CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)) + Me.tableLayoutPanel5.ColumnCount = 1 + Me.tableLayoutPanel5.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50.0F)) + Me.tableLayoutPanel5.Controls.Add(Me.groupBox1, 0, 1) + Me.tableLayoutPanel5.Controls.Add(Me.tableLayoutPanel6, 0, 0) + Me.tableLayoutPanel5.Location = New System.Drawing.Point(3, 3) + Me.tableLayoutPanel5.Name = "tableLayoutPanel5" + Me.tableLayoutPanel5.RowCount = 2 + Me.tableLayoutPanel5.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 40.28777F)) + Me.tableLayoutPanel5.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 59.71223F)) + Me.tableLayoutPanel5.Size = New System.Drawing.Size(567, 139) + Me.tableLayoutPanel5.TabIndex = 1 + ' + ' groupBox1 + ' + Me.groupBox1.Anchor = (CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)) + Me.groupBox1.Controls.Add(Me.comboBoxServices) + Me.groupBox1.Location = New System.Drawing.Point(3, 58) + Me.groupBox1.Name = "groupBox1" + Me.groupBox1.Size = New System.Drawing.Size(561, 78) + Me.groupBox1.TabIndex = 2 + Me.groupBox1.TabStop = False + Me.groupBox1.Text = "Tranliteration service" + ' + ' comboBoxServices + ' + Me.comboBoxServices.Anchor = (CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)) + Me.comboBoxServices.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.comboBoxServices.FormattingEnabled = True + Me.comboBoxServices.Location = New System.Drawing.Point(39, 31) + Me.comboBoxServices.Name = "comboBoxServices" + Me.comboBoxServices.Size = New System.Drawing.Size(488, 21) + Me.comboBoxServices.TabIndex = 3 + ' Me.comboBoxServices.SelectedIndexChanged += New System.EventHandler(Me.comboBoxServices_SelectedIndexChanged) + ' + ' tableLayoutPanel6 + ' + Me.tableLayoutPanel6.Anchor = (CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)) + Me.tableLayoutPanel6.ColumnCount = 2 + Me.tableLayoutPanel6.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 80.0F)) + Me.tableLayoutPanel6.ColumnStyles.Add(New System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100.0F)) + Me.tableLayoutPanel6.Controls.Add(Me.label3, 0, 0) + Me.tableLayoutPanel6.Controls.Add(Me.textBoxSourceFile, 1, 0) + Me.tableLayoutPanel6.Location = New System.Drawing.Point(3, 3) + Me.tableLayoutPanel6.Name = "tableLayoutPanel6" + Me.tableLayoutPanel6.RowCount = 1 + Me.tableLayoutPanel6.RowStyles.Add(New System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100.0F)) + Me.tableLayoutPanel6.Size = New System.Drawing.Size(561, 49) + Me.tableLayoutPanel6.TabIndex = 1 + ' + ' label3 + ' + Me.label3.AutoSize = True + Me.label3.Location = New System.Drawing.Point(3, 0) + Me.label3.Name = "label3" + Me.label3.Padding = New System.Windows.Forms.Padding(0, 6, 0, 0) + Me.label3.Size = New System.Drawing.Size(60, 19) + Me.label3.TabIndex = 0 + Me.label3.Text = "Source file:" + ' + ' textBoxSourceFile + ' + Me.textBoxSourceFile.Anchor = (CType(((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Left) Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)) + Me.textBoxSourceFile.Location = New System.Drawing.Point(83, 3) + Me.textBoxSourceFile.Name = "textBoxSourceFile" + Me.textBoxSourceFile.Size = New System.Drawing.Size(475, 20) + Me.textBoxSourceFile.TabIndex = 1 + ' Me.textBoxSourceFile.KeyDown += New System.Windows.Forms.KeyEventHandler(Me.textBoxSourceFile_KeyDown) + ' + ' Transliterator + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0F, 13.0F) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(703, 495) + Me.Controls.Add(Me.tableLayoutPanel1) + Me.Name = "Transliterator" + Me.Text = "Transliterator" + Me.tableLayoutPanel1.ResumeLayout(False) + Me.tableLayoutPanel2.ResumeLayout(False) + Me.tableLayoutPanel2.PerformLayout() + Me.tableLayoutPanel3.ResumeLayout(False) + Me.tableLayoutPanel4.ResumeLayout(False) + Me.tableLayoutPanel5.ResumeLayout(False) + Me.groupBox1.ResumeLayout(False) + Me.tableLayoutPanel6.ResumeLayout(False) + Me.tableLayoutPanel6.PerformLayout() + Me.ResumeLayout(False) + + End Sub + +#End Region + + Private tableLayoutPanel1 As System.Windows.Forms.TableLayoutPanel + Private tableLayoutPanel2 As System.Windows.Forms.TableLayoutPanel + Private WithEvents textBoxResult As ScrollbarTextBox + Private WithEvents textBoxSource As ScrollbarTextBox + Private label1 As System.Windows.Forms.Label + Private label2 As System.Windows.Forms.Label + Private tableLayoutPanel3 As System.Windows.Forms.TableLayoutPanel + Private tableLayoutPanel4 As System.Windows.Forms.TableLayoutPanel + Private WithEvents btnBrowse As System.Windows.Forms.Button + Private WithEvents btnConvert As System.Windows.Forms.Button + Private WithEvents btnHelp As System.Windows.Forms.Button + Private WithEvents btnClose As System.Windows.Forms.Button + Private tableLayoutPanel5 As System.Windows.Forms.TableLayoutPanel + Private groupBox1 As System.Windows.Forms.GroupBox + Private WithEvents comboBoxServices As System.Windows.Forms.ComboBox + Private tableLayoutPanel6 As System.Windows.Forms.TableLayoutPanel + Private label3 As System.Windows.Forms.Label + Private WithEvents textBoxSourceFile As System.Windows.Forms.TextBox + + End Class +End Namespace + diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/VB/Transliterator.resx b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/Transliterator.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/Transliterator.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/VB/Transliterator.sln b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/Transliterator.sln new file mode 100644 index 00000000..de34fabc --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/Transliterator.sln @@ -0,0 +1,48 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Transliterator", "Transliterator.vbproj", "{24435C75-34D7-48A7-A5C5-248782EABB93}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExtendedLinguisticServices", "..\..\..\..\WindowsAPICodePack\ExtendedLinguisticServices\ExtendedLinguisticServices.csproj", "{B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {24435C75-34D7-48A7-A5C5-248782EABB93}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {24435C75-34D7-48A7-A5C5-248782EABB93}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {24435C75-34D7-48A7-A5C5-248782EABB93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {24435C75-34D7-48A7-A5C5-248782EABB93}.Debug|Any CPU.Build.0 = Debug|Any CPU + {24435C75-34D7-48A7-A5C5-248782EABB93}.Release|Any CPU.ActiveCfg = Release|Any CPU + {24435C75-34D7-48A7-A5C5-248782EABB93}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/VB/Transliterator.vb b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/Transliterator.vb new file mode 100644 index 00000000..32a54b04 --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/Transliterator.vb @@ -0,0 +1,262 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +Imports System.Data +Imports System.Drawing +Imports System.Linq +Imports System.Text +Imports System.Windows.Forms +Imports System.Diagnostics +Imports Microsoft.WindowsAPICodePack.ExtendedLinguisticServices +Imports Microsoft.WindowsAPICodePack.Shell +Imports System.IO +Imports System.Runtime.InteropServices +Imports Microsoft.WindowsAPICodePack.Dialogs + +Namespace Transliterator + Partial Friend Class Transliterator + Inherits Form + Public Const SB_LINEUP As Integer = 0 + Public Const SB_LINEDOWN As Integer = 1 + Public Const SB_PAGEUP As Integer = 2 + Public Const SB_PAGEDOWN As Integer = 3 + Public Const SB_THUMBPOSITION As Integer = 4 + Public Const SB_THUMBTRACK As Integer = 5 + Public Const SB_TOP As Integer = 6 + Public Const SB_BOTTOM As Integer = 7 + Public Const SB_ENDSCROLL As Integer = 8 + Private Const WM_HSCROLL As Integer = &H114 + Private Const WM_VSCROLL As Integer = &H115 + + Private Const categoryTransliteration As String = "Transliteration" + Private transliterationServices() As MappingService = Nothing + Private guidService? As Guid = Nothing + + _ + Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer + End Function + + Public Sub New() + InitializeComponent() + + MinimumSize = Me.Size + + Dim fileName As String = Path.GetFullPath("sample.txt") + If (File.Exists(fileName)) Then + textBoxSourceFile.Text = fileName + textBoxSource.Text = File.ReadAllText(fileName) + End If + + transliterationServices = GetSpecifiedMappingServices(categoryTransliteration) + If (transliterationServices IsNot Nothing) AndAlso (transliterationServices.Count() > 0) Then + For Each ms As MappingService In transliterationServices + comboBoxServices.Items.Add(New DataItem() With {.Name = ms.Description, .guid = ms.Guid}) + Next ms + comboBoxServices.SelectedIndex = 0 + End If + + End Sub + + Private Function GetSpecifiedMappingServices(ByVal CategoryName As String) As MappingService() + Dim transliterationServices() As MappingService = Nothing + Try + Dim enumOptions As New MappingEnumOptions() With {.Category = CategoryName} + transliterationServices = MappingService.GetServices(enumOptions) + Catch exc As LinguisticException + ShowErrorMessage(String.Format("Error calling ELS: {0}, HResult: {1}", exc.ResultState.ErrorMessage, exc.ResultState.HResult)) + End Try + Return transliterationServices + End Function + + Private Function LanguageConverter(ByVal serviceGuid As Guid, ByVal sourceContent As String) As String + Dim transliterated As String = Nothing + If (sourceContent IsNot Nothing) AndAlso (sourceContent.Length > 0) Then + Try + Dim mapService As New MappingService(serviceGuid) + Using bag As MappingPropertyBag = mapService.RecognizeText(sourceContent, Nothing) + transliterated = bag.GetResultRanges()(0).FormatData(New StringFormatter()) + End Using + Catch exc As LinguisticException + ShowErrorMessage(String.Format("Error calling ELS: {0}, HResult: {1}", exc.ResultState.ErrorMessage, exc.ResultState.HResult)) + End Try + End If + Return transliterated + End Function + + Private Sub ShowErrorMessage(ByVal msg As String) + Dim td As New TaskDialog() With {.StandardButtons = TaskDialogStandardButtons.Close, .Caption = "Error", .InstructionText = msg, .Icon = TaskDialogStandardIcon.Error} + + Dim res As TaskDialogResult = td.Show() + End Sub + + + Private Sub btnBrowse_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnBrowse.Click + Dim openFileDialog As New CommonOpenFileDialog() + openFileDialog.AllowNonFileSystemItems = True + openFileDialog.Title = "Select source file" + openFileDialog.InitialDirectory = Application.StartupPath + openFileDialog.Filters.Add(New CommonFileDialogFilter("Text files (*.txt)", "*.txt")) + openFileDialog.RestoreDirectory = True + + If openFileDialog.ShowDialog() <> CommonFileDialogResult.Cancel Then + Try + textBoxSourceFile.Text = openFileDialog.FileAsShellObject.ParsingName + textBoxSource.Text = File.ReadAllText(textBoxSourceFile.Text) + textBoxResult.Text = "" + Catch ex As Exception + ShowErrorMessage(ex.Message) + End Try + End If + End Sub + + Private Sub btnConvert_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnConvert.Click + Try + Debug.Assert(guidService.HasValue) + Dim result As String = LanguageConverter(guidService.GetValueOrDefault(), textBoxSource.Text) + If (result IsNot Nothing) AndAlso (result.Length > 0) Then + textBoxResult.Text = result + End If + Catch ex As Exception + ShowErrorMessage(ex.Message) + End Try + End Sub + + Private Sub btnHelp_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnHelp.Click + Dim taskHelp As New TaskDialog() + taskHelp.Caption = "Help" + taskHelp.Text = "Steps to use the tool:" & Constants.vbLf + Constants.vbLf + taskHelp.Text &= "1) Use the Browse button to load the unicode text from a " + taskHelp.Text &= "text file or copy and paste text " + taskHelp.Text &= "directly to the text box under the 'Text for conversion:' label," & Constants.vbLf + taskHelp.Text &= "2) Choose a tranliteration service from the drop down list," & Constants.vbLf + taskHelp.Text &= "3) Click the Convert button." & Constants.vbLf + Constants.vbLf + taskHelp.Text &= "This demo uses the Extended Linguistic Services API in the Windows API Code " + taskHelp.Text &= "Pack for Microsoft .NET Framework." + taskHelp.DetailsExpandedText = "Windows API Code Pack for .NET Framework" + + ' Enable the hyperlinks + taskHelp.HyperlinksEnabled = True + AddHandler taskHelp.HyperlinkClick, AddressOf taskHelp_HyperlinkClick + + taskHelp.Cancelable = True + + taskHelp.Icon = TaskDialogStandardIcon.Information + taskHelp.Show() + End Sub + + Private Sub btnClose_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnClose.Click + Me.Close() + End Sub + + Private Shared Sub taskHelp_HyperlinkClick(ByVal sender As Object, ByVal e As TaskDialogHyperlinkClickedEventArgs) + ' Launch the application associated with http links + Process.Start(e.LinkText) + End Sub + + Private Sub textBoxSource_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles textBoxSource.MouseDown + If textBoxSource.Capture Then + textBoxResult.SelectionLength = 0 + End If + End Sub + + Private Sub textBoxSource_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles textBoxSource.MouseMove + If (textBoxSource.Capture) AndAlso (textBoxSource.SelectionLength > 0) Then + textBoxResult.SelectionStart = textBoxSource.SelectionStart + textBoxResult.SelectionLength = textBoxSource.SelectionLength + End If + End Sub + + Private Sub textBoxResult_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles textBoxResult.MouseDown + If textBoxResult.Capture Then + textBoxSource.SelectionLength = 0 + End If + End Sub + + Private Sub textBoxResult_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles textBoxResult.MouseMove + If (textBoxResult.Capture) AndAlso (textBoxResult.SelectionLength > 0) Then + textBoxSource.SelectionStart = textBoxResult.SelectionStart + textBoxSource.SelectionLength = textBoxResult.SelectionLength + End If + End Sub + + Private Sub textBoxSource_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles textBoxSource.TextChanged + ' Enable the "Convert" button only when source text is not empty + btnConvert.Enabled = textBoxSource.Text.Length > 0 + End Sub + + Private Sub textBoxSourceFile_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles textBoxSourceFile.KeyDown + If e.KeyCode = Keys.Enter Then + Try + textBoxSource.Text = File.ReadAllText(textBoxSourceFile.Text) + Catch ex As Exception + ShowErrorMessage(ex.Message) + End Try + End If + End Sub + + Private Sub comboBoxServices_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles comboBoxServices.SelectedIndexChanged + Dim cb As ComboBox = CType(sender, ComboBox) + Dim di As DataItem = CType(comboBoxServices.Items(cb.SelectedIndex), DataItem) + guidService = di.guid + End Sub + + Private Sub textBoxSource_OnVerticalScroll(ByVal sender As Object, ByVal e As ScrollEventArgs) Handles textBoxSource.OnVerticalScroll + 'Look all the Type you want to control. I've put some here : + 'This type is when you click on the scrollbar buttons up/down. + If textBoxSource.Capture = True Then + If e.Type = ScrollEventType.SmallIncrement Then + SendMessage(textBoxResult.Handle, WM_VSCROLL, SB_LINEDOWN, 0) + ElseIf e.Type = ScrollEventType.SmallDecrement Then + SendMessage(textBoxResult.Handle, WM_VSCROLL, SB_LINEUP, 0) + ElseIf e.Type = ScrollEventType.ThumbTrack Then + SendMessage(textBoxResult.Handle, WM_VSCROLL, (SB_THUMBTRACK Or (e.NewValue << 16)), 0) + End If + End If + End Sub + + Private Sub textBoxResult_OnVerticalScroll(ByVal sender As Object, ByVal e As ScrollEventArgs) Handles textBoxResult.OnVerticalScroll + 'Look all the Type you want to control. I've put some here : + 'This type is when you click on the scrollbar buttons up/down. + If textBoxResult.Capture = True Then + If e.Type = ScrollEventType.SmallIncrement Then + SendMessage(textBoxSource.Handle, WM_VSCROLL, SB_LINEDOWN, 0) + ElseIf e.Type = ScrollEventType.SmallDecrement Then + SendMessage(textBoxSource.Handle, WM_VSCROLL, SB_LINEUP, 0) + ElseIf e.Type = ScrollEventType.ThumbTrack Then + SendMessage(textBoxSource.Handle, WM_VSCROLL, (SB_THUMBTRACK Or (e.NewValue << 16)), 0) + End If + End If + End Sub + + End Class + + Friend Class DataItem + Inherits System.Object + Private privateguid As Guid + Public Property guid() As Guid + Get + Return privateguid + End Get + Set(ByVal value As Guid) + privateguid = value + End Set + End Property + Private privateName As String + Public Property Name() As String + Get + Return privateName + End Get + Set(ByVal value As String) + privateName = value + End Set + End Property + + Public Overrides Function ToString() As String + Return Name + End Function + End Class + +End Namespace diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/VB/Transliterator.vbproj b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/Transliterator.vbproj new file mode 100644 index 00000000..335a3034 --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/Transliterator.vbproj @@ -0,0 +1,131 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {5D831085-1147-452A-9863-BDFE6DB85C89} + WinExe + + + Transliterator + v3.5 + On + Binary + Off + On + 512 + + + + + + + + + 3.5 + + + true + full + false + bin\Debug\ + true + true + prompt + AllRules.ruleset + + + + pdbonly + true + bin\Release\ + false + true + prompt + AllRules.ruleset + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + Component + + + Form + + + Transliterator.vb + + + + + Transliterator.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + Designer + My.Resources + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + True + Settings.settings + True + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {B2CE24B7-FC5D-49AC-806F-1D88F78A31E9} + ExtendedLinguisticServices + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + PreserveNewest + + + + + \ No newline at end of file diff --git a/source/Samples/ExtendedLinguisticServices/Transliterator/VB/sample.txt b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/sample.txt new file mode 100644 index 00000000..f0bba8a0 --- /dev/null +++ b/source/Samples/ExtendedLinguisticServices/Transliterator/VB/sample.txt @@ -0,0 +1,15 @@ +中新网9月1日电 中央气象台今日发布天气预报称,未来三天,海南东部将有较强降水,华南等地有高温天气。 + +受冷暖空气共同影响,未来三天,青藏高原中东部、内蒙古中东部、东北中西部、华北北部和南部部分地区、黄淮东部、江淮东部、江南东部、华南南部沿海、云南中南部、四川北部等地有小到中雨或阵雨,其中,海南东部等地的局部地区有大雨,上述部分地区并伴有雷雨大风等强对流天气。 + +9月2日,受冷空气影响,新疆西部和北部有小到中雨,局部地区有大雨,并伴有5~7级风,山口地区风力可达8级;气温将下降4~8℃。 + +未来三天,福建大部、广东大部、广西大部、江西南部、四川东部、重庆等地有35℃以上高温天气。 + +具体预报如下: + +9月1日08时至2日08时,新疆西部和北部、西藏中部、青海东部和南部、甘肃东南部、川西高原北部、内蒙古中东部、东北西部、华北北部、黄淮东南部、江淮东部、江南东部、华南南部、云南中南部以及台湾北部等地有小到中雨或阵雨,其中,海南东部的部分地区有大雨,降水量有25~30毫米。新疆西部、内蒙古中东部、黑龙江西部、河北北部、山西北部、陕西北部、甘肃南部、青海东北部和中南部、西藏中北部、江南东部、华南东部和南部、云南南部等地将有雷暴天气,其中青海西南部、西藏中部偏北的部分地区有冰雹,浙江南部、福建、广东南部沿海、云南南部等地局地有短时强降水或雷雨大风等强对流天气。新疆西北部、内蒙古东部、东北西部等地有4~6级风。黄海南部海域将有4-6级偏东风;东海大部海域、台湾海峡、台湾以东洋面和以南海域将有5-6级东北风;南海北部海域将有4-5级东北风;南海南部海域将有4-6级西南风。 + +2日08时至3日08时,新疆西南部和北部、西藏中部、青海东部和南部、甘肃大部、内蒙古中东部、东北西部、华北北部、黄淮东部、江淮东部、江南东部、华南南部、四川西北部、云南中南部以及台湾等地有小到中雨或阵雨,其中,新疆天山附近地区、海南东部的局部地区有大雨或暴雨,上述部分地区并伴有雷雨大风等强对流天气。新疆北部有5~7级偏北风,山口地区风力可达8级,内蒙古东部、东北北部等地有4~5级风。黄海中部和南部海域将有4-5级偏东风;东海北部海域、南海北部和中部海域将有4-6级东北风;东海南部海域、台湾海峡、台湾以东洋面和以南海域将有5-7级东北风;南海南部海域将有5-6级西南风。 + +3日08时至4日08时,新疆西南部和东北部、西藏中部、青海东部和南部、西北地区中东部、内蒙古西部和东南部局部地区、东北地区中西部、华北南部局部地区、浙江中东部、福建东部、广东南部、广西南部、四川北部、云南中南部以及海南、台湾等地有小到中雨或阵雨,其中,海南东南部、台湾东部等地的部分地区有大雨。上述部分地区并伴有雷雨大风等强对流天气。新疆北部有5~6级偏北风,山口地区风力有7级。东海大部海域、台湾海峡、台湾以东洋面和以南海域、南海北部将有5~7级偏北或偏东风。 diff --git a/source/Samples/HandlerSamples/HandlerSamples.csproj b/source/Samples/HandlerSamples/HandlerSamples.csproj new file mode 100644 index 00000000..e7be5d70 --- /dev/null +++ b/source/Samples/HandlerSamples/HandlerSamples.csproj @@ -0,0 +1,138 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4} + Library + Properties + HandlerSamples + HandlerSamples + v4.0 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + true + bin\x64\Debug\ + DEBUG;TRACE + full + x64 + bin\Debug\HandlerSamples.dll.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + MinimumRecommendedRules.ruleset + ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + false + ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + false + + + bin\x64\Release\ + TRACE + true + pdbonly + x64 + bin\Release\HandlerSamples.dll.CodeAnalysisLog.xml + true + GlobalSuppressions.cs + prompt + MinimumRecommendedRules.ruleset + ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\\Rule Sets + true + ;c:\Program Files (x86)\Microsoft Visual Studio 10.0\Team Tools\Static Analysis Tools\FxCop\\Rules + true + + + + + + + + + + + + + + + + + + + + + UserControl + + + + WpfPreviewHandlerDemoControl.xaml + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64} + ShellExtensions + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + + Designer + + + + + Designer + MSBuild:Compile + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/Samples/HandlerSamples/HandlerSamples.sln b/source/Samples/HandlerSamples/HandlerSamples.sln new file mode 100644 index 00000000..f879f780 --- /dev/null +++ b/source/Samples/HandlerSamples/HandlerSamples.sln @@ -0,0 +1,75 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HandlerSamples", "HandlerSamples.csproj", "{1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShellExtensions", "..\..\WindowsAPICodePack\ShellExtensions\ShellExtensions.csproj", "{F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + CodeAnalysisDebug|x64 = CodeAnalysisDebug|x64 + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4}.CodeAnalysisDebug|x64.ActiveCfg = Debug|x64 + {1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4}.CodeAnalysisDebug|x64.Build.0 = Debug|x64 + {1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4}.Debug|x64.ActiveCfg = Debug|x64 + {1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4}.Debug|x64.Build.0 = Debug|x64 + {1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4}.Release|Any CPU.Build.0 = Release|Any CPU + {1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4}.Release|x64.ActiveCfg = Release|x64 + {1BE7B1CA-F97B-46F0-9D0F-B5952AB28EF4}.Release|x64.Build.0 = Release|x64 + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|x64.ActiveCfg = Debug|x64 + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|x64.Build.0 = Debug|x64 + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|x64.ActiveCfg = Debug|x64 + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|x64.Build.0 = Debug|x64 + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|x64.ActiveCfg = Release|x64 + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|x64.Build.0 = Release|x64 + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|x64.ActiveCfg = CodeAnalysisDebug|x64 + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|x64.Build.0 = CodeAnalysisDebug|x64 + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|x64.ActiveCfg = Debug|x64 + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|x64.Build.0 = Debug|x64 + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|x64.ActiveCfg = Release|x64 + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|x64.Build.0 = Release|x64 + {F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64}.CodeAnalysisDebug|x64.ActiveCfg = Debug|x64 + {F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64}.CodeAnalysisDebug|x64.Build.0 = Debug|x64 + {F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64}.Debug|x64.ActiveCfg = Debug|x64 + {F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64}.Debug|x64.Build.0 = Debug|x64 + {F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64}.Release|Any CPU.Build.0 = Release|Any CPU + {F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64}.Release|x64.ActiveCfg = Release|x64 + {F3C863EC-33F4-4ED2-9D67-00BF3EEEAB64}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/HandlerSamples/Properties/AssemblyInfo.cs b/source/Samples/HandlerSamples/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..0c7e2685 --- /dev/null +++ b/source/Samples/HandlerSamples/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("HandlerSamples")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("HandlerSamples")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2010")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("8ca7b16d-61fe-4c5f-bda4-f97fe16fdbce")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/HandlerSamples/Readme.txt b/source/Samples/HandlerSamples/Readme.txt new file mode 100644 index 00000000..03c897c7 --- /dev/null +++ b/source/Samples/HandlerSamples/Readme.txt @@ -0,0 +1,37 @@ +Shell Extension Samples + +Thumbnail providers and preview handlers extend the core functionality of Windows shell. +They are different from most of the Code Pack because shell calls into your code, rather than your code calling into shell. +In order for shell to know that it needs to look for your code and find it, you must register your compiled assemblies. + +To register your handlers. +1. Derive your class from IPreviewHandler, or IThumbnailProvider and one or more initialization interfaces. +2. Add the correct attributes to your handler class. + Both Preview handlers and Thumbnail providers require these attributes. + [ComVisible(true)] // Lets Shell/COM see your class + [ClassInterface(ClassInterfaceType.None)] // Required + [ProgId("HandlerSamples.XYZPreviewerWPF")] // This is required for associating the surrogate host, it should be unique per handler. + [Guid("B9E6A036-9778-4B48-BA45-33F15B9B07AF")] // This is the GUID under which the assembly is registered; it must be unique. + + Preview handlers require this additional attribute: + [PreviewHandler("PreviewHandlerWPFDemo", ".xyz", "{EC3E84CC-BDC5-4E9F-A67F-CC960F366497}")] // Name, Semi-colon-separated list of extensions and handler ID (must be unique). + + Thumbnail handlers require this additional attribute. + [ThumbnailProvider("XYZThumbnailer", ".xyz", DisableProcessIsolation = false)] // Name, Semi-colon-separated list of file extensions. DisableProcessIsolation is only required if IThumbnailFromStream is not implemented. + 3. Compile. Make sure you compile specifically for the OS version of your system. + On 64-bit OS, build for x64. + On 32-bit OS, build for x86. + 4. Navigate to the output directory in the Visual Studio command prompt. + Make sure to use the correct prompt for your OS type (32/64 bit). + 5. Register your assembly using the following command, make sure to verify there were no errors. + If errors have occurred, you will need to recompile your assembly and register again. + + regasm /codebase "" + +Notes: + - Once your assembly has been registered successfully, if it is in use by the Shell you cannot rebuild your assembly because the file is locked. + You can either terminate the surrogate host process for the handler before rebuilding, or restart the explorer process before rebuilding. + - Thumbnails generated by the thumbnail provider are cached. They are regenerated for significantly different sizes. + A cached thumbnail will be added/updated if there is no thumbnail of that or larger size, or if the file has been modified. + To clear the cache, use the Disk Cleanup Utility and check the "Thumbnails" option. + - To unregister an assembly, make sure the GUID is the same as originally registered, then use "regasm /unregister ". \ No newline at end of file diff --git a/source/Samples/HandlerSamples/SampleFile.xyz b/source/Samples/HandlerSamples/SampleFile.xyz new file mode 100644 index 00000000..194de200 --- /dev/null +++ b/source/Samples/HandlerSamples/SampleFile.xyz @@ -0,0 +1,12 @@ + + + + Handler Sample File + Jon Harkness + 45 + Seattle, Wa + + Qk3GqQMAAAAAAEYAAAA4AAAALAEAAMgAAAABACAAAwAAAICpAwASFwAAEhcAAAAAAAAAAAAAAAAA/wAA/wAA/wAAAAAAAABWWosAVVmKAFVZigBUV4gAUVeJAFJXiQBSVowAUlaMAFJTjgBSU44AUlOOAFJTjgBRVo0AT1SLAE5TigBMUokATE+GAEpNhABHSoEARUh/AENHeABBRXYAPkJzADxAcQA5PW0AOT1tADs/bwA+QnEAQER1AEFFdgBFSXoASU1+AE9RgQBXV4QAW1qFAGFfiQBqY4sAbmWOAHRqjwB5bZEAfnCNAIFyjQCFdY4AiXeOAIx6kQCLeIwAjHeJAJF6igCPeZAAknqNAJR7iwCVe4oAlX2HAJZ+hwCbgIcAnoOHAKGDjgCjho0ApIiNAKSKjQCriYsAqpWXAK2LhgCLcYgAQkt+AEhShQBKV4wAT16XAF9lnABobaIAbnKkAG9wogBqbaEAZ2qcAGpungBobZsAbG6iAGhsngBlbZ0AY26dAGpvogBobqAAaG6gAGhuoABmapwAZ2udAGVqnABjZ5kAXWKaAFpfmABZXZkAWFyaAGBinABnaKYAWl6fAExQlAA/U5gAVGasAFhssgBXbbMAYHCyAFxsrABcaagAVmKeAFpflABUXJIAZWaTAIl+ogDKtKsAz7KuAMesqADCrqwAxrGwAMaxsADGsbAAxrGwAMaxsADGsbAAxrGwAMWxsADJrq4AyK6uAMqwsADLsbEAy7KtAMqxrQDIr6sAybCsAMWsqADEq6cAw6qmAMOqpgDEqaUAw6ikAMGmogC/paEAwKKdAL2gmwC5nJcAtpmUALWWlwCyk5QAspOUALSVlgCvlpgAqZKVAJ6HjACMdX4AXVNeAGphagCRfogAo4SPAJ6HjACUeXwAhGh0AIFsggCadYwApYeLALeakgC9nJcAuJiVAK6NiQB7aG8AMDhNAEM3RwCCZXMAmXuDAJ6QkQC3ko4ArIqEALKTigC6nZEAuZibAMCiowC/qKUAu6ehAMKlngC8oJYAvaCTAMCgkgDBoJcAwaCXAMGglwDBoJcAvZyYAL6bmACkiIcAZlRSAB0dJgAcFxwAHBcZABsZFwAbFxgAIBgaAC4fIQBNOj4Ah15PAKx9ZgCxiXcArJKRALeakADDp54A0LOqANCzqgDVuK8A1rmwANe6sQDZvLMA17qxANi7sgDZvLMA2ry0ANvBswDZv7EA3MK0AOLIugDex70A3se8AN7GvADexrwA3se4AN7HuADhyrsA5s6/AODMxADkz8cA5M/HAOHMxADhzMQA4MvDAN7JwQDbxr4A4su/AOHIuwDjyLkA38OzAN/ApwDdx7kA49HKAObTygDq2cwA6djNAOXWzgDg08sA59TNAOfVzgDo1s8A6NbPAOrY0QDl08wA4tDJAOLRygDjyLYA2sS2AOLQyQDYysgAy721ALmnpQCYjJYAbHCDAExNYABESl8AZGl5AEpLUQAoICEAIxscACQcHQAhGRoAHxoZABogKAA1NkYAbl9uAJl5dwCaeXYAnXp1AJ97dQChfnAAoH1wAJ57bgCdem0AnntuAJ57bgCee24AnntuAJ57bgCee24AnntuAJ57bgCee24AnXptAJ16bQCceWwAnHlsAJx5bACceWwAm3hrAJ16bQCceWwAm3hrAJt4awBWWooAVlmKAFVZiQBUV4gAU1iIAFNXiQBTVooAU1aMAFFUiwBSVYsAUlWLAFJUiwBQVYwATlOKAE1SiQBMUYgATE+GAElMgwBGSYAAREd+AENHeABARHUAPUFyADs/cAA5PW0AOT1tADo+bgA9QXEAP0N0AEBEdQBFSXoASU1+AExQgQBUVYUAWViFAF9eiQBjYYoAaWOMAG9njwBza5AAd22OAHxvjgCBc48Ag3SPAIZ2kACGdY4AiXeMAIt4jACOeZEAj3qPAJJ7jQCUe4wAkXqIAJR7iACXfYgAmX6HAJ2BjQCdgowAn4WLAKCHjACihIUAo4qRAKaFhAB3ZYEAQE6CAEdUiABIVo0ATFqUAFlhlwBgaJ0AZWucAGNomQBhZJgAYGSWAGNnmABhZpQAaWSQAG1qlwBtbJoAamuYAGhmmABmZJYAZGGTAGJfkQBjYZMAYV+RAFxajABXVocAUlKIAE9OhQBMSoUATUqGAEFBgwA6P4EAOEeIAEdbnQBVaawAXG+yAF5wswBfcLQAXm2uAFppqABbZqMAVGCbAFJajgBYXZQAamubAG5rkwDItbEAxauqAMqvrQDFsqwAxrCwAMaxsADGsbAAxrGwAMaxsADGsbAAxrGwAMWxsADJrq4AyK6uAMqwsADLsbEAy7KtAMqxrQDIr6sAybCsAMeuqgDHrqoAxq2pAMWsqADD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tq0A07atANK1rADXurEA3cC3ANi+sADVu60A1butANm/sQDUuaoA27+wAN/DtADfw7MA07ytANa/sADbxbYA4sy9AOXLvQDly70A48i6AN/FtwDgxrgA3MKzAN3DtADhx7gA3se7AN/FuADkybkA4sW0AN7GtgDbyL8A4MvAAODFsgDfxrsA4svAAOXOyADk0coA4M7HAN3MxQDezcYA49HJAOHPyADk0ssA5NLLAOHPxwDbzswA3c7LANHBuwC9raYAkoGHAHx2kABcYn0AVmBrAGNfbQBHSFgAICErABwYGAAeFhgAHRQWACceHwAnHh4ANzxBAH9yewCafHwAoHxrAJN3cQCXeW8AmnpuAJ17bgCbeGsAnHlsAJ57bgCffG8Am3hrAJt4awCbeGsAm3hrAJt4awCbeGsAm3hrAJt4awCceWwAm3hrAJp3agCZdmkAmndqAJp3agCad2oAmndqAJh1aACZdmkAmndqAJt4awBdW4gAXVuIAFxahwBcWYYAVVqCAFVYhQBVWIcAVVeIAFRYhwBTV4cAUlWIAFJTigBPVIgATlOHAExRhQBMUYUAS0+CAElNgABGSn0AREh7AEJGdwBARHUAOz9wADg8bQA4PG0ANzttADk9bgA7P3AAPEBzAD5CdgBCRnoARkl8AEVOgABKUoMAUVWIAFNXigBfW4sAYF2NAGNgkABlY5MAZ2SSAGlmkQBuaJEAcWmSAHRtkAB2bo8Ae3CPAH5ykACBc5MAg3SSAId2kgCKd5EAjHiRAI14kACPeY4AkHmMAJN+kgCUfZAAlnuMAJV7iQCUfIwAlX+QAJR8iABHS38ARlSPAFBemQBTYZwAVWSfAFhmnABaZ54AXWqhAF9towBja6QAWWefAFJmngBRbKIAVGunAFNrpgBTa6YAU2ulAFJsqgBTbKoAVG2rAFZurQBPbqwATmysAE5qrQBOarAAR2asAEZjrABGY64AR2SxAEtkrwBQabIAVWyzAFdtsQBjcLMAYWysAGFrqgBcZqIAXWecAFZglQBLV4oAUV2PAF5gngBeYp0AX2OcAFVakgCEe5UA0bWpAMKvqwDGr60Ax7KxAMaxsADEr64Aw66tAMaxsADGsbAAxrGwAMWwrwDGsrEAxrKxAMaysQDGsrEAyK+qAMivqwDIr6sAyK+rAMivqwDIr6sAyK+rAMivqwDK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tKUA2LqqANi5qQDZu6sA3L2tANW4pgDYuaYA1rWfANazmwDbvqkA4MGuANi8rADUt6gA172tANvBsQDgxrYA4si4AOLJuQDky7sA4sm5AN/GtgDcwK8A3sOxAN7DsgDdwrEA2cO0ANvEtQDcxbYA3ca3AN3HuQDgyLkA4si4AOHHtADdxrgA4Mq+AOLOwwDhz8cA38q9AN3DrwDgxrIA3sm8AODNwwDhz8cA3MvFANvLxwDTxr8A0rm0AKSRlABlZ3QAZGd4AGJicgBwcHwARURPACUgIwAZFBYAJBwdACYcHgAkHBoAHBUYAEk7PwCMdHcAl3hyAJd4bgCcfHEAlXlxAJx6bACcem0AnHptAJt6bQCdem0AnXptAJ16bQCdem0Am3hrAJx5bACceWwAnHlsAJx5bACceWwAnHlsAJx5bACad2oAm3hrAJt4awCbeGsAmXZpAJp3agCad2oAmndqAJp3agCad2oAmndqAJp3agBcW30AYFx8AF9bewBfW3kAWlt/AFpZgQBbWYIAW1iDAFpZggBZWIMAWFaEAFhUhgBUVYQAU1SDAFFSgQBRUoAASU2AAEdLfgBDSHsAQUV5AD9DdAA+QnMAPEBxADs/cAA4O2wAODxtADk9bgA7P3AAPEBzAD9CdQBDRnoARkl9AEROgABKUoQAUVSIAFRXigBVV4wAV1qOAFtdkgBdX5QAYGGUAGJilABnZZQAamaTAGRllQBnZ5UAa2mTAG5qkwBuaZQAcmuUAHVtlAB4b5MAe3GWAH5zlQCDdZYAh3iXAIN1lQCGd5UAiXiUAIx6lACMeI0Ajn2TAJJ8jgBCTIYATFmUAFRhnABUYp0AVGOdAF1opQBcZ6QAXGilAF1opQBabKQAXW6mAGBvpwBhb6cAXnKnAF5ypwBecqcAXnKnAF1xqgBccKkAW2+oAFpupwBcb6kAW26qAFtsqwBaa60AWGusAFdprABXaK4AWGixAFNqrgBZbrEAX3KzAGN0swBYZqgAV2OjAFljoQBTXZoAVlqNAExOhgBPT44AUU+TAExSnABMUpoAUlmeAFFZngBpa5MAwa+tAMCwrgDIr6oAw66tAMWwrwDGsbAAx7KxAMWwrwDFsK8AxbCvAMWwrwDHsrEAxrGwAMeysQDGsrEAy7GtAMuyrgDLsq4Ay7GuAMuyrgDLsq4Ay7KuAMuyrgDI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pZMA06yQAM+qjgDUq4gA16p/ANOqhQDXtpsA1runANy+qADfv6wA4cGuAN+/rADZuaYA0bOgANi6pwDcvqsA48WyAOPItADkybUA4sezAN7DrwDcwrIA4Ma1AOTKuQDhx7YA4se4AOPJugDkyboA48i6AOfJtwDhxrQA4cm3AOHJuADXvKwA1rytAOPKvgDjy8EA3MK3AN3BqQDcwKcA2L+wANbFvADbycIA2MXBANPAvQC0oJ0AaF5nAG1uewBTVmEAaGRuAFVQWAAmHiQAIBgbACIaGQAgGBgAGhIUAB4VGQBcUVcAmICCAJd3cwCYe3AAnHhwAJx4cACceHAAnHhwAJx4cACceHAAnHhwAJt3cACdemwAnHlsAJx5bACbeGsAmnlsAJt5bACbeWwAm3lsAJt3agCbeGsAm3hrAJt4awCbeGsAm3hrAJt4awCbeGsAmndqAJp3agCZdmkAmXZpAJh1aACZdmkAmXZpAJl2aQBoWXAAZ1lxAGNXcwBgVnMAYFdxAF1WdABbVnUAWlZ2AFhXdQBYVnYAWFV5AFhVegBUUnkAUVB5AE1OeABLTXkAR0p3AEZJdQBDRnMAQURxAD1BcQA7P28AODxsADU5aQAzOGkANTprADg9bgA6Pm8AOkFzAD1EdgBBSHoAREt9AElNgABNUYQAUVWIAFNXigBWWo0AWFyPAFtfkgBdYZQAX2OUAF9jlABhZZYAYWWWAGJmlQBjZpYAY2aWAGRomABpZ5UAamiWAGtplgBraZcAbWqYAG5rlwBybJYAdG2VAHJtlwB2bpcAeXCWAHxylgCBdJQAgnSUAIR2lwCEeJoAVFiJAEpaigBSYZgAW1+cAGBjoQBhZKIAYGOhAF5hnwBZY5wAWWOcAFljnABaY5wAUmGZAFNimgBTYpoAU2KaAFRjmwBVZJwAV2aeAFlooABcZ6EAWmWgAFhioABXYaEAU16bAFJcmwBSW50AXWWqAGdtqAByc6kAc3OrAGJmpQBTYKcAU12eAFJWjwBISn4AOTp0AD9BhQBARZEAQ0yWAE5WmwBUXKEAUlufAFFZnQBOXJkAloyfAMWspwDCq68AwayrAMKtrADDrq0AxK+uAMSvrgDEr64AxK+uAMSvrgDGsbAAxrGwAMaxsADHsrEAxrOtAMezrgDHs64AxrOuAMuxrgDLsq4Ay7KuAMuyrgDL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mJMAtpiUALGVjQCxlY4AsZWOALGVjgCxlowAsZaMALGWjACxlowAr5SKAK+UigCvlIoAr5SKAK2SiACuk4gArpOIAK6TiACUo7YAiZeuAICOpQB2g50AbXiWAF1oiABTXX8ARE1yADxBaAAxNl4AMDNfADI0YQAwNmQAMTZmADM4agA0OGwAMjltADM4bwAzN3IANTl0ADE6cQAuOHIAMDt2ADRAfQA3Q4MAPUyLAD5PjgBDVJQARlqVAEhclQBNXpYAUWCXAFNilwBVY5UAWWeTAFxpkwBiao8AY2mLAGZphwBjY30AXV9xAFxbaABcVVsAXVFSAFxPUABcT00AYE9MAGNRTABgUEoAYFBKAGBQSgBgUEoAYFBKAGBQSgBgUEoAYFBKAGFRSwBhUUsAYVFLAGFRSgBdTk0AXk9NAF5PTQBeT00AXE1LAF1OTABdTkwAXU5MAF1OTABdTkwAXU5MAFxOTABfTEsAYE5NAGFPTgBiUE8AaFRTAGxYVwBwXFsAcV1cAHJgYAByX2EAcV1hAHFcYwBqXGIAaFljAGVXZgBhVGYAXVFnAFdPZwBRTWkAT01sAEtLbwBKSm4AS0tvAE1NcQBSUnMAV1NyAF5XdQBmW3gAbmF7AHRmfAB+a30Ag298AIZwfQCJcnwAi3N7AIx0egCPdXQAbGiHAEtblABLXJ0ASFidAElaoQBJXKUAS1+rAEdiqQBKZKwATGeuAEZhqQA5UpQANEqMADpNjABBU5AAQVaOAEZalQBHXp0AS2OmAFNvsABcd7cAXXq2AGF9twBkfrsAYHy6AFp2twBad7kAYHq+AF54vABfeb0AZH7CAGB3vgBdd7wAWHK1AFFtrgBSYqQAWmqqAGNxrQBjb6oAYG6rAFZnpQBUZqcAUWSnAEtgpABFWp4ARVqeAEtfowBBXJ4AOlOZAEZepgBNZK8AVGqxAFpwtwBacLgAXnS7AGF5uwBierwAZHy+AGiAwgBshMMAbIfEAGuJwwBpi8EAZYm/AGOHvQBihrwAYYW7AGKIvgBjh70AZYa8AGaFvABnh7wAaYm+AGiIvQBkhLkAY4K3AF9+swBffrMAW3qvAFt6rwBaea4AWXitAFh4rQBZc6kAWnSqAFlzqQBWcKYAU2uiADhGbwAwN1QAMjdUACgoMQASERcADw0OAA0KCAACAAAALjdAAE5ZYgAV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i4YAqIuHAKiMhQCojIUAqIyFAKiMhQCojYMAqI2DAKiNgwCojYMApouBAKaLgQCmi4EApouBAKWKgAClioAApYqAAKWKgACWprcAipqsAICOpAB0g5kAbHeWAFxnhwBRW30AQ01yADk+ZQAyNl4AMjVhADI1YQAzOGkAMzdpADQ4bQA1N28ALzlxAC84cgAvOHMALjZ0ADM6dQAvOHQAMDp5ADI9fQA5RYUAPUyLAD5QjwBFVpUAQ1uWAEpgmQBMYJgAUmWbAFZpnQBeb58AYXKdAGd5oAByepsAdX6bAHmAmAB6gpUAfoCPAHx9iwB8fIcAd3aBAHZwcQB0bG0AcWdkAG9jYABpYlkAaWBXAGlcVQBpWVMAZFZQAGRWUABiVE4AYVNNAGRUTgBiUkwAZFROAGJRSwBeT04AX1BOAF9QTgBgUU8AX1BOAF5PTQBcTUsAXE1LAF5PTQBcTUsAW0xKAFpLSQBbTUoAXU5MAF9RTwBhUlAAZ1VWAGlXWABsWlsAbVtcAHJfYgByXmIAcVxlAHJdZgBrW2UAa1xnAGdaZwBiVmUAW1NoAFVQaABRT2oATk9tAE1NcgBOTnIAT09zAE5OcgBTU3QAWlZ1AGBZdwBmW3gAcGN9AHVnfQB/bH4AhG99AIdzfACLdX0AjHZ6AIx0eACPdXcAZmSEAERTjwBFVpgASFidAEpYoQBMWqUATlunAElcqABIX6kAR2GoAEVjpQBEWp4AOU6OADVGggBBT4gAPlCJAEZYlABKXp8AT2WpAGFoqwB0fa0AgYWsAIeFsACIhLUAgX6zAHh2sgBxcLAAcHGsAG5wpgBvcakAc3K1AId5swCFfrgAg4K7AHV6sQBlbrUAW2iwAElbpQBLYa0ATWOlAE1jpQBHXJ4AQVaYADhTlgBAWp0ASWSnAE9qrQBbb7EAXnK1AF5ytQBkebsAZ3i7AGp7vgBsfcAAanu+AHCCwwBxg8MAdIbEAHSJwgB4jMUAdYvEAHKMxABzjscAbo6+AG2NvwBnib8AYIW7AGqKvgBoh7wAaIi9AGuLwABqir8AaIi9AGaGuwBlhboAXn6zAF19sgBfe7EAYHmwAF54rgBdd60AW3WrAFp0qgBcdqwAW3WrAFlzqQBYcacAT2+rAEtZiQAyNlUAKC5CAC8zQwAeHywAGBcbABANCwAFAQoAcX2OANbk9QAp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gXsAnYF5AJ1/eQCdgHkAnoF6AJ6BegCcf3gAnH94AJx/eACcf3gAnH94AJx/eACcf3gAnH94AJx/eACcf3gAnH94AJx/eACOn68AhZSmAH2LoQB0gpkAaHKRAFdiggBNV3kAP0htADc8YwAwNV0AMzViADY4ZQAyOGkAMjdpADQ4bQA1OG8ALDZuAC42cAAwOHMAMjl3AC82cQAuN3IAMTt6ADZBgQA5RYUAPUyLAD5QjwBFVpUAQlmUAExhmgBTZ58AXXCmAF5zoABne6QAboGlAHWIqQB9i6wAgpGtAImXrQCJmKoAk5yqAJScqQCaoKoAmZ2nAJidogCXm58AlZiYAJWVlQCPkZUAjo6SAIuHjACKg4kAjIGAAId8fACBdnYAfHFyAHhvZwBxZ18AbGJaAGRbUwBkVFMAY1NRAGFRTwBfUE4AX09OAF5OTQBdTUsAXU5MAFpLSQBcTUoAXE5LAF5PTQBbTEoAXU5MAGBRTwBhUlAAZFJTAGhWVwBtW1wAcV9gAHFeYgByXmIAclxkAHJdZgBrW2UAa1xnAGdaZwBiVmUAW1NoAFVQaABRTmoATk9uAEtKbwBNTXEAUFB0AFJSdgBSUnMAWlZ1AGNcewBrYH0AdWiCAHlrgQCDcIIAiHSCAIl1fgCNd38Ajnh8AI52ewCPeXMAZWV/AEBShwBAU48AQFKRAD9RkgA/T5QAPk6UAEFQlQBEVZkARVqbAERdmgA/V5oARVubAEFSjgA9S4QAQE6AAEZUiwBHVpEASlybAFBjnABbZKkAZGSoAGtqpABub6kAb3CpAG1zqQBtdKoAdnunAHyCqgB6gKoAc3aqAGpurgBlaKcAbGuqAG5tqwBeaK4AWWauAElbpABFWqUAP1igAEZfpwBMZa4ATGavAFRnqwBXaq4AW26yAF5ytgBhcLMAaHe7AGZ1uQBkc7cAbHm3AG98ugBxfrwAb3y6AHGAuwB0gr0AeonBAH2NwQB6iMIAeIjBAHWJwgB3i8UAeJDCAHSNwABsh74AZIG5AGSEuQBniL0AaIi9AGaGuwBlhboAaIi9AGaGuwBff7QAXn+0AF59sgBfe7EAYHmvAFt7sABaeq8AWHitAFd4rABcdqwAW3WrAFlzqQBYcagAUHGeAEtmnwBBTYAANDJQAB8jMwAZGiYAGBYaAA8KCQAAAgEAWlhkAMPC0QA1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cnEAkHBtAI5xagCOcWoAjnFqAI5xagCOcWoAj3JrAJBzbACQc2wAlXJsAJRybACUcmwAlHJsAJRzagCUc2oAlHNqAJRzagCMlqgAgYqdAHuDmgBvdo4AX2WCAFNZdwBJTm8AQERnADk5YQA1N18AMTZhADM4ZQAyNmgAMzZoADI4bQAxOG8ALzlxADA5cwAxOXUAMTl3ADM5dQAwOXUAMTx4ADVBfQA4SIcAPU6NAD9SkQBDWZcASF+cAFJooABZb6IAY3ioAGl/qQBziK8AeY2vAH6TsgCLnLUAkKC3AJeluwCZp7oAnai2AKKruACnr7kAqLC5AK2zugCrsbgAqa+2AKiutQCnq7AApqqvAKOnrAChpaoAnKKnAJqeowCXmJ4AlZSaAJSTlwCPjZIAjYuQAIiGiwCEgIEAfXl6AHRwcQBva20AcGZnAGxiYwBmXV4AYllaAGBVVABeU1MAXFFRAFlPTwBeT00AXk9NAGBRTwBgUU8AZ1VWAGlXWABsWlsAblxdAHBdYABvXmIAbV1kAGtcZABqXGgAZ1pmAGFWZwBfVWYAWFBlAFNOZgBRTmkATk9tAEtMcwBNTnQAUFF3AFJSeQBTVnYAW1t5AGJdewBtZYEAc2mDAH1whgCDc4QAiXaEAI13hACQeYMAkXmBAJB3fQCJdXMAXFp4ADxJfwA/S4YAQE6JAEFQigBBUIoAQE6IAD9PiwA+TYoAPk6KAEBPjABAT44AQVGMAEJTjAA/UIkAQVKFAEFRhgBBT4gASVeRAElamQBUYqEAXGijAGNvqQBlcKYAZnGnAGpyqABscqkAZXSoAGt5rQBseq4Ab32xAG1/swBme7EAX3eyAFx4tQBadLcAVW6wAFJprABTaawAWWutAFxsrgBda64AXWisAFxpqwBha60AZWyvAGdssABpcbAAbnW0AHN2tgB1drYAdHmzAHd7tgB5fbgAeHy3AH2AtwB8grkAeIK4AHuGvQB5hrsAeIm8AHaJvABziLsAbYW7AG2HvQBphbsAaYi9AHGMvgBtir0AZ4a8AGSDugBigrcAZYW6AGWFugBhgrcAYH+0AF18sQBdfLEAXn2yAF59sgBefbIAW3qvAFh3rABcdqwAXXetAFx2rABZc6kAVnWnAFJypwBJZZcANEZxAC41VQAZGSsADw0TAAIBBQAAAAAAcGV4ANLRzgBJ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 + Windows� API Code Pack for Microsoft� .NET Framework provides a source code library that can be used to access some features of Windows 7 and Windows Vista from managed code. These Windows features are not available to developers today in the .NET Framework. + + \ No newline at end of file diff --git a/source/Samples/HandlerSamples/SampleFile.xyz2 b/source/Samples/HandlerSamples/SampleFile.xyz2 new file mode 100644 index 00000000..42294537 --- /dev/null +++ b/source/Samples/HandlerSamples/SampleFile.xyz2 @@ -0,0 +1,12 @@ + + + + Handler Sample File + Jon Harkness + 45 + Seattle, Wa + + Qk22MQQAAAAAAEYAAAA4AAAALAEAAOUAAAABACAAAwAAAHAxBAATCwAAEwsAAAAAAAAAAAAAAAAA/wAA/wAA/wAAAAAAAADb1csA2tbMANrXzQDb2M0A29jOANrXzQDb2M4A3NnNANvYzQDc2c4A29jNANvYzADa180A2tXJANnUyADW0cUA1dDEANTOwQDSzL8Az8m8AM7GuQDMwrYAyL+zAMW+sADDuq4AwLaqAL2ypgC5r6IAt62gALWrngCyqp0AtayeALWsnwC1rJ8AtqueALWsnwC2rJ4At6yfALasnwC2rJ8At62gALetoAC2rJ8At62gALetoAC2raAAtq2gALetoAC2raAAtqyfALasnwC3raAAt62gALetoAC4rqEAuK6hALeuoAC3rqAAuK6hALiuoQC4rqEAua+iALiuoQC4rqEAua+iALiuoQC5r6IAubChALmvoQC6r6IAua+jALqwowC6saMAu7CiALyxowC7sKIAu7CiALuwogC8saMAvLGjALuwogC7sKIAvLGjAL2ypAC8saMAvLGjALyxowC9sqQAvbKhAL2xoAC9sqEAvbKhAL2yoQC9sqEAvrOiAL+zogDAsqEAv7KhAL+yoQDAs6IAv7OiAL+yoQC/sqEAwLOiAMGzogDAtKMAwbWkAMK0owDCtaQAw7alAMK1pADDtqUAwrWkAMO2pQDDt6UAxLakAMS2pADEt6UAxbemAMW3pwDHt6cAx7imAMi5pwDHuKcAx7inAMi5pgDKuqcAzLuoAMu6pwDLuqgAzLupAMq7qADKvKgAzLyoAMy8qADOv64A1c6/ANbOwQDUzb8A08u+ANbOwQDXz8IA18/BANbNvwDUzL4A1c7AANXOwADUzb8A1My+ANXMvgDYz8EA2M/BANfOwQDXz8AA2NDAANrTxgDf2MwA5OHUAOno3QDs7OQA7/DnAPDw6ADv7+cA8PDoAO/w5wDw8OgA8PDoAO/v5wDw8OgA8fHpAPDw6ADv7+cA7+/nAPDw6ADx8ekA8fDoAPHx6QDx8uoA8fHpAPDw6ADw8OgA8fHpAPHw6ADx8ekA8fHpAPHw6ADw8OgA8PDoAPHx6QDw8OgA7+/nAPDw6ADx8OgA8fHpAPHy6gDx8OgA8PDoAPDw6ADx8ekA8fHpAPDw6ADu8ekA7/HpAO7w6ADu8ekA7vHpAO7x6QDu8OgA8PHpAPHx6QDv8uoA7/LqAO/y6gDw8uoA8fHpAPDx6QDv8ukA8PLrAPDx7ADv8eoA7/HpAPDy6gDw8uoA8PHrAPDx7ADv8OwA7/HrAO/y6QDw8uoA8fHtAPDy7QDw8u0A8PHsAPDx7QDw8eoA8fLqAPDy6gDv8uoA7/HpAPDy6gDw8e0A8fLsAPHy6gDw8ekA8fLqAPHy6gDw8ekA8fLqAPLz6wDx8uoA8PHpAPHy6gDx8ekA8fLqAPDy6QDx8e0A8fLsAPHy6gDw8ekA8fLqAPHy6gDw8ekA8fLqAPDx6QDx8uoA8fLqAPHy6gDx8uoA8fLqAPHy6gDx8uoA8fLqAPHx6QDx8ekA8fLqAPHy6gDx8uoA8PHpAPDw6QDx8OgA8vHoAPPy6QDy8egA8fLpAPHz6gDz8egA8vHoAPHw5wDx8OcA8fDnAPLx6ADy8egA8vHoAPLx6ADx8OcA8O/mAPDv5gDx8OcA7/DnAO7w5wDa1ssA29fMANrXzQDb2M0A29jOANzZzgDc2c0A3NnOANzZzgDc2M0A3NnOANvYzQDa180A2dXJANnUxwDY0sUA1M/DANTOwQDSy74Az8i7AM3FuADMwrUAyL+yAMW+sADCuawAv7WoALyxpQC5r6IAtqyfALetoAC1rJ8AtqufALWsngC1rJ4AtqufALWsngC1rJ8AtqufALWrngC2rJ8At62gALasnwC2rJ8AuK2fALisoAC3rZ8At62gALatoAC3rJ8At62gALetoAC3raAAuK6hALitoAC3raAAt62gALeuoAC3rqEAtq2gALetoAC4rqEAuK6hALiuoQC4rqEAua+iALqwowC5r6IAuK6hALmvoAC4rqEAua+iALqwowC7saMAuq+hALuwogC7sKIAvLCiALuvoQC7sKIAu7CiALuwogC7sKIAu7CiALuwogC8saMAvLGjALyxowC8saQAvbKhAL2yoQC8saEAvbKhAL2yogC8saEAvLGgAL2yoQDAs6IAv7KhAL+yoQDAs6IAwLOiAL+yoQDAs6IAwbOiAMCyoQDBtKMAwbWkAMG1pADBtKMAwbSjAMK1pADCtaQAw7alAMS3pgDDtqQAxbakAMS3pADEt6UAxLalAMW3pgDHt6YAxrenAMe4pwDIuacAyLmmAMi5pwDKuqcAzLuoAMu6pwDLuqgAzLqpAMu8qQDLvKgAy7ypAM2+rADVzb8A1s7BANTNvwDVzL8A1s7BANfPwgDWz8EA1c2/ANTLvQDVzsAA1s/BANTNvwDTzL4A1s2/ANjPwQDXzsAA2M/BANfPwQDYz8EA2dLEAN7YywDk4NMA6OfbAOzs4wDv7+cA8PDoAPDw5wDv7+YA7vDmAO/w5wDw8OgA8fHpAPDw6ADx8ekA8PDoAO/v5wDv7+cA8PDoAPHx6QDw8OgA8fDoAPHx6QDx8uoA8PHpAPHx6QDx8ekA8fHpAPHx6QDx8OgA8PDoAPHx6QDw8OgA8PDoAPDw6ADv7+cA7+/nAPDw6ADx8OgA8fHpAPHx6QDx8OgA8PDoAPDw6ADx8ekA8fHpAPDw6ADv8ekA7/HpAO/w6ADv8ekA7/HpAO/x6QDv8OgA8PHpAPHy6gDw8uoA8PLqAPDx6QDw8ekA8fDoAPDx6QDw8uoA7/HqAPDx7ADw8usA7/HpAPDy6gDw8uoA8fLsAPHy7QDw8esA8PHrAPDy6gDx8usA8PHtAPHy7QDx8u0A8fLsAPHy7QDx8usA8fLqAPHy6gDx8usA8fPrAPDz6wDx8uwA8PHrAPHy6QDx8uoA8PHpAPDx6QDw8ekA8fLqAPLz6wDx8uoA8PHpAPDx6QDx8uoA8PHqAPHy6wDx8uwA8fPtAPLz6gDx8uoA8fLqAPHy6gDx8uoA8fLqAPDx6QDx8uoA8fLqAPDx6QDw8ekA8PHpAPHy6gDx8uoA8fHpAPHy6gDx8uoA8fHpAPDx6QDw8ekA8fLpAPDy6gDy8ukA8/HpAPLx6QDz8egA8vLpAPLy6QDz8ekA8/LpAPLx6ADx8OcA8vHoAPHw5wDx8OcA8vHoAPLx6ADx8OcA8fDnAPHw5wDx7+YA8PDnAO/w5wDZ1swA2dfNANzXzQDc2M0A29jNANzZzgDe2M0A3dnOANzazwDd2c4A3tjNAN3YzQDb1swA2dbJANjUxwDZ0cQA1s/DANTOwADSzL0A0Mi9AM7FuADKwrUAyb6yAMa8rwDCuawAvrWoALuxpQC4rqEAt62gALWrngC2qp0AtaueALSqnQC1q54AtqyfALWrngC2rJ8AtqyfALasnwC1q54AtqyfALasnwC2rJ8Atq2gALatoAC2rJ8At6ygALatoAC3raAAuK2gALeuoQC3raAAt62fALitoAC4raAAt62gALWuoAC3rqEAuK6hALasnwC3raAAua6hALeuoQC5r6IAuK6hALiuoQC4rqEAua+iALqwowC6sKIAurChALmvogC6r6QAuq+iALqvoQC8saMAu7CiALuwogC7sKIAuq+hALqvoQC7sKIAvLGjALuwogC8sKIAvbCjALywowC7sKIAvbKkAL2ypAC8saQAvLGkALyxpAC9sqMAvbKhAL6zogDAsqEAv7OiAL6zogC/s6IAwLOiAL+yoQDAs6IAwLOiAMCzogDBtKMAwLSjAMC1pADBtKMAwrWkAMK1pADCtaQAw7alAMK1pQDEtqQAxbelAMS2pQDFt6YAxbemAMW4pwDHt6YAx7inAMe4pwDHuKcAyLmmAMi5pwDJu6kAybqpAMu7qQDMu6kAzLqpAMy7qQDLu6gAzb2qANLJuwDX0MMA08y+ANTNvwDWzsEA2NDDANfQwgDXzsAA1Mu+ANTMvwDVzsAA1M2/ANTMvgDXzb8A187AANfPwQDYz8EA18/BANjQwgDa0cMA3NbJAOLf0gDn59sA7OzjAO/v5wDv8OcA7+/nAO/v5wDu8OYA7vDmAO/w5wDw8OgA8fHpAPDw6ADx8ekA8PDoAO/v5wDv7+cA8PDoAPHx6QDx8ekA8PDoAPDw6ADw8OgA8PDoAPHx6QDw8OgA8PDoAPDw6ADw8OgA8fHpAPHx6QDw8OgA7+/nAO/v5wDv8OgA8PDoAPHx6QDx8ekA8PDoAPDw6ADx8ekA8fHpAPHx6QDw8OgA8fHpAPHw6ADx8ekA8fHpAPHw6ADx8OgA8fHpAPHx6QDx8OgA8fDoAPDx6QDx8ekA8fHpAPHw6ADx8ekA8PLqAPHy6gDx8uoA8fHpAPHy6QDx8ekA8fHoAPDx7ADw8e0A8fHsAPHx7ADx8ukA8vPrAPDx7QDw8u0A8PLtAPHy7ADy8+oA8fPqAPHy6gDx8uoA8fLqAPLy7ADy8e0A8fPtAPDz7QDy8+oA8fLpAPLz6wDx8uoA8fLqAPHy6gDx8uoA8fLqAPDx6QDx8uoA8fLqAPHy6gDx8uoA8vLtAPLx7QDy8+oA8vLqAPHy6gDy8+sA8vPrAPHy6gDx8uoA8fLqAPDx6QDw8ekA8PHpAPHy6gDx8uoA8fLqAPDx6QDx8uoA8fLqAPHx6gDw8uoA8PLpAPHy6gDw8uoA8vLpAPPy6ADz8ekA8vDqAPLx6QDz8ukA8vHoAPLx6ADy8ekA8vLpAPPy6ADz8ukA8vHoAPLx6ADy8egA8fDnAPHw5wDy8egA8vHoAPHw5wDx7+YA8PDnAO/w5wDa18wA2tfNAN3YzQDd2M0A29jNANzZzgDd2M0A3NjNANzZzgDd2c4A3djNANzXzADc1swA2tXJANnUxwDY0cQA1s/DANPOvwDSzL0A0Mi7AM7FuADLwrUAx76xAMW7rwDCuKwAvrWoALuxpQC4rqEAtqyfALSqnQC1q54AtaueALWrngC2rJ8AtaueALasnwC2rJ8AtqyfALetoAC2rJ8AtqyfALasnwC2rJ8At6ygALatnwC3rKAAtq2fALasnwC3raAAuK2gALasnwC2rZ8At62gALitoAC4rqEAt62gALatoAC3rqEAuK6hALetoAC3raAAuK2gALiuoQC4rqEAuK6hALmvogC5r6IAua+iALmvogC6r6EAuq+hALqvogC6sKMAu7CiALqvoQC7sKIAu7CiALqvoQC6r6EAu7CiALqvoQC6r6EAu7CiALuwogC6sKIAurCiALuwogC8saQAvLGjALyxowC9saMAvLKjAL2yowC+sqMAvbKhAL6yoQC/sqEAv7KhAL6yoQC/sqEAv7KhAMCzogC/sqEAv7KhAMG0owDAs6IAwbOiAMC0owDBtKMAwrWkAMO2pQDDtqUAwrWkAMO2pQDEtqUAxLelAMS2pQDFt6YAxLalAMW3pgDHuKcAx7imAMe4pwDIuKcAx7imAMi5pwDIuacAyrqoAMq6qADLu6gAy7uoAMu7qADLuqcA0ca2ANbPwQDUzb8A0su9ANTNvwDWz8EA1s/BANXOwADUy70A1cy+ANbNwADWzcAA1M2+ANbNvwDYz8EA2M/BANjPwQDYz8EA2M/BANnRwwDc1MYA4t3RAOjm2gDs6+IA7+/mAPDw6ADw8OgA7+/nAO7v5gDv8OYA7/DnAO/v5wDw8OgA8PDoAO/v5wDw8OgA7+/nAO/v5wDw8OgA8PDoAPDw6ADw8OgA8PDnAO/v5wDw8OgA8PDoAPDw6ADw8OgA7+/nAO/v5wDw8OgA8PDoAPDx6ADw8OgA8O/nAO/v5wDw8OgA8PDoAPDw6ADw8OgA7+/nAO/v5wDx8ekA8PDoAPDw6ADw8OgA8PDoAPDw6ADx8ekA8PHpAPDw6ADx8ekA8PDoAPHw6ADx8ekA8fDoAPHx6QDw8OgA8fDoAPHw6ADx8ekA8fLqAPDx6QDw8ekA8fHpAPHx6QDw8ekA8fLpAPDx6wDw8esA8fHrAPDx6wDx8uoA8fLrAPHy7QDx8+4A8PLtAPHy6wDx8uoA8fLqAPDx6QDx8usA8vPrAPHy7ADz8u4A8fPrAPHz6wDx8uoA8fLqAPLz6wDy8+sA8fLqAPHy6gDx8uoA8fLqAPHy6gDx8uoA8fLqAPHy6gDx8uoA8fLsAPLy7ADy8+sA8vPrAPLz6wDy8+sA8fLqAPLz6wDx8uoA8PHpAPDx6QDx8uoA8PHpAPHy6gDy8+sA8fLqAPDx6QDx8uoA8fLqAPDy6gDx8eoA8fHpAPHy6gDx8uoA8vHpAPPx6QDz8ekA8/HqAPPx6QDy8ugA8/LpAPHw5wDz8ugA8vHoAPPx6QDy8egA8/LpAPPy6QDy8egA8vHoAPHw5wDy8egA8fDnAPHw5wDx7+YA8PDnAO/w5wDc18wA3djNANzXzADc2M0A3NjNAN3YzQDe2s8A3trPAN7azwDe2c4A3djNAN3YzADb1swA2tXJANnUxwDZ0cQA1s/DANTOvwDTy70Az8e7AM3EtwDLwbUAyL6yAMW7rwDCt6sAvrSnALuwpAC4rqEAtqyfALWrngC1q54AtqueALarngC1q54AtKqdALasnwC2rJ8AtqyfALetoAC2rJ8AtqyfALatoAC2raAAtqyfALasnwC4rZ8At62fALarnwC3rJ8AuK2fALetnwC3raAAt62gALasnwC3raAAuK6hALetoAC3raAAuK2hALiuoQC4rqEAt62gALetoAC4rqEAua+iALiuoQC4rqEAua6gALqvoAC5r6EAuK6hALqvogC6sKIAu7CjALuwogC6r6EAuq+hALqwogC7sKIAu6+hALuwogC7sKIAu7CiALuwogC7sKIAu7CiALuwogC8saMAu7ChALyxogC9saMAvLGjAL2zoAC+sqEAvbGgAL+yoQC/sqEAv7KhAL+yoQC9saEAv7KhAMCzogDAs6IAwLOiAMC0owDBs6IAwLOiAMC0owDBtaQAwrWkAMO2pQDCtaQAw7alAMO2pQDDtqUAw7emAMO3pgDEtqYAxLalAMW3pgDHuKcAxrenAMe3pwDIuKcAx7mmAMi5pwDIuqgAyrqnAMu5pgDKu6cAybynAMu7qADNv60A1c7AANXMvgDRybwA08u+ANbOwADWz8EA187AANTLvQDUy70A187AANfOwADVzL4A1cy+ANbNvwDXzsAA18/AANjOwADY0MIA2dHDANvTxQDg288A5+XYAOvr4QDu7+cA7/DoAO/v5wDv7+cA7e/lAO7v5gDw8OYA7/DnAPDv6ADw8OgA7+/nAO/v5gDv7+YA8PDmAO/v5wDw8OgA8fHpAPDw6ADw7+cA8e/mAPDv5wDw8OgA8fHpAO/v5wDx8ekA7+/nAO/w6ADv7+cA8PDnAO/w5wDv7+cA8PDoAO/v5wDv8OgA7+/nAO/v5wDv7+cA7+/oAO/v6ADw8OgA7+/nAPDw6ADw8OgA7+/nAPDw6ADx8ekA8PDoAPDw6ADw8OgA8fHpAPDw6ADw8uoA8fHpAPHw6ADw8OgA8fHpAPHx6QDx8ekA8fLqAPHx6QDx8ekA8fHpAPHx6QDw8uoA8fLqAPHy6gDx8ukA8vPqAPHy6gDy8e0A8vHtAPLy7QDy8u0A8fLpAPHy6gDx8ekA8fLqAPHy6QDy8uwA8/PuAPLy7QDy8u0A8fLqAPLy6gDx8+sA8vPrAPHy6gDx8uoA8fLqAPHy6gDy8+sA8vPrAPLz6wDx8uoA8vPrAPLz6wDy8+sA8vPqAPHy6gDy8+sA8fLqAPP07ADy8+sA8vPrAPLz6wDx8uoA8PHpAPDx6QDx8uoA8fLqAPHy6gDy8+sA8PLqAPDx6QDw8ekA8PLpAPDy6QDx8ekA8/DqAPPw6gDz8OkA8/DqAPLw6gDz8ukA8/PpAPPy6QDy8egA8/LpAPLx6ADy8egA8/HpAPLx6ADy8egA8/LpAPLx6ADy8egA8vHoAPHw5wDy8egA8fDnAPHw5wDx8OcA8O/mAPDw5wDd2MwA3NfMANzXzQDd2M0A3dnOANzZzgDe2c0A3dnOAN3azwDd2c4A3tnOANzXywDb1ssA2tXJANnUxwDY0cUA1s/DANTNwADTyrwA0Me6AMzEtwDKwLMAyL6xAMS6rgDBt6oAvrSnALuwpAC3raAAtqyfALasnwC2rJ8AtaueALWrngC1q54AtaueALWrngC1q54AtqyfALasnwC3raAAtqyfALesnwC3raAAtaueALasnwC3rZ8At6ygALerngC3rJ8At62gALetoAC3raAAt62gALasnwC3raAAuK6hALetoAC3raAAt62gALetoAC3rqEAuK6hALetoAC4rqEAuK6hALiuoQC3raEAua6hALqvoAC5rqEAuK6hALqvogC7sKMAurCiALqwogC6r6IAu7CiALuwoQC7sKIAu6+hALuwogC7sKIAu7CiALuwogC7sKIAuq+hALuwogC8sKIAvLCjALuwowC8saMAvbGjAL2yogC9sqEAvbKhAL6yoQC+sqEAvrKhAL6yoQC+sqIAv7KhAL+yoQDAs6IAwLOiAMC0owDAs6IAwLOiAMG0owDCtaQAwrWkAMK1pADDtqQAw7alAMO2pQDEtqUAw7elAMO3pQDEt6YAxbalAMa4pwDGt6YAx7inAMe4pwDIuacAx7inAMe4pgDIuacAyrqoAMq6pwDJuqcAyrunAMy7qQDRx7gA1c2/ANLKvADSy70A1c7AANfPwQDXz8EA1Mu9ANTLvQDWzb8A1cy/ANTLvQDWzb8A187AANbNvwDVzL4A187AANfOwADX0MIA29PFAODZywDm5NcA6+vgAO7v5QDv8OcA7/DnAO/v5gDu7+YA7u/mAO/v5gDw8OcA7/DmAO/w5wDw7+cA7/DmAPDw5wDw8OcA7+/nAPDw5wDw8OgA8PDoAPDw6ADw7+cA8O/mAPDw5wDw7+cA8PDoAPDw5wDw8OgA8O/nAPDw5wDw8OcA7+/mAO7v5gDv8OcA8PDnAO/w5wDv8OcA7u/nAO/v5wDv8OcA8PDnAPDw5wDv7+cA8O/oAPDw5wDw8OcA7/DnAPDw6ADw8OgA8PDoAPDv5wDw8OgA8PDoAPHw6ADx8ekA8PDoAPDw6ADw8OgA8fHpAPHx6QDx8ekA8fHpAPDx6QDx8OgA8fHpAPHx6QDx8ekA8PHpAPDx6QDw8ekA8fLqAPLz6wDx8uwA8fLsAPHy7ADy8uwA8fLqAPDx6QDx8uoA8vLrAPLz6wDy8+wA8/PtAPLz7QDx8uwA8PHqAPLz6wDx8uoA8vPrAPLz6wDy8+sA8fLqAPLz6wDx8uoA8vPrAPHy6gDy8+sA8vPrAPHy6gDy8+sA8vPrAPHy6gDx8uoA8fLqAPLz6wDy8+sA8vPrAPHy6gDx8uoA8fLqAPHy6gDx8uoA8fLqAPHy6gDx8uoA8fLqAPHx6gDx8uoA8fHqAPLy6gDy8eoA8/HpAPLx6QDz8ekA8/HqAPPx6gDy8ekA8vHoAPLx6ADz8ukA8vHoAPPy6QDy8egA8vHoAPLx6ADy8egA8vLoAPLy6ADy8egA8fHnAPHx5wDy8ecA8fDnAPHw5wDx8OcA8PDnAPDv5gDc18oA3NfKAN3YzQDe2c4A3tjNAN7YzQDd2MsA3tnNAN7azwDd2c4A3tnOANzXygDb1skA2tXJANnUxwDW0cYA1s/CANTOwADSyr0A0Me4AM7EtgDKwbMAyL6xAMS7rgDAt6oAvbOnALuwpAC4rqEAtqyfALWrngC2rJ8AtaueALWqnQC2rJ8AtqyfALasnwC1rJ8AtaueALWrngC2rJ8AtqyfALisnwC5raAAtqyfALasnwC2rKAAtqyfALasnwC2rJ8AtqyfALetoAC3raAAtqyfALetoAC2rJ8At62gALiuoQC4rqAAta6fALesnwC4rqEAuK6hALetoAC4rqEAuK6hALmvogC4rqEAuK6hALiuogC5r6IAua6hALqvogC7r6IAu6+hALuvoQC7sKEAuq+hALqwogC6sKIAu7CiALqvoQC6r6EAu7CiALuwogC8sKIAu7CiALuxogC9sKIAvLCjALuwogC8saMAvLGjAL2ypAC9sqMAvLGgALyxoAC8saAAvbKhAL2yoQC+sqEAv7KhAL+yoQC/sqEAv7KhAMGzogDBtKMAwbSjAMK1pADBtKMAwbSjAMK1pADCtaQAw7alAMO1pQDDtqQAxLekAMO3pADDtqQAx7alAMe3pgDHuKcAyLmmAMe4pwDHuKcAyLmnAMi5pgDIuacAybmnAMq6qADKu6gAyruoAM7CsgDVzb8A1My+ANLLvQDUzb8A1s/BANXOvwDTzL0A0su9ANTOvwDVzb8A1Mq9ANXMvQDXzsAA187AANXMvgDWzb8A187AANjPwQDY0cMA3tjLAOTi1QDq6t8A7u7lAO/w5wDu7+YA7+/mAPDu5QDu7+YA7u/mAO7w5wDv7+YA7/DnAO7w5gDx8OYA8fDnAPHv5gDw8OcA7+/oAPDw5wDw8OcA8PDnAPHv5gDv8OYA7+/mAPHw5wDx8OcA8e/mAPHw5gDx7+YA8fDmAPHw5gDw7+YA7vDnAO/v5wDw8OYA8PDmAPHw5wDx8OcA8fDnAO/w5gDv8OcA8O/mAPHw5gDv8OcA7/DnAPHw5gDw7+YA7/DnAPDw5wDv7+cA8O/nAPHw5gDw7+cA8PDoAPDw6ADw8OgA7+/nAPDw6ADx8ekA8fHpAPDw6QDw8OgA8PDoAPHw6ADx8ekA8fHpAPHy6gDx8ekA8fDoAPDx6QDx8uoA8fLqAPLz6wDy8+oA8vPqAPHy6gDx8uoA8fLqAPHy6gDx8uoA8vPsAPLy7QDy8usA8vPqAPHy6gDw8ukA8PHpAPHy6gDy8+sA8vPrAPLz6wDy8+sA8fLqAPLz6wDy8+sA8vPrAPHy6gDy8+sA8vPrAPLz6wDy8+sA8vPrAPLz6wDw8ekA8fLqAPHy6gDx8uoA8fLqAPHy6gDx8uoA8fLqAPHy6gDx8uoA8PHpAPHy6gDx8uoA9PLrAPTy6wDy8+sA8fHpAPPx6gDz8eoA8/LpAPPy6QDz8ukA9PLqAPPx6gDy8ekA8/LoAPLx6ADy8egA8/LpAPLx6ADz8ukA8/LpAPLx6ADy8egA8fLmAPLy6ADy8egA8fHnAPLy5wDy8ecA8vHoAPLx6ADx8OcA8fDnAPHv5gDd2MwA3djMAN7ZzQDd2c0A3tnOAN7ZzgDd2c0A3tnOAN7azwDd2c4A3tnNANzYywDa1soA2tXJANnUxwDX0cUA1s/CANTOvwDSyrwA0Ma5AM7EtgDKwbMAx76wAMS6rgDAtqoAvLKmALqwpAC4rqEAtqyfALWsnwC1q54AtqueALarngC2q54AtqueALWsnwC1q54AtqyfALasnwC2rJ8AtqyfALisnwC5raAAt62gALatoAC3rJ8At62gALetoAC3raAAt62gALasnwC2rJ8At62gALetoAC2rJ8At62gALetoAC4rqAAtq2gALesnwC4rqEAt62gALmuoQC3rqEAuK6hALiuoQC4rqEAuK6hALmvogC5rqEAua6hALmvogC5rqEAuq+iALqwogC7sKEAuq+hALqwoQC6sKEAu7CiALuwoQC7sKEAuq+iALqvoQC7r6EAu7CiALuwogC7sKEAu7CiALuwogC8saMAvLGjALyxowC8saMAvLGhALyxoQC9sqAAvbKhAL6yoQC/sqEAv7KhAMCzogC/sqIAv7KhAMCzogDBtKMAwbSjAMG0owDBtKMAwrWkAMK1pADCtaQAwrWkAMK1pADDtqUAw7alAMS2pADFt6QAxbelAMW2pQDHt6YAx7inAMa3pgDHuKcAx7inAMe4pgDIuacAybqoAMu6qADKuqcAy7+uANTLvQDVzb4A08y+ANXOwADWz8EA18/CANTMvgDTy70A1M3AANXNwADUy70A1cy+ANfOvwDXzsAA183AANbOvwDYzsAA18/AANjQwgDc1sgA5eDVAOrp3gDt7eQA7+/mAO7v5gDv7+YA7u3kAO/u5QDv7+YA7vDnAO/w5wDw8OcA7+/mAPDw5wDw7+YA8O/mAPDw5wDw8OcA7/DnAO/w5wDv7+YA8O/mAPHw5wDw7+YA7/DnAPDv5gDw7+YA8O/mAPHw5wDx8OcA8fDnAPDv5gDw8OcA7+/mAPDw5wDw7+YA8O/mAPDv5gDw7+YA8O/mAO/v5gDv7+YA7+7mAPDv5gDu7+UA7u/lAPDv5gDw7+YA7/DnAO/v5gDv7+YA8O/mAPHw5wDw8OcA8O/oAPDv5wDw7+cA7+/nAPHx6QDx8ekA8fHoAPDw5wDv7+cA8PDnAPHx6ADx8ekA8fHpAPDx6QDx8ekA8fHpAPDx6QDx8+sA8vPrAPHy6gDx8uoA8fLqAPDx6QDw8ekA8fLqAPHy6gDy8+oA8vLrAPLy7ADy8+sA8fLqAPDx6QDw8ekA8fLqAPHy6gDy8+sA8fLqAPHy6gDx8uoA8vPrAPHy6gDx8uoA8fLqAPLz6wDy8+sA8vPrAPHy6gDx8uoA8fLqAPLz6wDx8uoA8fLqAPLz6wDx8uoA8fLqAPHy6gDx8uoA8fLqAPHy6gDx8uoA8fLqAPHy6gDx8+sA8/HqAPPx6gDx8uoA8fLqAPPx6gDz8eoA8/LqAPPy6gDz8ekA8/LqAPPx6QDy8ekA8vHoAPPy6QDz8ukA8vHoAPPy6QDz8ukA8/LpAPLx6ADy8ugA8vHnAPLy6ADy8ugA8vHnAPLy6ADy8egA8vDoAPHw5wDw7+YA8O/mAPHw5wDe2c4A3tnOAN3YywDe2cwA3tnOAN7azwDd2s8A3drPAN3azwDe2c0A3tnMANzYywDb18oA2tXIANjUxwDZ0cQA1c7CANTNvwDSyrwA0MW6AM3DtwDJwbIAxr2wAMS5rQDAtaoAvLKmALmvowC3raAAtqyfALasnwC1q54AtqyfALasnwC1q54AtaueALasnwC1q54AtqyfALasnwC2rJ8At6yfALitoAC4rJ8At62gALetoAC5raAAua2gALeuoQC2rJ8AtqyfALasnwC2rJ8At62gALetoAC3raAAt62gALetoAC3raAAt6yfALasnwC3raAAt62gALmuoQC3rqEAuK6hALiuoQC4rqEAuK6hALiuoQC4r6IAuK6hALmvogC5r6IAua+iALmvogC6rqIAu7CjALuwoAC7sKAAu6+hALqwoQC7sKEAu7ChALuwogC6sKEAuq+hALqvoQC6r6IAuq+hALyxowC7sKIAvLGjALywogC9saMAvLGjALyxogC8saAAvrKhAMCyoQC/saIAv7KjAMCyogDAs6EAv7KhAMCzogDAs6IAwbOiAMK1pADCtKMAwrSjAMK1pADCtaQAwrWkAMK1pADDtqUAw7alAMS2pADFt6UAxLalAMW3pgDHt6YAxremAMe4pwDIt6cAx7inAMe4pgDIuacAybmnAMq6pwDLvq4A0cm7ANXNvwDUy70A1M2/ANbPwQDWzsAA1c2/ANPLvQDUzb8A1s/BANXNvwDVzb0A186/ANfOwADXzb8A187AANjQwADYz74A2M/BANvUxgDj39AA6ujcAO3t5ADu7+cA7e/mAO7u5QDv7uUA7+7lAO/u5QDv7+YA7vDnAPDv5gDw7+YA8O/mAPDv5gDv7uUA7+/mAO7w5wDv8OcA8PDnAPDv5gDw7+YA8fDnAPHw5wDx8OcA8O/mAO/u5QDw7+YA8O/mAPDv5gDw7+YA8O/mAPDv5gDx8OcA8fDnAPDv5gDv7uUA7+7lAO/u5QDv7uUA7+3lAO7u5ADv7uUA7+/lAO7u5ADt7eMA7u7jAO/u5QDv7uUA7u7kAO7u5ADv7uQA8O/lAPDv5gDx8OYA8e/nAPHw5wDx8OYA8O/nAPDw6ADw8OgA8PDoAO/v5gDv7+cA8PDoAPDw6ADw8ekA8PHpAPHw6ADw8ekA8PHpAPHy6gDx8uoA8vPrAPDx6QDw8uoA8PLqAPHx6QDw8ekA8fLqAPLz6wDy8+sA8vPrAPLz6wDy8+sA8vPrAPHy6gDw8ekA8fLqAPLz6wDy8uoA8fLqAPHy6gDy8+sA8vPrAPHy6gDx8uoA8fLqAPLz6wDy8+sA8vPrAPHy6gDw8ekA8fLqAPLy6gDx8+sA8fPrAPHy6gDw8ekA8fLqAPHy6gDx8uoA8fLqAPHz6wDx8uoA8fLqAPHy6gDx8uoA8vDpAPLw6QDx8uoA8vPrAPTy6wD08usA9PHrAPPx6gDz8eoA8/HpAPPy6QDz8ukA8/LpAPTz6gDz8ukA8/LpAPPy6QDy8egA8vHoAPPy6QDz8ukA8/HpAPPy6ADz8+cA8vLoAPLx6ADy8egA8vDoAPHw5wDw7+YA8fDnAPHw5wDc2MwA3NnMAN7ZzgDe2c4A3tnOAN3azwDe2s8A3tnOAN3ZzQDe2c0A3tnMANzXygDc18oA29XIANnUxwDY0sQA1s/CANTNvwDRybsA0Ma5AMzDtQDJwLIAx72vAMS6rADAtqkAvLKmALmvogC2rJ8AtqyfALWrngC2rJ8AtayfALWrngC1q54AtaueALasnwC1q54AtaueALasnwC2rJ8AtqyfALetoAC2rJ8AtqyfALasnwC4rJ8At62fALetoAC2rJ8AtqyfALetoAC3raAAt62gALetoAC3raAAuK2gALetoAC3raAAt62gALetoAC3raAAt62gALmtoAC4raAAuK6hALetoAC4rqEAua6hALmuoQC6r6IAuq+iALmvogC6r6IAua6hALiuoQC7r6IAu6+iALuvoQC6r6EAurChALuwoQC6r6EAu6+hALuwoQC7sKEAu6+hALuwoQC6r6EAuq+hALuwogC7sKIAu7CiALyxowC8saMAvLGjAL2xogC+saAAvrKhAL+yoQC+saEAv7GiAL+yogC/sqEAwLOiAMG0owDBtKMAwbSjAMG0owDBtKMAwbSjAMK1pADCtaQAw7WlAMK1pADDtqUAw7alAMO3pQDEtqUAxbelAMW4pgDHt6YAxremAMe3pwDHt6cAx7inAMe5pgDIuacAybmnAMy+rADSybsA1c7BANTNvwDUzb8A1s7BANbPwQDWzb8A1Mu9ANTMvgDVzsAA1c7AANTOvwDVzb8A1cy+ANbMvgDXzsAA18/CANfPwADX0MEA2tLGAODbzgDp5toA6erfAO/v5gDv7uYA7u7lAO7u5QDv7uUA7+7lAPDv5gDw8OcA7+/mAO/u5QDv7uUA7+7lAPDv5gDw7+YA8O/mAO/w5QDv7+UA7+/lAPDv5QDw7+YA8O/mAPDv5QDv7+UA7+/kAO/v5QDw7+YA7+/lAO/v5ADv7+QA7+/kAO/v5ADw8OUA7+7lAO7t5ADt7eIA7u3jAO7t4wDu7eMA7e3jAO3t4wDt7OMA7eziAOzr4QDt7OEA7ezhAO3s4wDt7OIA7OzhAOzs4QDt7eMA7e3jAO7t4wDu7eMA7+7kAO/u5QDv7+YA8PDnAO/w5wDw7+YA8PDnAPDv5gDw8OcA8O/nAPDw5wDw8OcA8PDnAPDx6ADx8ekA8PHpAPHy6gDw8ekA8fLqAPHy6gDx8ekA8fHpAPDy6gDx8uoA8fLqAPLz6wDy8+sA8vPrAPHy6gDx8uoA8fLqAPHy6gDx8uoA8vPrAPHy6gDx8ekA8fLqAPLz6wDy8+sA8fLqAPHy6gDy8+sA8vPrAPHy6gDx8uoA8vPrAPHy6gDx8uoA8vPrAPLz6wDz8usA8vHqAPDx6QDx8uoA8fLqAPHy6gDx8uoA8vLqAPPy6wDy8uoA8PLqAPLx6gDy8ekA8/HqAPLw6QDy8+sA8vLrAPPx6gDz8eoA8vLqAPPy6gD08uoA8/LpAPPy6QD08+oA9PPqAPPy6QDz8ukA8/LpAPLx6ADz8ukA8vLoAPPy6ADz8+gA8/LoAPLy6ADz8+cA8/LoAPLx5wDy8ucA8vHnAPHw5wDx8OcA8O/mAPHw5wDd2MsA3dnLAN7azwDd2s8A3drPAN3azwDe2c8A39rPAN7ZzQDd2MwA3tnMAN3YywDb1soA29XIANrUxwDZ08MA1s/BANTNvwDSyrwA0Me4AMzDtQDJwLIAxr2uAMO6qwDAtqgAvLKlALmvogC2rJ8AtqyfALSqnQC2rJ8AtaueALWrngC1q54AtaueALWrngC2rJ8AtaueALasnwC2rJ8AtqueALasnwC2rJ8AtaueALWrngC3q54Ata2eALesoAC3raAAt62gALetoAC3raAAt62gALetoAC2rJ8AuKyfALitoAC3raAAt62gALiuoQC4rqEAtqyfALitoQC4raAAuK6hALiuoQC4rqEAuK6hALmuoQC4rqEAuK6hALmuoQC5rqEAua6hALiuoQC7r6IAu66iALuuogC7r6EAuq+hALmvoQC7sKEAurChALmvoQC6r6EAurChALqvoQC7sKIAu7CiALqvoQC8saMAvLGjALyxowC8saMAvLGjAL2yowC/sqAAvrGgAL6xoAC/sqAAvrGgAL+yoQDAs6IAwLOiAMCzogDAs6IAwbSjAMC0owDBtaQAwbSjAMK1pADCtaQAw7alAMO2pQDDtqUAw7alAMS3pgDDtqYAxbelAMW3pQDHtqUAxrinAMa4pgDGuKcAx7imAMi5pwDJuacAy7qpANHGtwDXz8IA1c7AANXOwADWz8EA18/CANXOwADVzL4A1s2/ANbOwQDVzsEA1c3AANXOwQDTzL4A08q8ANXNvgDXz8AA18/BANjQwQDZ0sUA3tnMAOTi1QDp6t8A7O3kAPDv5gDv7uUA7u3kAO7t5ADv7uUA7+7lAPDv5gDw7+YA7+7lAO/u5QDu7eUA7u3kAO/u5QDw7uYA7+7lAO/v5ADv7+QA7+/jAO/u5ADv7uUA7u7kAO7u4wDu7uMA7u7jAO/u5QDu7eQA7e3iAO3t4gDu7uMA7u7jAO7t4gDt7eIA7ezhAO3s4ADt7OEA7ezhAO3r4ADs6+AA7OvhAOvr4ADr6t8A6+ndAOvp3gDs6d4A7OreAOvp3QDq6NwA6ujcAOvp3QDr6t4A6+reAOvq3gDr6t4A7OvgAO3t4gDu7uQA7u3kAO/u5ADv7uUA7+7lAPHw5wDx8OcA8fDnAPDv5gDw7+YA8O/mAPDx6ADx8uoA8PLqAPDy6gDw8uoA8PHpAPDx6QDx8OgA8fDoAPDx6QDx8uoA8vPrAPLz6wDy8+sA8fLqAPHy6gDx8uoA8PHpAPHy6gDy8+sA8fLqAPDx6QDw8ekA8fLqAPHy6gDx8uoA8fLqAPHy6gDy8+sA8vPrAPLz6wDy8+sA8fLqAPLz6wDy8+sA8fLqAPHy6gDz8eoA8/DpAPDy6ADx8uoA8vPrAPLy6gDx8uoA8vHqAPPx6gDx8eoA8PHpAPPx6gD08eoA8/HqAPPx6gDx8+oA8fLqAPPw6QDy8eoA8fPqAPLz6gD08+kA9PPpAPTz6gD08+oA9PPqAPPy6QDz8ukA8vHoAPLx6ADz8ukA8/LoAPPz5wDy8ucA8vLnAPPz6ADy8ucA8vLnAPLy5wDy8ucA8vLnAPHw5wDx8OcA8O/mAPHw5wDe2M0A3tjNAN3azwDe2s4A3trOAN7ZzgDf2s4A39rOAN7ZzQDd2M0A3tnMANzXygDb1soA29XIANrUxwDY0sUA1s/CANTNvwDTyrwA0Me4AM3EtQDLwLIAxr2uAMO6qwC/takAvLGlALmvogC3raAAtqyfALWrngC2q54AtaueALSqnQC1q54AtqyfALarngC1q58AtqyeALasnwC1q58AtqyfALasnwC2rJ8AtqyfALasnwC5rJ8AuK2fALatoAC2rJ8At62gALetoAC2rJ8At62gALetoAC3raAAt62gALetoAC3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59cA6efZAOvp2wDr6t8A7ezhAO3s4gDt7OIA7u7jAO/v5QDx8OcA8PDnAO/v6ADw8OcA8fHnAPHw5wDx8OcA8e/nAPHv6ADw8ekA8fLqAPHy6gDw8uoA8PHpAPHw6QDy7+kA8fDoAPDx6QDw8uoA8fPrAPHy6QDw8ekA8PHpAPLz6wDx8uoA8fLqAPDx6QDx8uoA8vPrAPHy6gDx8uoA8fLqAPHy6gDy8+sA8vPrAPHz6wDx8uoA8PLqAPDx6QDw8ekA8fLqAPHy6gDx8uoA8fPrAPLy6gDz8OkA8vHpAPLx6ADy8uoA8fPrAPLz6wDx8uoA8fPrAPHz6gDx8+sA8vPsAPTx6wD08usA9PHqAPTx6wDz8esA9PLqAPTz6gDz8ukA8vHoAPLx6ADy8egA9PPqAPTz6gDy8egA8/LpAPLx6QDz8ekA8vHpAPLy6ADz8+cA8/PoAPLy5wDx8eYA8fLmAPLx5wDx8OcA8O/mAPHw5wDd2cwA3tnNAN/azgDe2c0A3tnNAODbzwDf2s4A39rOAN/azgDe2c0A3tnMANzXygDb18oA3NXJANrTxgDY0sQA1c/BANTNvwDSybsAz8a4AMvCtADIv7EAxbuuAMK3qwC/takAu7GlALiuoQC2rJ8AtqyfALWrngC1q54AtaueALasnwC2q54At6qdALerngC4rJ8AtqufALasoAC3rJ8AtqyeALitnwC5raAAt62gALatoAC3rJ8At62fALitoAC4raAAt6yfALasnwC3raAAt62gALetoAC2rJ8At62gALetoAC3raAAt62gALetoAC2rJ8AuK6hALetoAC3raAAuK6hALiuoQC4rqEAuK6hALiuoQC4rqEAuK6hALetoAC3raAAuK6hALmvogC4rqAAua6hALiuoQC3raAAuK6gALmuoQC7r6IAua6hALiuoAC6r6EAu7ChALqvoQC7sKEAu7CgALqvoQC6r6EAuq+hALuwogC7sKIAu7CiALuwogC8sKMAvbCiALuwogC+saEAv7KgAL+yowDAsqMAv7KiAMCzogDBtKMAwLSjAMC0owDAtKMAwLSjAMC0owDBtKMAwrWkAMK1pADCtaQAwrakAMO2pQDDtqUAw7alAMW3pwDHt6YAx7emAMe4pwDGt6YAx7inAM3CsQDVzcAA1s/BANbPwQDVzsAA1c7AANfQwgDWzb8A1s7BANjPwADXzsEA1c7AANbNvwDWzb8A08q8ANXNvgDYz78A186+ANfOvwDXz8EA3dbJAOPg0wDp6N0A7ezjAO7t5ADt7eIA7eziAO3t4gDt7eIA7u3jAO7u4wDu7uMA7u7jAO3t4gDt7OIA7e3iAO3t4gDu7uMA7u3iAO3s4QDu7OIA7ezhAOzs4QDt6+EA7evhAOzr4QDr6uAA6+rfAOvq3wDq6d4A6ujcAOrp3ADq6NsA6ujbAOro2wDq59oA6ufaAOnn2gDp5tkA6ebYAOnm2ADo5dcA5+TWAOfk1gDn5NUA6OTTAOfj1ADn4tQA5+LTAOfi0wDn4tMA5uHSAObh0gDl4NEA5uDQAOXg0ADl4dAA5eDQAObg0ADm4dEA5+HRAObh0QDn49IA5+PSAOjk0wDp5tgA6+jaAOvp3QDs6t8A7ezhAO3u5ADv7uUA8O/mAPHw5wDw8OYA7/DmAPDw5gDw7+YA8e/oAPLw6QDw8uoA8fHpAPDy6gDx8ekA8u/pAPHv6QDy8OgA8fHpAPDy6gDy8eoA8vDpAPHx6QDw8ekA8fLqAPLz6wDw8ekA8PHpAPDx6QDx8uoA8fLqAPDx6QDw8ekA8fLqAPHz6gDy8+sA8fLrAPLx6gDz8eoA8fHpAPHy6gDx8uoA8fLqAPHy6gDx8eoA8/HqAPLx6gDz8OkA8/HpAPPw6QDy8uoA8vPrAPHy6gDx8uoA8fLqAPHz6wDz8uoA8/LpAPPy6gDz8ekA9PLrAPPy6gDz8uoA9PLqAPTz6gDz8ukA8vHoAPPy6QDy8egA8/LpAPPy6QDz8ukA8vHoAPPx6QDy8ugA8/PoAPPz6QDy8egA8vHnAPLy5gDx8eYA8vLmAPLx5wDx8OcA8O/mAPHw5wDd2MwA3tnNAN7ZzQDe2c0A39rOAN/azgDe2c0A39rOAN7ZzQDd2MwA3tnMAN3YywDc18oA3NXJANnTxgDY0sMA1c/BANTNvwDSybsAz8a4AMvCtADIv7EAxLutAMG3qwC/tKgAu7GkALetoAC2rJ8AtqyfALWrngC1q54AtaueALasnwC2q54At6qdALerngC4rJ8At6yfALitngC3rJ8AtqyfALitoAC4rJ8At6yfALatoAC4raAAt62gALmsnwC4rJ8AuK2gALatoAC2rJ8At62gALasnwC2rJ8At62gALetoAC3raAAuK6hALetoAC2rJ8At62gALetoAC2rJ8AtqyfALetoAC4rqEAt62gALetoAC4rqEAt62gALiuoQC4r6EAua6iALmvogC4rqEAuK6hALetoAC3raAAt62gALitoAC6rqEAuq+hALivoQC5rqAAuq+gALuwoQC6r6AAurChALuwoQC7sKEAu7CiALuwogC7sKIAuq+hALyvogC9sKMAvLGjALyypAC+sqEAv7KgAL6xowC/saQAv7KiAMG0owDAs6IAwbSjAMG0owDBs6IAwbOiAMCzogDBtKMAwrWkAMK1pADCtaQAwrWkAMO2pQDDtqUAw7alAMO3pgDGtqQAx7amAMa3pgDHuKYAy72sANTKvADX0MEA1M2/ANXOwADWz8EA1c/BANXNvwDXzsAA18/CANfPvwDUzL4A19DCANfPwQDVzL4A1s2/ANfOvwDYz74A2M6/ANfPwQDa08UA4t/SAOjo3QDs7OMA7e3jAOzs4gDt7eIA7O3hAOzt4gDt7eIA7u7jAO7u4wDt7eIA7OzhAO3t4gDs7eIA7O3iAO3t4gDt7eIA7ezhAOzs4QDs6+EA7OvhAOzq4ADs6t8A6+rdAOrp3QDq6dwA6ejbAOno2wDp6NoA6OfaAOjm2ADp5tgA6ebYAOnm2ADo5tgA6ObYAOjk1gDn5NQA6OXUAOfk1QDm4tQA5uHTAOXh0QDl4NAA5eDQAOTfzgDk384A5d/OAOXfzgDl384A5N7NAOTezQDj3c0A493NAOPdzQDj3c0A493NAOPdzQDj3c0A493NAOPdzgDl384A5d/PAOXg0ADn4tEA5+PSAOjk1ADp59oA6+ncAOzr3wDt7OIA7u3kAO/u5QDv7uQA7+7jAO/u5QDw7+YA8fDoAPLv6QDw8uoA8PLqAPDx6QDx8OgA8e/nAPHv6ADy8OkA8vHqAPDy6gDx8OkA8u/oAPHx6QDw8uoA8PLqAPDy6gDw8ekA8PHpAPDx6QDx8uoA8PLqAPHy6gDy8+sA8fLqAPLy6wDy8+oA8fLpAPLx6QDy7+kA8fLqAPHy6gDx8ukA8PLpAPDy6gDx8eoA8/DpAPPw6QDy8eoA8/DqAPPw6QDy8uoA8fLqAPHy6gDx8uoA8fLqAPHz6wD08+kA8vHoAPPy6ADy8ekA8/HqAPTy6gD08+oA8/LpAPLx6ADz8ukA8vHoAPPy6QDz8ukA8vHoAPLx6AD08+oA8vHoAPLx6ADy8ugA8/PoAPPz6QDy8egA8fHnAPHy5gDx8eYA8fLmAPLx5wDx8OcA8O/mAPHw5wDe2c0A39rOAN/a0ADf2s8A3tnNAN7ZzQDe2c0A39rPAN/a0ADf2s4A3tnMAN3YywDb1soA3NXJANrUxwDX0cMA1c7AANTMvgDSybsA0cW3AMzCtADIv7EAxbutAMG3qgC+tKcAu7ClALqvoAC4rZ4AtaudALSqnQC2rJ8AtqueALarngC3q54At6ueALisnwC3q54AuKufALirnwC2q54AtayeALesnwC4rJ8AtqueALasnwC2rJ8AtqyfALasnwC3raAAtqyfALasnwC2rJ8AtqyfALetoAC3raAAtqyfALetoAC4rqEAuK6hALetoAC2rJ8AtqyfALetoAC3rqEAt66hALitoAC4rqEAuK6hALetoAC3raAAuK6hALmvogC5r6IAuK6hALetoAC3raAAt62gALetoAC4rqEAuK6hALetoAC4rqEAuK6hALiuoQC3raAAuK6hALmvoQC7sKAAu6+hALqvogC6r6MAuq+iALuwoQC8saIAvLGjAL2ypAC8saMAvLCiAL2wowC8sKMAu7CiAL6wowC/saUAwLKiAL6xoADAs6IAv7KhAMCzogDBtKMAwbSjAMG1pADAtKMAwbSjAMG0owDCtaQAw7alAMK1pADDtqUAw7emAMO3pQDEt6cAxbimAMa4pwDKu6sA0Ma4ANbPwQDWzb8A1My+ANTOwADXz8EA1s2/ANXNvwDWzsEA18/BANfOwADWzb4A186+ANXMvwDWzsAA1s/BANfPwQDXzsAA1s7BANnRxQDh284A6ObbAO3s4wDt7eMA7O3iAO3s4QDs7OEA7OzhAOzs4QDt7eIA7e3iAOzs4QDs7OEA7OvgAOzr4ADs6+AA7ezgAOzr4ADr6+EA6+rgAOzp3wDp6NwA6+rcAOrp3ADp6NsA6OjbAOjn2QDo5tgA6ObZAOnm2gDp59kA6OXXAOjk1wDp5dYA6OTVAOjk1gDm5NMA5uLRAObi1ADl4dMA5eDRAOTf0ADj3c0A5N7OAOPdzADi3MsA4dzLAOHbywDi3MwA4NrLAOHbygDh2soA4trKAOPayQDi2ckA4tnJAOHZyADh2cgA4dnIAOHZyADi2cgA4tnIAOHayADh28kA4dzJAOLcygDj3cwA5d7OAObg0ADn49IA6OXXAOro2wDr6d0A7ereAO3r3wDu7OEA7eviAO7u5ADw7+YA8O/mAPHw5wDx7+kA8vDoAPHw5wDw7+cA8PDoAPHw6ADy7+kA8vDoAPHw5wDw8OgA8PHpAPHw6ADy8OkA8/DpAPPw6QDw8uoA8vPrAPHy6gDx8ekA8vHoAPLz6wDx8uoA8fLrAPHz6gDy8eoA8vDpAPHv6ADy8OkA8/HpAPPy6ADx8OcA8vDnAPLx6ADz8ekA8vDqAPLw6QDz8OoA8fHpAPHy6gDy8+sA8vPrAPLz6wDx8+sA8vLpAPPx6ADz8ugA8/LpAPTx6wDz8eoA8vLoAPLx6ADy8egA8/LpAPPy6QDy8egA8/LpAPLx6ADz8ukA8vHoAPLx6ADz8ukA8/LpAPPy6QDy8egA8vHpAPLx6ADz8ukA8/LpAPPx6QDz8ukA8vHoAPHw5wDw7+YA8O/mAPDv5gDe2c0A39rOAN/a0ADf2s8A39rNAN/azgDf2s0A39rPAN/a0ADe2c4A3tnMANzXygDb1soA3NXJANrTxwDX0cMA1c7AANPLvQDSybsA0MS2AMzBswDIvrAAxbqtAMG2qgC+tKcAurCjALitoAC3rJ8AtqueALasnwC1q54AtqyfALasnwC2q54AuKyfALerngC3q54AuKyfALisnwC2q54AtqyfALitoAC5raAAt6yfALasnwC1q54AtqyfALitoAC2rJ8AtqyfALasnwC2rJ8AtqyfALetoAC3rKAAt62gALatnwC1rZ8At62gALetoAC3raAAtqyfALetoAC4rqEAt62hALeuoQC3rqAAt66gALiuoQC3raAAuK6hALiuoQC4rqEAuK6hALetoAC4rqEAuK6hALetoAC3raAAuK6hALiuoQC4rqEAt62gALetoAC4raAAuK6hALiuoQC5r6AAurCiALuvoQC6r6IAu6+hALyxogC7sKIAu7CjALuwogC7sKIAu7GjALuwogC7saMAu7GiAL6wowC/saQAvrGhAMCzogDAsqEAwLOiAMCzogDAs6IAwrWkAMG0owDAtKMAwbWkAMK1pADCtaQAwrWkAMO2pQDEtqYAw7amAMO3pgDEt6UAxbenAMe6qQDOxLQA1s7BANXOvwDWzb8A187BANfPwgDXzsAA1cy+ANbOwQDXz8IA1s2/ANbOwADWzb8A1c29ANXMvgDXz8EA1c/BANbPwQDYz8EA2dDDAN/YzADn5dkA6+vgAOzs4gDs6uIA7OzhAO3s4QDt7OEA7ezhAOzs4QDs7OEA7OzhAOzr4ADr6uAA6+rgAOvq4ADr6uAA6+rgAOvq4ADr6N8A6ujbAOjn2gDn59kA6efZAOjn2gDo59oA5+bYAOfl1wDn5dcA6OXYAOjl2ADo5dcA5+PVAObi1ADm4tMA5uLTAOXh0wDk4NAA493NAOTezgDi3c0A4tzLAOHbygDg2skA4NnJAODYxwDg18YA4NfFAN/XxgDf18YA39bFAN/WxQDe1sQA3dXDAN/WwwDf1sMA4NbEAODWxADe1sMA39bEAOHXxQDh18UA4NfFAODXxgDg18YA4NjGAOHZyADh2ckA4trKAOLdywDk3s4A5uDQAOfk0wDo5dUA6ebXAOrn2QDr6dwA7ezgAO7u5ADv7uUA8O/mAPDv5gDw7+cA8O/nAPDv5gDw8OcA8e/oAPLw6QDx8OgA8e/nAPDv5gDx8OgA8fHpAPHw6QDx7+gA8fDoAPLx6QDw8ukA8PHpAPDx6QDx8OgA8vHoAPLz6wDy8+sA8fLrAPDx6QDx8OgA8vDpAPLx6gDy8eoA8vDoAPLx6ADy8OgA8fDoAPDx6ADx8ekA8vDpAPLw6QDz8eoA8fHpAPHy6gDy8+sA8vLqAPLy6gDx8+sA8vLpAPLx6ADz8+kA8/LqAPPx6gDy8ekA8/LoAPPy6QDz8ukA8vHoAPLx6ADz8ukA8/LpAPLx6ADy8egA8/LpAPLx6AD08+oA9PPqAPPy6QDy8egA8vHoAPPy6QDz8ukA8vHoAPPy6QDz8ukA8vHoAPLx6ADx8OcA8fDnAPHw5wDf2tAA3tnQAN/a0ADf2tAA39rOAODbzwDf2s4A39rPAODb0QDe2c4A3dnMAN7YywDd1soA3NXJANnTxgDX0cIA1s7BANPLvQDSybsAzcW3AMvBswDKvrAAxbutAMG3qgC+s6cAurCkALiuoQC2rJ8AtKqdALWrngC2rJ8AtqueALirngC2q54AtayfALarngC3q54AuKyfALisnwC4rJ8AuKueALisnwC5raAAtqyfALasnwC3raAAt6yfALisnwC2raAAt6yfALesnwC3raAAt62gALasnwC3raAAt62gALasnwC3raAAt62gALetoAC4rqEAt62gALiuoQC3raAAuK2gALeuoQC3r6EAt66gALiuoQC5r6IAuK6hALitoAC5r6IAuK6hALiuoQC3raAAuK6hALiuoQC4rqEAt62gALetoAC3rqEAua6hALquoQC4rqEAuK6hALmvogC4rqIAuq+hALuwogC7sKAAu7CiALuwogC6r6EAuq+hALuwogC8saMAvLGjALywogC7saMAvLGjAL6wowC+sKQAvrGhAL+yoQC/s6EAv7OiAMCzogDAs6IAwLSjAMC1pADAtaQAwbSjAMG0owDCtaQAwrWkAMO2pQDDtqUAw7alAMO2pQDGtqYAxrioAM3BsQDWzr4A1c3AANXNvwDXzsAA2M/BANfOwADVzb8A1c7AANfPwQDXzsAA187AANbOwADVzL4A1cy+ANXOwADXz8IA2NDCANfPwQDY0MEA3tfKAObi1wDs6uAA7ezhAOzs4QDs6+AA7OvgAOzr4ADs6+AA7OvgAOzr4ADr6uAA6+rgAOvq4ADr6d8A6+nfAOvp3wDr6d8A6ujeAOnn3ADo59sA6ebYAOjm2ADo5tkA6ebZAOjm2ADn5NYA5uPVAOfk1gDn5NYA5uPUAOXi0QDm4dAA5uDQAOXfzwDl388A5N7OAOPdzgDi28sA4drKAOHayQDg2McA4NbFAN/VxADe1cMA3dTBANzSwADc0r8A29G9ANzQvQDcz7wA28+8ANvOuwDazrkA2825ANrNuADbzrkA29C7AN3RvADc0b0A3dO+AN3TwADe08AA3tPBAN7VwgDf1sIA39bEAODWxADg18UA4djGAOLZxwDj28oA493MAOTfzQDm4M4A5+LRAOjl1gDr59oA6+nfAO3s4QDu7eMA7+7lAPDv5gDv7uMA7u7jAPHw5wDx8OcA8vDpAPHv6ADw7+YA8PDmAPHw5wDy8ekA8vDpAPHv5wDx8OcA8fLpAPDx6QDw8uoA8PHpAPHx6QDw8uoA8fLqAPLz6wDx8uoA8vHqAPLw6QDx8ekA8PLqAPDx6QDw8uoA8fHoAPPy6QDx7+kA8e/oAPLx6ADy8egA8e/oAPLw6QDx8uoA8fLqAPHz6gDz8uoA8/HqAPPx6QDz8egA8/HoAPPy6QDy8egA8vHoAPLx6ADz8ugA8/LpAPLx6ADy8egA8/LpAPPy6QDz8ukA8vHoAPLx6ADy8egA8/LpAPPy6QD08+oA8/LpAPPy6QDy8egA8vHoAPPy6QDz8ukA8vHoAPPy6QDy8egA8vHoAPLx6ADy8egA8vHoAPHw5wDe2c8A3tnPAN7a0ADf2s8A39rOAN/azgDg288A39rPAN/a0ADe2c4A3dnMAN7XygDd1skA2tXIANjSxQDX0cIA1c7AANPLvQDSybsAzsW3AMvBswDJvrAAxbqtAMC2qQC9s6YAuq+jALetoAC2rJ8AtaueALWrngC2rJ8AtqueALarngC3rJ8AtqueALarngC3q54At6ufALerngC4rJ8AuKyfALisnwC4raAAt6yfALesnwC2raAAt62gALitoAC2rJ8At6yfALesnwC3raAAt62gALasnwC3raAAt62gALatnwC3raAAt66hALauoAC3raAAt62gALiuoQC4rqEAt62gALiuoQC4rqEAuK6hALetoAC4rqEAuK6hALeuoAC1rqAAuK6hALiuoQC4rqEAt62gALetoAC3raAAt62gALetoAC3raAAuK2gALqvogC4rqEAuK6hALmvogC5rqIAuq+hALqvoQC6r6EAurCiALqvoQC7sKIAuq+hALuwogC8saMAvLGjALyxowC7sKIAvLCjAL6xpAC+saQAvrGhAL6xoQC+sqIAvbOiAMCzogDAs6IAwLOiAMC0owDBtaQAwLSjAMG0owDCtaQAwrWkAMK1pADCtaQAw7alAMO2pQDGtqYAyr6tANTLvQDWz8IA08y+ANTNvwDYz8EA2M/CANbNvwDWzb8A18/BANXNvwDWzsAA187AANTMvgDVzL4A2M/BANfPwgDXz8EA18/BANjPwgDc1skA5OLWAOvr4ADt7OEA7OvgAOvq4ADr6uAA6+rgAOvq4QDr6uEA6+rhAOvr4ADq6t8A6uncAOrp3ADp59sA6efcAOro3gDq6N0A6ObcAOjm2QDo5tgA5+XXAOfl1wDo5dgA5+XYAObj1QDl4tQA5uLUAObh0wDl4NEA4+DQAOTfzQDj3cwA493MAOLbywDh28oA4NnHAN/YxwDf18UA3tXFAN7UwQDc0sAA29G9ANrPvADZzboA2Mu4ANfJtgDVyLQA1MeyANTFrwDTw64A0sKsANLCrADSwqwA08KsANPDrQDTw60A1MSuANXGrwDXyLEA2Mq0ANnLtgDazbgA3NC6ANzRuwDc0bsA3tO+AN/UwADe1MIA4NbDAOHXxQDh2MYA4dnHAOHbyQDi3coA5N/MAObh0ADn5NQA6ebYAOro2wDs6t0A7ezgAOzr4ADs7OEA7u7jAPHv5wDw7+YA8O/lAO/v5QDw7+YA8fDnAPHw6ADx8OcA8fDmAPHx6ADx8egA8fHpAPHw6ADx8ekA8fDoAPDy6gDx8uoA8vLqAPHy6QDw8ecA8fDoAPPw6QDy8uoA8fLqAPHw6ADx8egA8fHoAPLx6ADy8OkA8vDoAPLx5wDy8OgA8vDpAPLx6gDx8eoA8fHpAPHx6QDy8ekA8vDpAPLx6QDz8ugA8/LpAPPy6QDy8egA8vHoAPLx6ADz8ukA8/LpAPLx6ADy8egA8/LpAPPy6QDz8ukA8/LpAPPy6QDy8egA8/LpAPPy6QDz8ukA8vHoAPPy6QDy8egA8/LpAPPy6QDz8ukA8vHoAPLx6ADz8ukA8/LpAPLx6ADx8OcA8fDnAPHw5wDf2tAA39rQAN/b0ADf29AA39rOAN/azwDf2tEA39rPAN7ZzQDd2M0A3dnMAN7YywDd1skA2tTIANnSxQDX0MIA1s7BANPKvQDSyLoAz8S2AMzBswDIvq8AxbqsAMG3qAC9s6UAuq+iALetoAC2rJ8AtaueALasnwC1q54AtaueALWsnwC2q54At6qdALarngC1rJ8AtqueALesngC3q54At6ueALasnwC2raAAt6ueALisnwC3rJ8At62gALasnwC2rJ8Atq2gALesnwC3raAAt62gALetoAC3raAAtqyfALetoAC3rZ8At62gALesnwC2rJ8At62gALetoAC3raAAuK6hALetoAC2raAAuK2hALiuoQC3raAAt62gALiuoAC3raEAta2gALeuoQC4rqEAt62gALetoAC3raAAt62gALiuoQC3raAAuK2gALqtoAC4rqEAuK6hALquoQC7r6IAuK6hALiuogC4rqIAurCjALuwoQC6sKIAuq+hALuwogC7sKIAu7CiALyxowC8saMAu7CiALyxowC8saMAvLGkALyypAC/saQAvbKkAL+zoQDAs6IAwLOiAMCzogDBtKMAwbSjAMC0owDAtKMAwbWkAMK2pQDBtKMAw7alAMW3pwDJu6sA0ce4ANjPwQDWzsAA1M2/ANXOwADWzsEA1c6/ANTNvwDXz8EA18/BANTLvQDX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8egA8/LpAPPy6QDz8ukA8/LpAPPy6QDz8ukA8/LpAPPy6QDz8ukA8vHoAPPy6QDy8egA8vHoAPLx6ADy8egA8fDnAPDv5gDf2s4A3tnNAODb0QDg29EA4NvOAODbzwDg288A4NvPAN/azgDe2cwA3tnMAN3XygDc1ckA2tTIANnTxgDXz8IA1c7AANLKvADRyLoAzcO1AMnAsgDGva4Aw7msAMC2qQC8sqUAua+iALasnwC2rJ8AtqyfALWrngC3q54At6qdALWrngC2rJ8AuKyfALesngC3q54At6yeALWrngC2q54AuKyfALetoAC2raAAt6yfALisnwC2rJ8At6yfALisnwC4rJ8AtqyfALasnwC2rJ8AtqyfALasnwC3raAAt62gALetoAC2rJ8At62gALatoAC3rJ8At62gALetoAC3raAAuK6hALitoQC4rqEAt62gALetoAC3rqEAt66gALetoAC3raAAt62gALetoAC2rZ8At62fALesoAC3raAAt62gALasnwC2rJ8At62gALitoAC4raAAt62gALmtoAC6rqEAuK6hALiuoQC5r6IAua+hALquoQC6rqIAu6+iALuwowC7sKMAu6+iALuwogC7sKIAvLGiALuxogC8sKIAvLGjALyxowC8sqQAvLGjALyxowC+s6MAv7KhAL+zogC/s6IAwLSjAMG0owDCtKMAwrWkAMG0owDCtaQAxbeoAMzBsgDVzb8A1c6/ANXMvgDVzL4A1s7BANXOwADUzcAA1s/BANbOwADXzsAA2M/BANbNvwDVy70A1cy/ANXOwADY0MEA2NDCANbPwgDZ0cQA39rNAObl2QDq6t8A6+vgAOrq4ADq6t4A6ujcAOno3QDr6d8A6+ndAOnn3ADn5tkA6ObYAOjl1wDn5dcA6OXXAOjl1wDo5dcA5+TWAOXi1ADm4dIA5eHSAOXh0ADk4M8A5N/QAOLczQDh2soA4drJAODZyQDf18cA3dXEAN3TwQDc0cAA2tC+ANjOuwDXyrgA1Me0ANPEswDQwa8AzLyrAMi4pgDGs6IAwrCeAL2qmAC4o5EAsZyKAKyWhACokH4Aoot5AJ6GdACagW0Aln5pAJV8ZACVemEAknZeAJN1XQCRdVsAk3VbAJd3XACae10Ann9iAKSEZwCqim0AsJJ1ALmafgC9oYUAw6iMAMmxlQDOuJ4A07+lANfFrADZybAA2su0ANvOtwDcz7kA3NC6AN3SvADf1MAA4NbEAOHXxQDh2McA49rJAOTcywDj3s0A5eDPAOfj0gDo5NQA6efYAOro2gDr6t8A7eziAO3t4gDu7eIA7+7kAPDv5gDx8OgA8e/oAPDv5gDv7uUA8O/mAPLw6QDw8ekA8fHpAPLx6ADx8OcA8fDnAPPx6QDy8OkA8fDnAPHw5wDx8OcA8fDnAPHv6ADz8OoA8fHpAPHw6QDw8ekA8PLqAPDy6gDw8uoA8fLqAPHx6QDy8egA8fHpAPDy6gDy8uoA8/HpAPPx6QDy8egA8vHoAPHw5wDy8egA8/LpAPLx6ADy8egA8/LpAPPy6QD08esA8/HpAPPy6QDz8ukA8/LpAPPy6QDz8ukA9PPqAPTz6gDz8ukA8/LpAPPy6QD08+oA8/LpAPPy6QDz8ukA8vHoAPPy6QDz8ukA8/LpAPLx6ADy8egA8fDnAPHw5wDg288A39rOAODb0QDg29EA4NvQAOHc0ADg288A39rOAN/azgDe2c0A3djLAN3WygDc1ckA2tTHANnTxgDWz8IA1M2/ANPKvADQx7kAzsS2AMrAsgDHva4Aw7mrAMC2qAC8sqUAua6hALasnwC2rJ8AtqyfALWrngC2q54AtqueALWrngC2rJ8AuKueALerngC3rJ4At6ueALWsnwC2rJ8AtqueALesnwC3rJ8At6yfALitoAC3rJ8AtqyfALerngC3rJ8AtqyfALasnwC3raAAtqyfALasnwC3raAAtq2gALatnwC3rKAAta6fALetnwC1raAAtq2fALasnwC3raAAuK6hALiuoQC3raAAt62gALetoAC3rqAAtq6gALeuoAC4rqEAuK6hALiuoQC4rJ8Atq6gALasnwC2rJ8At62gALetoAC3raAAt62gALetoAC3raAAuK6hALiuoQC4raAAuK6hALiuoQC4rqIAuK6iALmuogC5r6IAurCjALqvogC7sKIAuq+hALuwogC7sKIAu7GiALyxogC7saMAu7CiALyxowC9saQAvbKkAL2ypAC+s6MAvrOjAL6yogC/sqEAwLOiAMCzogDBtKMAwbSjAMG0owDDtqYAy76vANPKvADWz8EA1c2/ANXMvgDWzsAA1c7AANXNvwDWz8EA19DCANbNvwDWzb8A18/BANTMvgDW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8esA9PLqAPTz6gD08+oA8vHoAPPy6QDz8ukA8/LpAPLx6ADy8egA8/LpAPLx6ADy8egA8fDnAPLx6ADy8egA8fHoAO/w5gDf2tAA4NvQAODb0QDg29EA4NvPAODbzwDf2tAA4NvPAN/azgDe2cwA3djLAN7XygDc1ckA2tTHANnSxQDXz8IA1c2+ANLJuwDQxrgAzsO1AMq/sQDGvK4AwrirAL+1pwC7saQAua6hALesnwC1q54AtaueALWrngC1q54AtKqdALWrngC1q54AtqueALasnwC3q54AtqyfALasnwC1q54AtaueALarngC2q54AtqyfALWsngC3rJ8At62gALetoAC2rJ8AtqyfALWrngC1q54AtaueALasnwC3rJ8Atq2fALetoAC3raAAt62gALatnwC2rKAAta2gALesnwC3raAAt62gALetoAC3raAAuK6hALetoAC3rqAAtq2gALetoAC3raAAt62gALetoAC2raAAt66gALitoAC2rJ8At62gALetoAC3raAAt62gALetoAC3raAAuK2gALmuoQC5r6IAt6+hALmuoQC4rqEAua6hALiuoQC4rqEAua+iALmvogC5r6EAurCiALqwogC6r6IAu7ChALqwoQC7r6EAu7CiALyxowC7saMAvbKkAL2ypAC9sqMAvrGkAL6yowC/s6MAv7OjAMCzpAC/s6MAwLSjAMa6qQDPxLUA1M2/ANTNvgDVzb8A1s7BANfOwADVzb8A1s2/ANbOwADWzsAA18/BANfOwADVzL8A1s7AANfQwQDXz8IA2M/BANfOwADXz8IA3NTIAOHd0ADn5tkA6undAOro3ADo59sA5+bZAOfm2QDo59kA6OfaAOfn2QDn5dYA5uTVAOXi1ADl4dEA5ODQAOXh0ADl388A493NAOLbywDh2soA39jIAN/XxwDf18YA3tTEANvSwADZzr0A2My7ANfKuADTxrQA0MKwAMy9qwDIuKYAw7KgAL+smgC4pJEAsJuJAKuVgwCijHkAmYNwAJJ8aACLdmIAhHFdAIBqVQB3Y00AcV5IAGlYQgBlUzwAX004AFpKNQBYRzIAWEYxAFpIMQBcSjAAYUwyAGRQNQBpUzgAbVQ5AG9VOgBvVzkAcFc6AHNYOQB1WTsAdVo8AHhbPAB5XDwAe109AH1fPgCCYkAAiWZEAJVwTgCkfVsAroppALiXdgC/o4MAxq2QAM63mwDUwKYA18SsANjHsADZyrMA2sy1ANzOuADc0LoA3dK8AN7UvwDg1sIA4dfEAOHYxQDi2ccA49vJAOPezADk380A5uLRAOjj1ADp5tgA6ujbAOrp3ADr6t8A7evhAO7u5ADv8OYA8O7kAO/t5ADv7uQA8O/lAPHw6ADy8egA8fDnAPHw5wDx8OcA8PDmAPHw5wDx8OcA8fDoAPHx6QDx8eoA8fHqAPDx6QDy8OkA8e/nAPDv5gDx8OcA8fLqAPLy6gDx8egA8fHnAPLw6ADz8eoA8vDpAPLx6ADy8egA8vHoAPLx6ADz8ukA8/LpAPPy6QDz8ukA8/LqAPPy6gDz8ekA8/HpAPPx6gDz8uoA9PLqAPTy6gDz8ekA8/LpAPPy6QDz8ukA8/LpAPTz6gDz8ukA8vHoAPPy6QDz8ukA8vHoAPPy6QDz8ukA8vHoAPPy6QDx8OcA8PDnAPDw5wDf2tEA39rRAOHc0gDg29EA4NvPAODb0ADg29EA4NvQAN/azgDe2c0A3tnMAN3WygDc1ckA2tTHANnSxQDWz8EA1cu9ANLJuwDPxrgAzsK0AMm/sQDFvK0AwbiqAL60pwC7saUAuK6hALisnwC2rJ8AtaueALSqnQC1q54AtaueALWrngC1q54AtaueALesnwC4rJ8AtqyfALWrngC1q54AtaueALWsnwC1rJ8AtaueALWsnwC3rZ8At62fALasnwC2rJ8AtaueALasnwC1q54AtaueALasnwC3raAAtqyfALetoAC3rqAAt62fALetoAC2rJ8Ata2fALetoAC3raAAtqyfALetoAC3raAAt62gALetoAC3raAAt6yfALetoAC4rqEAt62gALetoAC3rJ8AuK2hALetoAC3raAAt62gALetoAC2rJ8At62gALetoAC3raAAua2gALiuoQC5r6IAt66hALmvogC3raAAua+iALiuoQC4rqEAuK6hALmvogC5r6IAua+iALmvogC6r6IAu7ChALuwogC7r6EAu7CiALuwogC7sKIAvLGjALyxowC9saQAvbGjAL2xpAC9sqQAv7KkAMCxpADAtKQAw7inAMzBsgDSy7wA1M2/ANTNvwDWzsEA18/CANfOwADVzL4A2M/BANfOwADWzb8A2M/BANbNvwDWzcAA187AANjPwQDY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8+kA8/LpAPPy6QDz8ukA8/LpAPLx6ADz8ukA8/LpAPPy6QDz8ukA8/LpAPLx6ADz8ukA8/LpAPHw6ADy8OgA8fHpAPDw6ADh3NAA4dzQAODb0gDg29EA4NvPAODbzwDg288A39rPAN/a0ADe2c4A3djLAN3WygDb1cgA2dTFANnRwwDVzsEA1My+ANHIugDPxLYAzMGzAMi9sADFuqwAwbepAL2zpwC6sKMAtqyfALWrngC0qp0AtaueALSqnQC1q54AtKqdALSrngC1q54AtaueALWrngC1q54AtaueALWrngC1qp0At6ueALasnwC1rJ8At6ueALirngC1q54AtaueALWrngC2rJ8At6yfALesnwC2rJ8AtqyfALetoAC3raAAtqyfALetoAC3raAAt62gALiuoQC2rJ8At62gALasnwC3raAAt62gALetoAC3rqEAt62gALetoAC4rqEAt62gALetoAC3raAAtqyfALetoAC3rKAAuK6hALatnwC3rqAAuK6hALiuoQC4rqEAuK6hALetoAC4raAAuK6hALetoAC3raAAt62gALetoAC4rqEAuK2hALmvogC4rqEAua+iALmvogC5r6IAuK6hALmvogC5r6IAuK6hALiuoQC6r6MAu7CiALyxowC6sKIAvLGiALyxowC8saMAvbKkALyxowC8saMAvbKkAMC1pwDHva0A0Me4ANbNvwDWzL8A1c7AANbPwQDWz8IA1M2/ANfNvwDWzb8A1My+ANXOwADWzsEA1s7BANbOwgDWz8AA1s68ANbOwADXz8IA2NHDAN7ZzQDk49UA6ObZAOfm2QDn5tkA6OTYAOfk1wDn5NcA5uPWAOfj1QDk4NIA49/QAOLdzADg28oA4NnJAN7WxwDd1scA3NTDANvSwADXzrwA1cq4ANTGtQDSxLIAzsCuAMm5pwDEs6IAvayaALakkwCtmogApo99AJqFcwCSfWwAindlAINxXgB8aVUAdWJNAG9cRwBlVD4AXUw2AFhHMgBXRjAAWEcwAFxKMABgTjQAZlE3AGlTOQBsVTkAblY7AG9WOgBvVjoAb1Y6AG1VOQBuVTcAbVQ3AGxUNwBtVDcAbVU3AGxVNwBtVDcAcVY5AHJXOgByVzoAclc6AHJWOQBzVzoAdVg8AHlbPQB7XUAAfl5AAIJhQACGZEEAimVDAIpmRQCNZ0cAj2tLAJNvTwCbdlgAon1cAKmEZACykG8Au51+AMKniwDLs5YA0LqgANXBqADXxq4A2MexANrJswDZy7QA2824ANzPuQDd0boA3tO8AN/UwADg1cIA4NfEAODYxQDh2sgA49zKAObfzgDn4tAA6OPTAOjk1gDq5tgA7OrdAO3s4gDs6uAA6+rgAO3t4gDu7eIA7+7lAPDv5gDv7uQA7+7lAPHv5wDx8ekA8PHpAPHw5gDw7+YA8fDnAPHv6ADw8ekA8fLqAPHx6ADw8OcA8fDnAPLx5wDx8OcA8fDnAPLx6ADx8OcA8fDnAPHw5wDx8OcA8vHoAPLx6ADz8ukA8vHoAPPy6QDy8egA8/LoAPPy6QDz8ukA8/LpAPLy6ADz8ukA9PPpAPTz6gD08+oA8/LpAPLx6ADz8ukA8/LpAPPy6QD08+oA8/LpAPPy6QDz8ukA8vHoAPPy6QDz8ukA8/LoAPPx6QDy8OkA8PDoAPHx6QDg288A4dzQAOHc0gDh3NEA4dzPAODb0ADh3NAA4NvPAN7ZzQDe2cwA3djLAN3WygDc1ckA2tPFANnRwwDVzsAA08q8ANHIugDOxLYAzMGzAMi9rwDDuqwAwLepAL2ypgC6r6MAtqyfALWrngC1q54AtKqdALWrngC0qp0AtaueALWqnQC2q54At6ueALarngC1q54AtqueALisnwC1q54AtaqdALerngC2q58AtqueALarngC2rJ8AtaufALasnwC2rJ4AtqueALarngC2rJ8AtqyfALasnwC2rJ8At62gALetoAC3raAAtqyfALetoAC3raAAt62gALetoAC2rJ8At62gALasnwC3raAAt62gALatnwC3raAAt62gALetoAC2rJ8At62gALiuoQC1rZ8At62gALatnwC2rZ8At62gALiuoQC3raAAt62gALiuoQC3raAAt62gALiuoQC4rqEAuK6hALetoQC3rqAAuK6hALmvogC5r6IAuK+hALeuoAC4raAAt66hALivogC6r6IAua+iALqvoQC7sKIAuq+iALuwowC6r6IAvLCjALyxogC8saMAvbKkALyxpAC9sqMAv7SlAMa6rADOxLcA1My+ANbNvwDWzb8A1s7AANbPwQDXzsAA1cy+ANbOwADUzL4A1c7AANXOwADVzcAA18/CANjQwgDZz8EA2M/BANbPwADY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8egA8/LpAPPy6QDy8egA8vHoAPPy6QD08+oA9PPqAPPy6QDz8ukA8/LpAPLx6ADz8ukA8/HoAPPy6QDy8egA8fHpAO/w5wDf3NEA39vRAOHbzwDh3NAA4dzPAODb0ADg288A39rOAN/azgDf2s0A3tjLAN3WygDb1cgA2dTFANfRwwDVzcAA08q8ANLHuQDPxLYAy8GyAMe9rgDCuasAwLapALyypQC4rqEAtqyfALWrngC1qp0AtaueALWqnQC2rJ8AtaufALWqngC1qp0AtaqeALarngC1q54AtaueALerngC2q54AtqqeALWqnQC1q54AtaueALWrngC1rJ4At6qdALSrngC2rJ4AtqyeALasnwC1q54AtqyfALasnwC3raAAtqyfALasnwC3raAAt62gALetoAC3raAAt62gALetoAC2rJ8AtqyfALetoAC2rJ8AtqyfALasnwC3raAAuK6hALetoAC4rqAAt62hALetogC3raAAt66gALiuoQC3rqAAtq6fALatnwC3raAAuK6hALitoAC2rqEAtq+gALeuoAC4rqEAua+iALiuoQC4rqEAuK2hALitoAC3rqEAuK+iALiuogC3rqEAuK+hALqvogC5rqEAuK6hALivogC4rqEAua+iALqwowC6r6MAurCjALuxowC7sKIAvLGjAL2ypADAtaYAx72uANDHuQDUzb8A1M7AANbNvwDWzsEA2M/BANbNvwDXz8EA187BANXOwQDWzsAA187AANfQwgDXz8IA1s7BANfOwQDYz8EA19DCANvWyQDg2s4A5ePVAObk1gDm4tQA5eLTAOTf0QDk39AA4dvLAOHbywDf2MkA3tfHANzUxADZ0L8A1828ANXJtwDSxbMAz8CvAMq7qgDFtqUAva2bALWkkgCtmIcAoo58AJeDcQCPe2kAiXViAIFuWwB5ZVMAb15JAGZVQABeTTgAVkcxAFNELwBZSDIAYE01AGZTOQBtVj0Ablc7AHBWOgBvVjkAbVU5AG1UOABrUzkAalI4AGpRNwBrUjgAalI4AGtTOQBsVTsAbFU7AG5WPABxWD8AcllAAHZcRAB7YUkAgmdNAIlsUwCSclkAl3hfAJ19YwCigmcApYZsAKuLcACvkHQAsJJ2ALCSdwCyk3gAtJZ5ALOUeACwkHUArItxAKiGbQClgWUAoHxgAJ13WgCadFQAnHJQAJ51UACcdFQAmnVUAJt3WACceFsAoHxdAKN+XwCng2MArotpALaVdgC/ooQAyLCTAM+3nQDSvqMA1cKpANfGrADYybIA2cu0ANvMtQDbzrcA3M+5AN3RuwDd070A39TAAN/WwgDh18QA4djFAOHZyADi3csA5N7NAObh0QDn49IA5+TTAOro2gDr6NoA6+reAO3t4gDu7eMA7u3jAO7s4gDu7eMA8O/mAPHw6ADx8ekA8PHoAPHx6ADw8OcA8fDnAPDv5gDx8OcA8vHoAPHw5wDw7+YA8fDnAPDw5QDy8ecA8/HpAPLx6ADx8OcA8fDnAPHw5wDz8ukA8/LpAPLx6ADy8egA8/LpAPPy6QD08+oA9PPqAPTz6gDz8ukA8/LpAPTz6gDz8ukA9PPqAPPy6QDz8ukA9PPqAPPy6QDy8egA8vHoAPPy6QD08+oA9PPqAPPy6QDy8egA8vHoAPPy6QDz8ukA8fHpAPDw6ADf3NEA39zRAOLdzwDh3NAA4NvQAODb0ADh3NAA4NvPAN/azgDf2s0A3tjLANzWyQDa1McA2dTFANfRwwDUzb8A08q8ANLHuQDPxLYAy8GyAMe9rgDCuasAv7WnALyxpQC5r6IAtaueALSqnQC0qp0AtKueALSqnQC0qp0AtaqdALarnQC0q54AtaudALaqnQC0qp0AtKqdALSqnQC1q54AtKyeALSrngC1qp4AtKqdALWrngC2q58AtayfALasnwC1q54AtaueALarngC2rJ8AtaueALasnwC2rJ8AtaueALasnwC3raAAt62gALetoAC3rJ8Atq2gALasnwC3raAAt62gALasnwC3raAAt62gALasnwC3raAAt62gALetoAC3raAAt62gALetoAC4rqEAuK6hALetoAC2rZ8Atq6fALetoAC4rqEAt62gALiuoQC4raAAuKyfALetoAC3raAAt62gALmvogC3raAAuK6hALmvogC5rqEAuK6hALevoQC4rqEAt66iALivogC4rqEAuK2gALmuoQC4rqEAua+iALiuoQC6sKMAua+iALqwogC7saMAvLGjAL60pQDEuqwAzcK0ANLKvADUzb8A1M6/ANfOwADWz8AA1s7AANbNvwDYzsAA187AANbPwQDVzb8A18/BANfPwgDWzsEA1c7AANbPwQDYz8EA29TGAN3XzADl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iWwAtJJ1ALaVdwCwim4ArIRlAKuCYQCpgV0ApH1aAJ95WgCbd1gAnHhaAJ96XQChfF8ApH5eAK2HZQC0kXAAvJ1+AMeskADNs5gA0bufANPApQDWxKsA2cewANjGsADYyrMA2cy1ANvPtwDc0boA3dK7AN7TvQDe1L8A39TBAODXxQDh2McA4dnIAOLbygDk3s0A5eHQAOfj0gDq59cA6+jaAOzq3gDr6t4A6+reAOzs4ADt7OEA7e3iAO7t4gDv7+QA7e3jAO/u5ADx8OcA8O/mAPHw5wDx8OcA8O/mAPHw5wDx8OcA8fDnAPHw5gDw7+YA8PDmAPDw5gDx8OUA8fHmAPLx5wDx8OcA8fHnAPHw5wDx8OcA8/LpAPLx6ADy8egA8/LpAPTz6gD08+oA8/PpAPLy6ADz8ukA9PPqAPTz6gDz8ukA9PPqAPPy6QDz8ukA8vHoAPLx6ADz8ukA8vHoAPHx6QDx8ekA8fHpAPDw6ADg3tAA4N7QAODe0ADg3tAA493QAOLdzwDh3M8A4NvPAN7azQDe2csA3tjLANzVyQDa1McA2dPFANfQwgDWzrwA0sq5ANDGuADNw7UAy7+xAMe8rQDDuKoAv7SnALqxpAC5raAAtqueALWrngC1q54AtaqdALWqnQC1q54AtaudALSqngC0qp4AtaueALWrngC2q54AtKqdALSqnQC1q54AtKueALaqnQC1q54AtKqdALSqnQC2q54AtqueALasnwC1q54AtaueALasngC2rJ8AtayfALasnwC3raAAt62gALasnwC2rJ8At62gALetoAC2rJ8AtqyfALetoAC3raAAt62gALetoAC3raAAt66hALetoAC3raAAt62gALiuoQC3raAAt62gALetoAC3raAAuK6hALetoAC3raAAuK6hALiuoQC4rqEAt62gALesnwC4raAAt62gALetoAC3raAAuK6hALiuoQC4rqEAua+iALiuoQC4rqEAuK6hALetoAC4rqEAuK6hALiuoQC4rqEAt62gALiuoQC4r6IAuq6hALewowC6r6IAurCiALuxowC/tqgAx72xANDGuQDVzL4A1s7AANbPwQDWzsAA1s2/ANbNvwDXzsAA1s2/ANbNvwDVzb8A1My+ANbOwADXz8EA1s7BANbPwgDXz8IA2NHEANrTxgDf2csA4dvLAN/ZyQDf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8+oA9PTrAPPz6gD18+sA9PPrAPTz6wD08+oA8/PqAPPz6gD08+sA9PPqAPPz6gDy8ukA8/LpAPPy6gDz8eoA8fHpAPHw6QDi3tQA4t7UAODe0wDg3dMA4N7TAOHd0gDi3M8A4NvPAN/azgDe2c0A3NjLANzWyQDb1MgA2NLFANfQwgDVzb4A0sm6AM/GuADNw7UAyL+xAMW7rQDBtqoAvrOnALqwowC4raAAtaueALSqnQC1qp0AtaqdALSqnQC0q50AtaudALWrnQC1qp0AtKqdALWrnQC1q50AtaqdALSqnQC0qp0AtaueALWqnQC1qp0AtqydALarngC1q54AtaueALarngC2rJ8AtqyfALWrngC2rJ8AtqyfALasnwC2rJ8AtqyfALetoAC2raAAt62gALatnwC2rJ8At62gALasnwC2rJ8At62gALetoAC4rqEAt66gALetoAC4rqEAuK6hALetoAC3raAAtq6gALeuoQC4rqEAuK6hALiuoQC3raAAuK6hALitoAC4rqEAuK6gALiuogC3raEAt62gALetoAC4rqEAt62gALitoAC3rqEAtq2gALiuoQC4rqEAt66hALevoQC2rqAAt6+hALevoQC3rqEAuK6hALmvogC5rqEAuK6hALmvogC6sKMAvbOnAMK4qwDLwbQA0sq9ANbPwgDWz8EA1s7BANXOwADVzsAA1c7AANTNvwDUzb8A1c7AANXOwADWzsAA19DCANXOwADWzsEA18/CANfQwwDZ08YA2dDEANzUxQDd1cYA2tLAANfOvADVybcA0ca0AMu+rQDGt6YAva6cALOikgColoUAnIp6AJWBcACNe2gAgnFeAHdnUgBtXEgAZlVCAGBROwBeTTkAYVA6AGhVPQBtV0AAbVU+AGpTOgBpUTkAaFA4AGlQOQBqUToAa1I5AG1UOgBvWD0AdFtBAHlfRwB+YUcAgGRJAIFlSgB/Y0oAfGNMAH5kTgCCaVQAinJfAJV+awCijHoAsJmIALmkkgC/qpkAwa2cAMOwnwDGs6IAx7alAMq5pwDNu6sA0L+uANLCsQDUxbQA1ce2ANXJuADYy7oA2c28ANnNuwDZzrwA2s++ANrPvgDbz74A29C+ANvRvgDc0L0A28+8ANzOvADbzrsA28y3ANrLtgDZybMA2MevANXCqgDSvqQAzbieAMivlQDC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8esA8/HpAPLx6QD08esA9PHqAPTy6wD08usA9PHqAPTx6gD08usA8/LrAPHz6wDx8uoA8fLqAPHx6QDw8OgA8fDoAPHw6ADh3tIA4d7SAODe0QDi3tIA4d7SAOHe0QDi3NEA4NvPAN/azgDe2cwA3dfKANzVyQDb1cgA2NLEANbPwgDUzL4A0ci6AM/FtwDMwrQAx76wAMW6rADAtqkAvLKmALqvogC3q54AtKqdALSpnQC0q50AtKqdALWpnQC1qp0AtaueALWqnQC1q54AtKqdALWqnQC1q50AtKudALSqnQC1qp0AtaqdALWroAC0q58AtqueALWrngC0qp0AtaueALWrngC1q54AtaueALWrngC2rJ8AtaueALWrngC2rJ8At6ygALatoAC3raAAta2fALasnwC3raAAt62gALetoAC3raAAtq2fALesoAC2rKAAtq2gALauoAC3rqAAt62gALauoAC1rqAAt66gALeuoQC3raAAt62gALiuoQC3raAAt62gALetoAC2rqEAtq6gALetoAC3raAAt62gALiuoQC3raAAtqyfALetoAC2rqEAuK6hALauoAC2rqAAuK6hALiuoQC2rqAAtq6hALevoQC3r6IAt66iALeuogC3rqEAubGkAL61qQDFvLAAzcO3ANPLvQDWz8EA1s/CANbPwQDVzsAA1c7BANXOwQDVzb8A1s7AANbOwADWzsAA18/CANfPwgDVzsAA1s/BANfPwgDWz8IA1M2/ANPIuADVyrgA0MSzAMi5qQC/r58AuaiYAK+djACjkYAAmod1AJF9awCGdWIAfm1ZAHVkUQBoWUUAY1M+AGRTPwBnVT4AalY/AGpVPQBnUjoAZlE5AGZQOQBoUTkAaVI7AGtUPABuVj8Ac1lCAHpfSACAZUwAhWlQAINnTwB+YksAfGFMAH9nUwCHcF0Ak3xqAKGKeACumIgAtqOSAL2qmQDCr58AxbOkAMm4qADOv68A1Me3ANnOvgDe1cYA4tzNAOXh0gDn5NYA6efZAOno2wDp6NwA6uncAOrq3QDr694A6+rdAOvq3wDq6d4A6uncAOro3QDr6d0A6+rdAOvq3gDq6d0A6undAOrp3ADq6dwA6uncAOro3ADq6d0A6uneAOrp3QDq6t0A6ureAOrp3QDq6dwA6ufbAOnm2QDn5NcA5uLTAOTezgDi2soA4djEAODVwADg1L0A4NO6AN3PtgDZyK4A07+kAMqxlwC8noQArYpvAKR8XgCmfVsArIJfAKyEYQCngF8An3tcAJ14WgCeeVsAoXxeAKB9XgCkfl8AqINkAK+LawC3lngAvqGEAMWrjwDNtZoA0buhANS/pgDXxKwA18avANnJsgDYyrMA2sy1ANrNtgDc0LkA3NC6AN3SvADe074A39XAAN/VwwDf1sUA4djGAOHaxwDj28oA5d7NAOXgzwDn49MA6ebXAOnn2QDp59oA6ujbAOvp3QDs6t4A6+reAOzr3wDs6+AA7evgAO3r4ADs698A7ezhAO7t4wDu7OMA7uzhAO7s4gDv7eIA8O7lAPDv5QDw7+YA8fDmAPHw5gDy8ecA8/LpAPPx6QDz8ekA8/HpAPPx6gDy8uoA8/PrAPPz6wDz8+sA8vPrAPPy6wD08eoA8vLqAPHz6gDy8+sA8fLqAPDx6QDx8ekA8fDoAPHx6QDh3tEA4d/RAOLf0gDh3tEA4t/RAOLe0QDi3dAA4dzPAODbzwDf2cwA3tjKAN3WygDa1McA2dPEANXQwgDVzL8A0sm7ANDFtwDNwrQAyb6wAMS6rAC/takAvLKlALuuogC3rJ8AtKueALSqnQCzq50AtKudALWqngC0qp0AtKueALWrngC1q54AtaueALSrngC1q50AtaueALWrngC1q54AtKqdALWqngC0qp4AtqueALasnwC0qp0AtKueALasnwC1rJ8AtayfALWrngC2rJ8AtqyfALWrngC2rJ8At6yfALWuoQC3raAAt62gALatoAC3rJ8At62gALetoAC3raAAtqyfALetoAC3raAAt62gALeuoAC3rqEAuK6hALeuoQC3rqEAuK6hALetoAC3raAAt62gALetoAC3raAAt62gALetoAC3rqEAt62gALetoAC3raAAuK6hALiuoQC3raAAt62gALiuoQC3rqEAtq6gALeuoQC3rqEAuK2hALiuoQC3rqAAt66gALeuoQC4r6IAua6hALeuoQC5sKMAvrSnAMW7rgDLwrYA08q+ANbOwQDWz8EA187CANbPwgDWzsEA1s/BANXOwADVzsAA1c/AANfOwQDYz8IA1s/CANbPwADVzsAA18/CANfPwgDWzr8Az8S1ANDDsgDLvqwAwbKhALWklACvnYwAppSCAJqHdQCRfWsAhnRiAH5rVwB0Y00AalpEAGdWQQBpV0EAaVc/AGlWPgBnVDwAZlI7AGdQOQBoUToAaVM8AGtUPgBuVj8AcVhAAHdeRgB/Zk0Ah2pTAIhqUgCDZ08AfmROAIBpVACIcl8AlH5sAKKNewCvmooAuKSUAL+tmwDCsaAAxrWlAMq6qwDQwrIA18u7ANzSwgDh2ckA5eDPAOfk1ADp5tcA6ujZAOro2wDq6dwA6undAOrp3ADq6dwA6+rdAOvp3ADs694A7OreAOvp3wDr6d8A6+rdAOrp3ADr6t0A6+rdAOzr3gDr6t0A6urcAOrq3ADr6twA6uncAOrp3ADr6t4A6undAOvq3QDq6d0A6+neAOvp3QDr6dwA6+ncAOvp2wDq6doA6ujYAOnn1gDo5NQA5uLSAObfzgDi28cA4dfCAOHWvgDg1bsA4NK3ANzLsQDVwKcAybGXALaXfQClfmEApXxaAKuCYACvhWIAqYJgAKN8XACdeVsAnnlbAJ56XAChfF4AoX1dAKV/XwCsiGoAtJJzALyegADCqIwAybCUANC4nQDUv6MA1cKpANfGrQDYx7AA2cmyANnLtADazLUA2863ANzQugDc0bsA3dK8AN/UvwDf1cEA4NbDAODXxQDi2cgA49vIAOPdygDl384A5uLRAObj1ADo5dUA6efWAOrn2QDq6NoA6+nbAOzq3QDr6d0A7OncAOrq3ADs694A7uzgAO3r4ADt694A7uzfAO7t4wDv7eMA8O3iAPDu4wDw7+UA8PDlAPHx5gDy8egA8/LqAPPy6QDz8ukA8/HqAPTy6wDz8+sA8vTsAPLz6wDy8+sA8/TrAPPy6wD08esA8vLrAPHz6wDx8+sA8fLqAPHy6gDw8uoA8fHpAPHy6gDi39IA4t/SAOLf0gDh3tEA4d7RAOLe0QDi3dAA4dzPAODbzgDf2cwA3tjLAN3XyQDb1ccA2dLEANbPwgDUzb0A0sq6ANDFtwDNwrQAyL2vAMS5rADAtqgAvLGjALiuoAC3rJ4AtaqdALSqnQC0q50AtaqdALSrngC2q54AtqqdALSrngC1qp0AtaqdALSrngC0q54AtaueALarngC1q54AtKueALWrnQC0qp0AtaueALasnwC3q54AtqqdALWrngC2rJ8At6ueALarngC2rJ8At62gALesnwC3rJ8Atq2gALitoAC4raAAt6yfALatoAC3rKAAt62gALetoAC3raAAtqyfALetoAC3raAAt62gALetoAC3raAAt62gALetoAC4rqAAt62gALasnwC4rqEAt62gALiuoQC3raAAt62gALeuoAC3raAAt62gALetoAC3raAAt62gALetoAC3raAAuK6hALiuoQC3raAAtq2gALiuoQC3rqEAtq6hALauoAC4raEAuK2gALiuoQC4rqEAuK6hALiuoQC9s6cAw7mrAMzCtADRybsA1c7AANbPwQDWzsEA1s/BANbOwADYz78A1s/AANXOwADWz8EA18/BANjQwADY0MAA1c2/ANfOwADWz8IA18/CANbOvgDMv7EAzb+tAMS1owC4qJcArZuKAKaUggCdingAk35tAIh0YgB/bFgAcmBKAGlXQQBoWEAAbFlDAG5ZQwBpVj4AZ1M7AGZSOgBnUjoAaVM6AGxVOwBwV0AAclpDAHZeRwB+ZUwAiG1VAItvVgCFaE8Ae2FJAH5lUACJc18Aln9sAKONfACvm4kAuaaUAL+tmwDDsaAAx7amAM29qwDRxLMA2c69AN3VxADh2ccA5N3KAOXfzADm380A5uDOAOfi0ADo5dMA6ufXAOro2gDr6dwA6+ndAOvq3QDq6dwA7OveAOvq3QDs694A7OreAOrp3QDr6t0A7OvdAOvq3gDs6+AA7OvfAOzr3gDr6t0A6+rcAOvp3QDr6d4A6unbAOvp3ADr6twA6unaAOro2gDq59YA6uXUAOjhzwDl3coA4tbCAN7QuwDayrYA18WwANbDrgDVwq0A18axANzNtwDi1cAA5N3JAOXfzADi2cQA4de+AOLXvADg07gA28uxANG8owC/ookAqINnAKV7WgCsgV8AroRhAK2DYQCmfl0AnnlbAJ14WwCgelsAoHxdAKF7XQCjfV0Aq4ZlALGPcAC4mHoAv6OGAMiukgDOtpsA0ruhANS/pQDXxKsA18atANnIsADZybIA2sy0ANvNtgDcz7gA3NC6AN3RvADe074A3tS/AODWwwDh18UA4tjGAOLZxwDj28oA5d7MAObh0ADn49EA6OXUAOjl1ADp5tcA6ufZAOrn2ADq5tcA6ufXAOvp2wDs6t0A7OncAOzq3ADs694A8O3iAO/s4QDu698A7uzfAO7t4ADw7uIA8fDkAPLw5gDy8eYA8vLnAPLy6ADz8+kA9PPrAPXz6wD08+oA9PTrAPP07ADz8+sA9PPqAPTz6gD08+oA9PPqAPPz6gDy8+oA8fLqAPHy6gDx8uoA8PHpAPHx6QDj4NMA4+DTAOHe0QDi39IA4t/SAOHe0QDi3M8A4dzPAN/azgDf2s0A3tjLAN3XyQDb1ccA2NLDANfPwgDTzbsA0sm4AM/EtgDMwbMAxr2vAMO5qwDAtacAvLGjALeuoAC2rJ4AtaqdALSqnQC0qp0AtqqeALWqnQC3q54At6ueALSqnQC1qp0AtaqdALSqnQC0qp0AtaqdALWrngC1qp0AtaqdALWqnQC1q54AtqyfALWrngC4rJ8AtqueALWrngC1q54AuKyfALerngC2rJ8At6yfALirngC3rJ8AtqyfALisnwC5raAAt62gALesoAC2rZ8At62gALetoAC3raAAt62gALesnwC3raAAt62gALasnwC3rJ8AuKyfALitoAC4rqAAt62gALasnwC3raAAt62gALetoAC3rqEAt62gALetoAC3raAAuK6gALetoAC2raAAtqyfALasnwC4rqEAt62gALiuoQC2rJ8At62gALitoAC3raAAt62gALeuoQC4rqEAuK2gALetoAC3raAAuK6hALuypADBuKkAycCxANDHuQDWzsEA1s/BANbPwQDWz8EA1c7BANbPwADXz74A1s6+ANfOwADYz8EA2M/CANjQwADXz70A187AANjPwQDX0MMA187AAMq9rQDGt6UAva6bALOgjgCnk4IAoIt6AJeBbwCJdmMAfmxYAHJhTABpV0IAaFdBAGxaRABuWkIAbFc/AGhVPQBmUjkAaFM5AGpUOwBuVz0AcVpBAHVdRQB/ZEsAiGxTAI9xWACMblQAf2NLAHlhSwCDa1gAkntoAKKLeQCumYcAuaSTAMCsmwDDsqEAyLemAM2+rADUx7MA2s66AN3TvQDd0LsA2cq1ANTAqgDMtaEAw6yXAL2kjwC7oIoAvaKMAMSokwDOt6EA3M23AOfhzgDr6NkA7OnbAOrp2wDq6dwA6+rdAOzr3gDr6t0A6+rdAOrp3ADq6dwA6+rdAOvq3ADs6twA7OncAOvo2gDr6dsA7OncAOrp2wDs6NoA6ufXAOnl1QDn38wA4tbCANrJswDNuKEAv6WTAK+XhQCljHwAoYd2AJuEdACag3UAnYR2AJ+HdgCgiHYAo4l4AKiMegCwlH4AxamTAOTZwwDo5tUA5t/OAOPZxQDi178A49e+AN/SuADWw6oAxqyTALCNcQCkeVoAqn9cAKyDYACuhWMAqYFeAKB7WwCfelsAnnlbAKB7XQChfF0AoHtbAKZ/YACvimwAtpV3AL6ggwDEqIsAy7KVANC5nADUvqQA1cGmANfEqwDYxq4A2MiyANrKswDbzLUA2863ANzPuADc0bsA3dK8AN/UvgDg1cAA4dbDAOLZxQDh2MUA49rIAOTdygDk38wA5uHPAOfi0ADo49MA6OPTAOnk1ADq5tUA6ujWAOvn1wDr59cA6ufYAO3q3gDt694A7eveAO3r3QDt694A7uvfAO/s4ADw7+IA8fDlAPHw5gDx8OUA8vLnAPPz6ADz8ukA9PPqAPX06gDz8ukA9PPqAPTz6gD08+oA8/PpAPTz6gD08+oA9PPpAPTz6QDy8+oA8PLqAPLy6QDy8ugA8fHoAPDw6ADi39IA4t/SAOHe0QDi39IA497SAOPd0QDh3tAA39zPAN/azgDf2cwA3tfKANzVyQDa1McA2dPEANbPwQDTy7wA0ci6AM/EtgDMwbMAybyuAMW4qgDAtaYAvbKjALmunwC1q50AtKqdALWqnQC2qp0AtaqdALWqnQC1q50AtaudALSrngC1qp0AtKmcALWqnQC2q54AtaqdALSqnQC1qZwAtKqdALarngC3q54AtaueALSqnQC3q54AtaqdALWrngC2q54AtqueALarngC2rJ8AtqyfALarngC2q54AtqyfALetoAC3raAAt62gALasnwC3raAAtqyfALasnwC2rJ8AtqyfALasnwC2raAAt62gALetoAC3rJ8At6yfALetnwC3raAAt62gALetoAC2rJ8At62gALmuoQC3raAAtq2gALesnwC3raAAt62gALetoAC2rKAAtqyfALetoAC3raAAt62gALetoAC2rJ8Atq2gALauoQC4raAAuK2gALetoAC3raAAt66hALitoAC5rqEAurGjAMC2qQDHvbAAz8W3ANXMvwDXz8IA18/BANfOwADWzsAA1c/BANbOwADXzsAA187AANjOwADXz8EA18/CANfOwADXzsAA187BANjQwgDYzr8Ayr2uAL+vnAC3pZIArJmHAKKOfACZhHIAjXlnAIFuWwB1Yk4AaVhDAGdYQQBs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u6gAzrypANC+qwDSwKoA1MSuANvNugDp5tcA7OrgAOzp3wDr6uAA7OrhAOrn2wDk3ssA5NnDAOTawwDh1bwA18iuAMmxlwCujnMAo3paAKh+XQCpgF4ArIRiAKiBYAChe1wAnXlbAJ16XAChfF4AoXxeAJ14WQCifFoArIdoALSQcgC5mXwAwKSHAMeukQDOtZoA0bqgANS/pQDVwqkA18WuANnHsADYyLEA2cqzANrLtADazrcA28+4ANzQuQDe070A3tS+AN/VvwDf1sEA4dfEAOLZxwDj28kA4tvJAOPeywDn4dAA6eXUAOjm1QDp5tUA6ufYAOvm2ADr6NsA7OncAO3s3wDt698A7ureAO3r3wDu7OIA8O7kAPHw5gDw8OUA8fHmAPLy6ADz8ukA8vHoAPLx6AD08+oA9PPqAPTz6gDz8uoA9PHrAPPy6wDz8uoA9PLrAPPx6gDx8ekA8PLqAPHx6QDw8uoA8fHpAPDw6ADi39IA4t/SAOHe0QDi39IA4d7RAOHd0ADh3M8A4NvQAN/azwDe2MsA3tfKANzWyQDa1McA2NHDANbOwQDSyrwA0ce5AM3EtQDIv7EAxrutAMK3qQC/tKUAu6+hALisnwC0q54At6ueALaqnQC1qZwAtambALSpnACzqp0AtaqdALWpnAC0qZwAtKqdALWqnQC0qZwAtamcALWrngC0qp0AtamcALWqnQC1q54AtaueALSqnQC4q54AtqqdALSqnQC1qp0AtaueALWqnQC1q54AtqyfALasnwC2rJ8AtqyfALasngC2rJ8AtaueALasnwC1q54AtaueALasnwC1q54AtqyfALasngC1q58AtqygALetnwC2rJ8At62gALWsnwC0rZ8Atq2gALesoAC3rZ8At62gALasnwC3raAAt62gALatoAC2rZ8At62gALasnwC2rJ8At62gALetoAC2rJ8AtqyfALasnwC2raAAtqygALetoAC2rJ8AtaueALasnwC2rJ8At62gALuxpADBt6sAyr+yANDGuADUzb8A1s7BANfPwgDWz8EA18/CANfOwgDXz8IA1s/BANTOwADVzsAA1s/BANXOwADVzsAA18/CANfQwgDY0MMA2M6/AM69qgDBrZoAuKOPAK+YgwChiHMAhnBcAHFgSgBpWUQAaVhCAGhUPQBnVD0Aa1Y9AG5YQQBy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vrUAmF46AJ1TGgCtYycAtm4xAL16QAC/gUsAwIFMAMCBTADAgEsAv35JAL19SAC7eUEAunU6ALRsMACvaDQA07eaAOvp3gDs6uEA6undAOfi0gDk28gA49nCAOHWvgDczbUAzLafALOUeACngWEAqH9fAK2EYgCthGMAqoJhAKV+XgCge10AoHtdAKJ9XwCgfF4Am3dYAJx3VgCjfVwAq4ZlALSQcAC7nH0AwqiKAMmwlADOuJwA0ryiANTApgDXw6wA18auANnIsQDZybIA2su0ANvNtgDcz7gA3dG6AN/UvwDh2MUA5d/MAOjl1ADq6NoA6+neAOzr4ADt7N8A7evfAO3r4QDu7OIA7+7kAPDv5QDw8OQA8PDlAPDw5QDx8eYA8vLnAPPy6ADy8egA8vHoAPLx6ADz8ukA9PPqAPTz6gDz8ukA8/LpAPTz6gD08+oA8/LpAPLx6ADz8ekA8/DqAPHx6QDw8ekA8fHpAO/v5wDg4NMA4eDTAOPf0gDi39IA4t/SAOHe0QDg3NAA4NrPAN7ZzQDe2MsA3dbKANvVxwDZ1MUA19DCANTNvQDSybsA0Ma4AM3CtADJvq8AxbqrAMC1pwC8saQAuK2gALWrnQC1qp0AtamcALWpnAC1qp0AtaqdALWqnQCzqZwAtKmcALSpnAC1qp0AtamcALWpnAC0qZwAtKqdALWqnQC1qZwAtKqdALWqnQC1qp0AtamcALWpnAC3q54AtamcALWrngC1qp0At6ueALeqnQC3q54AtqueALarngC2q54At6ueALesnwC1q54AtaqdALWrngC1q54AtaueALSqnQC0q54AtayeALarngC1q54AtayfALasnwC2rJ8AtqyfALWrngC2rJ8AtqyfALWrngC1q50AtqufALasnwC2rJ8AtaueALWsnwC1rJ8AtqyfALasnwC1rJ8AtaueALarngC2q54AtqyfALWrngC1q54AtayeALasnwC5r6IAvrSnAMS6rgDKwLQA0Me7ANXNwADXz8IA187CANfPwgDWzsEA1s7BANbOwQDVz8AA1c7AANbPwQDXz8IA18/CANjQwwDY0cMA2tPGAN/ZzADm49YA6+neAN/ZxgCYi3IAbVxFAHFcRAB5YkkAgmhOAI9xWACdfWUArI10ALufhwDBpo4AsJN6AJt/aACokXwAwa2aAM28qgDU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8egA8/LpAPPy6QDy8egA8vHoAPLx6ADz8ukA8/LpAPPy6QDz8ukA8/LpAPLx6ADy8ekA8/HpAPHx6gDw8ekA8fHpAPHw6ADg39IA4N/SAOHg0wDi4NMA4t/SAOLe0QDi3dAA4NvPAN7ZzQDe2MsA3dbJANnUxwDZ0sMA1s/BANXMvgDRyLoAzsS2AMzBswDGvK4AwbipAL2zpQC7rqIAtqueALSqnQC1qp0AtKqdALSpnAC0qZwAtKmcALSqnQC2qpwAtKmcALSpnAC0qZwAtKqdALSpnAC1qZwAtaqdALWqnQC1qpwAtKmdALWpnAC1qZwAtamcALWpnAC2qp0AtamcALaqnQC2qp0AtamcALaqnQC2qp0AtqqdALerngC3q54At6qdALWrngC0q54AtKueALSqnQC1q54AtaueALWrngC0qp0AtaueALWrngC1q54AtqueALarngC2rJ8AtqyfALarngC1q54AtaueALWrngC1q54AtaueALWrngC1q54AtKqdALSrngC0q54AtqyfALWrngC1q54AtqyfALasngC1q54AtqyfALmuogC9s6YAwrisAMq/sQDPxbcA08q8ANXOwADX0MIA18/CANbOwQDWz8EA1s/BANbOwQDXz8IA1s7BANbPwQDXz8IA19DCANjRwwDd2coA5eLWAOvr4gDu7uYA7u/mAO3u5gDs7uUA3NG6ANfErADXwqkA18KoANjDqQDYxKsA18WsANnErQDUvaQAxayRANXGsADp5tYA6OXXAOnn2gDr6t0A6+rdAOrp3gDq6N4A7OngAOzq4ADq6dwA6undAOvo3wDr6t8A6urcAOrp3QDq6N8A6+nfAOvp3wDr6eAA6+ngAOrq3QDo6dwA6ejaAOvp2gDq5dQA6OHOAOfeygDn3soA6ODOAOrl0gDr6NcA6+nbAOrp2wDq6dwA6uncAOnm2gDWy7gA2cu1ANfIswDXxrEA2su1AN3QvQDbz70A2868ANnLuADYx7MA18WxANbEsQDWxbEA1sexANnKswDMu6YA5uLWAOvr3gDs694A7OveAOzr3gDs698A7OvhAOzr4QDs6+EA7OrgAPDv5QC+uacAp5WCALymlQDLt6MA0LyoANPAqgDUwKwA1MCrANTBrADUwKsA07+qANK/qQDRvqkAz7umAMy1nwDBp48AsJl8AN/bygDs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6dsA8fHoAPLz7QDz9PAA9PXxAPT18QDz9fAA8/XwAPT18QD19fQA9PXyAPP18AD09fAA9PXwAPT18gDy8/IA9PXzAPP08gDm59wA5ubbAOXk1wDk49YA4+LVAOHg0wDh3dEA39rPAN7YywDc1ccA2dHEANTOvgDSybgAz8W0AMq/rwDFuqwAwLWnALyxowC6r6AAtqyfALasnwC1q54At6yfALisnwC2q54AtayfALesnwC3q54AtqueALWsnwC3q54At6yfALarngC3q54At6qdALaqnQC1q54AtqueALerngC3rJ8AuKyfALWrngC1q54AtKqdALasnQC2qp0AtqqdALarngC0qp0AtaueALesnwC7r6MAvrOlAMO4qQDGvK0Ayr+xAM7DtQDSx7kA1Mu9ANXOwADY0MIA2dTFANvVyADb1cgA3NbIAN7YygDi3M4A5eHTAOfm2ADq6d0A7ezhAO3u5QDv7+cA7/HpAPHy7QDx8+4A8PLtAPHz7gDw8u4A8fPuAPHz7gDx8+4A8fPuAPDy7gDx8+4A8vTuAPHz7gDw8u4A8PLuAPDy7gDx8+4A8fPuAPHz7gDw8u4A8fPuAPHz7gDx8+4A8fPuAPHz7gDw8u0A8PPuAPHy7QDx8+4A8fLtAPHx7QDx8uwA8fLsAPHz6gDw8uoA8PLqAPDy6gDv8ekA8PLqAPHx6QDw8ekA8fLqAPHx6QDx8ekA8fDoAPHw6ADx8ekA8fHpAPHx6QDw8OgA7+/mAPDw5wDw8OcA8PDnAPHv5gDv8OcA7/DnAO/w5wDu7+YA7u/mAO/w5wDv8OcA7u/mAO7v5gDv8OcA8e/mAPDw5wDv8OcA8PDnAO/w5gDw8OcA8PDnAO/v5wDw8OcA7+/nAPDx6QDw8OgA8fHpAPDy6gDw8ekA8fLqAPLz6wDy8+oA8vLsAPHx7QDx8ewA8vHsAPHy7QDx8+4A8fPuAPHz7gDx8+0A8fPuAPHy7wDx8u8A8vPvAPLz7wDy8+8A8fLuAPLz7wDz9PAA8vPvAPLz8ADy8/AA8fPuAO/x6QDv7uYA7OvgAOjl2ADm4NAA4tzLAOHZyQDi2ckA4drJAOHZyQDi2soA49vLAOPbywDj28sA4trKAOLaygDh2soA4dnJAN7XyADd1cQA3dK/ANfItQDNuKUAvKONAKiNdgCSf2gAgnhkAIF/bwCL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9PAA8/XyAPT09AD19fQA9fX0APX19AD19fQA9PXzAPX19AD19fQA9PXzAPX19AD09fMA8/XyAPT18wD09PMA9PXzAPP08gDo59sA5ubbAOXj2QDk49gA4+LVAOLg0wDh3dEA4NrOAN7XywDc1ccA2dPDANXOvQDTybgAzsSzAMq/rwDEuasAv7SmALuwogC6r6AAuKyfALesoAC5rZ8AuK2fALmtoAC3q54At6ueALasnwC1rJ8AtaueALarngC3rJ0At6ydALeqngC2qp0AtKqdALWqnQC1q54AtaueALSqnQC1qp0AtaueALarngC3qp0AtaueALSrngC3qp0At6ueALisnwC5raAAu7CkAL+zpwDDuKoAx7ytAMvAsgDPxLYA0se5ANTLvQDWzsAA2NHDANrUxgDc1ckA3NXJANzXyQDh3M4A5ODSAOfk1wDp6NwA6+rgAO3t5ADw7+cA8fDpAPHx6gDy8u0A8fLuAPHz7gDw8u4A8fPuAPHz7gDx8+4A8fPuAPHz7gDx8+4A8fPuAPDy7gDx8+4A8vTuAPHz7gDx8+4A8vTuAPHz7gDy9O4A8fPuAPDy7gDx8+4A8vTuAPHz7QDw8u4A8fPuAPL07QDx8+4A8PLuAPHz7gDx8+4A8fPuAPHy7QDx8u0A8fLtAPDy7ADx8+0A8fLqAPHz6wDx8+sA8vPrAPLz6wDx8uoA8PLqAPHx6QDx8ekA8fDoAPHw6ADx8ekA8fHpAPHx6QDw8OgA7+/mAPDw5wDv8OcA8PDnAPDw5wDw8OcA8fDnAPHw5wDx8OcA7/DnAO/w5wDv7+YA7/DnAPDw5wDw8OcA8fDnAPDw5wDw8OcA8PDnAO/w5wDw8OcA7+/mAPDw5wDw8OgA8PDoAPDw6ADx8OgA8fHpAPDy6gDw8ekA8fLqAPLy6wDx8e0A8vLtAPPz7gDy8+4A8vLtAPHz7gDw8u4A8fPtAPH07QDy8u8A8fLuAPLz7wDz9PAA8vPvAPHy7gDx8u4A8vPvAPLz7wDy8+8A8/TwAPP08ADz9PAA8/TwAPLz7wDy8+8A8fHrAPDv5wDu7eIA6ujaAOfj1ADk3c0A4tnJAOHYyADi2MgA4djIAOHZyQDi2ckA4dnJAOHZyQDi2ckA4dnIAOHZyQDh2ckA4NfHAN7VxADc08AA2cy6ANK/rQDCrZgAsJiBAJyFbQCH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08UA29XHANzWyADd1soA39rMAOTf0QDm5NUA6ejaAOvq3wDt7OMA7+/lAO/x6ADw8eoA8fLtAPHz7gDx8+0A8fPuAPDy7gDx8+4A8fPuAPL07gDx8+4A8fPuAPL07gDy9O4A8fPuAPL07gDx8+4A8vTuAPL07gDy9O4A8vTuAPL07gDx8+4A8fPuAPHz7gDx8+4A8fPuAPHz7gDw8u4A8fPuAPHz7gDx8+4A8fPuAPHz7gDw8u4A8fPuAPHy7QDx8+4A8fLtAPDz6wDx8usA8fPqAPHy6gDx8uoA8fPrAPHy6gDx8uoA8PHpAPHy6gDx8uoA8fHpAPHx6QDx8OgA8PDoAPHx6QDw8OgA7+/mAPDw5wDv8OcA8PDnAPDw5wDw8OcA8fDnAPHw5wDx8OcA8fDnAPDv5gDx8OcA8PDnAO/v5gDv8OcA8fDnAPHw5wDx8OcA8PDnAPDv5gDw8OcA8PDnAPDw6ADx8ekA8fHpAPHx6QDw8ekA8fHpAPDy6gDx8uoA8fLqAPLy6wDy8e0A8vLtAPLz7gDx8+4A8fPuAPHz7gDx8+0A8vPuAPLz7gDy8u8A8vPvAPLz7wDy8+8A8vPvAPHy7gDy8+8A8/TwAPP08ADz9PAA8vPvAPP08ADy8+8A8/TwAPLz7wDz9PAA8/TwAPPz7gDy8eoA8O/mAO3r4ADp5tkA5uDRAOPbywDh2cgA4dnIAOHYyADh2cgA4djIAOLZyQDh2MgA4dnIAOHYyADh2McA4dnIAODYxwDf1sUA3tTDANzRvgDYyLUAzLmmALyjjQCmi3QAj3deAHdpTgBwZk8AcGlTAHNqVAB2a1UAem5XAH5wWwCGdF4AjXplAJSBbQCdiHQApI99AK2XhQC0n4wAu6eVAMGunADGs6EAybalAMq3pQDItqUAyLWkAMa1owDEs6AAwrCeAMCtmwC+q5gAuqmVALamlACzpZEAsaKPAK2fjQCrnosAqZuIAKaZhACkl4MAopR/AKSUfQCzn4cAyrefANXFsQDazrsA3dPBAN7UwgDe08MA3dTDAN7UwwDe08MA3dTCAN3UwQDd1MEA3dPBAN3TwQDd1MEA3dPBAN7UwgDg18UA4trIAObezgDo49IA6ufYAO3r3wDv7uMA8fDnAPLy6gDx8u0A8/PvAPLz8ADz9PAA9PXyAPT18wD09fMA9PXzAPT08wD09fMA9fX0APX19AD19fQA9PXzAPX19AD19fQA9fX0APX19AD19fQA9fX0APX19AD09fMA8/XyAPP08gD09fMA8/TyAPP08gDn59wA5ubbAObl2ADk5NYA4+LVAOPg0wDg3dAA39rNAN3XygDb1McA2NLBANbNvQDSx7cAzcOyAMi9rQDDuKoAvrOlALqvogC5raAAt62gALesnwC4q54At6yeALWsnwC3rJ8AuKyfALasnwC2q54AtKueALSqnQC3q54At6ueALaqnQC2qp0AtaueALaqnQC3q54AtqueALSqnQC1qp0AtqqdALWrngC0q54AtqqdALaqnQC4q54Aua6hAL2yowDBtqcAxLmrAMi9rwDMwLMA0MS2ANLHuQDVzLwA18/BANjRwwDa1MYA3dfJAN3XyQDf2swA497QAObj1QDo59oA6+reAO3s4QDw7uUA8fDoAPHx6gDx8u0A8fPuAPL07QDy9O4A8fPuAPHz7gDy9O4A8vTuAPL07gDx8+4A8PLuAPHz7gDy9O4A8vTuAPHz7gDy9O4A8fPuAPHz7gDy9O4A8fPuAPHz7gDx8+4A8vTuAPL07gDy9O4A8vTuAPHz7gDx8+4A8PLuAPDy7gDw8u4A8fPuAPHz7gDw8u4A8fPuAPHz7gDx8u0A8fLtAPDy7QDx8uwA8vPqAPLz6wDy8+sA8fLqAPHy6gDw8ekA8fLqAPHx6QDx8uoA8fDoAPHw6ADx8OgA8fHpAPHx6QDw8OgA7+/mAO/v5gDv8OcA8PDnAPHw5wDx8OcA8fDnAPHw5wDw8OcA8fDnAPHw5wDw7+YA8O/mAPHw5wDx8OcA8fDnAPHw5wDw8OcA8fDnAPHv5gDx8OcA8vDnAPDw5wDw8OgA8PDoAPDw6ADx8ekA8fLqAPDx6QDw8ekA8fLqAPLy6wDy8e0A8fLtAPHz7gDx8+4A8fPuAPL07gDy9O0A8fLvAPLy7wDy8+8A8/TwAPP08ADz9PAA8vPvAPLz7wDz9PAA8vPvAPP08ADz9PAA8/TwAPP08ADy8+8A8/TwAPP08AD09fEA9PXxAPLz7wDx8+0A8fHpAO/u5QDs6t8A6eXYAOXgzwDh28oA4dnJAOLYyQDi2ckA4NnHAOHYyADg2ccA4NnHAOHZyADh2cgA4NnHAODYxwDg18cA3tbFAN3UwwDb0L4A1cW0AMi1oAC2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18kA39nLAOLezwDm4tMA6ObYAOrp3ADs6+EA7u7kAO/v5wDx8OgA8fHsAPDy7gDw8+4A8PLtAPHz7gDy9O4A8fPuAPHz7gDw8u4A8PLuAPL07gDx8+4A8fPuAPHz7gDx8+4A8fPuAPL07gDx8+4A8vTuAPL07gDx8+4A8vTuAPL07QDy9O4A8vTuAPL07gDy9O4A8vTuAPHz7gDx8+4A8fPuAPL07gDx8+4A8PLuAPDy7gDx8+4A8fPuAPHz7gDw8u4A8fPuAPDz7gDx8+0A8vPqAPLz6gDy8uoA8fLqAPHy6gDw8ekA8PHpAPHy6gDx8ekA8fDoAPHx6QDx8uoA8fDoAPDw6ADx8ekA8fHpAPDw6ADv7+YA7/DmAO/w5wDw8OcA7vDnAPDw5wDx8OcA8e/mAPHw5wDx8OcA8PDnAO7v5gDu8OcA7vDnAO/w5wDx8OcA8fDnAPHw5wDw8OcA7/DnAPDw5gDv7+YA8PDoAPHx6QDw8OgA8PLqAPHy6gDy8+sA8fLqAPLz7ADz8+4A8/LtAPPz7gDx8+4A8PLuAPHz7QDy9O0A8fPuAPHy7gDx8u4A8/TwAPP08ADz9PAA8vPvAPLz7wDz9PAA8/TwAPLz7wDy8+8A8vPvAPLz7wDy8+8A9PXxAPLz7wD09fEA9PXxAPP08ADy8/AA8vPvAPHy7ADx8egA7u7jAOvp3QDn5NUA5N7NAOLayQDg2McA4NjHAOHZyADg2ccA4dnIAOHZyADg2ccA4dnIAOHYyADh2cgA4NjHAN/XxgDe1cUA3dLBANjMugDRwbAAx7WkAMGtmwC9qJYAvaiXAMCrmgDEr54AyralAM++rADTw7IA1sm3ANnNugDZz74A29C/ANzRwQDb0L8A18m3ANHArADFs54AuKOPAKmWgQCbi3QAj4FrAIV8ZgB9d2IAeXRgAHl0XwB5dGEAfHRhAH50YQB/dWEAgndkAIh6ZACPfmoAloVvAKOOeQCvmYIAvKWQAMeynQDQvakA1seyANrOuwDc0sAA3dPCAN7TwgDd1MIA3tTDAN7WxADg2MYA49vKAOXfzgDn49MA6efZAOvq3QDt7eEA7+/lAPHw6ADx8esA8vLtAPLz7gD09O8A8/TxAPP08AD09fMA9PXzAPT18wDz9PIA8/XyAPT18wD19fQA9PXzAPT18wD09fMA8/XyAPT18wD19fQA9fX0APX19AD19fQA9fX0APX19AD19fQA9fX0APX19AD19fQA9fX0APT18wDz9fIA9PXzAPP08gD09fMA9PXzAPT18wDn590A5ubbAObk2QDl5NcA4+HUAOLf0gDh3dAA4NrNAN3XygDa1MYA2NHBANTMuwDRxrYAzMGxAMi9rADCt6kAvrOkALqvoQC5rqAAt6yfALitoAC4rJ8At6yfALarnwC2rJ8AtqueALWrngC0q54AtaqdALarngC1q54AtaqdALerngC2qp0AtqqdALerngC2qp4AtaqeALSrngC0qp0AtaqdALSqnQC2q54At6yfALmuoQC9s6UAwbaoAMW5rADJva8AzsGxANDEtQDTyLkA1My9ANfOwQDZ0cQA2tTGANzWyADf2csA4t3PAOXi1ADo5tcA6ujdAOzr4ADt7eQA8PDmAPDw6ADx8esA8fLtAPDz7gDx8+0A8PLuAPHz7gDy9O4A8vTuAPL07gDw8u4A8fPuAPL07gDy9O4A8vTuAPHz7gDx8+4A8vTuAPHz7gDy9O4A8vTuAPL07gDy9O4A8vTtAPL07gDy9O0A8vTuAPL07gDy9O4A8vTuAPHz7gDx8+4A8vTuAPL07gDx8+4A8fPuAPHz7gDw8u4A8fPuAPDy7gDx8+4A8PLuAPDz7gDx8+0A8fLsAPHy6wDx8+oA8fLqAPDx6QDx8uoA8fLqAPDx6QDx8uoA8fHpAPHx6QDx8ekA8fDoAPHx6QDx8ekA8fHpAPDw6ADv7+cA8PDnAPDw5gDw8OcA7/DnAO/w5wDv8OcA8PDnAPDv5gDx8OcA8PDnAO/w5wDv8OcA7vDnAO/w5wDw8OcA8PDnAPDw5wDv8OcA7/DnAO/v5gDw8OcA8fHpAPHw6ADx8ekA8PLqAPDx6QDx8uoA8vLsAPLy7ADz8+4A8vLuAPPz7gDy8+4A8fPtAPL07gDx8+4A8vPvAPLz7wDy8+8A8vPvAPLz7wDy8+8A8/TwAPP08ADy8+8A8vPvAPP08ADz9PAA8/TwAPLz7wDz9PAA8/TwAPP08AD09fEA8/TwAPLz7wDz9PAA8vPwAPLz7gDx8usA8PDnAO7t4gDq6NwA5uPTAOPczADh2ckA4NjHAODYxwDh2cgA4NnHAODZxwDh2MgA4dnIAOHZyADh2cgA4NjHAODYxwDf18cA3tXEANzSwADY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4dIA6OTXAOno2gDr6+AA7O3jAO7v5gDw8OgA8PLqAPHy7QDw8u0A8fPuAPDy7gDx8+4A8fPuAPL07gDx8+4A8vTuAPHz7gDy9O4A8vTuAPHz7gDy9O4A8vTuAPL07gDy9O4A8fTtAPH07QDx9O0A8vTuAPL07gDy9O4A8vTuAPH07QDy9O4A8vTuAPL07gDx9O0A8fTtAPH07QDx8+4A8fPuAPL07gDy9O4A8vTuAPHz7gDx8+4A8fPuAPHz7gDy9O4A8fPuAPDy7gDx8u0A8fLuAPHz7QDw8+0A8fPsAPHy6gDx8uoA8PHpAPHy6gDx8uoA8fLqAPHx6QDx8ekA8fHpAPHw6ADx8OgA8PHpAPHx6ADw8OcA7+/nAO/w5gDv8OcA7/DnAPDw5wDw8OcA8O/mAPDw5wDv7+YA7/DnAO/w5wDv8OcA8PDnAPDw5wDw8OcA8PDnAPDw5wDw8OcA8O/mAO/w5wDw8OgA8PDoAPDw6ADx8uoA8fLqAPLz6wDy8usA8vLtAPLy7QDz8+4A8/PuAPLz7gDy8+4A8fTtAPHz7gDy8+8A8vPvAPLz7wDy8+8A8/TwAPP08ADz9PAA8/TwAPP08ADz9PAA8/TwAPP08ADz9PAA9PXxAPT18QDz9PAA8/TwAPT18QDz9PAA9PXxAPP08gDz9PEA8/TxAPP08gDy8/EA8fLuAPHy6wDw8OYA7OvgAOrn2QDl4dEA49zLAODYyADg2McA4NjHAOHZyADh2cgA4NjHAODYxwDg2McA4dnIAODYxwDg2McA4NjHAN/XxwDe1sUA3tTDAN3SwgDc0r8A3NK/ANzRvwDc0r8A3tPBAN7UxADe1sUA39fGAN/XxgDe1sUA3tbFAN/XxgDd0sAA2Mu3ANG/qwDHsp4Au6eSALehjQC0nooAtJ6JALSfiwC3oY4AuqSQAL2olADBrJgAxbCcAMm0oQDMuaYAz72rANPCsADWx7QA2cy5ANzRvgDf1cMA4trHAOTdzADl4NAA5uPUAOjm2ADr6dwA7evfAO7t4gDv7+UA8O/oAPHx6gDx8uwA8vPuAPLz8ADy8/EA8/TxAPP08gDz9PIA8/TyAPP08gD09fMA8/TyAPT18wDz9fIA9PXzAPT18wDz9fIA8/XyAPT18wD09fMA8/XyAPT18wD19fQA9fX0APX19AD19fQA9PXzAPX19AD0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6t8A7e3iAO3u5ADv7+YA8fHpAPHy7ADx8+4A8vTtAPL07QDy9O0A8vPuAPLy7wDy8+4A8fTtAPL07gDy9O4A8fPuAPHz7gDy9O4A8vTuAPL07gDx9O0A8fTtAPH07QDx9O0A8fTtAPH07QDx9O0A8vTuAPH07QDz9O8A8fTtAPL07gDy9O4A8vTuAPH07QDx9O0A8fTtAPH07QDy9O4A8vTuAPL07gDy9O4A8vTuAPL07gDy9O4A8vTuAPL07gDy9O4A8fPuAPDy7gDx8+4A8PLtAPHz7gDw8+4A8fPsAPHy6gDx8+oA8vPrAPLz6wDy8+sA8fLqAPDx6QDx8uoA8fLqAPHx6QDx8egA8fHoAPDw5wDv7+YA7+/mAPDw5wDv7+YA7+/mAO/w5wDw8OcA7/DnAO7w5wDx8OcA8fDnAPHw5wDx8OcA8PDnAPHw5wDw8OcA8O/mAPHw5wDw8OcA8PDnAPHw6ADx8ekA8PLqAPHy6gDw8ekA8fLrAPLx7QDz8+4A8/PtAPPz7QDx9O4A8fPuAPL07QDy8+4A8vLvAPLz7wDx8u4A8vPvAPP08ADy8+8A8/TwAPP08ADz9PAA8/TwAPP08AD09fEA9PXxAPT18QDz9PAA9PXwAPT18gD09fMA9PXzAPT18wD09fMA8/XzAPP18gDz9fIA8/XyAPP18gD09PMA9PXzAPT18wDy9PAA8fPtAPHz6wDw7+YA7ezhAOro3ADn49MA497NAOLZyQDg2MgA4NjGAOHZyADg2cgA4dnIAODYxwDh2McA4dnIAOHZyADh2McA4NjHAOHZyQDh28sA4tzLAOHZyQDf18YA39fGAN/XxgDf18YA39fGAN/XxgDf18YA3tbFAN7WxQDf18YA39fGAN/VxQDg1sYA39fGAODXxQDh2ccA4tvKAOPcywDk3s4A5uHRAObi1ADo5dYA6efbAOrp3QDr6t4A7OzgAPDu5QDv7+UA8O/oAPDw6gDx8esA8PHtAPHy7gDy8+8A8vPxAPLz8QDy8/EA8/TyAPP08gDz9PIA8/TyAPP08gD09fMA9PXzAPP08gDz9PIA9PXzAPT18wDz9PIA9PXzAPT18wD09fMA8/XyAPT18wD09fMA8/XyAPP18gD19fQA9fX0APX19AD19fQA9fX0APX19AD09fMA9PXzAPX19AD19fQA9fX0APT18wD0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7+YA8fHpAPHy6QDx8+4A8vPuAPHy7wDy8+8A8vPvAPHy7gDx8u4A8vPvAPLz7wDx8u4A8vLvAPLy7wDx8u8A8fPuAPL07gDz9PAA8/TwAPP08ADy8+8A8fPtAPL07gDx9O0A8fTtAPLz7gDx9O0A8fTtAPL07gDz9O8A8vTuAPL07gDx9O0A8vTuAPL07gDy9O4A8fTtAPH07QDy9O4A8vTuAPH07QDy9O4A8/TvAPL07gDx9O0A8vTuAPL07gDy9O4A8fPuAPDy7gDw8u4A8fPuAPHz7gDw8u4A8fLsAPLy6gDx8uoA8vPrAPHy6gDw8ekA8PHpAPHx6QDx8ekA8fLqAPHx6QDx8OgA8fHpAPHx6ADw8OcA7+/mAPDw5wDw7+YA7/DnAO/w5wDw8OcA7/DnAO7w5wDx8OcA8fDnAPHw5wDw8OcA7vDnAO/w5wDx8OcA8O/mAPDw5wDx8egA8PDnAPHw6ADx8ekA8PHpAPLz6wDw8ekA8vPrAPHy6gDy8+sA8/PuAPLz7gDx9O4A8fTtAPL07gDy8+8A8fLuAPLz7wDz9PAA8vPvAPLz7wD09fEA9PXxAPT18QDz9PAA8/TwAPT18QD09fEA9PXwAPT18AD09fAA9PXwAPP18gDz9fMA8/XyAPT18wDz9fIA9PXzAPT18wDz9fIA8/XyAPT18wD09fMA8/XyAPT18wD09fMA9PXyAPT18wDz9PIA8/TwAPLz7wDy8usA8PHoAO/v5QDt7OEA7OreAOro3ADp59kA6ebYAOjm1gDo5dYA6OXXAOjl2ADo59kA6efYAOnn2ADq6NoA6ujbAOrp3ADr6dwA6+reAOzq3wDs6uAA7eziAO3t4wDu7uMA7u7kAO7u5QDu8OcA7/DnAPDw6ADw8ekA8fHqAPLx7ADx8uwA8fLsAPLy7QDy8u4A8fPvAPLz7wDz9PEA8/TyAPP08gDz9PIA8/TyAPLz8gD09fMA9PXzAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPP08gD09fMA8/XyAPP18gD09fMA9PXzAPP08gD09fMA9PXzAPP18gD09fMA9fX0APT18wDz9fIA9PXzAPX19AD09fMA8/XyAPP18gDz9fIA9PXzAPX19AD09fMA9fX0APX19AD19fQA9fX0APX19AD19fQA9fX0APX19AD19fQA9fT0APX09AD1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8ewA8fLtAPLy7gDy8+8A8vPvAPHy7gDy8+8A8/TwAPLz7wDy8+8A8vPvAPLz7wDx8u4A8fLuAPLz7wDy8+8A8vPvAPHy7gDy8+8A8vPvAPLz7wDy8+8A8vPvAPP08ADz9PAA8vPvAPLz7wDy8+4A8fTtAPL07gDy9O4A8vPuAPHz7gDx8+4A8vPuAPL07QDx8+4A8fPuAPHz7gDy8+4A8fPuAPL07gDy9O4A8fTtAPH07QDy8+4A8vTuAPHz7QDy9O4A8fPuAPHz7gDx8+4A8fPuAPHz7gDw8u0A8fLsAPDz6gDx8uoA8vPrAPHy6gDw8ekA8PHpAPDx6QDx8uoA8fHpAPHx6QDx8ekA8PDoAPDw5wDw8egA8PDnAO/v5gDw8OcA7/DnAO/w5wDv8OcA7+/mAO/v5gDx8OcA8fDnAPDv5gDv7+YA7/DnAO/v5gDw8OcA8PDnAO/v5gDw8OcA8fHnAPDw6ADx8ekA8fLqAPHx6QDx8uoA8fLqAPLz6wDz8+wA8/LuAPLy7gDx8+0A8vPuAPHz7gDy8+8A8vPvAPLz7wDy8+8A8/TwAPLz7wDz9PAA9PXxAPT18QDz9PAA8/TwAPT18QD09fAA9PXxAPT18gD09fIA8/XyAPT18wD19fQA9PXzAPP18gD09fMA9PXzAPP18gD09fMA9PXzAPT18wDz9fIA9PXzAPP18gD09fMA9PXzAPT18wDz9fIA9PXzAPT18wD09fMA9PXzAPT18wDz9PEA8/TwAPP08ADy8/AA8vPvAPLz7wDy8+8A8vPvAPLz7wDy8+8A8vPxAPLz8QDy8/AA8/TxAPP08gDz9PIA8/TwAPP08QDz9PIA8/TyAPP08gDz9PIA8/TyAPP08wD09fMA8/TyAPT18wDz9PIA9PXzAPT18wD09fMA8/TyAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wDz9PIA9PXzAPT18wD09fMA8/TyAPT18wD09fMA9PXzAPT18wD09fMA8/XyAPT18wD09fMA8/XyAPP18gD09fMA9PXzAPT18wD09fMA9PXzAPT18wDz9fIA9PXzAPT18wD09fMA9fX0APT18wD09fMA9fX0APX19AD09fMA9fX0APX19AD19fQA9PXzAPX19AD19fQA9PXzAPX19AD19fQA9fX0APX19AD1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7+YA8PDnAPHw5wDw7+YA8O/mAPDv5gDw7+YA8O/mAPDw5wDv8OcA7/DnAPDw5wDw7+YA8PDnAPDx6QDx8OgA8fHpAPHx6QDx8uoA8vPrAPLz7ADz8u4A8/PuAPLz7gDx9O0A8vPuAPLz7gDx8+4A8fLuAPLz7wDz9PAA8/TwAPLz7wDz9PAA9PXxAPT18QDz9PAA8/TwAPT18QD09PEA9PXxAPP18QDz9PEA8/XxAPT18wD09fMA9PXzAPP18gD09fMA9PXzAPP18gD09fMA9PXzAPT18wDz9fIA9PXzAPT18wD09fMA8/XyAPT18wDz9fIA9PXzAPT18wD09fMA9PXzAPT18wD09fMA8/TyAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPP08gDz9PIA8/TyAPP08gDz9PIA9PXzAPT18wD09fMA8/TyAPT18wD09fMA9PXzAPP08gD09fMA9PXzAPP08gDz9PIA9PXzAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wDz9fIA9PXzAPT18wDz9fIA9PXzAPT18wD09fMA9PXzAPT18wD09fMA8/XyAPT18wD09fMA8/XyAPP18gD09fMA9PXzAPP18gD09fMA9PXzAPT18wD09fMA9PXzAPX19AD19fQA9fX0APT18wD09fMA9PXzAPX19AD19fQA9fX0APX19AD19fQA9fX0APT18wD09fMA9fX0APX19AD19fQA9fX0APX19AD19fQA9fX0APX19AD19fQA9fX0APX19AD19fQA9fX0APX19AD19fQA9fX0APX19AD19fQA9fX0APX19AD09fMA8/TyAPT18wDo6N0A5+fcAObm2wDk5NcA4+LVAOHg0gDh3dAA39rMAN3WxwDZ0sMA1c69ANLIuADNwrIAyL2sAMK3pgC8saIAua6gALasoAC3rJ8At6yfALerngC2q54AtqueALerngC1qp0AtKueALaqnQC2qp0At6qeALerngC1qZwAt6qdALmtoAC7r6IAvbKmAMC2qADEuawAx72uAMvArwDOw7UA0sa5ANPKugDUzr0A2NDCANvUxgDf2csA49/QAObj1QDn59kA6undAOzr4QDt7eQA7+/mAPDx6ADw8eoA8PLtAPHz7wDy8+8A8fLuAPHy7gDy8+8A8vPvAPHy7gDy8+8A8vPvAPLz7wDy8+8A8vPvAPLz7wDy8+8A8vPvAPHy7gDx8u4A8/TwAPP08ADx8u4A8vPvAPP08ADy8+8A8vPvAPLz7wDy8+8A8vPvAPLz7wDy8+4A8fTtAPL07gDx8+0A8vTuAPL07gDy8/AA8vPvAPHy7wDx8+4A8fTtAPL07QDx9O0A8fTtAPLz7gDy9O4A8vTuAPL07gDx8+0A8vTtAPL07gDy9O4A8fPuAPHz7gDx8+4A8fPuAPHz7gDw8u0A8fLrAPLz6gDx8uoA8PHpAPHy6gDx8uoA8PHpAPHy6gDx8ekA8fLqAPDx6QDx8OgA8fHnAPHx6ADw8OcA7+/mAO/w5wDu8OcA7/DnAO7w5wDu8OcA8PDnAPDv5gDw7+YA8O/mAPDv5gDw7+YA8fDnAPHw5wDx8OcA8e/mAPHw5wDw8OcA7+/mAPDw5wDx8ecA8PDoAPHy6gDx8uoA8vPrAPLy7gDz8+4A8/PtAPP07gDx8+4A8vTtAPH07QDy8+4A8vPvAPLz7wDz9PAA8/TwAPP08ADy8+8A9PXxAPP08AD09fAA9PXwAPP08AD09fEA9PTyAPP08wDz9fMA8/XzAPP18gDz9fIA8/XyAPT18wD09fMA9fX0APP18gD09fMA9PXzAPT18wDz9fIA9PXzAPT18wD09fMA8/XyAPT18wDz9fIA9fX0APT18wDz9fIA9PXzAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wD09fMA8/TyAPT18wD09fMA9PXzAPT18wD09fMA8/TyAPT18wD09fMA8/TyAPT18wD09fMA9PXzAPT18wD09fMA8/TyAPT18wD09fMA8/TyAPP08gD09fMA8/TyAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wD09fMA8/XyAPP18gD09fMA9PXzAPT18wD09fMA9PXzAPT18wDz9fIA8/XyAPP18gDz9fIA8/XyAPT18wDz9fIA8/XyAPT18wDz9fIA8/XyAPT18wD09fMA9PXzAPX19AD19fQA9PXzAPX19AD19fQA9fX0APT18wD19fQA9fX0APX19AD19fQA9PXzAPX19AD19fQA9PXzAPX19AD19fQA9fX0APX19AD1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8OYA8fDnAPDu5gDv7uYA8O7mAPHw5wDw7+cA8O/mAPDv5gDw7+YA8fDnAPDw5wDx8OcA8e/mAPDw5wDw8OcA8PHnAPDx6QDx8uoA8vLrAPHx7QDy8u0A8/PuAPLz7gDx9O0A8fPuAPLy7wDx8u4A8vPvAPP08ADz9PAA8/TwAPLz7wD09fEA8/TxAPT18wD09fMA9PXzAPT18wDz9PMA9PXzAPP18gD09PMA9PXzAPP18gD19fQA9PXzAPP18gDz9fIA8/XyAPT18wDz9fIA8/XyAPP18gDz9fIA9PXzAPX19AD09fMA9PXzAPT18wD09fMA8/XyAPP18gD09fMA8/XyAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPP18gDz9fIA8/XyAPP18gD09fMA9PXzAPP08gDz9PIA9PXzAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wDz9PIA9PXzAPT18wDz9fIA8/XyAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wDz9fIA8/XyAPT18wD09fMA9PXzAPP18gDz9fIA8/XyAPP18gD09fMA9fX0APX19AD19fQA9PXzAPP18gD19fQA9fX0APT18wD09fMA8/XyAPT18wD19fQA9fX0APT18wD19fQA9fX0APT18wDz9fIA9PXzAPX19AD19fQA9fX0APX19AD19fQA9fX0APX19AD19fQA9fX0APX19AD19fQA9fX0APX09AD19PQA9fT0APX19AD19fQA9fX0APX19AD19fQA9fX0APX19AD19fQA9fX0APX19AD19fQA9fX0APT18wDz9fIA8/TyAPT18wDp6N8A5+fcAObm2wDl5NgA4+LVAOPg0wDg288A3tnLANzWxwDZ0sIA1cy7ANLGtgDNwbEAx7urAMG2pQC7sKIAua6fALisngC3rJ4At6ueALerngC3q54AtqueALarngC2qp0AtqqdALWqnQC1qZwAtqqdALerngC5rp8AvLGjAMC1pgDDt6kAxrqqAMm9rQDNwbAA0MSzANLHtwDUy7sA186+ANnRwwDd1cgA4dvNAOXh0wDo5dcA6ejaAOvq3wDt7OIA7+/kAPDw5gDx8egA8fLrAPHz7gDx8+4A8vPvAPLz7wDz9PAA8/TwAPP08ADy8+8A8vPvAPLz7wDy8+8A8/TwAPP08ADz9PAA8vPvAPLz7wDy8+8A8/TwAPLz7wDx8u4A8fLuAPHy7gDx8u4A8fLuAPLz7wDy8+8A8vPvAPLz7wDx8u4A8vPvAPLz7wDy8+4A8fPuAPHz7gDy8+4A8fLuAPLz7wDy8+8A8vPvAPLz7wDy8+8A8fLuAPLz7gDy9O4A8fTtAPL07gDy9O4A8vTuAPL07gDy9O4A8vTuAPL07gDy9O4A8vTuAPHz7gDx8+4A8fPuAPHz7gDy8+4A8fLtAPHy7QDx8usA8vPrAPHy6gDw8ekA8fLqAPHy6gDx8uoA8fHpAPHx6QDw8ekA8PDnAPDw5wDx8OcA8PDnAPDv5gDw8OcA8PDnAPDw5wDx8OcA8fDlAPDv5QDv7+UA8O/lAPHw5QDw7+UA8O/lAPHw5gDx8OcA8O/mAPHw5wDx8OcA8O/mAPDw5wDx8ecA8fDoAPLx6gDw8uoA8vPrAPHy6wDy8uwA8/PuAPPz7gDz9O0A8vPuAPHz7gDx8+4A8vPvAPP08ADy8+8A8/TwAPLz7wDz9PAA9PXxAPT18QD09fEA9PXzAPT18wD09fMA9PXzAPP18gD09fMA9PXzAPP18gD09fMA9PXzAPP18gD09fMA8/XyAPP18gD09fMA9PXzAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wDz9fIA9PXzAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wD09fMA8/XyAPT18wD09fMA9PXzAPT18wDz9fIA9PXzAPP08gDz9PIA9PXzAPP18gDz9fIA8/XyAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPP08gD09fMA8/TyAPP18gD09fMA9PXzAPP18gD09fMA9PXzAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wDz9fIA9PXzAPP18gD09fMA8/XyAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wD19fQA9PXzAPP18gD19fQA9PXzAPT18wD09fMA9PXzAPT18wD19fQA9fX0APX19AD19fQA9fX0APT18wD09fMA9PXzAPX19AD19fQA9fX0APX19AD19fQA9fX0APX19AD19fQA9fX0APX19AD19fQA9fT0APX19AD1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9PAA8/TwAPLz7wDz9PAA8/TwAPP08ADz9PAA8/TwAPLz7wDy8+8A8vPvAPP08ADz9PAA8vPvAPP08ADx8u4A8vPvAPP08ADy8+8A8vPvAPLz7wDz9PAA8vPvAPP08ADy8+8A8fLuAPHy7gDy8+8A8/TwAPLz7wDx8u4A8fLuAPHy7gDz9PAA8vPvAPHy7gDy8+8A8/TwAPLz7wDx8u4A8fLvAPHy7wDx8+4A8fTtAPL07gDy9O4A8fTtAPL07gDy9O4A8vTuAPL07gDy9O4A8fPuAPDy7gDw8u0A8PLtAPDx7QDx8usA8vPrAPHy6gDw8ekA8fLqAPHy6gDx8OgA8fDoAPHx6QDw8OgA7+/mAO/v5gDw8OcA7/DnAO7v5gDv7+YA8O/lAPDv5gDw7+YA8PDlAO/v5ADw8OUA8PDlAO/v5ADv8OUA8PDlAPDw5ADw8OQA8fDlAPHw5wDw8OcA7+/mAO/v5wDw8OgA8PLqAPDy6QDy8+sA8vPrAPHz6gDx8usA8PLuAPHz7gDx9O0A8fPuAPHy7wDx8u4A8fLuAPLz7wDy8+8A9PXxAPT18QD09fEA8/TxAPT18wD09fMA9PXyAPT18wD09fMA8/XyAPT18wD09fMA8/XyAPP18gDz9fIA9PXzAPT18wDz9fIA9PXzAPT18wD09fMA9fX0APX19AD19fQA9PXzAPP18gDz9fIA8/XyAPT18wD19fQA9fX0APT18wDz9fIA9PXzAPP18gD09fMA9fX0APT18wDz9fIA9PXzAPT18gDz9fIA8/XyAPP18gDz9fIA8/XyAPP18gD09fMA9PXzAPP18wDz9fIA8/XyAPP18gDz9fIA8/XyAPT18wD09fMA8/XyAPT18wD09fMA9PXzAPP18gDz9fIA8/XyAPT18wD09fMA8/XyAPT18wDz9fMA9PXzAPP18gD09fMA9fX0APL18wDx9fIA9PX0APX19ADz9fIA9PXzAPT18wD09fMA8/XyAPP18gD09fIA8/XyAPP18gDz9fMA8vX0APT18wD19fMA8vXyAPH18gD09fMA9fX0APL19ADy9fQA8vX0APP19AD19fQA9PX0APL19AD09fMA9fX0APP19ADy9fMA8vX0APL19AD19fQA9fX0APT19AD19fQA9fX0APX19AD19fQA9fX0APX19AD19fQA9PX0APX09AD1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7+QA7u7jAO7u4wDv7+QA7+/kAO/v5ADw8OUA7+/kAO/v5ADw8OUA8fDmAPHv5wDw8OcA7+/mAO/v5wDw8OgA8fDoAPHw6ADw8ekA8fHqAPLy7QDy8+4A8PLtAPHz7gDy9O0A8vPuAPHy7wDy8+8A8fLuAPLz7wDz9PAA8vPvAPT18QD09fAA9PXxAPP08wD09fMA9PXzAPT18wD09fMA8/XyAPT18wD09fMA8/XyAPT18wD09fMA8/XyAPT18wDz9fIA9PXzAPX19AD19fQA9fXzAPT19ADy9fQA8/XzAPT18gDz9fIA8/XyAPT18wD19fQA9PXzAPT18wD19fQA8/XyAPP18gDz9fIA9PXzAPT18gD09fMA8vXyAPL18wD09fQA9fX0APX19AD09fMA8/XyAPT18gDx9fMA8vXzAPT18gD09fMA9fX0APT18wDz9fIA9PXzAPX19AD09fMA8/XyAPP18gDz9fIA8/XyAPT18wDz9fIA9PXzAPP18gDz9fMA8vXzAPL18gD09fIA9PXzAPX19AD09fMA8/XyAPP18gD09fIA8vXyAPH18gD09fIA9PXzAPX19AD19fQA9fX0APT19ADy9fMA9PX0APX19ADz9fQA8vXzAPL19ADy9fMA8/X0APP19ADy9fMA8vX0APP19ADz9fQA8/X0APL19ADy9fQA8vX0APP19ADz9fQA8vXzAPL18wDy9fQA9PX0APX19ADy9fQA8/X0APX19AD19fQA9PX0APX09AD09fQA9fX0APX09AD19fQA9fT0APP09ADy9fQA9PT0APX29AD09vQA9Pb0APX29AD19fQA9fT0APT19ADy9fQA8vX0APL19AD09fQA9fX0APP19ADy9fQA8/X0APL18wDo6N4A5+baAObl2ADk49YA4+HUAOHe0gDg284A3tjKANvUxADYz78A1Mq6ANDEswDKvq0Aw7iqAL6zpAC5rqAAuK2eALesnQC4rJ4At6ueALaqnQC2qp0AtamcALWpnAC3q54Aua2gALqvoQC+s6QAwbanAMO4qgDJvKsAy76uAM3CsgDQxbUA0ce2ANTMuwDY0b8A3NXHAOHbzgDl4dIA5uXXAOnp2wDr6t8A7eziAO/v5ADw8OcA8fHpAPHy7ADw8u8A8fLvAPLz7wDy8+8A8/TwAPP08ADz9PAA8/TwAPLz7wDy8+8A8vPvAPLz7wDz9PAA8/TwAPLz7wDy8+8A8vPvAPP08ADz9PAA8vPvAPP08ADy8+8A8vPvAPP08ADz9PAA8/TwAPLz7wD09fEA8vPvAPP08ADz9PAA8/TwAPP08ADz9PAA8/TwAPLz7wDy8+8A8/TwAPLz7wDy8+8A8/TwAPP08ADx8u4A8vPvAPHy7gDx8u4A8fLuAPLz7wDy8+8A8fLuAPHy7wDx8+4A8vTtAPLz7gDy8u8A8vPuAPL07QDy8+4A8vTuAPL07gDx8+4A8PLuAPHz7QDw8+4A8fPuAPDz7gDx8uwA8vPqAPLz6wDx8uoA8PHpAPHy6gDx8uoA8fHpAPHw6ADw8OgA7+/mAO/w5wDu8OcA8PDnAPHv5wDw8OUA7+/kAO/v5ADv7+QA7+/kAO/v5ADu7uMA7u7jAO7u4wDv7+QA8PDlAPDw5QDx7+QA8O/lAPHw5wDw7+YA7+/mAPDw6ADx8ekA8PLqAPDx6QDy8+sA8vLrAPLx7QDx8u0A8PPuAPHz7QDy9O4A8vPvAPHy7gDy8+8A8/TwAPP08ADy8+8A8/TwAPLz7wDz9PAA8/TwAPT18wD09fMA9PXzAPT18wD09fMA8/XyAPT18wD19fQA9PXzAPP18gDz9fIA8/XyAPP18gDz9fIA9PXzAPX19AD19fQA9PXzAPX19AD19fMA9fX0APX19AD19fQA9fX0APX19AD09fMA9fX0APX19ADz9fIA8/XyAPT18wD09fMA8fXyAPL18gD09fIA9PXzAPX19ADz9fMA8fXyAPP18gDz9fIA9PXzAPX19ADx9fIA8vXzAPT18wD09fMA8/XyAPP18gDz9fIA9PXzAPT18wDz9fIA8/XyAPT18wD19fQA9PXzAPP18gD19fQA9fX0APX19AD09fMA8/XyAPT18wD09fIA8/XzAPL19ADy9fQA8vX0APT19AD19fQA9fX0APX19AD19fQA9fX0APX19AD09fMA8/XyAPP18wDy9fQA8vXzAPL19ADy9fQA8/X0APP19ADy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL19ADz9fQA8vX0APL19AD19fQA9PX0APL19ADz9fQA9fX0APX19AD19PQA8/T0APL09AD09PQA9fX0APP19ADy9PQA8/X0APP19ADy9PQA8vT0APL09ADy9PQA8vX0APL09ADz9fQA8/X0APP19ADy9fQA8vX0APL19ADz9fQA8/X0APL18wDn590A5+bbAObl2ADl5NcA4+HUAOLe0gDg280A3dfJANrUxADXz74A08q6ANDEtADLvq0Aw7iqAL6zpAC5rp8At6ydALitngC3rJ0AtqqdALerngC2qp0AtamcALerngC5raAAuq+iAL2yowC/tKUAw7ipAMa7rADLvq4AzcCwAM/EtADSx7cA1Mq6ANfPvgDb1MMA4NrLAOXg0gDo5NcA6ejcAOvq3wDs6+EA7e7lAO/v5wDx8ekA8PHsAPHz7ADy8u8A8vPvAPP08ADz9PAA8vPvAPP08ADz9PAA8vPvAPP08ADz9PAA8/TwAPP08ADz9PAA9PXxAPLz7wDz9PAA8vPvAPP08ADz9PAA8vPvAPLz7wDz9PAA8/TwAPLz7wDz9PAA8/TwAPLz7wDz9PAA8/TwAPLz7wDz9PAA8/TwAPP08ADy9O8A8/PwAPP08ADz9PAA8vPvAPP08ADz9PAA8/TwAPP08ADy8+8A8/TwAPP08ADy8+8A8fLuAPLz7wDy8+8A8fLuAPHy7wDy8+4A8vTtAPLz7gDy8u8A8vPuAPLz7gDy9O0A8vTuAPHz7gDy9O4A8vTuAPHz7gDw8u0A8fPuAPDy7QDx8usA8vPrAPHy6gDw8ekA8fLqAPHx6QDx8uoA8fHpAPHw6ADw8OgA7+/mAO/w5wDu8OcA8PDnAPDv5gDw7+UA7+/kAO7u4wDu7uMA7+/kAO/v5ADu7uMA7+/kAPDw5QDw8OUA7+/kAPDw5QDx8OQA8PDmAPDv5wDw7+YA8PDnAPHx6ADw8OgA8fHpAPDx6QDy8+sA8fLrAPLy7QDy8+4A8fTtAPL07gDx9O0A8vPuAPHy7gDy8+8A8/TwAPLz7wDy8+8A8/TwAPT18QD09fEA9PXxAPP08wDz9PIA9PXzAPT18wDz9PIA8/XyAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wDz9fIA9PXzAPX19AD19fQA9fX0APT18wD09fMA9PX0APT19AD09fQA9fX0APT18wD09fMA9PXzAPT18wD19fQA9fX0APT18wDz9fIA8fXzAPL18wD09fIA9PXzAPX19ADy9fMA8fXyAPP18wDz9fIA9PXzAPT18wDx9fIA8vXzAPX19AD09fMA8/XyAPP18wDz9fIA8/XzAPT18wDz9fMA8/XyAPT18wD09fQA9PXzAPT18wD09fMA9PX0APT19AD09fMA8/XyAPP18wD09fIA8/XzAPL19ADz9fQA8vX0APT19AD09fQA9PX0APT19AD09fMA9PXzAPX19AD09fMA9PXyAPP18wDy9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPL18wDz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADy9PQA8vX0APP19ADz9fQA8/X0APL19AD09fQA9PX0APL19ADz9fQA9fX0APT19AD19fQA8/X0APL09AD09fQA9fX0APP19ADy9PQA8/X0APT29ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDn598A5+bbAOXl2ADk49YA4+HUAOLd0QDg280A3tjJANrTwwDXzr4A1cm5ANDEswDKvq0AwrenALyyoAC6rZ8At62eALitngC3rJ0At6qeALeqnQC2q54AtaqdALmsnwC6r6EAvLGjAMC1pgDDuKoAxbqqAMi9rADMwK8Az8OzANHFtQDTyrkA1s69ANrTwgDf2ckA5N/QAOfk1gDp6NsA6+rfAOzr4gDv7eUA7/DmAPDw6ADw8uoA8fPuAPHy7wDy8+4A8vPvAPP08ADz9PAA8vPvAPP08ADy8+8A8vPvAPP08AD09fEA9PXxAPT18QD09fEA9PXxAPT18QDz9PAA8vPvAPLz7wDy8+8A8vPvAPLz7wDz9PAA8/TwAPLz7wDz9PAA8vPvAPP08ADy8+8A9PXxAPLz7wDy8+8A8vPvAPLz7wDy9O8A8/PwAPPz8ADy9O8A8/TwAPP08ADz9PAA8/TwAPLz7wDz9PAA8vPvAPLz7wDz9PAA8/TwAPP08ADz9PAA8vPvAPHy7gDx8u8A8vLvAPLy7wDy8+4A8fLvAPHy7wDy9O0A8vTuAPL07gDy9O4A8vTuAPHz7gDw8u0A8fLtAPDz7gDy8+wA8vPrAPHy6gDw8ekA8fLqAPHy6gDx8ekA8PHpAPHw5wDw8OcA7+/mAPDw5wDx8OcA8fDnAPDv5gDv7+UA7+/kAPDw5QDv7+QA7u7jAO7u4wDu7uMA7u7jAO/v5ADv7+QA7+/kAPDw5QDx8OcA7/DnAO/v5gDw8OcA8fHnAPHx6ADx8OgA8fHpAPDx6QDx8uoA8fLrAPDy7QDw8+4A8fPuAPL07gDy9O0A8vPuAPHy7gDy8+8A8/TwAPLz7wDz9PAA9PXxAPT18AD09fMA9PXzAPT18gD09fMA8/TyAPP08gDz9fIA9PXzAPX19AD09fMA8/XyAPP18gD09fMA9fX0APX19ADz9fIA9PXzAPX19AD19fQA9fX0APP18wDy9fMA8vX0APL18wD09fMA9fX0APT18wDz9fIA9PXzAPX19AD19fQA9PXzAPP18gDz9fMA8vX0APP18wD09fIA8/XzAPL19ADy9fMA8fXyAPH18wDx9fMA8fXyAPH18gDy9fMA8vXyAPT18gDz9fIA8fXyAPH18gDx9fIA8/XzAPX19ADz9fQA8vX0APL18wDx9fIA8/XyAPP18gDx9fIA8vXzAPL19ADy9fQA8vX0APL19ADy9fQA8vX0APP18wDz9fQA8/X0APL19ADy9fQA8vX0APL19ADy9fMA8fXyAPX19AD19fQA9fX0APP18wDy9fMA8/X0APL18wDy9fQA8/X0APP19ADz9fQA8vXzAPL18wDz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APT19AD19fQA8/X0APP19ADy9fQA8vX0APP19ADy9fQA8vX0APL19ADy9fQA8vX0APL09ADz9fQA8/b0APT29AD09vQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA9Pb0APP19ADy9PQA8vT0APP19ADy9PQA8vT0APP19ADz9fQA8vXzAPP19ADo594A5ubbAOXl2ADk49YA4+HUAOLd0ADg2s0A3dbIANnSwwDWzr4A08i4AM/DsgDKva0AwbamALyxoAC5rZ8At62eALisngC3rJ4At6ueALaqnQC2qp4At6yfALmuoQC7sKIAvrOkAMG2pwDEuasAyL2sAMm/rgDPw7IA0cS0ANLHtwDVzLsA2dLBAN7YyADj3s4A5uPTAOjn2ADq6t4A6+ziAO7t5ADw7+cA8PHoAPHy6gDx8+sA8fPuAPLz7wDy8+8A8/TwAPT18QDz9PAA8vPvAPLz7wDz9PAA8/TwAPP08AD09fEA8/TwAPP08ADz9PAA8/TwAPP08ADz9PAA8/TwAPP08ADz9PAA8/TwAPP08ADy8+8A8vPvAPP08ADz9PAA8vPvAPP08ADz9PAA8/TwAPLz7wDz9PAA8/TwAPP08ADy8+8A8/TwAPP08ADy8+8A8/TwAPP08ADz9PAA8/TwAPLz7wDz9PAA8/TwAPP08ADz9PAA8/TwAPP08ADy8+8A8/TwAPLz7wDy8+8A8fLuAPHy7gDx8u8A8vPvAPLz7gDx9O0A8fTtAPL07gDy9O4A8vTuAPHz7QDx8+4A8PPuAPDy7gDy8+wA8vTrAPHy6gDw8ekA8fLqAPHy6gDx8ekA8fDoAPDw6ADw8OcA7+/mAPDv5gDw8OcA8PDnAPDv5gDw7+UA7+/kAO/v5ADv7+QA7u7jAO7u4wDv7+QA7+/kAPDv5QDv7+UA8PDkAPHv5QDw8OcA7/DnAO/v5gDv7+YA8PDnAPHx6ADx8OgA8fHpAPHy6gDw8ekA8fLqAPDy7QDw8+4A8fPuAPL07gDy9O0A8fPuAPLy7wDy8+8A8/TwAPLz7wDz9PAA8/TwAPP08AD09fMA9PXzAPT18wD09fMA8/TyAPP08gD09fMA9PXzAPT18wD09fMA9PXzAPP18gD09fMA9PXzAPT18wDz9fMA8/XzAPT19AD09fMA9PXzAPP18wDy9fMA8/X0APL18wDz9fMA9PX0APT18wD09fMA9PXzAPT19AD19fQA9PXzAPP18gDz9fMA8vXzAPP18wDz9fIA8/XzAPP19ADy9fMA8vXzAPH18gDx9fIA8vXzAPL18wDx9fIA8vTzAPP08wDz9fMA8vXzAPL18wDy9fMA8vXzAPT18wDz9fQA8vXzAPL18wDy9fMA8/XzAPP18wDy9fMA8vXzAPP19ADy9fMA8vXzAPL18wDy9fMA8vXzAPP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9fMA8vXzAPT19AD09fQA9PX0APP18wDy9fMA8/XzAPP19ADz9fQA8vX0APP19ADy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APT19AD09fQA8/X0APL19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19AD09vQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA9Pb0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADz9fQA8/X0APL18wDp6N0A5+baAOXl2ADk49YA4+DTAOHc0ADf2c0A3dfHANvTwgDXz74A08m4AM/DsQDIvK0AwbamALyxoAC5rp8AuKydALirnwC2q54AtqqdALaqnQC4q58Auq6gALuwoQC+sqQAwLWnAMO4qwDFu60Ayr6uAM7BsQDOw7MA0ca2ANbLuwDZ0MAA3tfHAOLdzgDm4tQA6ObYAOrp3ADs6+EA7e3kAO7v5gDw8OgA8PHqAPDz6wDx8+4A8vTuAPP08ADz9PAA8vPvAPP08ADz9PAA8/TwAPLz7wDz9PAA9PXxAPT18QD09fEA8/TwAPP08ADz9PAA8/TwAPP08ADz9PAA8/TwAPP08AD09fEA9PXxAPP08ADy8+8A8vPvAPLz7wDz9PAA8vPvAPLz7wDy8+8A8vPvAPLz7wDz9PAA9PXxAPP08ADz9PAA8/TwAPP08ADy8+8A8/TwAPP08ADz9PAA8vPvAPP08ADy8+8A8/TwAPP08ADz9PAA8/TwAPP08ADz9PAA8vPvAPP08ADy8+8A8vPvAPLz7wDx8u4A8/TvAPL07QDy8+4A8vTuAPH07QDy9O4A8fPuAPL07gDx8+4A8PLtAPHz7gDw8usA8PPqAPDy6gDw8ekA8PHpAPHx6QDx8uoA8fDoAPDw6QDw8OcA7+/mAO/w5wDu7+YA7+/mAPHv5wDw8OUA7+/kAO/v5ADv7+QA7+/kAO7u4wDw8OUA8PDlAO/u5gDv7+UA8PDkAPDw5QDu8OcA7+/mAPDw5wDw8OcA8PDnAPHx6ADx8OgA8fHpAPDx6QDx8uoA8fLqAPDy7QDx8+4A8fPuAPL07gDy9O0A8fPuAPLz7wDz9PAA8vPvAPP08ADy8+8A8vPvAPP08AD09fMA9PXzAPT18wDz9PIA8/XyAPT18wDz9PIA9PXzAPT18wDz9fIA9PXzAPT18wD09fMA9PXyAPP18gDy9fQA8vX0APL19ADy9fMA8fXyAPL18wDz9fQA8vXzAPP19ADy9fQA8vXzAPT19AD19fQA8/X0APL19AD19fQA9PXzAPH18gDx9fIA8fXyAPH18gDx9fIA8vXzAPP19ADz9fQA8vXzAPH18gDx9fIA8/X0APP19ADx9PIA8vXzAPP19ADy9PMA8/X0APL18wDz9fQA8/X0APL19ADy9fMA8vXzAPL18wDz9fQA8vX0APL19ADz9fQA8/X0APP19ADy9fMA8vXzAPL18wDx9fIA8vXzAPP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDy9fQA8vXzAPL19ADy9fMA8/XzAPX19ADz9fQA8vX0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADy9PQA8/X0APL19ADy9fQA8vX0APP19ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA9Pb0APT29ADy9PQA8vT0APT29AD09vQA8/X0APT29AD09vQA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APH18gDo590A5+baAOXl2ADk49YA4+DTAOHc0ADf2cwA3dfHANrTwgDXz74A08m4AM7CsQDJvKwAwbalALywoAC5rp8At6ydALirngC2q50AtqudALerngC5rZ8Auq+hALyxowC/tKYAwrepAMW6qwDIva4AzMCwAM7DsgDRxrYA1Mq6ANjQvwDc1sYA4dzOAOXh0wDo5tcA6ujbAOvr4ADt7eMA7u/lAO/w5gDw8ekA8fLtAPHz7gDy8+4A8vTuAPP08ADz9PAA8vPvAPP08ADz9PAA8/TwAPP08ADz9PAA8/TwAPP08ADz9PAA9PXxAPP08AD09fEA9PXxAPT18QD09fEA8/TwAPP08ADz9PAA9PXxAPP08ADz9PAA8/TwAPP08ADy8+8A8/TwAPLz7wDz9PAA8/TwAPLz7wDz9PAA9PXxAPP08ADz9PAA8/TwAPP08ADy8+8A8/TwAPP08ADz9PAA8vPvAPP08ADy8+8A8/TwAPP08ADz9PAA8/TwAPP08ADz9PAA8/TwAPLz7wDy8+8A8vPvAPLz7wDx8u4A8vPvAPHz7gDz9O8A8vTuAPL07gDx9O0A8vTuAPHz7gDx8+4A8PLuAPDy7QDx8usA8fLqAPHy6gDx8uoA8fLqAPDx6QDw8ekA8fDoAPHx6ADw8OgA8O/mAPDw5wDu7+YA7u/mAO/v5gDw7+UA7+/kAO/v5ADw8OUA7+/kAO7u4wDw7+UA8O/lAO/u5gDw7+UA8PDlAO/w5gDu8OcA7+/mAPDw5wDw8OcA8PDnAPHx6ADx8OgA8fHpAPDx6QDx8uoA8fLqAPDy7QDx8+4A8fPtAPL07gDy9O0A8fPuAPLz7wDy8+8A8/TwAPLz7wDy8+8A8/TwAPP08QD09fMA9PXzAPP18gD09fMA9PXzAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPT18wD09fMA8/XzAPP18wDz9fMA8/XzAPL19ADy9fMA8vXzAPL18wDz9fQA8/X0APP19ADz9fQA8vX0APT19AD09fQA8vXzAPL18wD09fQA9PXzAPL18wDy9fMA8vXzAPL18wDy9fMA8vXzAPP19ADy9fMA8vXzAPH18gDx9fIA8vXzAPP19ADy9PMA8vXzAPP18wDy9PMA8vXzAPL18wDz9fQA8vXzAPL18wDy9fMA8vXzAPP19ADy9fMA8/X0APP19ADz9fQA8/X0APL18wDz9fQA8/X0APL18wDy9fMA8/X0APL18wDz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDy9fQA8/X0APT18wDz9fQA8vX0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APL09ADz9fQA8/X0APP19ADy9PQA8vT0APP19ADy9PQA8/X0APT29ADz9fQA8/X0APT29AD09vQA9Pb0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APL18wDn5twA5ubaAOTj1gDj4tUA4uDTAOHdzwDf2csA3dbIANrTwwDXzr0A08i4AM7CsgDIvKsAwLWkALuwnwC5rZ4AtqydALisnQC4rJ0AtqucALitngC6r6AAvLGjAL+0pQDCt6gAxbqsAMe8qwDKv68AzcKyAM/EtADTybgA1s69ANvUwwDg28sA5ODSAOfk1gDq6dsA7OvfAO3t4gDu7+YA7+/nAO/x6ADw8usA8fPtAPL07gDy8+8A8/TwAPL07wDz9PAA8/TwAPLz7wDy8+8A8/TwAPT18QDz9PAA8vPvAPP08AD09fEA8/TwAPP08ADz9PAA8/TwAPT18QDz9PAA9PXxAPP08ADz9PAA9PXxAPT18QD09fEA9PXxAPP08ADz9PAA9PXxAPP08ADy8+8A8/TwAPLz7wDz9PAA9PXxAPP08ADz9PAA8vPvAPLz7wDz9PAA8vPvAPLz7wDy8+8A8vPvAPP08ADy8+8A8/TwAPP08ADz9PAA8/TwAPP08ADz9PAA8/TwAPLz7wDy8+8A8vPvAPLz7wDy8+4A8fLuAPHy7wDy9O4A8vTuAPL07gDx9O0A8vTuAPHz7gDx8+4A8PPuAPDy7QDx8usA8fLqAPHy6gDx8uoA8fLqAPDx6QDx8ekA8PDoAPDw5wDw8OcA8e/mAPDv5gDv8OcA7/DnAO7v5gDv7+QA8PDkAPDw5QDw8OUA7+/kAO7v4wDw7uYA8O7mAO/u5QDw7+YA8fDnAPDw5wDu8OYA8PDnAPHv5gDw7+YA8PDnAPHx6ADw8OgA8fHpAPHy6gDw8ekA8PHqAPDy7QDw8u0A8fPuAPL07QDx9O0A8vPuAPLz7wDy8+8A8vPvAPP08ADz9PAA9PXzAPT18wD09fIA9PXzAPP18gD09fMA9fX0APX19AD19fQA9PXzAPP18gDz9fIA9PXzAPX19AD19fQA8vX0APL19AD09fIA9PXyAPL19ADz9fQA8/X0APP19ADy9fMA8/X0APP19ADz9fQA8/XzAPL19ADy9fQA8vXzAPL18wDy9fMA8vX0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9fMA8fXyAPH18gDx9fIA8vXzAPL18wDz9fQA8/T0APL09ADz9fQA8/X0APP19ADz9fQA8vXzAPH18gDy9fMA8/X0APL18wDz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPP19ADz9fQA8vXzAPP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vX0APL19ADy9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADy9PQA8/X0APP19AD09vQA9Pb0APP19AD09vQA9Pb0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APL09ADz9fQA8/X0APH18gDo5twA5ubaAOTj1gDj4tUA4t/SAODczgDe2csA3NbHANnSwgDWzb0A08e3AM3BsADHuqoAwbWkALuwnwC5rZ4At6yeALirngC4rJ4AuK2eALqvoAC8saMAvrOlAMG2pwDEuKoAxrusAMm+rgDMwbEAzsSzANLHtwDVzbwA2tPDAODZygDj4NAA5uTVAOnn2gDq6t8A7OziAO7u5QDv8OcA8PHpAPDy6wDx8u4A8vPuAPLz7gDz9PAA8vPvAPP08ADy8+8A8vPvAPP08ADz9PAA8/TwAPP08ADz9PAA8/TwAPP08AD09fEA8/TwAPT18QDy8+8A8vPvAPT18QDz9PAA9PXxAPP08ADz9PAA9PXxAPT18QD09fEA8/TwAPT18QD09fEA8/TwAPT18QDy8+8A8vPvAPLz7wDz9PAA8/TwAPP08ADz9PAA8vPvAPP08ADy8+8A8/TwAPP08ADz9PAA8/TwAPP08ADy8+8A8/TwAPP08ADz9PAA8/TwAPP08ADy8+8A8/TwAPLz7wDy8+8A8vPvAPLz7wDx8u4A8vPvAPLy7wDx9O0A8vTuAPH07QDy9O4A8vTuAPHz7gDx8+4A8PLtAPDz7gDx8+wA8fPrAPLz6wDx8uoA8PHpAPHy6gDx8ekA8PDoAPDw5wDx8OcA8O/mAO/w5wDu8OcA7/DnAO7v5gDv7+QA7+/kAO/v5ADw8OUA7+7kAO7u5ADw7+YA8O/mAO/u5QDw7+YA8PDnAO/w5wDv8OcA7/DnAPDw5wDw7+YA8PDnAPDw6ADx8OgA8fHpAPHx6QDx8uoA8fLqAPHx7QDx8u0A8fPuAPLz7gDx8+4A8vPuAPLz7wDz9PAA8vPvAPP08ADz9PAA8/TyAPT18wD09fMA8/XyAPP18gD09fMA9fX0APX19AD19fQA9PXzAPT18wD09fMA9PXzAPT18wD09fMA8/XzAPP19AD09fIA8/XzAPL18wDy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDy9fMA8/X0APP19ADy9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9fMA8vXzAPL18wDy9fMA8vXzAPP19ADy9fMA8vXzAPP19ADz9fQA8/X0APP19ADz9fQA8vXzAPL18wDy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADz9fQA8/X0APT29ADz9fQA8/X0APT29AD09vQA9Pb0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APL09ADz9fQA8/X0APL18wDn5tsA5eXaAOTj1gDi4dQA4d7RAODazgDe2MoA29XGANnSwQDVzbwA0se3AM3AsADHuqkAwbSjAL2wngC4rp4At6ydALerngC4rJ8Auq+gALuxogC+s6QAwLWmAMK3qADGuasAyb2sAMvAsADNw7IA0MW1ANTMuwDa0sIA39jIAOTd0ADl49UA6OfZAOrp3gDs6+IA7e7kAO7v5gDv8OgA8PLrAPHz7QDx8+4A8fLuAPLz7wDy8+8A8vPvAPLz7wDz9PAA8/TwAPP08AD09fEA8/TwAPP08AD09fEA9PXxAPT18QDz9PAA9PXxAPT18QDz9PAA8/TwAPP08AD09fEA9PXxAPP08ADz9PAA9PXxAPT18QD09fAA9PXwAPT18AD09fAA8/TwAPP08ADz9PAA8/TwAPP08ADz9PAA8/TwAPP08ADz9PAA8/TwAPLz7wDy8+8A8/TwAPT18QD09fEA8/TwAPLz7wDz9PAA8vPvAPLz7wDy8+8A8/TwAPLz7wDz9PAA8/TwAPLz7wDy8+8A8/TwAPLz7wDx8u4A8vPvAPLy7wDx9O0A8fTtAPL07QDy9O0A8vTuAPHz7gDx8+4A8fPuAPDy7gDw8+wA8PPrAPHy6gDx8uoA8PHpAPDx6QDw8ekA8fDoAPHx5wDw8OcA7+/mAO/w5wDv8OcA7/DnAO7v5gDv7+UA7+/kAPDv5ADw8OQA7+7lAO/u5QDw7+YA8O/mAPDv5gDv7+YA7vDnAO/v5gDv8OcA7/DnAO/w5wDv7+YA7+/mAPDw6ADx8ekA8fDoAPHx6QDw8ekA8vPrAPLx7QDy8u0A8fPuAPLz7gDx8u8A8vPvAPLz7wDz9PAA8vPvAPP08ADz9PAA8/TyAPT18wDz9fIA8/XyAPT18wD09fMA9fX0APX19AD09fMA9fX0APX19AD19fQA9fX0APT18wDz9fIA9fXzAPX19AD09fIA9PXzAPL18wDy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDy9fMA9fXzAPX19ADy9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDz9fQA8/X0APP19ADz9fQA8/X0APP19ADx9fIA8fXyAPP19ADz9fQA8/X0APP19ADy9fMA8/X0APP19ADz9fQA8vXzAPP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPP19ADy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8vT0APL09ADy9PQA8vT0APP19AD09vQA8/X0APL09ADy9PQA8vT0APP19ADz9fQA8/X0APT29ADy9PQA8vT0APT29AD09vQA9Pb0APP19ADy9PQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vXzAPP19ADn5twA5uXaAOTj1gDi4dQA4d3RAODazgDe2MoA29XGANjRwADVzLsA0ca2AMzAsADFuqsAv7SkALuvoAC4rZ8At6ueALmtoAC6rqEAvLCjAL6ypQDAtacAwreqAMW5rADIvK4Ay8CxAM7CswDPxbYA08q6ANjRwQDe18gA4t3OAOXi1ADn5tgA6undAOzs4QDt7eQA7+/nAPDw6ADw8eoA8PHuAPHz7gDy8+8A8vPvAPP08ADz9PAA8/TwAPLz7wDz9PAA9PXxAPP08ADz9PAA8/TwAPP08AD09fEA9PXxAPT18QD09fEA9PXxAPT18QDz9PAA8/TwAPP08AD09fEA9PXxAPP08ADz9PAA9PXxAPT18AD09fEA9PXyAPT18gDz9PIA9PXyAPP08QD09fEA9PXxAPP18ADz9fAA9PXxAPT18QD09fEA8/TwAPP08ADz9PAA8/TwAPT18QD09fEA8/TwAPP08ADy8+8A8vPvAPP08ADz9PAA8vPvAPLz7wDz9PAA8/TwAPP08ADz9PAA8/TwAPLz7wDx8u4A8vPvAPLy7wDy8+4A8vPuAPLz7gDy8+4A8fTtAPL07gDy9O4A8fPuAPDy7gDx8+wA8fPrAPDy6gDx8+sA8fLqAPHy6gDx8ekA8fHpAPHw6ADw8OgA7+/mAO/w5wDv8OcA7/DnAO7v5gDu7+UA7u/lAO7v5QDu7+UA7+/mAO7v5gDw7uUA7+7lAO/u5QDv7+YA7+/mAO/w5wDu8OcA7/DnAPDv5gDw8OcA8PDnAPDw6ADx8OgA8fHpAPDx6QDx8uoA8fLrAPHy7QDx8+4A8fPtAPLz7gDx8u8A8vPvAPP08ADy8+8A8/TwAPLz7wDz9PAA9PXyAPP08wD09fMA9PXzAPX19AD09fMA9PXzAPT18wD19fQA9PX0APP19AD09fQA9fX0APP18wDy9fIA8/XzAPP19ADz9fMA8/XzAPL19ADz9fQA8vXzAPP19ADz9fQA8/X0APP19ADz9fQA8vXzAPP19ADy9fMA8/XzAPP19ADy9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9fMA8vXzAPP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADy9PQA8/X0APT29ADz9fQA8/X0APT29AD09vQA9Pb0APP19ADz9fQA8/X0APT29ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADn590A5uXZAOPj1QDi4dQA4d3RAN/azQDe2MoA2tTFANjRwADVzLwA0ca2AMq/rwDEuasAv7SlALuwowC4rKAAuKyfALquoQC8sKMAvbGlAL+zpwDCt6oAxLitAMi8rwDKv7EAzMK0AM/FtgDSybwA2NHBAN3XxwDi3M4A5eLUAOfm2ADp6d0A6+vgAO3t4wDv8OYA8PDoAPDy6wDx8+0A8fLuAPHy7gDy8+8A8vPvAPLz7wD09fEA9PXxAPLz7wDz9PAA9PXxAPP08ADz9PAA9PXxAPT18QDz9PAA9PXxAPT18QD09fEA9PXxAPT18QDz9PAA8/TwAPT18QDz9PAA8/TwAPT18QD09fEA8/TwAPT18AD09fIA9PXzAPT18wD09fMA8/TzAPT18wDz9PAA9PXxAPT18QD09fEA8/XwAPT18QDz9PAA9PXxAPP08ADz9PAA9PXxAPP08ADz9PAA9PXxAPT18QDz9PAA8/TwAPT18QDz9PAA8/TwAPP08ADy8+8A8vPvAPP08ADz9PAA8/TwAPLz7wDx8u4A8fLuAPHy7gDx8u4A8fLuAPLy7wDy8+4A8vTtAPL07QDy9O4A8fPuAPHz7gDw8+wA8fPqAPHy6gDw8uoA8vPrAPHy6gDx8uoA8fHpAPHw6ADw8OgA8PDnAO/v5gDv8OcA7/DnAO7v5gDu7+YA7e7mAO3u5gDt7uYA7u/mAO3u5gDw7uYA7+7mAO/u5QDw7+YA8e/mAPDw5wDu8OYA7/DnAPDv5gDw8OcA8PDnAPDw6ADx8OgA8fHpAPDx6QDy8+sA8fLrAPDz7gDx8+0A8fPtAPLz7gDx8u8A8vPvAPP08ADz9PAA8vPvAPP08ADz9PAA8/XyAPP18gD09fMA9fX0APT18wD09fMA9PXzAPT18wD19fQA8/X0APL19AD09fQA9fX0APL18wDx9fIA8vXzAPL18wDy9fQA8vX0APP18wDz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDz9fQA8vX0APL18wDz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDz9fQA8/X0APL18wDz9fQA8/X0APP19ADz9fQA8/X0APL18wDy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDz9fQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADy9PQA8vT0APP19ADy9PQA8vT0APP19ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19AD09vQA9Pb0APP19AD09vQA8/X0APT29AD09vQA9Pb0APP19AD09vQA8/X0APL09ADz9fQA8/X0APP19ADm5tsA5ePZAOPi1QDi4NMA4NzQAN7ZzQDd1sgA2dPDANfPvgDTyroA0MS0AMq+rQDEuKgAv7KjALutnwC4rZ8Aua6gALuvogC9saQAvrOlAMG1pwDEt6oAxrqsAMm9rQDMwLEAzsK0ANLIuADXz78A3dbFAOHbzADk4dIA5uXYAOno3ADr6+EA7OzkAO3v5QDv8OcA8PHqAPDz7ADx8u4A8fLuAPLz7wDy8+8A8/TyAPP08QDz9PAA8/TwAPP08ADz9PAA9PXxAPP08ADz9PAA8/TwAPT18QD09fEA9PXxAPT18QD09fEA9PXxAPP08AD09fIA9PXyAPP08AD09fEA9PXxAPT18QD09fEA9PXxAPT18AD09fEA9PXxAPT18QD09fEA9PXxAPT18QDz9fAA9PXxAPT18QD09fEA8/XwAPT18QD09fEA9PXxAPP08ADz9PAA9PXxAPT18QD09fEA8/TwAPT18QD09fEA8/TwAPT18QD09fEA9PXxAPT18QDz9PAA8vPvAPP08ADz9PAA8/TwAPLz7wDy8+8A8vPvAPLz7wDy8+8A8vPvAPHz7gDy8+4A8vPuAPLz7gDx9O0A8vTuAPHz7gDx8+0A8PLtAPHz7ADw8+sA8fLqAPHy6gDx8uoA8fHpAPDx6QDx8OgA8PDnAO/v5gDv8OcA7+/mAPDw5wDu7+YA7e7mAO/v5QDv7+UA7+/lAO/v5QDw7+UA8O/lAPDv5QDw7+UA8PDlAPDv5QDw8OcA7/DnAO/w5wDw7+YA7+/mAPDw6ADx8OgA8fHpAPDx6QDx8uoA8fPrAPDz7gDx8+4A8fPtAPHz7gDy8u8A8vPvAPP08ADy8+8A8/TwAPT18QD09fAA9PXzAPT08wDz9fIA9PXzAPT18wD09fMA9fX0APX19AD19fMA9PX0APL19ADz9fQA8/X0APT18wD09fMA8/XzAPL19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPP19ADz9fQA8vXzAPP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPP19ADy9fMA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADz9fQA8vT0APP19ADz9fQA8/X0APL09ADy9PQA8/X0APT29AD09vQA9Pb0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA8/X0APL09ADz9fQA8/X0APP19ADk5NcA5OLWAOPh1ADi3tEA4NvOAN7YywDb1cUA2dHAANfNvQDTyLcAz8OxAMm8qwDEt6YAvrGhALqsngC4rp4Auq+gALuwogC9sqMAwLWmAMO3qADHuqoAyb2tAMy/rwDOwrEA0ca1ANbNvADb1MMA4drJAOPg0ADm5NUA6ejbAOvq3wDt7uQA7u/mAO/w6ADw8eoA8PLtAPHz7gDy8+8A8/TwAPP07wDz9PAA9PXyAPLz8gDz9PAA8/TwAPT18QD09fAA8/TwAPT18ADz9PAA8/TwAPT18QD09fEA9PXxAPT18QD09fEA9PXxAPT18AD09fMA9PXzAPT18AD09fEA9PXxAPT18QD09fEA9PXxAPT18QD09fAA9PXwAPT18AD09fAA9PXwAPT18AD09fEA8/XwAPP18ADz9fAA9PXxAPT18QD09fEA8/TwAPT18QD09fEA8/TwAPT18QD09fEA8/TwAPP08ADz9PAA8/TwAPT18QDz9PAA9PXxAPP08ADz9PAA8/TwAPLz7wDz9PAA8vPvAPP08ADz9PAA8/TwAPP08ADz9PAA8vTvAPH07QDx8+4A8fLvAPLz7gDy9O0A8fPuAPL07QDx8+4A8PLuAPHz6wDw8+oA8fLqAPHy6gDx8ekA8fLqAPHx6QDx8OgA8PDnAO/v5gDv8OcA8PDnAPHw5wDu7+YA7e7mAO/v5QDw8OQA8PDkAPDw5ADv8OQA8PDkAPDw5QDv8OQA7+/kAPDw5QDx8OcA8O/mAO/w5wDw8OcA7+/mAPDw6ADx8OgA8PHpAPHy6gDx8ukA8fPrAPDy7gDw8u0A8PPuAPHy7gDx8u4A8vPvAPP08ADy8+8A8/TwAPP08ADz9O8A9PTyAPT18wDz9fIA8/XyAPT18wD09fMA9PXzAPT18wD19fQA9PX0APL18wDy9fQA8vX0APT19AD19fQA8/X0APL18wDz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA9Pb0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09AD09vQA9Pb0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19AD09vQA8/X0APL09AD09vQA9Pb0APL09ADy9PQA8vT0APP19AD09vQA8/X0APP19ADz9fQA8/X0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA8/X0APL09ADz9fQA8/X0APP19ADj49YA4+LUAOLf0gDh3M8A39nNANzXyQDb08UA2NC/ANXMuwDRxrYAzcGwAMi7qwDDtaUAu7CiALqunwC5rp8Au7CiAL+xpADBs6QAw7emAMa5qADIu6oAyr2tAM3AsADRxLMA1cu5ANzTwQDf2cgA49/OAObj1QDo59kA6+rdAOzs4gDt7uUA7/DnAPDx6QDw8usA8PLuAPHy7gDy8+8A8/TvAPP08gD09fIA9PXyAPP08gD09fIA9PXyAPP08AD09fEA9PXyAPT18gDz9PAA8/TwAPT18QD09fEA9PXxAPT18QD09fEA8/XwAPP18AD09fEA9PXxAPT18AD09fEA9PXxAPT18QD09fEA9PXxAPT18QD09fEA9PXxAPT18QD09fEA9PXxAPT18QD09fEA9PXxAPT18QD09fEA9PXxAPT18QD09fEA9PXxAPP08AD09fEA9PXxAPT18QDz9PAA9PXxAPP08ADz9PAA9PXxAPP08AD09fEA8/TwAPLz7wDz9PAA8/TwAPLz7wDz9PAA8/TwAPP08ADz9PAA8/TwAPP08ADz9PAA8vTvAPL07wDy8+8A8vPuAPHz7QDy9O0A8fPuAPL07gDx8+0A8PPuAPHz6wDw8+sA8fLqAPHy6gDx8uoA8fLqAPHx6QDx8OgA8PDnAO/v5gDv8OcA7/DnAO/w5wDw8OcA8O/mAO/v5QDw8OQA7+/kAPDw5QDv7+QA7+/kAO/v5ADw8OUA8PDkAPDv5QDu7+YA7/DnAO/w5wDw8OcA7+/mAPDw5wDw8OgA8fHpAPHx6QDx8uoA8vPrAPHy7gDx8u0A8fPtAPHz7gDy8+8A8/TwAPP08ADz9PAA8/TwAPLz7wDz9PAA8/TyAPP18gD09fMA8/XyAPP18gDz9fIA9PXzAPT18wD19fQA9PX0APL19ADz9fMA9PXzAPT18wD09fMA9PX0APT19ADy9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APT29AD09vQA8/X0APP19ADz9fQA8/X0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA8/X0APP19ADy9PQA8/X0APP19ADj4tUA4uDTAOHe0QDg288A39nLANzWyADa0sMA18++ANPKugDQxLQAy7+uAMe6qgDBtKMAvLGiALmvnwC6r6AAvLGjAMCypADCtKYAxLinAMe7qgDJvawAzL+vAM/DswDUybgA2tG/AN/ZxwDj3s0A5uPVAOjm2QDq6d0A7eziAO/v5ADw8OcA8fHoAPDy6gDx9OwA8fPuAPLz7wDy8+8A8/TwAPT18gD09fMA8/TzAPT18wDz9PMA9PXyAPT18AD09fEA9PXzAPP08gD09fAA9PXwAPP08QD09fEA9PXxAPT18QDz9fAA9PXxAPX18gDz9fAA8/XwAPT18QD09fEA9PXxAPT18ADz9fAA8/XwAPT18AD09fAA9PXwAPT18AD09fEA8/XwAPP18AD09fEA8/XwAPP18ADz9fAA9PXwAPT18AD09fEA9PXwAPT18ADz9PAA8vPvAPP08AD09fEA8/TwAPT18AD09fAA8/TwAPT18QD09fEA8/TwAPLz7wDz9PAA8/TwAPLz7wDy8+8A8vPvAPLz7wDz9PAA8/TwAPP08ADy8+8A8/TwAPP08ADz9O8A8vTuAPH07QDy8+4A8vTuAPHz7gDw8+4A8PLtAPHy6wDx8+sA8PLqAPDx6QDx8ekA8fLqAPHx6QDx8OgA8PDnAO/v5gDv8OcA7vDnAO7v5gDw8OcA8O/mAO/v5QDv8OQA8PDlAO/v5ADw8OUA7/DlAO/v5ADv7+QA8PDlAO/v5QDu7+YA7vDnAO/w5wDw8OcA7+/mAO/v5wDw8OgA8fHpAPHy6gDw8ekA8fLqAPHz7gDy8+4A8fTtAPLz7gDy8u8A8vPvAPHy7gDy8+8A8/TwAPLz7wDz9PAA9PXyAPP08wD09fMA9PXzAPT18wDz9fIA9PXzAPX19AD19fQA9PX0APL19ADz9fMA9PXzAPX18wD19fMA9fX0APX19ADy9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPP19ADz9fQA8vXzAPP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8vT0APL09ADy9PQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8vT0APL09ADy9PQA8vT0APL09ADz9fQA9Pb0APP19ADy9PQA8/X0APT29ADz9fQA9Pb0APP19ADy9PQA8/X0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APP18wDz9fMA9Pb0APT29ADz9fQA9Pb0APP19ADy9PQA8vT0APL09ADj4dQA4t3RAOHczwDg2s4A3djKANzVxgDZ0sEA1s69ANLIuADPw7MAy7+uAMa5qQDAtKMAva+iALuuoAC9sKIAwLKlAMG1pgDEt6cAx7mpAMm8qwDMvq4Az8KxANPItgDZ0L0A3tfEAOLdzADm49MA6OfYAOrp3ADt7eEA7u7kAPDw5wDw8egA8PLqAPHy7QDy8+8A8vPvAPLz7wDz9PEA9PXzAPT18gDz9PMA9PXzAPT18wD09fMA9PXyAPT18gDz9fIA8/XyAPT18gD09fMA9PXxAPT18AD09fEA9PXxAPP18AD09fEA9PXxAPP18AD19fQA9PXzAPP18AD09fEA9PXwAPP18QD09fMA9PXzAPP18gDz9fIA8/XzAPP18QDz9fAA9PXxAPX18gDz9fAA9PXxAPX19AD09fMA8/XyAPT18gD09fAA9PXxAPT18wDz9PEA8/TwAPP08AD09fAA9PXyAPT18gD09fIA9PXyAPT18AD09fEA8/TwAPP08AD09fEA8/TwAPLz7wDz9PAA9PXxAPP08ADy8+8A8/TwAPP08ADz9PAA8vPvAPHy7gDy8+8A8/TvAPL07gDx9O0A8vTuAPHz7gDy9O4A8fPuAPDy6wDw8+oA8fPrAPHy6gDx8uoA8fHpAPHw6ADx8egA8PDnAO/v5gDv8OcA7+/mAPHw5wDw7+YA7+7mAO/v5QDv8OQA8PDlAO/v5ADw8OUA7/DlAO/w5QDv7+QA7/DkAPDv5QDx7+cA8PDnAPHw5wDw7+YA8PDnAPHx6ADx8OgA8fHpAPDx6QDy8+sA8fLrAPDy7gDx8+4A8vTtAPHz7gDy8u8A8fLuAPLz7wDy8+8A8/TwAPT18QDz9PAA9PXyAPT18wD09fMA8/XyAPP18gDz9fIA9PXzAPT18wD09fIA8/XzAPL19ADz9fMA8/XzAPP19ADz9fQA8/XzAPP19ADy9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APT29ADz9fQA8vT0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APL09ADz9fQA9Pb0APP19AD09vQA8/X0APT29ADy9PQA8/X0APT29AD09vQA8/X0APP19ADz9fQA8/X0APT29AD09vQA9Pb0APP19ADz9fQA8/X0APT29AD09vQA9Pb0APT29AD09vQA8/XzAPT29AD09vQA8/XzAPT29AD09vQA9Pb0APP19ADy9PQA8/X0APP19ADh39IA4NzPAODazgDf2MwA3dbIANrTxADX0L8A1Mu6ANPFtgDOwrIAyb2sAMS4pwDAtKMAvbCiALuvoQC/saQAwbOlAMK2pwDFuKgAyLyqAMu+rQDOwLAA0sa2ANfOuwDe1sMA4tvLAOTh0QDn5dcA6+ncAO3s4QDv7uQA7+/nAPHx6ADx8usA8PLsAPHz7wDy9O8A8/TwAPT18AD09fIA8/TzAPT18wD09fMA9PXzAPT18wD09fMA9PXzAPP18gD09fMA9PXzAPP18gD09fMA9PXyAPT18AD09fEA8/XwAPP18QD09fIA9PXxAPP18ADz9fMA8/XyAPT18AD09fEA9PXwAPP18QD09fMA9PXzAPP18gD09fMA9fX0APT18QDz9fAA9PXxAPT18QDz9fAA9PXxAPT19AD09fMA8/XyAPP18gDz9fAA8/XyAPT18wDz9fEA8/XxAPP18QD09fAA9PXyAPT18wD09fIA9PXyAPT18AD09fEA9PXwAPT18QDz9PAA9PXxAPT18QD09fEA9PXxAPP08ADz9PAA8/TwAPLz7wDz9PAA8vPvAPHy7gDy8+4A8vTuAPL07gDx9O0A8vTuAPL07gDy9O4A8fPuAPDz6wDw8+oA8fPrAPHy6gDx8ekA8fLqAPHx6QDx8OgA8PDnAO/v5gDv7+YA7/DnAPDv5gDv7uUA8O7mAPDv5QDw8OUA7+7kAO/v5QDv7+QA8O/kAO/v5ADv8OUA7/DkAPDw5QDx8OcA8O/mAPDw5wDw7+YA8PDnAPDw5wDw8ekA8fLqAPDx6QDx8uoA8vPrAPHy7gDx8+4A8vTtAPLz7gDx8u8A8vPvAPLz7wDy8+8A8vPvAPP08AD09fAA9PXyAPT18wD09fMA9PXzAPX19AD09fMA8/XyAPT18wD09fIA8/XzAPL19ADz9fQA8vX0APP19ADz9fQA8/X0APL19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPP19ADz9fQA8vXzAPP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA9Pb0APP19ADy9PQA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APT29ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APP19AD09vQA9Pb0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA8/XzAPT29AD09vQA8/XzAPT29AD09vQA9Pb0APP19ADz9fQA9Pb0APP19ADh3M8A3tnNAN7ZzADc1sgA2tTFANnRwQDXzb0A1Mm5ANHEtADNwLAAyLyrAMO3pgDAs6IAvrCiALywowC/saQAwbSmAMW3qADHuqkAybyrAM2/rwDRxLMA18y6ANzUwQDh2skA5ODQAOfl1gDp6NoA6+rfAO3u4wDv8OYA8PDnAPHx6QDw8usA8fPuAPL07gDz9PAA8vTxAPP08gD09fMA8/XyAPP18gD09fMA8/XyAPP18gDz9fIA8/XyAPT18wDz9fIA8/XyAPT18wD09fIA9PXzAPT18wD09fEA8/XwAPT18wD09fQA9PXxAPP18AD09fMA9PXzAPT18wD09fIA8/XwAPT18QDz9fMA8/XyAPT18wDz9fIA8/XyAPT18wD09fMA8/XxAPP18AD09fAA8/XwAPH18ADy9fAA9PXwAPP18QDx9fMA8vXxAPT18ADy9fIA8fXzAPP18wD09fMA9PXzAPP18wD09fAA9PXxAPT18wD09fIA9PXwAPT18AD09fEA8/TwAPT18QD09fEA8/TwAPP08AD09fEA8/TwAPLz7wDy8+8A8/TwAPP08ADz9O8A8vTuAPH07QDy8+4A8vPuAPL07gDx8+4A8PLuAPHz7ADx8+sA8PLqAPDx6QDx8uoA8fHpAPHx6QDw8OgA7+/mAO/w5wDu8OcA7u/mAO7w5wDv7+YA8O7mAPDv5QDv7+MA7+7lAPDu5gDu7uMA7+/kAO/v5ADv7+QA8PDlAPDv5QDx7+cA7/DnAO7v5gDv8OcA7+/mAPDw6ADx8OkA8PHpAPHy6gDw8ekA8fPrAPDz7gDw8u4A8fPtAPLz7gDx8u8A8vPvAPP08ADy8+8A8/TwAPT18QD09fAA8/TyAPT18wD09fMA9fX0APT18wDz9fIA8/XyAPT18wD19fQA9PX0APL18wDy9fQA8vX0APT19AD19fQA8/X0APL19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADy9PQA8vT0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPP19ADy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APL09ADz9fQA9Pb0APP19ADy9PQA8vT0APL09ADz9fQA8vT0APL09ADy9PQA8/X0APP19ADy9fMA8/X0APP19ADy9fMA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APT29ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APL09ADy9PQA8vT0APP19ADz9fQA8vT0APP19AD09vQA9Pb0APP19AD09vQA9Pb0APT29ADz9fQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APP18wDz9fMA9Pb0APP19AD09vQA9Pb0APP19ADy9PQA8vT0APL09ADf2c0A3tjLAN3XyADb1MYA2NLCANbPvgDUy7sA0se3AM/CsgDKvq4AxruqAMK2pQDAs6IAvbGjAL6xpADAsqQAwrWnAMW3qADIu6oAy76tAM/CsQDVyrgA29LBAN/YyQDk384A5uTTAOjn2QDq6t8A7O3iAO7v5gDw8OgA8fHpAPHy6wDx8u0A8vPvAPLz7wDz9PAA9PXyAPT18wD09PMA9PXzAPT18wDz9fIA9PXzAPT18wD09fMA9PXzAPP18gD09fMA9PXzAPP18gD09fMA9PXzAPT18wD09fEA9PXxAPP18gDz9fMA8/XxAPT18QDz9fMA8/XyAPT18wD09fIA9PXwAPP18QDz9fMA8/XzAPT18gD09fMA9PXzAPP18wDz9fMA8/XxAPT18QD09fEA9PXxAPL18QDy9fEA9PXxAPP18QDy9fMA8/XyAPT18QDy9fIA8vXzAPP18wDz9fMA8/XzAPT18wD09fEA9PXxAPT18gDz9fIA8/XxAPP18QD09PAA9PXxAPP08AD09fEA8/TwAPP08AD09fEA8/TwAPLz7wDy8+8A8vPvAPP08ADy8+8A8vPuAPHz7gDx9O0A8fTtAPLz7QDx8+4A8fLuAPDz7ADw8+sA8fLqAPHy6gDx8uoA8fHpAPHw6ADw8OgA7+/mAPDw5wDv8OcA7u/mAO7u5QDv7uUA7+7lAO/v5QDv7+MA7+7lAO/u5QDu7+MA7u7jAO/v5ADv7+QA7+/kAO/v5QDw7+YA7+/mAO7w5wDv7+YA8PDmAPDw6ADx8ekA8fLqAPHy6gDx8uoA8fPrAPDz7gDw8u4A8fPtAPLz7gDy8u8A8vPvAPLz7wDy8+8A8/TwAPP08ADz9PAA9PXyAPP18gD09fMA9fX0APT18wDz9fIA9PXzAPT18wD19fQA9PX0APL19ADz9fQA8/X0APT19AD19fQA8/X0APL19ADz9fQA8/X0APP19ADy9PQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPP19ADz9fQA8vXzAPP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADy9PQA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPL18wDz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADz9fQA8/X0APL09ADz9fQA8vT0APL09ADy9PQA8vT0APP19ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADy9PQA8vT0APP19AD09vQA9Pb0APT29ADz9fQA8/X0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADe2MoA3NbIANrTxgDa0cMA18++ANTMuwDSybgA0cS0AM3AsADJvawAxrmoAMK2pQDAs6IAvbGjAL6ypADCtaQAw7emAMe5qQDKvKwAz8CwANTJtgDa0b4A4NjGAOPezQDm49IA6efYAOvq3gDt7OIA7e7lAO/w5wDx8egA8PLqAPHz7ADy8+8A8vPvAPP08QD09fMA8/TyAPT18wD19fQA9fX0APT18wDz9fIA9fX0APX19AD09fMA9fX0APP18gD09fMA9PXzAPP18gDz9fIA9PXyAPT18gD09fMA8/XzAPT18wD09fIA8/XzAPP18wD09fMA9PXzAPP18wD09fIA9PXwAPP18gDy9fQA8/XzAPT18gD09fMA9PXyAPL18gDx9fIA8/XzAPT18wD09fMA9fX0APX19AD19fQA8/XzAPT18wD09fIA9PXzAPP18wD09fMA9PXyAPL18gDx9fIA8/XyAPT18gDz9fMA9PXyAPP18AD09fEA9PXzAPT18gDz9fAA8/TwAPP08ADz9PAA9PXxAPT18QD09fEA8/TwAPLz7wDz9PAA8/TwAPLz7wDy8+8A8fLuAPLz7gDy9O4A8vTuAPLz7gDx8+0A8fPtAPDz7gDw8e0A8vPrAPHy6gDx8uoA8fHpAPHw6ADw8OgA7+/mAPDw5wDv7+YA8PDnAPDv5gDv7+QA7+/kAO7u4wDu7uMA7u7jAO7v4wDu7uMA7+/kAO7u4wDu7uMA7+/kAPDv5QDw7uUA7+/mAO7w5wDv7+YA8PDnAPHx6ADw8OgA8fHpAPHx6QDx8uoA8fPtAPDz7gDw8u4A8fPtAPHz7gDy8+8A8vPvAPLz7wDy8+8A8vPvAPP08ADz9PAA9PXyAPP18gD19fQA9PXzAPP18gD09fMA9fX0APX19AD19fMA9PX0APL19AD09fQA9fX0APX19AD19fQA8/X0APL19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADy9fMA8/X0APP19ADy9fMA8/X0APL18wDy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APP19ADy9PQA8vT0APL09ADy9PQA9Pb0APT29ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPL18wDz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APP19ADy9PQA8/X0APP19ADz9fQA8vT0APP19AD09vQA8/X0APL09ADz9fQA8vT0APL09ADz9fQA8vT0APP19AD09vQA8/X0APT29ADz9fQA8vT0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29ADz9fQA8vT0APP19ADz9fQA8vT0APP19ADc1ccA2tPFANjQwgDYz8AA1sy8ANPIuADQxbUAzsKxAMq+rgDIu6oAxbioAMK2pQDAs6IAwLKjAMGzpADCtqUAxLinAMi7qgDNv64A08a1ANnPvADe1sUA493MAOXj0wDo5tcA6uncAOzs4ADu7uQA7/DnAPHx6QDx8usA8fPtAPHz7gDy8/AA8/TwAPP08QD09fMA8/XyAPT18wD09fMA9PXzAPT18wDz9fIA9PXzAPT18wD09fMA9PXzAPP18gD09fMA9PXzAPP18wD09fMA8/XzAPP18gDz9fMA9PXzAPT18wDz9fIA9PXzAPT18wD09fMA9PXzAPP18gDz9fIA8/XxAPP18gDz9fMA8/XzAPP18gDz9fIA8/XzAPL18wDx9fIA8/XzAPP18wDz9fMA9PXzAPT18wD09fMA8/XyAPT18wD09fMA9PXzAPT18wDz9fIA9PXyAPP18wDy9fMA8/XzAPP18gD09fMA9PXyAPP18QD09fEA9PX0APT18gDz9fAA8/TwAPP08AD09fEA8/TwAPT18QDz9PAA8/TwAPP08ADz9PAA8/TwAPLz7wDy8+8A8vPvAPLz7gDy9O4A8vTuAPHz7gDx8+0A8fPuAPDy7QDw8e0A8fLrAPHy6gDx8uoA8fHpAPHx6QDw8egA7+/mAO/w5wDv7+YA8PDnAPHv5wDw7+UA8PDlAO/v5ADu7uMA7+/kAO/v5ADu7uMA7+/kAO7u4wDv7+QA8PDlAO/v5QDw7uYA7+/mAO/w5wDv7+YA8PDnAPDw6ADx8OkA8fHpAPHx6QDx8uoA8fPsAPDz7gDx8u0A8fPtAPHz7gDy8+8A8vPvAPLz7wDy8+8A8vPvAPP08AD09fAA8/TyAPP18gD19fQA9PXzAPP18gD09fMA9fX0APT19AD09fQA8/X0APL19ADz9fQA9PX0APT19AD09fQA8/X0APP19ADy9fQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPL18wDz9fQA8/X0APL18wDy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPP19ADy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADy9fMA8/X0APP19ADy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA9Pb0APT29ADz9fQA8/X0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADZ0cIA19DBANbOvQDWzLwA1Mi5ANHFtQDQwrIAzL+vAMm9rADHuqkAxLinAMG2pQDAs6IAwLOiAMC0owDDt6YAxrioAMq9rADRxLMA2My7AN3UwwDi28oA5eLQAOjm1wDq6dwA7OvgAO3t5ADu7+YA8fHoAPHx6wDw8+0A8vTvAPP08ADz9PAA9PXwAPT18QDz9PMA9PXzAPP18gDz9fIA8/XyAPP18gDz9fIA8/XyAPP18gDz9fIA8/XyAPP18gDz9fMA8vX0APP19AD19fQA8/XzAPH18wDz9fIA9PXzAPT18wD09fIA9fX0APX19ADz9fIA8/XyAPP18gDz9fMA8fXzAPL18wD09fIA8vXyAPH18gDx9fIA8vXzAPL18wDx9fIA8fXzAPH18wDx9fIA8fXyAPT18gDz9fIA9PXzAPT18wD09fMA9PXzAPP18gD09fMA9PXzAPT18wD19fMA8vXzAPH18gD09fIA9PXzAPP18wD09fMA9PXzAPT18gD09PAA9PXwAPT18ADz9PAA9PXwAPT18QDy8+8A9PXxAPT18QDy8+8A8vPvAPP08ADz9PAA8vPvAPHz7gDx9O0A8vTuAPHz7gDx8+0A8fPuAPDy7QDw8u0A8fLrAPHy6gDx8ekA8fLqAPHy6gDw8ekA8PDnAO/v5gDv8OcA8O/mAPDv5gDv7+UA8PDlAO/v5ADu7uMA7+/kAO/v5ADv7+QA7u7jAO7u4wDv7+QA8PDlAO/v5QDv7uUA8O/mAPDw5wDv8OcA7+/mAPDw6ADx8OkA8fLqAPHy6gDx8uoA8fPrAPHy7QDx8+4A8fPtAPLz7gDx8u4A8vPvAPP08ADy8+8A8/TwAPP08AD09fAA9PXyAPP18gD19fQA9PXzAPP18gD09fMA9fX0APT19ADy9fQA8vX0APP19ADy9fQA8vX0APL19ADy9fQA9fX0APX19ADy9fQA8/X0APP19ADy9PQA8vT0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADz9fQA8vXzAPL18wDy9fMA8/X0APP19ADz9fQA8vXzAPP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADy9PQA8vT0APL09ADz9fQA8vT0APL09ADz9fQA9Pb0APP19ADy9PQA9Pb0APT29ADy9PQA8/X0APP19ADz9fQA9Pb0APP19ADz9fQA8/X0APT29AD09vQA9Pb0APT29ADz9fQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29ADz9fQA9Pb0APT29AD09vQA9Pb0APP19ADy9PQA8/X0APP19ADWzr0A1sy7ANPJuQDTx7cA0ca1AM7DswDMwLAAyr2tAMe7qwDGuakAw7emAMG1pADBtKMAwbOiAMK1pADFuKcAyLurAM/CsADXy7kA3dTBAOHbyQDl4NAA5+XVAOno2wDs6+AA7u3iAO7v5gDw8OcA8PLpAPHy7QDx8+0A8vTvAPP08ADz9PAA9PXxAPT18gD09fMA9PXzAPP18gDz9fIA8/XyAPT18wD09fMA9PXzAPP18gD09fMA9PXzAPT18wD09fMA8/XzAPP18wD09fQA8/XzAPP18wDz9fIA8/XzAPP18gDy9fIA9PXzAPT18wD09fMA9PXzAPT18wDz9fIA8fXzAPL18gD09fIA8/XzAPL18wDy9fMA8vXzAPL18wDx9fIA8vXzAPL18wDx9fMA8vXzAPT18wD09fMA9PXzAPP18wDz9fMA8/XzAPT18gD09fMA9PXzAPP18wDz9fIA8vXyAPH18gD09fMA9PXzAPT18wDz9fIA8/XyAPP18QDz9fAA8/XxAPT18gDz9fEA9PXxAPT18QDz9PAA8/TwAPP08ADz9PAA8/TwAPLz7wDz9PAA8vPvAPLz7wDx8+4A8vPuAPL07gDx8+0A8fPuAPHz7ADw8+wA8fPrAPHy6gDx8uoA8fHpAPHx6QDw8ekA8PDnAO/v5gDv8OcA7+/mAPDv5gDv7+UA7+/kAO/v5ADv7+QA7u7jAO7u4wDu7uMA7+/kAO/v5ADv7+QA7+/kAPDv5QDw7+YA8O/mAO/w5wDw7+YA8PDnAPDw6ADx8OgA8fHpAPHx6QDx8uoA8fLrAPDx7QDw8+4A8fPuAPLz7gDx8u4A8vPvAPP08ADy8+8A8/TwAPT18QDz9PEA9PXyAPP18gD09fMA9PXzAPT18wD09fMA9fX0APT19ADz9fQA8/X0APL19ADz9fQA8/X0APP19ADy9fQA9PX0APT19ADy9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APL09ADz9fMA8/X0APL18wDy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA9Pb0APT29ADz9fQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADUyboA0se3ANHFtQDPw7MAz8KxAMy/rwDJvawAx7qrAMW3qwDEt6gAw7alAMK2pQDAtKMAwbSjAMS2pgDHuqkAzsCuANbJtgDc0b4A4NnGAOXgzgDn5dQA6ejaAOvr3gDt7eIA7+/kAPDw5wDx8eoA8PLsAPHy7gDy8u8A8/PwAPP07wD09fEA8/TzAPP18wD09fIA8/XyAPT18wD09fMA9PXyAPT18wD19fQA9PXzAPP18gD09fMA9fX0APX19AD09fMA8/XyAPP18wDy9fQA8/XzAPT18gDy9fIA8fXyAPL18wDy9fMA9fX0APT18gD19fQA9fX0APT18wDz9fIA8fXyAPL18wD09fMA8/XzAPP19ADy9fMA8vXzAPL18wDx9fIA8fXyAPH18gDx9fMA8vXyAPT18gD09fIA9PXzAPP18gDx9fIA8vXyAPT18wD09fIA9PXyAPL18gDx9fIA8vXzAPL18wD09fIA9PXyAPT18wDz9fIA8fXwAPH18ADx9fAA8/XyAPT18wDz9fMA9PXzAPP08QD09fEA8/TwAPP08AD09fEA8/TwAPLz7wDy8+8A8vPvAPLz7wDy8+8A8fPuAPL07QDx8+4A8fPuAPHz6wDw8+oA8fPrAPHy6gDx8uoA8fHpAPHw6ADw8OgA8PDnAPDv5gDv8OYA8PDnAPDv5gDv7uQA7u7jAO7u4wDu7uMA7+/kAO/v5ADv7+QA7+/kAO7u4wDv7+QA7+/kAO/v5ADw7+YA8PDnAO/w5wDv7+YA8PDnAPDw5wDx8ecA8fDoAPHw6ADx8uoA8fPrAPDy7QDw8+4A8fLuAPHy7wDx8u4A8vPvAPP08ADy8+8A8/TwAPT18gD09fMA9PXzAPT18wDz9fIA8/XyAPX19AD19fQA9PXzAPX19AD19fQA9PX0APL19ADz9fQA8/X0APP19ADz9fQA8vX0APL19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8vXzAPP19ADz9fQA8vXzAPP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APP19ADy9PQA8vT0APP19ADy9PQA8vT0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA9Pb0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADy9PQA8vT0APL09ADz9fQA8/X0APL09ADz9fQA9Pb0APP19AD09vQA9Pb0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADSxbUAz8OzAM/BsgDMv7AAy76tAMi8qwDGuqoAxbipAMS3qADDt6YAwralAMG1pADCtaQAwrWlAMW4pwDLvqwA1Me0ANvPvADf18UA493LAOfj0wDp59kA6+reAO3s4gDu7uYA8PDoAPHx6QDw8uwA8fLuAPLz7wDy8+8A8/TwAPP08QDz9fIA9PXzAPT18wDz9fIA8/XyAPT18wDz9fMA8vXzAPT18wD09fMA9PXzAPT18wDz9fIA9PXzAPP19ADz9fMA9PXzAPP18wDy9fMA8vXzAPP18wDy9fMA8vXzAPL18wDy9fMA8/XzAPL18wDz9fMA8/XzAPX18wD09fMA8fXyAPL18wD09fQA8/XzAPL18wDz9fQA8/X0APL18wDy9fMA8vXzAPL18wDx9fIA8vXzAPP18wDz9fMA8vXyAPL18wDy9fMA8vXzAPL18gDz9fMA8/XzAPP18wDz9fIA8vXzAPP19ADz9fMA8/XzAPL18gDy9fIA8fXyAPL18gDx9fIA8/XzAPT18wD09fMA8/XzAPT18QDz9PAA9PXxAPT18QDz9PAA8/TwAPP08ADz9PAA8/TwAPLz7wDy8+8A8vPuAPH07QDx8+4A8fPuAPHz7QDw8+0A8fPrAPHy6gDx8uoA8fHpAPDw6ADx8egA8fHnAPDw5wDv7+cA8PDmAPDv5QDv7+QA7+/kAO/v5ADu7uMA7+/kAO/v5ADu7uMA7u7jAO7u4wDv7+QA7+/kAO/v5ADw7+YA8O/mAPDv5gDw8OcA7+/mAPDw5wDx8OcA8fHpAPHx6QDx8uoA8fPrAPDz7gDx8+0A8fPuAPHz7gDy8+8A8vPvAPP08ADy8+8A8/TwAPT18gD09fMA9PXzAPT18wD09fMA9PXzAPX19AD19fQA9fX0APT19ADz9fQA8/X0APL19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APL09ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA9Pb0APP19ADz9fQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29ADz9fQA9Pb0APP19ADz9fQA9Pb0APP19ADz9fQA8vT0APP19ADNwK8AzL+uAMu+rQDIvKsAx7qqAMa5qQDEuKcAxLenAMO3pgDCtqUAwbalAMK1pADCtaQAw7WmAMy8qwDRxLIA2c+5AN/WwwDj3csA5uLRAOnn2ADr6t0A7ezhAO/u5QDw8OgA8fHpAPDy6wDx8+4A8vPvAPP08ADy8+8A9PXxAPT18wD09PMA9PXzAPT18wDz9fIA9PXyAPT18gDz9fMA8vXzAPP18wDz9fIA9fX0APX19ADz9fIA8/XyAPL19ADz9fQA9fX0APT18wDx9fIA8vXzAPL18wDy9fMA8/X0APL18wDx9fIA8fXyAPH18gDx9fIA8fXyAPX19AD09fMA8fXyAPL18wDy9fQA8vXzAPL18wDz9fQA8vXzAPP19ADz9fQA8/X0APP19ADx9fIA8fXyAPP19ADy9fMA8fXyAPL18wDz9fQA8vXzAPH18gDy9fMA8vX0APT18wD19fMA8vXyAPL18wDy9fQA8vXzAPH18gDx9fIA8fXzAPH18wDx9fMA8/XzAPX19AD09fMA8/XzAPT18QD09fAA9PXwAPP18QDz9PAA9PXxAPT18QD09fEA8/TwAPLz7wDz9PAA8vTuAPHz7QDy9O4A8vTtAPHz7gDw8u0A8vLrAPHx6QDx8uoA8fHpAPHw6ADw8OgA8PDnAO/w5wDu7+cA7/DmAO/v5ADv7+QA8PDlAO/v5ADu7uMA7+/kAO7u4wDv7+QA7u7jAO/v5ADu7uMA7+/kAPDv5QDw7+YA8O/mAPDv5gDw7+YA8PDnAPDw5wDx8OcA8fHpAPHy6gDx8uoA8fPrAPDy7gDx8+4A8vTtAPHz7gDy8+8A8/TwAPLz7wDy8+8A8/TwAPT18gD09fMA8/XyAPP18gD09fMA9fX0APX18wD19fQA9fX0APT19ADy9fQA8vX0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADz9fQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APL09ADy9PQA8/X0APL09AD09vQA8/X0APL09ADz9fQA8/X0APL09ADz9fQA8vT0APP19ADz9fQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA9Pb0APT29ADy9PQA8vT0APL09ADy9PQA8vT0APP19AD09vQA8/X0APL09ADy9PQA8vT0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29ADz9fQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA8/X0APT29AD09vQA8/X0APT29ADz9fQA8vT0APP19ADIu6sAyLqqAMa4qgDEt6gAwranAMK2pgDCtaQAwrWkAMK1pADCtaUAwrWlAMO2pQDFtqUAybqpANDCsADYzbkA3tTBAOLbygDm4tEA6ebYAOvp3QDs6+EA7e7jAPDw5wDw8egA8PLqAPHz7QDx8+4A8vPvAPT18ADz9PIA8/XyAPP18wDz9fMA8/XzAPP18wD09fMA8/XzAPL18wDy9fMA8vXzAPT18wD09fMA8vXzAPP19AD09fMA9PXzAPL18wDy9fMA8/X0APP18wDy9fMA8vXzAPL18wDy9fMA8/X0APL18wDx9fIA8vXzAPL18wD09fMA9PXzAPP18wDy9fMA8fXyAPL18wD09fQA8/XzAPL18wDz9fQA8/X0APP19ADz9fQA8/X0APP19ADx9fIA8vXzAPL18wDy9fMA8vXzAPL18wDz9fQA8vXzAPL18wDy9fMA8/X0APL18wDy9fMA8vXzAPL18wDz9fQA8vXzAPL18wDy9fMA8vXzAPL18wDx9fIA8vXzAPL18wDz9fMA9PXzAPL18gDy9fIA8/XxAPT18AD09fEA9PXxAPP08ADz9PAA8/TwAPLz7wDz9PAA8vTvAPH07gDy9O0A8vTuAPHz7gDw8e0A8fLrAPHy6gDx8ekA8fHpAPHx6ADw8OgA8PDnAO/v5gDu8OcA7/DmAPDv5ADv8OUA7+/kAO/v5ADu7uMA7u7jAO/v5ADu7uMA7+/kAO7u4wDv7+QA7+/kAO/v5QDw7+UA8fDmAPHw5wDw7+YA8PDnAPDw5wDx8OcA8fHpAPHy6gDw8ekA8fPrAPHz7gDx8+4A8vTtAPHz7gDy8u8A8vPvAPP08ADz9PAA8/TwAPT18gDz9fIA9PXzAPT18wDz9fIA9PXzAPP19ADz9fQA8/X0APP19AD09fQA8/X0APL19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09AD09vQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8vT0APP19AD09vQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19AD09vQA9Pb0APT29ADz9fQA8/X0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29ADz9fQA8/X0APL09ADDtqYAwrSkAMKzpgDBs6UAwLKlAMCyowDAs6IAwLOiAMG0owDBtKQAwrWkAMO2pQDIuakAz8CuANbKtQDc078A4dnHAOXgzgDo5tUA6unbAOzs3wDu7uMA7/DmAPHx6ADx8uoA8fPsAPHz7gDx8vAA8vPvAPP08AD09fMA8/TzAPL19ADy9fQA8vX0APP19AD19fQA8/XzAPL19ADy9fMA8fXyAPT18wD19fQA8vXzAPL18wD19fQA9PXzAPH18gDy9fMA8/X0APL19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDx9fIA8vXzAPL19AD19fQA9PXzAPH18wDy9fMA8fXyAPP18wD19fQA9PX0APL19ADy9fMA8/X0APL19ADy9fQA8vX0APP19ADy9fMA8vXzAPH18gDy9fMA8/X0APP19ADy9fMA8/X0APP19ADz9fQA8/X0APL18wDx9fIA8/X0APP19ADy9fMA8/X0APP19ADz9fQA8/X0APL18wDx9fIA8fXyAPH18gDz9fIA9PXyAPL18wDx9fMA8/XxAPT18ADz9PAA9PXxAPP08ADy8+8A8vPvAPP08ADz9PAA8vTvAPL07gDx9O4A8vTtAPHz7gDw8u4A8PLrAPDz6wDx8ekA8fLpAPHx6ADw8OcA8O/mAO/v5gDv8OcA8O/lAPDw5ADv7+QA7u7jAO7u4wDu7uMA7+/kAO7u4wDt7eIA7u7jAO/v5ADv7+QA8PDlAPDw5QDw8OQA8e/lAPHw5wDw8OcA7+/mAPDw5wDx8OcA8fLpAPDx6QDx8uoA8fLrAPDz7gDy9O4A8vTtAPLz7gDx8u8A8vPvAPP08AD09fEA9PXwAPT08gDz9fIA9PXzAPX19ADz9fIA8/XyAPL19ADy9fQA8vX0APP09AD19PQA9PT0APL19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADz9fQA8vT0APP19ADy9PQA8vT0APP19ADz9fQA8/X0APL09AD09vQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APL09ADy9PQA8/X0APP19ADy9PQA8vT0APP19ADz9fQA8/X0APL09AD09vQA8/X0APL09ADz9fQA8vT0APP19ADy9PQA8vT0APL09ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8vT0APP19ADy9PQA8vT0APL09ADy9PQA8vT0APL09ADz9fQA9Pb0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APL09ADy9PQA8vT0APP19AD09vQA8/X0APL09ADz9fQA9Pb0APP19ADy9PQA8vT0APP19AD09vQA9Pb0APT29ADz9fQA8vT0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APP19AD09vQA8vT0APL09AC/saAAv7CgAL6vogC+sKEAvrCfAL6woQC/sKEAv7GgAMCyoQDBtKMAwralAMa5pwDNv60A1ci1ANvQvQDg18YA493NAOjl1ADq6NkA7OveAO7u4wDv8OcA8PHoAPHy6gDx8u0A8fLvAPLz7wDz9PAA8/TyAPP08gDy9fIA8/XzAPL19ADz9fQA9PX0APT19ADz9fMA8/X0APP19ADy9fMA8vXzAPT19AD09fMA8/XzAPL18wDz9fQA8/XzAPL18wDy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDy9fMA8vXzAPL09ADz9fQA8/XzAPL18wDy9fMA8vXzAPP18wDz9fQA8/X0APL19ADz9fQA8vX0APT19AD09fQA8/X0APL18wDz9fQA8vXzAPL18wDy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDy9fMA8vXzAPL18wDz9fQA8/X0APP19ADz9fQA8/X0APL18wDx9fIA8vXzAPL18wDz9fIA9PXzAPP18QDz9fEA8/XxAPT18AD09fEA8/TwAPLz7wDy8+8A8/TwAPP08ADy9PAA8/TvAPL07gDx9O4A8vTtAPHz7QDw8u4A8fPrAPDy6gDx8ekA8fLpAPHx6QDw8egA8PHoAO/v5gDv8OcA7/DmAPDw5ADv7+QA7+/kAO7u4wDv7+QA7u7jAO3t4gDu7uMA7u7jAO/v5ADv7+QA7+/kAO/v5ADw8OQA8fDmAPHw5wDw8OcA7+/mAO/v5wDw8OgA8PDoAPHy6gDy8+sA8vPsAPLy7gDy8+4A8fTtAPLz7gDx8u4A8vPvAPLz7wDz9PAA9PXwAPP18gD09fMA9PXzAPX19AD09fMA9PXzAPL19ADz9fQA8vT0APP19AD09vQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8vT0APL09ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADy9PQA8/X0APL09ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADy9PQA8vT0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA9Pb0APP19ADz9fQA8/X0APT29ADz9fQA9Pb0APT29ADz9fQA8/X0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA8/X0APP19AC9rZ0Ava2dALuunQC8r54AvK+eAL2vnwC9r6AAvrGgAMCyoQDBtKMAxbemAMy+rADTx7IA2s+6AODXxADj3csA5+PTAOnn2ADr6t0A7e3hAO/v5gDx8egA8fHqAPLy7ADy8+0A8vPvAPLz7wDz9PAA9PXzAPT18wDy9fMA8vX0APL18wDz9fQA9fX0APT19ADy9fQA8vX0APP18wDz9fQA8vX0APT19AD09fMA8/XzAPP19ADy9fMA8vX0APP19ADz9fQA8/X0APP19ADy9fMA8/X0APP19ADz9fQA8vXzAPP19ADz9fQA8vT0APP18wDy9PMA8vX0APP19ADz9fQA8/X0APL19ADy9fMA8vX0APP19ADz9fQA8vX0APT19AD19fQA8/T0APL09ADz9fQA8/X0APP19ADz9fQA8vXzAPP19ADz9fQA8/X0APP19ADz9fQA8vXzAPP19ADz9fQA8vXzAPL18wDz9fQA8/X0APP19ADz9fQA8/X0APL18wDx9fIA8fXyAPH18gDz9fMA9fX0APX18gD19fEA9PXxAPP18AD09fEA8/TwAPP08ADz9PAA8vPvAPP08ADy9PAA8/TvAPL07gDx8+0A8vTuAPHz7gDw8u4A8fPrAPHy6gDw8ekA8fLqAPDx6QDx8OgA8fHoAPDw5wDu7+cA8PDmAPDv5ADv8OUA8PDlAO/v5ADu7uMA7u7jAO3t4gDv7+QA7+/kAO/v5ADv7+QA7u7jAO/v5ADw8OQA8fDmAPHw5wDw8OcA7+/mAPDw6ADx8OgA8PHpAPLz6wDy8+sA8/TsAPPy7gDy8+0A8fTtAPHz7gDy8+8A8/TwAPP08ADz9PAA9PXwAPP18gD09fMA9fX0APT18wD19fQA9PX0APL18wDz9fQA8vT0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APT29ADz9fQA8vT0APP19ADz9fQA8vT0APL09ADz9fQA8vT0APL09ADy9PQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APT29ADz9fQA8vT0APP19ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADy9PQA8vT0APL09ADy9PQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APT29ADz9fQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA9Pb0APP19ADz9fQA8/X0APT29ADz9fQA8/X0APP19ADz9fQA8/X0APP19AD09vQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA9Pb0APP19ADy9PQA8/X0APT29AD09vQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APP19AD09vQA9Pb0APT29AD09vQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29ADz9fQA9Pb0APP19AC7q5sAu6ubALqrmwC7q5sAva2dAL6ungC/r58AwLCgAMKyogDEtqQAy7yqANLEsgDZzroA4NbCAOLbygDn4tEA6ufXAOzq2wDt7OAA7+/lAPDw5wDx8ekA8fPrAPH07QDy8+8A8/TwAPT18gDz9PIA9PXzAPX19ADy9fQA8vXzAPL19ADz9fQA8/X0APP19ADy9fQA8/X0APP19ADz9fQA8vX0APP19ADz9fMA8/XzAPL19ADz9fQA8/X0APL18wDz9fQA8vXzAPL18wDz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vX0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDy9fMA8vXzAPL18wDz9fMA8/X0APL18wDy9fQA8/XxAPT18ADz9PAA8/TwAPT18QDz9PAA8vPvAPP08ADz9PAA8vTvAPH07QDy9O0A8fPuAPDy7gDw8u4A8fLrAPLz6wDw8ekA8fLqAPDx6QDx8OgA8PDnAO/v5gDv7+cA8PDmAPDw5ADw8OUA7+/kAO7u4wDu7uMA7+/kAO7u4wDu7uMA7e3iAO7u4wDu7uMA7+/kAPDw5QDv8OQA8PDmAPHw5wDw7+YA8PDnAPHw6ADx8ekA8PLqAPDx6QDy8+sA8fPrAPHz7QDy8+4A8fTtAPLz7gDz8/AA8/TwAPT18QD09fEA8/TwAPT18wD19fQA9fX0APX19ADz9fQA8/X0APL19ADz9fQA8/X0APL09ADy9PQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APP19ADy9PQA8/X0APP19ADy9PQA8vT0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APL09ADy9PQA8vT0APP19ADz9fQA8/X0APT29ADy9PQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APL09ADz9fQA9Pb0APP19ADy9PQA8/X0APP19ADz9fQA9Pb0APP19ADy9PQA8vT0APP19ADz9fQA8/X0APT29ADz9fQA8vT0APP19ADy9PQA8/X0APP19AD09vQA9Pb0APT29ADz9fQA8vT0APP19AD09vQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APP19AD09vQA9Pb0APP19ADz9fQA9Pb0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APP18wDz9fMA9Pb0APP19AD09vQA8/X0APL09AC5qJgAuqmYALyqmgC9q5sAvK2dAL2tnQC/r58AwbGgAMO0owDKuqgA0cOwANfMtwDd1MEA49zKAObh0ADo5tYA6+nbAO3s3wDu7+MA8fDmAPHx6QDy8+wA8vPuAPLz7wDz9PAA9PXwAPP08gD09fMA9PX0APT19ADy9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9fMA8fXyAPL18wDz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDx9fIA8vXzAPP19ADy9fMA8/X0APL18wDy9fQA8/XxAPT18AD09fEA9PXxAPP08ADy8+8A8/TwAPP08ADz9PAA8vPvAPHz7QDy8+4A8vTtAPHz7gDw8u4A8fLrAPLz6wDw8ekA8fLqAPHx6QDw8OgA7+/mAPDw5wDv8OcA8PDmAPDw5ADw8OUA7+/kAO7u4wDv7+QA7u7jAO7u4wDt7eIA7u7jAO7u4wDu7uMA7+/kAPDw5QDv8OQA8PDmAPHw5wDw7+YA8PDnAPHx6ADw8OgA8PHpAPHy6gDy8+sA8fPrAPH07QDx8+4A8fTtAPLz7gDz8/AA8/TwAPT18QDz9PAA8/XwAPT18wD09fQA9PXzAPX18wDz9fQA8/X0APL19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADy9PQA8/X0APL09ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APT29ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APL09ADz9fQA9Pb0APP19ADy9PQA8/X0APP19ADz9fQA9Pb0APP19ADy9PQA8/X0APL09ADz9fQA8/X0APL09ADy9PQA8vT0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APT29AD09vQA9Pb0APT29ADz9fQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29ADz9fQA8vX0APP19ADy9PQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA8/XzAPT29AD09vQA8/XzAPT29ADz9fQA8/X0APP19AC7p5UAvKmXAL6qmQC+q5oAvq2bAL+vnAC/r54AwbGgAMa4pQDPwa0A1su2AN3UvwDh2scA5eDPAOnl1QDr6NoA7OveAO7u4gDx8OQA8vHoAPHy6wDx9O0A8vPuAPP08AD09fIA9PTzAPL18wDx9fIA8vXzAPL19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDz9fQA8/X0APP19ADy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPP19ADz9fQA8vXzAPH18gDx9fIA8fXyAPL18wDx9fMA8/XxAPT18AD09PEA9PXxAPP08ADz9PAA9PXxAPP08ADy8+8A8vPvAPLz7wDy9O4A8fPtAPL07gDy8+4A8vPrAPLz6wDw8ekA8fLqAPHx6QDw8OgA7+/mAPDv5gDx8OcA8PDmAO/w5ADv7+QA7u7jAO/v5ADu7uMA7e3iAO7u4wDt7eIA7u7jAO/v5ADv7+QA7u7jAO/v5ADw8OQA8fDmAPHw5wDw7+YA8PDnAPHx6ADx8OgA8PHpAPHy6gDy8+oA8vPrAPDz7gDx8+0A8vTuAPLz7wDy8+8A8/TwAPT18QD09fAA9PXwAPP18gDz9fIA8/XyAPT18wD19fQA9PX0APL19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADy9PQA8/X0APT29ADz9fQA8vT0APL09ADz9fQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADy9PQA8/X0APT29ADz9fQA8vT0APL09ADy9PQA8vT0APL09ADz9fQA8/X0APL09ADy9PQA8vT0APP19AD09vQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8vT0APL09ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APP19AD09vQA8/X0APL09ADy9PQA8/X0APP19ADz9fQA9Pb0APP19ADy9PQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APP19AD09vQA9Pb0APP19ADy9PQA8/X0APT29AD09vQA9Pb0APT29AD09vQA8/XzAPP18wD09vQA9Pb0APT29AD09vQA9Pb0APP18wDz9fMA9Pb0APP18wDz9fMA9Pb0APP19ADy9PQA8vT0APL09AC8qJYAvamYAL6qmQC/q5oAwK2cAMGvnQDCsZ8Ax7ajAM+/qgDWybIA3NG9AOHZxwDl380A5+XUAOro2ADr690A7u7jAO/w5gDw8ecA8PLqAPHz7QDy8+8A8vTvAPP08ADz9fIA9PXzAPP19ADz9fQA8/X0APL18wDz9fQA8/X0APP19ADz9fQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9fMA8/X0APP19ADy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPL18wDy9fMA8fXyAPL18wDy9fMA8/XxAPT18QDz9fAA8/TwAPP08ADz9PAA8/TwAPP08ADy8+8A8vPvAPLz7wDx8+4A8vTtAPL07gDx8+4A8vPsAPHz6wDx8uoA8PHpAPDx6QDx8egA8PDnAPDv5gDw8OcA8PDmAPDv5ADw8OUA7u7jAO7u4wDu7uMA7u7jAO/v5ADt7eIA7e3iAO7u4wDu7uMA7u7jAO/v5ADw8OQA8fDmAPHw5wDw7+YA7+/mAPDw6ADx8ekA8fHpAPDx6QDy8+sA8/PsAPH07gDy9O4A8vPuAPPz7wDz9PAA8/TwAPP08AD09fEA9PXxAPT18gD09fMA8/XyAPX19AD09fMA9PX0APL19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8vT0APP19ADz9fQA8vT0APP19AD09vQA9Pb0APT29ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA9Pb0APP19ADy9PQA8vT0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA8/X0APT29ADz9fQA8/XzAPT28wD09vQA9Pb0APT29ADz9fMA9Pb0APT29ADz9fMA9Pb0APT29AD09vQA8/XzAPT29AD09vQA9Pb0APP18wD09vQA9Pb0APP19ADz9fQA8vT0APL09AC+qZYAv6qXAL+smQDArZoAwq+dAMOwngDGtaIAzr2oANXHsgDb0bsA4djEAOTezADn5NMA6efXAOzr3QDu7eEA8PDlAPDx5wDx8uoA8PPrAPHz7gDz9PAA8/TwAPP08ADz9fMA8vX0APL18wDz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPL18wDz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9fMA8/X0APP19ADy9fMA8fXyAPL18wDx9fMA8/XzAPT18wDx9fAA8fTwAPP08ADz9PAA8/TwAPP08ADz9PAA8vPvAPHy7gDx8+4A8vTtAPL07gDx8+4A8PLrAPDy6gDy8+sA8PHpAPDy6ADx8egA8PDnAO/v5gDu8OcA8PDmAPDv5ADw8OUA7+/kAO7u4wDu7uMA7u7jAO7u4wDt7eIA7u7jAO7u4wDu7uMA7+/kAO/v5ADw8OQA8fDmAPHw5wDw7+YA8PDnAPDw6ADx8ekA8fLqAPDx6QDy8+sA8vLuAPH07QDy9O4A8/TvAPLz7wDz9PAA8/TwAPT18ADz9PIA8/XzAPP18wD09fIA8/XyAPT18wD19fQA9PX0APL19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADy9PQA8vT0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA9Pb0APP19ADy9PQA8/X0APT29ADy9PQA8/X0APP19ADz9fQA8/X0APP19AD09vQA9Pb0APT29ADz9fQA8vT0APL09ADy9PQA8/X0APT29ADy9PQA8/X0APT29ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA9Pb0APT29ADz9fQA8/X0APT29ADz9fQA8vT0APP19ADz9fQA8/X0APT29AD09vQA8/XzAPP18wD09vQA9Pb0APP18wD09vQA9Pb0APT29AD09vQA9Pb0APP18wDz9fMA9Pb0APT29ADz9fMA9Pb0APT29ADz9fMA9ff1APX39QDz9fMA9Pb0APT29AD09vQA8/XzAPT29AD19/UA9Pb0APT29ADz9fMA8/X0APT29AD09vQA8/XzAPP18wC/qpcAwKyYAMCtmgDCr5wAxLCeAMa0oQDMvKYA1MWvANvPuADg1sMA493LAOfj0QDp59gA7OrcAO3t4QDw7+UA8fDnAPHx6QDy8+wA8fPtAPL07wDz9PAA9PXxAPP18QDz9PMA8vX0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPL18wDz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9fMA8vXzAPL18wDy9fMA8/XyAPT18gDy9PAA8vXxAPT08ADz9PAA9PXxAPP08ADz9PAA8vPvAPLz7wDy8+4A8fTtAPHz7gDy9O4A8fPrAPDz6wDx8uoA8PHpAPHy6ADw8egA8PDnAPDv5gDv8OcA8PDmAPDw5ADv7+QA7+/kAO7u4wDu7uMA7e3iAO3t4gDu7uMA7u7jAO7u4wDv7+QA7u7jAO/v5ADw8OQA8fDmAPHv5wDw8OcA7+/mAPDw6ADx8ekA8fLqAPDx6QDy8+sA8vPuAPHz7QDy8+4A8vPvAPLz7wDz9PAA8/TwAPP18AD09fIA9PXzAPT18wDz9fIA9PXzAPT18wD09fQA9PX0APL19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8vT0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADz9fQA8vT0APP19ADz9fQA8vT0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APT29ADz9fQA8vT0APP19AD09vQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APT29ADy9PQA8/X0APP19ADz9fQA8vT0APL09ADy9PQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APT29ADz9fQA8/X0APP19ADz9fQA9Pb0APP19AD09vMA9Pb0APT29ADz9fMA8/XzAPT29ADz9fMA9Pb0APT29AD09vQA8/XzAPT29AD09vQA9Pb0APT29ADz9fMA9Pb0APT29ADz9fMA9Pb0APX39QDz9fMA9Pb0APT29AD09vQA8/XzAPT29AD19/UA9Pb0APT29ADz9fMA9Pb0APT29ADz9vMA9PX0APT19ADArJgAwq6aAMSwnADFsp8Ax7SgAMy6pQDUw64A2s24AN/VwADj28kA5uHQAOnm1gDr6tsA7ezfAO/v5ADw8OUA8fLoAPHy6wDz8+0A8vTuAPP08AD09fEA9PTzAPL19ADy9fQA8/XzAPP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9fMA8/X0APP19ADy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDz9fQA8/X0APP19ADz9fQA8/XwAPT18AD09fAA9PTwAPT18QD09fEA8/TwAPP08ADz9PAA8vPvAPLz7wDy8+4A8fTtAPL07gDx8+4A8fTsAPHy6gDw8ekA8fHpAPHx6ADw8OcA7+/mAO/w5wDv8OcA7+/lAPDw5ADv7+QA7u7jAO/v5ADu7uMA7e3iAO7u4wDu7uMA7e3iAO7u4wDu7uMA7+/kAO/v5ADw8OQA8PDmAPHv5wDw8OcA8PDnAPDw6ADx8ekA8fLqAPDx6QDy8+oA8vPuAPHz7QDy8+4A8vPvAPP08ADy8+8A8/TwAPT18AD09fIA9PXzAPT18wDz9fIA9fX0APX19ADy9fMA8vX0APP19ADz9fQA8/X0APL09ADy9PQA8vT0APP19ADy9PQA8vT0APP19AD09vQA8/X0APT29ADy9PQA8/X0APP19ADy9PQA8/X0APT29AD09vQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8vT0APP19ADz9fQA8vT0APP19ADy9PQA8/X0APP19ADz9fQA8vT0APL09ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8vT0APP19AD09vQA8/X0APL09ADy9PQA8vT0APP19AD09vQA9Pb0APT29ADy9PQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19AD09vQA8vT0APL09ADy9PQA8vT0APT29AD09vQA9Pb0APT29AD09vQA8/X0APT29ADz9fMA9Pb0APT29ADz9fMA8/bzAPT29ADz9fMA9Pb0APT19AD09vMA8/bzAPT29AD19/UA9Pb0APP18wD09vQA9Pb0APP18wDz9fMA9Pb0APX39QDz9fMA9Pb0APT29ADz9vMA8/XzAPT29AD09vQA9Pb0APP18wD09vQA9Pb0APT29AD09vMA8/T1APT09QDCrpkAxLCbAMaynQDItKAAzbqkANPCrADZy7UA3dS+AOHaxwDm4M8A6OXVAOrp2gDs694A7+7iAPDv5gDx8ecA8fLqAPL07ADz9O4A8/TvAPP08AD09fIA9PTzAPL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPL18wDy9fQA8/XyAPP18QD09fIA8/XxAPT18AD09fEA8/TwAPP08ADz9PAA8/TwAPLz7wDy8+4A8fTtAPL07gDx8u4A8PPsAPHz6wDx8ekA8fHpAPHx6ADw8OcA7+/mAO/v5gDv8OcA7/DmAO/v5ADv7+QA7u7jAO7u4wDu7uMA7e3iAO7u4wDu7uMA7e3iAO7u4wDu7uMA7+/kAO/v5ADv8OQA8PDmAPHw5wDw7+YA8PDnAPHw6ADw8ekA8PHpAPHy6wDy8usA8vPuAPL07QDy8+4A8vPvAPP08ADz9PAA8/TwAPT18ADz9fIA8/XyAPP18gDz9fIA9PXzAPT19ADy9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA9Pb0APP19ADy9PQA8/X0APL09ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8vT0APP19ADz9fQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APP19ADy9PQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19AD09vQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19AD09vQA8/X0APP19ADy9PQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29ADz9fQA8/XzAPP18wD09vMA9PX0APP19AD09vMA9Pb0APT28wD09fQA8/X0APT19AD09vQA9Pb0APP18wD09vQA8/XzAPT29AD09vQA9Pb0APT29ADz9fMA9Pb0APP18wD09vQA9Pb0APT29AD09fQA9PX0APP28wD09vQA9Pb0APT29AD09vMA9PX0APP09QDEsJsAx7OeAMi0nwDNuqQA08KrANjLtADe070A4trGAOXfzQDo5NQA6ujZAOzq3gDu7uIA8PDlAPDw5wDx8uoA8vPsAPL07gDy8/AA8/TwAPT18QD09PQA9PX0APP18wDy9PQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADz9fQA8vT0APP19ADz9fQA8/X0APL09ADz9fQA9Pb0APP19ADy9PQA8/X0APP19ADz9fQA8vT0APL09ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPL18wDz9fMA8vX0APH18wD19fQA9PXyAPP18ADz9PAA9PXxAPP08ADy8+8A8vPvAPP08ADy9O4A8fTtAPL07gDx8+4A8PTsAPHz6wDw8ekA8PHpAPHx6ADw8OcA7+/mAPDw5wDx7+YA8O/lAO/v5ADv7+QA7u7jAO7u4wDt7eIA7u7jAO7u4wDu7uMA7e3iAO7u4wDu7uMA7u7jAO/v5ADv8OQA8PDmAPHw5wDw7+YA8PDnAPHw6ADx8ekA8PDoAPLz7QDx8e0A8vPuAPH07QDy9O4A8/TwAPLz7wDz9PAA9PXxAPT08ADz9fIA8/XyAPP18gDz9fIA8vXzAPL19ADz9fQA8/X0APP19ADz9fQA8vT0APP19AD09vQA8/X0APL09ADz9fQA9Pb0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APL09ADz9fQA9Pb0APP19ADy9PQA8/X0APP19ADy9PQA8vT0APL09ADy9PQA8vT0APL09ADz9fQA8/X0APL09ADy9PQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADy9PQA8vT0APL09ADy9PQA8/X0APT29ADz9fQA8vT0APL09ADy9PQA8vT0APP19AD09vQA9Pb0APP19ADz9fQA8vT0APL09AD09vQA9Pb0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APT29AD09vQA9Pb0APT29ADz9fQA9Pb0APT29ADy9PQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APP19AD09vQA9Pb0APP19AD09vMA9PT1APT09QD09vMA9Pb0APT28wD09fQA9PT1APP19ADz9vMA8/XzAPT29AD09vQA8/XzAPT29AD19/UA9Pb0APP18wD09vQA9Pb0APP28wD09fQA9PX1APT19QD09fUA9PX0APP28wD09vQA9PX0APT28wD09vMA9PX0APL09QDItJ4AybWgAM26pQDTwawA2MqzAN3SuwDh2cUA5N/NAOjk0wDq59gA7OrdAO7t4QDw7+UA8fDnAPHy6QDx8uwA8vLuAPP07wDz9PEA8/TxAPT18gDz9PQA8/XzAPP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADy9PQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8vT0APL09ADy9PQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9fMA8/X0APP19ADy9fMA8/X0APL18wDz9fMA8vXyAPT18QD09fEA8/XwAPP08ADz9PAA8/TwAPP08ADy8+8A8fPuAPL07QDx8+4A8PLsAPDy7ADx8uoA8fLqAPDw6ADw8OgA8PDnAPDv5gDw7+YA8O/lAPDw5QDv7+QA7+/kAO7u4wDt7eIA7u7jAO7u4wDu7uMA7u7jAO3t4gDu7uMA7+/kAO/v5ADw8OQA8PDmAPHv5wDw8OcA8PDnAPHx6QDx8ekA8PHpAPHy6wDy8u0A8vPuAPH07QDy8+4A8vPvAPLz7wDz9PAA9PXxAPP18AD09fIA9PXzAPT18wD09fMA8/XzAPL19ADz9fQA8/X0APP19ADz9fQA8vT0APP19AD09vQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APP19ADz9fQA8/X0APP19AD09vQA8/X0APL09ADy9PQA8vT0APL09ADz9fQA8vT0APL09ADz9fQA8/X0APL09ADz9fQA9Pb0APP19ADz9fQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADz9fQA8vT0APL09ADy9PQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APT29ADz9fQA8/X0APP19ADy9PQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19AD09vQA8/X0APL09ADz9fQA9Pb0APP19ADz9fQA8/X0APT29ADz9fQA8/X0APP19AD09vQA9Pb0APT29ADz9fQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vMA9PX0APT19AD09vMA9Pb0APT28wD09fQA9PX0APT19AD09vMA9Pb0APT29AD09vQA8/XzAPT29AD09vQA9Pb0APT29ADz9fMA8/XzAPP28wD09vQA9Pb1APT19ADz9fQA8/X0APT28wD09vQA9PbzAPT19AD09fQA9PX0APP09QDMt6IAzrqlANTCqwDYybMA3NC7AODXwwDk3soA5uPRAOjm1gDr6dsA7ezfAO/v4wDx8OcA8PHpAPLy7ADx8+wA8vPvAPP08AD09fEA9PXzAPP08wDy9fQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APP19ADz9fQA8vT0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APP19AD09vQA8/X0APL09ADz9fQA8/X0APL09ADz9fQA8vT0APL09ADz9fQA8/X0APT29AD09vQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8vT0APL09ADy9PQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vXzAPP19ADy9fQA8vXyAPX18QD09fEA8/TwAPT18QD09fEA8/TwAPP08ADy8+8A8fPuAPL07QDx8+4A8PLtAPDx7QDy8+sA8vPrAPDx6QDw8OgA8PDnAPDw5wDw7+YA8O/lAPDw5QDv7+QA7+/kAO7u4wDt7eIA7e3iAO3t4gDu7uMA7u7jAO3t4gDu7uMA7+/kAO/v5ADw8OUA8e/lAPHv5wDw8OcA8PDnAPDx6QDw8ekA8fLqAPHy6gDz8+4A8/PtAPH07QDx8+4A8vPvAPP08ADz9PAA9PXxAPP18AD09PMA9fX0APX19AD19fQA8/X0APL18wDy9PQA8vT0APP19ADy9PQA8vT0APP19AD09vQA9Pb0APT29ADz9fQA8vT0APP19AD09vQA9Pb0APT29ADz9fQA8/X0APP19ADz9fQA8vT0APP19AD09vQA8/X0APL09ADy9PQA8vT0APL09ADy9PQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA9Pb0APP19ADz9fQA8/X0APP19ADz9fQA9Pb0APT29AD09vQA8/X0APP19ADy9PQA8vT0APP19ADz9fQA8vT0APP19AD09vQA9Pb0APP19ADz9fQA9Pb0APP19ADz9fQA9Pb0APT29AD09vQA9Pb0APP19AD09vQA9Pb0APP19ADy9PQA8vT0APL09ADy9PQA8vT0APP19AD09vQA9Pb0APT29ADz9fQA8/X0APL09ADz9fQA9Pb0APT29AD09vQA9Pb0APT29ADz9fQA8vT0APP19AD09vQA9Pb0APP19AD09vQA9Pb0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09fQA9PbzAPT28wDz9fMA8/XzAPT29AD09vMA9PbzAPT28wD09fQA9Pb0APT29AD09vQA9Pb0APP18wDz9fMA8/XzAPP18wD09vQA9Pb0APP18wD09vQA9ff1APT29AD09vQA9Pb0APP18wD09vQA9PbzAPP19ADz9PUA9PT1APL09QDQvKUA08GrANjJswDb0LkA4NbBAOPbyQDn4M8A6OXTAOno2ADr6t0A7e3hAPDv5QDx8egA8fLqAPPz7gDy9O4A8/TvAPP08AD09fEA9PXzAPP18wDy9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APL09ADy9PQA8vT0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA9Pb0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9fMA8vXyAPT18gD09fIA8/XwAPT18QD09fEA8/TwAPLz8ADy8+8A8vPuAPL07gDx8+0A8PPuAPDy7QDx8uoA8fLqAPDx6QDw8OgA8PDnAO/v5gDv7+YA7+/lAO/v5ADv7+QA7+/kAO7u4wDu7uMA7u7jAO7u4wDt7eIA7e3iAO7u4wDu7uMA7u7jAO/v5ADv7+QA8PDmAPHw5wDw7+YA8fDnAPHw6ADw8ekA8vPrAPLz6gDx8u4A8fPtAPLz7gDy8+4A8vPvAPP08ADz9PAA8/TwAPP08AD09fEA9PXxAPT18wD19fQA8/X0APL19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APT29ADz9fQA8/X0APP19AD09vQA9Pb0APP19ADz9fQA8vT0APP19AD09vQA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APT29ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APT29ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA9Pb0APT29AD09vQA9Pb0APP19ADz9fQA8/X0APT29AD09vQA9Pb0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA9Pb0APT29AD09vQA8/X0APP19ADz9fQA9Pb0APT29AD09vQA9Pb0APT29ADz9fQA8/X0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APP18wD09vQA9Pb0APP18wD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29ADz9fMA8/XzAPP18wD19/UA9ff1APT29AD09vQA9ff1APX39QD19/UA9Pb0APP18wD09vQA8/XzAPT29AD09fQA9PX0APP19ADUwasA18ixANzPuADf1L4A4tnGAOTezADm4tEA6ebVAOvp2wDs694A7u7iAPDv5QDw8OcA8fLqAPL07QDz8+8A8/TwAPT18QD09PEA9PXzAPP18wDy9fQA8vXzAPP19ADy9fQA8vXzAPL19ADy9fMA8/X0APL09ADz9fQA8/X0APL09ADz9fQA9Pb0APP19ADy9PQA8vT0APP19ADz9fQA8vT0APL09ADy9PQA8vT0APL09AD09vQA9Pb0APL09ADy9PQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADz9fQA8/X0APL09ADz9fQA9Pb0APP19ADy9PQA8vT0APL09ADy9PQA8/X0APL09ADy9PQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA9Pb0APT29AD09vQA9Pb0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADx9fIA8vXyAPT18wD09fIA9PXwAPT18AD09fEA8/TwAPLz7wDz9O8A8/TvAPL07gDx8+0A8PLuAPHy7QDw8ekA8PHpAPHx6QDw8OgA8PDmAO/v5gDv8OcA7/DmAO/v5ADv7+QA7u7jAO7u4wDu7uMA7u7jAO7u4wDs7OEA7e3iAO7u4wDu7uMA7u7jAO/v4wDv7+QA8PDlAPHw5wDw7+YA8fDnAPHw6ADw8ekA8fLqAPLy6gDw8u4A8fPtAPLz7gDy8+8A8/TwAPP08AD09fEA8/TwAPP08ADz9fAA8/XwAPT18wD19fQA8/X0APL19ADy9PQA9Pb0APL09ADz9fQA9Pb0APP19ADy9PQA8/X0APP19ADz9fQA9Pb0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APT29ADz9fQA8vT0APP19AD09vQA8/X0APP19AD09vQA9Pb0APP19ADy9PQA8vT0APL09AD09vQA9Pb0APT29ADz9fQA8vT0APL09ADy9PQA8/X0APT29ADz9fQA8vT0APP19ADz9fQA8vT0APL09AD09vQA9Pb0APT29ADz9fQA8vT0APP19ADy9PQA8/X0APT29AD09vQA8/X0APT29AD09vQA9Pb0APL09ADy9PQA8vT0APT29AD09vQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APP19ADz9fQA9Pb0APT29ADz9fQA9Pb0APT29AD09vQA8/X0APT29AD09vQA9Pb0APP19AD09vQA9Pb0APT29ADz9fQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APP18wD19/UA9ff1APP28wD09vMA9PX0APT28wD09vMA9PbzAPT19AD09vQA9Pb0APP18wD09vQA8/XzAPP18wD19/UA9ff1APX39QD19/UA9Pb0APX39QD19/UA9Pb0APP18wDz9fMA8/XzAPT29AD09vQA9Pb0APT28wDWyLAA2s22AN7TvQDh18IA49vKAOXgzgDn5NIA6efXAOvp3ADt7N8A7u7iAO/w5gDw8OcA8fLqAPPz7QDz8+8A8/TwAPP08ADz9fEA8vXxAPL18QDy9fMA8/X0APL18wDz9fMA9PX0APP19ADz9fQA8vXzAPP19ADy9PQA8/T0APL08wDz9fQA8/X0APP19ADy9PQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8vT0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8vT0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APT29ADz9fQA8vT0APP19ADz9fQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADx9fIA8vXzAPL18gDy9fIA8vXwAPP18QD09fEA8/XwAPP08ADy8+4A8vTuAPL07gDx8+0A8fTuAPHx7ADx8uoA8PHpAPHy6gDw8ekA8PDnAO/v5gDu8OcA7/DmAO/v5ADv7+QA7u7jAO3t4gDu7uMA7u7jAO7u4wDs7OEA7e3iAO3t4gDt7eIA7u7jAO/v5ADw7+YA8PDmAPHw5wDw7+YA8fDnAPHw6ADw8egA8PHpAPHy6gDw8usA8fPuAPL07gDx8+4A8vPvAPP08AD09fEA9PXxAPT18ADz9PIA9PXyAPP18wDz9fQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8/b0APP19ADy9PQA8/X0APP19ADz9fQA9Pb0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APT29ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA9Pb0APT29ADz9fQA8vT0APP19ADz9fQA8/X0APT29ADz9fQA8/X0APP19ADz9fQA8/X0APP19AD09vQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APL09ADz9fQA9Pb0APT29AD09vQA9Pb0APP19ADz9fQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APP19ADz9fQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APP18wD09vQA9Pb0APP19AD09fQA9PbzAPT19AD09fQA9PX0APT28wD09vQA9Pb0APP18wD09vQA9Pb0APT29AD09vQA9Pb0APX39QD19/UA9ff1APT29AD09vQA9Pb0APP18wD09vQA9Pb0APT29AD09vQA9Pb0APP18wDZzLUA3dG7AODVwADi2cYA493MAObizwDo5dMA6ujZAOvq3ADt7N8A7+7iAO/w5gDw8OcA8fLqAPT07gDy8+8A8/PwAPP08ADz9fEA8fXwAPH18QDx9PMA8vXzAPH18wDz9PMA9fX0APP19ADy9fQA8vXzAPL18wDy9fQA8vXzAPP19ADz9PQA8vTzAPL09ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APT29ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APT29ADz9fQA8/X0APL09ADy9PQA8vT0APL09ADy9PQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APT29ADz9fQA8vT0APP19ADy9PQA8vT0APL09ADy9PQA8vT0APP19ADz9fQA8vT0APL09ADz9fQA8/X0APT29ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9fMA8vXzAPH18gDx9fIA8fXwAPP08QD09fEA8/TwAPPz8ADy8+4A8fTtAPH07QDy9O4A8fPuAPDy7gDy8+oA8PHpAPHx6QDx8egA8PDnAO/v5gDu7+cA7/DmAO/v5ADv7+QA7u7jAO7u4wDt7eIA7e3iAO3t4gDt7eIA7OzhAO3t4gDt7eIA7u7jAO/v5ADw7+YA8fDnAPDw5gDw7+YA8fDnAPHx6ADw8ekA8PHpAPHy6wDx8+oA8vTuAPH07QDy9O4A8vPvAPLz7wD09fEA8/TwAPT18ADz9fIA9PXyAPP18wDy9fQA8vXzAPL09AD09vQA8/X0APP19AD09vQA8/X0APL09ADy9PQA8/X0APT29AD09vQA9Pb0APP19ADy9PQA8vT0APL09ADy9PQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29ADz9fQA8vT0APP19AD09vQA8/X0APL09ADz9fQA8/X0APT29ADz9fQA8vT0APL09ADz9fQA9Pb0APT29ADz9fQA8/X0APP19ADy9PQA8/X0APT29AD09vQA8/X0APL09ADy9PQA8vT0APP19AD09vQA8/X0APP19ADz9fQA9Pb0APT29AD09vQA8/X0APT29AD09vQA9Pb0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA8/X0APT29AD09vQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT19AD09vMA9PbzAPT28wD09fQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT19ADz9vMA8/X0APT09QD09fQA9PbzAPP19ADz9PUA9PX0APT28wD09vMA9PX0APT29ADz9fMA9Pf0APX39QDz9fMA9Pb0APX39QD19/QA9ff1APT29ADz9fMA8/XzAPP18wD09vQA9ff1APT29ADz9vMA8/bzAPT28wDb0LkA3tS+AOLYxADj2skA5ODNAOfj0QDo5dUA6ujYAOzq3ADs694A7u7iAPDv5QDx8OcA8fHoAPHy7ADy9O0A8/PvAPP08AD09fEA8/TwAPP18QD09fEA8/TwAPP08AD09fEA9PTxAPT18QD09fEA8vXxAPH18QD09PEA8/XxAPH18QDy9PEA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9fMA8/X0APL18wDz9PQA8/XzAPP19ADz9fQA8vT0APP19ADy9fMA8/X0APP19ADy9fMA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA9Pb0APP19ADz9fQA8/X0APT29ADz9fQA8vT0APL09ADy9PQA8/X0APT29ADy9PQA9Pb0APP19ADz9fQA9Pb0APP19ADy9PQA8/X0APT29ADz9fQA9Pb0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDz9fQA8/X0APL18wDy9fMA8fXyAPL18gDz9PAA8vPvAPLz8ADz9PAA8vPvAPHz7gDy9O0A8fPuAPDy7QDx8ukA8fLqAPDx6QDw8OgA7+/mAO/v5gDu8OcA7+/mAO/u5ADv7+MA7u7jAO3t4gDu7uMA7e3iAOzs4QDt7eIA7OzhAO3t4gDu7uMA7u7jAO/v5ADv7+QA8PDmAPHw5wDw7+YA8PDnAPHx6QDx8uoA8PHpAPHy6gDw8u0A8fPuAPL07QDy9O4A8/PwAPLz7wDz9PAA9PXyAPP18gD09fMA9fX0APT18wD09fMA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADy9PQA8vT0APP19AD09vQA9Pb0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA9Pb0APP19AD09vQA8/X0APL09ADz9fQA8vT0APP19ADz9fQA9Pb0APP19ADy9PQA8vT0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APT29AD09vQA8/X0APP19ADz9fQA9Pb0APP19ADy9PQA8/X0APT29AD09vQA8/X0APT29AD09vQA9Pb0APP19AD09vQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APP19ADz9fQA9Pb0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT28wD09fQA9PT1APT19AD09vMA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT28wD09fQA9PX0APT28wD09fQA8/bzAPT29AD09fUA8/T0APT09QD09fQA9PbzAPT29ADz9vMA9PX0APT19QD09/QA9Pb1APX19gD19vUA9ff0APT29AD09vQA9ff1APT29ADz9fQA9PX1APT19ADz9fQA9PX0APT19ADe07wA4NXAAOLZxQDj3MoA5eDOAOjk0gDo5tUA6ufZAOzq3ADs694A7e3hAPDv5QDx7+YA8PDoAPDy6gDy9O0A8/TvAPLz8ADz9PAA9PXxAPP08ADy8+8A8vPvAPP08AD09fEA9PXxAPP08ADz9PAA8vTwAPH08AD09PAA8/TwAPH08ADy9fEA8vXzAPL18gDy9fMA8vXxAPL18ADy9fIA8fXyAPL08wDz9PMA8/XzAPP18wDx9fIA8/X0APP18wDz9fMA8/XzAPP18wDz9fQA8vXzAPL08wDz9fQA8/XzAPL18wDy9PMA8vXzAPP18wDz9PQA8/X0APP19ADy9PQA8vTzAPP19AD09vQA8/X0APT28wDz9fQA8vTzAPP19ADz9fQA8vTzAPL09AD09vQA8vT0APP19AD09vQA9Pb0APP19ADy9PQA8/X0APT29ADz9fQA9Pb0APP19ADy9PQA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADy9fMA8vXzAPP19ADy9fMA8fXyAPL18gDz9PAA8vPvAPP08ADy8+8A8/PwAPLz7gDy9O0A8fPuAPDy7QDy8+oA8PHpAPHx6QDx8OgA8PDnAO/v5gDu8OcA7+/mAO/u5ADv7+MA7u7jAO7u4wDt7eIA7OzhAO3t4gDt7OEA7OzhAO3s4QDt7eIA7e3iAO/v5ADv7+QA8O/lAPDv5gDw8OcA7+/mAPDw6ADw8ekA8fLqAPLz6gDw8u4A8fPtAPL07QDy8+4A8/TwAPP08ADz9PAA9PXyAPP18wD09fMA9fX0APT19AD19fQA8/XzAPL19ADy9PQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8vT0APP19AD09vQA9Pb0APP19ADy9PQA8/X0APT29AD09vQA8/X0APL09ADz9fQA8vT0APP19AD09vQA8/X0APL09ADz9fQA9Pb0APT29AD09vQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA9Pb0APP19ADy9PQA8vT0APP19AD09vQA9Pb0APT29ADz9fQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA8/X0APT29AD09vQA9PbzAPP18wDz9fMA9Pb0APT29AD09vQA9Pb0APT29ADz9fQA9Pb0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA8/X0APT29ADz9fQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT28wD09fQA9PT1APT19AD09vMA9Pb0APT29AD09vQA9Pb0APT29AD09vMA9PX0APT28wD09PUA9PX0APT28wD09fQA9PbzAPP19AD09fUA9PX1APP09QD09fQA8/bzAPP19AD09vMA8/X0APP09QD19/QA9Pb1APX19gD09fUA9Pb0APX39QD09vQA9Pb0APT29ADz9fQA8/T1APT19AD09PUA9PX1APT19QDe1b4A4djDAOLbyADj3csA5uDOAOfj0gDp5dUA6+jYAOzq2wDs694A7e3hAO/v4wDw7+UA8PHoAPHy6QDw8uwA8PTtAPL07gDz8+8A8vPvAPLz7wDy9O4A8vTuAPLz7gDy8+8A8vPvAPLz7wDy8+4A8/TvAPPz7wDy8+8A8vPvAPPz7wDz9PAA9PXwAPT08AD09PAA9PTwAPT08AD09PAA9PXwAPP07wDz9PAA9PXwAPT18ADx9fAA8vXwAPT18AD09fAA9PXwAPT18AD09fAA8/XwAPT08QDz9fEA8vbxAPL18QDx9PAA8vXxAPL18QDy9PMA8vXzAPL18wDy9fMA8/X0APL08wDy9PMA8vTzAPL09ADy9PQA8/X0APL18wDy9fQA8/X0APL08wD09vQA8/X0APL09ADy9PQA8vTzAPL09ADz9fMA8vT0APL09ADy9PQA8vTzAPL09ADz9fQA8/X0APL09ADz9fQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA9PbzAPP19ADz9fQA8/T0APL08wDy9PIA9PXzAPT08gD09fAA9PXxAPP08ADz9PAA8vPvAPHz7gDy9O0A8fPuAPDx7QDy8+oA8PHpAPHx6QDw8OgA7/DnAPDv5gDw7+YA8O/lAO/v5ADu7uMA7u7jAO3t4gDs7OEA7e3iAO3t4gDt6+AA7e3iAOzt4gDt7eIA7u7jAO7u4wDv7+QA8PDmAPHv5wDw8OcA7+/mAPDw6ADx8ekA8PHpAPHy6gDx8+4A8vTtAPLz7gDz9O8A8vPwAPLz7wDy8+8A8/TxAPT18wDz9fIA9PXyAPP18wDy9fQA8vX0APL09ADz9fQA8/X0APL09ADz9fQA9Pb0APT29AD09vQA8/X0APL09ADy9PQA8vT0APP19AD09vQA9Pb0APP19ADz9fQA9Pb0APT29AD09vQA9Pb0APP19ADy9PQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APP19ADz9fQA9Pb0APT29AD09vQA8/X0APL09ADz9fQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29ADz9fMA9Pb0APT29AD09vQA9PbzAPT29ADz9fQA9Pb0APP19AD09vQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APP19AD09vQA9Pb0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT19AD09vMA9PbzAPT28wD09vMA9PbzAPT19AD09vQA9PbzAPP18wDz9vMA9PbzAPT28wD09fQA9Pb0APT19AD09vMA9PbzAPT28wD09vMA9PX0APT09QD09vMA9PX0APT09QD09fQA9PbzAPT19ADz9PUA8/X0APT28wDz9fQA9PT1APT19ADz9vMA9PX0APT19QD19/QA9Pb0APP18wD09vQA9ff1APT29AD19/UA9Pb0APT29AD09vQA8/bzAPP19AD09PUA9PX1APT19QDh1sIA4dnFAOLbyADj3csA5uHQAOfj0gDo5dUA6ufYAOvq2gDs690A7ezhAO7u4gDw7+UA8fHoAPHx6ADx8uoA8fPrAPLz7ADx8+wA8fPsAPHz7ADy8+wA8fTtAPHz7QDx8+0A8fTtAPHz7QDx8+0A8vPuAPL07gDy9O4A8vTuAPL07gDy8+8A8vPvAPLz7wDy8+8A8vPvAPLz7wDy8+8A8vPvAPLz7wDz9PAA8/TwAPP08ADy9PAA8vTwAPT08ADz9PAA8/TwAPP08ADz9PAA8/TwAPT08ADy9PAA8fTwAPL08ADy9fEA8vTwAPL08ADy9fIA8vXyAPL18gDy9fIA8vXzAPL18wDx9fIA8vXzAPL08wDy9fMA8vXzAPL18gDy9fMA8/XzAPL09ADz9fMA8/XzAPL18wDz9fMA8/T0APP19ADz9fQA8/XzAPL08wDy9fMA8/X0APP19ADy9PQA8vT0APP18wDy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL18wDy9PQA8/X0APL18wDz9PQA8/X0APL18wDy9fIA9PXyAPT18gDz9PAA9PXxAPP08ADz9O8A8vPvAPHz7gDx8+4A8fPtAPDy7ADx8uoA8PHpAPHx6QDx8OgA8PDnAPDv5gDx7+cA8PDmAO/v5ADu7uMA7u7jAO3t4gDs7OEA7e3iAO3t4gDt7OEA7ezhAO3s4QDs7OEA7e3iAO7u4wDv7+MA7+/lAPDv5gDw8OcA7+/mAPDw6ADx8ekA8PHpAPHy6gDx8+0A8vTuAPL07gDy9O8A8vPwAPP08AD09fEA9PXyAPT08wD09fMA9PXzAPP19ADy9fMA8/X0APL09ADz9fQA8/X0APL09ADz9fQA8/X0APP19AD09vQA8/X0APP19ADz9fQA8/X0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APT29AD09vQA8/X0APL09ADz9fQA9Pb0APT29AD09vQA8/X0APL09ADz9fQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29ADz9fMA9Pb0APX39QD09vQA8/XzAPP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT28wD09fQA9PX0APT19AD09fQA9PX0APT28wD09vMA8/X0APT29AD09vQA8/XzAPT29AD09vQA9Pb0APT28wD09fQA9PX0APT19AD09vMA9PX0APT09QD09vMA9PX0APT09QD09fQA8/X0APT19AD09fUA8/X0APT28wDz9fQA9PX1APT29AD09fQA9Pb1APX29gD09vUA9fb1APX39QD19/UA9Pb1APX29QD09/QA9ff1APT29AD09vQA9Pb0APP19ADz9PUA9PX1APT19QDh2MQA4drHAOTcygDk38wA5+LQAOjk0gDo5tUA6efXAOzp2gDs6t0A7OzfAO3t4gDv7+QA8PDlAPHw5wDw8ekA8fLpAPHy6gDx8uoA8fLqAPHy6gDy8+oA8fPrAPHz6wDx8+sA8fPrAPHz7QDx8u0A8PLsAPDz7QDx8+0A8PPtAPHz7QDx8+0A8vTtAPH07QDx9O0A8vTuAPL07gDy8+4A8fPuAPLz7gDy8+4A8vPvAPLz7wDy8+8A8vPvAPLz7wDy8+8A8vPvAPLz7wDy8+8A8/TwAPP08ADz8+8A8/PvAPP08ADz9PAA8/TwAPP08ADz9PAA8/TwAPT08ADz9PAA8fTwAPL18QDy9vEA8vXxAPH08ADx9fAA8fXwAPH18ADx9fAA8vXzAPL18wDx9PAA8vXxAPL18QDy9fIA8vT0APP18wDz9vQA8vXyAPH08ADy9fIA8vT0APL18wDy9fMA8/X0APP19ADy9fQA8vT0APL09ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9fMA8vT0APH08gDy9PMA8vXzAPL18QDz9fEA8/TwAPP08ADz9PAA8/TwAPP08ADy8+8A8vTuAPL07gDx8+4A8PPrAPHz6gDw8ekA8fHpAPHx6ADw8OcA7+/mAO/v5wDw7+YA7+/lAO/v5ADu7uMA7u7jAO3t4gDt7OEA7ezhAO3s4QDt7OAA7evgAOzs4QDs7eIA7e3iAO7u4wDv7+QA8PDmAPHw5wDw7+cA7+/mAPDw6ADx8ekA8PHpAPLy6gDx9OsA8vTuAPHz7QDy9O4A8/PwAPP08AD09fAA8/TxAPT18wD19fQA9fX0APP18wDy9fQA8/X0APP19ADy9PQA8vT0APL09ADy9PQA8vT0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APP19AD09vQA9Pb0APP19AD09vQA8/X0APT29AD09vQA8/X0APL09ADy9PQA8vT0APP19ADy9PQA8/X0APT29AD09vQA9Pb0APP19ADz9fQA8/X0APP19AD09vQA9Pb0APT29AD09vQA8/X0APT29AD09vQA9Pb0APP19ADz9fQA9Pb0APT29AD09vQA8/X0APT29AD09vQA8/XzAPT28wDz9fMA8vT0APP19AD09vQA9Pb0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT28wD09fQA9PT1APT09QD09PUA9PX0APT28wD09fMA8/X0APT29AD09vQA8/XzAPT28wD09vMA9PbzAPP28wDz9fQA9PT1APT19AD09vMA9PX0APT09QD09vMA9PX0APT09QD09PUA8/T1APT19QD09vQA9PbzAPP28wD09vMA8/bzAPT29QD19vYA9fb2APX29QD19fYA9PX2APT29AD09vUA9fX2APT29QD19/QA9Pb1APX19gD19fYA9fb2APT19QDz9PQA9PX1APT19QDi2MUA4tnHAOPcywDk38wA5+LQAOjj0gDo5dQA6efWAOvo2ADr6twA6+veAO3s4ADu7uMA7+/kAPDv5gDv8OcA8PDnAPDx6ADw8egA8PHoAPDx6ADw8egA8PHoAPHy6QDx8ukA8fLpAPHy6QDx8uoA8fLpAPHx6QDw8uoA8PLqAPDy6wDx8usA8/PrAPLz6wDx8+sA8fPrAPHz7ADx8+wA8fLtAPHz7ADx8+wA8fPtAPHz7QDx8+0A8fPtAPHz7QDy9O0A8vPuAPLz7gDx8+0A8vPuAPLz7gDy8+4A8vPuAPLz7gDy8+8A8vPvAPLz7wDy8+8A8vPvAPLz7wDy8+8A8vPvAPL08ADy9PAA8vTwAPL08ADy9PAA8vTwAPL08ADy9PAA8vTxAPL08QDy9PAA8vTwAPL08ADy9PEA8vTyAPL08gDy9PIA8vTxAPL08ADy9PEA8/XzAPL18gDy9fIA8vXzAPL18wDz9fMA8/XzAPL18wDy9fMA8vXzAPL18wDy9fMA8vXzAPL18wDy9fMA8vXzAPP18wDy9fIA8/XzAPL18gDy9fIA8vTyAPL08ADy9PAA8/PvAPLz7wDy8+8A8vPvAPLz7wDx8+4A8fPuAPLz7QDx8+0A8fLqAPDy6gDx8uoA8PHpAPDw5wDv7+YA7/DmAO/v5gDv7uQA7u7jAO3u4gDt7eIA7e3iAOzs4QDs6+AA7OvgAOzr4ADs6+EA7OvhAO3s4QDt7OEA7e3hAO7u4wDu7uMA7+/lAPDw5gDw8OYA7+/mAPDw6ADw8OgA8PHpAPHy6gDx8+wA8fPuAPL07gDy9O4A8/TwAPP08ADz9PAA8/XxAPT18wD09fMA9PX0APP19ADy9fQA8/X0APP19ADy9PQA8/X0APP19ADy9PQA8/X0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29ADz9fQA8/X0APT29ADz9fQA8/X0APT29AD09vQA9Pb0APT29AD09vQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APT29ADz9fQA8/X0APP19ADz9fQA8vT0APP19AD09vQA9Pb0APP19ADz9fQA9Pb0APP19ADz9fQA8/X0APT29AD09vQA9Pb0APP19ADz9fQA9Pb0APT29AD09vQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT28wD09fQA9PX0APT19AD09fQA9PX0APT28wD09vMA9PX0APP19ADz9fQA9PbzAPT19AD09fQA8/X0APT29AD09fQA8/X0APT19AD09fQA9PX0APT19AD09fQA9PX0APT19AD09fQA9PT1APP19AD09vQA9Pb0APP19AD09fQA8/X0APT19QD09fYA9PX1APX29gD09vUA9Pb1APT29AD09fQA9PX1APX29QD19vUA9fb1APT29QD09vUA9fb1APT19QDz9PQA9PX1APT19QDi2MYA49nIAOLcygDj3swA5uDPAObi0QDn5NMA6ObVAOnn1gDq6NkA6+rcAOvr3QDs7OAA7u7iAO/v4wDu7+QA7+/lAO/v5QDv7+UA7/DlAO/w5QDw7+YA8PDmAPDw5wDw8OcA8PDnAPDw5wDw8ecA8PHoAPDx6ADw8egA8fDnAPHx6QDx8ekA8fLqAPHy6gDx8uoA8fLpAPDx6QDx8ukA8fLqAPHy6gDx8uoA8fLrAPHy6wDy8+sA8vPrAPLz6wDx8+sA8PLrAPDy7ADx8+0A8fLtAPHz7QDx8+wA8fPsAPHz7QDy8+0A8fPtAPH07QDy9O4A8vTuAPH07gDy9O4A8vPuAPHz7gDy9O4A8vPuAPLz7wDy8+8A8vPvAPPz7wDy8+8A8/PuAPPz7gDy8+8A8/TwAPPz7wDz9PAA8/PvAPPz7wDz8+8A8/PvAPPz7wDz9PAA8/TwAPP08ADz9PAA8vTwAPH08ADz9PAA8/TwAPH08ADx9PAA8fTwAPH08ADx9PAA8fTwAPH08ADx9PAA8fTwAPP08ADz9PAA8/TwAPP08ADz9PAA8vPvAPLz7wDz9PAA8vPvAPLz7wDx8+4A8fPuAPHz7QDx8+4A8fLuAPHy6wDx8uoA8fHpAPHw6ADx8ekA8fHpAO/v5gDu7+YA7+/kAO/v4wDt7eIA7OzhAOzs4QDt7OEA7evgAOzq4ADs6uAA6+reAOvq3gDs6uAA7OvgAOzr4QDs6+EA7OvhAOzs4gDu7uMA7+/kAO/v5ADv7+YA7+/nAO/w6ADw8egA8fHpAPDx6QDw8u4A8PLuAPHz7gDz8+8A8vPvAPLz7wDz9PAA9PXxAPT08ADz9fIA8vX0APL19ADz9fQA8/X0APP19ADy9PQA8/X0APT29ADz9fQA8/X0APT29ADz9fQA9Pb0APT29AD09vQA9Pb0APT29ADz9fQA8/X0APT29ADz9fQA8/X0APT29ADz9fQA9Pb0APT29ADz9fQA9Pb0APT29AD09vQA9Pb0APT29ADz9fQA8/X0APT29ADz9fQA8vT0APT29ADz9fQA8vT0APP19AD09vQA9Pb0APP19ADz9fQA9Pb0APP19ADy9PQA8/X0APT29ADz9fQA8/X0APL09ADz9fQA9Pb0APT29AD09vQA8/X0APL09ADz9fQA9Pb0APP19ADz9fQA8/X0APT29ADz9fQA9Pb0APT29AD09vQA8/X0APT29AD09vQA9Pb0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT19AD09vMA9PbzAPT28wD09vMA9PbzAPT19AD09vMA9PX0APT09QD09fQA9PbzAPP19ADz9PUA8/X1APT29gD09vQA8/bzAPT19AD09PUA9PX0APT28wD09PUA9PX0APT28wD09fQA9PT1APP09QDz9PUA8/T1APT09QD09PUA9PT1APP09AD09fUA9PX1APT19QD19/QA9ff0APT29AD09fQA9PX1APX29gD09fYA9fb1APT29AD09vQA9ff0APT19ADz9PQA9PT1APT19QDi2cYA4tnHAOLayQDk3csA5N/MAObhzwDm4tEA5+XTAOjm1QDq59cA6ujZAOvp2wDr6t0A7ezfAO3s3wDt7eEA7u3hAO3t4QDt7eEA7u7iAO7u4gDu7+MA7+7jAO/v5ADu7uQA7u/lAO7v5ADu7+QA7+/lAO/v5QDv8OYA8PDmAPDw5gDw8OYA7/DmAPDw5wDw8OcA8PDnAPDx6ADw8egA8PHoAPDx6ADx8egA8PHpAPDx6QDx8ukA8fHoAPHy6QDx8ukA8PHpAPHx6QDx8ukA8fLpAPHy6QDx8uoA8PLqAPHy6wDy8uoA8PLrAPDz6wDx8+wA8fPsAPHz6wDx8+sA8fPsAPHz7ADx8+wA8fTtAPHz7QDx8+0A8fTtAPL07QDx8+0A8vTuAPL07gDx8+4A8vPuAPL07gDy8+8A8vTvAPL07wDy9O8A8vTvAPP07wDz8+8A8/PvAPLz7wDy8+8A8vPvAPLz7wDy8+8A8vPvAPLz8ADy8/AA8vPwAPLz8ADy8/AA8vPvAPL08ADy9PAA8vPvAPP08ADz9O8A8vPvAPLz7wDy8+8A8fPuAPHz7gDy8+8A8fLuAPHz7gDy8+0A8vPtAPHz7QDx8+0A8fLsAPDy6gDw8ekA8PHoAPDw5wDw8OgA7/DnAO/v5gDu7uUA7u7jAO3t4gDs7OEA7OvhAOzr4ADs694A6+rdAOvp3gDr6d4A6uncAOrp3ADr6dwA6+rdAOvq3wDr6t8A7OrfAOzr4ADt7OEA7e3iAO7u4wDu7+UA7+/mAO/w6ADw8OgA8PDoAPHx6QDx8usA8fPtAPHz7QDy8+4A8fPvAPLz7wDz9PAA8/TwAPT18ADz9PMA8/X0APP19ADy9fQA8vXzAPP19ADy9PQA8/X0APP19ADz9fQA8/X0APT29ADz9fQA9Pb0APT29AD09vQA9Pb0APP19AD09vQA9Pb0APP19AD09vQA9Pb0APP19AD09vQA8/X0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APP19AD09vQA9Pb0APP19ADz9fQA8/X0APT29ADz9fQA8/X0APP19AD09vQA8/X0APT29AD09vQA8/X0APP19ADz9fQA8/X0APT29ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09ADz9fQA9Pb0APP19ADz9fQA8/X0APP19AD09vQA8/X0APP19ADz9fQA9Pb0APP19ADz9fQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vMA9PX0APT19AD09fQA8/bzAPT19AD09fQA9PX1APT29gD09vQA8/bzAPT19AD09fQA9PX0APT28wD09PUA9PX0APT19AD09fQA8/X0APT19AD09fUA9PX0APP19AD09fQA8/X0APT19QD09fUA9fb1APT19AD19vUA9Pb0APT29AD19vUA9PX1APT29QD19vUA9fb1APT29AD09vQA9Pb0APT19QD09fUA8/X1APT09ADh2MQA4dnGAOLZyADj28oA5N3LAOXezADn4M8A5+PRAOjk0wDp5tQA6ebWAOrn2ADs6doA6+ncAOvp3ADr6d0A7OrcAOvq3QDs6t0A7OreAOzr3gDr7N4A7OzfAOzs3wDs7OAA7OzgAO3t4QDu7eEA7u3hAO7t4gDu7eIA7u3iAO7u4gDu7uIA7e7jAO7v5ADv7+QA7+/kAO/v5ADv7+UA8O/lAPDw5QDw8OUA8PDmAPDw5gDw8OYA8O/mAPHw5gDx8ecA8fHnAPDw5wDv8OcA8PDnAPHx5gDw8ecA8PHoAPDx6ADw8egA8fLoAPHy6ADx8ukA8fLpAPDx6ADx8ukA8vLqAPHy6gDy8usA8vPrAPHz6wDx8+sA8fPrAPHz6gDy8+oA8fPsAPLz7ADw8uwA8fPsAPHz7QDx8+0A8fPtAPHz7QDx8+0A8fPtAPLz7QDx8+0A8vTuAPHz7gDy9O4A8fTuAPLz7gDy9O4A8vTuAPL07wDy9O8A8vTvAPL07wDy9O8A8vTvAPL07wDy9O8A8vTvAPL07gDy9O4A8vTuAPH07gDx8+4A8fPuAPL07QDy8+wA8fLsAPHy7ADy8+wA8vLrAPHy6gDx8ukA8PHoAPDx6ADw8OgA7/DnAO7w5gDu7+YA7e3kAO/u5ADu7eMA7ezhAOzr4ADs698A6+reAOvq3ADr6dsA6ujbAOro2gDq6NoA6ejZAOjm2QDp6NkA6ujaAOro2wDq6dsA6uncAOvq3QDr6t8A7OvgAO3s4QDt7eIA7u7jAO7v5QDw8OUA7+/mAPDw5wDw8egA8fLpAPDy6wDw8+wA8fPuAPLz7gDy8+8A8vPvAPP08AD09fIA9PTyAPL18wDy9fQA8vX0APL18wDy9fQA8vT0APL09ADz9fQA8/X0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29ADz9fQA9Pb0APP19AD09vQA9Pb0APT29ADz9fQA8/X0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA8/X0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APP19AD09vQA8/X0APL09ADz9fQA8/X0APL09ADz9fQA9Pb0APT29AD09vQA8vT0APL09AD09vQA8/X0APL09ADz9fQA9Pb0APP19ADy9PQA8/X0APT29AD09vQA8/X0APT29AD09vQA9Pb0APT29ADz9fQA9Pb0APP19AD09vQA9Pb0APT29ADz9fQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09fQA9PbzAPT28wD09vMA8/XzAPT29AD09vQA9Pb1APX19gD09vQA8/XzAPT28wD09vMA9PbzAPT28wD09PUA8/T1APP09QDz9fQA8/bzAPT29AD19/UA9Pb0APP18wDz9vMA8/bzAPT29QD19fYA9Pf0APX39AD09fYA8/T0APX39QD09vQA9Pb0APT29AD19/QA9Pf0APX39QD09fUA8/T0APT19QD09vQA8/X1APT09QDh2MQA4tnFAOLZxwDi2sgA49vJAOPdygDk38wA5eDOAObi0ADn49EA5+TSAOjl1ADq5tUA6ebXAOnn1wDp6NgA6efYAOro2ADr6dkA6unZAOrp2QDq6doA6unbAOrp2wDq6dsA6unbAOvq3ADs6twA6+rcAOvq3QDs6t0A7OvdAOvs3wDs7N8A7OzfAO3s3wDu7eAA7ezgAO3s4ADt7eEA7u3hAO7t4QDu7eEA7u3iAO7u4gDu7+MA7u7jAPDv5ADv7+QA7+7jAO/v5ADu7uQA7+/kAPDv5ADv7+UA7+/lAPDw5gDw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4M4A5N/OAOPfzQDk380A5eDOAOXgzgDl4c8A5+LQAOfj0gDn5NQA6OXWAOnm1wDp6NkA6ujbAOvq3QDs694A7OvhAO7s4gDu7uQA7/DlAPDw5QDx8ecA8fHoAPHy6QDx8+sA8fPtAPHz7gDy9O4A8vPuAPP08ADz9PAA8/TwAPP08AD09fEA9PTxAPT18gD09fIA9PT0APT19ADz9fMA8/X0APL09ADy9PQA8/X0APP19ADz9fQA9Pb0APT29ADy9PQA8vT0APP19ADz9fQA8/X0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APP19ADz9fQA8vT0APL09AD09vQA9Pb0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APL09ADy9PQA8/X0APP18wDz9PQA8/T0APP19ADz9fQA8vT0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA8/X0APL09ADy9PQA8/X0APP19ADz9fQA8/X0APP19ADy9PQA8vT0APL09ADz9fQA8vT0APP19ADz9fQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA8/X0APT29ADz9fQA9Pb0APP19ADz9fQA8/X0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29ADz9vMA9Pb0APT29AD09vQA8/XzAPP18wDz9fMA9Pb0APT29AD09vQA9Pb0APT29AD09vUA9fb1APX29QD09/QA9fb1APX29QD19vUA9Pb1APT29AD09vQA9ff1APX39QD09vQA9Pb0APT19ADz9fQA9PX0APT28wDf2cUA4NjFAOHZxgDh2cYA4dnGAOLaxwDi2scA4tvIAOLbyADi3MgA4tzJAOLdygDj3csA497LAOPeywDj3soA497MAOTezADl380A5d/NAOXfzgDl4M4A5eDOAOXgzgDl4c4A5eHOAOXhzgDl4c4A5eHOAObizwDm4tAA5uLQAObi0QDn4tEA5+LRAOfj0QDn49IA5+PSAOjk0wDn5NMA6OXTAOjl1QDp5tUA6OXVAOnm1QDo5tQA6efWAOrn1gDq59cA6ufXAOrn1wDp59gA6efXAOnn2ADq59kA6ujYAOvo2QDr6NoA6+jaAOvp2gDs6dwA6+ncAOvq3ADs6t0A6+rcAOzq3QDr694A6+veAOvr3QDs7N4A7OzeAOzr3wDs698A7OvgAOzr3wDs7OAA7OzgAO3s4QDt7OEA7ezhAO7t4QDt7eEA7u3hAO3t4QDt7uIA7u7jAO/v4wDv7+MA7+/kAO/v5ADv7uQA8O/kAO/v5QDv7+UA8PDmAO/w5QDv7+UA7/DlAO/v5ADw8OUA7+/lAPDv5QDv7+UA7+/kAO/v5ADv7+QA7u7jAO/u5ADu7uMA7u3hAO3t4gDt7eEA7ezgAOzr4ADs698A7OvfAOvq3ADq6dwA6+jaAOrn2gDp5tgA6ObVAOfl1QDn49MA5uPRAOXh0ADl4M8A5d/NAOPezADj3ssA4tzKAOLbyQDi28kA4tvIAOLbyADh28gA4tvIAOLcyQDi3MoA5N3MAOXfzQDm4M8A5+LRAOfj0gDn5dQA6ebWAOnn2QDr6NoA6+rdAOzr3gDt7OAA7u7iAPDw5QDw8OUA8PDnAPHx6ADx8uoA8fPsAPDz7QDx9O0A8vPuAPLz7wDy8/AA8/PwAPLz7wDz9PAA9PXxAPT18QD09fEA9PTzAPT08wDz9PQA8/T0APL19ADy9fQA8vT0APL09ADy9PMA8/X0APP19ADz9fQA8/X0APL09ADy9PQA8vT0APP19ADz9fQA8/X0APP19ADz9fMA8/X0APP19ADy9PMA8vT0APL09ADz9fQA8/X0APT29ADz9fQA8vT0APL09ADy9PQA8vT0APP19ADz9fQA8vTzAPP09ADy9fMA8vXzAPL19ADy9fQA8vX0APL19ADy9fQA8vX0APL19ADy9fQA8vX0APL19ADy9fQA8vX0APL19ADy9fQA8vX0APL19ADy9fQA8/X0APL08wDz9fQA8/X0APP19ADz9fMA8vX0APL19ADy9fQA8/XzAPP19ADz9fQA8vT0APP19ADy9PQA8vT0APP19ADz9fQA8vT0APL09ADy9PQA8/X0APT29AD09vQA8/X0APL09ADy9PQA8/X0APT29AD09vQA9Pb0APT29AD09vQA8/X0APT29AD09vQA8/X0APT29AD09vQA8/X0APT29AD09vQA9Pb0APT29AD09vQA8/bzAPP28wDz9fMA9Pb0APT29ADz9fMA9Pb0APX39QD09vQA8/XzAPP18wD09vQA9ff1APX39QD09vQA9Pb0APT29AD09vQA9ff1APT29AD09vQA9ff1APX39QD09vQA8/XzAPP28wD09vMA9PbzAPT19ADg2MQA4djFAOHZxgDi2scA4dnGAOLZxgDi2scA4trHAOLaxwDg2scA4dvIAOHcyQDi3MkA4tzJAOLcyQDi3MkA4tzJAOLdygDi3coA497KAOPeywDj3soA497LAOPeygDj3soA493KAOPeygDj3soA493KAOLdygDj3ssA497LAOPezADk3swA5N/MAOTfzQDl4M4A5eDOAObhzwDl4c8A5uLQAObi0ADn4tAA5uLRAOfj0QDn49IA5+PSAOfk0gDn5NIA5+TSAOjl0wDo5dMA6OXUAOnm1ADp5tQA6ebVAOrn1gDq59YA6+fWAOvn1wDr59cA7OjXAOvo1wDq59cA6ejYAOro2QDp59kA6ujaAOro2gDq6NoA6ujaAOrp2gDq6dsA6urbAOvq3ADr6tsA6+rcAOvq3ADs69wA7OvdAOzr3QDs690A7OveAOzr3gDs694A7ezfAOzr3gDs7N8A7OvfAOzs3wDs7N8A7ezgAO3t4ADt7eAA7ezgAO7s4ADt7eAA7e3gAO3s4ADt7eAA7e3gAO3s4ADt7eAA7ezgAO3s4ADt7OAA7ezgAOzr3wDs698A7OvfAOvq3wDr6t0A6+rcAOrp2wDq6doA6ejaAOnn2ADo5tcA6ObWAOfk1ADn4tMA5uHRAOXgzwDk384A493LAOPdywDi28kA4trIAODZxgDf2MUA39fDAN/WwwDe1sIA3tXBAN7VwQDe1cAA39bBAN/WwgDf2MMA4dnGAOLaxwDh3MkA493LAOTgzgDm4c8A5+PSAOfl1ADp5tcA6enZAOvp3ADs690A7ezgAO7u5ADv7uQA8fDlAPHx5gDx8egA8fLpAPHy6gDy8+wA8fTsAPH07QDy8+4A8vTuAPP07wDy8+8A8/TwAPP08ADz9PAA9PXxAPX08gD09fEA9PXxAPT18gD09fIA9PXyAPP18wDy9fQA8vTzAPP09ADz9fMA8/X0APL09ADz9fQA8/X0APL09ADy9PQA8vT0APP18wDz9fQA8vTzAPL08wDz9fQA8/X0APP19ADy9PQA8vT0APP19ADz9fQA8vT0APP19ADy9fMA8/X0APP19ADz9fQA8/X0APL18QDx9fEA8/XyAPP18wDz9fMA8/XzAPP18QDz9fEA8/XxAPP08QDz9fEA9PXxAPT08gD09PEA8/XxAPP18QDz9PEA8/XzAPP18wDz9PMA8/TzAPP19ADz9fQA8/X0APP19ADz9fQA8/XzAPP18wDz9fMA8/X0APP19ADy9fMA8/X0APL09ADz9fQA8vT0APL09ADy9PQA8/X0APP19ADy9PQA8/X0APP19ADz9fQA8vT0APP19ADz9fQA9Pb0APP19ADz9fQA8/X0APP19ADz9fQA9Pb0APT29ADz9fQA9Pb0APP19ADz9fQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29ADz9fMA9Pb0APT29ADz9fMA9Pb0APT29ADz9fMA9Pb0APT29AD09vQA9Pb0APT29AD19/UA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA8/XzAPT29AD09vQA9Pb0APT29ADh2cYA4NnGAODaxwDg2scA4drHAOHaxwDh2scA4drHAOHbyADg28gA4dvIAOLbyQDi28gA4tvIAOHbyADh3MkA4tzIAOLdygDi3ckA4t7JAOLeyQDj3ckA497KAOLdyQDi3ckA4tzJAOLcyQDh3MkA4dvIAOHcyQDj3MgA4tzIAOLbyADj3MgA4t3JAOLdyQDi3coA4t3KAOPdywDk3s0A5N/NAOTezADl380A5N/NAOXgzgDk4c8A5OHPAObizwDm4tAA5eLQAObi0QDm4tEA5+PRAOfj0gDn5NIA5+XSAOjl1ADo5dQA6OXUAOrn1gDo5dQA6ebVAOnm1QDp5tUA6ebVAOnm1QDp5tUA6ebVAOnn1gDq59YA6ufWAOnn1gDp59cA6efXAOrn2ADq6NgA6ujYAOro2ADr6dkA6+nZAOvp2QDs6doA6+naAOvp2gDr6dsA7OnaAOvp2wDr6tsA6+rbAOzq3ADs6twA7OrcAOzq3ADs6twA6+vdAOvr3QDr690A6+rdAOzq3ADr6t0A6+vdAOvq3ADs690A7OrcAOzq3ADr6dsA6+nbAOzp2wDr6NoA6unZAOrn2QDp59kA6ObXAOjm1gDo5dYA6OXVAOfk0wDm4tAA5uHQAOXfzgDl3s0A493LAOLbyQDh2sgA4dnGAODXxADe1cIA3tS/AN/TvgDd070A3NC7ANrPugDaz7kA2s64ANrOuADZzbgA28+5ANvQuQDb0bsA3dK8AN7UvwDg1sEA4djEAOLaxwDj3MsA5d/OAOfi0ADn5NIA5+bVAOrn2QDq6tsA7OvfAO3s4QDv7uIA7+/kAPDw5QDw8OcA8PHpAPHy6gDx8+sA8PPqAPHz7QDy9O4A8fPtAPL07gDz8/AA8/PwAPLz7wDy8+8A8/TwAPT18QD09PEA9PXxAPT18QD09fEA9PXwAPP18wDy9fQA8vX0APH18wDy9PQA8vT0APL19ADy9PQA8/T0APP09ADz9fQA8vT0APP19ADy9fMA8vTzAPL09ADy9fMA8/X0APP19ADz9fQA8/T0APP09ADz9PQA8/X0APP09ADz9PQA8vTzAPH18gDy9PMA8/X0APL18QDx9PAA8/XyAPT08wD09fMA9PTyAPT18AD09PAA9PXwAPT18QDz9PAA8/TwAPT18QD09fEA8/TwAPP08AD09fAA9PXzAPT18wD09fMA8/XyAPH18QDx9fEA8vXzAPL18wDx9fMA8vXzAPT18wDy9fMA8fXzAPL18wDy9fQA8vX0APL19ADy9fQA8vX0APL19ADy9fQA8/X0APP19ADz9fQA8/T0APL08wDy9PQA8vT0APP19ADz9fQA8/X0APL09ADy9PQA8vT0APL09ADz9fQA8/X0APP19AD09vQA8/X0APP19AD09vQA9Pb0APP19AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA8/XzAPP18wD09vQA8/XzAPP18wD09vQA9Pb0APP18wD09vQA8/XzAPP18wD19/UA9ff1APX39QD09vQA8/XzAPP18wDz9fMA8/XzAPT29AD09vQA8/XzAPT29ADz9fQA9Pb0APT29ADg2scA4NrIAOHbyQDg28kA4NzJAODbyQDg28kA4dvJAOHbyADh28gA4tzIAOHcyADh3MgA4dzIAOLdyQDi3ckA4t3JAOPeygDj3soA497KAOPfywDi3soA493JAOLeygDi3ckA4d3IAOHcyQDi3MkA4dvIAOHbyADh28cA4dvHAOLbyADi28gA4tvIAOLbxwDh28gA4tzJAOLbyQDi3MkA4d3KAOLdygDj3skA497LAOPezADj3swA497MAOTfzQDl4c8A4+DPAOThzwDl4tAA5uHRAObi0QDm4tEA5uLQAOfj0QDn49IA5+TTAOfk0wDo5NMA5+TTAOfk0wDn5NMA6OXUAOfk0wDm49IA5+TTAOjk0wDn5NMA5+TTAOfk0wDo5dQA6OXUAOnm1QDq59YA6ufWAOrn1gDp59YA5+fWAOjn1gDo59YA6efXAOnn1wDp59cA6efXAOro2ADq6NcA6ejYAOno2ADq6NoA6ujaAOno2ADp6NgA6ejaAOno2QDq6NkA6ujaAOro2gDq6NoA6ujaAOro2ADp6NgA6ujXAOro1wDp6NcA6ejXAOnn1gDo5tYA6ObVAOjl1ADo5NMA5+PSAOfi0gDm4dEA5eDPAOPezQDk3cwA4tzKAOHayADh2ccA4NfDAN/WwwDe1MAA3dK9ANvRuwDaz7kA2cy3ANjLtQDWybQA1seyANbGsQDWxK8A1MWtANTErQDUxa0A1cWuANbGrwDXyLEA2MqzANnMtQDaz7gA3dO8AN/VwADh2MMA4tvIAOTdywDm4c8A5+PSAOrm1gDq6NgA6+rbAOzr3gDt7OEA7u7jAO7w5QDx7+cA8fDnAPDx6QDx8uoA8vPqAPHy7QDx8+4A8vTuAPH07QDy9O4A8vTuAPP08ADy8+8A8vPvAPP08AD09fEA9PXxAPT18QDz9PAA8/XwAPT18QD09fIA9PXxAPP18QD09fIA9PXyAPP08QDz9fEA8vbyAPL18QDx9PAA8vTyAPL18wDx9PEA8vXxAPP18wDz9PQA8vXzAPL18wDz9fQA8fXyAPL18wDy9fMA8vTzAPL18gDz9vEA8vXyAPH08wDy9fEA8vTwAPL08ADx9fEA8/XxAPT18QDz9PAA9PXxAPT18AD09fEA8/TwAPP08ADz9PAA8/TwAPT18QD09fEA8/TwAPT18QD09fEA8/TwAPT18QD09fEA8/TxAPP18ADz9fEA8/XxAPP18QDz9fEA8/XxAPT18QDz9fEA8/XxAPP18QDz9fEA8/XxAPP18QDz9fEA8/XxAPT18wD09fMA8fXyAPL18wDx9fIA8vXzAPP19ADz9fQA8vXzAPL09ADy9PMA8/T0APP09ADz9fQA8/X0APL09ADz9fQA9Pb0APT29ADz9fQA8/X0APP19ADy9PQA8/X0APT29ADz9fQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APT29AD09vQA9Pb0APP18wD09vQA9Pb0APP18wDz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6NoA6OjaAOnp2gDo59oA6OfbAOjn2wDo6NsA6OfbAOjn2wDo6NwA6OfbAOjn3ADp59wA6OfcAOjn2wDo59sA6OfbAOjn2wDp590A6efdAOjo3ADo6NwA6ejdAOno3gDp6N4A6eneAOrp3gDp6d4A6enfAOnp3gDp6d4A6ejeAOno3gDp6N0A6ejdAOno3ADp6N0A6ejdAOno3QDo6N4A6ejeAOjo3gDo594A6OfdAOjn3ADo59sA6OfcAOfn3ADn5toA5uXZAObl2ADk49YA4+LVAOLg0wDh3c8A39nMAN3XyADa08MA18++ANXKuADRxbMAzL+sAMi5pgDAsp8Au6uYALSkkgCvm4kAp5SAAKCMeACahXEAlH9qAI96ZQCLdmEAh3JdAIRwWQCCbFUAgWpRAH9oTwB+aE8AgGlPAINqUACJcFUAknhdAJ6DaQCoj3oAs52JAL6qmQDGtaUAz76uANTGtwDYzb8A3NPFAN/YzADj3dAA4+DWAOXk2QDo590A6engAOrr5ADs7OYA7O3oAO3v6gDu7+oA8PHsAPHw7QDw8e4A8fLxAPLy8QDy8/EA8vTyAPH08gDx9PIA8fXzAPH08gDx9fMA8vXzAPL08wDy9fMA8/X0APP09ADz9fQA8/X0APP19ADy9fMA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADy9fMA8/X0APP19ADz9fQA8vXzAPH18gDy9fMA8vXzAPL08wDy9fIA8fTwAPLz7wDx8+8A8vTwAPLz7wDy8+4A8vTuAPHz7QDx9O0A8vTtAPHz7gDx9O0A8vTuAPLz7gDy9O4A8fTtAPH07QDy9O4A8/TvAPP07gDy8+8A8/TwAPP08ADz9PAA9PXxAPT18QD09fEA9PXxAPT18QDz9PAA8/TwAPP08ADz9PAA8/TwAPLz7wDy8+8A8vPvAPP08ADz9PAA9PXxAPT18QDz9PAA8/TwAPT18QD09fEA9PXxAPP08AD09fEA9PXxAPP08AD09fEA9PXxAPL18QDx9fAA9PXxAPT18QDx9PAA8fXxAPP28QDy9fEA8vTzAPP19ADz9fQA8/X0APP19ADz9fQA8/X0APP19ADz9fQA8/X0APL09AD09vQA9Pb0APL09ADz9fQA9Pb0APT29AD09vQA8/XzAPP18wD09vMA8/XzAPT29AD0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9PMA8vX0APL19QDy9fQA8vX0APH29QDy9fQA8vX0APL29QDy9vUA8fX0APH19ADx9fQA8fX0APH19ADy9vUA8vb1APL29QDy9vUA8vb1APL29QDx9fQA8fX0APL29QDy9vQA8vb1APL29QDy9vUA8vb1APL29QDy9vUA8vX0APL09ADy9fQA8fT0APH08wDx9PMA8fTzAPH18wDx9fMA8PTyAPD08gDx9PIA8PTyAPD08QDw8vAA8PLvAO7x7QDu8e0A7fDsAOzv6gDs7+kA6+7pAOns5wDq6+UA6erkAObo4ADl5t4A4+PaAOLg1gDe29EA2tbJANbPwQDNxbQAxLqqALywnwCzpZQAq5yJAKGRfQCWhHAAiHdjAH5sVwBzYEgAalY/AGdSOgBlUDgAZE43AGNONgBiTTQAZU01AGxXQQB/bFwAk39xAKKRhQCwn5YAu6uiAMS2rADMvrQA0ca8ANbOxADb1MoA3NjRAN/c1QDk4toA5ebdAOXn4QDo6eQA6ermAOvs6ADr7uoA7fDsAO/x7wDv8vAA7vLwAO/z8gDw8/IA7/PyAPH09ADy9fUA8vX1APH19QDx9PQA8vT1APL19QDy9fUA8vX1APL09QDy9fUA8vX1APL19QDy9PUA8vX1APL19QDy9fUA8vT1APL09QDy9fUA8vX1APL09QDy9fUA8vX1APL19QDx9fQA8PX0APD18wDx9fMA8PTyAPD08gDx8/EA8fPxAPHz8QDx8/AA8PTuAPDz7wDx9O8A8PPuAO/y7QDv8u4A8PPuAPH07gDx8+0A8PLtAPHy7gDx8+sA8fPrAPHy6gDx8+sA8fTsAPHz6wDx8uoA8fPrAPH07ADx9OwA8PPrAPHz6wDy9OsA8fPtAPL07gDx8+4A8vTuAPL07gDy9O4A8vTuAPL07gDy9O4A8fTtAPH07QDx9O0A8fTtAPL07gDz9O8A8vTuAPH07QDy8+8A8vPvAPLz7wDy9PAA8fPvAPLz7wDx9PAA8vXyAPH08gDx9PIA8vXyAPL18gDy9PMA8fXyAPL18wDz9fQA8/X0APL18wDz9fQA8vT0APP19AD09vQA8/X0APT29ADz9fQA8vT0APP19ADz9fQA9Pb0APT29AD09vMA9PX0APT19QDz9fUA8vf1APP29QD19fYA8/X1APL29QD09vYA9fX1APP29gDz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8+4A8fPuAPHz7gDw9OsA8PPrAPHy6gDx8uoA8fLqAPHz6wDx8+sA8fPrAPH07ADx8+sA8fLqAPHz6wDx9OwA8fTrAPH06wDx8+4A8vTtAPL07gDy9O4A8fTtAPH07QDy9O4A8vTuAPL07gDx9O0A8fTtAPL07gDz9O8A8vLvAPHy7wDy8+8A8vTvAPH07wDy8/AA8vTwAPL18QDy9fAA8fTxAPH08gDy9fMA8vXzAPP19ADy9PMA8/X0APP19ADy9PQA8vTzAPL08wDz9PQA9PT1APT19AD09vMA9PbzAPT18wDz9vQA8vf1APL29QDx9fUA8vb1APL29QDz9/YA8vb1APL29QDy9vUA8/f2APL29QDy9vUA8/f2APP39gDy9vUA8vb1APP39gDz9/YA8/f2APP39gD0+PcA9Pj3APP39gD0+PcA9Pf2APP49wDz+PcA8/j3APP49wDz+PcA8/f2APP39gD0+PcA8/f2APP39gDZ5dIA2OTSANnl0gDZ5dIA2OXRANjl0gDX5NMA1+TTANjl0gDZ5tMA2ufUANrn1ADa59UA2+jVANzo1gDb6dYA3OjWANzp1gDc6dgA3OnZAN3p2QDd6dkA3unaAN/q2wDh6twA4evdAOLs3gDk7uEA5u7jAOjv5QDp8ecA6vLoAOzz6wDt9O0A7vTvAO/08ADw9PIA8fXzAPH18wDx9fMA8vX0APL29ADx9vQA8vX0APL29QDx9vUA8fX0APH19ADy9vUA8vb1APL29QDy9vUA8vb1APH19ADy9vUA8vb1APL29QDz9/YA8vb1APL29QDz9/YA8vb1APL29QDz9/YA8vb1APP39gDy9vUA8/f2APP39gDz9/YA8vb1APP39gDz9/YA8/f2APP39gDz9/YA8/f2APP39gDz9/YA8/f2APP39gDz9/YA8/f2APP39gDz9/YA8/f2APP39gDy9vUA8vb1APP39gDy9vUA8vb1APP39gDy9vUA8fX0APL29QDy9vUA8fX0APL29QDy9fQA8vX0APL19ADy9PQA8fXzAPD08gDw8+8A7/PuAO7y7QDt8OsA7O/qAOvu6QDq7egA6eznAOjr5QDo6+MA5+nhAOXn3wDj49oA397TANrXyQDSzL0AyMCuAL2zoQCzqJUAqp2KAKCTfgCUhXAAiHdhAHtpUQBuW0IAaFQ8AGdSOgBm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8+kA7vPpAO7z6QDw8+kA8PPpAO/z6ADw8+kA8PPpAPDz6QDw8+kA8PPpAPDz6QDw8+kA8fTqAPHz6gDw8+wA8fTsAPDz7ADy9OsA8vPsAPDz7gDx9O0A8vTuAPL07wDw9O8A8PTvAPD07wDw9O8A8PTuAPH07wDy9PAA8vPvAPHz7wDy9PAA8vTwAPL18QDx9fEA8vXzAPP19ADy9PMA8/X0APT29AD09vMA9PbzAPL29ADx9vUA8fb1APL19ADx9fQA8fX0APL29QDz9/YA8vb1APP39gDy9vUA8/f2APP39gDz9/YA8/f2APL29QDz9/YA9Pj3APT49wD0+PcA9Pj3APP39gD0+PcA9Pj3APT49wD0+PcA8/f2APP39gD0+PcA9Pj3APP39gD1+fgA9Pj3APP39gD0+PcA9Pj3APT49wD0+PcA8/f2APT49wD1+fgA9Pj3APP39gD0+PcA8/f2APT49wD0+PcA8vb1APL29QDd5tYA3ebWAN7n1gDe5tYA3ubWAN/o2ADf6NgA3+jZAODo2QDh6doA4enaAOHq2gDi6tsA4urcAOHp2wDi6twA4urcAOPq3wDj698A5OvgAOXt4ADm7uIA6O/kAOnx5gDq8ucA6/LpAOzy6QDt8+wA7fPuAO707wDv9PIA7/TyAO/08QDw9fIA8fXzAPH18wDx9fMA8fb0APL39ADx9vQA8vfzAPH29ADy9vUA8vb1APL39gDy9vUA8vf2APL29QDy9/YA8vf2APL39gDy9/YA8vf2APL39gDy9vUA8vb1APL39gDx9/YA8vf2APL39gDx9/YA8vf2APL39gDy9/YA8ff2APL39gDy9/YA8vf2APH39gDy9/YA8vf2APL39gDy9/YA8vf2APL39gDy9/YA8vf2APL39gDy9/YA8vf2APH29QDy9/YA8vf2APL29QDy9/YA8ff2APL39gDy9/YA8vb1APL29QDy9/YA8vb1APL19ADy9fQA8vb1APL29QDy9vUA8vb1APL19ADy9vUA8vX1APH29ADw9vMA8fX0APH08wDx9fMA7/PxAO7z7gDt8+0A7PHrAOvw6QDq7+gA6e3mAOjr4wDn6+MA5ungAOPn3ADh49gA3d3PANjVxQDRzLoAx8CtAL21oQCzqZUAp52FAJqOdACLf2YAf3FXAHZlSgBvXEQAbVdAAGtWPwBr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7+MA7O/jAOzv4gDt8OQA7fDkAO3w5QDt8OUA7vLkAO7x5ADu8eYA7vHmAO7x5gDv8ugA7/LpAPDz6ADw8+gA8PLpAPH06gDw8+oA8PTrAPH07ADw8+wA8PTsAPHz7QDx9O4A8fTuAPH07gDx9O4A8fTuAPH07gDw9O4A8fPvAPLz8ADx9O8A8fTvAPLz7wDy9PAA8fXxAPL08QDz9fMA8/X0APP08wDy9fQA8fX0APL19ADy9vUA8fX0APL29QDy9vUA8/f2APP39gDy9vUA8/f2APP39gDz9/YA8/f2APP39gDz9/YA9Pj3APP39gD0+PcA9Pj3APT49wD0+PcA9Pj3APT49wD0+PcA9Pj3APT49wD0+PcA8/f2APT49wD0+PcA8/f2APT49wD0+PcA9Pj3APT49wD0+PcA9Pj3APT49wD0+PcA9Pj3APP39gD0+PcA8/f2APP39gD0+PcA9Pj3APT49wDz9/YA8vb1APL29QDe5tYA3+bXAN/n2QDf59kA3+fZAODo2gDg6doA4enaAOLq2wDi6d0A4+reAOPr3gDj6t4A5OvgAOXr4ADk6+EA5ezhAOXs4QDn7uIA6O7iAOnv5ADq8ecA6/LpAOzy6wDt8+0A7fTvAO3z7gDu8+8A8PXzAO/18wDx9PMA8fXzAPL19ADy9vQA8vfzAPL29ADx9fUA8vX1APL19QDy9fUA8vX1APL19QDx9fQA8/b1APP39gDz9/YA8/f2APH29QDy9/YA8/f2APL39gDx9/YA8fb1APH39gDx9/YA8ff2APH29QDy9/YA8ff2APH29QDy9/YA8vb1APL39gDy9/YA8vf2APL39gDy9/YA8vf2APL29QDy9/YA8vf2APL39gDy9vUA8vf2APL39gDy9/YA8vf2APL39gDy9/YA8fb1APL39gDy9/YA8fb1APL39gDy9/YA8vf2APL39gDy9fQA8vf2APL19ADy9/YA8vb1APL39gDy9/YA8vb1APL19ADy9vUA8vb1APL19QDx9vQA8vfzAPH28wDw9vQA8fXzAPD08gDw9e8A7/PvAO3y7gDt8ewA7PLrAOzx6ADr7+cA6e3lAOfr4wDn6uAA5ejdAOLl2ADh4dMA29vMANfUwQDPyrUAxL6qALiynQCtpY0Aopd+AJWJcACJfWMAf3FXAHZnTQBxXEUAbFlCAGxYQQBr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 + Windows� API Code Pack for Microsoft� .NET Framework provides a source code library that can be used to access some features of Windows 7 and Windows Vista from managed code. These Windows features are not available to developers today in the .NET Framework. + + \ No newline at end of file diff --git a/source/Samples/HandlerSamples/ThumbnailProviderDemo.cs b/source/Samples/HandlerSamples/ThumbnailProviderDemo.cs new file mode 100644 index 00000000..643b540d --- /dev/null +++ b/source/Samples/HandlerSamples/ThumbnailProviderDemo.cs @@ -0,0 +1,42 @@ +using System; +using System.Drawing; +using System.IO; +using System.Runtime.InteropServices; +using Microsoft.WindowsAPICodePack.ShellExtensions; + +namespace HandlerSamples +{ + [ComVisible(true)] + [ClassInterface(ClassInterfaceType.None)] + [ProgId("HandlerSamples.XYZThumbnailer")] + [Guid("38AA8375-27EC-4EAF-955E-D7BDA633069F")] + [ThumbnailProvider("XYZThumbnailer", ".xyz", ThumbnailAdornment = ThumbnailAdornment.VideoSprockets)] + public class ThumbnailProviderDemo : ThumbnailProvider, IThumbnailFromStream, IThumbnailFromFile + { + #region IThumbnailFromStream Members + + public Bitmap ConstructBitmap(Stream stream, int sideSize) + { + XyzFileDefinition file = new XyzFileDefinition(stream); + + using (MemoryStream mstream = new MemoryStream(Convert.FromBase64String(file.EncodedImage))) + { + return new Bitmap(mstream); + } + } + + #endregion + + #region IThumbnailFromFile Members + + public Bitmap ConstructBitmap(FileInfo info, int sideSize) + { + using (FileStream stream = new FileStream(info.FullName, FileMode.Open, FileAccess.Read)) + { + return ConstructBitmap(stream, sideSize); + } + } + + #endregion + } +} diff --git a/source/Samples/HandlerSamples/ThumbnailProviderDemo2.cs b/source/Samples/HandlerSamples/ThumbnailProviderDemo2.cs new file mode 100644 index 00000000..faa844bc --- /dev/null +++ b/source/Samples/HandlerSamples/ThumbnailProviderDemo2.cs @@ -0,0 +1,50 @@ +using System; +using System.Drawing; +using System.IO; +using System.Runtime.InteropServices; +using Microsoft.WindowsAPICodePack.ShellExtensions; + +namespace HandlerSamples +{ + [ComVisible(true)] + [ClassInterface(ClassInterfaceType.None)] + [ProgId("HandlerSamples.XYZThumbnailer2")] + [Guid("AB21A65F-E3E1-4D08-9422-29C7AB1BE0A5")] + [ThumbnailProvider("XYZThumbnailer2", ".xyz2", ThumbnailAdornment = ThumbnailAdornment.PhotoBorder, DisableProcessIsolation = true)] + public class ThumbnailProviderDemo2 : ThumbnailProvider, IThumbnailFromFile, IThumbnailFromShellObject + { + #region IThumbnailFromFile Members + + public Bitmap ConstructBitmap(FileInfo info, int sideSize) + { + using (FileStream stream = new FileStream(info.FullName, FileMode.Open, FileAccess.Read)) + { + XyzFileDefinition file = new XyzFileDefinition(stream); + + using (MemoryStream imageStream = new MemoryStream(Convert.FromBase64String(file.EncodedImage))) + { + return new Bitmap(imageStream); + } + } + } + + #endregion + + #region IThumbnailFromShellObject Members + + public Bitmap ConstructBitmap(Microsoft.WindowsAPICodePack.Shell.ShellObject shellObject, int sideSize) + { + using (FileStream stream = new FileStream(shellObject.ParsingName, FileMode.Open, FileAccess.Read)) + { + XyzFileDefinition file = new XyzFileDefinition(stream); + + using (MemoryStream imageStream = new MemoryStream(Convert.FromBase64String(file.EncodedImage))) + { + return (Bitmap)Image.FromStream(imageStream); + } + } + } + + #endregion + } +} diff --git a/source/Samples/HandlerSamples/WPFPreviewHandlerDemo.cs b/source/Samples/HandlerSamples/WPFPreviewHandlerDemo.cs new file mode 100644 index 00000000..b63f0f95 --- /dev/null +++ b/source/Samples/HandlerSamples/WPFPreviewHandlerDemo.cs @@ -0,0 +1,55 @@ +using System; +using System.IO; +using System.Runtime.InteropServices; +using Microsoft.WindowsAPICodePack.Shell; +using Microsoft.WindowsAPICodePack.ShellExtensions; + +namespace HandlerSamples +{ + [ComVisible(true)] + [ClassInterface(ClassInterfaceType.None)] + [ProgId("HandlerSamples.XYZPreviewerWPF")] + [Guid("B9E6A036-9778-4B48-BA45-33F15B9B07AF")] + [PreviewHandler("PreviewHandlerWPFDemo", ".xyz", "{EC3E84CC-BDC5-4E9F-A67F-CC960F366497}")] + public class WPFPreviewHandlerDemo : WpfPreviewHandler, IPreviewFromFile, IPreviewFromShellObject + { + public WPFPreviewHandlerDemo() + { + Control = new WpfPreviewHandlerDemoControl(); + } + + private void Populate(Stream stream) + { + XyzFileDefinition definition = new XyzFileDefinition(stream); + + if (definition != null) + { + ((WpfPreviewHandlerDemoControl)Control).Populate(definition); + } + } + + #region IPreviewFromFile Members + + public void Load(FileInfo info) + { + using (var stream = new FileStream(info.FullName, FileMode.Open, FileAccess.Read)) + { + Populate(stream); + } + } + + #endregion + + #region IPreviewFromShellObject Members + + public void Load(ShellObject shellObject) + { + using (var stream = new FileStream(shellObject.ParsingName, FileMode.Open, FileAccess.Read)) + { + Populate(stream); + } + } + + #endregion + } +} diff --git a/source/Samples/HandlerSamples/WinformsPreviewHandlerDemo.cs b/source/Samples/HandlerSamples/WinformsPreviewHandlerDemo.cs new file mode 100644 index 00000000..ef27e6b4 --- /dev/null +++ b/source/Samples/HandlerSamples/WinformsPreviewHandlerDemo.cs @@ -0,0 +1,162 @@ +using System; +using System.Drawing; +using System.IO; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.ShellExtensions; + +namespace HandlerSamples +{ + public class PreviewHandlerWinformsDemoControl : UserControl + { + public PreviewHandlerWinformsDemoControl() + { + InitializeComponent(); + + } + + public void Populate(XyzFileDefinition definition) + { + lblName.Text = definition.Properties.Name; + txtContent.Text = definition.Content; + + using (MemoryStream stream = new MemoryStream(Convert.FromBase64String(definition.EncodedImage))) + { + imageEncoded.Image = Image.FromStream(stream); + } + } + + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.txtContent = new System.Windows.Forms.TextBox(); + this.lblName = new System.Windows.Forms.Label(); + this.imageEncoded = new System.Windows.Forms.PictureBox(); + ((System.ComponentModel.ISupportInitialize)(this.imageEncoded)).BeginInit(); + this.SuspendLayout(); + // + // txtContent + // + this.txtContent.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtContent.Location = new System.Drawing.Point(12, 173); + this.txtContent.Multiline = true; + this.txtContent.Name = "txtContent"; + this.txtContent.ReadOnly = true; + this.txtContent.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.txtContent.Size = new System.Drawing.Size(269, 157); + this.txtContent.TabIndex = 0; + // + // lblName + // + this.lblName.AutoSize = true; + this.lblName.Location = new System.Drawing.Point(9, 9); + this.lblName.Name = "lblName"; + this.lblName.Size = new System.Drawing.Size(49, 13); + this.lblName.TabIndex = 1; + this.lblName.Text = "file name"; + // + // imageEncoded + // + this.imageEncoded.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.imageEncoded.Location = new System.Drawing.Point(12, 25); + this.imageEncoded.Name = "imageEncoded"; + this.imageEncoded.Size = new System.Drawing.Size(269, 142); + this.imageEncoded.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.imageEncoded.TabIndex = 2; + this.imageEncoded.TabStop = false; + // + // PreviewHandlerWinformsDemoControl + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Controls.Add(this.imageEncoded); + this.Controls.Add(this.lblName); + this.Controls.Add(this.txtContent); + this.Name = "PreviewHandlerWinformsDemoControl"; + this.Size = new System.Drawing.Size(293, 342); + ((System.ComponentModel.ISupportInitialize)(this.imageEncoded)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox txtContent; + private System.Windows.Forms.Label lblName; + private System.Windows.Forms.PictureBox imageEncoded; + } + + + [ComVisible(true)] + [ClassInterface(ClassInterfaceType.None)] + [ProgId("HandlerSamples.XYZPreviewerWinforms")] + [Guid("05BAC26E-94A8-4441-BA69-9894FE6BBFC4")] + [PreviewHandler("PreviewHandlerWinformsDemo", ".xyz2", "{5F877EE5-2317-4131-B8D5-6FF965881295}")] + public class WinformsPreviewHandlerDemo : WinFormsPreviewHandler, IPreviewFromShellObject, IPreviewFromStream + { + public WinformsPreviewHandlerDemo() + { + Control = new PreviewHandlerWinformsDemoControl(); + } + + #region IPreviewFromFile Members + + public void Load(FileInfo info) + { + using (FileStream stream = new FileStream(info.FullName, FileMode.Open, FileAccess.Read)) + { + Load(stream); + } + } + + #endregion + + #region IPreviewFromStream Members + + public void Load(Stream stream) + { + XyzFileDefinition definition = new XyzFileDefinition(stream); + ((PreviewHandlerWinformsDemoControl)Control).Populate(definition); + } + + #endregion + + #region IPreviewFromShellObject Members + + public void Load(Microsoft.WindowsAPICodePack.Shell.ShellObject shellObject) + { + Load(new FileInfo(shellObject.ParsingName)); + } + + #endregion + } + + +} diff --git a/source/Samples/HandlerSamples/WpfPreviewHandlerDemoControl.xaml b/source/Samples/HandlerSamples/WpfPreviewHandlerDemoControl.xaml new file mode 100644 index 00000000..20628da2 --- /dev/null +++ b/source/Samples/HandlerSamples/WpfPreviewHandlerDemoControl.xaml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + diff --git a/source/Samples/HandlerSamples/WpfPreviewHandlerDemoControl.xaml.cs b/source/Samples/HandlerSamples/WpfPreviewHandlerDemoControl.xaml.cs new file mode 100644 index 00000000..44625798 --- /dev/null +++ b/source/Samples/HandlerSamples/WpfPreviewHandlerDemoControl.xaml.cs @@ -0,0 +1,30 @@ +using System; +using System.IO; +using System.Windows.Media.Imaging; +using System.Windows.Controls; +using System.Windows; + +namespace HandlerSamples +{ + /// + /// Interaction logic for WpfPreviewHandlerDemoControl.xaml + /// + public partial class WpfPreviewHandlerDemoControl : UserControl + { + public WpfPreviewHandlerDemoControl() + { + InitializeComponent(); + } + + public void Populate(XyzFileDefinition definition) + { + MemoryStream stream = new MemoryStream(Convert.FromBase64String(definition.EncodedImage)); + + BitmapDecoder coder = BitmapDecoder.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.None); + imgEncodedImage.Source = coder.Frames[0]; + + txtContent.Text = definition.Content; + lblName.Content = definition.Properties.Name; + } + } +} diff --git a/source/Samples/HandlerSamples/XyzFileDefinition.cs b/source/Samples/HandlerSamples/XyzFileDefinition.cs new file mode 100644 index 00000000..1acbb366 --- /dev/null +++ b/source/Samples/HandlerSamples/XyzFileDefinition.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.IO; +using System.Xml.Linq; + +namespace HandlerSamples +{ + public class XyzFileDefinition + { + public XyzFileDefinition(Stream stream) + { + XDocument document = XDocument.Load(stream); + + Properties = new XyzFileProperties(document.Root.Element("XyzFileProperties")); + EncodedImage = document.Root.Element("EncodedImage").Value; + Content = document.Root.Element("Content").Value; + } + + public XyzFileProperties Properties { get; private set; } + public string EncodedImage { get; private set; } + public string Content { get; private set; } + } + + public class XyzFileProperties + { + public XyzFileProperties(XElement properties) + { + Author = properties.Element("Author").Value; + Name = properties.Element("Name").Value; + Rating = int.Parse(properties.Element("Rating").Value); + Region = properties.Element("Region").Value; + } + + public string Name { get; private set; } + public string Author { get; private set; } + + public int Rating { get; private set; } + public string Region { get; private set; } + } +} diff --git a/source/Samples/NetworkDemo/CS/App.xaml b/source/Samples/NetworkDemo/CS/App.xaml new file mode 100644 index 00000000..c14c9463 --- /dev/null +++ b/source/Samples/NetworkDemo/CS/App.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/NetworkDemo/CS/App.xaml.cs b/source/Samples/NetworkDemo/CS/App.xaml.cs new file mode 100644 index 00000000..461b3585 --- /dev/null +++ b/source/Samples/NetworkDemo/CS/App.xaml.cs @@ -0,0 +1,13 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Windows; + +namespace Microsoft.WindowsAPICodePack.Samples.NetworkDemo +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/source/Samples/NetworkDemo/CS/NetworkDemo.csproj b/source/Samples/NetworkDemo/CS/NetworkDemo.csproj new file mode 100644 index 00000000..9475d27b --- /dev/null +++ b/source/Samples/NetworkDemo/CS/NetworkDemo.csproj @@ -0,0 +1,156 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {D700D10F-A974-4072-BE67-E2F712F9E055} + WinExe + Properties + Microsoft.WindowsAPICodePack.Samples.NetworkDemo + NetworkDemo + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + + + + + + + 3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + App.xaml + Code + + + Window1.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/NetworkDemo/CS/NetworkDemo.sln b/source/Samples/NetworkDemo/CS/NetworkDemo.sln new file mode 100644 index 00000000..34600381 --- /dev/null +++ b/source/Samples/NetworkDemo/CS/NetworkDemo.sln @@ -0,0 +1,27 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetworkDemo", "NetworkDemo.csproj", "{D700D10F-A974-4072-BE67-E2F712F9E055}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D700D10F-A974-4072-BE67-E2F712F9E055}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D700D10F-A974-4072-BE67-E2F712F9E055}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D700D10F-A974-4072-BE67-E2F712F9E055}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D700D10F-A974-4072-BE67-E2F712F9E055}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/NetworkDemo/CS/Properties/AssemblyInfo.cs b/source/Samples/NetworkDemo/CS/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..6c1046a6 --- /dev/null +++ b/source/Samples/NetworkDemo/CS/Properties/AssemblyInfo.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Network List Demo")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/NetworkDemo/CS/Properties/Resources.Designer.cs b/source/Samples/NetworkDemo/CS/Properties/Resources.Designer.cs new file mode 100644 index 00000000..7a70b0e8 --- /dev/null +++ b/source/Samples/NetworkDemo/CS/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3521 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.NetworkDemo.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.WindowsAPICodePack.Samples.NetworkDemo.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/NetworkDemo/CS/Properties/Resources.resx b/source/Samples/NetworkDemo/CS/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/NetworkDemo/CS/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/NetworkDemo/CS/Properties/Settings.Designer.cs b/source/Samples/NetworkDemo/CS/Properties/Settings.Designer.cs new file mode 100644 index 00000000..3c949e34 --- /dev/null +++ b/source/Samples/NetworkDemo/CS/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3521 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.NetworkDemo.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/NetworkDemo/CS/Properties/Settings.settings b/source/Samples/NetworkDemo/CS/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/NetworkDemo/CS/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/NetworkDemo/CS/Window1.xaml b/source/Samples/NetworkDemo/CS/Window1.xaml new file mode 100644 index 00000000..cdcb2b52 --- /dev/null +++ b/source/Samples/NetworkDemo/CS/Window1.xaml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/NetworkDemo/CS/Window1.xaml.cs b/source/Samples/NetworkDemo/CS/Window1.xaml.cs new file mode 100644 index 00000000..228b4118 --- /dev/null +++ b/source/Samples/NetworkDemo/CS/Window1.xaml.cs @@ -0,0 +1,87 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Windows; +using System.Windows.Controls; +using System.Text; +using Microsoft.WindowsAPICodePack.Net; + +namespace Microsoft.WindowsAPICodePack.Samples.NetworkDemo +{ + /// + /// Interaction logic for Window1.xaml + /// + public partial class Window1 : Window + { + public Window1() + { + InitializeComponent(); + + LoadNetworkConnections(); + } + + private void LoadNetworkConnections() + { + NetworkCollection networks = NetworkListManager.GetNetworks(NetworkConnectivityLevels.All); + + foreach (Network n in networks) + { + // Create a tab + TabItem tabItem = new TabItem(); + tabItem.Header = string.Format("Network {0} ({1})", tabControl1.Items.Count, n.Name); + tabControl1.Items.Add(tabItem); + + // + StackPanel stackPanel2 = new StackPanel(); + stackPanel2.Orientation = Orientation.Vertical; + + // List all the properties + AddProperty("Name: ", n.Name, stackPanel2); + AddProperty("Description: ", n.Description, stackPanel2); + AddProperty("Domain type: ", n.DomainType.ToString(), stackPanel2); + AddProperty("Is connected: ", n.IsConnected.ToString(), stackPanel2); + AddProperty("Is connected to the internet: ", n.IsConnectedToInternet.ToString(), stackPanel2); + AddProperty("Network ID: ", n.NetworkId.ToString(), stackPanel2); + AddProperty("Category: ", n.Category.ToString(), stackPanel2); + AddProperty("Created time: ", n.CreatedTime.ToString(), stackPanel2); + AddProperty("Connected time: ", n.ConnectedTime.ToString(), stackPanel2); + AddProperty("Connectivity: ", n.Connectivity.ToString(), stackPanel2); + + // + StringBuilder s = new StringBuilder(); + s.AppendLine("Network Connections:"); + NetworkConnectionCollection connections = n.Connections; + foreach (NetworkConnection nc in connections) + { + s.AppendFormat("\n\tConnection ID: {0}\n\tDomain: {1}\n\tIs connected: {2}\n\tIs connected to internet: {3}\n", + nc.ConnectionId, nc.DomainType, nc.IsConnected, nc.IsConnectedToInternet); + s.AppendFormat("\tAdapter ID: {0}\n\tConnectivity: {1}\n", + nc.AdapterId, nc.Connectivity); + } + s.AppendLine(); + + Label label = new Label(); + label.Content = s.ToString(); + + stackPanel2.Children.Add(label); + tabItem.Content = stackPanel2; + } + + } + + private void AddProperty(string propertyName, string propertyValue, StackPanel parent) + { + StackPanel panel = new StackPanel(); + panel.Orientation = Orientation.Horizontal; + + Label propertyNameLabel = new Label(); + propertyNameLabel.Content = propertyName; + panel.Children.Add(propertyNameLabel); + + Label propertyValueLabel = new Label(); + propertyValueLabel.Content = propertyValue; + panel.Children.Add(propertyValueLabel); + + parent.Children.Add(panel); + } + } +} diff --git a/source/Samples/NetworkDemo/VB/Application.xaml b/source/Samples/NetworkDemo/VB/Application.xaml new file mode 100644 index 00000000..c14c9463 --- /dev/null +++ b/source/Samples/NetworkDemo/VB/Application.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/NetworkDemo/VB/Application.xaml.vb b/source/Samples/NetworkDemo/VB/Application.xaml.vb new file mode 100644 index 00000000..ca3753ea --- /dev/null +++ b/source/Samples/NetworkDemo/VB/Application.xaml.vb @@ -0,0 +1,14 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Windows + +Namespace Microsoft.WindowsAPICodePack.Samples.NetworkDemo + ''' + ''' Interaction logic for App.xaml + ''' + Partial Public Class App + Inherits Application + End Class +End Namespace diff --git a/source/Samples/NetworkDemo/VB/My Project/AssemblyInfo.vb b/source/Samples/NetworkDemo/VB/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..48f45eed --- /dev/null +++ b/source/Samples/NetworkDemo/VB/My Project/AssemblyInfo.vb @@ -0,0 +1,56 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Resources +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + + '(used if a resource is not found in the page, + ' or application resource dictionaries) + '(used if a resource is not found in the page, + ' app, or any theme specific resource dictionaries) + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/NetworkDemo/VB/My Project/Resources.Designer.vb b/source/Samples/NetworkDemo/VB/My Project/Resources.Designer.vb new file mode 100644 index 00000000..e96b8aff --- /dev/null +++ b/source/Samples/NetworkDemo/VB/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/NetworkDemo/VB/My Project/Resources.resx b/source/Samples/NetworkDemo/VB/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/NetworkDemo/VB/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/NetworkDemo/VB/My Project/Settings.Designer.vb b/source/Samples/NetworkDemo/VB/My Project/Settings.Designer.vb new file mode 100644 index 00000000..f2ffe239 --- /dev/null +++ b/source/Samples/NetworkDemo/VB/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class Settings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()),Settings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As Settings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Settings + Get + Return Global.Settings.Default + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/NetworkDemo/VB/My Project/Settings.settings b/source/Samples/NetworkDemo/VB/My Project/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/NetworkDemo/VB/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/NetworkDemo/VB/NetworkDemo.sln b/source/Samples/NetworkDemo/VB/NetworkDemo.sln new file mode 100644 index 00000000..e392c82b --- /dev/null +++ b/source/Samples/NetworkDemo/VB/NetworkDemo.sln @@ -0,0 +1,27 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NetworkDemo", "NetworkDemo.vbproj", "{D700D10F-A974-4072-BE67-E2F712F9E055}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D700D10F-A974-4072-BE67-E2F712F9E055}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D700D10F-A974-4072-BE67-E2F712F9E055}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D700D10F-A974-4072-BE67-E2F712F9E055}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D700D10F-A974-4072-BE67-E2F712F9E055}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/NetworkDemo/VB/NetworkDemo.vbproj b/source/Samples/NetworkDemo/VB/NetworkDemo.vbproj new file mode 100644 index 00000000..d7fbaa43 --- /dev/null +++ b/source/Samples/NetworkDemo/VB/NetworkDemo.vbproj @@ -0,0 +1,134 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {4C2C740C-F3CC-40F9-943B-34D61B4BD346} + WinExe + + + NetworkDemo + v3.5 + On + Binary + Off + On + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + + + + + + + 3.5 + + + true + full + false + bin\Debug\ + true + true + prompt + AllRules.ruleset + 42353,42354,42355 + + + pdbonly + true + bin\Release\ + false + true + prompt + AllRules.ruleset + 42353,42354,42355 + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + Application.xaml + Code + + + Window1.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + Designer + My.Resources + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + + + \ No newline at end of file diff --git a/source/Samples/NetworkDemo/VB/Window1.xaml b/source/Samples/NetworkDemo/VB/Window1.xaml new file mode 100644 index 00000000..cdcb2b52 --- /dev/null +++ b/source/Samples/NetworkDemo/VB/Window1.xaml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/NetworkDemo/VB/Window1.xaml.vb b/source/Samples/NetworkDemo/VB/Window1.xaml.vb new file mode 100644 index 00000000..6123705a --- /dev/null +++ b/source/Samples/NetworkDemo/VB/Window1.xaml.vb @@ -0,0 +1,81 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Windows +Imports System.Windows.Controls +Imports System.Text +Imports Microsoft.WindowsAPICodePack.Net + +Namespace Microsoft.WindowsAPICodePack.Samples.NetworkDemo + ''' + ''' Interaction logic for Window1.xaml + ''' + Partial Public Class Window1 + Inherits Window + Public Sub New() + InitializeComponent() + + LoadNetworkConnections() + End Sub + + Private Sub LoadNetworkConnections() + Dim networks As NetworkCollection = NetworkListManager.GetNetworks(NetworkConnectivityLevels.All) + + For Each n As Network In networks + ' Create a tab + Dim tabItem As New TabItem() + tabItem.Header = String.Format("Network {0} ({1})", tabControl1.Items.Count, n.Name) + tabControl1.Items.Add(tabItem) + + ' + Dim stackPanel2 As New StackPanel() + stackPanel2.Orientation = Orientation.Vertical + + ' List all the properties + AddProperty("Name: ", n.Name, stackPanel2) + AddProperty("Description: ", n.Description, stackPanel2) + AddProperty("Domain type: ", n.DomainType.ToString(), stackPanel2) + AddProperty("Is connected: ", n.IsConnected.ToString(), stackPanel2) + AddProperty("Is connected to the internet: ", n.IsConnectedToInternet.ToString(), stackPanel2) + AddProperty("Network ID: ", n.NetworkId.ToString(), stackPanel2) + AddProperty("Category: ", n.Category.ToString(), stackPanel2) + AddProperty("Created time: ", n.CreatedTime.ToString(), stackPanel2) + AddProperty("Connected time: ", n.ConnectedTime.ToString(), stackPanel2) + AddProperty("Connectivity: ", n.Connectivity.ToString(), stackPanel2) + + ' + Dim s As New StringBuilder() + s.AppendLine("Network Connections:") + Dim connections As NetworkConnectionCollection = n.Connections + For Each nc As NetworkConnection In connections + s.AppendFormat(Constants.vbLf + Constants.vbTab & "Connection ID: {0}" & Constants.vbLf + Constants.vbTab & "Domain: {1}" & Constants.vbLf + Constants.vbTab & "Is connected: {2}" & Constants.vbLf + Constants.vbTab & "Is connected to internet: {3}" & Constants.vbLf, nc.ConnectionId, nc.DomainType, nc.IsConnected, nc.IsConnectedToInternet) + s.AppendFormat(Constants.vbTab & "Adapter ID: {0}" & Constants.vbLf + Constants.vbTab & "Connectivity: {1}" & Constants.vbLf, nc.AdapterId, nc.Connectivity) + Next nc + s.AppendLine() + + Dim label As New Label() + label.Content = s.ToString() + + stackPanel2.Children.Add(label) + tabItem.Content = stackPanel2 + Next n + + End Sub + + Private Sub AddProperty(ByVal propertyName As String, ByVal propertyValue As String, ByVal parent As StackPanel) + Dim panel As New StackPanel() + panel.Orientation = Orientation.Horizontal + + Dim propertyNameLabel As New Label() + propertyNameLabel.Content = propertyName + panel.Children.Add(propertyNameLabel) + + Dim propertyValueLabel As New Label() + propertyValueLabel.Content = propertyValue + panel.Children.Add(propertyValueLabel) + + parent.Children.Add(panel) + End Sub + End Class +End Namespace diff --git a/source/Samples/PowerMgmtDemo/CS/PowerMgmtDemo.sln b/source/Samples/PowerMgmtDemo/CS/PowerMgmtDemo.sln new file mode 100644 index 00000000..f2adcca8 --- /dev/null +++ b/source/Samples/PowerMgmtDemo/CS/PowerMgmtDemo.sln @@ -0,0 +1,33 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PowerMgmtDemo", "PowerMgmtDemo\PowerMgmtDemo.csproj", "{1767FA65-426B-4555-9049-01DB8DCEA5A8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1767FA65-426B-4555-9049-01DB8DCEA5A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1767FA65-426B-4555-9049-01DB8DCEA5A8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1767FA65-426B-4555-9049-01DB8DCEA5A8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1767FA65-426B-4555-9049-01DB8DCEA5A8}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/PowerMgmtDemo/CS/PowerMgmtDemo/App.xaml b/source/Samples/PowerMgmtDemo/CS/PowerMgmtDemo/App.xaml new file mode 100644 index 00000000..ca7cab69 --- /dev/null +++ b/source/Samples/PowerMgmtDemo/CS/PowerMgmtDemo/App.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/PowerMgmtDemo/CS/PowerMgmtDemo/App.xaml.cs b/source/Samples/PowerMgmtDemo/CS/PowerMgmtDemo/App.xaml.cs new file mode 100644 index 00000000..7aadceaa --- /dev/null +++ b/source/Samples/PowerMgmtDemo/CS/PowerMgmtDemo/App.xaml.cs @@ -0,0 +1,13 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Windows; + +namespace Microsoft.WindowsAPICodePack.Samples.PowerMgmtDemoApp +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/source/Samples/PowerMgmtDemo/CS/PowerMgmtDemo/MyPowerSettings.cs b/source/Samples/PowerMgmtDemo/CS/PowerMgmtDemo/MyPowerSettings.cs new file mode 100644 index 00000000..a4fe15f9 --- /dev/null +++ b/source/Samples/PowerMgmtDemo/CS/PowerMgmtDemo/MyPowerSettings.cs @@ -0,0 +1,149 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.ComponentModel; + +namespace Microsoft.WindowsAPICodePack.Samples.PowerMgmtDemoApp +{ + internal class MyPowerSettings : INotifyPropertyChanged + { + string powerPersonality; + string powerSource; + bool batteryPresent; + bool upsPresent; + bool monitorOn; + bool batteryShortTerm; + int batteryLifePercent; + string batteryStateACOnline; + bool monitorRequired; + + #region INotifyPropertyChanged Members + + public event PropertyChangedEventHandler PropertyChanged; + + #endregion + + public string PowerPersonality + { + get { return powerPersonality; } + set + { + if (powerPersonality != value) + { + powerPersonality = value; + OnPropertyChanged("PowerPersonality"); + } + } + } + + public string PowerSource + { + get { return powerSource; } + set + { + if (powerSource != value) + { + powerSource = value; + OnPropertyChanged("PowerSource"); + } + } + } + public bool BatteryPresent + { + get { return batteryPresent; } + set + { + if (batteryPresent != value) + { + batteryPresent = value; + OnPropertyChanged("BatteryPresent"); + } + } + } + public bool UpsPresent + { + get { return upsPresent; } + set + { + if (upsPresent != value) + { + upsPresent = value; + OnPropertyChanged("UPSPresent"); + } + } + } + + public bool MonitorOn + { + get { return monitorOn; } + set + { + if (monitorOn != value) + { + monitorOn = value; + OnPropertyChanged("MonitorOn"); + } + } + } + public bool BatteryShortTerm + { + get { return batteryShortTerm; } + set + { + if (batteryShortTerm != value) + { + batteryShortTerm = value; + OnPropertyChanged("BatteryShortTerm"); + } + } + } + public int BatteryLifePercent + { + get { return batteryLifePercent; } + set + { + if (batteryLifePercent != value) + { + batteryLifePercent = value; + OnPropertyChanged("BatteryLifePercent"); + } + } + } + public String BatteryState + { + get { return batteryStateACOnline; } + set + { + if (batteryStateACOnline != value) + { + batteryStateACOnline = value; + OnPropertyChanged("BatteryState"); + } + } + } + public bool MonitorRequired + { + get { return monitorRequired; } + set + { + if (monitorRequired != value) + { + monitorRequired = value; + OnPropertyChanged("MonitorRequired"); + } + } + } + + // Create the OnPropertyChanged method to raise the event + + protected void OnPropertyChanged(string name) + { + PropertyChangedEventHandler handler = PropertyChanged; + + if (handler != null) + { + handler(this, new PropertyChangedEventArgs(name)); + } + } + } +} diff --git a/source/Samples/PowerMgmtDemo/CS/PowerMgmtDemo/PowerMgmtDemo.csproj b/source/Samples/PowerMgmtDemo/CS/PowerMgmtDemo/PowerMgmtDemo.csproj new file mode 100644 index 00000000..7fa60da8 --- /dev/null +++ b/source/Samples/PowerMgmtDemo/CS/PowerMgmtDemo/PowerMgmtDemo.csproj @@ -0,0 +1,169 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {1767FA65-426B-4555-9049-01DB8DCEA5A8} + WinExe + Properties + Microsoft.WindowsAPICodePack.Samples.PowerMgmtDemoApp + PowerMgmtDemoApp + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + + + powercfg.ico + + + + + 3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + App.xaml + Code + + + Window1.xaml + Code + + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/PowerMgmtDemo/CS/PowerMgmtDemo/Window1.xaml b/source/Samples/PowerMgmtDemo/CS/PowerMgmtDemo/Window1.xaml new file mode 100644 index 00000000..469b4a2c --- /dev/null +++ b/source/Samples/PowerMgmtDemo/CS/PowerMgmtDemo/Window1.xaml @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/CustomCommonFileDialogsDemo/CS/window1.xaml.cs b/source/Samples/Shell/CustomCommonFileDialogsDemo/CS/window1.xaml.cs new file mode 100644 index 00000000..237e8b2c --- /dev/null +++ b/source/Samples/Shell/CustomCommonFileDialogsDemo/CS/window1.xaml.cs @@ -0,0 +1,228 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows; +using Microsoft.WindowsAPICodePack.Dialogs; +using Microsoft.WindowsAPICodePack.Dialogs.Controls; + +namespace Microsoft.WindowsAPICodePack.Samples.Dialogs +{ + /// + /// Interaction logic for Window1.xaml + /// + + public partial class Window1 : Window + { + // the currently selected dialog, used for getting controls + private CommonFileDialog currentFileDialog; + + private Guid saveDialogGuid = new Guid("4CAC5C25-0550-45c1-969C-CE4C68A2664D"); + private Guid openDialogGuid = new Guid("C21EA2FA-5F70-42ad-A8AC-838266134584"); + + private CommonOpenFileDialog openFileDialog = new CommonOpenFileDialog(); + + public Window1() + { + InitializeComponent(); + } + + #region File Dialog Handlers and Helpers + + private void SaveFileDialogCustomizationXamlClicked(object sender, RoutedEventArgs e) + { + CommonSaveFileDialog saveFileDialog = FindSaveFileDialog("CustomSaveFileDialog"); + saveFileDialog.CookieIdentifier = saveDialogGuid; + + saveFileDialog.Filters.Add(new CommonFileDialogFilter("My App Type", "*.xyz")); + saveFileDialog.DefaultExtension = "xyz"; + saveFileDialog.AlwaysAppendDefaultExtension = true; + + saveFileDialog.Controls["textName"].Text = Environment.UserName; + + currentFileDialog = saveFileDialog; + + CommonFileDialogResult result = saveFileDialog.ShowDialog(); + if (result == CommonFileDialogResult.Ok) + { + string output = "File Selected: " + saveFileDialog.FileName + Environment.NewLine; + output += Environment.NewLine + GetCustomControlValues(); + + MessageBox.Show(output, "Save File Dialog Result", MessageBoxButton.OK, MessageBoxImage.Information); + } + } + + private CommonSaveFileDialog FindSaveFileDialog(string name) + { + return FindResource(name) as CommonSaveFileDialog; + } + + private void OpenFileDialogCustomizationClicked(object sender, RoutedEventArgs e) + { + CommonOpenFileDialog openFileDialog = new CommonOpenFileDialog(); + currentFileDialog = openFileDialog; + + ApplyOpenDialogSettings(openFileDialog); + + // set the 'allow multi-select' flag + openFileDialog.Multiselect = true; + + openFileDialog.EnsureFileExists = true; + + AddOpenFileDialogCustomControls(openFileDialog); + + CommonFileDialogResult result = openFileDialog.ShowDialog(); + if (result == CommonFileDialogResult.Ok) + { + string output = ""; + foreach (string fileName in openFileDialog.FileNames) + { + output += fileName + Environment.NewLine; + } + + output += Environment.NewLine + GetCustomControlValues(); + + MessageBox.Show(output, "Files Chosen", MessageBoxButton.OK, MessageBoxImage.Information ); + } + } + + private void AddOpenFileDialogCustomControls(CommonFileDialog openDialog) + { + // Add a RadioButtonList + CommonFileDialogRadioButtonList list = new CommonFileDialogRadioButtonList("radioButtonOptions"); + list.Items.Add(new CommonFileDialogRadioButtonListItem("Option A")); + list.Items.Add(new CommonFileDialogRadioButtonListItem("Option B")); + list.SelectedIndexChanged += RBLOptions_SelectedIndexChanged; + list.SelectedIndex = 1; + openDialog.Controls.Add(list); + + // Create a groupbox + CommonFileDialogGroupBox groupBox = new CommonFileDialogGroupBox("Options"); + + // Create and add two check boxes to this group + CommonFileDialogCheckBox checkA = new CommonFileDialogCheckBox("chkOptionA", "Option A", false); + CommonFileDialogCheckBox checkB = new CommonFileDialogCheckBox("chkOptionB", "Option B", true); + checkA.CheckedChanged += ChkOptionA_CheckedChanged; + checkB.CheckedChanged += ChkOptionB_CheckedChanged; + groupBox.Items.Add(checkA); + groupBox.Items.Add(checkB); + + // Create and add a separator to this group + openDialog.Controls.Add(new CommonFileDialogSeparator()); + + // Add groupbox to dialog + openDialog.Controls.Add(groupBox); + + // Add a Menu + CommonFileDialogMenu menu = new CommonFileDialogMenu("menu","Sample Menu"); + CommonFileDialogMenuItem itemA = new CommonFileDialogMenuItem("Menu Item 1"); + CommonFileDialogMenuItem itemB = new CommonFileDialogMenuItem("Menu Item 2"); + itemA.Click += MenuOptionA_Click; + itemB.Click += MenuOptionA_Click; + menu.Items.Add(itemA); + menu.Items.Add(itemB); + openDialog.Controls.Add(menu); + + // Add a ComboBox + CommonFileDialogComboBox comboBox = new CommonFileDialogComboBox("comboBox"); + comboBox.SelectedIndexChanged += ComboEncoding_SelectedIndexChanged; + comboBox.Items.Add(new CommonFileDialogComboBoxItem("Combobox Item 1")); + comboBox.Items.Add(new CommonFileDialogComboBoxItem("Combobox Item 2")); + comboBox.SelectedIndex = 1; + openDialog.Controls.Add(comboBox); + + // Create and add a separator + openDialog.Controls.Add(new CommonFileDialogSeparator()); + + // Add a TextBox + openDialog.Controls.Add(new CommonFileDialogLabel("Name:")); + openDialog.Controls.Add(new CommonFileDialogTextBox("textName", Environment.UserName)); + + // Create and add a button to this group + CommonFileDialogButton btnCFDPushButton = new CommonFileDialogButton("Check Name"); + btnCFDPushButton.Click += PushButton_Click; + openDialog.Controls.Add(btnCFDPushButton); + } + + private void ApplyOpenDialogSettings(CommonFileDialog openFileDialog) + { + openFileDialog.Title = "Custom Open File Dialog"; + + openFileDialog.CookieIdentifier = openDialogGuid; + + // Add some standard filters. + openFileDialog.Filters.Add(CommonFileDialogStandardFilters.TextFiles); + openFileDialog.Filters.Add(CommonFileDialogStandardFilters.OfficeFiles); + openFileDialog.Filters.Add(CommonFileDialogStandardFilters.PictureFiles); + } + + private string GetCustomControlValues() + { + string values = "Custom Cotnrols Values:" + Environment.NewLine; + + CommonFileDialogRadioButtonList list = currentFileDialog.Controls["radioButtonOptions"] as CommonFileDialogRadioButtonList; + values += String.Format("Radio Button List: Total Options = {0}; Selected Option = \"{1}\"; Selected Option Index = {2}", list.Items.Count, list.Items[list.SelectedIndex].Text, list.SelectedIndex) + Environment.NewLine; + + CommonFileDialogComboBox combo = currentFileDialog.Controls["comboBox"] as CommonFileDialogComboBox; + values += String.Format("Combo Box: Total Items = {0}; Selected Item = \"{1}\"; Selected Item Index = {2}", combo.Items.Count, combo.Items[combo.SelectedIndex].Text, combo.SelectedIndex) + Environment.NewLine; + + CommonFileDialogCheckBox checkBox = currentFileDialog.Controls["chkOptionA"] as CommonFileDialogCheckBox; + values += String.Format("Check Box \"{0}\" is {1}", checkBox.Text, checkBox.IsChecked ? "Checked" : "Unchecked") + Environment.NewLine; + + checkBox = currentFileDialog.Controls["chkOptionB"] as CommonFileDialogCheckBox; + values += String.Format("Check Box \"{0}\" is {1}", checkBox.Text, checkBox.IsChecked ? "Checked" : "Unchecked") + Environment.NewLine; + + CommonFileDialogTextBox textBox = currentFileDialog.Controls["textName"] as CommonFileDialogTextBox; + values += String.Format("TextBox \"Name\" = {0}", textBox.Text); + + return values; + } + #endregion + + #region Custom controls event handlers + + private void RBLOptions_SelectedIndexChanged(object sender, EventArgs e) + { + CommonFileDialogRadioButtonList list = currentFileDialog.Controls["radioButtonOptions"] as CommonFileDialogRadioButtonList; + MessageBox.Show(String.Format("Total Options = {0}; Selected Option = {1}; Selected Option Index = {2}", list.Items.Count, list.Items[list.SelectedIndex].Text, list.SelectedIndex)); + } + + private void PushButton_Click(object sender, EventArgs e) + { + CommonFileDialogTextBox textBox = currentFileDialog.Controls["textName"] as CommonFileDialogTextBox; + MessageBox.Show(String.Format("\"Check Name\" Button Clicked; Name = {0}", textBox.Text)); + } + + private void ComboEncoding_SelectedIndexChanged(object sender, EventArgs e) + { + CommonFileDialogComboBox combo = currentFileDialog.Controls["comboBox"] as CommonFileDialogComboBox; + MessageBox.Show(String.Format("Combo box sel index changed: Total Items = {0}; Selected Index = {1}; Selected Item = {2}", combo.Items.Count, combo.SelectedIndex, combo.Items[combo.SelectedIndex].Text)); + } + + private void ChkOptionA_CheckedChanged(object sender, EventArgs e) + { + CommonFileDialogCheckBox checkBox = currentFileDialog.Controls["chkOptionA"] as CommonFileDialogCheckBox; + MessageBox.Show(String.Format("Check Box \"{0}\" has been {1}", checkBox.Text, checkBox.IsChecked ? "Checked" : "Unchecked")); + } + + private void ChkOptionB_CheckedChanged(object sender, EventArgs e) + { + CommonFileDialogCheckBox checkBox = currentFileDialog.Controls["chkOptionB"] as CommonFileDialogCheckBox; + MessageBox.Show(String.Format("Check Box \"{0}\" has been {1}", checkBox.Text, checkBox.IsChecked ? "Checked" : "Unchecked")); + } + + private void MenuOptionA_Click(object sender, EventArgs e) + { + CommonFileDialogMenu menu = currentFileDialog.Controls["menu"] as CommonFileDialogMenu; + MessageBox.Show(String.Format("Menu \"{0}\" : Item \"{1}\" selected.", menu.Text, menu.Items[0].Text)); + } + + private void MenuOptionB_Click(object sender, EventArgs e) + { + CommonFileDialogMenu menu = currentFileDialog.Controls["menu"] as CommonFileDialogMenu; + MessageBox.Show(String.Format("Menu \"{0}\" : Item \"{1}\" selected.", menu.Text, menu.Items[1].Text)); + } + + #endregion Custom controls event handlers + + } +} diff --git a/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/CustomFileDialogsDemo.sln b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/CustomFileDialogsDemo.sln new file mode 100644 index 00000000..e1e0e691 --- /dev/null +++ b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/CustomFileDialogsDemo.sln @@ -0,0 +1,55 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CustomFileDialogsDemo", "CustomFileDialogsDemo.vbproj", "{A204460D-EF59-4131-AA15-B5B7206333A0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + CodeAnalysisDebug|x64 = CodeAnalysisDebug|x64 + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {A204460D-EF59-4131-AA15-B5B7206333A0}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {A204460D-EF59-4131-AA15-B5B7206333A0}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {A204460D-EF59-4131-AA15-B5B7206333A0}.CodeAnalysisDebug|x64.ActiveCfg = Debug|x64 + {A204460D-EF59-4131-AA15-B5B7206333A0}.CodeAnalysisDebug|x64.Build.0 = Debug|x64 + {A204460D-EF59-4131-AA15-B5B7206333A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A204460D-EF59-4131-AA15-B5B7206333A0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A204460D-EF59-4131-AA15-B5B7206333A0}.Debug|x64.ActiveCfg = Debug|x64 + {A204460D-EF59-4131-AA15-B5B7206333A0}.Debug|x64.Build.0 = Debug|x64 + {A204460D-EF59-4131-AA15-B5B7206333A0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A204460D-EF59-4131-AA15-B5B7206333A0}.Release|Any CPU.Build.0 = Release|Any CPU + {A204460D-EF59-4131-AA15-B5B7206333A0}.Release|x64.ActiveCfg = Release|x64 + {A204460D-EF59-4131-AA15-B5B7206333A0}.Release|x64.Build.0 = Release|x64 + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|x64.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|x64.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|x64.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|x64.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|x64.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|x64.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/CustomFileDialogsDemo.vbproj b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/CustomFileDialogsDemo.vbproj new file mode 100644 index 00000000..1d40f75f --- /dev/null +++ b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/CustomFileDialogsDemo.vbproj @@ -0,0 +1,181 @@ + + + + Debug + AnyCPU + {C93D705C-E4C2-485F-9359-5C47A013A06A} + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + CustomFileDialogsDemo + winexe + + + + v3.5 + On + Binary + Off + On + + + 3.5 + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + false + + + + + + + true + full + false + .\bin\Debug\ + true + true + true + AnyCPU + + AllRules.ruleset + + + false + true + .\bin\Release\ + false + true + + AllRules.ruleset + + + true + bin\x64\Debug\ + true + true + full + x64 + true + GlobalSuppressions.vb + + AllRules.ruleset + + + true + bin\x64\Release\ + false + true + true + pdbonly + x64 + true + GlobalSuppressions.vb + + AllRules.ruleset + + + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MyApp.xaml + Code + + + Window1.xaml + Code + + + + + + VbMyResourcesResXFileCodeGenerator + Designer + Resources.Designer.vb + My.Resources + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + True + True + Resources.resx + + + True + True + Settings.settings + + + + + + False + .NET Framework 2.0 %28x86%29 + false + + + False + .NET Framework 3.0 %28x86%29 + true + + + False + .NET Framework 3.5 + false + + + False + Windows Installer 3.1 + true + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + \ No newline at end of file diff --git a/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/My Project/AssemblyInfo.vb b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..03cb5476 --- /dev/null +++ b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/My Project/AssemblyInfo.vb @@ -0,0 +1,54 @@ +Imports Microsoft.VisualBasic +#Region "Using directives" + +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Resources +Imports System.Globalization +Imports System.Windows +Imports System.Runtime.InteropServices + +#End Region + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + + '(used if a resource is not found in the page, + ' or application resource dictionaries) + '(used if a resource is not found in the page, + ' app, or any theme specific resource dictionaries) + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Revision and Build Numbers +' by using the '*' as shown below: + + + diff --git a/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/My Project/Resources.Designer.vb b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/My Project/Resources.Designer.vb new file mode 100644 index 00000000..e96b8aff --- /dev/null +++ b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/My Project/Resources.resx b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/My Project/Resources.resx new file mode 100644 index 00000000..3e18af95 --- /dev/null +++ b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/My Project/Settings.Designer.vb b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/My Project/Settings.Designer.vb new file mode 100644 index 00000000..f2ffe239 --- /dev/null +++ b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class Settings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()),Settings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As Settings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Settings + Get + Return Global.Settings.Default + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/My Project/Settings.settings b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/My Project/Settings.settings new file mode 100644 index 00000000..40246947 --- /dev/null +++ b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/MyApp.xaml b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/MyApp.xaml new file mode 100644 index 00000000..35caab57 --- /dev/null +++ b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/MyApp.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/MyApp.xaml.vb b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/MyApp.xaml.vb new file mode 100644 index 00000000..4972c792 --- /dev/null +++ b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/MyApp.xaml.vb @@ -0,0 +1,17 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows +Imports System.Configuration + +Namespace Microsoft.WindowsAPICodePack.Samples.Dialogs + ''' + ''' Interaction logic for MyApp.xaml + ''' + + Partial Public Class MyApp + Inherits Application + + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/Window1.xaml b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/Window1.xaml new file mode 100644 index 00000000..399a5cff --- /dev/null +++ b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/Window1.xaml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This sample demonstrates how to customize Common "Open" and "Save" file dialogs in Vista and Windows 7 using common controls, such as buttons, text boxes and combo boxes. + + + The customizations are implemented both in Xaml and using direct method calls. + + + + + diff --git a/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/Window1.xaml.vb b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/Window1.xaml.vb new file mode 100644 index 00000000..4ca8136d --- /dev/null +++ b/source/Samples/Shell/CustomCommonFileDialogsDemo/VB/Window1.xaml.vb @@ -0,0 +1,211 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows +Imports Microsoft.WindowsAPICodePack.Dialogs +Imports Microsoft.WindowsAPICodePack.Dialogs.Controls + +Namespace Microsoft.WindowsAPICodePack.Samples.Dialogs + ''' + ''' Interaction logic for Window1.xaml + ''' + + Partial Public Class Window1 + Inherits Window + ' the currently selected dialog, used for getting controls + Private currentFileDialog As CommonFileDialog + + Private saveDialogGuid As New Guid("4CAC5C25-0550-45c1-969C-CE4C68A2664D") + Private openDialogGuid As New Guid("C21EA2FA-5F70-42ad-A8AC-838266134584") + + Private openFileDialog As New CommonOpenFileDialog() + + Public Sub New() + InitializeComponent() + End Sub + + #Region "File Dialog Handlers and Helpers" + + Private Sub SaveFileDialogCustomizationXamlClicked(ByVal sender As Object, ByVal e As RoutedEventArgs) + Dim saveFileDialog As CommonSaveFileDialog = FindSaveFileDialog("CustomSaveFileDialog") + saveFileDialog.CookieIdentifier = saveDialogGuid + + saveFileDialog.Filters.Add(New CommonFileDialogFilter("My App Type", "*.xyz")) + saveFileDialog.DefaultExtension = "xyz" + saveFileDialog.AlwaysAppendDefaultExtension = True + + saveFileDialog.Controls("textName").Text = Environment.UserName + + currentFileDialog = saveFileDialog + + Dim result As CommonFileDialogResult = saveFileDialog.ShowDialog() + If result = CommonFileDialogResult.Ok Then + Dim output As String = "File Selected: " & saveFileDialog.FileName & Environment.NewLine + output &= Environment.NewLine & GetCustomControlValues() + + MessageBox.Show(output, "Save File Dialog Result", MessageBoxButton.OK, MessageBoxImage.Information) + End If + End Sub + + Private Function FindSaveFileDialog(ByVal name As String) As CommonSaveFileDialog + Return TryCast(FindResource(name), CommonSaveFileDialog) + End Function + + Private Sub OpenFileDialogCustomizationClicked(ByVal sender As Object, ByVal e As RoutedEventArgs) + Dim openFileDialog As New CommonOpenFileDialog() + currentFileDialog = openFileDialog + + ApplyOpenDialogSettings(openFileDialog) + + ' set the 'allow multi-select' flag + openFileDialog.Multiselect = True + + openFileDialog.EnsureFileExists = True + + AddOpenFileDialogCustomControls(openFileDialog) + + Dim result As CommonFileDialogResult = openFileDialog.ShowDialog() + If result = CommonFileDialogResult.Ok Then + Dim output As String = "" + For Each fileName As String In openFileDialog.FileNames + output &= fileName & Environment.NewLine + Next fileName + + output &= Environment.NewLine & GetCustomControlValues() + + MessageBox.Show(output, "Files Chosen", MessageBoxButton.OK, MessageBoxImage.Information) + End If + End Sub + + Private Sub AddOpenFileDialogCustomControls(ByVal openDialog As CommonFileDialog) + ' Add a RadioButtonList + Dim list As New CommonFileDialogRadioButtonList("radioButtonOptions") + list.Items.Add(New CommonFileDialogRadioButtonListItem("Option A")) + list.Items.Add(New CommonFileDialogRadioButtonListItem("Option B")) + AddHandler list.SelectedIndexChanged, AddressOf RBLOptions_SelectedIndexChanged + list.SelectedIndex = 1 + openDialog.Controls.Add(list) + + ' Create a groupbox + Dim groupBox As New CommonFileDialogGroupBox("Options") + + ' Create and add two check boxes to this group + Dim checkA As New CommonFileDialogCheckBox("chkOptionA", "Option A", False) + Dim checkB As New CommonFileDialogCheckBox("chkOptionB", "Option B", True) + AddHandler checkA.CheckedChanged, AddressOf ChkOptionA_CheckedChanged + AddHandler checkB.CheckedChanged, AddressOf ChkOptionB_CheckedChanged + groupBox.Items.Add(checkA) + groupBox.Items.Add(checkB) + + ' Create and add a separator to this group + openDialog.Controls.Add(New CommonFileDialogSeparator()) + + ' Add groupbox to dialog + openDialog.Controls.Add(groupBox) + + ' Add a Menu + Dim menu As New CommonFileDialogMenu("menu","Sample Menu") + Dim itemA As New CommonFileDialogMenuItem("Menu Item 1") + Dim itemB As New CommonFileDialogMenuItem("Menu Item 2") + AddHandler itemA.Click, AddressOf MenuOptionA_Click + AddHandler itemB.Click, AddressOf MenuOptionA_Click + menu.Items.Add(itemA) + menu.Items.Add(itemB) + openDialog.Controls.Add(menu) + + ' Add a ComboBox + Dim comboBox As New CommonFileDialogComboBox("comboBox") + AddHandler comboBox.SelectedIndexChanged, AddressOf ComboEncoding_SelectedIndexChanged + comboBox.Items.Add(New CommonFileDialogComboBoxItem("Combobox Item 1")) + comboBox.Items.Add(New CommonFileDialogComboBoxItem("Combobox Item 2")) + comboBox.SelectedIndex = 1 + openDialog.Controls.Add(comboBox) + + ' Create and add a separator + openDialog.Controls.Add(New CommonFileDialogSeparator()) + + ' Add a TextBox + openDialog.Controls.Add(New CommonFileDialogLabel("Name:")) + openDialog.Controls.Add(New CommonFileDialogTextBox("textName", Environment.UserName)) + + ' Create and add a button to this group + Dim btnCFDPushButton As New CommonFileDialogButton("Check Name") + AddHandler btnCFDPushButton.Click, AddressOf PushButton_Click + openDialog.Controls.Add(btnCFDPushButton) + End Sub + + Private Sub ApplyOpenDialogSettings(ByVal openFileDialog As CommonFileDialog) + openFileDialog.Title = "Custom Open File Dialog" + + openFileDialog.CookieIdentifier = openDialogGuid + + ' Add some standard filters. + openFileDialog.Filters.Add(CommonFileDialogStandardFilters.TextFiles) + openFileDialog.Filters.Add(CommonFileDialogStandardFilters.OfficeFiles) + openFileDialog.Filters.Add(CommonFileDialogStandardFilters.PictureFiles) + End Sub + + Private Function GetCustomControlValues() As String + Dim values As String = "Custom Cotnrols Values:" & Environment.NewLine + + Dim list As CommonFileDialogRadioButtonList = TryCast(currentFileDialog.Controls("radioButtonOptions"), CommonFileDialogRadioButtonList) + values &= String.Format("Radio Button List: Total Options = {0}; Selected Option = ""{1}""; Selected Option Index = {2}", list.Items.Count, list.Items(list.SelectedIndex).Text, list.SelectedIndex) & Environment.NewLine + + Dim combo As CommonFileDialogComboBox = TryCast(currentFileDialog.Controls("comboBox"), CommonFileDialogComboBox) + values &= String.Format("Combo Box: Total Items = {0}; Selected Item = ""{1}""; Selected Item Index = {2}", combo.Items.Count, combo.Items(combo.SelectedIndex).Text, combo.SelectedIndex) & Environment.NewLine + + Dim checkBox As CommonFileDialogCheckBox = TryCast(currentFileDialog.Controls("chkOptionA"), CommonFileDialogCheckBox) + values &= String.Format("Check Box ""{0}"" is {1}", checkBox.Text,If(checkBox.IsChecked, "Checked", "Unchecked")) & Environment.NewLine + + checkBox = TryCast(currentFileDialog.Controls("chkOptionB"), CommonFileDialogCheckBox) + values &= String.Format("Check Box ""{0}"" is {1}", checkBox.Text,If(checkBox.IsChecked, "Checked", "Unchecked")) & Environment.NewLine + + Dim textBox As CommonFileDialogTextBox = TryCast(currentFileDialog.Controls("textName"), CommonFileDialogTextBox) + values &= String.Format("TextBox ""Name"" = {0}", textBox.Text) + + Return values + End Function + #End Region + + #Region "Custom controls event handlers" + + Private Sub RBLOptions_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) + Dim list As CommonFileDialogRadioButtonList = TryCast(currentFileDialog.Controls("radioButtonOptions"), CommonFileDialogRadioButtonList) + MessageBox.Show(String.Format("Total Options = {0}; Selected Option = {1}; Selected Option Index = {2}", list.Items.Count, list.Items(list.SelectedIndex).Text, list.SelectedIndex)) + End Sub + + Private Sub PushButton_Click(ByVal sender As Object, ByVal e As EventArgs) + Dim textBox As CommonFileDialogTextBox = TryCast(currentFileDialog.Controls("textName"), CommonFileDialogTextBox) + MessageBox.Show(String.Format("""Check Name"" Button Clicked; Name = {0}", textBox.Text)) + End Sub + + Private Sub ComboEncoding_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) + Dim combo As CommonFileDialogComboBox = TryCast(currentFileDialog.Controls("comboBox"), CommonFileDialogComboBox) + MessageBox.Show(String.Format("Combo box sel index changed: Total Items = {0}; Selected Index = {1}; Selected Item = {2}", combo.Items.Count, combo.SelectedIndex, combo.Items(combo.SelectedIndex).Text)) + End Sub + + Private Sub ChkOptionA_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) + Dim checkBox As CommonFileDialogCheckBox = TryCast(currentFileDialog.Controls("chkOptionA"), CommonFileDialogCheckBox) + MessageBox.Show(String.Format("Check Box ""{0}"" has been {1}", checkBox.Text,If(checkBox.IsChecked, "Checked", "Unchecked"))) + End Sub + + Private Sub ChkOptionB_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs) + Dim checkBox As CommonFileDialogCheckBox = TryCast(currentFileDialog.Controls("chkOptionB"), CommonFileDialogCheckBox) + MessageBox.Show(String.Format("Check Box ""{0}"" has been {1}", checkBox.Text,If(checkBox.IsChecked, "Checked", "Unchecked"))) + End Sub + + Private Sub MenuOptionA_Click(ByVal sender As Object, ByVal e As EventArgs) + Dim menu As CommonFileDialogMenu = TryCast(currentFileDialog.Controls("menu"), CommonFileDialogMenu) + MessageBox.Show(String.Format("Menu ""{0}"" : Item ""{1}"" selected.", menu.Text, menu.Items(0).Text)) + End Sub + + Private Sub MenuOptionB_Click(ByVal sender As Object, ByVal e As EventArgs) + Dim menu As CommonFileDialogMenu = TryCast(currentFileDialog.Controls("menu"), CommonFileDialogMenu) + MessageBox.Show(String.Format("Menu ""{0}"" : Item ""{1}"" selected.", menu.Text, menu.Items(1).Text)) + End Sub + + #End Region ' Custom controls event handlers + + End Class +End Namespace diff --git a/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop.sln b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop.sln new file mode 100644 index 00000000..3f92f768 --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShellObjectDragAndDropDemo", "ShellObjectDragAndDrop\ShellObjectDragAndDropDemo.csproj", "{59BE0CCF-98FE-415A-89EE-F646082B5E07}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/App.xaml b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/App.xaml new file mode 100644 index 00000000..f6a3f5cc --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/App.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/App.xaml.cs b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/App.xaml.cs new file mode 100644 index 00000000..b2ca5ebf --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/App.xaml.cs @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Windows; + +namespace ShellObjectDragAndDropDemo +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/DragAndDropWindow.xaml b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/DragAndDropWindow.xaml new file mode 100644 index 00000000..76a8f4c7 --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/DragAndDropWindow.xaml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + Drag and Drop files to/from this window. + + + diff --git a/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/DragAndDropWindow.xaml.cs b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/DragAndDropWindow.xaml.cs new file mode 100644 index 00000000..8d3689a6 --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/DragAndDropWindow.xaml.cs @@ -0,0 +1,124 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows; +using System.Windows.Input; +using Microsoft.WindowsAPICodePack.Shell; + +namespace ShellObjectDragAndDropDemo +{ + /// + /// WPF ShellObject Drag and Drop demonstration window + /// + public partial class DragAndDropWindow : Window + { + #region implmentation data + private Point dragStart; + private DataObject dataObject = null; + private bool inDragDrop = false; + #endregion + + #region construction + public DragAndDropWindow() + { + InitializeComponent(); + } + #endregion + + #region message handlers + private void Window_Loaded(object sender, RoutedEventArgs e) + { + this.Drop += new DragEventHandler(OnDrop); + DropSource.MouseLeftButtonDown += new MouseButtonEventHandler(OnMouseLeftButtonDown); + DropSource.MouseLeftButtonUp += new MouseButtonEventHandler(OnMouseLeftButtonUp); + DropDataList.MouseMove += new MouseEventHandler(OnMouseMove); + } + + void OnMouseMove(object sender, MouseEventArgs e) + { + if (!inDragDrop) + { + Point currentPos = e.GetPosition(this); + + if ((Math.Abs(currentPos.X - dragStart.X) > 5) || (Math.Abs(currentPos.Y - dragStart.Y) > 5)) + { + if (dataObject != null) + { + inDragDrop = true; + DragDropEffects de = DragDrop.DoDragDrop(this.DropSource, dataObject, DragDropEffects.Copy); + inDragDrop = false; + dataObject = null; + } + } + } + } + + void OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e) + { + dataObject = null; + } + + void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) + { + if (!IsMouseCaptured) + { + dragStart = e.GetPosition(this); + ShellObjectCollection collection = new ShellObjectCollection(); + System.Collections.IList list = + (DropDataList.SelectedItems.Count > 0) ? + DropDataList.SelectedItems : DropDataList.Items; + + foreach (ShellObject shellObject in list) + { + collection.Add(shellObject); + } + + if (collection.Count > 0) + { + // This builds a DataObject from a "Shell IDList Array" formatted memory stream. + // This allows drag/clipboard operations with non-file based ShellObjects (i.e., + // control panel, libraries, search query results) + dataObject = new DataObject( + "Shell IDList Array", + collection.BuildShellIDList()); + + // Also build a file drop list + System.Collections.Specialized.StringCollection paths = new System.Collections.Specialized.StringCollection(); + foreach (ShellObject shellObject in collection) + { + if (shellObject.IsFileSystemObject) + { + paths.Add(shellObject.ParsingName); + } + } + if (paths.Count > 0) + dataObject.SetFileDropList(paths); + } + } + } + + void OnDrop(object sender, DragEventArgs e) + { + if (!inDragDrop) + { + string[] formats = e.Data.GetFormats(); + foreach (string format in formats) + { + // Shell items are passed using the "Shell IDList Array" format. + if (format == "Shell IDList Array") + { + // Retrieve the ShellObjects from the data object + DropDataList.ItemsSource = ShellObjectCollection.FromDataObject( + (System.Runtime.InteropServices.ComTypes.IDataObject)e.Data); + + e.Handled = true; + return; + } + } + } + + e.Handled = false; + } + #endregion + } +} diff --git a/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/Properties/AssemblyInfo.cs b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..1c75d3b5 --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/Properties/AssemblyInfo.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle( "WPFDND" )] +[assembly: AssemblyDescription( "" )] +[assembly: AssemblyConfiguration( "" )] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark( "" )] +[assembly: AssemblyCulture( "" )] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible( false )] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion( "1.0.0.0" )] +[assembly: AssemblyFileVersion( "1.0.0.0" )] diff --git a/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/Properties/Resources.Designer.cs b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/Properties/Resources.Designer.cs new file mode 100644 index 00000000..47452930 --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ShellObjectDragAndDropDemo.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ShellObjectDragAndDropDemo.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/Properties/Resources.resx b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/Properties/Settings.Designer.cs b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/Properties/Settings.Designer.cs new file mode 100644 index 00000000..959d7505 --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ShellObjectDragAndDropDemo.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/Properties/Settings.settings b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/ShellObjectDragAndDropDemo.csproj b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/ShellObjectDragAndDropDemo.csproj new file mode 100644 index 00000000..89b03dcd --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/CS/WPF/ShellObjectDragAndDrop/ShellObjectDragAndDropDemo.csproj @@ -0,0 +1,160 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {59BE0CCF-98FE-415A-89EE-F646082B5E07} + WinExe + Properties + ShellObjectDragAndDropDemo + WPFDND + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + + + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + App.xaml + Code + + + DragAndDropWindow.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop.sln b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop.sln new file mode 100644 index 00000000..55bd879a --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ShellObjectDragAndDropDemo", "ShellObjectDragAndDrop\ShellObjectDragAndDropDemo.vbproj", "{59BE0CCF-98FE-415A-89EE-F646082B5E07}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59BE0CCF-98FE-415A-89EE-F646082B5E07}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/Application.xaml b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/Application.xaml new file mode 100644 index 00000000..f6a3f5cc --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/Application.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/Application.xaml.vb b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/Application.xaml.vb new file mode 100644 index 00000000..8c27b5c5 --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/Application.xaml.vb @@ -0,0 +1,18 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Configuration +Imports System.Data +Imports System.Linq +Imports System.Windows + +Namespace ShellObjectDragAndDropDemo + ''' + ''' Interaction logic for App.xaml + ''' + Partial Public Class App + Inherits Application + End Class +End Namespace diff --git a/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/DragAndDropWindow.xaml b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/DragAndDropWindow.xaml new file mode 100644 index 00000000..76a8f4c7 --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/DragAndDropWindow.xaml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + Drag and Drop files to/from this window. + + + diff --git a/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/DragAndDropWindow.xaml.vb b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/DragAndDropWindow.xaml.vb new file mode 100644 index 00000000..e777120b --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/DragAndDropWindow.xaml.vb @@ -0,0 +1,104 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows +Imports System.Windows.Input +Imports Microsoft.WindowsAPICodePack.Shell + +Namespace ShellObjectDragAndDropDemo + ''' + ''' WPF ShellObject Drag and Drop demonstration window + ''' + Partial Public Class DragAndDropWindow + Inherits Window + #Region "implmentation data" + Private dragStart As Point + Private dataObject As DataObject = Nothing + Private inDragDrop As Boolean = False + #End Region + + #Region "construction" + Public Sub New() + InitializeComponent() + End Sub + #End Region + + #Region "message handlers" + Private Sub Window_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) + AddHandler Drop, AddressOf OnDrop + AddHandler DropSource.MouseLeftButtonDown, AddressOf OnMouseLeftButtonDown + AddHandler DropSource.MouseLeftButtonUp, AddressOf OnMouseLeftButtonUp + AddHandler DropDataList.MouseMove, AddressOf OnMouseMove + End Sub + + Private Overloads Sub OnMouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) + If Not inDragDrop Then + Dim currentPos As Point = e.GetPosition(Me) + + If (Math.Abs(currentPos.X - dragStart.X) > 5) OrElse (Math.Abs(currentPos.Y - dragStart.Y) > 5) Then + If dataObject IsNot Nothing Then + inDragDrop = True + Dim de As DragDropEffects = DragDrop.DoDragDrop(Me.DropSource, dataObject, DragDropEffects.Copy) + inDragDrop = False + dataObject = Nothing + End If + End If + End If + End Sub + + Private Overloads Sub OnMouseLeftButtonUp(ByVal sender As Object, ByVal e As MouseButtonEventArgs) + dataObject = Nothing + End Sub + + Private Overloads Sub OnMouseLeftButtonDown(ByVal sender As Object, ByVal e As MouseButtonEventArgs) + If Not IsMouseCaptured Then + dragStart = e.GetPosition(Me) + Dim collection As New ShellObjectCollection() + Dim list As System.Collections.IList = If((DropDataList.SelectedItems.Count > 0), DropDataList.SelectedItems, DropDataList.Items) + + For Each shellObject As ShellObject In list + collection.Add(shellObject) + Next shellObject + + If collection.Count > 0 Then + ' This builds a DataObject from a "Shell IDList Array" formatted memory stream. + ' This allows drag/clipboard operations with non-file based ShellObjects (i.e., + ' control panel, libraries, search query results) + dataObject = New DataObject("Shell IDList Array", collection.BuildShellIDList()) + + ' Also build a file drop list + Dim paths As New System.Collections.Specialized.StringCollection() + For Each shellObject As ShellObject In collection + If shellObject.IsFileSystemObject Then + paths.Add(shellObject.ParsingName) + End If + Next shellObject + If paths.Count > 0 Then + dataObject.SetFileDropList(paths) + End If + End If + End If + End Sub + + Private Overloads Sub OnDrop(ByVal sender As Object, ByVal e As DragEventArgs) + If Not inDragDrop Then + Dim formats() As String = e.Data.GetFormats() + For Each format As String In formats + ' Shell items are passed using the "Shell IDList Array" format. + If format = "Shell IDList Array" Then + ' Retrieve the ShellObjects from the data object + DropDataList.ItemsSource = ShellObjectCollection.FromDataObject(CType(e.Data, System.Runtime.InteropServices.ComTypes.IDataObject)) + + e.Handled = True + Return + End If + Next format + End If + + e.Handled = False + End Sub + #End Region + End Class +End Namespace diff --git a/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/My Project/AssemblyInfo.vb b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..aa0d74f2 --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/My Project/AssemblyInfo.vb @@ -0,0 +1,55 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Resources +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + + '(used if a resource is not found in the page, + ' or application resource dictionaries) + '(used if a resource is not found in the page, + ' app, or any theme specific resource dictionaries) + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/My Project/Resources.Designer.vb b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/My Project/Resources.Designer.vb new file mode 100644 index 00000000..e96b8aff --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/My Project/Resources.resx b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/My Project/Settings.Designer.vb b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/My Project/Settings.Designer.vb new file mode 100644 index 00000000..f2ffe239 --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class Settings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()),Settings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As Settings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Settings + Get + Return Global.Settings.Default + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/My Project/Settings.settings b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/My Project/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/ShellObjectDragAndDropDemo.vbproj b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/ShellObjectDragAndDropDemo.vbproj new file mode 100644 index 00000000..f2d75521 --- /dev/null +++ b/source/Samples/Shell/DragAndDrop/VB/WPF/ShellObjectDragAndDrop/ShellObjectDragAndDropDemo.vbproj @@ -0,0 +1,139 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {D3512DD4-3251-47C9-90AA-54407029FACC} + WinExe + + + WPFDND + v3.5 + On + Binary + Off + On + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + + + + + + + 3.5 + + + true + full + false + bin\Debug\ + true + true + prompt + true + + AllRules.ruleset + + + pdbonly + true + bin\Release\ + false + true + prompt + + AllRules.ruleset + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + Application.xaml + Code + + + DragAndDropWindow.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + Designer + My.Resources + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser.sln b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser.sln new file mode 100644 index 00000000..da4861cd --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KnownFoldersBrowser", "KnownFoldersBrowser\KnownFoldersBrowser.csproj", "{FC25A058-BA33-42A2-B172-439D56CFE835}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FC25A058-BA33-42A2-B172-439D56CFE835}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {FC25A058-BA33-42A2-B172-439D56CFE835}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {FC25A058-BA33-42A2-B172-439D56CFE835}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FC25A058-BA33-42A2-B172-439D56CFE835}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FC25A058-BA33-42A2-B172-439D56CFE835}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FC25A058-BA33-42A2-B172-439D56CFE835}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/App.xaml b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/App.xaml new file mode 100644 index 00000000..43388286 --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/App.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/App.xaml.cs b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/App.xaml.cs new file mode 100644 index 00000000..87bff7e0 --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/App.xaml.cs @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Windows; + +namespace Microsoft.WindowsAPICodePack.Samples.KnownFoldersBrowser +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/KnownFoldersBrowser.csproj b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/KnownFoldersBrowser.csproj new file mode 100644 index 00000000..ab7de092 --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/KnownFoldersBrowser.csproj @@ -0,0 +1,160 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {FC25A058-BA33-42A2-B172-439D56CFE835} + WinExe + Properties + Microsoft.WindowsAPICodePack.Samples.KnownFoldersBrowser + KnownFoldersBrowser + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + + + + + + + 3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + App.xaml + Code + + + Window1.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Properties/AssemblyInfo.cs b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..5d7521d1 --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Properties/AssemblyInfo.cs @@ -0,0 +1,54 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("KnownFoldersBrowser")] +[assembly: AssemblyDescription("KnownFolders Browser Demo")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Properties/Resources.Designer.cs b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Properties/Resources.Designer.cs new file mode 100644 index 00000000..4a89b582 --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.KnownFoldersBrowser.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.WindowsAPICodePack.Samples.KnownFoldersBrowser.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Properties/Resources.resx b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Properties/Settings.Designer.cs b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Properties/Settings.Designer.cs new file mode 100644 index 00000000..a204947a --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.KnownFoldersBrowser.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Properties/Settings.settings b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Window1.xaml b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Window1.xaml new file mode 100644 index 00000000..0f4cfa41 --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Window1.xaml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Window1.xaml.cs b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Window1.xaml.cs new file mode 100644 index 00000000..08599eb8 --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/CS/KnownFoldersBrowser/Window1.xaml.cs @@ -0,0 +1,81 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Collections.ObjectModel; +using System.Windows; +using System.Windows.Controls; +using Microsoft.WindowsAPICodePack.Shell; +using System.Windows.Data; +using Microsoft.WindowsAPICodePack.Controls.WindowsPresentationFoundation; + +namespace Microsoft.WindowsAPICodePack.Samples.KnownFoldersBrowser +{ + /// + /// Interaction logic for Window1.xaml + /// + public partial class Window1 : Window + { + public Window1() + { + InitializeComponent(); + + Binding binding = new Binding() + { + Source = knownFoldersListBox, + Path = new PropertyPath(ListBox.SelectedItemProperty), + Mode = BindingMode.OneWay, + TargetNullValue = ShellFileSystemFolder.FromParsingName(KnownFolders.Desktop.ParsingName) + }; + + BindingOperations.SetBinding(explorerBrowser1, ExplorerBrowser.NavigationTargetProperty, binding); + } + + void NavigateExplorerBrowser(object sender, SelectionChangedEventArgs args) + { + IKnownFolder folder = (IKnownFolder)((ListBox)sender).SelectedItem; + + if (folder == null) + { + folder = (IKnownFolder)ShellFileSystemFolder.FromParsingName(KnownFolders.Desktop.ParsingName); + } + + UpdateProperties(folder); + } + + private void UpdateProperties(IKnownFolder folder) + { + // TODO - Make XAML only + // There is currently no way to get all the KnownFolder properties in a collection + // that can be use for binding to a listbox. Create our own properties collection with name/value pairs + + Collection properties = new Collection(); + properties.Add(new KnownFolderProperty { Property = "Canonical Name", Value = folder.CanonicalName }); + properties.Add(new KnownFolderProperty { Property = "Category", Value = folder.Category }); + properties.Add(new KnownFolderProperty { Property = "Definition Options", Value = folder.DefinitionOptions }); + properties.Add(new KnownFolderProperty { Property = "Description", Value = folder.Description }); + properties.Add(new KnownFolderProperty { Property = "File Attributes", Value = folder.FileAttributes }); + properties.Add(new KnownFolderProperty { Property = "Folder Id", Value = folder.FolderId }); + properties.Add(new KnownFolderProperty { Property = "Folder Type", Value = folder.FolderType }); + properties.Add(new KnownFolderProperty { Property = "Folder Type Id", Value = folder.FolderTypeId }); + properties.Add(new KnownFolderProperty { Property = "Localized Name", Value = folder.LocalizedName }); + properties.Add(new KnownFolderProperty { Property = "Localized Name Resource Id", Value = folder.LocalizedNameResourceId }); + properties.Add(new KnownFolderProperty { Property = "Parent Id", Value = folder.ParentId }); + properties.Add(new KnownFolderProperty { Property = "ParsingName", Value = folder.ParsingName }); + properties.Add(new KnownFolderProperty { Property = "Path", Value = folder.Path }); + properties.Add(new KnownFolderProperty { Property = "Relative Path", Value = folder.RelativePath }); + properties.Add(new KnownFolderProperty { Property = "Redirection", Value = folder.Redirection }); + properties.Add(new KnownFolderProperty { Property = "Security", Value = folder.Security }); + properties.Add(new KnownFolderProperty { Property = "Tooltip", Value = folder.Tooltip }); + properties.Add(new KnownFolderProperty { Property = "Tooltip Resource Id", Value = folder.TooltipResourceId }); + + // Bind the collection to the properties listbox. + PropertiesListBox.ItemsSource = properties; + } + } + + struct KnownFolderProperty + { + public string Property { set; get; } + public object Value { set; get; } + } + +} diff --git a/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser.sln b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser.sln new file mode 100644 index 00000000..017d260a --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "KnownFoldersBrowser", "KnownFoldersBrowser\KnownFoldersBrowser.vbproj", "{FC25A058-BA33-42A2-B172-439D56CFE835}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FC25A058-BA33-42A2-B172-439D56CFE835}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {FC25A058-BA33-42A2-B172-439D56CFE835}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {FC25A058-BA33-42A2-B172-439D56CFE835}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FC25A058-BA33-42A2-B172-439D56CFE835}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FC25A058-BA33-42A2-B172-439D56CFE835}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FC25A058-BA33-42A2-B172-439D56CFE835}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/Application.xaml b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/Application.xaml new file mode 100644 index 00000000..43388286 --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/Application.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/Application.xaml.vb b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/Application.xaml.vb new file mode 100644 index 00000000..d6007878 --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/Application.xaml.vb @@ -0,0 +1,19 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Configuration +Imports System.Data +Imports System.Linq +Imports System.Windows + +Namespace Microsoft.WindowsAPICodePack.Samples.KnownFoldersBrowser + ''' + ''' Interaction logic for App.xaml + ''' + Partial Public Class App + Inherits Application + End Class +End Namespace diff --git a/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/KnownFoldersBrowser.vbproj b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/KnownFoldersBrowser.vbproj new file mode 100644 index 00000000..dd9b525d --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/KnownFoldersBrowser.vbproj @@ -0,0 +1,169 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {602DAD34-1C30-4CA8-B20A-7E03F04F6C65} + WinExe + + + KnownFoldersBrowser + v3.5 + On + Binary + Off + On + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + + + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + true + true + prompt + AllRules.ruleset + + + + pdbonly + true + bin\Release\ + false + true + prompt + AllRules.ruleset + + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + Application.xaml + Code + + + Window1.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + Designer + My.Resources + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/My Project/AssemblyInfo.vb b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..59d48438 --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/My Project/AssemblyInfo.vb @@ -0,0 +1,53 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Resources +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + + '(used if a resource is not found in the page, + ' or application resource dictionaries) + '(used if a resource is not found in the page, + ' app, or any theme specific resource dictionaries) + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' + + diff --git a/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/My Project/Resources.Designer.vb b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/My Project/Resources.Designer.vb new file mode 100644 index 00000000..e96b8aff --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/My Project/Resources.resx b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/My Project/Settings.Designer.vb b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/My Project/Settings.Designer.vb new file mode 100644 index 00000000..f2ffe239 --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class Settings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()),Settings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As Settings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Settings + Get + Return Global.Settings.Default + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/My Project/Settings.settings b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/My Project/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/Window1.xaml b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/Window1.xaml new file mode 100644 index 00000000..831b4dfa --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/Window1.xaml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/Window1.xaml.vb b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/Window1.xaml.vb new file mode 100644 index 00000000..828b224f --- /dev/null +++ b/source/Samples/Shell/KnownFoldersBrowser/VB/KnownFoldersBrowser/Window1.xaml.vb @@ -0,0 +1,98 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Collections.ObjectModel +Imports System.Windows +Imports System.Windows.Controls +Imports System.Windows.Data +Imports Microsoft.WindowsAPICodePack.Shell +Imports Microsoft.WindowsAPICodePack.Controls.WindowsPresentationFoundation + +Namespace Microsoft.WindowsAPICodePack.Samples.KnownFoldersBrowser + ''' + ''' Interaction logic for Window1.xaml + ''' + Partial Public Class Window1 + Inherits Window + Public Sub New() + InitializeComponent() + + Dim binding As New Binding With _ + { _ + .Source = knownFoldersListBox, _ + .Path = New PropertyPath(ListBox.SelectedItemProperty), _ + .Mode = BindingMode.OneWay, _ + .TargetNullValue = ShellFileSystemFolder.FromParsingName(KnownFolders.Desktop.ParsingName) _ + } + + BindingOperations.SetBinding(explorerBrowser1, ExplorerBrowser.NavigationTargetProperty, binding) + End Sub + + Private Sub NavigateExplorerBrowser(ByVal sender As Object, ByVal args As SelectionChangedEventArgs) + Dim folder As IKnownFolder = CType(CType(sender, ListBox).SelectedItem, IKnownFolder) + + If folder Is Nothing Then + folder = CType(ShellFileSystemFolder.FromParsingName(KnownFolders.Desktop.ParsingName), IKnownFolder) + End If + + UpdateProperties(folder) + End Sub + + Private Sub UpdateProperties(ByVal folder As IKnownFolder) + ' TODO - Make XAML only + ' There is currently no way to get all the KnownFolder properties in a collection + ' that can be use for binding to a listbox. Create our own properties collection with name/value pairs + + Dim properties As New Collection(Of KnownFolderProperty)() + properties.Add(New KnownFolderProperty("Canonical Name", folder.CanonicalName)) + properties.Add(New KnownFolderProperty("Category", folder.Category.ToString())) + properties.Add(New KnownFolderProperty("Definition Options", folder.DefinitionOptions.ToString())) + properties.Add(New KnownFolderProperty("Description", folder.Description)) + properties.Add(New KnownFolderProperty("File Attributes", folder.FileAttributes.ToString())) + properties.Add(New KnownFolderProperty("Folder Id", folder.FolderId.ToString())) + properties.Add(New KnownFolderProperty("Folder Type", folder.FolderType)) + properties.Add(New KnownFolderProperty("Folder Type Id", folder.FolderTypeId.ToString())) + properties.Add(New KnownFolderProperty("Localized Name", folder.LocalizedName)) + properties.Add(New KnownFolderProperty("Localized Name Resource Id", folder.LocalizedNameResourceId)) + properties.Add(New KnownFolderProperty("Parent Id", folder.ParentId.ToString())) + properties.Add(New KnownFolderProperty("ParsingName", folder.ParsingName)) + properties.Add(New KnownFolderProperty("Path", folder.Path)) + properties.Add(New KnownFolderProperty("Relative Path", folder.RelativePath)) + properties.Add(New KnownFolderProperty("Redirection", folder.Redirection.ToString())) + properties.Add(New KnownFolderProperty("Security", folder.Security)) + properties.Add(New KnownFolderProperty("Tooltip", folder.Tooltip)) + properties.Add(New KnownFolderProperty("Tooltip Resource Id", folder.TooltipResourceId)) + + ' Bind the collection to the properties listbox. + PropertiesListBox.ItemsSource = properties + End Sub + End Class + + Friend Structure KnownFolderProperty + + Public Sub New(ByVal prop As String, ByVal val As String) + PropertyName = prop + Value = val + End Sub + + Private privateProperty As String + Public Property PropertyName() As String + Get + Return privateProperty + End Get + Set(ByVal value As String) + privateProperty = value + End Set + End Property + Private privateValue As Object + Public Property Value() As Object + Get + Return privateValue + End Get + Set(ByVal value As Object) + privateValue = value + End Set + End Property + End Structure +End Namespace diff --git a/source/Samples/Shell/PicturePropertiesEditor/CS/App.xaml b/source/Samples/Shell/PicturePropertiesEditor/CS/App.xaml new file mode 100644 index 00000000..457804ae --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/CS/App.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/Shell/PicturePropertiesEditor/CS/App.xaml.cs b/source/Samples/Shell/PicturePropertiesEditor/CS/App.xaml.cs new file mode 100644 index 00000000..b3d2d42b --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/CS/App.xaml.cs @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Windows; + +namespace PicturePropertiesEditor +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/source/Samples/Shell/PicturePropertiesEditor/CS/Controls/RatingControl.xaml b/source/Samples/Shell/PicturePropertiesEditor/CS/Controls/RatingControl.xaml new file mode 100644 index 00000000..a6162480 --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/CS/Controls/RatingControl.xaml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/PicturePropertiesEditor/CS/Controls/RatingControl.xaml.cs b/source/Samples/Shell/PicturePropertiesEditor/CS/Controls/RatingControl.xaml.cs new file mode 100644 index 00000000..7943a215 --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/CS/Controls/RatingControl.xaml.cs @@ -0,0 +1,97 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using System.Windows.Controls.Primitives; + +namespace Microsoft.WindowsAPICodePack.Samples.PicturePropertiesEditor +{ + /// + /// Interaction logic for RatingControl.xaml + /// + public partial class RatingControl : UserControl + { + public static readonly DependencyProperty RatingValueProperty = + DependencyProperty.Register("RatingValue", typeof(int), typeof(RatingControl), + new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, new PropertyChangedCallback(RatingValueChanged))); + + + private int maxValue = 99; + + public int RatingValue + { + get { return (int)GetValue(RatingValueProperty); } + set + { + if (value < 0) + { + SetValue(RatingValueProperty, 0); + } + else if (value > maxValue) + { + SetValue(RatingValueProperty, maxValue); + } + else + { + SetValue(RatingValueProperty, value); + } + } + } + + private static void RatingValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) + { + RatingControl parent = sender as RatingControl; + int ratingValue = (int)e.NewValue; + UIElementCollection children = ((Grid)(parent.Content)).Children; + ToggleButton button = null; + + for (int i = 0; i < ratingValue; i++) + { + button = children[i] as ToggleButton; + if (button != null) + button.IsChecked = true; + } + + for (int i = ratingValue; i < children.Count; i++) + { + button = children[i] as ToggleButton; + if (button != null) + button.IsChecked = false; + } + } + + public RatingControl() + { + InitializeComponent(); + } + + private void RatingButtonClickEventHandler(Object sender, RoutedEventArgs e) + { + ToggleButton button = sender as ToggleButton; + + int newRating = int.Parse((String)button.Tag); + + if ((bool)button.IsChecked || newRating < RatingValue) + { + RatingValue = newRating; + } + else + { + RatingValue = newRating - 1; + } + + e.Handled = true; + } + } +} diff --git a/source/Samples/Shell/PicturePropertiesEditor/CS/Controls/ZOrderStackPanel.cs b/source/Samples/Shell/PicturePropertiesEditor/CS/Controls/ZOrderStackPanel.cs new file mode 100644 index 00000000..0397e2c0 --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/CS/Controls/ZOrderStackPanel.cs @@ -0,0 +1,112 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Windows.Controls; +using System.Windows; +using System.Windows.Media; + +namespace Microsoft.WindowsAPICodePack.Samples.PicturePropertiesEditor +{ + public class ZOrderStackPanel : Panel + { + + #region Private Members + + private Random rnd = new Random(); + + #endregion + + #region Public Constructors + + public ZOrderStackPanel() + : base() + { + } + + #endregion + + #region MaxOffset Property + + public static readonly DependencyProperty MaxOffsetProperty = + DependencyProperty.Register("MaxOffset", typeof(int), typeof(ZOrderStackPanel)); + + public int MaxOffset + { + get { return (int)GetValue(MaxOffsetProperty); } + set { SetValue(MaxOffsetProperty, value); } + } + + #endregion + + #region MaxRotation Property + + public static readonly DependencyProperty MaxRotationProperty = + DependencyProperty.Register("MaxRotation", typeof(double), typeof(ZOrderStackPanel)); + + public double MaxRotation + { + get { return (double)GetValue(MaxRotationProperty); } + set { SetValue(MaxRotationProperty, value); } + } + + #endregion + + protected override Size MeasureOverride(Size availableSize) + { + Size resultSize = new Size(0, 0); + + foreach (UIElement child in Children) + { + child.Measure(availableSize); + resultSize.Width = Math.Max(resultSize.Width, child.DesiredSize.Width); + resultSize.Height = Math.Max(resultSize.Height, child.DesiredSize.Height); + } + + resultSize.Width = double.IsPositiveInfinity(availableSize.Width) ? resultSize.Width : availableSize.Width; + resultSize.Height = double.IsPositiveInfinity(availableSize.Height) ? resultSize.Height : availableSize.Height; + + return resultSize; + + } + + protected override Size ArrangeOverride(Size finalSize) + { + foreach (UIElement child in Children) + { + double childX = finalSize.Width / 2 - child.DesiredSize.Width / 2; + double childY = finalSize.Height / 2 - child.DesiredSize.Height / 2; + child.Arrange(new Rect(childX, childY, child.DesiredSize.Width, child.DesiredSize.Height)); + + RotateAndOffsetChild(child); + } + + + return finalSize; + } + + private void RotateAndOffsetChild(UIElement child) + { + if (MaxRotation != 0 && MaxOffset != 0) + { + // create a new Random var called rnd + + double randomNumber = rnd.NextDouble(); + + double xOffset = MaxOffset * (2 * rnd.NextDouble() - 1); + double yOffset = MaxOffset * (2 * rnd.NextDouble() - 1); + double angle = MaxRotation * (2 * rnd.NextDouble() - 1); + + TranslateTransform offsetTF = new TranslateTransform(xOffset, yOffset); + RotateTransform rotateRT = new RotateTransform(angle, child.DesiredSize.Width / 2, child.DesiredSize.Height / 2); + + TransformGroup tfg = new TransformGroup(); + tfg.Children.Add(offsetTF); + tfg.Children.Add(rotateRT); + child.RenderTransform = tfg; + } + } + } +} diff --git a/source/Samples/Shell/PicturePropertiesEditor/CS/PicturePropertiesEditor.csproj b/source/Samples/Shell/PicturePropertiesEditor/CS/PicturePropertiesEditor.csproj new file mode 100644 index 00000000..1a371401 --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/CS/PicturePropertiesEditor.csproj @@ -0,0 +1,173 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {B83D884E-57E6-476A-BC83-78E2892C44F8} + WinExe + Properties + Microsoft.WindowsAPICodePack.Samples.PicturePropertiesEditor + PicturePropertiesEditor + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + app.manifest + + + + + + + + + 3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + 3.5 + + + + 3.5 + + + 3.5 + + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + App.xaml + Code + + + Window1.xaml + Code + + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + RatingControl.xaml + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/PicturePropertiesEditor/CS/PicturePropertiesEditor.sln b/source/Samples/Shell/PicturePropertiesEditor/CS/PicturePropertiesEditor.sln new file mode 100644 index 00000000..6ade55c7 --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/CS/PicturePropertiesEditor.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PicturePropertiesEditor", "PicturePropertiesEditor.csproj", "{B83D884E-57E6-476A-BC83-78E2892C44F8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B83D884E-57E6-476A-BC83-78E2892C44F8}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {B83D884E-57E6-476A-BC83-78E2892C44F8}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {B83D884E-57E6-476A-BC83-78E2892C44F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B83D884E-57E6-476A-BC83-78E2892C44F8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B83D884E-57E6-476A-BC83-78E2892C44F8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B83D884E-57E6-476A-BC83-78E2892C44F8}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/PicturePropertiesEditor/CS/Properties/AssemblyInfo.cs b/source/Samples/Shell/PicturePropertiesEditor/CS/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..f0903c8a --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/CS/Properties/AssemblyInfo.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("PicturePropertiesEditor")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/Shell/PicturePropertiesEditor/CS/Properties/Resources.Designer.cs b/source/Samples/Shell/PicturePropertiesEditor/CS/Properties/Resources.Designer.cs new file mode 100644 index 00000000..18d5e330 --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/CS/Properties/Resources.Designer.cs @@ -0,0 +1,64 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.PicturePropertiesEditor.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.WindowsAPICodePack.Samples.PicturePropertiesEditor.Properties.Resources" + + "", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/Shell/PicturePropertiesEditor/CS/Properties/Resources.resx b/source/Samples/Shell/PicturePropertiesEditor/CS/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/CS/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/Shell/PicturePropertiesEditor/CS/Properties/Settings.Designer.cs b/source/Samples/Shell/PicturePropertiesEditor/CS/Properties/Settings.Designer.cs new file mode 100644 index 00000000..f833a1a9 --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/CS/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.PicturePropertiesEditor.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/Shell/PicturePropertiesEditor/CS/Properties/Settings.settings b/source/Samples/Shell/PicturePropertiesEditor/CS/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/CS/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/PicturePropertiesEditor/CS/Window1.xaml b/source/Samples/Shell/PicturePropertiesEditor/CS/Window1.xaml new file mode 100644 index 00000000..fb774ac5 --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/CS/Window1.xaml @@ -0,0 +1,325 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/PicturePropertiesEditor/CS/Window1.xaml.cs b/source/Samples/Shell/PicturePropertiesEditor/CS/Window1.xaml.cs new file mode 100644 index 00000000..678613b5 --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/CS/Window1.xaml.cs @@ -0,0 +1,331 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Media; +using Microsoft.WindowsAPICodePack.Shell; +using Microsoft.WindowsAPICodePack.Controls; +using Microsoft.WindowsAPICodePack.Shell.PropertySystem; + +namespace Microsoft.WindowsAPICodePack.Samples.PicturePropertiesEditor +{ + /// + /// Interaction logic for Window1.xaml + /// + public partial class Window1 : Window + { + private static string MultipleValuesText = "(Multiple values)"; + + public Window1() + { + InitializeComponent(); + + // Set the initial location for the explorer browser + this.ExplorerBrowser1.NavigationTarget = (ShellObject)KnownFolders.SamplePictures; + + this.tabControl1.SelectionChanged += new SelectionChangedEventHandler(tabControl1_SelectionChanged); + this.ResortBtn.Click += new RoutedEventHandler(ResortBtn_Click); + } + + void ResortBtn_Click(object sender, RoutedEventArgs e) + { + if (ListBoxThumbnails.Items.Count <= 1) + return; + + // Anytime user tries to select an item, + // rotate through the items... + object obj = ListBoxThumbnails.Items.GetItemAt(ListBoxThumbnails.Items.Count - 1); + + if (obj != null) + { + ListBoxThumbnails.Items.RemoveAt(ListBoxThumbnails.Items.Count - 1); + ListBoxThumbnails.Items.Insert(0, obj); + } + } + + void tabControl1_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + if (this.tabControl1.SelectedIndex == 1) + SetupExplorerBrowser2(); + } + + private void SetupExplorerBrowser2() + { + ExplorerBrowser2.SingleSelection = false; + ExplorerBrowser2.PreviewPane = PaneVisibilityState.Hide; + ExplorerBrowser2.QueryPane = PaneVisibilityState.Hide; + ExplorerBrowser2.NavigationPane = PaneVisibilityState.Hide; + ExplorerBrowser2.CommandsOrganizePane = PaneVisibilityState.Hide; + ExplorerBrowser2.CommandsViewPane = PaneVisibilityState.Hide; + ExplorerBrowser2.DetailsPane = PaneVisibilityState.Hide; + ExplorerBrowser2.NoHeaderInAllViews = true; + ExplorerBrowser2.NoColumnHeader = true; + //ExplorerBrowser2.NoSubfolders = true; + ExplorerBrowser2.AdvancedQueryPane = PaneVisibilityState.Hide; + ExplorerBrowser2.CommandsPane = PaneVisibilityState.Hide; + ExplorerBrowser2.FullRowSelect = true; + ExplorerBrowser2.ViewMode = ExplorerBrowserViewMode.Tile; + + ExplorerBrowser2.ExplorerBrowserControl.SelectionChanged += new EventHandler(ExplorerBrowserControl_SelectionChanged); + + ExplorerBrowser2.NavigationTarget = (ShellObject)KnownFolders.SamplePictures; + } + + void ExplorerBrowserControl_SelectionChanged(object sender, EventArgs e) + { + // When the user selects items from the explorer browser control, update the various properties + UpdateProperties(); + } + + private void UpdateProperties() + { + if (ExplorerBrowser2.SelectedItems.Count > 1) // multiple items + { + // Thumbnail + ListBoxThumbnails.Items.Clear(); + + foreach (ShellObject so in ExplorerBrowser2.SelectedItems) + { + Image img = new Image(); + img.Height = 200; + img.Width = 200; + img.Source = so.Thumbnail.LargeBitmapSource; + + ListBoxThumbnails.Items.Add(img); + } + + #region Description properties + + // Title + TextBoxTitle.Text = GetPropertyValue("System.Title") as string; + + // Subject + TextBoxSubject.Text = GetPropertyValue("System.Subject") as string; + + // Rating + UInt32? rating = GetPropertyValue("System.SimpleRating") as UInt32?; + RatingValueControl.RatingValue = rating.HasValue ? Convert.ToInt32(rating.Value) : 0; + + // Tags / Keywords + // TODO - We could probably loop through the tags for each file and if they are same, + // display them. For now, just treating them all being different values + ListBoxTags.Items.Clear(); + ListBoxTags.Items.Add(MultipleValuesText); + + // Comments + TextBoxComments.Text = GetPropertyValue("System.Comment") as string; + + #endregion + + #region Origin Properties + + // Authors + // TODO - We could probably loop through the tags for each file and if they are same, + // display them. For now, just treating them all being different values + ListBoxAuthors.ItemsSource = new string[] { MultipleValuesText }; + + // Date Taken + TextBoxDateTaken.Text = GetPropertyValue("System.Photo.DateTaken") as string; + + // Date Acquired + TextBoxDateAcquired.Text = GetPropertyValue("System.DateAcquired") as string; + + // Copyright + TextBoxCopyright.Text = GetPropertyValue("System.Copyright") as string; + + #endregion + + #region Image Properties + + // Dimensions + TextBoxDimensions.Text = GetPropertyValue("System.Image.Dimensions") as string; + + // Horizontal Resolution + TextBoxHorizontalResolution.Text = GetPropertyValue("System.Image.HorizontalResolution").ToString(); + + // Vertical Resolution + TextBoxVerticalResolution.Text = GetPropertyValue("System.Image.VerticalResolution").ToString(); + + // Bit Depth + TextBoxBitDepth.Text = GetPropertyValue("System.Image.BitDepth").ToString(); + + #endregion + + } + else if (ExplorerBrowser2.SelectedItems.Count == 1) // only one item + { + ShellObject so = ExplorerBrowser2.SelectedItems[0]; + + // Thumbnail + ListBoxThumbnails.Items.Clear(); + Image img = new Image(); + img.Height = img.Width = 200; + img.Stretch = Stretch.Fill; + img.Source = so.Thumbnail.LargeBitmapSource; + ListBoxThumbnails.Items.Add(img); + + #region Description properties + + // Title + TextBoxTitle.Text = so.Properties.System.Title.Value; + + // Subject + TextBoxSubject.Text = so.Properties.System.Subject.Value; + + // Rating + RatingValueControl.RatingValue = so.Properties.System.SimpleRating.Value.HasValue ? (int)so.Properties.System.SimpleRating.Value : 0; + + // Tags / Keywords + ListBoxTags.Items.Clear(); + if(so.Properties.System.Keywords.Value != null) + foreach (string tag in so.Properties.System.Keywords.Value) + ListBoxTags.Items.Add(tag); + + // Comments + TextBoxComments.Text = so.Properties.System.Comment.Value; + + #endregion + + #region Origin Properties + + // Authors + ListBoxAuthors.ItemsSource = so.Properties.System.Author.Value; + + // Date Taken + TextBoxDateTaken.Text = so.Properties.System.Photo.DateTaken.Value.HasValue ? so.Properties.System.Photo.DateTaken.Value.Value.ToShortDateString() : ""; + + // Date Acquired + TextBoxDateAcquired.Text = so.Properties.System.DateAcquired.Value.HasValue ? so.Properties.System.DateAcquired.Value.Value.ToShortDateString() : ""; + + // Copyright + TextBoxCopyright.Text = so.Properties.System.Copyright.Value; + + #endregion + + #region Image Properties + + // Dimensions + TextBoxDimensions.Text = so.Properties.System.Image.Dimensions.Value; + + // Horizontal Resolution + TextBoxHorizontalResolution.Text = so.Properties.System.Image.HorizontalResolution.Value.ToString(); + + // Vertical Resolution + TextBoxVerticalResolution.Text = so.Properties.System.Image.VerticalResolution.Value.ToString(); + + // Bit Depth + TextBoxBitDepth.Text = so.Properties.System.Image.BitDepth.Value.ToString(); + + #endregion + } + } + + private object GetPropertyValue(string property) + { + object returnValue = null; + + foreach (ShellObject so in ExplorerBrowser2.SelectedItems) + { + object objValue = so.Properties.GetProperty(property).ValueAsObject; + + if (returnValue == null) + returnValue = objValue; + else if (objValue == null || (returnValue.ToString() != objValue.ToString())) + { + returnValue = MultipleValuesText; + break; // if the values differ, than break and use the multiple values text; + } + } + + return returnValue; + } + + private void buttonCancel_Click(object sender, RoutedEventArgs e) + { + // reset (cancel the user's changes) + UpdateProperties(); + } + + private void buttonSave_Click(object sender, RoutedEventArgs e) + { + // Save + // depending on what we have selected ... + if (ExplorerBrowser2.SelectedItems.Count >= 1) + { + foreach (ShellObject so in ExplorerBrowser2.SelectedItems) + { + SaveProperties(so); + } + } + } + + private void SaveProperties(ShellObject so) + { + // Get the property writer for each file + using (ShellPropertyWriter sw = so.Properties.GetPropertyWriter()) + { + // Write the same set of property values for each file, since the user has selected + // multiple files. + // ignore the ones that aren't changed... + + #region Description Properties + + // Title + if (TextBoxTitle.Text != MultipleValuesText) + sw.WriteProperty(so.Properties.System.Title, !string.IsNullOrEmpty(TextBoxTitle.Text) ? TextBoxTitle.Text : null); + + // Subject + if (TextBoxSubject.Text != MultipleValuesText) + sw.WriteProperty(so.Properties.System.Subject, !string.IsNullOrEmpty(TextBoxSubject.Text) ? TextBoxSubject.Text : null); + + // Rating + if (RatingValueControl.RatingValue != 0) + sw.WriteProperty(so.Properties.System.SimpleRating, Convert.ToUInt32(RatingValueControl.RatingValue)); + + // Tags / Keywords + // read-only property for now + + // Comments + if (TextBoxComments.Text != MultipleValuesText) + sw.WriteProperty(so.Properties.System.Comment, !string.IsNullOrEmpty(TextBoxComments.Text) ? TextBoxComments.Text : null); + + #endregion + + #region Origin Properties + + // Authors + // read-only property for now + + // Date Taken + // read-only property for now + + // Date Acquired + // read-only property for now + + // Copyright + if (TextBoxCopyright.Text != MultipleValuesText) + sw.WriteProperty(so.Properties.System.Copyright, !string.IsNullOrEmpty(TextBoxCopyright.Text) ? TextBoxCopyright.Text : null); + + #endregion + + #region Image Properties + + // Dimensions + // Read-only property + + // Horizontal Resolution + // Read-only property + + // Vertical Resolution + // Read-only property + + // Bit Depth + // Read-only property + + #endregion + + } + } + } +} diff --git a/source/Samples/Shell/PicturePropertiesEditor/CS/app.manifest b/source/Samples/Shell/PicturePropertiesEditor/CS/app.manifest new file mode 100644 index 00000000..42396c5d --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/CS/app.manifest @@ -0,0 +1,17 @@ + + + + Demo Application + + + + + + diff --git a/source/Samples/Shell/PicturePropertiesEditor/VB/Application.xaml b/source/Samples/Shell/PicturePropertiesEditor/VB/Application.xaml new file mode 100644 index 00000000..457804ae --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/VB/Application.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/Shell/PicturePropertiesEditor/VB/Application.xaml.vb b/source/Samples/Shell/PicturePropertiesEditor/VB/Application.xaml.vb new file mode 100644 index 00000000..d4df8d6c --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/VB/Application.xaml.vb @@ -0,0 +1,19 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Configuration +Imports System.Data +Imports System.Linq +Imports System.Windows + +Namespace PicturePropertiesEditor + ''' + ''' Interaction logic for App.xaml + ''' + Partial Public Class App + Inherits Application + End Class +End Namespace diff --git a/source/Samples/Shell/PicturePropertiesEditor/VB/Controls/RatingControl.xaml b/source/Samples/Shell/PicturePropertiesEditor/VB/Controls/RatingControl.xaml new file mode 100644 index 00000000..a6162480 --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/VB/Controls/RatingControl.xaml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/PicturePropertiesEditor/VB/Controls/RatingControl.xaml.vb b/source/Samples/Shell/PicturePropertiesEditor/VB/Controls/RatingControl.xaml.vb new file mode 100644 index 00000000..e73b7b9a --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/VB/Controls/RatingControl.xaml.vb @@ -0,0 +1,85 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Linq +Imports System.Text +Imports System.Windows +Imports System.Windows.Controls +Imports System.Windows.Data +Imports System.Windows.Documents +Imports System.Windows.Input +Imports System.Windows.Media +Imports System.Windows.Media.Imaging +Imports System.Windows.Navigation +Imports System.Windows.Shapes +Imports System.Windows.Controls.Primitives + +Namespace Microsoft.WindowsAPICodePack.Samples.PicturePropertiesEditor + ''' + ''' Interaction logic for RatingControl.xaml + ''' + Partial Public Class RatingControl + Inherits UserControl + Public Shared ReadOnly RatingValueProperty As DependencyProperty = DependencyProperty.Register("RatingValue", GetType(Integer), GetType(RatingControl), New FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, New PropertyChangedCallback(AddressOf RatingValueChanged))) + + + Private maxValue As Integer = 99 + + Public Property RatingValue() As Integer + Get + Return CInt(Fix(GetValue(RatingValueProperty))) + End Get + Set(ByVal value As Integer) + If value < 0 Then + SetValue(RatingValueProperty, 0) + ElseIf value > maxValue Then + SetValue(RatingValueProperty, maxValue) + Else + SetValue(RatingValueProperty, value) + End If + End Set + End Property + + Private Shared Sub RatingValueChanged(ByVal sender As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs) + Dim parent As RatingControl = TryCast(sender, RatingControl) + Dim ratingValue As Integer = CInt(Fix(e.NewValue)) + Dim children As UIElementCollection = (CType(parent.Content, Grid)).Children + Dim button As ToggleButton = Nothing + + For i As Integer = 0 To ratingValue - 1 + button = TryCast(children(i), ToggleButton) + If button IsNot Nothing Then + button.IsChecked = True + End If + Next i + + For i As Integer = ratingValue To children.Count - 1 + button = TryCast(children(i), ToggleButton) + If button IsNot Nothing Then + button.IsChecked = False + End If + Next i + End Sub + + Public Sub New() + InitializeComponent() + End Sub + + Private Sub RatingButtonClickEventHandler(ByVal sender As Object, ByVal e As RoutedEventArgs) + Dim button As ToggleButton = TryCast(sender, ToggleButton) + + Dim newRating As Integer = Integer.Parse(CType(button.Tag, String)) + + If CBool(button.IsChecked) OrElse newRating < RatingValue Then + RatingValue = newRating + Else + RatingValue = newRating - 1 + End If + + e.Handled = True + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/PicturePropertiesEditor/VB/Controls/ZOrderStackPanel.vb b/source/Samples/Shell/PicturePropertiesEditor/VB/Controls/ZOrderStackPanel.vb new file mode 100644 index 00000000..ac4a3977 --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/VB/Controls/ZOrderStackPanel.vb @@ -0,0 +1,110 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Linq +Imports System.Text +Imports System.Windows.Controls +Imports System.Windows +Imports System.Windows.Media + +Namespace Microsoft.WindowsAPICodePack.Samples.PicturePropertiesEditor + Public Class ZOrderStackPanel + Inherits Panel + + #Region "Private Members" + + Private rnd As New Random() + + #End Region + + #Region "Public Constructors" + + Public Sub New() + MyBase.New() + End Sub + + #End Region + + #Region "MaxOffset Property" + + Public Shared ReadOnly MaxOffsetProperty As DependencyProperty = DependencyProperty.Register("MaxOffset", GetType(Integer), GetType(ZOrderStackPanel)) + + Public Property MaxOffset() As Integer + Get + Return CInt(Fix(GetValue(MaxOffsetProperty))) + End Get + Set(ByVal value As Integer) + SetValue(MaxOffsetProperty, value) + End Set + End Property + + #End Region + + #Region "MaxRotation Property" + + Public Shared ReadOnly MaxRotationProperty As DependencyProperty = DependencyProperty.Register("MaxRotation", GetType(Double), GetType(ZOrderStackPanel)) + + Public Property MaxRotation() As Double + Get + Return CDbl(GetValue(MaxRotationProperty)) + End Get + Set(ByVal value As Double) + SetValue(MaxRotationProperty, value) + End Set + End Property + + #End Region + + Protected Overrides Function MeasureOverride(ByVal availableSize As Size) As Size + Dim resultSize As New Size(0, 0) + + For Each child As UIElement In Children + child.Measure(availableSize) + resultSize.Width = Math.Max(resultSize.Width, child.DesiredSize.Width) + resultSize.Height = Math.Max(resultSize.Height, child.DesiredSize.Height) + Next child + + resultSize.Width = If(Double.IsPositiveInfinity(availableSize.Width), resultSize.Width, availableSize.Width) + resultSize.Height = If(Double.IsPositiveInfinity(availableSize.Height), resultSize.Height, availableSize.Height) + + Return resultSize + + End Function + + Protected Overrides Function ArrangeOverride(ByVal finalSize As Size) As Size + For Each child As UIElement In Children + Dim childX As Double = finalSize.Width / 2 - child.DesiredSize.Width / 2 + Dim childY As Double = finalSize.Height / 2 - child.DesiredSize.Height / 2 + child.Arrange(New Rect(childX, childY, child.DesiredSize.Width, child.DesiredSize.Height)) + + RotateAndOffsetChild(child) + Next child + + + Return finalSize + End Function + + Private Sub RotateAndOffsetChild(ByVal child As UIElement) + If MaxRotation <> 0 AndAlso MaxOffset <> 0 Then + ' create a new Random var called rnd + + Dim randomNumber As Double = rnd.NextDouble() + + Dim xOffset As Double = MaxOffset * (2 * rnd.NextDouble() - 1) + Dim yOffset As Double = MaxOffset * (2 * rnd.NextDouble() - 1) + Dim angle As Double = MaxRotation * (2 * rnd.NextDouble() - 1) + + Dim offsetTF As New TranslateTransform(xOffset, yOffset) + Dim rotateRT As New RotateTransform(angle, child.DesiredSize.Width / 2, child.DesiredSize.Height / 2) + + Dim tfg As New TransformGroup() + tfg.Children.Add(offsetTF) + tfg.Children.Add(rotateRT) + child.RenderTransform = tfg + End If + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/PicturePropertiesEditor/VB/My Project/AssemblyInfo.vb b/source/Samples/Shell/PicturePropertiesEditor/VB/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..c85e8068 --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/VB/My Project/AssemblyInfo.vb @@ -0,0 +1,56 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Resources +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + + '(used if a resource is not found in the page, + ' or application resource dictionaries) + '(used if a resource is not found in the page, + ' app, or any theme specific resource dictionaries) + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/Shell/PicturePropertiesEditor/VB/My Project/Resources.Designer.vb b/source/Samples/Shell/PicturePropertiesEditor/VB/My Project/Resources.Designer.vb new file mode 100644 index 00000000..e96b8aff --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/VB/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/PicturePropertiesEditor/VB/My Project/Resources.resx b/source/Samples/Shell/PicturePropertiesEditor/VB/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/VB/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/Shell/PicturePropertiesEditor/VB/My Project/Settings.Designer.vb b/source/Samples/Shell/PicturePropertiesEditor/VB/My Project/Settings.Designer.vb new file mode 100644 index 00000000..f2ffe239 --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/VB/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class Settings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()),Settings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As Settings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Settings + Get + Return Global.Settings.Default + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/PicturePropertiesEditor/VB/My Project/Settings.settings b/source/Samples/Shell/PicturePropertiesEditor/VB/My Project/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/VB/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/PicturePropertiesEditor/VB/PicturePropertiesEditor.sln b/source/Samples/Shell/PicturePropertiesEditor/VB/PicturePropertiesEditor.sln new file mode 100644 index 00000000..f0c7fd7b --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/VB/PicturePropertiesEditor.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "PicturePropertiesEditor", "PicturePropertiesEditor.vbproj", "{B83D884E-57E6-476A-BC83-78E2892C44F8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B83D884E-57E6-476A-BC83-78E2892C44F8}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {B83D884E-57E6-476A-BC83-78E2892C44F8}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {B83D884E-57E6-476A-BC83-78E2892C44F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B83D884E-57E6-476A-BC83-78E2892C44F8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B83D884E-57E6-476A-BC83-78E2892C44F8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B83D884E-57E6-476A-BC83-78E2892C44F8}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/PicturePropertiesEditor/VB/PicturePropertiesEditor.vbproj b/source/Samples/Shell/PicturePropertiesEditor/VB/PicturePropertiesEditor.vbproj new file mode 100644 index 00000000..064686ed --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/VB/PicturePropertiesEditor.vbproj @@ -0,0 +1,184 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {9A9226D8-65A8-4D3C-A602-74F177D054CE} + WinExe + + + PicturePropertiesEditor + v3.5 + On + Binary + Off + On + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + app.manifest + + + + + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + true + true + prompt + AllRules.ruleset + + + + pdbonly + true + bin\Release\ + false + true + prompt + AllRules.ruleset + + + + + + 3.5 + + + + 3.5 + + + 3.5 + + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + Application.xaml + Code + + + Window1.xaml + Code + + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + RatingControl.xaml + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + Designer + My.Resources + + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/PicturePropertiesEditor/VB/Window1.xaml b/source/Samples/Shell/PicturePropertiesEditor/VB/Window1.xaml new file mode 100644 index 00000000..fb774ac5 --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/VB/Window1.xaml @@ -0,0 +1,325 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/PicturePropertiesEditor/VB/Window1.xaml.vb b/source/Samples/Shell/PicturePropertiesEditor/VB/Window1.xaml.vb new file mode 100644 index 00000000..5554be76 --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/VB/Window1.xaml.vb @@ -0,0 +1,338 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows +Imports System.Windows.Controls +Imports System.Windows.Media +Imports Microsoft.WindowsAPICodePack.Shell +Imports Microsoft.WindowsAPICodePack.Controls +Imports Microsoft.WindowsAPICodePack.Shell.PropertySystem + +Namespace Microsoft.WindowsAPICodePack.Samples.PicturePropertiesEditor + ''' + ''' Interaction logic for Window1.xaml + ''' + Partial Public Class Window1 + Inherits Window + Private Shared MultipleValuesText As String = "(Multiple values)" + + Public Sub New() + InitializeComponent() + + ' Set the initial location for the explorer browser + Me.ExplorerBrowser1.NavigationTarget = CType(KnownFolders.SamplePictures, ShellObject) + + AddHandler tabControl1.SelectionChanged, AddressOf tabControl1_SelectionChanged + AddHandler ResortBtn.Click, AddressOf ResortBtn_Click + End Sub + + Private Sub ResortBtn_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + If ListBoxThumbnails.Items.Count <= 1 Then + Return + End If + + ' Anytime user tries to select an item, + ' rotate through the items... + Dim obj As Object = ListBoxThumbnails.Items.GetItemAt(ListBoxThumbnails.Items.Count - 1) + + If obj IsNot Nothing Then + ListBoxThumbnails.Items.RemoveAt(ListBoxThumbnails.Items.Count - 1) + ListBoxThumbnails.Items.Insert(0, obj) + End If + End Sub + + Private Sub tabControl1_SelectionChanged(ByVal sender As Object, ByVal e As SelectionChangedEventArgs) + If Me.tabControl1.SelectedIndex = 1 Then + SetupExplorerBrowser2() + End If + End Sub + + Private Sub SetupExplorerBrowser2() + ExplorerBrowser2.SingleSelection = False + ExplorerBrowser2.PreviewPane = PaneVisibilityState.Hide + ExplorerBrowser2.QueryPane = PaneVisibilityState.Hide + ExplorerBrowser2.NavigationPane = PaneVisibilityState.Hide + ExplorerBrowser2.CommandsOrganizePane = PaneVisibilityState.Hide + ExplorerBrowser2.CommandsViewPane = PaneVisibilityState.Hide + ExplorerBrowser2.DetailsPane = PaneVisibilityState.Hide + ExplorerBrowser2.NoHeaderInAllViews = True + ExplorerBrowser2.NoColumnHeader = True + 'ExplorerBrowser2.NoSubfolders = true; + ExplorerBrowser2.AdvancedQueryPane = PaneVisibilityState.Hide + ExplorerBrowser2.CommandsPane = PaneVisibilityState.Hide + ExplorerBrowser2.FullRowSelect = True + ExplorerBrowser2.ViewMode = ExplorerBrowserViewMode.Tile + + AddHandler ExplorerBrowser2.ExplorerBrowserControl.SelectionChanged, AddressOf ExplorerBrowserControl_SelectionChanged + + ExplorerBrowser2.NavigationTarget = CType(KnownFolders.SamplePictures, ShellObject) + End Sub + + Private Sub ExplorerBrowserControl_SelectionChanged(ByVal sender As Object, ByVal e As EventArgs) + ' When the user selects items from the explorer browser control, update the various properties + UpdateProperties() + End Sub + + Private Sub UpdateProperties() + If ExplorerBrowser2.SelectedItems.Count > 1 Then ' multiple items + ' Thumbnail + ListBoxThumbnails.Items.Clear() + + For Each so As ShellObject In ExplorerBrowser2.SelectedItems + Dim img As New Image() + img.Height = 200 + img.Width = 200 + img.Source = so.Thumbnail.LargeBitmapSource + + ListBoxThumbnails.Items.Add(img) + Next so + + ' #Region "Description properties" + + ' Title + TextBoxTitle.Text = TryCast(GetPropertyValue("System.Title"), String) + + ' Subject + TextBoxSubject.Text = TryCast(GetPropertyValue("System.Subject"), String) + + ' Rating + Dim ratingObj As Object = Nothing + + ratingObj = GetPropertyValue("System.SimpleRating") + + If ratingObj Is Nothing OrElse ratingObj.ToString() = MultipleValuesText Then + RatingValueControl.RatingValue = 0 + Else + Dim rating? As UInt32 = CType(ratingObj, UInt32?) + RatingValueControl.RatingValue = If(rating.HasValue, Convert.ToInt32(rating.Value), 0) + End If + + ' Tags / Keywords + ' TODO - We could probably loop through the tags for each file and if they are same, + ' display them. For now, just treating them all being different values + ListBoxTags.Items.Clear() + ListBoxTags.Items.Add(MultipleValuesText) + + ' Comments + TextBoxComments.Text = TryCast(GetPropertyValue("System.Comment"), String) + + ' #End Region + + ' #Region "Origin Properties" + + ' Authors + ' TODO - We could probably loop through the tags for each file and if they are same, + ' display them. For now, just treating them all being different values + ListBoxAuthors.Items.Clear() + ListBoxAuthors.Items.Add(MultipleValuesText) + + ' Date Taken + TextBoxDateTaken.Text = TryCast(GetPropertyValue("System.Photo.DateTaken"), String) + + ' Date Acquired + TextBoxDateAcquired.Text = TryCast(GetPropertyValue("System.DateAcquired"), String) + + ' Copyright + TextBoxCopyright.Text = TryCast(GetPropertyValue("System.Copyright"), String) + + ' #End Region + + ' #Region "Image Properties" + + ' Dimensions + TextBoxDimensions.Text = TryCast(GetPropertyValue("System.Image.Dimensions"), String) + + ' Horizontal Resolution + TextBoxHorizontalResolution.Text = GetPropertyValue("System.Image.HorizontalResolution").ToString() + + ' Vertical Resolution + TextBoxVerticalResolution.Text = GetPropertyValue("System.Image.VerticalResolution").ToString() + + ' Bit Depth + TextBoxBitDepth.Text = GetPropertyValue("System.Image.BitDepth").ToString() + + ' #End Region + + ElseIf ExplorerBrowser2.SelectedItems.Count = 1 Then ' only one item + Dim so As ShellObject = ExplorerBrowser2.SelectedItems(0) + + ' Thumbnail + ListBoxThumbnails.Items.Clear() + Dim img As New Image() + img.Width = 200 + img.Height = img.Width + img.Stretch = Stretch.Fill + img.Source = so.Thumbnail.LargeBitmapSource + ListBoxThumbnails.Items.Add(img) + + ' #Region "Description properties" + + ' Title + TextBoxTitle.Text = so.Properties.System.Title.Value + + ' Subject + TextBoxSubject.Text = so.Properties.System.Subject.Value + + ' Rating + RatingValueControl.RatingValue = If(so.Properties.System.SimpleRating.Value.HasValue, CInt(Fix(so.Properties.System.SimpleRating.Value)), 0) + + ' Tags / Keywords + ListBoxTags.Items.Clear() + If (so.Properties.System.Keywords.Value Is Nothing) Then + Else + For Each tag As String In so.Properties.System.Keywords.Value + ListBoxTags.Items.Add(tag) + Next + End If + + ' Comments + TextBoxComments.Text = so.Properties.System.Comment.Value + + ' #End Region + + ' #Region "Origin Properties" + + ' Authors + ListBoxAuthors.Items.Clear() + If so.Properties.System.Author.Value Is Nothing Then + Else + For Each author As String In so.Properties.System.Author.Value + ListBoxAuthors.Items.Add(author) + Next + End If + + + ' Date Taken + TextBoxDateTaken.Text = If(so.Properties.System.Photo.DateTaken.Value.HasValue, so.Properties.System.Photo.DateTaken.Value.Value.ToShortDateString(), "") + + ' Date Acquired + TextBoxDateAcquired.Text = If(so.Properties.System.DateAcquired.Value.HasValue, so.Properties.System.DateAcquired.Value.Value.ToShortDateString(), "") + + ' Copyright + TextBoxCopyright.Text = so.Properties.System.Copyright.Value + + ' #End Region + + ' #Region "Image Properties" + + ' Dimensions + TextBoxDimensions.Text = so.Properties.System.Image.Dimensions.Value + + ' Horizontal Resolution + TextBoxHorizontalResolution.Text = so.Properties.System.Image.HorizontalResolution.Value.ToString() + + ' Vertical Resolution + TextBoxVerticalResolution.Text = so.Properties.System.Image.VerticalResolution.Value.ToString() + + ' Bit Depth + TextBoxBitDepth.Text = so.Properties.System.Image.BitDepth.Value.ToString() + + ' #End Region + End If + End Sub + + Private Function GetPropertyValue(ByVal [property] As String) As Object + Dim returnValue As Object = Nothing + + For Each so As ShellObject In ExplorerBrowser2.SelectedItems + Dim objValue As Object = so.Properties.GetProperty([property]).ValueAsObject + + If returnValue Is Nothing Then + returnValue = objValue + ElseIf objValue Is Nothing OrElse (returnValue.ToString() <> objValue.ToString()) Then + returnValue = MultipleValuesText + Exit For ' if the values differ, than break and use the multiple values text; + End If + Next so + + Return returnValue + End Function + + Private Sub buttonCancel_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' reset (cancel the user's changes) + UpdateProperties() + End Sub + + Private Sub buttonSave_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' Save + ' depending on what we have selected ... + If ExplorerBrowser2.SelectedItems.Count = 1 Then + + ElseIf ExplorerBrowser2.SelectedItems.Count > 1 Then + For Each so As ShellObject In ExplorerBrowser2.SelectedItems + ' Get the property writer for each file + Using sw As ShellPropertyWriter = so.Properties.GetPropertyWriter() + ' Write the same set of property values for each file, since the user has selected + ' multiple files. + ' ignore the ones that aren't changed... + + ' #Region "Description Properties" + + ' Title + If TextBoxTitle.Text <> MultipleValuesText Then + sw.WriteProperty(so.Properties.System.Title, If((Not String.IsNullOrEmpty(TextBoxTitle.Text)), TextBoxTitle.Text, Nothing)) + End If + + ' Subject + If TextBoxSubject.Text <> MultipleValuesText Then + sw.WriteProperty(so.Properties.System.Subject, If((Not String.IsNullOrEmpty(TextBoxSubject.Text)), TextBoxSubject.Text, Nothing)) + End If + + ' Rating + If RatingValueControl.RatingValue <> 0 Then + sw.WriteProperty(so.Properties.System.SimpleRating, Convert.ToUInt32(RatingValueControl.RatingValue)) + End If + + ' Tags / Keywords + ' read-only property for now + + ' Comments + If TextBoxComments.Text <> MultipleValuesText Then + sw.WriteProperty(so.Properties.System.Comment, If((Not String.IsNullOrEmpty(TextBoxComments.Text)), TextBoxComments.Text, Nothing)) + End If + + ' #End Region + + + ' #Region "Origin Properties" + + ' Authors + ' read-only property for now + + ' Date Taken + ' read-only property for now + + ' Date Acquired + ' read-only property for now + + ' Copyright + If TextBoxCopyright.Text <> MultipleValuesText Then + sw.WriteProperty(so.Properties.System.Copyright, If((Not String.IsNullOrEmpty(TextBoxCopyright.Text)), TextBoxCopyright.Text, Nothing)) + End If + + ' #End Region + + ' #Region "Image Properties" + + ' Dimensions + ' Read-only property + + ' Horizontal Resolution + ' Read-only property + + ' Vertical Resolution + ' Read-only property + + ' Bit Depth + ' Read-only property + + ' #End Region + + End Using + Next so + End If + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/PicturePropertiesEditor/VB/app.manifest b/source/Samples/Shell/PicturePropertiesEditor/VB/app.manifest new file mode 100644 index 00000000..42396c5d --- /dev/null +++ b/source/Samples/Shell/PicturePropertiesEditor/VB/app.manifest @@ -0,0 +1,17 @@ + + + + Demo Application + + + + + + diff --git a/source/Samples/Shell/PropertyEditDemo/CS/PropertyEdit/PropertyEdit.cs b/source/Samples/Shell/PropertyEditDemo/CS/PropertyEdit/PropertyEdit.cs new file mode 100644 index 00000000..f86c4a4a --- /dev/null +++ b/source/Samples/Shell/PropertyEditDemo/CS/PropertyEdit/PropertyEdit.cs @@ -0,0 +1,237 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Linq; +using Microsoft.WindowsAPICodePack.Shell; +using System.Collections.Generic; +using System.IO; +using Microsoft.WindowsAPICodePack.Shell.PropertySystem; +using System.Diagnostics; + +namespace Microsoft.WindowsAPICodePack.Shell.Samples +{ + public class PropertyEdit + { + static void Main(string[] args) + { + PropertyEdit app = new PropertyEdit(); + try + { + app.DoAction(args); + } + catch (Exception e) + { + Console.WriteLine("Exception: " + e.Message); + if (e.InnerException != null) + { + Console.WriteLine("Inner exception: " + e.InnerException.Message); + } + } + + if (Debugger.IsAttached) + { + Console.WriteLine(); + Console.Write("Press any key to exit..."); + Console.ReadKey(true); + } + } + + void DoAction(string [] args) + { + if (args.Length == 0 || args[0].Contains("?")) + { + Usage(); + return; + } + + + if (args[0].Equals("-get", StringComparison.InvariantCultureIgnoreCase)) + { + if (args.Length != 3) + { + Usage(); + return; + } + string propertyName = args[1]; + string fileName = Path.GetFullPath(args[2]); + + IShellProperty prop = ShellObject.FromParsingName(fileName).Properties.GetProperty(propertyName); + + DisplayPropertyValue(prop); + + } + else if (args[0].Equals("-set", StringComparison.InvariantCultureIgnoreCase)) + { + if (args.Length != 4) + { + Usage(); + return; + } + string propertyName = args[1]; + string value = args[2]; + string fileName = Path.GetFullPath(args[3]); + + IShellProperty prop = ShellObject.FromParsingName(fileName).Properties.GetProperty(propertyName); + SetPropertyValue(value, prop); + + } + else if (args[0].Equals("-info", StringComparison.InvariantCultureIgnoreCase)) + { + if (args.Length != 2) + { + Usage(); + return; + } + string propertyName = args[1]; + ShellPropertyDescription propDesc = SystemProperties.GetPropertyDescription(propertyName); + ShowPropertyInfo(propertyName, propDesc); + + } + else if (args[0].Equals("-enum", StringComparison.InvariantCultureIgnoreCase)) + { + if (args.Length < 2) + { + Usage(); + return; + } + string fileName = null; + string filter = null; + if (args.Length > 2) + { + filter = args[1]; + fileName = Path.GetFullPath(args[2]); + } + else + { + fileName = Path.GetFullPath(args[1]); + } + + EnumProperties(fileName, filter); + + } + else + { + Usage(); + return; + } + } + + private static void DisplayPropertyValue(IShellProperty prop) + { + string value = string.Empty; + value = prop.ValueAsObject == null ? "" : prop.FormatForDisplay( + PropertyDescriptionFormatOptions.None); + + Console.WriteLine("{0} = {1}", prop.CanonicalName, value); + } + + private static void EnumProperties(string fileName, string filter) + { + ShellPropertyCollection collection = new ShellPropertyCollection(fileName); + + + var properties = collection + .Where( + prop => prop.CanonicalName != null && + (filter == null ? true : prop.CanonicalName.StartsWith(filter, StringComparison.CurrentCultureIgnoreCase))) + .ToArray(); + + + Array.ForEach( + properties, + p=> + { + DisplayPropertyValue(p); + }); + } + + private static void ShowPropertyInfo(string propertyName, ShellPropertyDescription propDesc) + { + Console.WriteLine("\nProperty {0}", propDesc.CanonicalName); + Console.WriteLine("\tPropertyKey: {0}, {1}", propDesc.PropertyKey.FormatId.ToString("B"), propDesc.PropertyKey.PropertyId); + Console.WriteLine("\tLabel: {0}", propDesc.DisplayName); + Console.WriteLine("\tEdit Invitation: {0}", propDesc.EditInvitation); + Console.WriteLine("\tDisplay Type: {0}", propDesc.DisplayType); + Console.WriteLine("\tVar Enum Type: {0}", propDesc.VarEnumType); + Console.WriteLine("\tValue Type: {0}", propDesc.ValueType); + Console.WriteLine("\tDefault Column Width: {0}", propDesc.DefaultColumWidth); + Console.WriteLine("\tAggregation Type: {0}", propDesc.AggregationTypes); + Console.WriteLine("\tHas Multiple Values: {0}", (propDesc.TypeFlags & PropertyTypeOptions.MultipleValues) == PropertyTypeOptions.MultipleValues); + Console.WriteLine("\tIs Group: {0}", (propDesc.TypeFlags & PropertyTypeOptions.IsGroup) == PropertyTypeOptions.IsGroup); + Console.WriteLine("\tIs Innate: {0}", (propDesc.TypeFlags & PropertyTypeOptions.IsInnate) == PropertyTypeOptions.IsInnate); + Console.WriteLine("\tIs Queryable: {0}", (propDesc.TypeFlags & PropertyTypeOptions.IsQueryable) == PropertyTypeOptions.IsQueryable); + Console.WriteLine("\tIs Viewable: {0}", (propDesc.TypeFlags & PropertyTypeOptions.IsViewable) == PropertyTypeOptions.IsViewable); + Console.WriteLine("\tIs SystemProperty: {0}", (propDesc.TypeFlags & PropertyTypeOptions.IsSystemProperty) == PropertyTypeOptions.IsSystemProperty); + } + + private static void SetPropertyValue(string value, IShellProperty prop) + { + if (prop.ValueType == typeof(string[])) + { + string [] values = value.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); + (prop as ShellProperty).Value = values; + } + if (prop.ValueType == typeof(string)) + { + (prop as ShellProperty).Value = value; + } + else if (prop.ValueType == typeof(ushort?)) + { + (prop as ShellProperty).Value = ushort.Parse(value); + } + else if (prop.ValueType == typeof(short?)) + { + (prop as ShellProperty).Value = short.Parse(value); + } + else if (prop.ValueType == typeof(uint?)) + { + (prop as ShellProperty).Value = uint.Parse(value); + } + else if (prop.ValueType == typeof(int?)) + { + (prop as ShellProperty).Value = int.Parse(value); + } + else if (prop.ValueType == typeof(ulong?)) + { + (prop as ShellProperty).Value = ulong.Parse(value); + } + else if (prop.ValueType == typeof(long?)) + { + (prop as ShellProperty).Value = long.Parse(value); + } + else if (prop.ValueType == typeof(DateTime?)) + { + (prop as ShellProperty).Value = DateTime.Parse(value); + } + else if (prop.ValueType == typeof(double?)) + { + (prop as ShellProperty).Value = double.Parse(value); + } + } + + private void Usage() + { + Console.WriteLine("Usage: PropertyEdit.exe Filename "); + Console.WriteLine(""); + Console.WriteLine("OPTIONS:"); + Console.WriteLine(" -get Get the value for the property defined"); + Console.WriteLine(" by its Canonical Name in "); + Console.WriteLine(" -set Set the value for the property defined"); + Console.WriteLine(" by with value "); + Console.WriteLine(" -enum [Filter] Enumerate all the properties for this file."); + Console.WriteLine(" filtering (starting with) Filter value."); + Console.WriteLine(" -info Get schema information on property for this file."); + Console.WriteLine(""); + Console.WriteLine("Examples:"); + Console.WriteLine("PropertyEdit -get System.Author foo.jpg"); + Console.WriteLine("PropertyEdit -set System.Author \"Jane Smith;John Smith\" foo.docx"); + Console.WriteLine("PropertyEdit -set System.Photo.MeteringMode 2 foo.jpg"); + Console.WriteLine("PropertyEdit -set System.Photo.DateTaken \"3/11/2009 12:03:02\" foo.jpg"); + Console.WriteLine("PropertyEdit -enum foo.jpg"); + Console.WriteLine("PropertyEdit -enum System.Photo foo.jpg"); + Console.WriteLine("PropertyEdit -info System.Author foo.docx"); + } + + + } +} diff --git a/source/Samples/Shell/PropertyEditDemo/CS/PropertyEdit/PropertyEdit.csproj b/source/Samples/Shell/PropertyEditDemo/CS/PropertyEdit/PropertyEdit.csproj new file mode 100644 index 00000000..fb56adaf --- /dev/null +++ b/source/Samples/Shell/PropertyEditDemo/CS/PropertyEdit/PropertyEdit.csproj @@ -0,0 +1,106 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {4948B64F-7008-44D2-872E-21A642759B62} + Exe + Properties + Microsoft.WindowsAPICodePack.Shell.Samples + PropertyEdit + v3.5 + 512 + + + + + + + + + 3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + 3.5 + + + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/PropertyEditDemo/CS/PropertyEdit/PropertyEdit.sln b/source/Samples/Shell/PropertyEditDemo/CS/PropertyEdit/PropertyEdit.sln new file mode 100644 index 00000000..b1516475 --- /dev/null +++ b/source/Samples/Shell/PropertyEditDemo/CS/PropertyEdit/PropertyEdit.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PropertyEdit", "PropertyEdit.csproj", "{4948B64F-7008-44D2-872E-21A642759B62}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4948B64F-7008-44D2-872E-21A642759B62}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {4948B64F-7008-44D2-872E-21A642759B62}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {4948B64F-7008-44D2-872E-21A642759B62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4948B64F-7008-44D2-872E-21A642759B62}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4948B64F-7008-44D2-872E-21A642759B62}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4948B64F-7008-44D2-872E-21A642759B62}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/PropertyEditDemo/VB/PropertyEdit/PropertyEdit.sln b/source/Samples/Shell/PropertyEditDemo/VB/PropertyEdit/PropertyEdit.sln new file mode 100644 index 00000000..d99370af --- /dev/null +++ b/source/Samples/Shell/PropertyEditDemo/VB/PropertyEdit/PropertyEdit.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "PropertyEdit", "PropertyEdit.vbproj", "{4948B64F-7008-44D2-872E-21A642759B62}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {4948B64F-7008-44D2-872E-21A642759B62}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {4948B64F-7008-44D2-872E-21A642759B62}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {4948B64F-7008-44D2-872E-21A642759B62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4948B64F-7008-44D2-872E-21A642759B62}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4948B64F-7008-44D2-872E-21A642759B62}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4948B64F-7008-44D2-872E-21A642759B62}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/PropertyEditDemo/VB/PropertyEdit/PropertyEdit.vb b/source/Samples/Shell/PropertyEditDemo/VB/PropertyEdit/PropertyEdit.vb new file mode 100644 index 00000000..5f82df89 --- /dev/null +++ b/source/Samples/Shell/PropertyEditDemo/VB/PropertyEdit/PropertyEdit.vb @@ -0,0 +1,181 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Linq +Imports Microsoft.WindowsAPICodePack.Shell +Imports System.Collections.Generic +Imports System.IO +Imports Microsoft.WindowsAPICodePack.Shell.PropertySystem + +Namespace Microsoft.WindowsAPICodePack.Shell.Samples + Public Class PropertyEdit + Shared Sub Main(ByVal args() As String) + Dim app As New PropertyEdit() + Try + app.DoAction(args) + Catch ex As Exception + Console.WriteLine("Exception: " & ex.Message) + If (Not ex.InnerException Is Nothing) Then + Console.WriteLine("Inner exception: " & ex.InnerException.Message) + End If + End Try + + If Diagnostics.Debugger.IsAttached Then + Console.WriteLine() + Console.Write("Press any key to exit...") + Console.ReadKey(True) + End If + End Sub + + Private Sub DoAction(ByVal args() As String) + If args.Length = 0 OrElse args(0).Contains("?") Then + Usage() + Return + End If + + If args(0).Equals("-get", StringComparison.InvariantCultureIgnoreCase) Then + If args.Length <> 3 Then + Usage() + Return + End If + Dim propertyName As String = args(1) + Dim fileName As String = Path.GetFullPath(args(2)) + + Dim prop As IShellProperty = ShellObject.FromParsingName(fileName).Properties.GetProperty(propertyName) + + DisplayPropertyValue(prop) + + ElseIf args(0).Equals("-set", StringComparison.InvariantCultureIgnoreCase) Then + If args.Length <> 4 Then + Usage() + Return + End If + Dim propertyName As String = args(1) + Dim value As String = args(2) + Dim fileName As String = Path.GetFullPath(args(3)) + + + Dim prop As IShellProperty = ShellObject.FromParsingName(fileName).Properties.GetProperty(propertyName) + SetPropertyValue(value, prop) + + ElseIf args(0).Equals("-info", StringComparison.InvariantCultureIgnoreCase) Then + If args.Length <> 2 Then + Usage() + Return + End If + Dim propertyName As String = args(1) + + Dim propDesc As ShellPropertyDescription = SystemProperties.GetPropertyDescription(propertyName) + ShowPropertyInfo(propertyName, propDesc) + + ElseIf args(0).Equals("-enum", StringComparison.InvariantCultureIgnoreCase) Then + Dim fileName As String = Nothing + Dim filter As String = Nothing + If args.Length < 2 Then + Usage() + Return + End If + If args.Length > 2 Then + filter = args(1) + fileName = Path.GetFullPath(args(2)) + Else + fileName = Path.GetFullPath(args(1)) + End If + + EnumProperties(fileName, filter) + + Else + Usage() + Return + End If + End Sub + + Private Shared Sub DisplayPropertyValue(ByVal prop As IShellProperty) + Dim value As String = String.Empty + value = If(prop.ValueAsObject Is Nothing, "", prop.FormatForDisplay(PropertyDescriptionFormatOptions.None)) + + Console.WriteLine("{0} = {1}", prop.CanonicalName, value) + End Sub + + Private Shared Sub EnumProperties(ByVal fileName As String, ByVal filter As String) + Dim collection As New ShellPropertyCollection(fileName) + Dim properties = collection.Where(Function(prop) prop.CanonicalName IsNot Nothing AndAlso (If(filter Is Nothing, True, prop.CanonicalName.StartsWith(filter, StringComparison.CurrentCultureIgnoreCase)))).ToArray() + Array.ForEach(properties, Function(p) AnonymousMethod1(p)) + End Sub + + Private Shared Function AnonymousMethod1(ByVal p As IShellProperty) As IShellProperty + DisplayPropertyValue(p) + Return Nothing + End Function + + Private Shared Sub ShowPropertyInfo(ByVal propertyName As String, ByVal propDesc As ShellPropertyDescription) + Console.WriteLine(Constants.vbLf & "Property {0}", propertyName) + Console.WriteLine(Constants.vbTab & "PropertyKey: {0}, {1}", propDesc.PropertyKey.FormatId.ToString("B"), propDesc.PropertyKey.PropertyId) + Console.WriteLine(Constants.vbTab & "Label: {0}", propDesc.DisplayName) + Console.WriteLine(Constants.vbTab & "Edit Invitation: {0}", propDesc.EditInvitation) + Console.WriteLine(Constants.vbTab & "Display Type: {0}", propDesc.DisplayType) + Console.WriteLine(Constants.vbTab & "Var Enum Type: {0}", propDesc.VarEnumType) + Console.WriteLine(Constants.vbTab & "Value Type: {0}", propDesc.ValueType) + Console.WriteLine(Constants.vbTab & "Default Column Width: {0}", propDesc.DefaultColumWidth) + Console.WriteLine(Constants.vbTab & "Aggregation Type: {0}", propDesc.AggregationTypes) + Console.WriteLine(Constants.vbTab & "Has Multiple Values: {0}", (propDesc.TypeFlags And PropertyTypeOptions.MultipleValues) = PropertyTypeOptions.MultipleValues) + Console.WriteLine(Constants.vbTab & "Is Group: {0}", (propDesc.TypeFlags And PropertyTypeOptions.IsGroup) = PropertyTypeOptions.IsGroup) + Console.WriteLine(Constants.vbTab & "Is Innate: {0}", (propDesc.TypeFlags And PropertyTypeOptions.IsInnate) = PropertyTypeOptions.IsInnate) + Console.WriteLine(Constants.vbTab & "Is Queryable: {0}", (propDesc.TypeFlags And PropertyTypeOptions.IsQueryable) = PropertyTypeOptions.IsQueryable) + Console.WriteLine(Constants.vbTab & "Is Viewable: {0}", (propDesc.TypeFlags And PropertyTypeOptions.IsViewable) = PropertyTypeOptions.IsViewable) + Console.WriteLine(Constants.vbTab & "Is SystemProperty: {0}", (propDesc.TypeFlags And PropertyTypeOptions.IsSystemProperty) = PropertyTypeOptions.IsSystemProperty) + End Sub + + Private Shared Sub SetPropertyValue(ByVal value As String, ByVal prop As IShellProperty) + If prop.ValueType Is GetType(String()) Then + Dim values() As String = value.Split(New Char() {";"c}, StringSplitOptions.RemoveEmptyEntries) + TryCast(prop, ShellProperty(Of String())).Value = values + End If + If prop.ValueType Is GetType(String) Then + TryCast(prop, ShellProperty(Of String)).Value = value + ElseIf prop.ValueType Is GetType(UShort?) Then + TryCast(prop, ShellProperty(Of UShort?)).Value = UShort.Parse(value) + ElseIf prop.ValueType Is GetType(Short?) Then + TryCast(prop, ShellProperty(Of Short?)).Value = Short.Parse(value) + ElseIf prop.ValueType Is GetType(UInteger?) Then + TryCast(prop, ShellProperty(Of UInteger?)).Value = UInteger.Parse(value) + ElseIf prop.ValueType Is GetType(Integer?) Then + TryCast(prop, ShellProperty(Of Integer?)).Value = Integer.Parse(value) + ElseIf prop.ValueType Is GetType(ULong?) Then + TryCast(prop, ShellProperty(Of ULong?)).Value = ULong.Parse(value) + ElseIf prop.ValueType Is GetType(Long?) Then + TryCast(prop, ShellProperty(Of Long?)).Value = Long.Parse(value) + ElseIf prop.ValueType Is GetType(DateTime?) Then + TryCast(prop, ShellProperty(Of DateTime?)).Value = DateTime.Parse(value) + ElseIf prop.ValueType Is GetType(Double?) Then + TryCast(prop, ShellProperty(Of Double?)).Value = Double.Parse(value) + End If + End Sub + + Private Sub Usage() + Console.WriteLine("Usage: PropertyEdit.exe Filename ") + Console.WriteLine("") + Console.WriteLine("OPTIONS:") + Console.WriteLine(" -get Get the value for the property defined") + Console.WriteLine(" by its Canonical Name in ") + Console.WriteLine(" -set Set the value for the property defined") + Console.WriteLine(" by with value ") + Console.WriteLine(" -enum [Filter] Enumerate all the properties for this file.") + Console.WriteLine(" filtering (starting with) Filter value.") + Console.WriteLine(" -info Get schema information on property for this file.") + Console.WriteLine("") + Console.WriteLine("Examples:") + Console.WriteLine("PropertyEdit -get System.Author foo.jpg") + Console.WriteLine("PropertyEdit -set System.Author ""Jane Smith;John Smith"" foo.docx") + Console.WriteLine("PropertyEdit -set System.Photo.MeteringMode 2 foo.jpg") + Console.WriteLine("PropertyEdit -set System.Photo.DateTaken ""3/11/2009 12:03:02"" foo.jpg") + Console.WriteLine("PropertyEdit -enum foo.jpg") + Console.WriteLine("PropertyEdit -enum System.Photo foo.jpg") + Console.WriteLine("PropertyEdit -info System.Author foo.docx") + End Sub + + + End Class +End Namespace diff --git a/source/Samples/Shell/PropertyEditDemo/VB/PropertyEdit/PropertyEdit.vbproj b/source/Samples/Shell/PropertyEditDemo/VB/PropertyEdit/PropertyEdit.vbproj new file mode 100644 index 00000000..ef0f4e56 --- /dev/null +++ b/source/Samples/Shell/PropertyEditDemo/VB/PropertyEdit/PropertyEdit.vbproj @@ -0,0 +1,80 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {A3064FB2-57BA-486E-BCE1-E84C798D31F5} + Exe + + + PropertyEdit + v3.5 + On + Binary + Off + On + 512 + + + + + + + + + 3.5 + + + true + full + false + bin\Debug\ + true + true + prompt + + AllRules.ruleset + + + pdbonly + true + bin\Release\ + false + true + prompt + + AllRules.ruleset + + + + + 3.5 + + + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/AdvancedSearch.xaml b/source/Samples/Shell/SearchApplication/CS/SearchApp/AdvancedSearch.xaml new file mode 100644 index 00000000..ad02c2c7 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/CS/SearchApp/AdvancedSearch.xaml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Implicit + = + != + < + > + <= + >= + Starts with + Ends with + Contains + Does not contains + Matches + Contains word + Contains word starting with + Application specific + + + + + (None) + And + Or + + + + + Implicit + = + != + < + > + <= + >= + Starts with + Ends with + Contains + Does not contains + Matches + Contains word + Contains word starting with + Application specific + + + + + + + + (None) + Yesterday + Earlier this week + Last week + Earlier this month + Earlier this year + A long time ago + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/AdvancedSearch.xaml.cs b/source/Samples/Shell/SearchApplication/CS/SearchApp/AdvancedSearch.xaml.cs new file mode 100644 index 00000000..5c15e5c3 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/CS/SearchApp/AdvancedSearch.xaml.cs @@ -0,0 +1,659 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows; +using System.Windows.Controls; +using Microsoft.WindowsAPICodePack.Shell; +using Microsoft.WindowsAPICodePack.Dialogs; +using Microsoft.WindowsAPICodePack.Shell.PropertySystem; +using System.Collections.Generic; +using System.Windows.Threading; +using System.Windows.Media.Imaging; +using System.Threading; +using System.Windows.Interop; +using System.Windows.Input; + +namespace Microsoft.WindowsAPICodePack.Samples.SearchApp +{ + /// + /// Interaction logic for AdvancedSearch.xaml + /// + public partial class AdvancedSearch : Window + { + private StockIcons stockIcons; + private StockIcon documentsStockIcon; + private StockIcon picturesStockIcon; + private StockIcon musicStockIcon; + private StockIcon videosStockIcon; + + internal Window1 MainWindow; + + // Background thread for our search + private Thread backgroundSearchThread = null; + + public AdvancedSearch() + { + stockIcons = new StockIcons(); + + documentsStockIcon = stockIcons.DocumentAssociated; + videosStockIcon = stockIcons.VideoFiles; + musicStockIcon = stockIcons.AudioFiles; + picturesStockIcon = stockIcons.ImageFiles; + + InitializeComponent(); + + // Set our default + DocumentsRadioButton.IsChecked = true; + + // + prop1prop2OperationComboBox.SelectedIndex = 0; + + // Because the search can take some time, using a background thread. + // This timer will check if that thread is still alive and accordingly update + // the cursor + DispatcherTimer timer = new DispatcherTimer(); + timer.Interval = new TimeSpan(0, 0, 1); + timer.IsEnabled = true; + timer.Tick += new EventHandler(timer_Tick); + } + + void timer_Tick(object sender, EventArgs e) + { + // Using a timer, check if our background search thread is still alive. + // If not alive, update the cursor to arrow + if (backgroundSearchThread != null && !backgroundSearchThread.IsAlive) + { + this.Cursor = Cursors.Arrow; + MainWindow.Cursor = Cursors.Arrow; + + // Also enable the search textbox again + MainWindow.SearchBox.IsEnabled = true; + MainWindow.buttonSearchAdv.IsEnabled = true; + buttonSearch.IsEnabled = true; + buttonClear.IsEnabled = true; + } + } + + private void DocumentsRadioButton_Checked(object sender, RoutedEventArgs e) + { + UpdateDocumentsSearchSettings(); + + documentsStockIcon.Selected = true; + DocumentsRadioButton.Content = new Image { Source = documentsStockIcon.BitmapSource }; + + picturesStockIcon.Selected = false; + PicturesRadioButton.Content = new Image { Source = picturesStockIcon.BitmapSource }; + + musicStockIcon.Selected = false; + MusicRadioButton.Content = new Image { Source = musicStockIcon.BitmapSource }; + + videosStockIcon.Selected = false; + VideosRadioButton.Content = new Image { Source = videosStockIcon.BitmapSource }; + } + + private void PicturesRadioButton_Checked(object sender, RoutedEventArgs e) + { + UpdatePicturesSearchSettings(); + + documentsStockIcon.Selected = false; + DocumentsRadioButton.Content = new Image { Source = documentsStockIcon.BitmapSource }; + + picturesStockIcon.Selected = true; + PicturesRadioButton.Content = new Image { Source = picturesStockIcon.BitmapSource }; + + musicStockIcon.Selected = false; + MusicRadioButton.Content = new Image { Source = musicStockIcon.BitmapSource }; + + videosStockIcon.Selected = false; + VideosRadioButton.Content = new Image { Source = videosStockIcon.BitmapSource }; + } + + private void MusicRadioButton_Checked(object sender, RoutedEventArgs e) + { + UpdateMusicSearchSettings(); + + documentsStockIcon.Selected = false; + DocumentsRadioButton.Content = new Image { Source = documentsStockIcon.BitmapSource }; + + picturesStockIcon.Selected = false; + PicturesRadioButton.Content = new Image { Source = picturesStockIcon.BitmapSource }; + + musicStockIcon.Selected = true; + MusicRadioButton.Content = new Image { Source = musicStockIcon.BitmapSource }; + + videosStockIcon.Selected = false; + VideosRadioButton.Content = new Image { Source = videosStockIcon.BitmapSource }; + } + + private void VideosRadioButton_Checked(object sender, RoutedEventArgs e) + { + UpdateVideosSearchSettings(); + + documentsStockIcon.Selected = false; + DocumentsRadioButton.Content = new Image { Source = documentsStockIcon.BitmapSource }; + + picturesStockIcon.Selected = false; + PicturesRadioButton.Content = new Image { Source = picturesStockIcon.BitmapSource }; + + musicStockIcon.Selected = false; + MusicRadioButton.Content = new Image { Source = musicStockIcon.BitmapSource }; + + videosStockIcon.Selected = true; + VideosRadioButton.Content = new Image { Source = videosStockIcon.BitmapSource }; + } + + private void UpdateDocumentsSearchSettings() + { + // We are in "documents" mode + prop1ComboBox.Items.Clear(); + prop1ComboBox.Items.Add("Author"); + prop1ComboBox.Items.Add("Title"); + prop1ComboBox.Items.Add("Comment"); + prop1ComboBox.Items.Add("Copyright"); + prop1ComboBox.Items.Add("Pages"); + prop1ComboBox.Items.Add("Tags/Keywords"); + prop1ComboBox.SelectedIndex = 0; + + prop1OperationComboBox.SelectedIndex = 9; + + prop1TextBox.Text = ""; + + prop2ComboBox.Items.Clear(); + prop2ComboBox.Items.Add("Author"); + prop2ComboBox.Items.Add("Title"); + prop2ComboBox.Items.Add("Comment"); + prop2ComboBox.Items.Add("Copyright"); + prop2ComboBox.Items.Add("Pages"); + prop2ComboBox.Items.Add("Tags/Keywords"); + prop2ComboBox.SelectedIndex = 5; + + prop2OperationComboBox.SelectedIndex = 0; + + prop2TextBox.Text = ""; + + prop1prop2OperationComboBox.SelectedIndex = 0; + + comboBoxDateCreated.SelectedIndex = 0; + + // locations + locationsListBox.Items.Clear(); + + if (ShellLibrary.IsPlatformSupported) + AddLocation((ShellContainer)KnownFolders.DocumentsLibrary); + else + AddLocation((ShellContainer)KnownFolders.Documents); + } + + private void UpdatePicturesSearchSettings() + { + // We are in "Pictures" mode + prop1ComboBox.Items.Clear(); + prop1ComboBox.Items.Add("Author"); + prop1ComboBox.Items.Add("Subject"); + prop1ComboBox.Items.Add("Camera maker"); + prop1ComboBox.Items.Add("Copyright"); + prop1ComboBox.Items.Add("Rating"); + prop1ComboBox.Items.Add("Tags/Keywords"); + prop1ComboBox.SelectedIndex = 0; + + prop1OperationComboBox.SelectedIndex = 9; + + prop1TextBox.Text = ""; + + prop2ComboBox.Items.Clear(); + prop2ComboBox.Items.Add("Author"); + prop2ComboBox.Items.Add("Subject"); + prop2ComboBox.Items.Add("Camera maker"); + prop2ComboBox.Items.Add("Copyright"); + prop2ComboBox.Items.Add("Rating"); + prop2ComboBox.Items.Add("Tags/Keywords"); + prop2ComboBox.SelectedIndex = 0; + + prop2OperationComboBox.SelectedIndex = 0; + + prop2TextBox.Text = ""; + + prop1prop2OperationComboBox.SelectedIndex = 0; + + comboBoxDateCreated.SelectedIndex = 0; + + // locations + locationsListBox.Items.Clear(); + + if (ShellLibrary.IsPlatformSupported) + AddLocation((ShellContainer)KnownFolders.PicturesLibrary); + else + AddLocation((ShellContainer)KnownFolders.Pictures); + + } + + private void UpdateMusicSearchSettings() + { + // We are in "Music" mode + prop1ComboBox.Items.Clear(); + prop1ComboBox.Items.Add("Album artist"); + prop1ComboBox.Items.Add("Album title"); + prop1ComboBox.Items.Add("Composer"); + prop1ComboBox.Items.Add("Rating"); + prop1ComboBox.Items.Add("Genre"); + prop1ComboBox.Items.Add("Year"); + prop1ComboBox.SelectedIndex = 1; + + prop1OperationComboBox.SelectedIndex = 9; + + prop1TextBox.Text = ""; + + prop2ComboBox.Items.Clear(); + prop2ComboBox.Items.Add("Album artist"); + prop2ComboBox.Items.Add("Album title"); + prop2ComboBox.Items.Add("Composer"); + prop2ComboBox.Items.Add("Rating"); + prop2ComboBox.Items.Add("Genre"); + prop2ComboBox.Items.Add("Year"); + prop2ComboBox.SelectedIndex = 0; + + prop2OperationComboBox.SelectedIndex = 0; + + prop2TextBox.Text = ""; + + prop1prop2OperationComboBox.SelectedIndex = 0; + + comboBoxDateCreated.SelectedIndex = 0; + + // locations + locationsListBox.Items.Clear(); + + if (ShellLibrary.IsPlatformSupported) + AddLocation((ShellContainer)KnownFolders.MusicLibrary); + else + AddLocation((ShellContainer)KnownFolders.Music); + } + + private void UpdateVideosSearchSettings() + { + // We are in "Videos" mode + prop1ComboBox.Items.Clear(); + prop1ComboBox.Items.Add("Title"); + prop1ComboBox.Items.Add("Video length"); + prop1ComboBox.Items.Add("Comment"); + prop1ComboBox.SelectedIndex = 0; + + prop1OperationComboBox.SelectedIndex = 9; + + prop1TextBox.Text = ""; + + prop2ComboBox.Items.Clear(); + prop1ComboBox.Items.Add("Title"); + prop1ComboBox.Items.Add("Video length"); + prop1ComboBox.Items.Add("Comment"); + prop2ComboBox.SelectedIndex = 0; + + prop2OperationComboBox.SelectedIndex = 0; + + prop2TextBox.Text = ""; + + prop1prop2OperationComboBox.SelectedIndex = 0; + + comboBoxDateCreated.SelectedIndex = 0; + + // locations + locationsListBox.Items.Clear(); + + if (ShellLibrary.IsPlatformSupported) + AddLocation((ShellContainer)KnownFolders.VideosLibrary); + else + AddLocation((ShellContainer)KnownFolders.Videos); + } + + private void addLocationButton_Click(object sender, RoutedEventArgs e) + { + // Show CFD and let users pick a folder + CommonOpenFileDialog cfd = new CommonOpenFileDialog(); + cfd.AllowNonFileSystemItems = true; + cfd.IsFolderPicker = true; + cfd.Multiselect = true; + + if (cfd.ShowDialog() == CommonFileDialogResult.Ok) + { + // Loop through each "folder" and add it our list + foreach (ShellContainer so in cfd.FilesAsShellObject) + { + AddLocation(so); + } + } + } + + private void AddLocation(ShellContainer so) + { + StackPanel sp = new StackPanel(); + sp.Orientation = Orientation.Horizontal; + + // Add the thumbnail/icon + Image img = new Image(); + + // Because we might be called from a different thread, freeze the bitmap source once + // we get it + BitmapSource smallBitmapSource = so.Thumbnail.SmallBitmapSource; + smallBitmapSource.Freeze(); + img.Source = smallBitmapSource; + + img.Margin = new Thickness(5); + sp.Children.Add(img); + + // Add the name/title + TextBlock tb = new TextBlock(); + tb.Text = so.Name; + tb.Margin = new Thickness(5); + sp.Children.Add(tb); + + // Set our tag as the shell container user picked... + sp.Tag = so; + + // + locationsListBox.Items.Add(sp); + } + + private void removeLocationButton_Click(object sender, RoutedEventArgs e) + { + if (locationsListBox.SelectedItem != null) + locationsListBox.Items.Remove(locationsListBox.SelectedItem); + } + + private void buttonClear_Click(object sender, RoutedEventArgs e) + { + // Reset all the settings on the dialog for the selected search type + if (DocumentsRadioButton.IsChecked.Value) + UpdateDocumentsSearchSettings(); + else if (PicturesRadioButton.IsChecked.Value) + UpdatePicturesSearchSettings(); + else if (VideosRadioButton.IsChecked.Value) + UpdateVideosSearchSettings(); + else if (MusicRadioButton.IsChecked.Value) + UpdateMusicSearchSettings(); + } + + private DateTime ParseDate(string toParse, DateTime relativeDate) + { + if (string.IsNullOrEmpty(toParse) || !toParse.StartsWith("date:")) + throw new ArgumentException(); + + string tmpToParse = toParse.ToLower().Replace("date:", ""); + + switch (tmpToParse) + { + case "a long time ago": + DateTime longTimeAgo = new DateTime(relativeDate.Year - 2, 1, 1, 0, 0, 0); + return longTimeAgo; + case "earlier this year": + DateTime thisYear = new DateTime(relativeDate.Year, 1, 1, 0, 0, 0); + return thisYear; + case "earlier this month": + DateTime thisMonth = new DateTime(relativeDate.Year, relativeDate.Month, 1, 0, 0, 0); + return thisMonth; + case "last week": + DayOfWeek dayOfWeek = relativeDate.DayOfWeek; + DateTime lastweekSunday = relativeDate.AddDays(-1 * (int)dayOfWeek); + return lastweekSunday; + case "yesterday": + DateTime yesterday = relativeDate.AddDays(-1); + return yesterday; + case "earlier this week": + DateTime lastWeek = relativeDate.AddDays(-7); + return lastWeek; + default: + throw new ArgumentException(); + } + } + + private void buttonSearch_Click(object sender, RoutedEventArgs e) + { + if (MainWindow == null) + return; + + if (backgroundSearchThread != null) + backgroundSearchThread.Abort(); + + // Set our cursor to wait + this.Cursor = Cursors.Wait; + MainWindow.Cursor = Cursors.Wait; + + // Also disable the search textbox while our search is going on + MainWindow.SearchBox.IsEnabled = false; + MainWindow.buttonSearchAdv.IsEnabled = false; + buttonSearch.IsEnabled = false; + buttonClear.IsEnabled = false; + MainWindow.SearchBox.Clear(); + + // Bring the main window in the foreground + MainWindow.Activate(); + + // Create a background thread to do the search + backgroundSearchThread = new Thread(new ThreadStart(DoAdvancedSearch)); + // ApartmentState.STA is required for COM + backgroundSearchThread.SetApartmentState(ApartmentState.STA); + backgroundSearchThread.Start(); + + } + + private void DoAdvancedSearch() + { + + // This is our final searchcondition that we'll create the search folder from + SearchCondition finalSearchCondition = null; + + // This is Prop1 + prop2 search condition... if the user didn't specify one of the properties, + // we can just use the one property/value they specify...if they do, then we can do the and/or operation + SearchCondition combinedPropSearchCondition = null; + + // Because we are doing the search on a background thread, + // we can't access the UI controls from that thread. + // Invoke from the main UI thread and get the values + string prop1TextBox_Text = string.Empty; + string prop2TextBox_Text = string.Empty; + string prop1ComboBox_Value = string.Empty; + string prop2ComboBox_Value = string.Empty; + SearchConditionOperation prop1ConditionOperation = SearchConditionOperation.ValueContains; + SearchConditionOperation prop2ConditionOperation = SearchConditionOperation.ValueContains; + string prop1prop2OperationComboBox_Value = string.Empty; + string comboBoxDateCreated_Value = string.Empty; + int prop1prop2OperationComboBox_SelectedIndex = 0; + bool dateSelected = false; + List scopes = new List(); + + Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new Action( + delegate() + { + prop1TextBox_Text = prop1TextBox.Text; + prop1TextBox_Text = prop1TextBox.Text; + prop1ComboBox_Value = prop1ComboBox.SelectedItem.ToString(); + prop2ComboBox_Value = prop2ComboBox.SelectedItem.ToString(); + prop1ConditionOperation = GetConditionOperation(prop1OperationComboBox); + prop2ConditionOperation = GetConditionOperation(prop2OperationComboBox); + prop1prop2OperationComboBox_Value = prop1prop2OperationComboBox.SelectedItem.ToString(); + prop1prop2OperationComboBox_SelectedIndex = prop1prop2OperationComboBox.SelectedIndex; + comboBoxDateCreated_Value = comboBoxDateCreated.SelectedItem.ToString(); + dateSelected = (comboBoxDateCreated.SelectedItem != dateCreatedNone); + + foreach (StackPanel sp in locationsListBox.Items) + { + if (sp.Tag is ShellContainer) + scopes.Add((ShellContainer)sp.Tag); + } + })); + + // If we have a valid first property/value, then create a search condition + if (!string.IsNullOrEmpty(prop1TextBox_Text)) + { + SearchCondition prop1Condition = SearchConditionFactory.CreateLeafCondition( + GetSearchProperty(prop1ComboBox_Value), + prop1TextBox_Text, + prop1ConditionOperation); + + // After creating the first condition, see if we need to create a second leaf condition + if (prop1prop2OperationComboBox_SelectedIndex != 0 && + !(string.IsNullOrEmpty(prop2TextBox_Text))) + { + SearchCondition prop2Condition = SearchConditionFactory.CreateLeafCondition( + GetSearchProperty(prop2ComboBox_Value), + prop2TextBox_Text, + prop2ConditionOperation); + + // Create our combined search condition AND or OR + if (prop1prop2OperationComboBox.SelectedIndex == 1) + combinedPropSearchCondition = SearchConditionFactory.CreateAndOrCondition( + SearchConditionType.And, + false, prop1Condition, prop2Condition); + else + combinedPropSearchCondition = SearchConditionFactory.CreateAndOrCondition( + SearchConditionType.Or, + false, prop1Condition, prop2Condition); + } + else + combinedPropSearchCondition = prop1Condition; + } + else + return; // no search text entered + + // Get the date condition + if (dateSelected) + { + SearchCondition dateCreatedCondition = SearchConditionFactory.CreateLeafCondition( + SystemProperties.System.DateCreated, + ParseDate(((ComboBoxItem)comboBoxDateCreated.SelectedItem).Tag.ToString(), DateTime.Now), + SearchConditionOperation.GreaterThan); + + // If we have a property based search condition, create an "AND" search condition from these 2 + if (combinedPropSearchCondition != null) + finalSearchCondition = SearchConditionFactory.CreateAndOrCondition(SearchConditionType.And, + false, combinedPropSearchCondition, dateCreatedCondition); + else + finalSearchCondition = dateCreatedCondition; + } + else + finalSearchCondition = combinedPropSearchCondition; + + + ShellSearchFolder searchFolder = new ShellSearchFolder(finalSearchCondition, scopes.ToArray()); + + // + List items = new List(); + + try + { + // Because we cannot pass ShellObject or IShellItem (native interface) + // across multiple threads, creating a helper object and copying the data we need from the ShellObject + foreach (ShellObject so in searchFolder) + { + // For each of our ShellObject, + // create a SearchItem object + // We will bind these items to the ListView + SearchItem item = new SearchItem(); + item.Name = so.Name; + + // We must freeze the ImageSource before passing across threads + BitmapSource thumbnail = so.Thumbnail.MediumBitmapSource; + thumbnail.Freeze(); + item.Thumbnail = thumbnail; + + item.Authors = so.Properties.System.Author.Value; + item.Title = so.Properties.System.Title.Value; + item.Keywords = so.Properties.System.Keywords.Value; + item.Copyright = so.Properties.System.Copyright.Value; + item.TotalPages = so.Properties.System.Document.PageCount.Value.HasValue ? so.Properties.System.Document.PageCount.Value.Value : 0; + item.Rating = so.Properties.System.SimpleRating.Value.HasValue ? (int)so.Properties.System.SimpleRating.Value.Value : 0; + item.ParsingName = so.ParsingName; + + items.Add(item); + } + + // Invoke the search on the main thread + + Dispatcher.Invoke( + System.Windows.Threading.DispatcherPriority.Normal, + new Action( + delegate() + { + MainWindow.UpdateSearchItems(items); + } + )); + } + finally + { + // TODO - dispose other + + finalSearchCondition.Dispose(); + finalSearchCondition = null; + + searchFolder.Dispose(); + searchFolder = null; + } + } + + private PropertyKey GetSearchProperty(string prop) + { + switch (prop) + { + case "Author": + return SystemProperties.System.Author; + case "Title": + return SystemProperties.System.Title; + case "Comment": + return SystemProperties.System.Comment; + case "Copyright": + return SystemProperties.System.Copyright; + case "Pages": + return SystemProperties.System.Document.PageCount; + case "Tags/Keywords": + return SystemProperties.System.Keywords; + case "Subject": + return SystemProperties.System.Subject; + case "Camera maker": + return SystemProperties.System.Photo.CameraManufacturer; + case "Rating": + return SystemProperties.System.Rating; + case "Album artist": + return SystemProperties.System.Music.AlbumArtist; + case "Album title": + return SystemProperties.System.Music.AlbumTitle; + case "Composer": + return SystemProperties.System.Music.Composer; + case "Genre": + return SystemProperties.System.Music.Genre; + case "Video length": + return SystemProperties.System.Media.Duration; + case "Year": + return SystemProperties.System.Media.Year; + } + + return SystemProperties.System.Null; + } + + private SearchConditionOperation GetConditionOperation(ComboBox comboBox) + { + SearchConditionOperation operation = (SearchConditionOperation)Enum.Parse( + typeof(SearchConditionOperation), + ((ComboBoxItem)comboBox.Items[comboBox.SelectedIndex]).Tag.ToString(), + true); + + return operation; + } + + private void prop1prop2OperationComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + // Based on the And/OR operation between the two properties, enable/disable + // the second propertie's UI + if (prop1prop2OperationComboBox.SelectedIndex == 0) // (None) + { + prop2ComboBox.IsEnabled = false; + prop2OperationComboBox.IsEnabled = false; + prop2TextBox.IsEnabled = false; + } + else + { + prop2ComboBox.IsEnabled = true; + prop2OperationComboBox.IsEnabled = true; + prop2TextBox.IsEnabled = true; + } + } + } +} diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/App.xaml b/source/Samples/Shell/SearchApplication/CS/SearchApp/App.xaml new file mode 100644 index 00000000..5d6662f3 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/CS/SearchApp/App.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/App.xaml.cs b/source/Samples/Shell/SearchApplication/CS/SearchApp/App.xaml.cs new file mode 100644 index 00000000..5fe14a25 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/CS/SearchApp/App.xaml.cs @@ -0,0 +1,13 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Windows; + +namespace Microsoft.WindowsAPICodePack.Samples.SearchApp +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/Controls/RatingControl.xaml b/source/Samples/Shell/SearchApplication/CS/SearchApp/Controls/RatingControl.xaml new file mode 100644 index 00000000..66f42b8c --- /dev/null +++ b/source/Samples/Shell/SearchApplication/CS/SearchApp/Controls/RatingControl.xaml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/Controls/RatingControl.xaml.cs b/source/Samples/Shell/SearchApplication/CS/SearchApp/Controls/RatingControl.xaml.cs new file mode 100644 index 00000000..1332d60e --- /dev/null +++ b/source/Samples/Shell/SearchApplication/CS/SearchApp/Controls/RatingControl.xaml.cs @@ -0,0 +1,87 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; + +namespace Microsoft.WindowsAPICodePack.Samples.SearchApp +{ + /// + /// Interaction logic for RatingControl.xaml + /// + public partial class RatingControl : UserControl + { + public static readonly DependencyProperty RatingValueProperty = + DependencyProperty.Register("RatingValue", typeof(int), typeof(RatingControl), + new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, new PropertyChangedCallback(RatingValueChanged))); + + + private int maxValue = 99; + + public int RatingValue + { + get { return (int)GetValue(RatingValueProperty); } + set + { + if (value < 0) + { + SetValue(RatingValueProperty, 0); + } + else if (value > maxValue) + { + SetValue(RatingValueProperty, maxValue); + } + else + { + SetValue(RatingValueProperty, value); + } + } + } + + private static void RatingValueChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) + { + RatingControl parent = sender as RatingControl; + int ratingValue = (int)e.NewValue; + UIElementCollection children = ((Grid)(parent.Content)).Children; + ToggleButton button = null; + + for (int i = 0; i < ratingValue; i++) + { + button = children[i] as ToggleButton; + if (button != null) + button.IsChecked = true; + } + + for (int i = ratingValue; i < children.Count; i++) + { + button = children[i] as ToggleButton; + if (button != null) + button.IsChecked = false; + } + } + + public RatingControl() + { + InitializeComponent(); + } + + private void RatingButtonClickEventHandler(Object sender, RoutedEventArgs e) + { + ToggleButton button = sender as ToggleButton; + + int newRating = int.Parse((String)button.Tag); + + if ((bool)button.IsChecked || newRating < RatingValue) + { + RatingValue = newRating; + } + else + { + RatingValue = newRating - 1; + } + + e.Handled = true; + } + } +} diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/Controls/SearchTextBox.cs b/source/Samples/Shell/SearchApplication/CS/SearchApp/Controls/SearchTextBox.cs new file mode 100644 index 00000000..632018dd --- /dev/null +++ b/source/Samples/Shell/SearchApplication/CS/SearchApp/Controls/SearchTextBox.cs @@ -0,0 +1,222 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Threading; + +namespace Microsoft.WindowsAPICodePack.Samples.SearchApp +{ + public enum SearchMode + { + Instant, + Delayed, + } + + public class SearchTextBox : TextBox + { + public static DependencyProperty LabelTextProperty = + DependencyProperty.Register( + "LabelText", + typeof(string), + typeof(SearchTextBox)); + + public static DependencyProperty LabelTextColorProperty = + DependencyProperty.Register( + "LabelTextColor", + typeof(Brush), + typeof(SearchTextBox)); + + public static DependencyProperty SearchModeProperty = + DependencyProperty.Register( + "SearchMode", + typeof(SearchMode), + typeof(SearchTextBox), + new PropertyMetadata(SearchMode.Instant)); + + private static DependencyPropertyKey HasTextPropertyKey = + DependencyProperty.RegisterReadOnly( + "HasText", + typeof(bool), + typeof(SearchTextBox), + new PropertyMetadata()); + + public static DependencyProperty HasTextProperty = HasTextPropertyKey.DependencyProperty; + + private static DependencyPropertyKey IsMouseLeftButtonDownPropertyKey = + DependencyProperty.RegisterReadOnly( + "IsMouseLeftButtonDown", + typeof(bool), + typeof(SearchTextBox), + new PropertyMetadata()); + public static DependencyProperty IsMouseLeftButtonDownProperty = IsMouseLeftButtonDownPropertyKey.DependencyProperty; + + public static DependencyProperty SearchEventTimeDelayProperty = + DependencyProperty.Register( + "SearchEventTimeDelay", + typeof(Duration), + typeof(SearchTextBox), + new FrameworkPropertyMetadata( + new Duration(new TimeSpan(0, 0, 0, 0, 500)), + new PropertyChangedCallback(OnSearchEventTimeDelayChanged))); + + public static readonly RoutedEvent SearchEvent = + EventManager.RegisterRoutedEvent( + "Search", + RoutingStrategy.Bubble, + typeof(RoutedEventHandler), + typeof(SearchTextBox)); + + static SearchTextBox() { + DefaultStyleKeyProperty.OverrideMetadata( + typeof(SearchTextBox), + new FrameworkPropertyMetadata(typeof(SearchTextBox))); + } + + private DispatcherTimer searchEventDelayTimer; + + public SearchTextBox() + : base() + { + searchEventDelayTimer = new DispatcherTimer(); + searchEventDelayTimer.Interval = SearchEventTimeDelay.TimeSpan; + searchEventDelayTimer.Tick += new EventHandler(OnSeachEventDelayTimerTick); + } + + void OnSeachEventDelayTimerTick(object o, EventArgs e) + { + searchEventDelayTimer.Stop(); + RaiseSearchEvent(); + } + + static void OnSearchEventTimeDelayChanged(DependencyObject o, DependencyPropertyChangedEventArgs e) + { + SearchTextBox stb = o as SearchTextBox; + if (stb != null) + { + stb.searchEventDelayTimer.Interval = ((Duration)e.NewValue).TimeSpan; + stb.searchEventDelayTimer.Stop(); + } + } + + protected override void OnTextChanged(TextChangedEventArgs e) + { + base.OnTextChanged(e); + + HasText = Text.Length != 0; + + if (SearchMode == SearchMode.Instant) + { + searchEventDelayTimer.Stop(); + searchEventDelayTimer.Start(); + } + } + + public override void OnApplyTemplate() { + base.OnApplyTemplate(); + + Border iconBorder = GetTemplateChild("PART_SearchIconBorder") as Border; + + if (iconBorder != null) + { + iconBorder.MouseLeftButtonDown += new MouseButtonEventHandler(IconBorder_MouseLeftButtonDown); + iconBorder.MouseLeftButtonUp += new MouseButtonEventHandler(IconBorder_MouseLeftButtonUp); + iconBorder.MouseLeave += new MouseEventHandler(IconBorder_MouseLeave); + } + } + + private void IconBorder_MouseLeftButtonDown(object obj, MouseButtonEventArgs e) + { + IsMouseLeftButtonDown = true; + } + + private void IconBorder_MouseLeftButtonUp(object obj, MouseButtonEventArgs e) + { + if (!IsMouseLeftButtonDown) + return; + + if (HasText && SearchMode == SearchMode.Instant) + { + this.Text = ""; + } + + if (HasText && SearchMode == SearchMode.Delayed) + { + RaiseSearchEvent(); + } + + IsMouseLeftButtonDown = false; + } + + private void IconBorder_MouseLeave(object obj, MouseEventArgs e) + { + IsMouseLeftButtonDown = false; + } + + protected override void OnKeyDown(KeyEventArgs e) + { + if (e.Key == Key.Escape && SearchMode == SearchMode.Instant) + { + this.Text = ""; + } + else if ((e.Key == Key.Return || e.Key == Key.Enter) && SearchMode == SearchMode.Delayed) + { + RaiseSearchEvent(); + } + else + { + base.OnKeyDown(e); + } + } + + private void RaiseSearchEvent() + { + RoutedEventArgs args = new RoutedEventArgs(SearchEvent); + RaiseEvent(args); + } + + public string LabelText + { + get { return (string)GetValue(LabelTextProperty); } + set { SetValue(LabelTextProperty, value); } + } + + public Brush LabelTextColor + { + get { return (Brush)GetValue(LabelTextColorProperty); } + set { SetValue(LabelTextColorProperty, value); } + } + + public SearchMode SearchMode + { + get { return (SearchMode)GetValue(SearchModeProperty); } + set { SetValue(SearchModeProperty, value); } + } + + public bool HasText + { + get { return (bool)GetValue(HasTextProperty); } + private set { SetValue(HasTextPropertyKey, value); } + } + + public Duration SearchEventTimeDelay + { + get { return (Duration)GetValue(SearchEventTimeDelayProperty); } + set { SetValue(SearchEventTimeDelayProperty, value); } + } + + public bool IsMouseLeftButtonDown + { + get { return (bool)GetValue(IsMouseLeftButtonDownProperty); } + private set { SetValue(IsMouseLeftButtonDownPropertyKey, value); } + } + + public event RoutedEventHandler Search + { + add { AddHandler(SearchEvent, value); } + remove { RemoveHandler(SearchEvent, value); } + } + } +} diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/GlassHelper.cs b/source/Samples/Shell/SearchApplication/CS/SearchApp/GlassHelper.cs new file mode 100644 index 00000000..c7887b62 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/CS/SearchApp/GlassHelper.cs @@ -0,0 +1,72 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Runtime.InteropServices; +using System.Windows; +using System.Windows.Interop; +using System.Windows.Media; + +namespace Microsoft.WindowsAPICodePack.Samples.SearchApp +{ + public class GlassHelper + { + struct Margins + { + public Margins(Thickness t) + { + Left = (int)t.Left; + Right = (int)t.Right; + Top = (int)t.Top; + Bottom = (int)t.Bottom; + } + + public int Left; + public int Right; + public int Top; + public int Bottom; + } + + [DllImport("dwmapi.dll", PreserveSig = false)] + static extern void DwmExtendFrameIntoClientArea(IntPtr hwnd, ref Margins margins); + + [DllImport("dwmapi.dll", PreserveSig = false)] + static extern bool DwmIsCompositionEnabled(); + + public static bool IsGlassEnabled + { + get + { + return DwmIsCompositionEnabled(); + } + } + + public static bool ExtendGlassFrame(Window window, Thickness margin) + { + if (!DwmIsCompositionEnabled()) + return false; + + IntPtr hwnd = new WindowInteropHelper(window).Handle; + if (hwnd == IntPtr.Zero) + throw new InvalidOperationException("The Window must be shown before extending glass."); + + // Set the background to transparent from both the WPF and Win32 perspectives + SolidColorBrush background = new SolidColorBrush(Colors.Red); + background.Opacity = 0.5; + window.Background = Brushes.Transparent; + HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.Transparent; + + Margins margins = new Margins(margin); + DwmExtendFrameIntoClientArea(hwnd, ref margins); + return true; + } + + public static void DisableGlassFrame(Window1 window) + { + IntPtr hwnd = new WindowInteropHelper(window).Handle; + if (hwnd == IntPtr.Zero) + throw new InvalidOperationException("The Window must be shown before extending glass."); + + HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.White; + } + } +} diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/Back_Button_256.png b/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/Back_Button_256.png new file mode 100644 index 00000000..645ed5d4 Binary files /dev/null and b/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/Back_Button_256.png differ diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/Find_Search.ico b/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/Find_Search.ico new file mode 100644 index 00000000..7a1ed66d Binary files /dev/null and b/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/Find_Search.ico differ diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/Find_Search_64.png b/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/Find_Search_64.png new file mode 100644 index 00000000..8bfa74df Binary files /dev/null and b/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/Find_Search_64.png differ diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/Forward_Button_256.png b/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/Forward_Button_256.png new file mode 100644 index 00000000..df0044fc Binary files /dev/null and b/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/Forward_Button_256.png differ diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/Help-32.png b/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/Help-32.png new file mode 100644 index 00000000..74c427fe Binary files /dev/null and b/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/Help-32.png differ diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/clear.png b/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/clear.png new file mode 100644 index 00000000..30a4c316 Binary files /dev/null and b/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/clear.png differ diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/search.png b/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/search.png new file mode 100644 index 00000000..386e168e Binary files /dev/null and b/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/search.png differ diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/search_adv.png b/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/search_adv.png new file mode 100644 index 00000000..611108c5 Binary files /dev/null and b/source/Samples/Shell/SearchApplication/CS/SearchApp/Images/search_adv.png differ diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/Properties/AssemblyInfo.cs b/source/Samples/Shell/SearchApplication/CS/SearchApp/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..decadfed --- /dev/null +++ b/source/Samples/Shell/SearchApplication/CS/SearchApp/Properties/AssemblyInfo.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Search Application using Search Folders")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/Properties/Resources.Designer.cs b/source/Samples/Shell/SearchApplication/CS/SearchApp/Properties/Resources.Designer.cs new file mode 100644 index 00000000..45b466dd --- /dev/null +++ b/source/Samples/Shell/SearchApplication/CS/SearchApp/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.SearchApp.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.WindowsAPICodePack.Samples.SearchApp.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/Properties/Resources.resx b/source/Samples/Shell/SearchApplication/CS/SearchApp/Properties/Resources.resx new file mode 100644 index 00000000..7080a7d1 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/CS/SearchApp/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/SearchApp.csproj b/source/Samples/Shell/SearchApplication/CS/SearchApp/SearchApp.csproj new file mode 100644 index 00000000..0cdb1903 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/CS/SearchApp/SearchApp.csproj @@ -0,0 +1,220 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6} + WinExe + Properties + Microsoft.WindowsAPICodePack.Samples.SearchApp + SearchApp + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + Images\Find_Search.ico + + + + + app.manifest + + + + + 3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + 3.5 + + + + + 3.5 + + + 3.5 + + + + + 3.0 + + + 3.0 + + + 3.0 + + + 3.0 + + + 3.0 + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + App.xaml + Code + + + Window1.xaml + Code + + + + + AdvancedSearch.xaml + Code + + + + + + Code + + + True + True + Resources.resx + + + PublicResXFileCodeGenerator + Resources.Designer.cs + Designer + + + + + + + + + + + + + + + + + + + + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/SearchApp.sln b/source/Samples/Shell/SearchApplication/CS/SearchApp/SearchApp.sln new file mode 100644 index 00000000..2ec97f0d --- /dev/null +++ b/source/Samples/Shell/SearchApplication/CS/SearchApp/SearchApp.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SearchApp", "SearchApp.csproj", "{B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/Themes/Generic.xaml b/source/Samples/Shell/SearchApplication/CS/SearchApp/Themes/Generic.xaml new file mode 100644 index 00000000..4a284ff1 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/CS/SearchApp/Themes/Generic.xaml @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/Themes/GlassButton.xaml b/source/Samples/Shell/SearchApplication/CS/SearchApp/Themes/GlassButton.xaml new file mode 100644 index 00000000..e45f3097 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/CS/SearchApp/Themes/GlassButton.xaml @@ -0,0 +1,172 @@ + + + + + diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/Window1.xaml b/source/Samples/Shell/SearchApplication/CS/SearchApp/Window1.xaml new file mode 100644 index 00000000..b5edb056 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/CS/SearchApp/Window1.xaml @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/Window1.xaml.cs b/source/Samples/Shell/SearchApplication/CS/SearchApp/Window1.xaml.cs new file mode 100644 index 00000000..6221a70b --- /dev/null +++ b/source/Samples/Shell/SearchApplication/CS/SearchApp/Window1.xaml.cs @@ -0,0 +1,513 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Controls.Primitives; +using System.Windows.Threading; +using Microsoft.WindowsAPICodePack.Shell; +using System.Windows.Input; +using Microsoft.WindowsAPICodePack.Shell.PropertySystem; +using System.Windows.Media; +using System.Windows.Interop; +using System.Globalization; +using Microsoft.WindowsAPICodePack.Dialogs; +using System.Diagnostics; +using System.Threading; +using System.Windows.Media.Imaging; +using System.Linq; + +namespace Microsoft.WindowsAPICodePack.Samples.SearchApp +{ + /// + /// Interaction logic for Window1.xaml + /// + public partial class Window1 : Window + { + private int top = 10, left = 10; // for glass + private bool neverRendered = true; // for glass + private const int WM_DWMCOMPOSITIONCHANGED = 0x031E; // for glass (when DWM / glass setting is changed) + internal ShellSearchFolder searchFolder = null; + AdvancedSearch advWindow; // keep only one instance of the advanced window (unless user closes it) + + private TaskDialog helpTaskDialog; + + // Background thread for our search + private Thread backgroundSearchThread = null; + + private ShellContainer selectedScope = (ShellContainer)KnownFolders.UsersFiles; + + public Window1() + { + InitializeComponent(); + DragThumb.DragDelta += OnMove; + + this.SourceInitialized += new EventHandler(Window1_SourceInitialized); + this.Loaded += new RoutedEventHandler(Window1_Loaded); + + // Because the search can take some time, using a background thread. + // This timer will check if that thread is still alive and accordingly update + // the cursor + DispatcherTimer timer = new DispatcherTimer(); + timer.Interval = new TimeSpan(0, 0, 1); + timer.IsEnabled = true; + timer.Tick += new EventHandler(timer_Tick); + + // Update the Scopes combobox with all the known folders + var sortedKnownFolders = + from folder in KnownFolders.All + where (folder.CanonicalName != null && + folder.CanonicalName.Length > 0) + orderby folder.CanonicalName + select folder; + + // Add the Browse... item so users can select any arbitary location + StackPanel browsePanel = new StackPanel(); + browsePanel.Margin = new Thickness(5, 2, 5, 2); + browsePanel.Orientation = Orientation.Horizontal; + + Image browseImg = new Image(); + browseImg.Source = (new StockIcons()).FolderOpen.BitmapSource; + browseImg.Height = 32; + + TextBlock browseTextBlock = new TextBlock(); + browseTextBlock.Background = Brushes.Transparent; + browseTextBlock.FontSize = 10; + browseTextBlock.Margin = new Thickness(4); + browseTextBlock.VerticalAlignment = VerticalAlignment.Center; + browseTextBlock.Text = "Browse..."; + + browsePanel.Children.Add(browseImg); + browsePanel.Children.Add(browseTextBlock); + + SearchScopesCombo.Items.Add(browsePanel); + + foreach (ShellContainer obj in sortedKnownFolders) + { + StackPanel panel = new StackPanel(); + panel.Margin = new Thickness(5, 2, 5, 2); + panel.Orientation = Orientation.Horizontal; + + Image img = new Image(); + img.Source = obj.Thumbnail.SmallBitmapSource; + img.Height = 32; + + TextBlock textBlock = new TextBlock(); + textBlock.Background = Brushes.Transparent; + textBlock.FontSize = 10; + textBlock.Margin = new Thickness(4); + textBlock.VerticalAlignment = VerticalAlignment.Center; + textBlock.Text = obj.Name; + + panel.Children.Add(img); + panel.Children.Add(textBlock); + + panel.Tag = obj; + + SearchScopesCombo.Items.Add(panel); + + + // Set our initial search scope. + // If Shell Libraries are supported, search in all the libraries, + // else, use user's profile (my documents, etc) + if (ShellLibrary.IsPlatformSupported) + { + if (obj == (ShellContainer)KnownFolders.Libraries) + SearchScopesCombo.SelectedItem = panel; + } + else + { + if (obj == (ShellContainer)KnownFolders.UsersFiles) + SearchScopesCombo.SelectedItem = panel; + } + } + + SearchScopesCombo.ToolTip = "Change the scope of the search. Use SearchHomeFolder\nto search your entire search index."; + + SearchScopesCombo.SelectionChanged += new SelectionChangedEventHandler(SearchScopesCombo_SelectionChanged); + + // Create our help task dialog + helpTaskDialog = new TaskDialog(); + helpTaskDialog.OwnerWindowHandle = (new WindowInteropHelper(this)).Handle; + + helpTaskDialog.Icon = TaskDialogStandardIcon.Information; + helpTaskDialog.Cancelable = true; + + helpTaskDialog.Caption = "Search demo application"; + helpTaskDialog.InstructionText = "Demo application to show the usage of Search APIs"; + helpTaskDialog.Text = "This is a demo application that demonstrates the usage of Search related APIs in the Windows API Code Pack.\n\n"; + helpTaskDialog.Text += "The search textbox accepts any search query, including advanced query syntax (AQS) and natural query syntax (NQS).\n\n"; + helpTaskDialog.Text += "Some examples:\n"; + helpTaskDialog.Text += "\tAQS - kind:pictures and author:corbis\n"; + helpTaskDialog.Text += "\tNQS - all pictures by corbis\n"; + helpTaskDialog.Text += "\tAQS - kind:email and from:bill\n"; + helpTaskDialog.Text += "\tNQS - emails by bill sent yesterday\n\n"; + helpTaskDialog.Text += "The advanced search dialog shows how to search against some common properties. "; + helpTaskDialog.Text += " Multiple conditions can be combined together for the search."; + helpTaskDialog.Text += "\n\nThe sample also demonstrates how to use the strongly typed property system and display some properties for selected files."; + + helpTaskDialog.ExpansionMode = TaskDialogExpandedDetailsLocation.ExpandContent; + helpTaskDialog.DetailsExpanded = true; + helpTaskDialog.DetailsCollapsedLabel = "Show details"; + helpTaskDialog.DetailsExpandedLabel = "Hide details"; + helpTaskDialog.DetailsExpandedText = "For more information on the Advanced Query Syntax or Natural Query Syntax, visit the following sites:\n\n"; + helpTaskDialog.DetailsExpandedText += "Advanced Query Syntax\n"; + helpTaskDialog.DetailsExpandedText += "Windows Search Advanced Query Syntax\n"; + + helpTaskDialog.HyperlinksEnabled = true; + helpTaskDialog.HyperlinkClick += new EventHandler(helpTaskDialog_HyperlinkClick); + helpTaskDialog.FooterText = "Demo application as part of Windows API Code Pack for .NET Framework"; + + } + + void SearchScopesCombo_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + StackPanel previousSelection = e.RemovedItems[0] as StackPanel; + + if (SearchScopesCombo.SelectedIndex == 0) + { + // Show a folder selection dialog + CommonOpenFileDialog cfd = new CommonOpenFileDialog(); + cfd.AllowNonFileSystemItems = true; + cfd.IsFolderPicker = true; + + cfd.Title = "Select a folder as your search scope..."; + + if (cfd.ShowDialog() == CommonFileDialogResult.Ok) + { + ShellContainer container = cfd.FileAsShellObject as ShellContainer; + + if (container != null) + { + #region Add it to the bottom of our combobox + StackPanel panel = new StackPanel(); + panel.Margin = new Thickness(5, 2, 5, 2); + panel.Orientation = Orientation.Horizontal; + + Image img = new Image(); + img.Source = container.Thumbnail.SmallBitmapSource; + img.Height = 32; + + TextBlock textBlock = new TextBlock(); + textBlock.Background = Brushes.Transparent; + textBlock.FontSize = 10; + textBlock.Margin = new Thickness(4); + textBlock.VerticalAlignment = VerticalAlignment.Center; + textBlock.Text = container.Name; + + panel.Children.Add(img); + panel.Children.Add(textBlock); + + SearchScopesCombo.Items.Add(panel); + #endregion + + // Set our selected scope + selectedScope = container; + SearchScopesCombo.SelectedItem = panel; + } + else + SearchScopesCombo.SelectedItem = previousSelection; + } + else + SearchScopesCombo.SelectedItem = previousSelection; + } + else if (SearchScopesCombo.SelectedItem != null && SearchScopesCombo.SelectedItem is ShellContainer) + selectedScope = ((StackPanel)SearchScopesCombo.SelectedItem).Tag as ShellContainer; + } + + void timer_Tick(object sender, EventArgs e) + { + // Using a timer, check if our background search thread is still alive. + // If not alive, update the cursor + if (backgroundSearchThread != null && !backgroundSearchThread.IsAlive) + { + this.Cursor = Cursors.Arrow; + + // Also enable the search textbox again + SearchBox.IsEnabled = true; + buttonSearchAdv.IsEnabled = true; + } + } + + private void helpTaskDialog_HyperlinkClick(object sender, TaskDialogHyperlinkClickedEventArgs e) + { + // Launch the application associated with http links + Process.Start(e.LinkText); + } + + void Window1_Loaded(object sender, RoutedEventArgs e) + { + HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle); + source.AddHook(new HwndSourceHook(WndProc)); + + TaskDialogResult tdr = helpTaskDialog.Show(); + } + + internal void Search(List searchItemsList) + { + // Update the listview's itemsource + listView1.ItemsSource = searchItemsList; + + if (listView1.Items.Count > 0) + listView1.SelectedIndex = 0; + } + + #region For the Aero glass effect + + private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) + { + // handle the message for DWM when the aero glass is turned on or off + if (msg == WM_DWMCOMPOSITIONCHANGED) + { + if (GlassHelper.IsGlassEnabled) + { + // Extend glass + Rect bounds = VisualTreeHelper.GetContentBounds(listView1); + GlassHelper.ExtendGlassFrame(this, new Thickness(bounds.Left, bounds.Top, bounds.Right, bounds.Bottom)); + } + else + { + // turn off glass... + GlassHelper.DisableGlassFrame(this); + } + + handled = true; + } + + return IntPtr.Zero; + } + + private void OnMove(object s, DragDeltaEventArgs e) + { + left += (int)e.HorizontalChange; + top += (int)e.VerticalChange; + this.Left = left; + this.Top = top; + } + + void Window1_SourceInitialized(object sender, EventArgs e) + { + Rect bounds = VisualTreeHelper.GetContentBounds(listView1); + GlassHelper.ExtendGlassFrame(this, new Thickness(bounds.Left, bounds.Top, bounds.Right, bounds.Bottom)); + } + + protected override void OnContentRendered(EventArgs e) + { + if (this.neverRendered) + { + // The window takes the size of its content because SizeToContent + // is set to WidthAndHeight in the markup. We then allow + // it to be set by the user, and have the content take the size + // of the window. + this.SizeToContent = SizeToContent.Manual; + + FrameworkElement root = this.Content as FrameworkElement; + if (root != null) + { + root.Width = double.NaN; + root.Height = double.NaN; + } + + this.neverRendered = false; + } + + base.OnContentRendered(e); + } + + + #endregion + + private void SearchTextBox_Search(object sender, RoutedEventArgs e) + { + if (backgroundSearchThread != null) + backgroundSearchThread.Abort(); + + // Set the cursor to wait + this.Cursor = Cursors.Wait; + + // Also disable the search textbox while our search is going on + SearchBox.IsEnabled = false; + buttonSearchAdv.IsEnabled = false; + + // Search... on any letters typed + if (!string.IsNullOrEmpty(SearchBox.Text)) + { + // Create a background thread to do the search + backgroundSearchThread = new Thread(new ParameterizedThreadStart(DoSimpleSearch)); + // ApartmentState.STA is required for COM + backgroundSearchThread.SetApartmentState(ApartmentState.STA); + backgroundSearchThread.Start(SearchBox.Text); + } + else + { + listView1.ItemsSource = null; // nothing was typed, or user deleted the search query (clear the list). + } + } + + // Helper method to do the search on a background thread + internal void DoSimpleSearch(object arg) + { + string text = arg as string; + + // Specify a culture for our query. + CultureInfo cultureInfo = new CultureInfo("en-US"); + + SearchCondition searchCondition = SearchConditionFactory.ParseStructuredQuery(text, cultureInfo); + + // Create a new search folder by setting our search condition and search scope + // KnownFolders.SearchHome - This is the same scope used by Windows search + searchFolder = new ShellSearchFolder( + searchCondition, + selectedScope); + + List items = new List(); + + try + { + // Because we cannot pass ShellObject or IShellItem (native interface) + // across multiple threads, creating a helper object and copying the data we need from the ShellObject + foreach (ShellObject so in searchFolder) + { + // For each of our ShellObject, + // create a SearchItem object + // We will bind these items to the ListView + SearchItem item = new SearchItem(); + item.Name = so.Name; + + // We must freeze the ImageSource before passing across threads + BitmapSource thumbnail = so.Thumbnail.MediumBitmapSource; + thumbnail.Freeze(); + item.Thumbnail = thumbnail; + + item.Authors = so.Properties.System.Author.Value; + item.Title = so.Properties.System.Title.Value; + item.Keywords = so.Properties.System.Keywords.Value; + item.Copyright = so.Properties.System.Copyright.Value; + item.TotalPages = so.Properties.System.Document.PageCount.Value.HasValue ? so.Properties.System.Document.PageCount.Value.Value : 0; + item.Rating = so.Properties.System.SimpleRating.Value.HasValue ? (int)so.Properties.System.SimpleRating.Value.Value : 0; + item.ParsingName = so.ParsingName; + + items.Add(item); + } + + // Invoke the search on the main thread + + Dispatcher.Invoke( + System.Windows.Threading.DispatcherPriority.Normal, + new Action( + delegate() + { + UpdateSearchItems(items); + } + )); + } + catch + { + searchFolder.Dispose(); + searchFolder = null; + } + } + + // Updates the items on the listview on the main thread. + // This method should not be called from a background thread + internal void UpdateSearchItems(List items) + { + // Update the listview's itemsource + listView1.ItemsSource = items; + + if (listView1.Items.Count > 0) + listView1.SelectedIndex = 0; + } + + private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e) + { + SearchBox.Focus(); + } + + private void buttonSearchAdv_Click(object sender, RoutedEventArgs e) + { + if (advWindow == null) + { + advWindow = new AdvancedSearch(); + advWindow.MainWindow = this; + advWindow.Closed += new EventHandler(advWindow_Closed); + } + + if (!advWindow.IsVisible) + advWindow.Show(); + else + { + advWindow.Visibility = Visibility.Visible; + advWindow.Focus(); + } + } + + void advWindow_Closed(object sender, EventArgs e) + { + advWindow = null; + } + + private void Window_Closed(object sender, EventArgs e) + { + if (advWindow != null) + advWindow.Close(); + } + + private void HelpButton_Click(object sender, RoutedEventArgs e) + { + helpTaskDialog.Show(); + } + } + + /// + /// ImageView displays image files using themselves as their icons. + /// In order to write our own visual tree of a view, we should override its + /// DefaultStyleKey and ItemContainerDefaultKey. DefaultStyleKey specifies + /// the style key of ListView; ItemContainerDefaultKey specifies the style + /// key of ListViewItem. + /// + public class ImageView : ViewBase + { + #region DefaultStyleKey + + protected override object DefaultStyleKey + { + get { return new ComponentResourceKey(GetType(), "ImageView"); } + } + + #endregion + + #region ItemContainerDefaultStyleKey + + protected override object ItemContainerDefaultStyleKey + { + get { return new ComponentResourceKey(GetType(), "ImageViewItem"); } + } + + #endregion + } + + public static class CustomCommands + { + public static RoutedCommand SearchCommand = new RoutedCommand("SearchCommand", typeof(CustomCommands)); + } + + /// + /// Represents a single item in the search results. + /// This item will store the file's thumbnail, display name, + /// and some properties (that will be displayed in the properties pane) + /// + public class SearchItem + { + public string Name { get; set; } + public BitmapSource Thumbnail { get; set; } + public string[] Authors { get; set; } + public int Rating { get; set; } + public string Copyright { get; set; } + public int TotalPages { get; set; } + public string[] Keywords { get; set; } + public string Title { get; set; } + public string ParsingName { get; set; } + } +} diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/app.config b/source/Samples/Shell/SearchApplication/CS/SearchApp/app.config new file mode 100644 index 00000000..1f8eca1d --- /dev/null +++ b/source/Samples/Shell/SearchApplication/CS/SearchApp/app.config @@ -0,0 +1,15 @@ + + + + +
+ + + + + + True + + + + \ No newline at end of file diff --git a/source/Samples/Shell/SearchApplication/CS/SearchApp/app.manifest b/source/Samples/Shell/SearchApplication/CS/SearchApp/app.manifest new file mode 100644 index 00000000..40fdb721 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/CS/SearchApp/app.manifest @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/AdvancedSearch.xaml b/source/Samples/Shell/SearchApplication/VB/SearchApp/AdvancedSearch.xaml new file mode 100644 index 00000000..ad02c2c7 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/AdvancedSearch.xaml @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Implicit + = + != + < + > + <= + >= + Starts with + Ends with + Contains + Does not contains + Matches + Contains word + Contains word starting with + Application specific + + + + + (None) + And + Or + + + + + Implicit + = + != + < + > + <= + >= + Starts with + Ends with + Contains + Does not contains + Matches + Contains word + Contains word starting with + Application specific + + + + + + + + (None) + Yesterday + Earlier this week + Last week + Earlier this month + Earlier this year + A long time ago + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/AdvancedSearch.xaml.vb b/source/Samples/Shell/SearchApplication/VB/SearchApp/AdvancedSearch.xaml.vb new file mode 100644 index 00000000..5d2800b2 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/AdvancedSearch.xaml.vb @@ -0,0 +1,616 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows +Imports System.Windows.Controls +Imports Microsoft.WindowsAPICodePack.Shell +Imports Microsoft.WindowsAPICodePack.Dialogs +Imports Microsoft.WindowsAPICodePack.Shell.PropertySystem +Imports System.Collections.Generic +Imports System.Windows.Threading +Imports System.Windows.Media.Imaging +Imports System.Threading +Imports System.Windows.Interop +Imports System.Windows.Input + +Namespace Microsoft.WindowsAPICodePack.Samples.SearchApp + ''' + ''' Interaction logic for AdvancedSearch.xaml + ''' + Partial Public Class AdvancedSearch + Inherits Window + Private stockIcons As StockIcons + Private documentsStockIcon As StockIcon + Private picturesStockIcon As StockIcon + Private musicStockIcon As StockIcon + Private videosStockIcon As StockIcon + + Friend MainWindow As Window1 + + ' Background thread for our search + Private backgroundSearchThread As Thread = Nothing + + Public Sub New() + stockIcons = New StockIcons() + + documentsStockIcon = stockIcons.DocumentAssociated + videosStockIcon = stockIcons.VideoFiles + musicStockIcon = stockIcons.AudioFiles + picturesStockIcon = stockIcons.ImageFiles + + InitializeComponent() + + ' Set our default + DocumentsRadioButton.IsChecked = True + + ' + prop1prop2OperationComboBox.SelectedIndex = 0 + + ' Because the search can take some time, using a background thread. + ' This timer will check if that thread is still alive and accordingly update + ' the cursor + Dim timer As New DispatcherTimer() + timer.Interval = New TimeSpan(0, 0, 1) + timer.IsEnabled = True + AddHandler timer.Tick, AddressOf timer_Tick + End Sub + + Private Sub timer_Tick(ByVal sender As Object, ByVal e As EventArgs) + ' Using a timer, check if our background search thread is still alive. + ' If not alive, update the cursor to arrow + If backgroundSearchThread IsNot Nothing AndAlso (Not backgroundSearchThread.IsAlive) Then + Me.Cursor = Cursors.Arrow + MainWindow.Cursor = Cursors.Arrow + + ' Also enable the search textbox again + MainWindow.SearchBox.IsEnabled = True + MainWindow.buttonSearchAdv.IsEnabled = True + buttonSearch.IsEnabled = True + buttonClear.IsEnabled = True + End If + End Sub + + Private Sub DocumentsRadioButton_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs) + UpdateDocumentsSearchSettings() + + documentsStockIcon.Selected = True + DocumentsRadioButton.Content = New Image With {.Source = documentsStockIcon.BitmapSource} + + picturesStockIcon.Selected = False + PicturesRadioButton.Content = New Image With {.Source = picturesStockIcon.BitmapSource} + + musicStockIcon.Selected = False + MusicRadioButton.Content = New Image With {.Source = musicStockIcon.BitmapSource} + + videosStockIcon.Selected = False + VideosRadioButton.Content = New Image With {.Source = videosStockIcon.BitmapSource} + End Sub + + Private Sub PicturesRadioButton_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs) + UpdatePicturesSearchSettings() + + documentsStockIcon.Selected = False + DocumentsRadioButton.Content = New Image With {.Source = documentsStockIcon.BitmapSource} + + picturesStockIcon.Selected = True + PicturesRadioButton.Content = New Image With {.Source = picturesStockIcon.BitmapSource} + + musicStockIcon.Selected = False + MusicRadioButton.Content = New Image With {.Source = musicStockIcon.BitmapSource} + + videosStockIcon.Selected = False + VideosRadioButton.Content = New Image With {.Source = videosStockIcon.BitmapSource} + End Sub + + Private Sub MusicRadioButton_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs) + UpdateMusicSearchSettings() + + documentsStockIcon.Selected = False + DocumentsRadioButton.Content = New Image With {.Source = documentsStockIcon.BitmapSource} + + picturesStockIcon.Selected = False + PicturesRadioButton.Content = New Image With {.Source = picturesStockIcon.BitmapSource} + + musicStockIcon.Selected = True + MusicRadioButton.Content = New Image With {.Source = musicStockIcon.BitmapSource} + + videosStockIcon.Selected = False + VideosRadioButton.Content = New Image With {.Source = videosStockIcon.BitmapSource} + End Sub + + Private Sub VideosRadioButton_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs) + UpdateVideosSearchSettings() + + documentsStockIcon.Selected = False + DocumentsRadioButton.Content = New Image With {.Source = documentsStockIcon.BitmapSource} + + picturesStockIcon.Selected = False + PicturesRadioButton.Content = New Image With {.Source = picturesStockIcon.BitmapSource} + + musicStockIcon.Selected = False + MusicRadioButton.Content = New Image With {.Source = musicStockIcon.BitmapSource} + + videosStockIcon.Selected = True + VideosRadioButton.Content = New Image With {.Source = videosStockIcon.BitmapSource} + End Sub + + Private Sub UpdateDocumentsSearchSettings() + ' We are in "documents" mode + prop1ComboBox.Items.Clear() + prop1ComboBox.Items.Add("Author") + prop1ComboBox.Items.Add("Title") + prop1ComboBox.Items.Add("Comment") + prop1ComboBox.Items.Add("Copyright") + prop1ComboBox.Items.Add("Pages") + prop1ComboBox.Items.Add("Tags/Keywords") + prop1ComboBox.SelectedIndex = 0 + + prop1OperationComboBox.SelectedIndex = 9 + + prop1TextBox.Text = "" + + prop2ComboBox.Items.Clear() + prop2ComboBox.Items.Add("Author") + prop2ComboBox.Items.Add("Title") + prop2ComboBox.Items.Add("Comment") + prop2ComboBox.Items.Add("Copyright") + prop2ComboBox.Items.Add("Pages") + prop2ComboBox.Items.Add("Tags/Keywords") + prop2ComboBox.SelectedIndex = 5 + + prop2OperationComboBox.SelectedIndex = 0 + + prop2TextBox.Text = "" + + prop1prop2OperationComboBox.SelectedIndex = 0 + + comboBoxDateCreated.SelectedIndex = 0 + + ' locations + locationsListBox.Items.Clear() + + If ShellLibrary.IsPlatformSupported Then + AddLocation(CType(KnownFolders.DocumentsLibrary, ShellContainer)) + Else + AddLocation(CType(KnownFolders.Documents, ShellContainer)) + End If + End Sub + + Private Sub UpdatePicturesSearchSettings() + ' We are in "Pictures" mode + prop1ComboBox.Items.Clear() + prop1ComboBox.Items.Add("Author") + prop1ComboBox.Items.Add("Subject") + prop1ComboBox.Items.Add("Camera maker") + prop1ComboBox.Items.Add("Copyright") + prop1ComboBox.Items.Add("Rating") + prop1ComboBox.Items.Add("Tags/Keywords") + prop1ComboBox.SelectedIndex = 0 + + prop1OperationComboBox.SelectedIndex = 9 + + prop1TextBox.Text = "" + + prop2ComboBox.Items.Clear() + prop2ComboBox.Items.Add("Author") + prop2ComboBox.Items.Add("Subject") + prop2ComboBox.Items.Add("Camera maker") + prop2ComboBox.Items.Add("Copyright") + prop2ComboBox.Items.Add("Rating") + prop2ComboBox.Items.Add("Tags/Keywords") + prop2ComboBox.SelectedIndex = 0 + + prop2OperationComboBox.SelectedIndex = 0 + + prop2TextBox.Text = "" + + prop1prop2OperationComboBox.SelectedIndex = 0 + + comboBoxDateCreated.SelectedIndex = 0 + + ' locations + locationsListBox.Items.Clear() + + If ShellLibrary.IsPlatformSupported Then + AddLocation(CType(KnownFolders.PicturesLibrary, ShellContainer)) + Else + AddLocation(CType(KnownFolders.Pictures, ShellContainer)) + End If + + End Sub + + Private Sub UpdateMusicSearchSettings() + ' We are in "Music" mode + prop1ComboBox.Items.Clear() + prop1ComboBox.Items.Add("Album artist") + prop1ComboBox.Items.Add("Album title") + prop1ComboBox.Items.Add("Composer") + prop1ComboBox.Items.Add("Rating") + prop1ComboBox.Items.Add("Genre") + prop1ComboBox.Items.Add("Year") + prop1ComboBox.SelectedIndex = 1 + + prop1OperationComboBox.SelectedIndex = 9 + + prop1TextBox.Text = "" + + prop2ComboBox.Items.Clear() + prop2ComboBox.Items.Add("Album artist") + prop2ComboBox.Items.Add("Album title") + prop2ComboBox.Items.Add("Composer") + prop2ComboBox.Items.Add("Rating") + prop2ComboBox.Items.Add("Genre") + prop2ComboBox.Items.Add("Year") + prop2ComboBox.SelectedIndex = 0 + + prop2OperationComboBox.SelectedIndex = 0 + + prop2TextBox.Text = "" + + prop1prop2OperationComboBox.SelectedIndex = 0 + + comboBoxDateCreated.SelectedIndex = 0 + + ' locations + locationsListBox.Items.Clear() + + If ShellLibrary.IsPlatformSupported Then + AddLocation(CType(KnownFolders.MusicLibrary, ShellContainer)) + Else + AddLocation(CType(KnownFolders.Music, ShellContainer)) + End If + End Sub + + Private Sub UpdateVideosSearchSettings() + ' We are in "Videos" mode + prop1ComboBox.Items.Clear() + prop1ComboBox.Items.Add("Title") + prop1ComboBox.Items.Add("Video length") + prop1ComboBox.Items.Add("Comment") + prop1ComboBox.SelectedIndex = 0 + + prop1OperationComboBox.SelectedIndex = 9 + + prop1TextBox.Text = "" + + prop2ComboBox.Items.Clear() + prop1ComboBox.Items.Add("Title") + prop1ComboBox.Items.Add("Video length") + prop1ComboBox.Items.Add("Comment") + prop2ComboBox.SelectedIndex = 0 + + prop2OperationComboBox.SelectedIndex = 0 + + prop2TextBox.Text = "" + + prop1prop2OperationComboBox.SelectedIndex = 0 + + comboBoxDateCreated.SelectedIndex = 0 + + ' locations + locationsListBox.Items.Clear() + + If ShellLibrary.IsPlatformSupported Then + AddLocation(CType(KnownFolders.VideosLibrary, ShellContainer)) + Else + AddLocation(CType(KnownFolders.Videos, ShellContainer)) + End If + End Sub + + Private Sub addLocationButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' Show CFD and let users pick a folder + Dim cfd As New CommonOpenFileDialog() + cfd.AllowNonFileSystemItems = True + cfd.IsFolderPicker = True + cfd.Multiselect = True + + If cfd.ShowDialog() = CommonFileDialogResult.OK Then + ' Loop through each "folder" and add it our list + For Each so As ShellContainer In cfd.FilesAsShellObject + AddLocation(so) + Next so + End If + End Sub + + Private Sub AddLocation(ByVal so As ShellContainer) + Dim sp As New StackPanel() + sp.Orientation = Orientation.Horizontal + + ' Add the thumbnail/icon + Dim img As New Image() + + ' Because we might be called from a different thread, freeze the bitmap source once + ' we get it + Dim smallBitmapSource As BitmapSource = so.Thumbnail.SmallBitmapSource + smallBitmapSource.Freeze() + img.Source = smallBitmapSource + + img.Margin = New Thickness(5) + sp.Children.Add(img) + + ' Add the name/title + Dim tb As New TextBlock() + tb.Text = so.Name + tb.Margin = New Thickness(5) + sp.Children.Add(tb) + + ' Set our tag as the shell container user picked... + sp.Tag = so + + ' + locationsListBox.Items.Add(sp) + End Sub + + Private Sub removeLocationButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + If locationsListBox.SelectedItem IsNot Nothing Then + locationsListBox.Items.Remove(locationsListBox.SelectedItem) + End If + End Sub + + Private Sub buttonClear_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' Reset all the settings on the dialog for the selected search type + If DocumentsRadioButton.IsChecked.Value Then + UpdateDocumentsSearchSettings() + ElseIf PicturesRadioButton.IsChecked.Value Then + UpdatePicturesSearchSettings() + ElseIf VideosRadioButton.IsChecked.Value Then + UpdateVideosSearchSettings() + ElseIf MusicRadioButton.IsChecked.Value Then + UpdateMusicSearchSettings() + End If + End Sub + + Private Function ParseDate(ByVal toParse As String, ByVal relativeDate As DateTime) As DateTime + If String.IsNullOrEmpty(toParse) OrElse (Not toParse.StartsWith("date:")) Then + Throw New ArgumentException() + End If + + Dim tmpToParse As String = toParse.ToLower().Replace("date:", "") + + Select Case tmpToParse + Case "a long time ago" + Dim longTimeAgo As New DateTime(relativeDate.Year - 2, 1, 1, 0, 0, 0) + Return longTimeAgo + Case "earlier this year" + Dim thisYear As New DateTime(relativeDate.Year, 1, 1, 0, 0, 0) + Return thisYear + Case "earlier this month" + Dim thisMonth As New DateTime(relativeDate.Year, relativeDate.Month, 1, 0, 0, 0) + Return thisMonth + Case "last week" + Dim dayOfWeek As DayOfWeek = relativeDate.DayOfWeek + Dim lastweekSunday As DateTime = relativeDate.AddDays(-1 * CInt(dayOfWeek)) + Return lastweekSunday + Case "yesterday" + Dim yesterday As DateTime = relativeDate.AddDays(-1) + Return yesterday + Case "earlier this week" + Dim lastWeek As DateTime = relativeDate.AddDays(-7) + Return lastWeek + Case Else + Throw New ArgumentException() + End Select + End Function + + Private Sub buttonSearch_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + If MainWindow Is Nothing Then + Return + End If + + If backgroundSearchThread IsNot Nothing Then + backgroundSearchThread.Abort() + End If + + ' Set our cursor to wait + Me.Cursor = Cursors.Wait + MainWindow.Cursor = Cursors.Wait + + ' Also disable the search textbox while our search is going on + MainWindow.SearchBox.IsEnabled = False + MainWindow.buttonSearchAdv.IsEnabled = False + buttonSearch.IsEnabled = False + buttonClear.IsEnabled = False + MainWindow.SearchBox.Clear() + + ' Bring the main window in the foreground + MainWindow.Activate() + + ' Create a background thread to do the search + backgroundSearchThread = New Thread(New ThreadStart(AddressOf DoAdvancedSearch)) + ' ApartmentState.STA is required for COM + backgroundSearchThread.SetApartmentState(ApartmentState.STA) + backgroundSearchThread.Start() + + End Sub + + Private Sub DoAdvancedSearch() + + ' This is our final searchcondition that we'll create the search folder from + Dim finalSearchCondition As SearchCondition = Nothing + + ' This is Prop1 + prop2 search condition... if the user didn't specify one of the properties, + ' we can just use the one property/value they specify...if they do, then we can do the and/or operation + Dim combinedPropSearchCondition As SearchCondition = Nothing + + ' Because we are doing the search on a background thread, + ' we can't access the UI controls from that thread. + ' Invoke from the main UI thread and get the values + Dim prop1TextBox_Text As String = String.Empty + Dim prop2TextBox_Text As String = String.Empty + Dim prop1ComboBox_Value As String = String.Empty + Dim prop2ComboBox_Value As String = String.Empty + Dim prop1ConditionOperation As SearchConditionOperation = SearchConditionOperation.ValueContains + Dim prop2ConditionOperation As SearchConditionOperation = SearchConditionOperation.ValueContains + Dim prop1prop2OperationComboBox_Value As String = String.Empty + Dim comboBoxDateCreated_Value As String = String.Empty + Dim prop1prop2OperationComboBox_SelectedIndex As Integer = 0 + Dim dateSelected As Boolean = False + Dim scopes As New List(Of ShellContainer)() + + Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, New Action(Function() AnonymousMethod1(prop1TextBox_Text, prop1ComboBox_Value, prop2ComboBox_Value, prop1ConditionOperation, prop2ConditionOperation, prop1prop2OperationComboBox_Value, prop1prop2OperationComboBox_SelectedIndex, comboBoxDateCreated_Value, dateSelected, scopes))) + + ' If we have a valid first property/value, then create a search condition + If Not String.IsNullOrEmpty(prop1TextBox_Text) Then + Dim prop1Condition As SearchCondition = SearchConditionFactory.CreateLeafCondition(GetSearchProperty(prop1ComboBox_Value), prop1TextBox_Text, prop1ConditionOperation) + + ' After creating the first condition, see if we need to create a second leaf condition + If prop1prop2OperationComboBox_SelectedIndex <> 0 AndAlso Not(String.IsNullOrEmpty(prop2TextBox_Text)) Then + Dim prop2Condition As SearchCondition = SearchConditionFactory.CreateLeafCondition(GetSearchProperty(prop2ComboBox_Value), prop2TextBox_Text, prop2ConditionOperation) + + ' Create our combined search condition AND or OR + If prop1prop2OperationComboBox.SelectedIndex = 1 Then + combinedPropSearchCondition = SearchConditionFactory.CreateAndOrCondition(SearchConditionType.And, False, prop1Condition, prop2Condition) + Else + combinedPropSearchCondition = SearchConditionFactory.CreateAndOrCondition(SearchConditionType.Or, False, prop1Condition, prop2Condition) + End If + Else + combinedPropSearchCondition = prop1Condition + End If + Else + Return ' no search text entered + End If + + ' Get the date condition + If dateSelected Then + Dim dateCreatedCondition As SearchCondition = SearchConditionFactory.CreateLeafCondition(SystemProperties.System.DateCreated, ParseDate((CType(comboBoxDateCreated.SelectedItem, ComboBoxItem)).Tag.ToString(), DateTime.Now), SearchConditionOperation.GreaterThan) + + ' If we have a property based search condition, create an "AND" search condition from these 2 + If combinedPropSearchCondition IsNot Nothing Then + finalSearchCondition = SearchConditionFactory.CreateAndOrCondition(SearchConditionType.And, False, combinedPropSearchCondition, dateCreatedCondition) + Else + finalSearchCondition = dateCreatedCondition + End If + Else + finalSearchCondition = combinedPropSearchCondition + End If + + + Dim searchFolder As New ShellSearchFolder(finalSearchCondition, scopes.ToArray()) + + ' + Dim items As New List(Of SearchItem)() + + Try + ' Because we cannot pass ShellObject or IShellItem (native interface) + ' across multiple threads, creating a helper object and copying the data we need from the ShellObject + For Each so As ShellObject In searchFolder + ' For each of our ShellObject, + ' create a SearchItem object + ' We will bind these items to the ListView + Dim item As New SearchItem() + item.Name = so.Name + + ' We must freeze the ImageSource before passing across threads + Dim thumbnail As BitmapSource = so.Thumbnail.MediumBitmapSource + thumbnail.Freeze() + item.Thumbnail = thumbnail + + item.Authors = so.Properties.System.Author.Value + item.Title = so.Properties.System.Title.Value + item.Keywords = so.Properties.System.Keywords.Value + item.Copyright = so.Properties.System.Copyright.Value + item.TotalPages = If(so.Properties.System.Document.PageCount.Value.HasValue, so.Properties.System.Document.PageCount.Value.Value, 0) + item.Rating = If(so.Properties.System.SimpleRating.Value.HasValue, CInt(Fix(so.Properties.System.SimpleRating.Value.Value)), 0) + item.ParsingName = so.ParsingName + + items.Add(item) + Next so + + ' Invoke the search on the main thread + + Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, New Action(Function() AnonymousMethod2(items))) + Finally + ' TODO - dispose other + + finalSearchCondition.Dispose() + finalSearchCondition = Nothing + + searchFolder.Dispose() + searchFolder = Nothing + End Try + End Sub + + Private Function AnonymousMethod1(ByVal prop1TextBox_Text As String, ByVal prop1ComboBox_Value As String, ByVal prop2ComboBox_Value As String, ByVal prop1ConditionOperation As SearchConditionOperation, ByVal prop2ConditionOperation As SearchConditionOperation, ByVal prop1prop2OperationComboBox_Value As String, ByVal prop1prop2OperationComboBox_SelectedIndex As Integer, ByVal comboBoxDateCreated_Value As String, ByVal dateSelected As Boolean, ByVal scopes As List(Of ShellContainer)) As Object + prop1TextBox_Text = prop1TextBox.Text + prop1TextBox_Text = prop1TextBox.Text + prop1ComboBox_Value = prop1ComboBox.SelectedItem.ToString() + prop2ComboBox_Value = prop2ComboBox.SelectedItem.ToString() + prop1ConditionOperation = GetConditionOperation(prop1OperationComboBox) + prop2ConditionOperation = GetConditionOperation(prop2OperationComboBox) + prop1prop2OperationComboBox_Value = prop1prop2OperationComboBox.SelectedItem.ToString() + prop1prop2OperationComboBox_SelectedIndex = prop1prop2OperationComboBox.SelectedIndex + comboBoxDateCreated_Value = comboBoxDateCreated.SelectedItem.ToString() + dateSelected = (comboBoxDateCreated.SelectedItem IsNot dateCreatedNone) + For Each sp As StackPanel In locationsListBox.Items + If TypeOf sp.Tag Is ShellContainer Then + scopes.Add(CType(sp.Tag, ShellContainer)) + End If + Next sp + Return Nothing + End Function + + Private Function AnonymousMethod2(ByVal items As List(Of SearchItem)) As Object + MainWindow.UpdateSearchItems(items) + Return Nothing + End Function + + Private Function GetSearchProperty(ByVal prop As String) As PropertyKey + Select Case prop + Case "Author" + Return SystemProperties.System.Author + Case "Title" + Return SystemProperties.System.Title + Case "Comment" + Return SystemProperties.System.Comment + Case "Copyright" + Return SystemProperties.System.Copyright + Case "Pages" + Return SystemProperties.System.Document.PageCount + Case "Tags/Keywords" + Return SystemProperties.System.Keywords + Case "Subject" + Return SystemProperties.System.Subject + Case "Camera maker" + Return SystemProperties.System.Photo.CameraManufacturer + Case "Rating" + Return SystemProperties.System.Rating + Case "Album artist" + Return SystemProperties.System.Music.AlbumArtist + Case "Album title" + Return SystemProperties.System.Music.AlbumTitle + Case "Composer" + Return SystemProperties.System.Music.Composer + Case "Genre" + Return SystemProperties.System.Music.Genre + Case "Video length" + Return SystemProperties.System.Media.Duration + Case "Year" + Return SystemProperties.System.Media.Year + End Select + + Return SystemProperties.System.Null + End Function + + Private Function GetConditionOperation(ByVal comboBox As ComboBox) As SearchConditionOperation + Dim operation As SearchConditionOperation = CType(System.Enum.Parse(GetType(SearchConditionOperation), (CType(comboBox.Items(comboBox.SelectedIndex), ComboBoxItem)).Tag.ToString(), True), SearchConditionOperation) + + Return operation + End Function + + Private Sub prop1prop2OperationComboBox_SelectionChanged(ByVal sender As Object, ByVal e As SelectionChangedEventArgs) + ' Based on the And/OR operation between the two properties, enable/disable + ' the second propertie's UI + If prop1prop2OperationComboBox.SelectedIndex = 0 Then ' (None) + prop2ComboBox.IsEnabled = False + prop2OperationComboBox.IsEnabled = False + prop2TextBox.IsEnabled = False + Else + prop2ComboBox.IsEnabled = True + prop2OperationComboBox.IsEnabled = True + prop2TextBox.IsEnabled = True + End If + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/Application.xaml b/source/Samples/Shell/SearchApplication/VB/SearchApp/Application.xaml new file mode 100644 index 00000000..5d6662f3 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/Application.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/Application.xaml.vb b/source/Samples/Shell/SearchApplication/VB/SearchApp/Application.xaml.vb new file mode 100644 index 00000000..c5c2ef25 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/Application.xaml.vb @@ -0,0 +1,14 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Windows + +Namespace Microsoft.WindowsAPICodePack.Samples.SearchApp + ''' + ''' Interaction logic for App.xaml + ''' + Partial Public Class App + Inherits Application + End Class +End Namespace diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/Controls/RatingControl.xaml b/source/Samples/Shell/SearchApplication/VB/SearchApp/Controls/RatingControl.xaml new file mode 100644 index 00000000..66f42b8c --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/Controls/RatingControl.xaml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/Controls/RatingControl.xaml.vb b/source/Samples/Shell/SearchApplication/VB/SearchApp/Controls/RatingControl.xaml.vb new file mode 100644 index 00000000..5c3af415 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/Controls/RatingControl.xaml.vb @@ -0,0 +1,75 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows +Imports System.Windows.Controls +Imports System.Windows.Controls.Primitives + +Namespace Microsoft.WindowsAPICodePack.Samples.SearchApp + ''' + ''' Interaction logic for RatingControl.xaml + ''' + Partial Public Class RatingControl + Inherits UserControl + Public Shared ReadOnly RatingValueProperty As DependencyProperty = DependencyProperty.Register("RatingValue", GetType(Integer), GetType(RatingControl), New FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, New PropertyChangedCallback(AddressOf RatingValueChanged))) + + + Private maxValue As Integer = 99 + + Public Property RatingValue() As Integer + Get + Return CInt(Fix(GetValue(RatingValueProperty))) + End Get + Set(ByVal value As Integer) + If value < 0 Then + SetValue(RatingValueProperty, 0) + ElseIf value > maxValue Then + SetValue(RatingValueProperty, maxValue) + Else + SetValue(RatingValueProperty, value) + End If + End Set + End Property + + Private Shared Sub RatingValueChanged(ByVal sender As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs) + Dim parent As RatingControl = TryCast(sender, RatingControl) + Dim ratingValue As Integer = CInt(Fix(e.NewValue)) + Dim children As UIElementCollection = (CType(parent.Content, Grid)).Children + Dim button As ToggleButton = Nothing + + For i As Integer = 0 To ratingValue - 1 + button = TryCast(children(i), ToggleButton) + If button IsNot Nothing Then + button.IsChecked = True + End If + Next i + + For i As Integer = ratingValue To children.Count - 1 + button = TryCast(children(i), ToggleButton) + If button IsNot Nothing Then + button.IsChecked = False + End If + Next i + End Sub + + Public Sub New() + InitializeComponent() + End Sub + + Private Sub RatingButtonClickEventHandler(ByVal sender As Object, ByVal e As RoutedEventArgs) + Dim button As ToggleButton = TryCast(sender, ToggleButton) + + Dim newRating As Integer = Integer.Parse(CType(button.Tag, String)) + + If CBool(button.IsChecked) OrElse newRating < RatingValue Then + RatingValue = newRating + Else + RatingValue = newRating - 1 + End If + + e.Handled = True + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/Controls/SearchTextBox.vb b/source/Samples/Shell/SearchApplication/VB/SearchApp/Controls/SearchTextBox.vb new file mode 100644 index 00000000..e6e8e8cc --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/Controls/SearchTextBox.vb @@ -0,0 +1,190 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows +Imports System.Windows.Controls +Imports System.Windows.Input +Imports System.Windows.Media +Imports System.Windows.Threading + +Namespace Microsoft.WindowsAPICodePack.Samples.SearchApp + Public Enum SearchMode + Instant + Delayed + End Enum + + Public Class SearchTextBox + Inherits TextBox + Public Shared LabelTextProperty As DependencyProperty = DependencyProperty.Register("LabelText", GetType(String), GetType(SearchTextBox)) + + Public Shared LabelTextColorProperty As DependencyProperty = DependencyProperty.Register("LabelTextColor", GetType(Brush), GetType(SearchTextBox)) + + Public Shared SearchModeProperty As DependencyProperty = DependencyProperty.Register("SearchMode", GetType(SearchMode), GetType(SearchTextBox), New PropertyMetadata(SearchMode.Instant)) + + Private Shared HasTextPropertyKey As DependencyPropertyKey = DependencyProperty.RegisterReadOnly("HasText", GetType(Boolean), GetType(SearchTextBox), New PropertyMetadata()) + + Public Shared HasTextProperty As DependencyProperty = HasTextPropertyKey.DependencyProperty + + Private Shared IsMouseLeftButtonDownPropertyKey As DependencyPropertyKey = DependencyProperty.RegisterReadOnly("IsMouseLeftButtonDown", GetType(Boolean), GetType(SearchTextBox), New PropertyMetadata()) + Public Shared IsMouseLeftButtonDownProperty As DependencyProperty = IsMouseLeftButtonDownPropertyKey.DependencyProperty + + Public Shared SearchEventTimeDelayProperty As DependencyProperty = DependencyProperty.Register("SearchEventTimeDelay", GetType(Duration), GetType(SearchTextBox), New FrameworkPropertyMetadata(New Duration(New TimeSpan(0, 0, 0, 0, 500)), New PropertyChangedCallback(AddressOf OnSearchEventTimeDelayChanged))) + + Public Shared ReadOnly SearchEvent As RoutedEvent = EventManager.RegisterRoutedEvent("Search", RoutingStrategy.Bubble, GetType(RoutedEventHandler), GetType(SearchTextBox)) + + Shared Sub New() + DefaultStyleKeyProperty.OverrideMetadata(GetType(SearchTextBox), New FrameworkPropertyMetadata(GetType(SearchTextBox))) + End Sub + + Private searchEventDelayTimer As DispatcherTimer + + Public Sub New() + MyBase.New() + searchEventDelayTimer = New DispatcherTimer() + searchEventDelayTimer.Interval = SearchEventTimeDelay.TimeSpan + AddHandler searchEventDelayTimer.Tick, AddressOf OnSeachEventDelayTimerTick + End Sub + + Private Sub OnSeachEventDelayTimerTick(ByVal o As Object, ByVal e As EventArgs) + searchEventDelayTimer.Stop() + RaiseSearchEvent() + End Sub + + Private Shared Sub OnSearchEventTimeDelayChanged(ByVal o As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs) + Dim stb As SearchTextBox = TryCast(o, SearchTextBox) + If stb IsNot Nothing Then + stb.searchEventDelayTimer.Interval = (CType(e.NewValue, Duration)).TimeSpan + stb.searchEventDelayTimer.Stop() + End If + End Sub + + Protected Overrides Sub OnTextChanged(ByVal e As TextChangedEventArgs) + MyBase.OnTextChanged(e) + + HasText = Text.Length <> 0 + + If SearchMode = SearchMode.Instant Then + searchEventDelayTimer.Stop() + searchEventDelayTimer.Start() + End If + End Sub + + Public Overrides Sub OnApplyTemplate() + MyBase.OnApplyTemplate() + + Dim iconBorder As Border = TryCast(GetTemplateChild("PART_SearchIconBorder"), Border) + + If iconBorder IsNot Nothing Then + AddHandler iconBorder.MouseLeftButtonDown, AddressOf IconBorder_MouseLeftButtonDown + AddHandler iconBorder.MouseLeftButtonUp, AddressOf IconBorder_MouseLeftButtonUp + AddHandler iconBorder.MouseLeave, AddressOf IconBorder_MouseLeave + End If + End Sub + + Private Sub IconBorder_MouseLeftButtonDown(ByVal obj As Object, ByVal e As MouseButtonEventArgs) + IsMouseLeftButtonDown = True + End Sub + + Private Sub IconBorder_MouseLeftButtonUp(ByVal obj As Object, ByVal e As MouseButtonEventArgs) + If Not IsMouseLeftButtonDown Then + Return + End If + + If HasText AndAlso SearchMode = SearchMode.Instant Then + Me.Text = "" + End If + + If HasText AndAlso SearchMode = SearchMode.Delayed Then + RaiseSearchEvent() + End If + + IsMouseLeftButtonDown = False + End Sub + + Private Sub IconBorder_MouseLeave(ByVal obj As Object, ByVal e As MouseEventArgs) + IsMouseLeftButtonDown = False + End Sub + + Protected Overrides Sub OnKeyDown(ByVal e As KeyEventArgs) + If e.Key = Key.Escape AndAlso SearchMode = SearchMode.Instant Then + Me.Text = "" + ElseIf (e.Key = Key.Return OrElse e.Key = Key.Enter) AndAlso SearchMode = SearchMode.Delayed Then + RaiseSearchEvent() + Else + MyBase.OnKeyDown(e) + End If + End Sub + + Private Sub RaiseSearchEvent() + Dim args As New RoutedEventArgs(SearchEvent) + MyBase.RaiseEvent(args) + End Sub + + Public Property LabelText() As String + Get + Return CStr(GetValue(LabelTextProperty)) + End Get + Set(ByVal value As String) + SetValue(LabelTextProperty, value) + End Set + End Property + + Public Property LabelTextColor() As Brush + Get + Return CType(GetValue(LabelTextColorProperty), Brush) + End Get + Set(ByVal value As Brush) + SetValue(LabelTextColorProperty, value) + End Set + End Property + + Public Property SearchMode() As SearchMode + Get + Return CType(GetValue(SearchModeProperty), SearchMode) + End Get + Set(ByVal value As SearchMode) + SetValue(SearchModeProperty, value) + End Set + End Property + + Public Property HasText() As Boolean + Get + Return CBool(GetValue(HasTextProperty)) + End Get + Private Set(ByVal value As Boolean) + SetValue(HasTextPropertyKey, value) + End Set + End Property + + Public Property SearchEventTimeDelay() As Duration + Get + Return CType(GetValue(SearchEventTimeDelayProperty), Duration) + End Get + Set(ByVal value As Duration) + SetValue(SearchEventTimeDelayProperty, value) + End Set + End Property + + Public Property IsMouseLeftButtonDown() As Boolean + Get + Return CBool(GetValue(IsMouseLeftButtonDownProperty)) + End Get + Private Set(ByVal value As Boolean) + SetValue(IsMouseLeftButtonDownPropertyKey, value) + End Set + End Property + + Public Custom Event Search As RoutedEventHandler + AddHandler(ByVal value As RoutedEventHandler) + MyBase.AddHandler(SearchEvent, value) + End AddHandler + RemoveHandler(ByVal value As RoutedEventHandler) + MyBase.RemoveHandler(SearchEvent, value) + End RemoveHandler + RaiseEvent(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) + End RaiseEvent + End Event + End Class +End Namespace diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/GlassHelper.vb b/source/Samples/Shell/SearchApplication/VB/SearchApp/GlassHelper.vb new file mode 100644 index 00000000..69ebc137 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/GlassHelper.vb @@ -0,0 +1,71 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Runtime.InteropServices +Imports System.Windows +Imports System.Windows.Interop +Imports System.Windows.Media + +Namespace Microsoft.WindowsAPICodePack.Samples.SearchApp + Public Class GlassHelper + Public Structure Margins + Public Sub New(ByVal t As Thickness) + Left = CInt(Fix(t.Left)) + Right = CInt(Fix(t.Right)) + Top = CInt(Fix(t.Top)) + Bottom = CInt(Fix(t.Bottom)) + End Sub + + Public Left As Integer + Public Right As Integer + Public Top As Integer + Public Bottom As Integer + End Structure + + _ + Shared Sub DwmExtendFrameIntoClientArea(ByVal hwnd As IntPtr, ByRef pMargins As Margins) + End Sub + + _ + Shared Function DwmIsCompositionEnabled() As Boolean + End Function + + Public Shared ReadOnly Property IsGlassEnabled() As Boolean + Get + Return DwmIsCompositionEnabled() + End Get + End Property + + Public Shared Function ExtendGlassFrame(ByVal window As Window, ByVal margin As Thickness) As Boolean + If Not DwmIsCompositionEnabled() Then + Return False + End If + + Dim hwnd As IntPtr = New WindowInteropHelper(window).Handle + If hwnd = IntPtr.Zero Then + Throw New InvalidOperationException("The Window must be shown before extending glass.") + End If + + ' Set the background to transparent from both the WPF and Win32 perspectives + Dim background As New SolidColorBrush(Colors.Red) + background.Opacity = 0.5 + window.Background = Brushes.Transparent + HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.Transparent + + Dim margins As New Margins(margin) + DwmExtendFrameIntoClientArea(hwnd, margins) + Return True + End Function + + Public Shared Sub DisableGlassFrame(ByVal window As Window1) + Dim hwnd As IntPtr = New WindowInteropHelper(window).Handle + If hwnd = IntPtr.Zero Then + Throw New InvalidOperationException("The Window must be shown before extending glass.") + End If + + HwndSource.FromHwnd(hwnd).CompositionTarget.BackgroundColor = Colors.White + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/Back_Button_256.png b/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/Back_Button_256.png new file mode 100644 index 00000000..645ed5d4 Binary files /dev/null and b/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/Back_Button_256.png differ diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/Find_Search.ico b/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/Find_Search.ico new file mode 100644 index 00000000..7a1ed66d Binary files /dev/null and b/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/Find_Search.ico differ diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/Find_Search_64.png b/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/Find_Search_64.png new file mode 100644 index 00000000..8bfa74df Binary files /dev/null and b/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/Find_Search_64.png differ diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/Forward_Button_256.png b/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/Forward_Button_256.png new file mode 100644 index 00000000..df0044fc Binary files /dev/null and b/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/Forward_Button_256.png differ diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/Help-32.png b/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/Help-32.png new file mode 100644 index 00000000..74c427fe Binary files /dev/null and b/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/Help-32.png differ diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/clear.png b/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/clear.png new file mode 100644 index 00000000..30a4c316 Binary files /dev/null and b/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/clear.png differ diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/search.png b/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/search.png new file mode 100644 index 00000000..386e168e Binary files /dev/null and b/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/search.png differ diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/search_adv.png b/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/search_adv.png new file mode 100644 index 00000000..611108c5 Binary files /dev/null and b/source/Samples/Shell/SearchApplication/VB/SearchApp/Images/search_adv.png differ diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/My Project/AssemblyInfo.vb b/source/Samples/Shell/SearchApplication/VB/SearchApp/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..cedf4fb5 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/My Project/AssemblyInfo.vb @@ -0,0 +1,55 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Resources +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + + '(used if a resource is not found in the page, + ' or application resource dictionaries) + '(used if a resource is not found in the page, + ' app, or any theme specific resource dictionaries) + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/My Project/Resources.Designer.vb b/source/Samples/Shell/SearchApplication/VB/SearchApp/My Project/Resources.Designer.vb new file mode 100644 index 00000000..e96b8aff --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/My Project/Resources.resx b/source/Samples/Shell/SearchApplication/VB/SearchApp/My Project/Resources.resx new file mode 100644 index 00000000..7080a7d1 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/My Project/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/My Project/Settings.Designer.vb b/source/Samples/Shell/SearchApplication/VB/SearchApp/My Project/Settings.Designer.vb new file mode 100644 index 00000000..34f1fe80 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/My Project/Settings.settings b/source/Samples/Shell/SearchApplication/VB/SearchApp/My Project/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/SearchApp.sln b/source/Samples/Shell/SearchApplication/VB/SearchApp/SearchApp.sln new file mode 100644 index 00000000..2132aba5 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/SearchApp.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "SearchApp", "SearchApp.vbproj", "{B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B749F100-EACD-46F1-B7D1-CB0CA9E30AB6}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/SearchApp.vbproj b/source/Samples/Shell/SearchApplication/VB/SearchApp/SearchApp.vbproj new file mode 100644 index 00000000..2ad9be04 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/SearchApp.vbproj @@ -0,0 +1,237 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {D7FA0CF2-AD5E-43AC-86F8-B8D3F560A475} + WinExe + + + SearchApp + v3.5 + On + Binary + Off + On + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + Images\Find_Search.ico + + + + + app.manifest + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + true + true + prompt + AllRules.ruleset + + + + pdbonly + true + bin\Release\ + false + true + prompt + AllRules.ruleset + + + + + + 3.5 + + + + + 3.5 + + + 3.5 + + + + + 3.0 + + + 3.0 + + + 3.0 + + + 3.0 + + + 3.0 + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + Application.xaml + Code + + + Window1.xaml + Code + + + + + AdvancedSearch.xaml + Code + + + + + + Code + + + True + True + Resources.resx + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + Designer + My.Resources + + + + + + + + + + + + + + + + + + + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/Themes/Generic.xaml b/source/Samples/Shell/SearchApplication/VB/SearchApp/Themes/Generic.xaml new file mode 100644 index 00000000..4a284ff1 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/Themes/Generic.xaml @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/Themes/GlassButton.xaml b/source/Samples/Shell/SearchApplication/VB/SearchApp/Themes/GlassButton.xaml new file mode 100644 index 00000000..e45f3097 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/Themes/GlassButton.xaml @@ -0,0 +1,172 @@ + + + + + diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/Window1.xaml b/source/Samples/Shell/SearchApplication/VB/SearchApp/Window1.xaml new file mode 100644 index 00000000..b5edb056 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/Window1.xaml @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/Window1.xaml.vb b/source/Samples/Shell/SearchApplication/VB/SearchApp/Window1.xaml.vb new file mode 100644 index 00000000..342a45ab --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/Window1.xaml.vb @@ -0,0 +1,550 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Windows +Imports System.Windows.Controls +Imports System.Windows.Controls.Primitives +Imports System.Windows.Threading +Imports Microsoft.WindowsAPICodePack.Shell +Imports System.Windows.Input +Imports Microsoft.WindowsAPICodePack.Shell.PropertySystem +Imports System.Windows.Media +Imports System.Windows.Interop +Imports System.Globalization +Imports Microsoft.WindowsAPICodePack.Dialogs +Imports System.Diagnostics +Imports System.Threading +Imports System.Windows.Media.Imaging +Imports System.Linq + +Namespace Microsoft.WindowsAPICodePack.Samples.SearchApp + ''' + ''' Interaction logic for Window1.xaml + ''' + Partial Public Class Window1 + Inherits Window + Private top_Renamed As Integer = 10, left_Renamed As Integer = 10 ' for glass + Private neverRendered As Boolean = True ' for glass + Private Const WM_DWMCOMPOSITIONCHANGED As Integer = &H031E ' for glass (when DWM / glass setting is changed) + Friend searchFolder As ShellSearchFolder = Nothing + Private advWindow As AdvancedSearch ' keep only one instance of the advanced window (unless user closes it) + + Private helpTaskDialog As TaskDialog + + ' Background thread for our search + Private backgroundSearchThread As Thread = Nothing + + Private selectedScope As ShellContainer = CType(KnownFolders.UsersFiles, ShellContainer) + + Public Sub New() + InitializeComponent() + AddHandler DragThumb.DragDelta, AddressOf OnMove + + AddHandler SourceInitialized, AddressOf Window1_SourceInitialized + AddHandler Loaded, AddressOf Window1_Loaded + + ' Because the search can take some time, using a background thread. + ' This timer will check if that thread is still alive and accordingly update + ' the cursor + Dim timer As New DispatcherTimer() + timer.Interval = New TimeSpan(0, 0, 1) + timer.IsEnabled = True + AddHandler timer.Tick, AddressOf timer_Tick + + ' Update the Scopes combobox with all the known folders + Dim sortedKnownFolders = From folder In KnownFolders.All _ + Where (folder.CanonicalName IsNot Nothing AndAlso folder.CanonicalName.Length > 0) _ + Order By folder.CanonicalName _ + Select folder + + ' Add the Browse... item so users can select any arbitary location + Dim browsePanel As New StackPanel() + browsePanel.Margin = New Thickness(5, 2, 5, 2) + browsePanel.Orientation = Orientation.Horizontal + + Dim browseImg As New Image() + browseImg.Source = (New StockIcons()).FolderOpen.BitmapSource + browseImg.Height = 32 + + Dim browseTextBlock As New TextBlock() + browseTextBlock.Background = Brushes.Transparent + browseTextBlock.FontSize = 10 + browseTextBlock.Margin = New Thickness(4) + browseTextBlock.VerticalAlignment = VerticalAlignment.Center + browseTextBlock.Text = "Browse..." + + browsePanel.Children.Add(browseImg) + browsePanel.Children.Add(browseTextBlock) + + SearchScopesCombo.Items.Add(browsePanel) + + For Each obj As ShellContainer In sortedKnownFolders + Dim panel As New StackPanel() + panel.Margin = New Thickness(5, 2, 5, 2) + panel.Orientation = Orientation.Horizontal + + Dim img As New Image() + img.Source = obj.Thumbnail.SmallBitmapSource + img.Height = 32 + + Dim textBlock As New TextBlock() + textBlock.Background = Brushes.Transparent + textBlock.FontSize = 10 + textBlock.Margin = New Thickness(4) + textBlock.VerticalAlignment = VerticalAlignment.Center + textBlock.Text = obj.Name + + panel.Children.Add(img) + panel.Children.Add(textBlock) + + panel.Tag = obj + + SearchScopesCombo.Items.Add(panel) + + + ' Set our initial search scope. + ' If Shell Libraries are supported, search in all the libraries, + ' else, use user's profile (my documents, etc) + If ShellLibrary.IsPlatformSupported Then + If obj Is CType(KnownFolders.Libraries, ShellContainer) Then + SearchScopesCombo.SelectedItem = panel + End If + Else + If obj Is CType(KnownFolders.UsersFiles, ShellContainer) Then + SearchScopesCombo.SelectedItem = panel + End If + End If + Next obj + + SearchScopesCombo.ToolTip = "Change the scope of the search. Use SearchHomeFolder" & Constants.vbLf & "to search your entire search index." + + AddHandler SearchScopesCombo.SelectionChanged, AddressOf SearchScopesCombo_SelectionChanged + + ' Create our help task dialog + helpTaskDialog = New TaskDialog() + helpTaskDialog.OwnerWindowHandle = (New WindowInteropHelper(Me)).Handle + + helpTaskDialog.Icon = TaskDialogStandardIcon.Information + helpTaskDialog.Cancelable = True + + helpTaskDialog.Caption = "Search demo application" + helpTaskDialog.InstructionText = "Demo application to show the usage of Search APIs" + helpTaskDialog.Text = "This is a demo application that demonstrates the usage of Search related APIs in the Windows API Code Pack." & Constants.vbLf + Constants.vbLf + helpTaskDialog.Text &= "The search textbox accepts any search query, including advanced query syntax (AQS) and natural query syntax (NQS)." & Constants.vbLf + Constants.vbLf + helpTaskDialog.Text &= "Some examples:" & Constants.vbLf + helpTaskDialog.Text += Constants.vbTab & "AQS - kind:pictures and author:corbis" & Constants.vbLf + helpTaskDialog.Text += Constants.vbTab & "NQS - all pictures by corbis" & Constants.vbLf + helpTaskDialog.Text += Constants.vbTab & "AQS - kind:email and from:bill" & Constants.vbLf + helpTaskDialog.Text += Constants.vbTab & "NQS - emails by bill sent yesterday" & Constants.vbLf + Constants.vbLf + helpTaskDialog.Text &= "The advanced search dialog shows how to search against some common properties. " + helpTaskDialog.Text &= " Multiple conditions can be combined together for the search." + helpTaskDialog.Text += Constants.vbLf + Constants.vbLf & "The sample also demonstrates how to use the strongly typed property system and display some properties for selected files." + + helpTaskDialog.ExpansionMode = TaskDialogExpandedDetailsLocation.ExpandContent + helpTaskDialog.DetailsExpanded = True + helpTaskDialog.DetailsCollapsedLabel = "Show details" + helpTaskDialog.DetailsExpandedLabel = "Hide details" + helpTaskDialog.DetailsExpandedText = "For more information on the Advanced Query Syntax or Natural Query Syntax, visit the following sites:" & Constants.vbLf + Constants.vbLf + helpTaskDialog.DetailsExpandedText &= "Advanced Query Syntax" & Constants.vbLf + helpTaskDialog.DetailsExpandedText &= "Windows Search Advanced Query Syntax" & Constants.vbLf + + helpTaskDialog.HyperlinksEnabled = True + AddHandler helpTaskDialog.HyperlinkClick, AddressOf helpTaskDialog_HyperlinkClick + helpTaskDialog.FooterText = "Demo application as part of Windows API Code Pack for .NET Framework" + + End Sub + + Private Sub SearchScopesCombo_SelectionChanged(ByVal sender As Object, ByVal e As SelectionChangedEventArgs) + Dim previousSelection As StackPanel = Nothing + + If e.RemovedItems.Count > 0 Then + previousSelection = TryCast(e.RemovedItems(0), StackPanel) + End If + + + If SearchScopesCombo.SelectedIndex = 0 Then + ' Show a folder selection dialog + Dim cfd As New CommonOpenFileDialog() + cfd.AllowNonFileSystemItems = True + cfd.IsFolderPicker = True + + cfd.Title = "Select a folder as your search scope..." + + If cfd.ShowDialog() = CommonFileDialogResult.OK Then + Dim container As ShellContainer = TryCast(cfd.FileAsShellObject, ShellContainer) + + If container IsNot Nothing Then + ' #Region "Add it to the bottom of our combobox" + Dim panel As New StackPanel() + panel.Margin = New Thickness(5, 2, 5, 2) + panel.Orientation = Orientation.Horizontal + + Dim img As New Image() + img.Source = container.Thumbnail.SmallBitmapSource + img.Height = 32 + + Dim textBlock As New TextBlock() + textBlock.Background = Brushes.Transparent + textBlock.FontSize = 10 + textBlock.Margin = New Thickness(4) + textBlock.VerticalAlignment = VerticalAlignment.Center + textBlock.Text = container.Name + + panel.Children.Add(img) + panel.Children.Add(textBlock) + + SearchScopesCombo.Items.Add(panel) + ' #End Region + + ' Set our selected scope + selectedScope = container + SearchScopesCombo.SelectedItem = panel + Else + SearchScopesCombo.SelectedItem = previousSelection + End If + Else + SearchScopesCombo.SelectedItem = previousSelection + End If + ElseIf SearchScopesCombo.SelectedItem IsNot Nothing AndAlso TypeOf SearchScopesCombo.SelectedItem Is ShellContainer Then + selectedScope = TryCast((CType(SearchScopesCombo.SelectedItem, StackPanel)).Tag, ShellContainer) + End If + End Sub + + Private Sub timer_Tick(ByVal sender As Object, ByVal e As EventArgs) + ' Using a timer, check if our background search thread is still alive. + ' If not alive, update the cursor + If backgroundSearchThread IsNot Nothing AndAlso (Not backgroundSearchThread.IsAlive) Then + Me.Cursor = Cursors.Arrow + + ' Also enable the search textbox again + SearchBox.IsEnabled = True + buttonSearchAdv.IsEnabled = True + End If + End Sub + + Private Sub helpTaskDialog_HyperlinkClick(ByVal sender As Object, ByVal e As TaskDialogHyperlinkClickedEventArgs) + ' Launch the application associated with http links + Process.Start(e.LinkText) + End Sub + + Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) + Dim source As HwndSource = HwndSource.FromHwnd(New WindowInteropHelper(Me).Handle) + source.AddHook(New HwndSourceHook(AddressOf WndProc)) + + Dim tdr As TaskDialogResult = helpTaskDialog.Show() + End Sub + + Friend Sub Search(ByVal searchItemsList As List(Of SearchItem)) + ' Update the listview's itemsource + listView1.ItemsSource = searchItemsList + + If listView1.Items.Count > 0 Then + listView1.SelectedIndex = 0 + End If + End Sub + + #Region "For the Aero glass effect" + + Private Function WndProc(ByVal hwnd As IntPtr, ByVal msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr, ByRef handled As Boolean) As IntPtr + ' handle the message for DWM when the aero glass is turned on or off + If msg = WM_DWMCOMPOSITIONCHANGED Then + If GlassHelper.IsGlassEnabled Then + ' Extend glass + Dim bounds As Rect = VisualTreeHelper.GetDescendantBounds(listView1) + GlassHelper.ExtendGlassFrame(Me, New Thickness(bounds.Left, bounds.Top, bounds.Right, bounds.Bottom)) + Else + ' turn off glass... + GlassHelper.DisableGlassFrame(Me) + End If + + handled = True + End If + + Return IntPtr.Zero + End Function + + Private Sub OnMove(ByVal s As Object, ByVal e As DragDeltaEventArgs) + left_Renamed += CInt(Fix(e.HorizontalChange)) + top_Renamed += CInt(Fix(e.VerticalChange)) + Me.Left = left_Renamed + Me.Top = top_Renamed + End Sub + + Private Sub Window1_SourceInitialized(ByVal sender As Object, ByVal e As EventArgs) + Dim bounds As Rect = VisualTreeHelper.GetDescendantBounds(listView1) + GlassHelper.ExtendGlassFrame(Me, New Thickness(bounds.Left, bounds.Top, bounds.Right, bounds.Bottom)) + End Sub + + Protected Overrides Sub OnContentRendered(ByVal e As EventArgs) + If Me.neverRendered Then + ' The window takes the size of its content because SizeToContent + ' is set to WidthAndHeight in the markup. We then allow + ' it to be set by the user, and have the content take the size + ' of the window. + Me.SizeToContent = SizeToContent.Manual + + Dim root As FrameworkElement = TryCast(Me.Content, FrameworkElement) + If root IsNot Nothing Then + root.Width = Double.NaN + root.Height = Double.NaN + End If + + Me.neverRendered = False + End If + + MyBase.OnContentRendered(e) + End Sub + + + #End Region + + Private Sub SearchTextBox_Search(ByVal sender As Object, ByVal e As RoutedEventArgs) + If backgroundSearchThread IsNot Nothing Then + backgroundSearchThread.Abort() + End If + + ' Set the cursor to wait + Me.Cursor = Cursors.Wait + + ' Also disable the search textbox while our search is going on + SearchBox.IsEnabled = False + buttonSearchAdv.IsEnabled = False + + ' Search... on any letters typed + If Not String.IsNullOrEmpty(SearchBox.Text) Then + ' Create a background thread to do the search + backgroundSearchThread = New Thread(New ParameterizedThreadStart(AddressOf DoSimpleSearch)) + ' ApartmentState.STA is required for COM + backgroundSearchThread.SetApartmentState(ApartmentState.STA) + backgroundSearchThread.Start(SearchBox.Text) + Else + listView1.ItemsSource = Nothing ' nothing was typed, or user deleted the search query (clear the list). + End If + End Sub + + ' Helper method to do the search on a background thread + Friend Sub DoSimpleSearch(ByVal arg As Object) + Dim text As String = TryCast(arg, String) + + ' Specify a culture for our query. + Dim cultureInfo As New CultureInfo("en-US") + + Dim searchCondition As SearchCondition = SearchConditionFactory.ParseStructuredQuery(text, cultureInfo) + + ' Create a new search folder by setting our search condition and search scope + ' KnownFolders.SearchHome - This is the same scope used by Windows search + searchFolder = New ShellSearchFolder(searchCondition, selectedScope) + + Dim items As New List(Of SearchItem)() + + Try + ' Because we cannot pass ShellObject or IShellItem (native interface) + ' across multiple threads, creating a helper object and copying the data we need from the ShellObject + For Each so As ShellObject In searchFolder + ' For each of our ShellObject, + ' create a SearchItem object + ' We will bind these items to the ListView + Dim item As New SearchItem() + item.Name = so.Name + + ' We must freeze the ImageSource before passing across threads + Dim thumbnail As BitmapSource = so.Thumbnail.MediumBitmapSource + thumbnail.Freeze() + item.Thumbnail = thumbnail + + item.Authors = so.Properties.System.Author.Value + item.Title = so.Properties.System.Title.Value + item.Keywords = so.Properties.System.Keywords.Value + item.Copyright = so.Properties.System.Copyright.Value + item.TotalPages = If(so.Properties.System.Document.PageCount.Value.HasValue, so.Properties.System.Document.PageCount.Value.Value, 0) + item.Rating = If(so.Properties.System.SimpleRating.Value.HasValue, CInt(Fix(so.Properties.System.SimpleRating.Value.Value)), 0) + item.ParsingName = so.ParsingName + + items.Add(item) + Next so + + ' Invoke the search on the main thread + + Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, New Action(Function() AnonymousMethod1(items))) + Catch + searchFolder.Dispose() + searchFolder = Nothing + End Try + End Sub + + Private Function AnonymousMethod1(ByVal items As List(Of SearchItem)) As Object + UpdateSearchItems(items) + Return Nothing + End Function + + ' Updates the items on the listview on the main thread. + ' This method should not be called from a background thread + Friend Sub UpdateSearchItems(ByVal items As List(Of SearchItem)) + ' Update the listview's itemsource + listView1.ItemsSource = items + + If listView1.Items.Count > 0 Then + listView1.SelectedIndex = 0 + End If + End Sub + + Private Sub CommandBinding_Executed(ByVal sender As Object, ByVal e As ExecutedRoutedEventArgs) + SearchBox.Focus() + End Sub + + Private Sub buttonSearchAdv_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + If advWindow Is Nothing Then + advWindow = New AdvancedSearch() + advWindow.MainWindow = Me + AddHandler advWindow.Closed, AddressOf advWindow_Closed + End If + + If Not advWindow.IsVisible Then + advWindow.Show() + Else + advWindow.Visibility = Visibility.Visible + advWindow.Focus() + End If + End Sub + + Private Sub advWindow_Closed(ByVal sender As Object, ByVal e As EventArgs) + advWindow = Nothing + End Sub + + Private Sub Window_Closed(ByVal sender As Object, ByVal e As EventArgs) + If advWindow IsNot Nothing Then + advWindow.Close() + End If + End Sub + + Private Sub HelpButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + helpTaskDialog.Show() + End Sub + End Class + + ''' + ''' ImageView displays image files using themselves as their icons. + ''' In order to write our own visual tree of a view, we should override its + ''' DefaultStyleKey and ItemContainerDefaultKey. DefaultStyleKey specifies + ''' the style key of ListView; ItemContainerDefaultKey specifies the style + ''' key of ListViewItem. + ''' + Public Class ImageView + Inherits ViewBase + #Region "DefaultStyleKey" + + Protected Overrides ReadOnly Property DefaultStyleKey() As Object + Get + Return New ComponentResourceKey(Me.GetType(), "ImageView") + End Get + End Property + + #End Region + + #Region "ItemContainerDefaultStyleKey" + + Protected Overrides ReadOnly Property ItemContainerDefaultStyleKey() As Object + Get + Return New ComponentResourceKey(Me.GetType(), "ImageViewItem") + End Get + End Property + + #End Region + End Class + + Public NotInheritable Class CustomCommands + Public Shared SearchCommand As New RoutedCommand("SearchCommand", GetType(CustomCommands)) + End Class + + ''' + ''' Represents a single item in the search results. + ''' This item will store the file's thumbnail, display name, + ''' and some properties (that will be displayed in the properties pane) + ''' + Public Class SearchItem + Private privateName As String + Public Property Name() As String + Get + Return privateName + End Get + Set(ByVal value As String) + privateName = value + End Set + End Property + Private privateThumbnail As BitmapSource + Public Property Thumbnail() As BitmapSource + Get + Return privateThumbnail + End Get + Set(ByVal value As BitmapSource) + privateThumbnail = value + End Set + End Property + Private privateAuthors As String() + Public Property Authors() As String() + Get + Return privateAuthors + End Get + Set(ByVal value As String()) + privateAuthors = value + End Set + End Property + Private privateRating As Integer + Public Property Rating() As Integer + Get + Return privateRating + End Get + Set(ByVal value As Integer) + privateRating = value + End Set + End Property + Private privateCopyright As String + Public Property Copyright() As String + Get + Return privateCopyright + End Get + Set(ByVal value As String) + privateCopyright = value + End Set + End Property + Private privateTotalPages As Integer + Public Property TotalPages() As Integer + Get + Return privateTotalPages + End Get + Set(ByVal value As Integer) + privateTotalPages = value + End Set + End Property + Private privateKeywords As String() + Public Property Keywords() As String() + Get + Return privateKeywords + End Get + Set(ByVal value As String()) + privateKeywords = value + End Set + End Property + Private privateTitle As String + Public Property Title() As String + Get + Return privateTitle + End Get + Set(ByVal value As String) + privateTitle = value + End Set + End Property + Private privateParsingName As String + Public Property ParsingName() As String + Get + Return privateParsingName + End Get + Set(ByVal value As String) + privateParsingName = value + End Set + End Property + End Class +End Namespace diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/app.config b/source/Samples/Shell/SearchApplication/VB/SearchApp/app.config new file mode 100644 index 00000000..1f8eca1d --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/app.config @@ -0,0 +1,15 @@ + + + + +
+ + + + + + True + + + + \ No newline at end of file diff --git a/source/Samples/Shell/SearchApplication/VB/SearchApp/app.manifest b/source/Samples/Shell/SearchApplication/VB/SearchApp/app.manifest new file mode 100644 index 00000000..40fdb721 --- /dev/null +++ b/source/Samples/Shell/SearchApplication/VB/SearchApp/app.manifest @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/CS/App.xaml b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/App.xaml new file mode 100644 index 00000000..9d8a87f3 --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/App.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/CS/App.xaml.cs b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/App.xaml.cs new file mode 100644 index 00000000..c227e631 --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/App.xaml.cs @@ -0,0 +1,21 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Windows; +using System.Collections.ObjectModel; +using Microsoft.WindowsAPICodePack.Shell; +using System.Windows.Controls; + +namespace ShellHierarchyTreeDemo +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } + + +} diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Properties/AssemblyInfo.cs b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..a65e120f --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Properties/AssemblyInfo.cs @@ -0,0 +1,54 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ShellHierarchyTreeDemo")] +[assembly: AssemblyDescription("Shell Hierarchy Tree Demo")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Properties/Resources.Designer.cs b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Properties/Resources.Designer.cs new file mode 100644 index 00000000..70a5c65e --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ShellHierarchyTreeDemo.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ShellHierarchyTreeDemo.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Properties/Resources.resx b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Properties/Settings.Designer.cs b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Properties/Settings.Designer.cs new file mode 100644 index 00000000..6a269c28 --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace ShellHierarchyTreeDemo.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Properties/Settings.settings b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/CS/ShellHierarchyTreeDemo.csproj b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/ShellHierarchyTreeDemo.csproj new file mode 100644 index 00000000..dbb059a0 --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/ShellHierarchyTreeDemo.csproj @@ -0,0 +1,117 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F} + WinExe + Properties + ShellHierarchyTreeDemo + ShellHierarchyTreeDemo + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + + + + + + + 3.5 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + App.xaml + Code + + + Window1.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/CS/ShellHierarchyTreeDemo.sln b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/ShellHierarchyTreeDemo.sln new file mode 100644 index 00000000..91f9679c --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/ShellHierarchyTreeDemo.sln @@ -0,0 +1,43 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShellHierarchyTreeDemo", "ShellHierarchyTreeDemo.csproj", "{E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}" + ProjectSection(ProjectDependencies) = postProject + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} = {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Window1.xaml b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Window1.xaml new file mode 100644 index 00000000..ad41945a --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Window1.xaml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Window1.xaml.cs b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Window1.xaml.cs new file mode 100644 index 00000000..e02b9cac --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/CS/Window1.xaml.cs @@ -0,0 +1,261 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.ObjectModel; +using System.IO; +using System.Windows; +using System.Windows.Controls; +using Microsoft.WindowsAPICodePack.Shell; + +namespace ShellHierarchyTreeDemo +{ + /// + /// This application demonstrates how to navigate the Shell namespace + /// starting from the Desktop folder (Shell.Desktop). + /// + public partial class Window1 : Window + { + static public IKnownFolder DesktopKnownFolder = KnownFolders.Desktop; + + public Window1() + { + InitializeComponent(); + + // After everything is initialized, selected the header (Desktop) + treeViewHeader.IsSelected = true; + treeViewHeader.Focus(); + } + + void treeViewHeader_Selected(object sender, RoutedEventArgs e) + { + // Whenever the user selects this header, show the Desktop data + if (treeViewHeader.IsSelected) + ShowDesktopData(); + } + + void ShowDesktopData() + { + DesktopCollection.ShowObjectData(this, DesktopKnownFolder as ShellObject); + DesktopCollection.ShowThumbnail(this, DesktopKnownFolder as ShellObject); + DesktopCollection.ShowProperties(this, DesktopKnownFolder as ShellObject); + } + + private void MenuItemRefresh_Click(object sender, RoutedEventArgs e) + { + TreeViewItem selectedItem = ExplorerTreeView.SelectedItem as TreeViewItem; + + if (selectedItem.ItemsSource is DesktopCollection) + { + selectedItem.ItemsSource = new DesktopCollection(); + } + else if (selectedItem.ItemsSource is ShellContainer) + { + selectedItem.IsExpanded = false; + selectedItem.Items.Clear(); + selectedItem.Items.Add(":::"); + selectedItem.IsExpanded = true; + } + } + } + + public class DesktopCollection : Collection + { + public DesktopCollection() + { + foreach (ShellObject obj in Window1.DesktopKnownFolder) + { + TreeViewItem item = new TreeViewItem(); + item.Header = obj; + if (obj is ShellContainer) + { + item.Items.Add(":::"); + item.Expanded += ExplorerTreeView_Expanded; + } + + item.Selected += new RoutedEventHandler(item_Selected); + Add(item); + } + } + + internal void ExplorerTreeView_Expanded(object sender, RoutedEventArgs e) + { + TreeViewItem sourceItem = sender as TreeViewItem; + ShellContainer shellContainer = sourceItem.Header as ShellContainer; + + if (sourceItem.Items.Count > 0 && sourceItem.Items[0].Equals(":::")) + { + sourceItem.Items.Clear(); + try + { + foreach (ShellObject obj in shellContainer) + { + TreeViewItem item = new TreeViewItem(); + item.Header = obj; + if (obj is ShellContainer) + { + item.Items.Add(":::"); + item.Expanded += ExplorerTreeView_Expanded; + } + item.Selected += new RoutedEventHandler(item_Selected); + sourceItem.Items.Add(item); + } + } + catch (FileNotFoundException) + { + // Device might not be ready + MessageBox.Show("The device or directory is not ready.", "Shell Hierarchy Tree Demo"); + } + catch (ArgumentException) + { + // Device might not be ready + MessageBox.Show("The directory is currently not accessible.", "Shell Hierarchy Tree Demo"); + } + catch (UnauthorizedAccessException) + { + MessageBox.Show("You don't currently have permission to access this folder.", "Shell Hierarchy Tree Demo"); + } + + } + } + + internal void item_Selected(object sender, RoutedEventArgs e) + { + if (sender is TreeViewItem) + { + + Window1 wnd = (Window1)Application.Current.MainWindow; + + TreeViewItem sourceItem = wnd.ExplorerTreeView.SelectedItem as TreeViewItem; + if (sourceItem == null) + return; + + ShellObject shellObj = sourceItem.Header as ShellObject; + + if (shellObj == null) + return; + + ShowObjectData(wnd, shellObj); + ShowThumbnail(wnd, shellObj); + try + { + ShowProperties(wnd, shellObj); + } + catch (Exception ex) + { + MessageBox.Show(String.Format("Cannot show properties for \"{0}\": {1}", shellObj, ex.Message)); + wnd.PropertiesListBox.ItemsSource = null; + wnd.FolderPropsListBox.Visibility = Visibility.Hidden; + wnd.PropertiesGrid.RowDefinitions[1].Height = new GridLength(0); + } + + } + } + + internal static void ShowProperties(Window1 wnd, ShellObject shellObj) + { + wnd.PropertiesListBox.ItemsSource = shellObj.Properties.DefaultPropertyCollection; + + if (shellObj is IKnownFolder) + { + ShowKnownFolderProperties(wnd, shellObj as IKnownFolder); + } + else if (shellObj is ShellLibrary) + { + ShowLibraryProperties(wnd, shellObj as ShellLibrary); + } + else + { + wnd.FolderPropsListBox.Visibility = Visibility.Hidden; + wnd.PropertiesGrid.RowDefinitions[1].Height = new GridLength(0); + } + } + + internal static void ShowKnownFolderProperties(Window1 wnd, IKnownFolder kf) + { + wnd.FolderPropsListBox.Visibility = Visibility.Visible; + wnd.PropertiesGrid.RowDefinitions[1].Height = new GridLength(150); + + Collection properties = new Collection(); + + properties.Add(new KnownFolderProperty { Property = "Canonical Name", Value = kf.CanonicalName }); + properties.Add(new KnownFolderProperty { Property = "Category", Value = kf.Category }); + properties.Add(new KnownFolderProperty { Property = "Definition Options", Value = kf.DefinitionOptions }); + properties.Add(new KnownFolderProperty { Property = "Description", Value = kf.Description }); + properties.Add(new KnownFolderProperty { Property = "File Attributes", Value = kf.FileAttributes }); + properties.Add(new KnownFolderProperty { Property = "Folder Id", Value = kf.FolderId }); + properties.Add(new KnownFolderProperty { Property = "Folder Type", Value = kf.FolderType }); + properties.Add(new KnownFolderProperty { Property = "Folder Type Id", Value = kf.FolderTypeId }); + properties.Add(new KnownFolderProperty { Property = "Path", Value = kf.Path }); + properties.Add(new KnownFolderProperty { Property = "Relative Path", Value = kf.RelativePath }); + properties.Add(new KnownFolderProperty { Property = "Security", Value = kf.Security }); + properties.Add(new KnownFolderProperty { Property = "Tooltip", Value = kf.Tooltip }); + + wnd.FolderPropsListBox.ItemsSource = properties; + } + + internal static void ShowLibraryProperties(Window1 wnd, ShellLibrary lib) + { + wnd.FolderPropsListBox.Visibility = Visibility.Visible; + wnd.PropertiesGrid.RowDefinitions[1].Height = new GridLength(150); + + Collection properties = new Collection(); + + properties.Add(new KnownFolderProperty { Property = "Name", Value = lib.Name }); + object value = null; + + try + { + value = lib.LibraryType; + } + catch + { } + properties.Add(new KnownFolderProperty { Property = "Library Type", Value = value }); + + + try + { + value = lib.LibraryTypeId; + } + catch + { } + properties.Add(new KnownFolderProperty { Property = "Library Type Id", Value = value }); + + properties.Add(new KnownFolderProperty { Property = "Path", Value = lib.ParsingName }); + properties.Add(new KnownFolderProperty { Property = "Is Pinned To NavigationPane", Value = lib.IsPinnedToNavigationPane }); + + wnd.FolderPropsListBox.ItemsSource = properties; + } + + internal static void ShowObjectData(Window1 wnd, ShellObject shellObj) + { + wnd.PropertiesTextBox.Text = + String.Format( + "Name = {0}{1}Path/ParsingName = {2}{1}Type = {3}{4} ({5}File System)", + shellObj.Name, + Environment.NewLine, + shellObj.ParsingName, + shellObj.GetType().Name, + shellObj.IsLink ? " (Shortcut)" : "", + shellObj.IsFileSystemObject ? "" : "Non "); + } + + internal static void ShowThumbnail(Window1 wnd, ShellObject shellObj) + { + try + { + wnd.ThumbnailPreview.Source = shellObj.Thumbnail.LargeBitmapSource; + } + catch + { + wnd.ThumbnailPreview.Source = null; + } + } + + } + + struct KnownFolderProperty + { + public string Property { set; get; } + public object Value { set; get; } + } +} diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/VB/Application.xaml b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/Application.xaml new file mode 100644 index 00000000..9d8a87f3 --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/Application.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/VB/Application.xaml.vb b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/Application.xaml.vb new file mode 100644 index 00000000..9a22411d --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/Application.xaml.vb @@ -0,0 +1,22 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Configuration +Imports System.Windows +Imports System.Collections.ObjectModel +Imports Microsoft.WindowsAPICodePack.Shell +Imports System.Windows.Controls + +Namespace ShellHierarchyTreeDemo + ''' + ''' Interaction logic for App.xaml + ''' + Partial Public Class App + Inherits Application + End Class + + +End Namespace diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/VB/My Project/AssemblyInfo.vb b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..eaea74fd --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/My Project/AssemblyInfo.vb @@ -0,0 +1,53 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Resources +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + + '(used if a resource is not found in the page, + ' or application resource dictionaries) + '(used if a resource is not found in the page, + ' app, or any theme specific resource dictionaries) + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' + + diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/VB/My Project/Resources.Designer.vb b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/My Project/Resources.Designer.vb new file mode 100644 index 00000000..e96b8aff --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/VB/My Project/Resources.resx b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/VB/My Project/Settings.Designer.vb b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/My Project/Settings.Designer.vb new file mode 100644 index 00000000..f2ffe239 --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class Settings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()),Settings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As Settings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Settings + Get + Return Global.Settings.Default + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/VB/My Project/Settings.settings b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/My Project/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/VB/ShellHierarchyTreeDemo.sln b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/ShellHierarchyTreeDemo.sln new file mode 100644 index 00000000..0aa80f4e --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/ShellHierarchyTreeDemo.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ShellHierarchyTreeDemo", "ShellHierarchyTreeDemo.vbproj", "{E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E2220BCE-2FA7-4E0E-9793-803CE0EE5F3F}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/VB/ShellHierarchyTreeDemo.vbproj b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/ShellHierarchyTreeDemo.vbproj new file mode 100644 index 00000000..ca35f8cf --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/ShellHierarchyTreeDemo.vbproj @@ -0,0 +1,158 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {B4D3EF7E-FDA1-4AF5-A274-8317BB83F718} + WinExe + + + ShellHierarchyTreeDemo + v3.5 + On + Binary + Off + On + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + + + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + true + true + prompt + AllRules.ruleset + + + + pdbonly + true + bin\Release\ + false + true + prompt + AllRules.ruleset + + + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + Application.xaml + Code + + + Window1.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + Designer + My.Resources + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/VB/Window1.xaml b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/Window1.xaml new file mode 100644 index 00000000..81cd4fd6 --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/Window1.xaml @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/ShellHierarchyTreeDemo/VB/Window1.xaml.vb b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/Window1.xaml.vb new file mode 100644 index 00000000..b987184e --- /dev/null +++ b/source/Samples/Shell/ShellHierarchyTreeDemo/VB/Window1.xaml.vb @@ -0,0 +1,240 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows +Imports System.Windows.Controls +Imports System.Windows.Data +Imports System.Windows.Documents +Imports System.Windows.Media +Imports System.Windows.Shapes +Imports System.Collections.ObjectModel +Imports Microsoft.WindowsAPICodePack.Shell +Imports System.IO +Imports System.Windows.Input + +Namespace ShellHierarchyTreeDemo + ''' + ''' This application demonstrates how to navigate the Shell namespace + ''' starting from the Desktop folder (Shell.Desktop). + ''' + Partial Public Class Window1 + Inherits Window + Public Shared DesktopKnownFolder As IKnownFolder = KnownFolders.Desktop + + Public Sub New() + InitializeComponent() + + ' After everything is initialized, selected the header (Desktop) + treeViewHeader.IsSelected = True + treeViewHeader.Focus() + End Sub + + Private Sub treeViewHeader_Selected(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' Whenever the user selects this header, show the Desktop data + If treeViewHeader.IsSelected Then + ShowDesktopData() + End If + End Sub + + Private Sub ShowDesktopData() + DesktopCollection.ShowObjectData(Me, TryCast(DesktopKnownFolder, ShellObject)) + DesktopCollection.ShowThumbnail(Me, TryCast(DesktopKnownFolder, ShellObject)) + DesktopCollection.ShowProperties(Me, TryCast(DesktopKnownFolder, ShellObject)) + End Sub + + Private Sub MenuItemRefresh_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + Dim selectedItem As TreeViewItem = TryCast(ExplorerTreeView.SelectedItem, TreeViewItem) + + If TypeOf selectedItem.ItemsSource Is DesktopCollection Then + selectedItem.ItemsSource = New DesktopCollection() + Else + selectedItem.IsExpanded = False + selectedItem.Items.Clear() + selectedItem.Items.Add(":::") + selectedItem.IsExpanded = True + End If + End Sub + End Class + + Public Class DesktopCollection + Inherits Collection(Of Object) + Public Sub New() + For Each obj As ShellObject In KnownFolders.Desktop + Dim item As New TreeViewItem() + item.Header = obj + If TypeOf obj Is ShellContainer Then + item.Items.Add(":::") + AddHandler item.Expanded, AddressOf ExplorerTreeView_Expanded + End If + AddHandler item.Selected, AddressOf item_Selected + Add(item) + Next obj + End Sub + + Friend Sub ExplorerTreeView_Expanded(ByVal sender As Object, ByVal e As RoutedEventArgs) + Dim sourceItem As TreeViewItem = TryCast(sender, TreeViewItem) + Dim shellContainer As ShellContainer = TryCast(sourceItem.Header, ShellContainer) + + If sourceItem.Items.Count >= 1 AndAlso sourceItem.Items(0).Equals(":::") Then + sourceItem.Items.Clear() + Try + For Each obj As ShellObject In shellContainer + Dim item As New TreeViewItem() + item.Header = obj + If TypeOf obj Is ShellContainer Then + item.Items.Add(":::") + AddHandler item.Expanded, AddressOf ExplorerTreeView_Expanded + End If + AddHandler item.Selected, AddressOf item_Selected + sourceItem.Items.Add(item) + Next obj + Catch e1 As FileNotFoundException + ' Device might not be ready + MessageBox.Show("The device or directory is not ready.", "Shell Hierarchy Tree Demo") + Catch e2 As ArgumentException + ' Device might not be ready + MessageBox.Show("The directory is currently not accessible.", "Shell Hierarchy Tree Demo") + Catch e3 As UnauthorizedAccessException + MessageBox.Show("You don't currently have permission to access this folder.", "Shell Hierarchy Tree Demo") + End Try + + End If + End Sub + + Friend Sub item_Selected(ByVal sender As Object, ByVal e As RoutedEventArgs) + If TypeOf sender Is TreeViewItem Then + + Dim wnd As Window1 = CType(Application.Current.MainWindow, Window1) + + Dim sourceItem As TreeViewItem = TryCast(wnd.ExplorerTreeView.SelectedItem, TreeViewItem) + If sourceItem Is Nothing Then + Return + End If + + Dim shellObj As ShellObject = TryCast(sourceItem.Header, ShellObject) + + If shellObj Is Nothing Then + Return + End If + + ShowObjectData(wnd, shellObj) + ShowThumbnail(wnd, shellObj) + Try + ShowProperties(wnd, shellObj) + Catch ex As Exception + MessageBox.Show(String.Format("Cannot show properties for ""{0}"": {1}", shellObj, ex.Message)) + wnd.PropertiesListBox.ItemsSource = Nothing + + wnd.FolderPropsListBox.Visibility = Visibility.Hidden + wnd.PropertiesGrid.RowDefinitions(1).Height = New GridLength(0) + End Try + + + End If + End Sub + + Friend Shared Sub ShowProperties(ByVal wnd As Window1, ByVal shellObj As ShellObject) + wnd.PropertiesListBox.ItemsSource = shellObj.Properties.DefaultPropertyCollection + + If TypeOf shellObj Is IKnownFolder Then + ShowKnownFolderProperties(wnd, TryCast(shellObj, IKnownFolder)) + ElseIf TypeOf shellObj Is ShellLibrary Then + ShowLibraryProperties(wnd, TryCast(shellObj, ShellLibrary)) + Else + wnd.FolderPropsListBox.Visibility = Visibility.Hidden + wnd.PropertiesGrid.RowDefinitions(1).Height = New GridLength(0) + End If + End Sub + + Friend Shared Sub ShowKnownFolderProperties(ByVal wnd As Window1, ByVal kf As IKnownFolder) + wnd.FolderPropsListBox.Visibility = Visibility.Visible + wnd.PropertiesGrid.RowDefinitions(1).Height = New GridLength(150) + + Dim properties As New Collection(Of KnownFolderProperty)() + + properties.Add(New KnownFolderProperty("Canonical Name", kf.CanonicalName)) + properties.Add(New KnownFolderProperty("Category", kf.Category.ToString())) + properties.Add(New KnownFolderProperty("Definition Options", kf.DefinitionOptions.ToString())) + properties.Add(New KnownFolderProperty("Description", kf.Description)) + properties.Add(New KnownFolderProperty("File Attributes", kf.FileAttributes.ToString())) + properties.Add(New KnownFolderProperty("Folder Id", kf.FolderId.ToString())) + properties.Add(New KnownFolderProperty("Folder Type", kf.FolderType)) + properties.Add(New KnownFolderProperty("Folder Type Id", kf.FolderTypeId.ToString())) + properties.Add(New KnownFolderProperty("Path", kf.Path)) + properties.Add(New KnownFolderProperty("Relative Path", kf.RelativePath)) + properties.Add(New KnownFolderProperty("Security", kf.Security)) + properties.Add(New KnownFolderProperty("Tooltip", kf.Tooltip)) + + wnd.FolderPropsListBox.ItemsSource = properties + End Sub + + Friend Shared Sub ShowLibraryProperties(ByVal wnd As Window1, ByVal [lib] As ShellLibrary) + wnd.FolderPropsListBox.Visibility = Visibility.Visible + wnd.PropertiesGrid.RowDefinitions(1).Height = New GridLength(150) + + Dim properties As New Collection(Of KnownFolderProperty)() + + properties.Add(New KnownFolderProperty("Name", [lib].Name)) + Dim value As Object = Nothing + + Try + value = [lib].LibraryType + Catch + End Try + properties.Add(New KnownFolderProperty("Library Type", value.ToString())) + + Try + value = [lib].LibraryTypeId + Catch + End Try + properties.Add(New KnownFolderProperty("Library Type Id", value.ToString())) + + properties.Add(New KnownFolderProperty("Path", [lib].ParsingName)) + properties.Add(New KnownFolderProperty("Is Pinned To NavigationPane", [lib].IsPinnedToNavigationPane.ToString())) + + wnd.FolderPropsListBox.ItemsSource = properties + End Sub + + Friend Shared Sub ShowObjectData(ByVal wnd As Window1, ByVal shellObj As ShellObject) + wnd.PropertiesTextBox.Text = String.Format("Name = {0}{1}Path/ParsingName = {2}{1}Type = {3}{4} ({5}File System)", shellObj.Name, Environment.NewLine, shellObj.ParsingName, shellObj.GetType().Name,If(shellObj.IsLink, " (Shortcut)", ""),If(shellObj.IsFileSystemObject, "", "Non ")) + End Sub + + Friend Shared Sub ShowThumbnail(ByVal wnd As Window1, ByVal shellObj As ShellObject) + Try + wnd.ThumbnailPreview.Source = shellObj.Thumbnail.LargeBitmapSource + Catch + wnd.ThumbnailPreview.Source = Nothing + End Try + End Sub + + End Class + + Friend Structure KnownFolderProperty + + Public Sub New(ByVal prop As String, ByVal val As String) + PropertyName = prop + Value = val + End Sub + + Private privateProperty As String + Public Property PropertyName() As String + Get + Return privateProperty + End Get + Set(ByVal value As String) + privateProperty = value + End Set + End Property + Private privateValue As Object + Public Property Value() As Object + Get + Return privateValue + End Get + Set(ByVal value As Object) + privateValue = value + End Set + End Property + End Structure +End Namespace diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo.sln b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo.sln new file mode 100644 index 00000000..4ac12d1f --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShellThumbnailBrowserDemo", "ThumbnailBrowserDemo\ShellThumbnailBrowserDemo.csproj", "{86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/Program.cs b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/Program.cs new file mode 100644 index 00000000..34d5378c --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/Program.cs @@ -0,0 +1,21 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; + +namespace Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new ThumbnailBrowser()); + } + } +} diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/Properties/AssemblyInfo.cs b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..025bd17e --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ThumbnailBrowserDemo")] +[assembly: AssemblyDescription("Thumbnail Browser Demo")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("21778c24-109d-46eb-b862-a2f9e39e6b9d")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/Properties/Resources.Designer.cs b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/Properties/Resources.Designer.cs new file mode 100644 index 00000000..0c528235 --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/Properties/Resources.Designer.cs @@ -0,0 +1,98 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.Drawing.Bitmap extralarge { + get { + object obj = ResourceManager.GetObject("extralarge", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap large { + get { + object obj = ResourceManager.GetObject("large", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap medium { + get { + object obj = ResourceManager.GetObject("medium", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap small { + get { + object obj = ResourceManager.GetObject("small", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap ToolBarGradient { + get { + object obj = ResourceManager.GetObject("ToolBarGradient", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/Properties/Resources.resx b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/Properties/Resources.resx new file mode 100644 index 00000000..76a277fe --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/Properties/Resources.resx @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8 + AAACRElEQVQ4T6WTW0iTYRyHXygLsaBujOhAKBKUFkZGEjms/FBzeWqmWTMNddMgDxiREdphYhCCQSIm + pRSiZqaZdNIShFCKGN5UGEFpROLa1Dkmm0/fO+O76E69eOC7+J7n5v39BSCWg5ifn2cpCCHWqfgJr9dL + ZOMYUU0/0DV9/48xdM3jRD38g65zlv29HkJbXUhHlcN9EY/Hw+EWD/FdkPR4ipS2X6S0j3O8bRxD528M + L72k9tgx3B9BX/+O5IZhpKPK0SqBYm5uDkt1KXmWVnJbRjE+d5LVNUH2Uzs5fR7yqu6SnhDDmaMKRkWh + OO4I0tECbrebG0+uMvFqL6+7zVT2f6Dk7QzFQ1Ba14MpTkd2ehJZRjO1+gLeZJiRjhZwuVwUdkzR1HiN + okcDFDRbudM/iOUTVF6soCzPSL65iPMXLMy+N/G1qgLpaAGn08m9Bx/JvvKMhPrPFJ7rIM3UgrHPTU5m + GgmHoth3IJ2BF3r1tXVYh08hHS0wPT1NdVkzEbF1JBYPEro9l6CAWPzLvrBZp5c/+pi5rs7lhKCyfA3S + 0QIOh4OG/Cp27imgtGaI6N2JKOt3EX55BKUXNqny1g1+WDf6QZwgXqxFOlrAbrczGryDLWHHMJW30iFC + qBH+BBXWkmFVn/a0mfwIwc2Tq2BAkBy7GuloAZvNhkut3hYH6VZy+CkCaRfbiEgMIfNSGKklMaQqwZwN + DeBb8kpuRa5AOlpgcnKSpaAF/m1azlIuazEsTNl3EAsfgYtk4ZiWc8rS/QvFMEMOBF9DCwAAAABJRU5E + rkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8 + AAABuElEQVQ4T8WTT0jTYRjHfxfvgTDw1i08KCXVoSDsINROsUOFEGUH2yLoNnBRQ2SyGqOpu9gfqsFg + 2lhBCyMiRERybOWcGZLQu5ZBydjmGmPN/T6+7xiD8bsoHjx8Lw+f5/Mc3u+rAdp+sq9ldbgu0HWdvUTT + tEMybU1BrVbjyL0UPZ40R92C0z7BCY/A8kTgjwkiKwJvPM2DuWUUK5ePKUlTUK1WcbxJ81KAKwbuRXDO + weR3WJHUf5noFthnf6JYuXxWxtQUVCoVkvk8/+RkS4eUhD/8hlAG5kvwbRv+yvnMqkCxBkG5XMb+4jnR + 9VVqUiL36peVTMh8bcwSmR8o1iAolUqcHLxI/8RN7r9/xefNAmW9Sl7f5o8UZGUqUrL+awPFGgTFYpEO + cyeHL3XRc7uPcyMDXHvm4HJgBFtoCls4SmBpkcRaEsUaBIVCgY7zVrqvuzhuHeXMkI/euw+54JnA4vUw + 8NTPrdfTOCNBFGsQ5HI52q8+ouvOW04Nv8PsnqV/bIEr45+48fgLo+E1gh83mIzEUaxBkM1m2UsMgkaz + VDnU++4mrUVStWxITKogu0hrlQ/0N+4AtbCfjuJSibQAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8 + AAACFElEQVQ4T6WRX0hTYRjG34tCCcaMJIgulLqKLtRIKErTQVAQEUMGBYnBIAoSIohsOAPpDxgxJi4w + W3+UiP4ogrMWsbCi2G5KMi/aYOestQ0swulZ+9N6el/B5RmrXXTg4fm+5/m+9+Pwo3w+j7+JiKrK9ZTL + 5XAvCjjeAWdeA+9/AZ5vPyE5D2gQf9y3GyNjg7g9B4zMAvYn2UJP6XQaz5UAlj++jyxLch7QKj67geDo + JniUcVw+CZh2+gs9aZoGaiQc7T8Nh28Ql3yTeDQTwFLOA8T9qhMd/vU4MGTEiwkVww/chZ6SySQqm2zY + dHwA287egKn3Fo7dHIXkMkDc4WvAqZeb0XTNiOlPbdy1F3qKRCIL8Xg8oyiKFg6HF8VjsVgmkUhkZQCv + fxT3vM9Go9E09y0sqmLVsfaUUD1nNSzx0n0ZTDXl+iWMV7cQ+rcSbESY+fARX5jCSowXHz6F/W0KPW8y + sF5w4qD5hB7jmJXg7SRcoQpM3bXg87NGHcb74y4MTc/DNRnAkX174XF36jGO8ssTlRV4ZV4Fr50wbCEd + xkNdXmzf34s663Ws5rM5V60eo7vrPO6c68DXvmq01a+DwWDQYWy3dMO2cRfMTg9Mph2YOrz2D0ZG911V + VS0UCiWDweC8OO9TjDclmHi9UKoX3MUYmzlYKcEmeAXjMubiM5IT/xYZWdUlJPmaf/ZMjP5HvwFZvlxd + l91a5QAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8 + AAABVElEQVQ4T72SPUvDYBSF7+Kgi1nUrf0FCuKgSwUruLt01N1FwYKCix8IQhEV3FQQJ3FwqBT9BYVu + CXQLhBCQShOQ2FaSIRzvjSVW86oFweHA4XByc9+HS1EUoVdEpJmmaXme9yxib3M2HARBqsf5AIVhiKJR + x2G1CvEcTrqu27q/LaB0A7BvczbebDZRGiTUV6eTnvyMOp0O6GgJWq2C2BPNNRqN1lZtBGd3e2D/ytms + 4zgojxFO85T0OB8l3/fRKxmg67pj2/YLq20YxpMMsCwr1YsHxGvw2vJhV+IzsjYr15V4yb72NFJAzCqy + jKrHA4diiCe6j5WNnQSOCqxkV8cT2L1EGuLM8gXyuakEjgqsZIvXhIPz9d8hqsCqsp8gZhXAVFnfEFVg + ZeA7xHoEPOIDzndg5RIrm4U0xIX9NWw/lD9BVIGNL3G+j0v8X4j8dPqL3gCN8zpouxGRbAAAAABJRU5E + rkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAAEkAAAAgCAIAAADR6sIZAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8 + AAACdElEQVRYR93RTU8TURgF4PcHyFYKpRAhkYWyEFbQHbDiQxIbQRLYyIJ+g4LMB5XGjnESEBsBGVrB + Ok6pxVZqlTrQNGm6VRMWuuHfuL7h3uTmzW2qJM/q7M45cJQ/varA/n0h3p8L+x8A66c18c5q6xw2zmoi + lWsbJHhRqrLo36sNYFd1nNOqToLYt4p4J5UYB+2kIlKpopHg6Zcyy1qx3ABfy2uCgPzZFu/Yljkox7ZI + BVshwdKnEstyrtQA+dKyIBDKFFnCH4sNkC2GcY6KYRLMWwUWr1VAShe8HHzpAsVhwScIPEzlWebe55HM + /Bzah/ycIDCznxXvIDvDYfYgS/EuOysITCUyLA+SmbqaTmYo3mamcfYz0yS4t2uxeHYtJMPyoO1ZHpyE + 5SHB+LbJcnfHrKuJHZPijTmBs2tOkGDkdUq8rdQIh9GtFMV2ahRnJzVKguvzEkuzV0LySc0cHD6Jwi85 + cAKSg3SFul1aBJrnJRaHV0KiHnIpbPFJFH6pRRBo8cosrT4ZyS+3cnD6ZYqA7MQJyk4SOH0KS5tfQQoo + bRxcAYUiqLhwQoqLBC6/ytIeUJGCajuHjqBKEVI7cMJqBwluhCIsneEI0kKkk0PXQkSkxUgXCW4uRlm6 + H0WRHke70Zai3YLArScay+0Vra56VjQKSevBkbUeEtxRdJZeVUda1Xs59K3qIkX0PhL0P4uzDMTideWO + xSm0uBvnedxNgqENg+mlMYSzaQxxGN40RHplDJNgzDDF2zPHOIzvmRQJc1wQuG/lWCatHFI6N8lhKp0T + 6TA3RYLEj3OW5M/z/8mv8yQJrvUPsjQNDDaAe7BJkL93Aa1Rr/C1RAAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/Properties/Settings.Designer.cs b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/Properties/Settings.Designer.cs new file mode 100644 index 00000000..b9ff786a --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/Properties/Settings.settings b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/ShellThumbnailBrowserDemo.csproj b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/ShellThumbnailBrowserDemo.csproj new file mode 100644 index 00000000..f1cccca3 --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/ShellThumbnailBrowserDemo.csproj @@ -0,0 +1,114 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D} + WinExe + Properties + Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo + ThumbnailBrowserDemo + v3.5 + 512 + + + + + + + + + + + 3.5 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + 3.5 + + + 3.5 + + + + + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + ThumbnailBrowser.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + Form + + + ThumbnailBrowser.cs + + + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/ThumbnailBrowser.Designer.cs b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/ThumbnailBrowser.Designer.cs new file mode 100644 index 00000000..8bde7275 --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/ThumbnailBrowser.Designer.cs @@ -0,0 +1,250 @@ +using Microsoft.WindowsAPICodePack.Controls.WindowsForms; +namespace Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo +{ + partial class ThumbnailBrowser + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ThumbnailBrowser)); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.explorerBrowser1 = new ExplorerBrowser(); + this.flowLayoutPanel = new System.Windows.Forms.FlowLayoutPanel(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.topNavPanel = new System.Windows.Forms.Panel(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.browseLocationButton = new System.Windows.Forms.Button(); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.toolStripSplitButton1 = new System.Windows.Forms.ToolStripSplitButton(); + this.smallToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.mediumToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.largeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.extraLargeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.panel3 = new System.Windows.Forms.Panel(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.flowLayoutPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.topNavPanel.SuspendLayout(); + this.toolStrip1.SuspendLayout(); + this.panel3.SuspendLayout(); + this.SuspendLayout(); + // + // splitContainer1 + // + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 26); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.explorerBrowser1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.AutoScroll = true; + this.splitContainer1.Panel2.Controls.Add(this.flowLayoutPanel); + this.splitContainer1.Size = new System.Drawing.Size(881, 567); + this.splitContainer1.SplitterDistance = 292; + this.splitContainer1.TabIndex = 0; + // + // explorerBrowser1 + // + this.explorerBrowser1.Dock = System.Windows.Forms.DockStyle.Fill; + this.explorerBrowser1.Location = new System.Drawing.Point(0, 0); + this.explorerBrowser1.Name = "explorerBrowser1"; + this.explorerBrowser1.Size = new System.Drawing.Size(292, 567); + this.explorerBrowser1.TabIndex = 0; + this.explorerBrowser1.Text = "explorerBrowser1"; + // + // flowLayoutPanel + // + this.flowLayoutPanel.AutoScroll = true; + this.flowLayoutPanel.Controls.Add(this.pictureBox1); + this.flowLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.flowLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.flowLayoutPanel.Name = "flowLayoutPanel"; + this.flowLayoutPanel.Size = new System.Drawing.Size(585, 567); + this.flowLayoutPanel.TabIndex = 0; + // + // pictureBox1 + // + this.pictureBox1.Location = new System.Drawing.Point(3, 3); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(360, 279); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize; + this.pictureBox1.TabIndex = 1; + this.pictureBox1.TabStop = false; + // + // topNavPanel + // + this.topNavPanel.BackgroundImage = global::Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo.Properties.Resources.ToolBarGradient; + this.topNavPanel.Controls.Add(this.comboBox1); + this.topNavPanel.Controls.Add(this.browseLocationButton); + this.topNavPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.topNavPanel.Location = new System.Drawing.Point(0, 0); + this.topNavPanel.Name = "topNavPanel"; + this.topNavPanel.Size = new System.Drawing.Size(881, 26); + this.topNavPanel.TabIndex = 1; + // + // comboBox1 + // + this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Items.AddRange(new object[] { + "Thumbnail or Icon", + "Thumbnail only", + "Icon only"}); + this.comboBox1.Location = new System.Drawing.Point(73, 2); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(121, 21); + this.comboBox1.TabIndex = 1; + this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged); + // + // browseLocationButton + // + this.browseLocationButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.browseLocationButton.Location = new System.Drawing.Point(803, 3); + this.browseLocationButton.Name = "browseLocationButton"; + this.browseLocationButton.Size = new System.Drawing.Size(75, 23); + this.browseLocationButton.TabIndex = 0; + this.browseLocationButton.Text = "Browse..."; + this.browseLocationButton.UseVisualStyleBackColor = true; + this.browseLocationButton.Click += new System.EventHandler(this.browseLocationButton_Click); + // + // toolStrip1 + // + this.toolStrip1.Dock = System.Windows.Forms.DockStyle.Left; + this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripSplitButton1}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(70, 26); + this.toolStrip1.TabIndex = 2; + this.toolStrip1.Text = "toolStrip1"; + // + // toolStripSplitButton1 + // + this.toolStripSplitButton1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.smallToolStripMenuItem, + this.mediumToolStripMenuItem, + this.largeToolStripMenuItem, + this.extraLargeToolStripMenuItem}); + this.toolStripSplitButton1.Image = global::Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo.Properties.Resources.large; + this.toolStripSplitButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripSplitButton1.Name = "toolStripSplitButton1"; + this.toolStripSplitButton1.Size = new System.Drawing.Size(67, 20); + this.toolStripSplitButton1.Text = "Views"; + this.toolStripSplitButton1.ButtonClick += new System.EventHandler(this.toolStripSplitButton1_ButtonClick); + // + // smallToolStripMenuItem + // + this.smallToolStripMenuItem.Image = global::Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo.Properties.Resources.small; + this.smallToolStripMenuItem.Name = "smallToolStripMenuItem"; + this.smallToolStripMenuItem.Size = new System.Drawing.Size(131, 22); + this.smallToolStripMenuItem.Text = "Small"; + this.smallToolStripMenuItem.Click += new System.EventHandler(this.smallToolStripMenuItem_Click); + // + // mediumToolStripMenuItem + // + this.mediumToolStripMenuItem.Image = global::Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo.Properties.Resources.medium; + this.mediumToolStripMenuItem.Name = "mediumToolStripMenuItem"; + this.mediumToolStripMenuItem.Size = new System.Drawing.Size(131, 22); + this.mediumToolStripMenuItem.Text = "Medium"; + this.mediumToolStripMenuItem.Click += new System.EventHandler(this.mediumToolStripMenuItem_Click); + // + // largeToolStripMenuItem + // + this.largeToolStripMenuItem.Image = global::Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo.Properties.Resources.large; + this.largeToolStripMenuItem.Name = "largeToolStripMenuItem"; + this.largeToolStripMenuItem.Size = new System.Drawing.Size(131, 22); + this.largeToolStripMenuItem.Text = "Large"; + this.largeToolStripMenuItem.Click += new System.EventHandler(this.largeToolStripMenuItem_Click); + // + // extraLargeToolStripMenuItem + // + this.extraLargeToolStripMenuItem.Image = global::Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo.Properties.Resources.extralarge; + this.extraLargeToolStripMenuItem.Name = "extraLargeToolStripMenuItem"; + this.extraLargeToolStripMenuItem.Size = new System.Drawing.Size(131, 22); + this.extraLargeToolStripMenuItem.Text = "Extra Large"; + this.extraLargeToolStripMenuItem.Click += new System.EventHandler(this.extraLargeToolStripMenuItem_Click); + // + // panel3 + // + this.panel3.Controls.Add(this.toolStrip1); + this.panel3.Controls.Add(this.topNavPanel); + this.panel3.Dock = System.Windows.Forms.DockStyle.Top; + this.panel3.Location = new System.Drawing.Point(0, 0); + this.panel3.Name = "panel3"; + this.panel3.Size = new System.Drawing.Size(881, 26); + this.panel3.TabIndex = 2; + // + // ThumbnailBrowser + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(881, 593); + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.panel3); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "ThumbnailBrowser"; + this.Text = "Thumbnail/Icon Browser Demo"; + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.ResumeLayout(false); + this.flowLayoutPanel.ResumeLayout(false); + this.flowLayoutPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.topNavPanel.ResumeLayout(false); + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.panel3.ResumeLayout(false); + this.panel3.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.SplitContainer splitContainer1; + private Microsoft.WindowsAPICodePack.Controls.WindowsForms.ExplorerBrowser explorerBrowser1; + private System.Windows.Forms.Panel topNavPanel; + private System.Windows.Forms.Button browseLocationButton; + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripSplitButton toolStripSplitButton1; + private System.Windows.Forms.ToolStripMenuItem smallToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem mediumToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem largeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem extraLargeToolStripMenuItem; + private System.Windows.Forms.Panel panel3; + private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.ComboBox comboBox1; + } +} + diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/ThumbnailBrowser.cs b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/ThumbnailBrowser.cs new file mode 100644 index 00000000..580b8913 --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/ThumbnailBrowser.cs @@ -0,0 +1,370 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.Shell; +using Microsoft.WindowsAPICodePack.Dialogs; +using Microsoft.WindowsAPICodePack.Controls; + +namespace Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo +{ + public partial class ThumbnailBrowser : Form + { + /// + /// Different views the picture browser supports + /// + private enum Views + { + Small, + Medium, + Large, + ExtraLarge, + } + + /// + /// Preview mode (thumbnails or icons) + /// + private enum Mode + { + ThumbnailOrIcon, + ThumbnailOnly, + IconOnly, + } + + /// + /// Our current view (defaults to Views.Large) + /// + private Views currentView = Views.Large; + + /// + /// Our current mode (defaults to Thumbnail view) + /// + private Mode currentMode = Mode.ThumbnailOrIcon; + + /// + /// Our current ShellObject. + /// + private ShellObject currentItem = null; + + /// + /// If the user checks the "do not show.." checkbox, then don't display + /// the error dialog again. + /// + private bool showErrorTaskDialog = true; + + /// + /// This is the state what we should be doing if the user gets the error. + /// By default change the mode. + /// + private bool onErrorChangeMode = true; + + /// + /// Task dialog to be shown to the user when error occurs. + /// + private TaskDialog td = null; + + public ThumbnailBrowser() + { + InitializeComponent(); + + // Set some ExplorerBrowser properties + explorerBrowser1.ContentOptions.SingleSelection = true; + explorerBrowser1.ContentOptions.ViewMode = ExplorerBrowserViewMode.List; + explorerBrowser1.NavigationOptions.PaneVisibility.Navigation = PaneVisibilityState.Hide; + explorerBrowser1.NavigationOptions.PaneVisibility.CommandsView = PaneVisibilityState.Hide; + explorerBrowser1.NavigationOptions.PaneVisibility.CommandsOrganize = PaneVisibilityState.Hide; + explorerBrowser1.NavigationOptions.PaneVisibility.Commands = PaneVisibilityState.Hide; + + // set our initial state CurrentView == large + toolStripSplitButton1.Image = Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo.Properties.Resources.large; + smallToolStripMenuItem.Checked = false; + mediumToolStripMenuItem.Checked = false; + largeToolStripMenuItem.Checked = true; + extraLargeToolStripMenuItem.Checked = false; + + // + comboBox1.SelectedIndex = 0; + + // + explorerBrowser1.SelectionChanged += new EventHandler(explorerBrowser1_SelectionChanged); + + // Create our Task Dialog for displaying the error to the user + // when they are asking for Thumbnail Only and the selected item doesn't have a thumbnail. + td = new TaskDialog(); + td.OwnerWindowHandle = this.Handle; + td.InstructionText = "Error displaying thumbnail"; + td.Text = "The selected item does not have a thumbnail and you have selected the viewing mode to be thumbnail only. Please select one of the following options:"; + td.StartupLocation = TaskDialogStartupLocation.CenterOwner; + td.Icon = TaskDialogStandardIcon.Error; + td.Cancelable = true; + td.FooterCheckBoxText = "Do not show this dialog again"; + td.FooterCheckBoxChecked = false; + + TaskDialogCommandLink button1 = new TaskDialogCommandLink("changeModeButton", "Change mode to Thumbnail Or Icon", + "Change the viewing mode to Thumbnail or Icon. If the selected item does not have a thumbnail, it's associated icon will be displayed."); + button1.Click += new EventHandler(button1_Click); + + TaskDialogCommandLink button2 = new TaskDialogCommandLink("noChangeButton", "Keep the current mode", + "Keep the currently selected mode (Thumbnail Only). If the current mode is Thumbnail Only and the selected item does not have a thumbnail, nothing will be shown in the preview panel."); + button2.Click += new EventHandler(button2_Click); + + td.Controls.Add(button1); + td.Controls.Add(button2); + + } + + void button1_Click(object sender, EventArgs e) + { + onErrorChangeMode = true; + td.Close(TaskDialogResult.Ok); + } + + void button2_Click(object sender, EventArgs e) + { + onErrorChangeMode = false; + td.Close(TaskDialogResult.Ok); + } + + void explorerBrowser1_SelectionChanged(object sender, EventArgs e) + { + if (this.explorerBrowser1.SelectedItems != null && this.explorerBrowser1.SelectedItems.Count == 1) + { + // Set our new current item + currentItem = explorerBrowser1.SelectedItems[0]; + + // Update preview + UpdatePreview(); + } + } + + /// + /// Updates the thumbnail preview for currently selected item and current view + /// + private void UpdatePreview() + { + if (currentItem != null) + { + // Set the appropiate FormatOption + if (currentMode == Mode.ThumbnailOrIcon) + currentItem.Thumbnail.FormatOption = ShellThumbnailFormatOption.Default; + else if (currentMode == Mode.ThumbnailOnly) + currentItem.Thumbnail.FormatOption = ShellThumbnailFormatOption.ThumbnailOnly; + else + currentItem.Thumbnail.FormatOption = ShellThumbnailFormatOption.IconOnly; + + // Get the correct bitmap + try + { + if (currentView == Views.Small) + pictureBox1.Image = currentItem.Thumbnail.SmallBitmap; + else if (currentView == Views.Medium) + pictureBox1.Image = currentItem.Thumbnail.MediumBitmap; + else if (currentView == Views.Large) + pictureBox1.Image = currentItem.Thumbnail.LargeBitmap; + else if (currentView == Views.ExtraLarge) + pictureBox1.Image = currentItem.Thumbnail.ExtraLargeBitmap; + } + catch (NotSupportedException) + { + TaskDialog tdThumbnailHandlerError = new TaskDialog(); + tdThumbnailHandlerError.Caption = "Error getting the thumbnail"; + tdThumbnailHandlerError.InstructionText = "The selected file does not have a valid thumbnail or thumbnail handler."; + tdThumbnailHandlerError.Icon = TaskDialogStandardIcon.Error; + tdThumbnailHandlerError.StandardButtons = TaskDialogStandardButtons.Ok; + tdThumbnailHandlerError.Show(); + } + catch (InvalidOperationException) + { + if (currentMode == Mode.ThumbnailOnly) + { + // If we get an InvalidOperationException and our mode is Mode.ThumbnailOnly, + // then we have a ShellItem that doesn't have a thumbnail (icon only). + // Let the user know this and if they want, change the mode. + if (showErrorTaskDialog) + { + TaskDialogResult tdr = td.Show(); + + showErrorTaskDialog = !td.FooterCheckBoxChecked.Value; + } + + // If the user picked the first option, change the mode... + if (onErrorChangeMode) + { + // Change the mode to ThumbnailOrIcon + comboBox1.SelectedIndex = 0; + UpdatePreview(); + } + else // else, ignore and display nothing. + pictureBox1.Image = null; + } + else + pictureBox1.Image = null; + } + } + else + pictureBox1.Image = null; + } + + private void browseLocationButton_Click(object sender, EventArgs e) + { + // Create a new CommonOpenFileDialog to allow users to select a folder/library + CommonOpenFileDialog cfd = new CommonOpenFileDialog(); + + // Set options to allow libraries and non filesystem items to be selected + cfd.IsFolderPicker = true; + cfd.AllowNonFileSystemItems = true; + + // Show the dialog + CommonFileDialogResult result = cfd.ShowDialog(); + + // if the user didn't cancel + if (result == CommonFileDialogResult.Ok) + { + // Update the location on the ExplorerBrowser + ShellObject resultItem = cfd.FileAsShellObject; + explorerBrowser1.Navigate(resultItem); + } + } + + private void toolStripSplitButton1_ButtonClick(object sender, EventArgs e) + { + ToggleViews(); + } + + /// + /// Toggle the different views for the thumbnail image. + /// Includes: Small, Medium, Large (default), and Extra Large. + /// + private void ToggleViews() + { + // Toggle the views + // Update our current view, as well as the image shown + // on the "Views" menu. + + if (currentView == Views.Small) + { + currentView = Views.Medium; + toolStripSplitButton1.Image = Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo.Properties.Resources.medium; + smallToolStripMenuItem.Checked = false; + mediumToolStripMenuItem.Checked = true; + largeToolStripMenuItem.Checked = false; + extraLargeToolStripMenuItem.Checked = false; + } + else if (currentView == Views.Medium) + { + currentView = Views.Large; + toolStripSplitButton1.Image = Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo.Properties.Resources.large; + smallToolStripMenuItem.Checked = false; + mediumToolStripMenuItem.Checked = false; + largeToolStripMenuItem.Checked = true; + extraLargeToolStripMenuItem.Checked = false; + } + else if (currentView == Views.Large) + { + currentView = Views.ExtraLarge; + toolStripSplitButton1.Image = Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo.Properties.Resources.extralarge; + smallToolStripMenuItem.Checked = false; + mediumToolStripMenuItem.Checked = false; + largeToolStripMenuItem.Checked = false; + extraLargeToolStripMenuItem.Checked = true; + } + else if (currentView == Views.ExtraLarge) + { + currentView = Views.Small; + toolStripSplitButton1.Image = Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo.Properties.Resources.small; + smallToolStripMenuItem.Checked = true; + mediumToolStripMenuItem.Checked = false; + largeToolStripMenuItem.Checked = false; + extraLargeToolStripMenuItem.Checked = false; + } + + // Update the image + UpdatePreview(); + } + + private void smallToolStripMenuItem_Click(object sender, EventArgs e) + { + // Update current view + currentView = Views.Small; + + // Update the menu item states + smallToolStripMenuItem.Checked = true; + mediumToolStripMenuItem.Checked = false; + largeToolStripMenuItem.Checked = false; + extraLargeToolStripMenuItem.Checked = false; + + // Update the main splitbutton image + toolStripSplitButton1.Image = Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo.Properties.Resources.small; + + // Update the image + UpdatePreview(); + } + + private void mediumToolStripMenuItem_Click(object sender, EventArgs e) + { + // Update current view + currentView = Views.Medium; + + // Update the menu item states + smallToolStripMenuItem.Checked = false; + mediumToolStripMenuItem.Checked = true; + largeToolStripMenuItem.Checked = false; + extraLargeToolStripMenuItem.Checked = false; + + // Update the main splitbutton image + toolStripSplitButton1.Image = Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo.Properties.Resources.medium; + + // Update the image + UpdatePreview(); + } + + private void largeToolStripMenuItem_Click(object sender, EventArgs e) + { + // Update current view + currentView = Views.Large; + + // Update the menu item states + smallToolStripMenuItem.Checked = false; + mediumToolStripMenuItem.Checked = false; + largeToolStripMenuItem.Checked = true; + extraLargeToolStripMenuItem.Checked = false; + + // Update the main splitbutton image + toolStripSplitButton1.Image = Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo.Properties.Resources.large; + + // Update the image + UpdatePreview(); + } + + private void extraLargeToolStripMenuItem_Click(object sender, EventArgs e) + { + // Update current view + currentView = Views.ExtraLarge; + + // Update the menu item states + smallToolStripMenuItem.Checked = false; + mediumToolStripMenuItem.Checked = false; + largeToolStripMenuItem.Checked = false; + extraLargeToolStripMenuItem.Checked = true; + + // Update the main splitbutton image + toolStripSplitButton1.Image = Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo.Properties.Resources.extralarge; + + // Update the image + UpdatePreview(); + + } + + private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) + { + if (comboBox1.SelectedIndex == 0) + currentMode = Mode.ThumbnailOrIcon; + else if (comboBox1.SelectedIndex == 1) + currentMode = Mode.ThumbnailOnly; + else + currentMode = Mode.IconOnly; + + UpdatePreview(); + } + } +} diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/ThumbnailBrowser.ico b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/ThumbnailBrowser.ico new file mode 100644 index 00000000..fa3d6f9b Binary files /dev/null and b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/ThumbnailBrowser.ico differ diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/ThumbnailBrowser.resx b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/ThumbnailBrowser.resx new file mode 100644 index 00000000..1036e8b8 --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/CS/ThumbnailBrowserDemo/ThumbnailBrowser.resx @@ -0,0 +1,1443 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 104, 17 + + + + + AAABAAoAMDAQAAEABABoBgAApgAAACAgEAABAAQA6AIAAA4HAAAQEBAAAQAEACgBAAD2CQAAMDAAAAEA + CACoDgAAHgsAACAgAAABAAgAqAgAAMYZAAAQEAAAAQAIAGgFAABuIgAAAAAAAAEAIACP0QAA1icAADAw + AAABACAAqCUAAGX5AAAgIAAAAQAgAKgQAAANHwEAEBAAAAEAIABoBAAAtS8BACgAAAAwAAAAYAAAAAEA + BAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDA + wAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAHd3d3d3d3d3d3d3d3d3d3d3d3d3dwAAB4iIiIiIiIiIiIiIiIiIiIiI + iIiIiHAAB4//////////////////////////+HAAB4////iIiIiIiIiIiIiIiIiIiP+P+HAAB4///4d3 + d3d3d3d3d2d3Z3dneP//+HAAB4///4/4+Pj4+I+Ij4+I+Ij4+I+P+HAAB4///4//////////+Pj/j/+P + iP//+HAAB4///4/2ZmZmZn5n5+eGh+ePiP+P+HAAB4///4+GfsjnjsjOd36I6Ijo+Pj/+HAAB4///4/8 + 5+x+yOfozozoiOiPiP/4+HAAB4///4/2x8fsfn5+jojo6IiI+I//+HAAB4///4/2dux2fHx8hshofojv + iP+P+HAAB4///4/0ZHJnZnZ2d2dnZ3d/+P//+HAAB4///4/yckcnZ3Z3Z3jniO/4+I+P+HAAB4///4/2 + NjZ3d3iOiOiI////iP//+HAAB4///4+HZSd2eI/4//j///+P+Pj/+HAAB4///4/3d3eIj/j/+P+Pj/+P + iP/4+HAAB4///4/2d3iPiI+Pj4+PiPj4+Pj/+HAAB4///4/3joiIiIiP+PiI+I+P+P//+HAAB4///4/4 + +Pj/j4j4iPj4//j4+I+P+HAAB4///4/4+Ij4+IiO+O/4j4+PiP//+HAAB4///4/4iIj4iIiIiP+IiI6P + +P+P+HAAB4///4/++IiOjo6O+Ij/j4iPiP//+HAAB////4/46OjoiIiI7+/46O/v+Pj/+HAAB4///4/3 + 6Oh+jujoiPiP+IiP+P/4+HAAB////4/8jI7I7I7OiIj4iO/viPj//3AAB4///4/+fsjsjsh+zujo6PiP + +P//+HAAB////4//////////////////+P+P+HAAB4///4/////////////////4+I//+HAAB////4iI + iIiIiIiIiIiIiIiIiP//+IAAB4/////////////////4/4////+P+HAAB////////////////4/////4 + /4//+HAAB4iIiIiIiIiIiIiIiIiIiIiIiIiIiIAAB/iIj4j4j4iPiIiIiPiIiIiPiPiI+HAAB4+PiPiP + iPj4+P+Pj4+P+Pd492+HeHAAAHd3d3d3d3d3d3d3d3d3d3d3d3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////////AADAAAAAAA8AAIAAAAAABwAAgAAAAAAH + AACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAA + AAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAH + AACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAA + AAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAH + AACAAAAAAAcAAIAAAAAABwAAwAAAAAAPAAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAAKAAAACAAAABAAAAAAQAEAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACA + gACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAId3d3d3d3d3d3d3d3d3eAB///////////////////cAf//4iIiIiIiIiIiIiPj3AH// + h3d3d3d3d3d3d3j/9wB//4/4+Pj4+PiPiPj4+PcAf/+P////////////+I/3AH//j4ZmfmfnaOeOf4j/ + 9wB//4/2fsjOfn6IiI/4//cAf/+P/OXmjIyMjo6P+I/3AH//j/ZWR2Z2dnZ4f4j/9wB//4+CY2d3fojo + j//4+PcAf/+P93Z3iPj4//+P+P/3AH//j/Z3iP//j///+PiP9wB//4/3iPiIj/iIiI/4//cAf/+P+Pj/ + iIiI+P+P+I/3AH//j/iIiIjviI+O+Pj/9wB//4/+iOjojvj4iI/4j/cAf/+P9+jo6OiI+Ojv+P/3AH// + j/Z+yM5+joiPj/j49wB//4////////////+I//cAf/+Pj///+Pj/j/j/+P/3AH//iIiIiIiIiIiIiIj4 + 9wB4iIiIiIiIiIiIiIiIiIcAf4+Pj4+I+Pj4+Pj294f3AAd3d3d3d3d3d3d3d3d3eAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////////////AAAAAwAAAAMAAAADAAAAAwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA + AAMAAAADAAAAAwAAAAMAAAADgAAAA///////////KAAAABAAAAAgAAAAAQAEAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A + AAD/AP8A//8AAP///wB3d4d3eHd3h3/////////3f/iIiIeIiPd/+I+P//iP93/49oeHj4j3f/j2Zmjv + j/d/+IePj49/93/4+I6Ij4/3f/j+yOjviPd/+P////+P93iIeIeIeHiHf4+I+Ih4f3d4d4d4eHh3eAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAAoAAAAMAAAAGAAAAABAAgAAAAAAAAJAAAAAAAAAAAAAAAB + AAAAAQAAAAAAAEBFHQBCTiMAS1MkAE1fKwBQWygATmItAFFkLABLazQAUWkxAF9rMQBPczwAXHw+AGp4 + OQBcdkMAZXZIAG1ubgBwcG8AcHBwAKdfHgC3bCIAumwkALt0LAC/ezIAwnAeAMZ9JADIeygAgH9VAJF5 + aABXgUcAYoVHAGyIRABijk4AaY1JAHCCQQB0iUYAdo1JAGaSSwBtlE8AcJdPAGqOUQBmmVEAbZlRAGyY + XAB9mV8Ab6FZAHahXAB7o1gAzYMkAMiDKwDIhCoAyYEtAM6JKADQiSUA0Y0tAMGCNQDKhTAAyokyAM2J + MwDMjDcAxYk7AM2PPADQjjYAzZA8ANOSMQDWlzYA05M7ANaXOQDWmD0A15w+ANmbPQCDhVkAg6lcAI+U + YwCPmWYAi5ZoAIydbwCSk2QAk5loAJiebgCBp2QAiqFrAJutagCIsGgAlaR0AJ+hcQCRrnkAqa9xAKCm + eACqqX8Ap7FyAK+2ewC9un4AzpNBAMmURADLmEYAzZ1LANCVRQDZnkQA0JdIANCaSgDSnE4A2Z9IAOWV + QgDln0sA5Z9YANqiSgDUoVQA0KZUAN2nUADTq1YA3alTANSjWQDXqV4A1rFcAP+oTwDgr1UA4q1bAP+q + UwD/r10A4bBWAOO0XQD/sF8A16piANisZgDZrmkA2rtmANqybgDctXkA5ahoAOKzYgDjtmgA5bppAP+x + YgD/tmkA/7pvAOW8cwD/u3UA/795AN/EcwDnwX0A6sZ+AP/BfQCEhIQAiISBAImJiQCytooAsLiKALq6 + uwC8u7sAvLy7ALu7vAC8u7wAu7y8AL29vQDNvIcA5buDAMC/vwC8y5wAv8C/AMbAiQDaxIsAxsKUAOXF + gQDow4IA4cqCAOnHiQD/xIIA/8iHAP/VgQD/1YoA5c2UAOzLkgDkzJoA9sWTAPrGlAD/zZMA9MyaAOPR + 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 + 1/z8/Pz81fz8aYV6enqFhYWGh4aFh7bcxc3q6sW2qbay9Omd9On06fzXkAAAAACQ1/z8/Pz81fz8aHNz + c3Nzc3NzenNzd6fJ4dzj4s3Ntral7Oyd7PTp9PzXkAAAAACQ1/z8/Pz81fz8Z2dnZ2dnZ2dnZ2dnZ2do + dYitpYitx9nH9Omd9PTs9PzXkAAAAACQ1/z8/Pz81fz8/Pz8/Pz8/Pz8/Pz8/Pz89vz29vT09PT06fSd + 7PTs7PzXkAAAAACQ1/z8/Pz81fz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pb89PT09PT09Omd9Oz09PzXkAAAAACQ + 1/z8/Pz81dXP1dXP1c/Vz9XP1c/P1Z/Pz8/Pz8/Pn52dnZ2d9PTs7PzXkAAAAACQ1/z8/Pz8/Pz8/Pz8 + /Pz8/Pz8/Pz8/Pz8/Pz2/Pb89PT09PT07PTs8/zXkAAAAACQ1/z8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz2 + /Pb89vz09vT09PTs9Oz09PzXkAAAAACQ18/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8+fn5+fn5+fn5+dzp2dnZ3O + zs7Ozs7XkAAAAACQ19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXkAAAAACQ + 19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1xwc19ccHNfXHBzXkAAAAAAAkJCQkJCQkJCQkJCQ + kJCQkJCQkJCQkJCQkJCQj5CPj5CPkI+QkJCQkJCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAAwAAAAAAPAACAAAAAAAcAAIAAAAAABwAAgAAAAAAH + AACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAA + AAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAH + AACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAA + AAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAH + AACAAAAAAAcAAMAAAAAADwAA////////AAD///////8AAP///////wAA////////AAD///////8AACgA + AAAgAAAAQAAAAAEACAAAAAAAAAQAAAAAAAAAAAAAAAEAAAABAAAAAAAAXU8eAGpZIwBqWiUAQ2AsAERg + LABIZi8AT3Q5AG1gKQB5cTEAf3s4AH58OABZeEQAZXlHAG1tbgBvb3AAcHBwAL5sIQDIeiEAy3ooAMt+ + LACReWgAXoZMAGiJTQB8iUEAcY1VAH2eYwB+nGQAyYElAMuHKgDRiScA0o0sAM2DMADOjDIAzo82ANCI + NADVlTQA1JA7ANGSPADRlD0A2Zo7AIOHQACFj0UAgZBKAIufTwCEhVgAipxQAJ2tXQCJkmQAh6ZkAI2o + ZQCRpXYAnqRzAKOwcgCqvHkAvrV9ANOXRADUmkcA259DANiYRADUnEoA2p1IAOmXQgDvmkUA75xHAO+d + SADdpUoA3aZOANajUgDeqlIA76FQAO+jVgDgq1MA/61aAP+vXQDjsVoA47NeAP+yXwDarGMA3LJrAN6z + bQDAtHoA3rZyAOa5ZQD/tGQA/7ZpAOe8cADvu3QA77h5AOvGfgD/wHwAhISEAIiEgQCLh4UAi4mHAI2J + hgCJiYkAjoqIAI+MiQCRjowArb6IALi2iQC0uIoAu7ySALGurQC6uroAu7y7ALu8vAC9vb0AwL+/AMLF + kwDqx4cA7MmPAO3OjwD/xYUA/8qIAP/MjwDoyZcA486eAO3NmADu0pQA7tWUAP/fkwD+3pQA/9abAP/X + nwD/2JsAz9SmANTcrwDAwL8A7tehAOvbpwDu2qcA79+sAP/WoQD/26AA8NmqAOHbvgDu4awA/OCjAP/k + pQD846sA/+apAO3juADv470A/+CxAP/mvAD/7rsAwcLBAMTBwQDDw8QAxMPEAMTExADLyccAycnJAMzK + yADNzMoAzs7OANLR0QDe19EA3t7eAObe2ADt7cUA/+rDAPvsxAD/7cUA8u/LAP/vzwD/8cEA//XDAP/y + xwD/9MUA//PKAP/1yQD/984A//rJAP/6zQDu7NMA7u7VAO7u2ADu7t0A//fSAPj01AD/+dMA//rWAP/9 + 1QD9+9kA//7aAP/+3QDu7uUA7OvrAOvt7AD+/uMA/v7lAPL06gD//+gA///tAPHx8QD08/MA9PTzAPTz + 9ADz9PQA9fX1AP//8AD7+fYA/f31APf4+AD6+vkA/Pv7APv8+wD///oA/Pv8AP7+/gAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJVcXFxcXFxcXFxcXFxcXFxcYWJhXFxcXFxcXFxcaAAAXNDQ0NDQ + ztDOzs7Ozs7Ozs7Oxc7Ov86/zr/Ov8xcAABc0NDQv5xsbGxsbGxsbGlsaWlpaWlpaWlsoL/FzFwAAFzQ + 0NCdYg8PEA8PDw8PDw8PDw8PDg4PDluZxcXMXAAAXNDQ0JXOzs7Ozs7OzsXOxc7FzsXFzsXOxWzFxcxc + AABc0NDQlc7FzsXOxc7Fzs7FzsXOxczOzsXOacXFzFwAAFzQ0NCVzs4SHSEhIiYnODg5RE5PT09QzsVs + xcXMXAAAXNDQ0JjOxRIeHyQoOkJCRUVMVm9wd3XOzmnFxcxcAABc0NDQlc7OERMUICElOz1CSExTWXCI + ds7FbMXFzFwAAFzQ0NCYzsUBAgIICQoKKSoYKi4sLzZkzs5pxcXMXAAAXNDQ0JXOzgQGBgcXGRoxMjU3 + N26Jxb/OxWnOxcxcAABc0NDQmM7ODQwWGjRns7akpKSnzMzMtM7OacXFzFwAAFzQ0NCVzs4tMDN/orzA + w8PAw8DAwMCzzsVsxc7MXAAAXNDQ0JrOxWVmgLy5r6+8w8C5uby8vLLOzmzFxcxcAABc0NDQlc7Ooq+v + wMO5qqurq7m8vMPAssXOacXFzFwAAFzQ0NCazs6Pqra5pJKRhn2Tuaq5p42CzsVszMXMXAAAXNDQ0JXO + zlh8fHRacnJyfYykwKqMi4LOxWzFzsxcAABi0NDQmM7FR0lJSUlUVU1zq6vDq3p6eM7ObMXFzFwAAGLQ + 0NCazs4+Pz8/Pz9BP0ZXeIV4io+DzsVszM7MXAAAYtDQ0JXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzmzFxcxc + AABi0NDQmM7Ov87Oxc7FzsXOxc7FzsXOxcXFbMzIzFwAAGLQ0NCYlZWVlZWVlZWVlZWVbYFslWyBbJWV + zsjMXAAAYpycnJycnJycmZmZmZmZmZmcnJycnJycmZmamppcAABioZ+fn5+fn5+fn5+fn5+fn5+fn5+f + nxWfFZ8Vn1wAAABcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxclQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////// + ////////AAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAA///////////KAAAABAA + AAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAEAAAAAAABnWCMAe24yAJF5aABngVQAwYM5APeN + NwD/iTAAj4lLAJ6XWQDRllgA4ZZJAOGiWgDRrHYA0rB8AOSwcACXko8AuLWAAKm/kwCysrIAtbW2ANe4 + iADsu4wA7sOIAPTDhAD0ypEA48qhAPncqgD/4a0A/+q0AM3MygDg2dMA2enNAOrmxQDw8dgA8fHxAPP0 + 8wD19fUA+fn5AP7+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAQEBAQEBAQEBAQEBAQEBAQECcnJycl + JSUlJSUjIyMjEBAnJxMTExMTExMTExMjIxAQJycTJSMlIyUjIyMTIyMQECcnEyUFCg0NFRYlEyMjEBAn + JxMlAQIICREWJRMjIxAQJycTJwQSIBsiHSYTIyMQECcnEyUhGRgcHRomEyUjEBAnJxMnBwYLDBcPJxMj + JRAQJycTJycnJycnJycTJSMQEB4eExMTExMTExMTEx4eEBAfHx8fHx8fHx8DHwMfAxAQEBAQEBAQEBAQ + EBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA//8AAIlQ + TkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAIABJREFUeJzsvdm3NMlxH/bLrKpe7vKtsy/A + YLCR2EQcCTIokrIoCvbRORIPJfvVluw/QP+L7Rc/+I0POpJ8bB2bMk3zEIJJC7BkQCABEAABzIADzAxm + 5ptvu2t3V1WGHyIiI7K6uu+938xgALBz5n7dXZWVGZkZe0RmAbuyK7uyK7uyK7uyK7uyK7uyK7uyK7uy + K7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uy + K7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7vy0ylBPv/Z+wrFruzK + rryX5b/fdKMG8M+OTs7/OwAgEEA/NaB2ZVfek5JSyt+D/BtU1OUvP8OF1okwVgFAYPiJuAoBKfUIALqU + EEBAjKhiheDGee1gHgD8D9q6/6y10mzauP6pqEojXIGrUP6euwtWn1LZox+cPk6uDV9Ha+XLuW4YwCeT + EQzuDJrcoKId7Y8wGCYCCInKMWkzuc8MbxD4PPwEUCghJz8Khj0A3E+AdT4y11TwY7KLebbJ1SPpoRyT + G/LovWGdi8uw/80EpThIVNKdf4KAAllDAV3IlcPaU9yBTmHQ/kIAJZ6NKDRThQohRMTIjED7CyHgidvX + 8Uf/9v/F5z73mdyd4lk5Mv4dIrcfIvD662/guWefcaBynT4l3L9/hFhNcOPaHmINwQtu90c/ehUvvPA8 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAA + CwAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAA + DgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAA + DgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAKAAAAAwAAAAAAAAAAAAAA + AAAAAAUAAAAVAAAAJQAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAA + KgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAA + KgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAjAAAA + EQAAAAMAAAAAAAAAAHh0ckWIhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /4iEgf8AAAA0AAAAIwAAAAoAAAAAAAAAAIiEgf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9 + /9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9 + /9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9 + /9HGvf/Rxr3/0ca9/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3/+/v8//z7/P/7+/v/+/r7 + //r7+//6+vr/+vr6//n5+v/5+fn/+Pn4//j4+P/4+Pf/9/j3//f39//29vf/9vb2//b29v/19fb/9fX1 + //T19P/09PT/9PT0//Tz9P/z9PP/8/Pz//Py8v/y8vL/8vPz//Ly8v/y8fL/8fHy//Hx8f/x8fH/8PHw + //Hx8P/w8PD/8PDw//Dw8P/w8PD//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//Pz8 + //v8+//7+/v/+/v7//r6+v/t7ez/0NHR/8HBwf/BwcH/wcHB/8HBwf/BwcH/wcHA/8DAwP/AwMD/wL+/ + /7/Av/+/vr//vr6+/76+vf++vr7/vb69/729vf+9vb3/vb29/729vf+9vbz/vLy8/7y8vP+8u7z/u7y8 + /7u7u/+7urv/ycnJ/+Pj4//w8fD/8PDw//Dw8P/w8PD//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAA + AIiEgf/Rxr3//Pz9//z8+//8+/z//Pz8//v7+//R0dL/iYmJ/3Fxcf9xcXD/cHBw/3BwcP9wcHD/cHBv + /29vb/9vb2//b29v/29vb/9vb2//bm9v/25ubv9ubm7/bm5u/25ubv9ubm7/bm5u/25ubv9ubm7/bW5t + /21tbf9tbW3/bW1t/21tbf9tbW3/hISE/8jJyf/w8fD/8PDw//Dw8P/w8PD//f7+/9HGvf+IhIH/AAAA + KgAAAA4AAAAAAAAAAIiEgf/Rxr3//Pz9//z8/P/8+/z//Pz8//v7+//Dw8L/9fX1//T09P/z8/P/8/Pz + //Ly8v/x8fH/8PDw//Dw8P/v7+//7u7u/+7u7v/t7e3/7e3t/+zs7P/r6+v/6+vr/+rq6v/q6ur/6enp + /+np6f/o6Oj/6Ojo/+fn5//n5+f/5+fn/+bm5v/m5ub/5ubm/7u7u//x8PH/8PDw//Hw8P/w8PD//f7+ + /9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//P39//z9/f/8/Pz//Pv8//v7+//Dw8P/9fX1 + //X19f/09PT/8/Pz//Pz8//y8vL/8fHx//Hx8f/w8PD/7+/v/+/v7//u7u7/7e3t/+3t7f/s7Oz/6+vr + /+vr6//q6ur/6urq/+np6f/p6en/6Ojo/+jo6P/n5+f/5+fn/+fn5//m5ub/5ubm/7q7u//x8fD/8PHw + //Dx8f/w8PD//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//fz8//38/P/8/Pz//Pv7 + //v8+//Dw8P/9vb2//X19f/Igyv/yIQq/8iEK//LiTL/zIw3/8qJM//Njzz/zZA8/82QPP/Ok0H/0JVF + /9CWRv/Ql0j/0JZG/9CaSv/SnE7/1KFU/9SjWf/YrGb/16le/9muaf/asW3/16pi/9y1ef/n5+f/5ubm + /7u7u//x8fD/8PHx//Dw8P/x8fD//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//f39 + //38/f/8/fz//Pz8//z8/P/Ew8T/9/f3//b29v/GfST/0Ikl/9GMLP/Tjy//05Ew/9aXOf/XmTz/2Zs9 + /9ecPv/ZnkT/2qJI/9qgSP/aokv/2qJK/9qjSv/dp1D/4LFd/+O4av/nwX3/6ceI/+jEgv/owoH/5rxz + /9uzb//n5+f/5+fn/7y7u//x8fH/8fHx//Hx8f/w8PD//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAA + AIiEgf/Rxr3//f39//39/f/8/fz//fz9//z8/P/Dw8T/9/f3//f39//CcB7/zYEi/82FJv/OiSj/0Iwt + /9OTM//Wlzb/15k9/9qfRP/aoUj/3KRM/92nUP/dp1D/3apV/92pVP/gr1v/4rNi/+O2aP/lvHP/6MSD + /+nHi//rypL/8Ner/+TImv/o6Oj/5+fn/7u7vP/x8vH/8fHx//Dx8f/w8fD//f7+/9HGvf+IhIH/AAAA + KgAAAA4AAAAAAAAAAIiEgf/Rxr3//f3+//39/f/8/Pz//fz9//z8/P/Dw8T/+Pj4//f39/++bCL/yHso + /8mALP/Kgy7/yoUw/82JM//Qjjb/05M7/9aYPv/Zn0j/2qNO/9ykTf/dqVD/4K9V/+GwVv/jtV3/5rdf + /+e8aP/qxn7/7c6T/+3Lk//w1aP/9eG9/+jPrP/o6Oj/6Ojo/7u7vP/x8fH/8fHx//Dx8f/x8fH//f7+ + /9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//f3+//39/v/9/f3//f39//38/f/ExMT/+fn5 + //j4+P+nXx7/t2wi/7hsJP+5bib/u3Eq/7t1Lf+8dy//v3sy/8GBNP/Cgzb/xYg7/8WKO//JlET/y5hG + /82cSP/On07/0KZU/9OrVv/WsVz/2rtm/9/Ec//hyoL/49GR/9nEif/p6en/6Ojo/7y8u//y8fH/8fHx + //Hw8f/x8fH//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//v7+//39/f/9/f3//f39 + //39/f/ExMT/+fn5//n5+f9ARR3/S1Ij/0pRIv9LUiT/Tlcn/1BbKP9fazH/a3g4/2t5Ov9peTr/cIJB + /3SJRv93jUn/do5J/2yIRP9ffT7/aY1J/2+WT/9wl0//b5lQ/3ujWP+DqVz/iLBo/5Guef/p6en/6enp + /7u8vP/y8vL/8vHx//Hy8f/x8fD//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//f7+ + //7+/f/9/v3//f39//38/P/ExMT/+vr6//n5+f9CTiP/UmQs/1FkLP9NXyv/TmIt/1FpMf9efj7/YoVH + /2qOUf9skk//ZpJL/2uaUv9mmVH/b6FZ/3ahXP+Bp2T/r7Z7/6mvcf+brWr/p7Fy/828h//k17D/+/7u + /+Xl5f/q6ur/6enp/7y8vP/y8vL/8vLy//Hx8f/x8fH//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAA + AIiEgf/Rxr3//v7+//79/f/9/f3//f39//39/f/ExMT/+/v7//r6+v9ObTX/WHs+/0pqNf9KazT/T3U6 + /2KOTv99mV//j5lm/5OZaP+WoXH/xs+j/8bAif+9un7/28WO//PMmv/1zJr/+saU//bFk//20KX///bb + ////9f////3//////+Xl4v/q6ur/6urq/7y8vf/y8vL/8vLx//Lx8f/x8fH//f7+/9HGvf+IhIH/AAAA + KgAAAA4AAAAAAAAAAIiEgf/Rxr3//v7///7+/v/+/v7//f7+//39/f/ExMT/+/v7//v7+/9ldkj/XHZD + /09yP/9XgUf/bJhc/4qha/+Ynm7/n6Fx/7K2iv/r7Mv////2////3v//9tD///PM///xx///9c3//+vD + ///20////+z////z////7/////D////z/+Xl3P/r6+v/6urq/728vP/z8vL/8vLy//Hy8f/x8vL//f7+ + /9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//v/+//7+/v/9/f3//f7+//39/f/ExMT//Pz8 + //v7+/+Af1X/kpNk/42WaP+Onm//lKd3/7C4iv/Kz6H/5+e9////3////+n////m////6v///+7////p + ////4v///+b////q////6f///+b////m////5v///+r////s/+Xl2f/r6+v/6+vr/728vP/z8vL/8/Ly + //Ly8f/y8fL//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//v7+//7+///+/v7//v3+ + //3+/v/ExcT//Pz8//z8/P+DhVn/j5Rj/4qWaP+KnG//usye//77zf///9f////Z////1v///9X////V + ////2P///+f////m////3P///93////e////3v///9/////g////4f///+L////k/+Xl1v/s7Oz/6+vr + /729vP/y8vP/8vLz//Ly8v/y8vL//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//v// + //7//v/+/v7//v7+//39/f/FxcT//f39//z8/P+qqX//xsKU/6CmeP+/ypv////V////1f///tH///rK + ///6yP//+sv///rL///81f///+X////t////5v///97///3Q///90f///tX////Z////1////dX////Y + /+Xlzv/t7e3/7Ozs/729vf/z8/P/8vPy//Ly8v/y8vH//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAA + AIiEgf/Rxr3///////7//v///v7//v7+//7+/v/ExMX//f39//39/f/l4bf///rL///1xv//+s////3V + ////2v///+L///7a///5zP//88P///bL///60v//+tX///zW///60P///tr///vR///91f///+H////b + ////8f///+b////p/+Xl1P/t7e3/7e3t/729vf/z8/P/8/Ly//Ly8v/y8vL//f7+/9HGvf+IhIH/AAAA + KgAAAA4AAAAAAAAAAIiEgf/Rxr3//v////7+/v/+/v7//v7+//7+/v/FxcT//v7+//39/f/l4sT///jQ + ///xvf//88L///bN////4f///+f////s///72v//9cz///DI///qvf//5LH//+qy///rsv//7rj///7e + ///82///+tf///zZ////6v///+v///7h/+Xhv//u7u7/7e3t/729vf/08/P/8/Pz//Pz8v/y8vL//f7+ + /9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3///////7///////7//v7+//7+/v/ExcX//v7+ + //7+/v/l3bz///jS///wwf//8MH///rX///72f//9c3//+zD///mu///5rz//9ur///Wof//2KH//96k + ///uv///+dH///7f///0x///8ML///nT///zx///5q///+Km/+XLk//v7+//7u7u/729vf/08/P/8/Pz + //Lz8//y8vL//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//////////v///v7//v7+ + //7+/v/FxcX///////7+/v/lu4P//+Co///zy///8Mb///TN///mt///0JP//8yS///Sm///0pr//8+U + ///Nk///0JT//96j///qtf//8MH///jQ////7f///Nz///jR///82v//4qT//+Wq/+XPmv/w8PD/7+/v + /729vf/09PP/8/Pz//Pz8//z8/P//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP///// + ///////+/////v///////v/FxcX////////////lqGj//713///Gg///wn7//8F+//+7dP//unT//7t2 + //+/ef//woD//8F9///Ae///yIf//+Gn///gnP//4qP///PD////4v//+Mv//+y1///ipP//1Yr//+u1 + /+XYrP/w8PD/8PDw/729vf/09PP/8/T0//Pz9P/z8/P//f7+/+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAA + AIiEgf/g2dP///////////////////7//////v/FxcX////////////ln1j//7Bh//+vX///sF///7Bf + //+wYf//sWL//7Jj//+1aP//um///7Zs//+1Zv//t2n//9ih///1yP//6q////C6////5////+T//+uv + ///hmf//1YH//+Kc/+XPlv/x8fH/8PDw/729vv/09PT/8/T0//P08//z8/P//f7+/+DZ0/+IhIH/AAAA + KgAAAA4AAAAAAAAAAIiEgf/g2dP///////////////////7////+///Fxcb////////////ll0f//6hP + //+oT///qE///6hP//+oT///qE///6hQ//+sVv//r1v//6tU//+pUf//rFf//8aD///mtf//9cj///jI + ////3P///tb///K8///utf//5qH//+Sf/+XGg//y8vL/8fHx/729vv/09PT/9PT0//Pz9P/z8/P//f7+ + /+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP////////////////////////////Fxcb///// + ///////llUL/5ZVC/+WVQv/llUL/5ZVC/+WVQv/llEL/5ZRC/+WVQv/llUL/5ZVC/+WUQv/llEL/5ZdF + /+WfS//lrFz/5bx2/+XPnP/lxYD/5L1y/+TTnv/k4r3/5OTM/+Thvv/z8/P/8vLy/76+vf/19PT/9PT0 + //Tz9P/09PT//f7+/+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP///////////////////// + ///////Fxsb//////////////////////////////////v7+//7+/v/+/v7//f39//39/f/8/Pz//Pz8 + //v7+//7+/v/+vr6//r6+v/5+fn/+Pj4//j4+P/39/f/9/f3//b29v/19fX/9fX1//T09P/z8/P/8/Pz + /76+vv/19fX/9fT0//P09P/z8/P//f7+/+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP///// + ///////////////////+///GxsX///////////////////////////////////////7+/v/+/v7//v7+ + //39/f/9/f3//Pz8//z8/P/7+/v/+/v7//r6+v/6+vr/+fn5//n5+f/4+Pj/9/f3//f39//29vb/9fX1 + //X19f/09PT/8/Pz/76/vv/19fX/9fX1//T09P/z9PT//f7+/+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAA + AIiEgf/g2dP////////////////////////////Gxcb/xsbG/8XFxv/FxcX/xcXF/8XFxf/ExMX/xcTE + /8TExP/ExMT/xMTE/8TExP/DxMT/w8PE/8PDw//Dw8P/wsLC/8LCwv/CwcL/wcLC/8HBwf/BwcH/wcHB + /8HBwf/AwcD/wMDA/7/Av//Av8D/v7+//76/v//19fX/9fX0//X09P/09PT//f7+/+DZ0/+IhIH/AAAA + KgAAAA4AAAAAAAAAAIiEgf/g2dP////////////////////////////////////+/////v/+//7//v7+ + //7+/v/9/v7//f3+//39/f/9/f3//Pz9//z8/f/8/Pz//Pz8//z8+//7+/v/+/v6//v7+v/6+vr/+vn5 + //r5+f/5+fn/+Pn4//j4+P/4+Pj/9/j3//f39v/29vb/9vb2//b29f/29fX/9fX1//T19P/09fT//f7+ + /+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP///////////////////////////////////// + ///+///+/v///v7////+///9/v7//v7+//39/v/9/f3//fz9//z8/P/8/Pz/+/z8//z8+//7+/v/+/v7 + //v7+//6+vr/+vr6//r6+f/5+fn/+fn5//j4+P/4+Pf/9/f3//f39//39/f/9vb2//b19v/29fX/9vb1 + //X19P/09PX//f7+/+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP/vr/A/76/wP++v8D/vr/A + /76/wP++v8D/vr/A/76/wP++v8D/vr/A/76/wP++v8D/vr/A/76/wP++v8D/vr/A/76/wP++v8D/vr/A + /76/wP++v8D/vr/A/76/wP++v8D/vr/A/76/wP++v8D/vr/A/76/wP++v8D/vr/A/76/wP++v8D/vr/A + /76/wP++v8D/vr/A/76/wP++v8D/vr/A/+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP/4NnT + /+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT + /+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT + /+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0/+IhIH/AAAAJgAAAAwAAAAAAAAA + AIiEgf/g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT + /+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT + /+DZ0//g2dP/kXlo/5F5aP/g2dP/4NnT/5F5aP+ReWj/4NnT/+DZ0/+ReWj/kXlo/+DZ0/+IhIH/AAAA + FwAAAAYAAAAAAAAAAIeDgGyIhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /4iEgf9/fHlyAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////AAD///////8A + AIAAAAAAAwAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAA + AAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEA + AIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAA + AAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEA + AIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAA + AAABAAD///////8AAP///////wAA////////AAD///////8AAP///////wAAKAAAACAAAABAAAAAAQAg + AAAAAACAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAA + CwAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAA + DQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAACwAAAAYAAAACAAAA + BgAAABYAAAAjAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAA + JgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAjAAAA + FgAAAAaLhoSBhYF+94iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /4iEgf+IhIH/ioaD/4yJhv+PjIn/j4qH/4uHhf+IhIL/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /3l1c5QAAAAjAAAAC4iEgf/8+/v/+/v6//r6+v/6+vn/+fr5//n5+P/4+Pj/9/j4//f39//39/f/9vb2 + //b29v/19fX/9PX1//T09f/09PP/9PPz//Py8//y8vP/8fLy//Hx8f/y8fH/8fHx//Hx8f/w8fD/8PDw + //Dw8P/7+fb/iISB/wAAACYAAAANiISB//v8+//7+/v/+vv7/+zr6//Ozs7/vr6+/7+/v/+/v7//vr6+ + /76+vv+9vb7/vb29/7y8vf+8vLz/vLy8/7y8vP+7u7v/u7u7/7u6u/+6urr/ubq6/7m6uf+4uLj/vr6+ + /97e3v/w8PD/8PDw//v59v+IhIH/AAAAJgAAAA2IhIH//Pv7//v8+//7+/v/0tHR/4mJif9wcXH/cHBw + /3BwcP9vb3D/b29w/29vb/9vb2//bm9v/25ub/9ubm7/bm5u/25ubv9ubm7/bm5t/21tbv9ubW3/bW1t + /21tbf+EhIT/ycnJ//Hw8P/w8PD/+/n2/4iEgf8AAAAmAAAADYiEgf/8/Pz//Pv8//v7+//Cw8L/9fX1 + //X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1 + //X19f/19fX/9fX1//X19f+7u7v/8fDx//Dw8P/7+fb/iISB/wAAACYAAAANiISB//39/f/8/Pz/+/z7 + /8TDw//19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1 + //X19f/19fX/9fX1//X19f/19fX/9fX1/7u7u//w8fH/8fHw//v59v+IhIH/AAAAJgAAAA2IhIH//f39 + //39/f/8/Pz/w8PD//X19f/19fX/yYEl/8uHKv/OjDL/zo82/9GSPP/RlD3/05dE/9SaR//Umkf/1JxK + /9ajUv/arGP/3rNt/9+2cf/csmv/3rZz//X19f/19fX/u7y7//Hx8f/w8fH/+/n2/4iEgf8AAAAmAAAA + DYiEgf/9/f3//f39//z8/f/ExMT/9fX1//X19f/IeiH/0Ykn/9KNLP/VlTT/2Zo7/9ufQ//dpUr/3qdO + /96pUf/fq1P/47Ne/+e8cP/qx4f/7MmP/+3NmP/oyZf/9fX1//X19f+7vLz/8fHx//Hx8f/7+fb/iISB + /wAAACYAAAANiISB//39/f/8/f3//f39/8TExP/19fX/9fX1/75sIf/Leij/y34s/82DMP/QiDT/1JA7 + /9iYRP/anUj/3aZO/+CrU//jsVr/5rll/+vGfv/tzo//8Nmq/+POnv/19fX/9fX1/7y8vP/y8fL/8fLy + //v59v+IhIH/AAAAJgAAAA2IhIH//f3+//39/f/9/f3/xMTE//X19f/19fX/XU8e/2pZI/9qWiX/bWAp + /3lxMf9/ezj/fnw4/4OHQP+Fj0X/fIlB/4GQSv+KnFD/i59P/52tXf+qvHn/rb6I//X19f/19fX/vLy8 + //Hy8v/x8fH/+/n2/4iEgf8AAAAmAAAADYiEgf/+/v3//v39//39/f/ExMT/9fX1//X19f9EYCz/SGYv + /0NgLP9PdDn/aIlN/3GNVf99nmP/h6Zk/42oZf+jsHL/vrV9/8C0ev/CxZP/4du+//L06v/r7ez/9fX1 + //X19f+9vL3/8vLy//Hy8v/7+fb/iISB/wAAACYAAAANiISB//7+/v/+/v7//v79/8TExP/19fX/9fX1 + /2V5R/9ZeET/XoZM/36cZP+epHP/u7yS/+7u2P/49NT/++zE///vx///6sP//+/P////8P////r//f31 + /+7u5f/19fX/9fX1/729vf/y8/P/8vLy//v59v+IhIH/AAAAJgAAAA2IhIH//v7+//7+/v/9/v7/xcTE + //X19f/19fX/hIVY/4mSZP+RpXb/z9Sm/+3txf///97////k////6P///+7////j////5////+f////l + ////5P/8/OX/7u7d//X19f/19fX/vb29//Py8//z8vP/+/n2/4iEgf8AAAAmAAAADYiEgf///v7//v7+ + //7+/v/FxcT/9fX1//X19f+4ton/tLiK/9Tcr////9v////W///7yv//+sn///3X////6f///+P///7V + ///91P///9v////c//z72//u7tX/9fX1//X19f+9vb3/8/Pz//Ly8//7+fb/iISB/wAAACYAAAANiISB + ///////+/v///v7+/8TFxf/19fX/9fX1//Lvy///+8r///rN////3////+r///vW///0yf//8sf///HB + ///zwf//+9P///zZ///93P///+3//Pzj/+7s0//19fX/9fX1/729vf/08/P/8/Lz//v59v+IhIH/AAAA + JgAAAA2IhIH////////+///+////xcXF//X19f/19fX/7+O9///2yf//987///rX///sxP//5rz//+Cx + ///Wof//26D//+67///72P//99L///jT///zyv/846v/7teh//X19f/19fX/vb2+//P09P/z8/P/+/n2 + /4iEgf8AAAAmAAAADYiEgf/////////+///+/v/FxcX/9fX1//X19f/vuHn//9ab///Xn///zI///8B8 + ///FhP//x4f//8WE///Ym///5qn///DB///+4///9Mf//+Sl//zgo//u2qf/9fX1//X19f+9vr7/9PT0 + //P09P/7+fb/iISB/wAAACYAAAANioaE9v///////////////8bGxv/19fX/9fX1/++jVv//r1v//61Z + //+tWv//r13//7Rk//+2af//sl///8qI///ywf//9cP////o///1xP//35P//t6U/+7TlP/19fX/9fX1 + /72+vv/09PT/9PP0//v59v+IhIH/AAAAJgAAAA2KhoT2////////////////xsbF//X19f/19fX/6ZdC + /++bRf/vm0X/75tF/++aRf/vnEf/751I/++aRf/voVD/77t0/+/RlP/v36z/7tWU/+7hrP/t47j/69un + //X19f/19fX/vr6+//X09P/09fT/+/n2/4iEgf8AAAAmAAAADYqGhPb////////////////Gxsb/9fX1 + //X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1 + //X19f/19fX/9fX1//X19f++vr7/9fX1//T09f/7+fb/iISB/wAAACYAAAANioaE9v////////////// + /8bGxv/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1 + //X19f/19fX/9fX1//X19f/19fX/9fX1/7++vv/19fX/9PX1//v59v+IhIH/AAAAJgAAAA2LhoT2//// + ////////////xsbG/8XExf/GxsX/xMXF/8XFxf/Dw8T/xcTE/8PDw//ExMT/w8PD/8TDxP/DwsL/w8PC + /8HBwv/CwsH/wcHB/8HBwf/AwcD/wMHA/8C/v//AwL//wL+///b29f/19fX/+/n2/4iEgf8AAAAmAAAA + DY6KiPbLycf/y8nH/8vJx//Lycf/y8nH/8vJx//Lycf/y8nH/8vJx//Lycf/y8nH/8vJx//Lycf/y8nH + /8vJx//Lycf/zMrJ/83Lyv/NzMr/zczK/83Lyf/Mysj/zMrI/8vJx//Lycf/y8nH/8vJx//Lycf/iISB + /wAAACMAAAALi4mH/ube2P/f19H/3tfR/97X0f/e19H/3tfR/97X0f/e19H/3tfR/97X0f/e19H/3tfR + /97X0f/e19H/3tfR/97X0f/e19H/3tfR/97X0f/e19H/3tfR/97X0f+ReWj/3tfR/5F5aP/e19H/kXlo + /97X0f+IhIH/AAAAFgAAAAaRjIl8iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /4iEgf+IhIH/iISB/4uGhIEAAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////ygAAAAQAAAAIAAA + AAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAACXko//l5KP/5eSj/+Xko//l5KP/5eSj/+Xko//l5KP + /5eSj/+Xko//l5KP/5eSj/+Xko//l5KP/5eSj/+Xko//l5KP//79/v/9/P3/+/v7//r6+f/4+fj/9/f3 + //X29v/19PT/8/Pz//Ly8v/x8fH/8PDw//Dw8P/w8PD/l5KP/5eSj//+/v7//f39/7W1tv+ysrL/srKy + /7Kysv+ysrL/srKy/7Kysv+ysrL/srKy/7Kysv/w8PD/8PDw/5eSj/+Xko////7///7+/v+ysrL/8fHx + //Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f+ysrL/8fDx//Dw8P+Xko//l5KP///////+/v7/srKy + //Pz8//Bgzn/0ZZY/9Gsdv/SsHz/17iI/+y7jP/z8/P/srKy//Dw8f/w8PD/l5KP/5eSj//////////+ + /7Kysv/29vb/Z1gj/3tuMv+PiUv/npdZ/7i1gP/su4z/9vb2/7Kysv/y8fH/8PDx/5eSj/+Xko////// + //////+ysrL/+Pj4/2eBVP+pv5P/2enN//ncqv/w8dj//+q0//j4+P+ysrL/8vLy//Hx8f+Xko//l5KP + ////////////srKy//r6+v/q5sX/9MqR//TDhP//4a3//+q0/+PKof/6+vr/srKy//Py8v/x8fL/l5KP + /5eSj////////////7Kysv/8/Pz//4kw//eNN//hlkn/4aJa/+7DiP/ksHD//Pz8/7Kysv/z9PP/8vPy + /5eSj/+Xko////////////+ysrL//v39//79/f/+/f3//v39//79/f/+/f3//v39//79/f+ysrL/9PT0 + //Pz8/+Xko//l5KP/83Myv/NzMr/srKy/7Kysv+ysrL/srKy/7Kysv+ysrL/srKy/7Kysv+ysrL/srKy + /83Myv/NzMr/l5KP/5eSj//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0/+ReWj/4NnT + /5F5aP/g2dP/kXlo/5eSj/+Xko//l5KP/5eSj/+Xko//l5KP/5eSj/+Xko//l5KP/5eSj/+Xko//l5KP + /5eSj/+Xko//l5KP/5eSj/+Xko//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA//8AAA== + + + \ No newline at end of file diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo.sln b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo.sln new file mode 100644 index 00000000..942308c5 --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ShellThumbnailBrowserDemo", "ThumbnailBrowserDemo\ShellThumbnailBrowserDemo.vbproj", "{86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {86FF8635-74BE-4EA4-A29E-01E3FFB2E45D}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/My Project/AssemblyInfo.vb b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..e0d98a0f --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/My Project/AssemblyInfo.vb @@ -0,0 +1,37 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' + + diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/My Project/Resources.Designer.vb b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/My Project/Resources.Designer.vb new file mode 100644 index 00000000..863c7894 --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/My Project/Resources.Designer.vb @@ -0,0 +1,98 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + Friend ReadOnly Property extralarge() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("extralarge", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + Friend ReadOnly Property large() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("large", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + Friend ReadOnly Property medium() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("medium", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + Friend ReadOnly Property small() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("small", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + Friend ReadOnly Property ToolBarGradient() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("ToolBarGradient", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/My Project/Resources.resx b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/My Project/Resources.resx new file mode 100644 index 00000000..76a277fe --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/My Project/Resources.resx @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8 + AAACRElEQVQ4T6WTW0iTYRyHXygLsaBujOhAKBKUFkZGEjms/FBzeWqmWTMNddMgDxiREdphYhCCQSIm + pRSiZqaZdNIShFCKGN5UGEFpROLa1Dkmm0/fO+O76E69eOC7+J7n5v39BSCWg5ifn2cpCCHWqfgJr9dL + ZOMYUU0/0DV9/48xdM3jRD38g65zlv29HkJbXUhHlcN9EY/Hw+EWD/FdkPR4ipS2X6S0j3O8bRxD528M + L72k9tgx3B9BX/+O5IZhpKPK0SqBYm5uDkt1KXmWVnJbRjE+d5LVNUH2Uzs5fR7yqu6SnhDDmaMKRkWh + OO4I0tECbrebG0+uMvFqL6+7zVT2f6Dk7QzFQ1Ba14MpTkd2ehJZRjO1+gLeZJiRjhZwuVwUdkzR1HiN + okcDFDRbudM/iOUTVF6soCzPSL65iPMXLMy+N/G1qgLpaAGn08m9Bx/JvvKMhPrPFJ7rIM3UgrHPTU5m + GgmHoth3IJ2BF3r1tXVYh08hHS0wPT1NdVkzEbF1JBYPEro9l6CAWPzLvrBZp5c/+pi5rs7lhKCyfA3S + 0QIOh4OG/Cp27imgtGaI6N2JKOt3EX55BKUXNqny1g1+WDf6QZwgXqxFOlrAbrczGryDLWHHMJW30iFC + qBH+BBXWkmFVn/a0mfwIwc2Tq2BAkBy7GuloAZvNhkut3hYH6VZy+CkCaRfbiEgMIfNSGKklMaQqwZwN + DeBb8kpuRa5AOlpgcnKSpaAF/m1azlIuazEsTNl3EAsfgYtk4ZiWc8rS/QvFMEMOBF9DCwAAAABJRU5E + rkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8 + AAABuElEQVQ4T8WTT0jTYRjHfxfvgTDw1i08KCXVoSDsINROsUOFEGUH2yLoNnBRQ2SyGqOpu9gfqsFg + 2lhBCyMiRERybOWcGZLQu5ZBydjmGmPN/T6+7xiD8bsoHjx8Lw+f5/Mc3u+rAdp+sq9ldbgu0HWdvUTT + tEMybU1BrVbjyL0UPZ40R92C0z7BCY/A8kTgjwkiKwJvPM2DuWUUK5ePKUlTUK1WcbxJ81KAKwbuRXDO + weR3WJHUf5noFthnf6JYuXxWxtQUVCoVkvk8/+RkS4eUhD/8hlAG5kvwbRv+yvnMqkCxBkG5XMb+4jnR + 9VVqUiL36peVTMh8bcwSmR8o1iAolUqcHLxI/8RN7r9/xefNAmW9Sl7f5o8UZGUqUrL+awPFGgTFYpEO + cyeHL3XRc7uPcyMDXHvm4HJgBFtoCls4SmBpkcRaEsUaBIVCgY7zVrqvuzhuHeXMkI/euw+54JnA4vUw + 8NTPrdfTOCNBFGsQ5HI52q8+ouvOW04Nv8PsnqV/bIEr45+48fgLo+E1gh83mIzEUaxBkM1m2UsMgkaz + VDnU++4mrUVStWxITKogu0hrlQ/0N+4AtbCfjuJSibQAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8 + AAACFElEQVQ4T6WRX0hTYRjG34tCCcaMJIgulLqKLtRIKErTQVAQEUMGBYnBIAoSIohsOAPpDxgxJi4w + W3+UiP4ogrMWsbCi2G5KMi/aYOestQ0swulZ+9N6el/B5RmrXXTg4fm+5/m+9+Pwo3w+j7+JiKrK9ZTL + 5XAvCjjeAWdeA+9/AZ5vPyE5D2gQf9y3GyNjg7g9B4zMAvYn2UJP6XQaz5UAlj++jyxLch7QKj67geDo + JniUcVw+CZh2+gs9aZoGaiQc7T8Nh28Ql3yTeDQTwFLOA8T9qhMd/vU4MGTEiwkVww/chZ6SySQqm2zY + dHwA287egKn3Fo7dHIXkMkDc4WvAqZeb0XTNiOlPbdy1F3qKRCIL8Xg8oyiKFg6HF8VjsVgmkUhkZQCv + fxT3vM9Go9E09y0sqmLVsfaUUD1nNSzx0n0ZTDXl+iWMV7cQ+rcSbESY+fARX5jCSowXHz6F/W0KPW8y + sF5w4qD5hB7jmJXg7SRcoQpM3bXg87NGHcb74y4MTc/DNRnAkX174XF36jGO8ssTlRV4ZV4Fr50wbCEd + xkNdXmzf34s663Ws5rM5V60eo7vrPO6c68DXvmq01a+DwWDQYWy3dMO2cRfMTg9Mph2YOrz2D0ZG911V + VS0UCiWDweC8OO9TjDclmHi9UKoX3MUYmzlYKcEmeAXjMubiM5IT/xYZWdUlJPmaf/ZMjP5HvwFZvlxd + l91a5QAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8 + AAABVElEQVQ4T72SPUvDYBSF7+Kgi1nUrf0FCuKgSwUruLt01N1FwYKCix8IQhEV3FQQJ3FwqBT9BYVu + CXQLhBCQShOQ2FaSIRzvjSVW86oFweHA4XByc9+HS1EUoVdEpJmmaXme9yxib3M2HARBqsf5AIVhiKJR + x2G1CvEcTrqu27q/LaB0A7BvczbebDZRGiTUV6eTnvyMOp0O6GgJWq2C2BPNNRqN1lZtBGd3e2D/ytms + 4zgojxFO85T0OB8l3/fRKxmg67pj2/YLq20YxpMMsCwr1YsHxGvw2vJhV+IzsjYr15V4yb72NFJAzCqy + jKrHA4diiCe6j5WNnQSOCqxkV8cT2L1EGuLM8gXyuakEjgqsZIvXhIPz9d8hqsCqsp8gZhXAVFnfEFVg + ZeA7xHoEPOIDzndg5RIrm4U0xIX9NWw/lD9BVIGNL3G+j0v8X4j8dPqL3gCN8zpouxGRbAAAAABJRU5E + rkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAAEkAAAAgCAIAAADR6sIZAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8 + AAACdElEQVRYR93RTU8TURgF4PcHyFYKpRAhkYWyEFbQHbDiQxIbQRLYyIJ+g4LMB5XGjnESEBsBGVrB + Ok6pxVZqlTrQNGm6VRMWuuHfuL7h3uTmzW2qJM/q7M45cJQ/varA/n0h3p8L+x8A66c18c5q6xw2zmoi + lWsbJHhRqrLo36sNYFd1nNOqToLYt4p4J5UYB+2kIlKpopHg6Zcyy1qx3ABfy2uCgPzZFu/Yljkox7ZI + BVshwdKnEstyrtQA+dKyIBDKFFnCH4sNkC2GcY6KYRLMWwUWr1VAShe8HHzpAsVhwScIPEzlWebe55HM + /Bzah/ycIDCznxXvIDvDYfYgS/EuOysITCUyLA+SmbqaTmYo3mamcfYz0yS4t2uxeHYtJMPyoO1ZHpyE + 5SHB+LbJcnfHrKuJHZPijTmBs2tOkGDkdUq8rdQIh9GtFMV2ahRnJzVKguvzEkuzV0LySc0cHD6Jwi85 + cAKSg3SFul1aBJrnJRaHV0KiHnIpbPFJFH6pRRBo8cosrT4ZyS+3cnD6ZYqA7MQJyk4SOH0KS5tfQQoo + bRxcAYUiqLhwQoqLBC6/ytIeUJGCajuHjqBKEVI7cMJqBwluhCIsneEI0kKkk0PXQkSkxUgXCW4uRlm6 + H0WRHke70Zai3YLArScay+0Vra56VjQKSevBkbUeEtxRdJZeVUda1Xs59K3qIkX0PhL0P4uzDMTideWO + xSm0uBvnedxNgqENg+mlMYSzaQxxGN40RHplDJNgzDDF2zPHOIzvmRQJc1wQuG/lWCatHFI6N8lhKp0T + 6TA3RYLEj3OW5M/z/8mv8yQJrvUPsjQNDDaAe7BJkL93Aa1Rr/C1RAAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/My Project/Settings.Designer.vb b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/My Project/Settings.Designer.vb new file mode 100644 index 00000000..f2ffe239 --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class Settings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()),Settings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As Settings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Settings + Get + Return Global.Settings.Default + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/My Project/Settings.settings b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/Program.vb b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/Program.vb new file mode 100644 index 00000000..a57ada33 --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/Program.vb @@ -0,0 +1,22 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms + +Namespace Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New ThumbnailBrowser()) + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/ShellThumbnailBrowserDemo.vbproj b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/ShellThumbnailBrowserDemo.vbproj new file mode 100644 index 00000000..1ec468ba --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/ShellThumbnailBrowserDemo.vbproj @@ -0,0 +1,153 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {58604E0E-E8B1-4D22-9751-5B4EB574BA6A} + WinExe + + + ThumbnailBrowserDemo + v3.5 + On + Binary + Off + On + 512 + + + + + + + + + + + 3.5 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + true + true + prompt + true + + AllRules.ruleset + + + pdbonly + true + bin\Release\ + false + true + prompt + + AllRules.ruleset + + + + + 3.5 + + + 3.5 + + + + + + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + Designer + My.Resources + + + ThumbnailBrowser.vb + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + True + Settings.settings + True + + + Form + + + ThumbnailBrowser.vb + + + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/ThumbnailBrowser.Designer.vb b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/ThumbnailBrowser.Designer.vb new file mode 100644 index 00000000..9546a408 --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/ThumbnailBrowser.Designer.vb @@ -0,0 +1,239 @@ +Imports Microsoft.VisualBasic +Imports System +Imports Microsoft.WindowsAPICodePack.Controls.WindowsForms +Namespace Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo + Partial Public Class ThumbnailBrowser + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Dim resources As New System.ComponentModel.ComponentResourceManager(GetType(ThumbnailBrowser)) + Me.splitContainer1 = New System.Windows.Forms.SplitContainer() + Me.explorerBrowser1 = New ExplorerBrowser() + Me.flowLayoutPanel = New System.Windows.Forms.FlowLayoutPanel() + Me.pictureBox1 = New System.Windows.Forms.PictureBox() + Me.topNavPanel = New System.Windows.Forms.Panel() + Me.comboBox1 = New System.Windows.Forms.ComboBox() + Me.browseLocationButton = New System.Windows.Forms.Button() + Me.toolStrip1 = New System.Windows.Forms.ToolStrip() + Me.toolStripSplitButton1 = New System.Windows.Forms.ToolStripSplitButton() + Me.smallToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.mediumToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.largeToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.extraLargeToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.panel3 = New System.Windows.Forms.Panel() + Me.splitContainer1.Panel1.SuspendLayout() + Me.splitContainer1.Panel2.SuspendLayout() + Me.splitContainer1.SuspendLayout() + Me.flowLayoutPanel.SuspendLayout() + CType(Me.pictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.topNavPanel.SuspendLayout() + Me.toolStrip1.SuspendLayout() + Me.panel3.SuspendLayout() + Me.SuspendLayout() + ' + ' splitContainer1 + ' + Me.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill + Me.splitContainer1.Location = New System.Drawing.Point(0, 26) + Me.splitContainer1.Name = "splitContainer1" + ' + ' splitContainer1.Panel1 + ' + Me.splitContainer1.Panel1.Controls.Add(Me.explorerBrowser1) + ' + ' splitContainer1.Panel2 + ' + Me.splitContainer1.Panel2.AutoScroll = True + Me.splitContainer1.Panel2.Controls.Add(Me.flowLayoutPanel) + Me.splitContainer1.Size = New System.Drawing.Size(881, 567) + Me.splitContainer1.SplitterDistance = 292 + Me.splitContainer1.TabIndex = 0 + ' + ' explorerBrowser1 + ' + Me.explorerBrowser1.Dock = System.Windows.Forms.DockStyle.Fill + Me.explorerBrowser1.Location = New System.Drawing.Point(0, 0) + Me.explorerBrowser1.Name = "explorerBrowser1" + Me.explorerBrowser1.Size = New System.Drawing.Size(292, 567) + Me.explorerBrowser1.TabIndex = 0 + Me.explorerBrowser1.Text = "explorerBrowser1" + ' + ' flowLayoutPanel + ' + Me.flowLayoutPanel.AutoScroll = True + Me.flowLayoutPanel.Controls.Add(Me.pictureBox1) + Me.flowLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill + Me.flowLayoutPanel.Location = New System.Drawing.Point(0, 0) + Me.flowLayoutPanel.Name = "flowLayoutPanel" + Me.flowLayoutPanel.Size = New System.Drawing.Size(585, 567) + Me.flowLayoutPanel.TabIndex = 0 + ' + ' pictureBox1 + ' + Me.pictureBox1.Location = New System.Drawing.Point(3, 3) + Me.pictureBox1.Name = "pictureBox1" + Me.pictureBox1.Size = New System.Drawing.Size(360, 279) + Me.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.AutoSize + Me.pictureBox1.TabIndex = 1 + Me.pictureBox1.TabStop = False + ' + ' topNavPanel + ' + Me.topNavPanel.BackgroundImage = My.Resources.ToolBarGradient + Me.topNavPanel.Controls.Add(Me.comboBox1) + Me.topNavPanel.Controls.Add(Me.browseLocationButton) + Me.topNavPanel.Dock = System.Windows.Forms.DockStyle.Fill + Me.topNavPanel.Location = New System.Drawing.Point(0, 0) + Me.topNavPanel.Name = "topNavPanel" + Me.topNavPanel.Size = New System.Drawing.Size(881, 26) + Me.topNavPanel.TabIndex = 1 + ' + ' comboBox1 + ' + Me.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.comboBox1.FormattingEnabled = True + Me.comboBox1.Items.AddRange(New Object() { "Thumbnail or Icon", "Thumbnail only", "Icon only"}) + Me.comboBox1.Location = New System.Drawing.Point(73, 2) + Me.comboBox1.Name = "comboBox1" + Me.comboBox1.Size = New System.Drawing.Size(121, 21) + Me.comboBox1.TabIndex = 1 +' Me.comboBox1.SelectedIndexChanged += New System.EventHandler(Me.comboBox1_SelectedIndexChanged) + ' + ' browseLocationButton + ' + Me.browseLocationButton.Anchor = (CType((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles)) + Me.browseLocationButton.Location = New System.Drawing.Point(803, 3) + Me.browseLocationButton.Name = "browseLocationButton" + Me.browseLocationButton.Size = New System.Drawing.Size(75, 23) + Me.browseLocationButton.TabIndex = 0 + Me.browseLocationButton.Text = "Browse..." + Me.browseLocationButton.UseVisualStyleBackColor = True +' Me.browseLocationButton.Click += New System.EventHandler(Me.browseLocationButton_Click) + ' + ' toolStrip1 + ' + Me.toolStrip1.Dock = System.Windows.Forms.DockStyle.Left + Me.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden + Me.toolStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() { Me.toolStripSplitButton1}) + Me.toolStrip1.Location = New System.Drawing.Point(0, 0) + Me.toolStrip1.Name = "toolStrip1" + Me.toolStrip1.Size = New System.Drawing.Size(70, 26) + Me.toolStrip1.TabIndex = 2 + Me.toolStrip1.Text = "toolStrip1" + ' + ' toolStripSplitButton1 + ' + Me.toolStripSplitButton1.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() { Me.smallToolStripMenuItem, Me.mediumToolStripMenuItem, Me.largeToolStripMenuItem, Me.extraLargeToolStripMenuItem}) + Me.toolStripSplitButton1.Image = My.Resources.large + Me.toolStripSplitButton1.ImageTransparentColor = System.Drawing.Color.Magenta + Me.toolStripSplitButton1.Name = "toolStripSplitButton1" + Me.toolStripSplitButton1.Size = New System.Drawing.Size(67, 20) + Me.toolStripSplitButton1.Text = "Views" +' Me.toolStripSplitButton1.ButtonClick += New System.EventHandler(Me.toolStripSplitButton1_ButtonClick) + ' + ' smallToolStripMenuItem + ' + Me.smallToolStripMenuItem.Image = My.Resources.small + Me.smallToolStripMenuItem.Name = "smallToolStripMenuItem" + Me.smallToolStripMenuItem.Size = New System.Drawing.Size(131, 22) + Me.smallToolStripMenuItem.Text = "Small" +' Me.smallToolStripMenuItem.Click += New System.EventHandler(Me.smallToolStripMenuItem_Click) + ' + ' mediumToolStripMenuItem + ' + Me.mediumToolStripMenuItem.Image = My.Resources.medium + Me.mediumToolStripMenuItem.Name = "mediumToolStripMenuItem" + Me.mediumToolStripMenuItem.Size = New System.Drawing.Size(131, 22) + Me.mediumToolStripMenuItem.Text = "Medium" +' Me.mediumToolStripMenuItem.Click += New System.EventHandler(Me.mediumToolStripMenuItem_Click) + ' + ' largeToolStripMenuItem + ' + Me.largeToolStripMenuItem.Image = My.Resources.large + Me.largeToolStripMenuItem.Name = "largeToolStripMenuItem" + Me.largeToolStripMenuItem.Size = New System.Drawing.Size(131, 22) + Me.largeToolStripMenuItem.Text = "Large" +' Me.largeToolStripMenuItem.Click += New System.EventHandler(Me.largeToolStripMenuItem_Click) + ' + ' extraLargeToolStripMenuItem + ' + Me.extraLargeToolStripMenuItem.Image = My.Resources.extralarge + Me.extraLargeToolStripMenuItem.Name = "extraLargeToolStripMenuItem" + Me.extraLargeToolStripMenuItem.Size = New System.Drawing.Size(131, 22) + Me.extraLargeToolStripMenuItem.Text = "Extra Large" +' Me.extraLargeToolStripMenuItem.Click += New System.EventHandler(Me.extraLargeToolStripMenuItem_Click) + ' + ' panel3 + ' + Me.panel3.Controls.Add(Me.toolStrip1) + Me.panel3.Controls.Add(Me.topNavPanel) + Me.panel3.Dock = System.Windows.Forms.DockStyle.Top + Me.panel3.Location = New System.Drawing.Point(0, 0) + Me.panel3.Name = "panel3" + Me.panel3.Size = New System.Drawing.Size(881, 26) + Me.panel3.TabIndex = 2 + ' + ' ThumbnailBrowser + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6F, 13F) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(881, 593) + Me.Controls.Add(Me.splitContainer1) + Me.Controls.Add(Me.panel3) + Me.Icon = (CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)) + Me.Name = "ThumbnailBrowser" + Me.Text = "Thumbnail/Icon Browser Demo" + Me.splitContainer1.Panel1.ResumeLayout(False) + Me.splitContainer1.Panel2.ResumeLayout(False) + Me.splitContainer1.ResumeLayout(False) + Me.flowLayoutPanel.ResumeLayout(False) + Me.flowLayoutPanel.PerformLayout() + CType(Me.pictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.topNavPanel.ResumeLayout(False) + Me.toolStrip1.ResumeLayout(False) + Me.toolStrip1.PerformLayout() + Me.panel3.ResumeLayout(False) + Me.panel3.PerformLayout() + Me.ResumeLayout(False) + + End Sub + + #End Region + + Private splitContainer1 As System.Windows.Forms.SplitContainer + Private explorerBrowser1 As Microsoft.WindowsAPICodePack.Controls.WindowsForms.ExplorerBrowser + Private topNavPanel As System.Windows.Forms.Panel + Private WithEvents browseLocationButton As System.Windows.Forms.Button + Private toolStrip1 As System.Windows.Forms.ToolStrip + Private WithEvents toolStripSplitButton1 As System.Windows.Forms.ToolStripSplitButton + Private WithEvents smallToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents mediumToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents largeToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents extraLargeToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private panel3 As System.Windows.Forms.Panel + Private flowLayoutPanel As System.Windows.Forms.FlowLayoutPanel + Private pictureBox1 As System.Windows.Forms.PictureBox + Private WithEvents comboBox1 As System.Windows.Forms.ComboBox + End Class +End Namespace + diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/ThumbnailBrowser.ico b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/ThumbnailBrowser.ico new file mode 100644 index 00000000..fa3d6f9b Binary files /dev/null and b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/ThumbnailBrowser.ico differ diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/ThumbnailBrowser.resx b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/ThumbnailBrowser.resx new file mode 100644 index 00000000..1036e8b8 --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/ThumbnailBrowser.resx @@ -0,0 +1,1443 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 104, 17 + + + + + AAABAAoAMDAQAAEABABoBgAApgAAACAgEAABAAQA6AIAAA4HAAAQEBAAAQAEACgBAAD2CQAAMDAAAAEA + CACoDgAAHgsAACAgAAABAAgAqAgAAMYZAAAQEAAAAQAIAGgFAABuIgAAAAAAAAEAIACP0QAA1icAADAw + AAABACAAqCUAAGX5AAAgIAAAAQAgAKgQAAANHwEAEBAAAAEAIABoBAAAtS8BACgAAAAwAAAAYAAAAAEA + BAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDA + wAAAAP8AAP8AAAD//wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAHd3d3d3d3d3d3d3d3d3d3d3d3d3dwAAB4iIiIiIiIiIiIiIiIiIiIiI + iIiIiHAAB4//////////////////////////+HAAB4////iIiIiIiIiIiIiIiIiIiP+P+HAAB4///4d3 + d3d3d3d3d2d3Z3dneP//+HAAB4///4/4+Pj4+I+Ij4+I+Ij4+I+P+HAAB4///4//////////+Pj/j/+P + iP//+HAAB4///4/2ZmZmZn5n5+eGh+ePiP+P+HAAB4///4+GfsjnjsjOd36I6Ijo+Pj/+HAAB4///4/8 + 5+x+yOfozozoiOiPiP/4+HAAB4///4/2x8fsfn5+jojo6IiI+I//+HAAB4///4/2dux2fHx8hshofojv + iP+P+HAAB4///4/0ZHJnZnZ2d2dnZ3d/+P//+HAAB4///4/yckcnZ3Z3Z3jniO/4+I+P+HAAB4///4/2 + NjZ3d3iOiOiI////iP//+HAAB4///4+HZSd2eI/4//j///+P+Pj/+HAAB4///4/3d3eIj/j/+P+Pj/+P + iP/4+HAAB4///4/2d3iPiI+Pj4+PiPj4+Pj/+HAAB4///4/3joiIiIiP+PiI+I+P+P//+HAAB4///4/4 + +Pj/j4j4iPj4//j4+I+P+HAAB4///4/4+Ij4+IiO+O/4j4+PiP//+HAAB4///4/4iIj4iIiIiP+IiI6P + +P+P+HAAB4///4/++IiOjo6O+Ij/j4iPiP//+HAAB////4/46OjoiIiI7+/46O/v+Pj/+HAAB4///4/3 + 6Oh+jujoiPiP+IiP+P/4+HAAB////4/8jI7I7I7OiIj4iO/viPj//3AAB4///4/+fsjsjsh+zujo6PiP + +P//+HAAB////4//////////////////+P+P+HAAB4///4/////////////////4+I//+HAAB////4iI + iIiIiIiIiIiIiIiIiP//+IAAB4/////////////////4/4////+P+HAAB////////////////4/////4 + /4//+HAAB4iIiIiIiIiIiIiIiIiIiIiIiIiIiIAAB/iIj4j4j4iPiIiIiPiIiIiPiPiI+HAAB4+PiPiP + iPj4+P+Pj4+P+Pd492+HeHAAAHd3d3d3d3d3d3d3d3d3d3d3d3d3dwAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////////AADAAAAAAA8AAIAAAAAABwAAgAAAAAAH + AACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAA + AAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAH + AACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAA + AAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAH + AACAAAAAAAcAAIAAAAAABwAAwAAAAAAPAAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAAKAAAACAAAABAAAAAAQAEAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIAAAACA + gACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8AAAD/AP8A//8AAP///wAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAId3d3d3d3d3d3d3d3d3eAB///////////////////cAf//4iIiIiIiIiIiIiPj3AH// + h3d3d3d3d3d3d3j/9wB//4/4+Pj4+PiPiPj4+PcAf/+P////////////+I/3AH//j4ZmfmfnaOeOf4j/ + 9wB//4/2fsjOfn6IiI/4//cAf/+P/OXmjIyMjo6P+I/3AH//j/ZWR2Z2dnZ4f4j/9wB//4+CY2d3fojo + j//4+PcAf/+P93Z3iPj4//+P+P/3AH//j/Z3iP//j///+PiP9wB//4/3iPiIj/iIiI/4//cAf/+P+Pj/ + iIiI+P+P+I/3AH//j/iIiIjviI+O+Pj/9wB//4/+iOjojvj4iI/4j/cAf/+P9+jo6OiI+Ojv+P/3AH// + j/Z+yM5+joiPj/j49wB//4////////////+I//cAf/+Pj///+Pj/j/j/+P/3AH//iIiIiIiIiIiIiIj4 + 9wB4iIiIiIiIiIiIiIiIiIcAf4+Pj4+I+Pj4+Pj294f3AAd3d3d3d3d3d3d3d3d3eAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////////////AAAAAwAAAAMAAAADAAAAAwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA + AAMAAAADAAAAAwAAAAMAAAADgAAAA///////////KAAAABAAAAAgAAAAAQAEAAAAAACAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A + AAD/AP8A//8AAP///wB3d4d3eHd3h3/////////3f/iIiIeIiPd/+I+P//iP93/49oeHj4j3f/j2Zmjv + j/d/+IePj49/93/4+I6Ij4/3f/j+yOjviPd/+P////+P93iIeIeIeHiHf4+I+Ih4f3d4d4d4eHh3eAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAD//wAA//8AAP//AAAoAAAAMAAAAGAAAAABAAgAAAAAAAAJAAAAAAAAAAAAAAAB + AAAAAQAAAAAAAEBFHQBCTiMAS1MkAE1fKwBQWygATmItAFFkLABLazQAUWkxAF9rMQBPczwAXHw+AGp4 + OQBcdkMAZXZIAG1ubgBwcG8AcHBwAKdfHgC3bCIAumwkALt0LAC/ezIAwnAeAMZ9JADIeygAgH9VAJF5 + aABXgUcAYoVHAGyIRABijk4AaY1JAHCCQQB0iUYAdo1JAGaSSwBtlE8AcJdPAGqOUQBmmVEAbZlRAGyY + XAB9mV8Ab6FZAHahXAB7o1gAzYMkAMiDKwDIhCoAyYEtAM6JKADQiSUA0Y0tAMGCNQDKhTAAyokyAM2J + MwDMjDcAxYk7AM2PPADQjjYAzZA8ANOSMQDWlzYA05M7ANaXOQDWmD0A15w+ANmbPQCDhVkAg6lcAI+U + YwCPmWYAi5ZoAIydbwCSk2QAk5loAJiebgCBp2QAiqFrAJutagCIsGgAlaR0AJ+hcQCRrnkAqa9xAKCm + eACqqX8Ap7FyAK+2ewC9un4AzpNBAMmURADLmEYAzZ1LANCVRQDZnkQA0JdIANCaSgDSnE4A2Z9IAOWV + QgDln0sA5Z9YANqiSgDUoVQA0KZUAN2nUADTq1YA3alTANSjWQDXqV4A1rFcAP+oTwDgr1UA4q1bAP+q + UwD/r10A4bBWAOO0XQD/sF8A16piANisZgDZrmkA2rtmANqybgDctXkA5ahoAOKzYgDjtmgA5bppAP+x + YgD/tmkA/7pvAOW8cwD/u3UA/795AN/EcwDnwX0A6sZ+AP/BfQCEhIQAiISBAImJiQCytooAsLiKALq6 + uwC8u7sAvLy7ALu7vAC8u7wAu7y8AL29vQDNvIcA5buDAMC/vwC8y5wAv8C/AMbAiQDaxIsAxsKUAOXF + gQDow4IA4cqCAOnHiQD/xIIA/8iHAP/VgQD/1YoA5c2UAOzLkgDkzJoA9sWTAPrGlAD/zZMA9MyaAOPR + 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 + 1/z8/Pz81fz8aYV6enqFhYWGh4aFh7bcxc3q6sW2qbay9Omd9On06fzXkAAAAACQ1/z8/Pz81fz8aHNz + c3Nzc3NzenNzd6fJ4dzj4s3Ntral7Oyd7PTp9PzXkAAAAACQ1/z8/Pz81fz8Z2dnZ2dnZ2dnZ2dnZ2do + dYitpYitx9nH9Omd9PTs9PzXkAAAAACQ1/z8/Pz81fz8/Pz8/Pz8/Pz8/Pz8/Pz89vz29vT09PT06fSd + 7PTs7PzXkAAAAACQ1/z8/Pz81fz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pb89PT09PT09Omd9Oz09PzXkAAAAACQ + 1/z8/Pz81dXP1dXP1c/Vz9XP1c/P1Z/Pz8/Pz8/Pn52dnZ2d9PTs7PzXkAAAAACQ1/z8/Pz8/Pz8/Pz8 + /Pz8/Pz8/Pz8/Pz8/Pz2/Pb89PT09PT07PTs8/zXkAAAAACQ1/z8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8/Pz2 + /Pb89vz09vT09PTs9Oz09PzXkAAAAACQ18/Pz8/Pz8/Pz8/Pz8/Pz8/Pz8+fn5+fn5+fn5+dzp2dnZ3O + zs7Ozs7XkAAAAACQ19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXkAAAAACQ + 19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX1xwc19ccHNfXHBzXkAAAAAAAkJCQkJCQkJCQkJCQ + kJCQkJCQkJCQkJCQkJCQj5CPj5CPkI+QkJCQkJCQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAAwAAAAAAPAACAAAAAAAcAAIAAAAAABwAAgAAAAAAH + AACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAA + AAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAH + AACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAA + AAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAHAACAAAAAAAcAAIAAAAAABwAAgAAAAAAH + AACAAAAAAAcAAMAAAAAADwAA////////AAD///////8AAP///////wAA////////AAD///////8AACgA + AAAgAAAAQAAAAAEACAAAAAAAAAQAAAAAAAAAAAAAAAEAAAABAAAAAAAAXU8eAGpZIwBqWiUAQ2AsAERg + LABIZi8AT3Q5AG1gKQB5cTEAf3s4AH58OABZeEQAZXlHAG1tbgBvb3AAcHBwAL5sIQDIeiEAy3ooAMt+ + LACReWgAXoZMAGiJTQB8iUEAcY1VAH2eYwB+nGQAyYElAMuHKgDRiScA0o0sAM2DMADOjDIAzo82ANCI + NADVlTQA1JA7ANGSPADRlD0A2Zo7AIOHQACFj0UAgZBKAIufTwCEhVgAipxQAJ2tXQCJkmQAh6ZkAI2o + ZQCRpXYAnqRzAKOwcgCqvHkAvrV9ANOXRADUmkcA259DANiYRADUnEoA2p1IAOmXQgDvmkUA75xHAO+d + SADdpUoA3aZOANajUgDeqlIA76FQAO+jVgDgq1MA/61aAP+vXQDjsVoA47NeAP+yXwDarGMA3LJrAN6z + bQDAtHoA3rZyAOa5ZQD/tGQA/7ZpAOe8cADvu3QA77h5AOvGfgD/wHwAhISEAIiEgQCLh4UAi4mHAI2J + hgCJiYkAjoqIAI+MiQCRjowArb6IALi2iQC0uIoAu7ySALGurQC6uroAu7y7ALu8vAC9vb0AwL+/AMLF + kwDqx4cA7MmPAO3OjwD/xYUA/8qIAP/MjwDoyZcA486eAO3NmADu0pQA7tWUAP/fkwD+3pQA/9abAP/X + nwD/2JsAz9SmANTcrwDAwL8A7tehAOvbpwDu2qcA79+sAP/WoQD/26AA8NmqAOHbvgDu4awA/OCjAP/k + pQD846sA/+apAO3juADv470A/+CxAP/mvAD/7rsAwcLBAMTBwQDDw8QAxMPEAMTExADLyccAycnJAMzK + yADNzMoAzs7OANLR0QDe19EA3t7eAObe2ADt7cUA/+rDAPvsxAD/7cUA8u/LAP/vzwD/8cEA//XDAP/y + xwD/9MUA//PKAP/1yQD/984A//rJAP/6zQDu7NMA7u7VAO7u2ADu7t0A//fSAPj01AD/+dMA//rWAP/9 + 1QD9+9kA//7aAP/+3QDu7uUA7OvrAOvt7AD+/uMA/v7lAPL06gD//+gA///tAPHx8QD08/MA9PTzAPTz + 9ADz9PQA9fX1AP//8AD7+fYA/f31APf4+AD6+vkA/Pv7APv8+wD///oA/Pv8AP7+/gAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJVcXFxcXFxcXFxcXFxcXFxcYWJhXFxcXFxcXFxcaAAAXNDQ0NDQ + ztDOzs7Ozs7Ozs7Oxc7Ov86/zr/Ov8xcAABc0NDQv5xsbGxsbGxsbGlsaWlpaWlpaWlsoL/FzFwAAFzQ + 0NCdYg8PEA8PDw8PDw8PDw8PDg4PDluZxcXMXAAAXNDQ0JXOzs7Ozs7OzsXOxc7FzsXFzsXOxWzFxcxc + AABc0NDQlc7FzsXOxc7Fzs7FzsXOxczOzsXOacXFzFwAAFzQ0NCVzs4SHSEhIiYnODg5RE5PT09QzsVs + xcXMXAAAXNDQ0JjOxRIeHyQoOkJCRUVMVm9wd3XOzmnFxcxcAABc0NDQlc7OERMUICElOz1CSExTWXCI + ds7FbMXFzFwAAFzQ0NCYzsUBAgIICQoKKSoYKi4sLzZkzs5pxcXMXAAAXNDQ0JXOzgQGBgcXGRoxMjU3 + N26Jxb/OxWnOxcxcAABc0NDQmM7ODQwWGjRns7akpKSnzMzMtM7OacXFzFwAAFzQ0NCVzs4tMDN/orzA + w8PAw8DAwMCzzsVsxc7MXAAAXNDQ0JrOxWVmgLy5r6+8w8C5uby8vLLOzmzFxcxcAABc0NDQlc7Ooq+v + wMO5qqurq7m8vMPAssXOacXFzFwAAFzQ0NCazs6Pqra5pJKRhn2Tuaq5p42CzsVszMXMXAAAXNDQ0JXO + zlh8fHRacnJyfYykwKqMi4LOxWzFzsxcAABi0NDQmM7FR0lJSUlUVU1zq6vDq3p6eM7ObMXFzFwAAGLQ + 0NCazs4+Pz8/Pz9BP0ZXeIV4io+DzsVszM7MXAAAYtDQ0JXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzmzFxcxc + AABi0NDQmM7Ov87Oxc7FzsXOxc7FzsXOxcXFbMzIzFwAAGLQ0NCYlZWVlZWVlZWVlZWVbYFslWyBbJWV + zsjMXAAAYpycnJycnJycmZmZmZmZmZmcnJycnJycmZmamppcAABioZ+fn5+fn5+fn5+fn5+fn5+fn5+f + nxWfFZ8Vn1wAAABcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxclQAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////// + ////////AAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADgAAAA///////////KAAAABAA + AAAgAAAAAQAIAAAAAAAAAQAAAAAAAAAAAAAAAQAAAAEAAAAAAABnWCMAe24yAJF5aABngVQAwYM5APeN + NwD/iTAAj4lLAJ6XWQDRllgA4ZZJAOGiWgDRrHYA0rB8AOSwcACXko8AuLWAAKm/kwCysrIAtbW2ANe4 + iADsu4wA7sOIAPTDhAD0ypEA48qhAPncqgD/4a0A/+q0AM3MygDg2dMA2enNAOrmxQDw8dgA8fHxAPP0 + 8wD19fUA+fn5AP7+/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAQEBAQEBAQEBAQEBAQEBAQECcnJycl + JSUlJSUjIyMjEBAnJxMTExMTExMTExMjIxAQJycTJSMlIyUjIyMTIyMQECcnEyUFCg0NFRYlEyMjEBAn + JxMlAQIICREWJRMjIxAQJycTJwQSIBsiHSYTIyMQECcnEyUhGRgcHRomEyUjEBAnJxMnBwYLDBcPJxMj + JRAQJycTJycnJycnJycTJSMQEB4eExMTExMTExMTEx4eEBAfHx8fHx8fHx8DHwMfAxAQEBAQEBAQEBAQ + EBAQEBAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA//8AAIlQ + TkcNChoKAAAADUlIRFIAAAEAAAABAAgGAAAAXHKoZgAAIABJREFUeJzsvdm3NMlxH/bLrKpe7vKtsy/A + YLCR2EQcCTIokrIoCvbRORIPJfvVluw/QP+L7Rc/+I0POpJ8bB2bMk3zEIJJC7BkQCABEAABzIADzAxm + 5ptvu2t3V1WGHyIiI7K6uu+938xgALBz5n7dXZWVGZkZe0RmAbuyK7uyK7uyK7uyK7uyK7uyK7uyK7uy + K7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uy + K7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7uyK7vy0ylBPv/Z+wrFruzK + rryX5b/fdKMG8M+OTs7/OwAgEEA/NaB2ZVfek5JSyt+D/BtU1OUvP8OF1okwVgFAYPiJuAoBKfUIALqU + EEBAjKhiheDGee1gHgD8D9q6/6y10mzauP6pqEojXIGrUP6euwtWn1LZox+cPk6uDV9Ha+XLuW4YwCeT + EQzuDJrcoKId7Y8wGCYCCInKMWkzuc8MbxD4PPwEUCghJz8Khj0A3E+AdT4y11TwY7KLebbJ1SPpoRyT + G/LovWGdi8uw/80EpThIVNKdf4KAAllDAV3IlcPaU9yBTmHQ/kIAJZ6NKDRThQohRMTIjED7CyHgidvX + 8Uf/9v/F5z73mdyd4lk5Mv4dIrcfIvD662/guWefcaBynT4l3L9/hFhNcOPaHmINwQtu90c/ehUvvPA8 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAA + CwAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAA + DgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAA + DgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAOAAAADgAAAA4AAAAKAAAAAwAAAAAAAAAAAAAA + AAAAAAUAAAAVAAAAJQAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAA + KgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAA + KgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAqAAAAKgAAACoAAAAjAAAA + EQAAAAMAAAAAAAAAAHh0ckWIhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /4iEgf8AAAA0AAAAIwAAAAoAAAAAAAAAAIiEgf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9 + /9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9 + /9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9/9HGvf/Rxr3/0ca9 + /9HGvf/Rxr3/0ca9/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3/+/v8//z7/P/7+/v/+/r7 + //r7+//6+vr/+vr6//n5+v/5+fn/+Pn4//j4+P/4+Pf/9/j3//f39//29vf/9vb2//b29v/19fb/9fX1 + //T19P/09PT/9PT0//Tz9P/z9PP/8/Pz//Py8v/y8vL/8vPz//Ly8v/y8fL/8fHy//Hx8f/x8fH/8PHw + //Hx8P/w8PD/8PDw//Dw8P/w8PD//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//Pz8 + //v8+//7+/v/+/v7//r6+v/t7ez/0NHR/8HBwf/BwcH/wcHB/8HBwf/BwcH/wcHA/8DAwP/AwMD/wL+/ + /7/Av/+/vr//vr6+/76+vf++vr7/vb69/729vf+9vb3/vb29/729vf+9vbz/vLy8/7y8vP+8u7z/u7y8 + /7u7u/+7urv/ycnJ/+Pj4//w8fD/8PDw//Dw8P/w8PD//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAA + AIiEgf/Rxr3//Pz9//z8+//8+/z//Pz8//v7+//R0dL/iYmJ/3Fxcf9xcXD/cHBw/3BwcP9wcHD/cHBv + /29vb/9vb2//b29v/29vb/9vb2//bm9v/25ubv9ubm7/bm5u/25ubv9ubm7/bm5u/25ubv9ubm7/bW5t + /21tbf9tbW3/bW1t/21tbf9tbW3/hISE/8jJyf/w8fD/8PDw//Dw8P/w8PD//f7+/9HGvf+IhIH/AAAA + KgAAAA4AAAAAAAAAAIiEgf/Rxr3//Pz9//z8/P/8+/z//Pz8//v7+//Dw8L/9fX1//T09P/z8/P/8/Pz + //Ly8v/x8fH/8PDw//Dw8P/v7+//7u7u/+7u7v/t7e3/7e3t/+zs7P/r6+v/6+vr/+rq6v/q6ur/6enp + /+np6f/o6Oj/6Ojo/+fn5//n5+f/5+fn/+bm5v/m5ub/5ubm/7u7u//x8PH/8PDw//Hw8P/w8PD//f7+ + /9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//P39//z9/f/8/Pz//Pv8//v7+//Dw8P/9fX1 + //X19f/09PT/8/Pz//Pz8//y8vL/8fHx//Hx8f/w8PD/7+/v/+/v7//u7u7/7e3t/+3t7f/s7Oz/6+vr + /+vr6//q6ur/6urq/+np6f/p6en/6Ojo/+jo6P/n5+f/5+fn/+fn5//m5ub/5ubm/7q7u//x8fD/8PHw + //Dx8f/w8PD//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//fz8//38/P/8/Pz//Pv7 + //v8+//Dw8P/9vb2//X19f/Igyv/yIQq/8iEK//LiTL/zIw3/8qJM//Njzz/zZA8/82QPP/Ok0H/0JVF + /9CWRv/Ql0j/0JZG/9CaSv/SnE7/1KFU/9SjWf/YrGb/16le/9muaf/asW3/16pi/9y1ef/n5+f/5ubm + /7u7u//x8fD/8PHx//Dw8P/x8fD//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//f39 + //38/f/8/fz//Pz8//z8/P/Ew8T/9/f3//b29v/GfST/0Ikl/9GMLP/Tjy//05Ew/9aXOf/XmTz/2Zs9 + /9ecPv/ZnkT/2qJI/9qgSP/aokv/2qJK/9qjSv/dp1D/4LFd/+O4av/nwX3/6ceI/+jEgv/owoH/5rxz + /9uzb//n5+f/5+fn/7y7u//x8fH/8fHx//Hx8f/w8PD//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAA + AIiEgf/Rxr3//f39//39/f/8/fz//fz9//z8/P/Dw8T/9/f3//f39//CcB7/zYEi/82FJv/OiSj/0Iwt + /9OTM//Wlzb/15k9/9qfRP/aoUj/3KRM/92nUP/dp1D/3apV/92pVP/gr1v/4rNi/+O2aP/lvHP/6MSD + /+nHi//rypL/8Ner/+TImv/o6Oj/5+fn/7u7vP/x8vH/8fHx//Dx8f/w8fD//f7+/9HGvf+IhIH/AAAA + KgAAAA4AAAAAAAAAAIiEgf/Rxr3//f3+//39/f/8/Pz//fz9//z8/P/Dw8T/+Pj4//f39/++bCL/yHso + /8mALP/Kgy7/yoUw/82JM//Qjjb/05M7/9aYPv/Zn0j/2qNO/9ykTf/dqVD/4K9V/+GwVv/jtV3/5rdf + /+e8aP/qxn7/7c6T/+3Lk//w1aP/9eG9/+jPrP/o6Oj/6Ojo/7u7vP/x8fH/8fHx//Dx8f/x8fH//f7+ + /9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//f3+//39/v/9/f3//f39//38/f/ExMT/+fn5 + //j4+P+nXx7/t2wi/7hsJP+5bib/u3Eq/7t1Lf+8dy//v3sy/8GBNP/Cgzb/xYg7/8WKO//JlET/y5hG + /82cSP/On07/0KZU/9OrVv/WsVz/2rtm/9/Ec//hyoL/49GR/9nEif/p6en/6Ojo/7y8u//y8fH/8fHx + //Hw8f/x8fH//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//v7+//39/f/9/f3//f39 + //39/f/ExMT/+fn5//n5+f9ARR3/S1Ij/0pRIv9LUiT/Tlcn/1BbKP9fazH/a3g4/2t5Ov9peTr/cIJB + /3SJRv93jUn/do5J/2yIRP9ffT7/aY1J/2+WT/9wl0//b5lQ/3ujWP+DqVz/iLBo/5Guef/p6en/6enp + /7u8vP/y8vL/8vHx//Hy8f/x8fD//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//f7+ + //7+/f/9/v3//f39//38/P/ExMT/+vr6//n5+f9CTiP/UmQs/1FkLP9NXyv/TmIt/1FpMf9efj7/YoVH + /2qOUf9skk//ZpJL/2uaUv9mmVH/b6FZ/3ahXP+Bp2T/r7Z7/6mvcf+brWr/p7Fy/828h//k17D/+/7u + /+Xl5f/q6ur/6enp/7y8vP/y8vL/8vLy//Hx8f/x8fH//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAA + AIiEgf/Rxr3//v7+//79/f/9/f3//f39//39/f/ExMT/+/v7//r6+v9ObTX/WHs+/0pqNf9KazT/T3U6 + /2KOTv99mV//j5lm/5OZaP+WoXH/xs+j/8bAif+9un7/28WO//PMmv/1zJr/+saU//bFk//20KX///bb + ////9f////3//////+Xl4v/q6ur/6urq/7y8vf/y8vL/8vLx//Lx8f/x8fH//f7+/9HGvf+IhIH/AAAA + KgAAAA4AAAAAAAAAAIiEgf/Rxr3//v7///7+/v/+/v7//f7+//39/f/ExMT/+/v7//v7+/9ldkj/XHZD + /09yP/9XgUf/bJhc/4qha/+Ynm7/n6Fx/7K2iv/r7Mv////2////3v//9tD///PM///xx///9c3//+vD + ///20////+z////z////7/////D////z/+Xl3P/r6+v/6urq/728vP/z8vL/8vLy//Hy8f/x8vL//f7+ + /9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//v/+//7+/v/9/f3//f7+//39/f/ExMT//Pz8 + //v7+/+Af1X/kpNk/42WaP+Onm//lKd3/7C4iv/Kz6H/5+e9////3////+n////m////6v///+7////p + ////4v///+b////q////6f///+b////m////5v///+r////s/+Xl2f/r6+v/6+vr/728vP/z8vL/8/Ly + //Ly8f/y8fL//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//v7+//7+///+/v7//v3+ + //3+/v/ExcT//Pz8//z8/P+DhVn/j5Rj/4qWaP+KnG//usye//77zf///9f////Z////1v///9X////V + ////2P///+f////m////3P///93////e////3v///9/////g////4f///+L////k/+Xl1v/s7Oz/6+vr + /729vP/y8vP/8vLz//Ly8v/y8vL//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//v// + //7//v/+/v7//v7+//39/f/FxcT//f39//z8/P+qqX//xsKU/6CmeP+/ypv////V////1f///tH///rK + ///6yP//+sv///rL///81f///+X////t////5v///97///3Q///90f///tX////Z////1////dX////Y + /+Xlzv/t7e3/7Ozs/729vf/z8/P/8vPy//Ly8v/y8vH//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAA + AIiEgf/Rxr3///////7//v///v7//v7+//7+/v/ExMX//f39//39/f/l4bf///rL///1xv//+s////3V + ////2v///+L///7a///5zP//88P///bL///60v//+tX///zW///60P///tr///vR///91f///+H////b + ////8f///+b////p/+Xl1P/t7e3/7e3t/729vf/z8/P/8/Ly//Ly8v/y8vL//f7+/9HGvf+IhIH/AAAA + KgAAAA4AAAAAAAAAAIiEgf/Rxr3//v////7+/v/+/v7//v7+//7+/v/FxcT//v7+//39/f/l4sT///jQ + ///xvf//88L///bN////4f///+f////s///72v//9cz///DI///qvf//5LH//+qy///rsv//7rj///7e + ///82///+tf///zZ////6v///+v///7h/+Xhv//u7u7/7e3t/729vf/08/P/8/Pz//Pz8v/y8vL//f7+ + /9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3///////7///////7//v7+//7+/v/ExcX//v7+ + //7+/v/l3bz///jS///wwf//8MH///rX///72f//9c3//+zD///mu///5rz//9ur///Wof//2KH//96k + ///uv///+dH///7f///0x///8ML///nT///zx///5q///+Km/+XLk//v7+//7u7u/729vf/08/P/8/Pz + //Lz8//y8vL//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/Rxr3//////////v///v7//v7+ + //7+/v/FxcX///////7+/v/lu4P//+Co///zy///8Mb///TN///mt///0JP//8yS///Sm///0pr//8+U + ///Nk///0JT//96j///qtf//8MH///jQ////7f///Nz///jR///82v//4qT//+Wq/+XPmv/w8PD/7+/v + /729vf/09PP/8/Pz//Pz8//z8/P//f7+/9HGvf+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP///// + ///////+/////v///////v/FxcX////////////lqGj//713///Gg///wn7//8F+//+7dP//unT//7t2 + //+/ef//woD//8F9///Ae///yIf//+Gn///gnP//4qP///PD////4v//+Mv//+y1///ipP//1Yr//+u1 + /+XYrP/w8PD/8PDw/729vf/09PP/8/T0//Pz9P/z8/P//f7+/+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAA + AIiEgf/g2dP///////////////////7//////v/FxcX////////////ln1j//7Bh//+vX///sF///7Bf + //+wYf//sWL//7Jj//+1aP//um///7Zs//+1Zv//t2n//9ih///1yP//6q////C6////5////+T//+uv + ///hmf//1YH//+Kc/+XPlv/x8fH/8PDw/729vv/09PT/8/T0//P08//z8/P//f7+/+DZ0/+IhIH/AAAA + KgAAAA4AAAAAAAAAAIiEgf/g2dP///////////////////7////+///Fxcb////////////ll0f//6hP + //+oT///qE///6hP//+oT///qE///6hQ//+sVv//r1v//6tU//+pUf//rFf//8aD///mtf//9cj///jI + ////3P///tb///K8///utf//5qH//+Sf/+XGg//y8vL/8fHx/729vv/09PT/9PT0//Pz9P/z8/P//f7+ + /+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP////////////////////////////Fxcb///// + ///////llUL/5ZVC/+WVQv/llUL/5ZVC/+WVQv/llEL/5ZRC/+WVQv/llUL/5ZVC/+WUQv/llEL/5ZdF + /+WfS//lrFz/5bx2/+XPnP/lxYD/5L1y/+TTnv/k4r3/5OTM/+Thvv/z8/P/8vLy/76+vf/19PT/9PT0 + //Tz9P/09PT//f7+/+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP///////////////////// + ///////Fxsb//////////////////////////////////v7+//7+/v/+/v7//f39//39/f/8/Pz//Pz8 + //v7+//7+/v/+vr6//r6+v/5+fn/+Pj4//j4+P/39/f/9/f3//b29v/19fX/9fX1//T09P/z8/P/8/Pz + /76+vv/19fX/9fT0//P09P/z8/P//f7+/+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP///// + ///////////////////+///GxsX///////////////////////////////////////7+/v/+/v7//v7+ + //39/f/9/f3//Pz8//z8/P/7+/v/+/v7//r6+v/6+vr/+fn5//n5+f/4+Pj/9/f3//f39//29vb/9fX1 + //X19f/09PT/8/Pz/76/vv/19fX/9fX1//T09P/z9PT//f7+/+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAA + AIiEgf/g2dP////////////////////////////Gxcb/xsbG/8XFxv/FxcX/xcXF/8XFxf/ExMX/xcTE + /8TExP/ExMT/xMTE/8TExP/DxMT/w8PE/8PDw//Dw8P/wsLC/8LCwv/CwcL/wcLC/8HBwf/BwcH/wcHB + /8HBwf/AwcD/wMDA/7/Av//Av8D/v7+//76/v//19fX/9fX0//X09P/09PT//f7+/+DZ0/+IhIH/AAAA + KgAAAA4AAAAAAAAAAIiEgf/g2dP////////////////////////////////////+/////v/+//7//v7+ + //7+/v/9/v7//f3+//39/f/9/f3//Pz9//z8/f/8/Pz//Pz8//z8+//7+/v/+/v6//v7+v/6+vr/+vn5 + //r5+f/5+fn/+Pn4//j4+P/4+Pj/9/j3//f39v/29vb/9vb2//b29f/29fX/9fX1//T19P/09fT//f7+ + /+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP///////////////////////////////////// + ///+///+/v///v7////+///9/v7//v7+//39/v/9/f3//fz9//z8/P/8/Pz/+/z8//z8+//7+/v/+/v7 + //v7+//6+vr/+vr6//r6+f/5+fn/+fn5//j4+P/4+Pf/9/f3//f39//39/f/9vb2//b19v/29fX/9vb1 + //X19P/09PX//f7+/+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP/vr/A/76/wP++v8D/vr/A + /76/wP++v8D/vr/A/76/wP++v8D/vr/A/76/wP++v8D/vr/A/76/wP++v8D/vr/A/76/wP++v8D/vr/A + /76/wP++v8D/vr/A/76/wP++v8D/vr/A/76/wP++v8D/vr/A/76/wP++v8D/vr/A/76/wP++v8D/vr/A + /76/wP++v8D/vr/A/76/wP++v8D/vr/A/+DZ0/+IhIH/AAAAKgAAAA4AAAAAAAAAAIiEgf/g2dP/4NnT + /+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT + /+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT + /+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0/+IhIH/AAAAJgAAAAwAAAAAAAAA + AIiEgf/g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT + /+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT + /+DZ0//g2dP/kXlo/5F5aP/g2dP/4NnT/5F5aP+ReWj/4NnT/+DZ0/+ReWj/kXlo/+DZ0/+IhIH/AAAA + FwAAAAYAAAAAAAAAAIeDgGyIhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /4iEgf9/fHlyAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP///////wAA////////AAD///////8A + AIAAAAAAAwAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAA + AAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEA + AIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAA + AAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEA + AIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAA + AAABAAD///////8AAP///////wAA////////AAD///////8AAP///////wAAKAAAACAAAABAAAAAAQAg + AAAAAACAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAA + CwAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAA + DQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAADQAAAA0AAAANAAAACwAAAAYAAAACAAAA + BgAAABYAAAAjAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAA + JgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAjAAAA + FgAAAAaLhoSBhYF+94iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /4iEgf+IhIH/ioaD/4yJhv+PjIn/j4qH/4uHhf+IhIL/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /3l1c5QAAAAjAAAAC4iEgf/8+/v/+/v6//r6+v/6+vn/+fr5//n5+P/4+Pj/9/j4//f39//39/f/9vb2 + //b29v/19fX/9PX1//T09f/09PP/9PPz//Py8//y8vP/8fLy//Hx8f/y8fH/8fHx//Hx8f/w8fD/8PDw + //Dw8P/7+fb/iISB/wAAACYAAAANiISB//v8+//7+/v/+vv7/+zr6//Ozs7/vr6+/7+/v/+/v7//vr6+ + /76+vv+9vb7/vb29/7y8vf+8vLz/vLy8/7y8vP+7u7v/u7u7/7u6u/+6urr/ubq6/7m6uf+4uLj/vr6+ + /97e3v/w8PD/8PDw//v59v+IhIH/AAAAJgAAAA2IhIH//Pv7//v8+//7+/v/0tHR/4mJif9wcXH/cHBw + /3BwcP9vb3D/b29w/29vb/9vb2//bm9v/25ub/9ubm7/bm5u/25ubv9ubm7/bm5t/21tbv9ubW3/bW1t + /21tbf+EhIT/ycnJ//Hw8P/w8PD/+/n2/4iEgf8AAAAmAAAADYiEgf/8/Pz//Pv8//v7+//Cw8L/9fX1 + //X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1 + //X19f/19fX/9fX1//X19f+7u7v/8fDx//Dw8P/7+fb/iISB/wAAACYAAAANiISB//39/f/8/Pz/+/z7 + /8TDw//19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1 + //X19f/19fX/9fX1//X19f/19fX/9fX1/7u7u//w8fH/8fHw//v59v+IhIH/AAAAJgAAAA2IhIH//f39 + //39/f/8/Pz/w8PD//X19f/19fX/yYEl/8uHKv/OjDL/zo82/9GSPP/RlD3/05dE/9SaR//Umkf/1JxK + /9ajUv/arGP/3rNt/9+2cf/csmv/3rZz//X19f/19fX/u7y7//Hx8f/w8fH/+/n2/4iEgf8AAAAmAAAA + DYiEgf/9/f3//f39//z8/f/ExMT/9fX1//X19f/IeiH/0Ykn/9KNLP/VlTT/2Zo7/9ufQ//dpUr/3qdO + /96pUf/fq1P/47Ne/+e8cP/qx4f/7MmP/+3NmP/oyZf/9fX1//X19f+7vLz/8fHx//Hx8f/7+fb/iISB + /wAAACYAAAANiISB//39/f/8/f3//f39/8TExP/19fX/9fX1/75sIf/Leij/y34s/82DMP/QiDT/1JA7 + /9iYRP/anUj/3aZO/+CrU//jsVr/5rll/+vGfv/tzo//8Nmq/+POnv/19fX/9fX1/7y8vP/y8fL/8fLy + //v59v+IhIH/AAAAJgAAAA2IhIH//f3+//39/f/9/f3/xMTE//X19f/19fX/XU8e/2pZI/9qWiX/bWAp + /3lxMf9/ezj/fnw4/4OHQP+Fj0X/fIlB/4GQSv+KnFD/i59P/52tXf+qvHn/rb6I//X19f/19fX/vLy8 + //Hy8v/x8fH/+/n2/4iEgf8AAAAmAAAADYiEgf/+/v3//v39//39/f/ExMT/9fX1//X19f9EYCz/SGYv + /0NgLP9PdDn/aIlN/3GNVf99nmP/h6Zk/42oZf+jsHL/vrV9/8C0ev/CxZP/4du+//L06v/r7ez/9fX1 + //X19f+9vL3/8vLy//Hy8v/7+fb/iISB/wAAACYAAAANiISB//7+/v/+/v7//v79/8TExP/19fX/9fX1 + /2V5R/9ZeET/XoZM/36cZP+epHP/u7yS/+7u2P/49NT/++zE///vx///6sP//+/P////8P////r//f31 + /+7u5f/19fX/9fX1/729vf/y8/P/8vLy//v59v+IhIH/AAAAJgAAAA2IhIH//v7+//7+/v/9/v7/xcTE + //X19f/19fX/hIVY/4mSZP+RpXb/z9Sm/+3txf///97////k////6P///+7////j////5////+f////l + ////5P/8/OX/7u7d//X19f/19fX/vb29//Py8//z8vP/+/n2/4iEgf8AAAAmAAAADYiEgf///v7//v7+ + //7+/v/FxcT/9fX1//X19f+4ton/tLiK/9Tcr////9v////W///7yv//+sn///3X////6f///+P///7V + ///91P///9v////c//z72//u7tX/9fX1//X19f+9vb3/8/Pz//Ly8//7+fb/iISB/wAAACYAAAANiISB + ///////+/v///v7+/8TFxf/19fX/9fX1//Lvy///+8r///rN////3////+r///vW///0yf//8sf///HB + ///zwf//+9P///zZ///93P///+3//Pzj/+7s0//19fX/9fX1/729vf/08/P/8/Lz//v59v+IhIH/AAAA + JgAAAA2IhIH////////+///+////xcXF//X19f/19fX/7+O9///2yf//987///rX///sxP//5rz//+Cx + ///Wof//26D//+67///72P//99L///jT///zyv/846v/7teh//X19f/19fX/vb2+//P09P/z8/P/+/n2 + /4iEgf8AAAAmAAAADYiEgf/////////+///+/v/FxcX/9fX1//X19f/vuHn//9ab///Xn///zI///8B8 + ///FhP//x4f//8WE///Ym///5qn///DB///+4///9Mf//+Sl//zgo//u2qf/9fX1//X19f+9vr7/9PT0 + //P09P/7+fb/iISB/wAAACYAAAANioaE9v///////////////8bGxv/19fX/9fX1/++jVv//r1v//61Z + //+tWv//r13//7Rk//+2af//sl///8qI///ywf//9cP////o///1xP//35P//t6U/+7TlP/19fX/9fX1 + /72+vv/09PT/9PP0//v59v+IhIH/AAAAJgAAAA2KhoT2////////////////xsbF//X19f/19fX/6ZdC + /++bRf/vm0X/75tF/++aRf/vnEf/751I/++aRf/voVD/77t0/+/RlP/v36z/7tWU/+7hrP/t47j/69un + //X19f/19fX/vr6+//X09P/09fT/+/n2/4iEgf8AAAAmAAAADYqGhPb////////////////Gxsb/9fX1 + //X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1 + //X19f/19fX/9fX1//X19f++vr7/9fX1//T09f/7+fb/iISB/wAAACYAAAANioaE9v////////////// + /8bGxv/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1 + //X19f/19fX/9fX1//X19f/19fX/9fX1/7++vv/19fX/9PX1//v59v+IhIH/AAAAJgAAAA2LhoT2//// + ////////////xsbG/8XExf/GxsX/xMXF/8XFxf/Dw8T/xcTE/8PDw//ExMT/w8PD/8TDxP/DwsL/w8PC + /8HBwv/CwsH/wcHB/8HBwf/AwcD/wMHA/8C/v//AwL//wL+///b29f/19fX/+/n2/4iEgf8AAAAmAAAA + DY6KiPbLycf/y8nH/8vJx//Lycf/y8nH/8vJx//Lycf/y8nH/8vJx//Lycf/y8nH/8vJx//Lycf/y8nH + /8vJx//Lycf/zMrJ/83Lyv/NzMr/zczK/83Lyf/Mysj/zMrI/8vJx//Lycf/y8nH/8vJx//Lycf/iISB + /wAAACMAAAALi4mH/ube2P/f19H/3tfR/97X0f/e19H/3tfR/97X0f/e19H/3tfR/97X0f/e19H/3tfR + /97X0f/e19H/3tfR/97X0f/e19H/3tfR/97X0f/e19H/3tfR/97X0f+ReWj/3tfR/5F5aP/e19H/kXlo + /97X0f+IhIH/AAAAFgAAAAaRjIl8iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB/4iEgf+IhIH/iISB + /4iEgf+IhIH/iISB/4uGhIEAAAAGAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////ygAAAAQAAAAIAAA + AAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAACXko//l5KP/5eSj/+Xko//l5KP/5eSj/+Xko//l5KP + /5eSj/+Xko//l5KP/5eSj/+Xko//l5KP/5eSj/+Xko//l5KP//79/v/9/P3/+/v7//r6+f/4+fj/9/f3 + //X29v/19PT/8/Pz//Ly8v/x8fH/8PDw//Dw8P/w8PD/l5KP/5eSj//+/v7//f39/7W1tv+ysrL/srKy + /7Kysv+ysrL/srKy/7Kysv+ysrL/srKy/7Kysv/w8PD/8PDw/5eSj/+Xko////7///7+/v+ysrL/8fHx + //Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f+ysrL/8fDx//Dw8P+Xko//l5KP///////+/v7/srKy + //Pz8//Bgzn/0ZZY/9Gsdv/SsHz/17iI/+y7jP/z8/P/srKy//Dw8f/w8PD/l5KP/5eSj//////////+ + /7Kysv/29vb/Z1gj/3tuMv+PiUv/npdZ/7i1gP/su4z/9vb2/7Kysv/y8fH/8PDx/5eSj/+Xko////// + //////+ysrL/+Pj4/2eBVP+pv5P/2enN//ncqv/w8dj//+q0//j4+P+ysrL/8vLy//Hx8f+Xko//l5KP + ////////////srKy//r6+v/q5sX/9MqR//TDhP//4a3//+q0/+PKof/6+vr/srKy//Py8v/x8fL/l5KP + /5eSj////////////7Kysv/8/Pz//4kw//eNN//hlkn/4aJa/+7DiP/ksHD//Pz8/7Kysv/z9PP/8vPy + /5eSj/+Xko////////////+ysrL//v39//79/f/+/f3//v39//79/f/+/f3//v39//79/f+ysrL/9PT0 + //Pz8/+Xko//l5KP/83Myv/NzMr/srKy/7Kysv+ysrL/srKy/7Kysv+ysrL/srKy/7Kysv+ysrL/srKy + /83Myv/NzMr/l5KP/5eSj//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0//g2dP/4NnT/+DZ0/+ReWj/4NnT + /5F5aP/g2dP/kXlo/5eSj/+Xko//l5KP/5eSj/+Xko//l5KP/5eSj/+Xko//l5KP/5eSj/+Xko//l5KP + /5eSj/+Xko//l5KP/5eSj/+Xko//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA//8AAA== + + + \ No newline at end of file diff --git a/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/ThumbnailBrowser.vb b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/ThumbnailBrowser.vb new file mode 100644 index 00000000..011fda0b --- /dev/null +++ b/source/Samples/Shell/ShellThumbnailBrowserDemo/VB/ThumbnailBrowserDemo/ThumbnailBrowser.vb @@ -0,0 +1,339 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.Shell +Imports Microsoft.WindowsAPICodePack.Dialogs +Imports Microsoft.WindowsAPICodePack.Controls + +Namespace Microsoft.WindowsAPICodePack.Samples.ThumbnailBrowserDemo + Partial Public Class ThumbnailBrowser + Inherits Form + ''' + ''' Different views the picture browser supports + ''' + Private Enum Views + Small + Medium + Large + ExtraLarge + End Enum + + ''' + ''' Preview mode (thumbnails or icons) + ''' + Private Enum Mode + ThumbnailOrIcon + ThumbnailOnly + IconOnly + End Enum + + ''' + ''' Our current view (defaults to Views.Large) + ''' + Private currentView As Views = Views.Large + + ''' + ''' Our current mode (defaults to Thumbnail view) + ''' + Private currentMode As Mode = Mode.ThumbnailOrIcon + + ''' + ''' Our current ShellObject. + ''' + Private currentItem As ShellObject = Nothing + + ''' + ''' If the user checks the "do not show.." checkbox, then don't display + ''' the error dialog again. + ''' + Private showErrorTaskDialog As Boolean = True + + ''' + ''' This is the state what we should be doing if the user gets the error. + ''' By default change the mode. + ''' + Private onErrorChangeMode As Boolean = True + + ''' + ''' Task dialog to be shown to the user when error occurs. + ''' + Private td As TaskDialog = Nothing + + Public Sub New() + InitializeComponent() + + ' Set some ExplorerBrowser properties + explorerBrowser1.ContentOptions.SingleSelection = True + explorerBrowser1.ContentOptions.ViewMode = ExplorerBrowserViewMode.List + explorerBrowser1.NavigationOptions.PaneVisibility.Navigation = PaneVisibilityState.Hide + explorerBrowser1.NavigationOptions.PaneVisibility.CommandsView = PaneVisibilityState.Hide + explorerBrowser1.NavigationOptions.PaneVisibility.CommandsOrganize = PaneVisibilityState.Hide + explorerBrowser1.NavigationOptions.PaneVisibility.Commands = PaneVisibilityState.Hide + + ' set our initial state CurrentView == large + toolStripSplitButton1.Image = My.Resources.large + smallToolStripMenuItem.Checked = False + mediumToolStripMenuItem.Checked = False + largeToolStripMenuItem.Checked = True + extraLargeToolStripMenuItem.Checked = False + + ' + comboBox1.SelectedIndex = 0 + + ' + AddHandler explorerBrowser1.SelectionChanged, AddressOf explorerBrowser1_SelectionChanged + + ' Create our Task Dialog for displaying the error to the user + ' when they are asking for Thumbnail Only and the selected item doesn't have a thumbnail. + td = New TaskDialog() + td.OwnerWindowHandle = Me.Handle + td.InstructionText = "Error displaying thumbnail" + td.Text = "The selected item does not have a thumbnail and you have selected the viewing mode to be thumbnail only. Please select one of the following options:" + td.StartupLocation = TaskDialogStartupLocation.CenterOwner + td.Icon = TaskDialogStandardIcon.Error + td.Cancelable = True + td.FooterCheckBoxText = "Do not show this dialog again" + td.FooterCheckBoxChecked = False + + Dim button1 As New TaskDialogCommandLink("changeModeButton", "Change mode to Thumbnail Or Icon", "Change the viewing mode to Thumbnail or Icon. If the selected item does not have a thumbnail, it's associated icon will be displayed.") + AddHandler button1.Click, AddressOf button1_Click + + Dim button2 As New TaskDialogCommandLink("noChangeButton", "Keep the current mode", "Keep the currently selected mode (Thumbnail Only). If the current mode is Thumbnail Only and the selected item does not have a thumbnail, nothing will be shown in the preview panel.") + AddHandler button2.Click, AddressOf button2_Click + + td.Controls.Add(button1) + td.Controls.Add(button2) + + End Sub + + Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) + onErrorChangeMode = True + td.Close(TaskDialogResult.Ok) + End Sub + + Private Sub button2_Click(ByVal sender As Object, ByVal e As EventArgs) + onErrorChangeMode = False + td.Close(TaskDialogResult.Ok) + End Sub + + Private Sub explorerBrowser1_SelectionChanged(ByVal sender As Object, ByVal e As EventArgs) + If Me.explorerBrowser1.SelectedItems IsNot Nothing AndAlso Me.explorerBrowser1.SelectedItems.Count = 1 Then + ' Set our new current item + currentItem = explorerBrowser1.SelectedItems(0) + + ' Update preview + UpdatePreview() + End If + End Sub + + ''' + ''' Updates the thumbnail preview for currently selected item and current view + ''' + Private Sub UpdatePreview() + If currentItem IsNot Nothing Then + ' Set the appropiate FormatOption + If currentMode = Mode.ThumbnailOrIcon Then + currentItem.Thumbnail.FormatOption = ShellThumbnailFormatOption.Default + ElseIf currentMode = Mode.ThumbnailOnly Then + currentItem.Thumbnail.FormatOption = ShellThumbnailFormatOption.ThumbnailOnly + Else + currentItem.Thumbnail.FormatOption = ShellThumbnailFormatOption.IconOnly + End If + + ' Get the correct bitmap + Try + If currentView = Views.Small Then + pictureBox1.Image = currentItem.Thumbnail.SmallBitmap + ElseIf currentView = Views.Medium Then + pictureBox1.Image = currentItem.Thumbnail.MediumBitmap + ElseIf currentView = Views.Large Then + pictureBox1.Image = currentItem.Thumbnail.LargeBitmap + ElseIf currentView = Views.ExtraLarge Then + pictureBox1.Image = currentItem.Thumbnail.ExtraLargeBitmap + End If + Catch e1 As NotSupportedException + Dim tdThumbnailHandlerError As New TaskDialog() + tdThumbnailHandlerError.Caption = "Error getting the thumbnail" + tdThumbnailHandlerError.InstructionText = "The selected file does not have a valid thumbnail or thumbnail handler." + tdThumbnailHandlerError.Icon = TaskDialogStandardIcon.Error + tdThumbnailHandlerError.StandardButtons = TaskDialogStandardButtons.Ok + tdThumbnailHandlerError.Show() + Catch e2 As InvalidOperationException + If currentMode = Mode.ThumbnailOnly Then + ' If we get an InvalidOperationException and our mode is Mode.ThumbnailOnly, + ' then we have a ShellItem that doesn't have a thumbnail (icon only). + ' Let the user know this and if they want, change the mode. + If showErrorTaskDialog Then + Dim tdr As TaskDialogResult = td.Show() + + showErrorTaskDialog = Not td.FooterCheckBoxChecked.Value + End If + + ' If the user picked the first option, change the mode... + If onErrorChangeMode Then + ' Change the mode to ThumbnailOrIcon + comboBox1.SelectedIndex = 0 + UpdatePreview() + Else ' else, ignore and display nothing. + pictureBox1.Image = Nothing + End If + Else + pictureBox1.Image = Nothing + End If + End Try + Else + pictureBox1.Image = Nothing + End If + End Sub + + Private Sub browseLocationButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles browseLocationButton.Click + ' Create a new CommonOpenFileDialog to allow users to select a folder/library + Dim cfd As New CommonOpenFileDialog() + + ' Set options to allow libraries and non filesystem items to be selected + cfd.IsFolderPicker = True + cfd.AllowNonFileSystemItems = True + + ' Show the dialog + Dim result As CommonFileDialogResult = cfd.ShowDialog() + + ' if the user didn't cancel + If result = CommonFileDialogResult.OK Then + ' Update the location on the ExplorerBrowser + Dim resultItem As ShellObject = cfd.FileAsShellObject + explorerBrowser1.Navigate(resultItem) + End If + End Sub + + Private Sub toolStripSplitButton1_ButtonClick(ByVal sender As Object, ByVal e As EventArgs) Handles toolStripSplitButton1.ButtonClick + ToggleViews() + End Sub + + ''' + ''' Toggle the different views for the thumbnail image. + ''' Includes: Small, Medium, Large (default), and Extra Large. + ''' + Private Sub ToggleViews() + ' Toggle the views + ' Update our current view, as well as the image shown + ' on the "Views" menu. + + If currentView = Views.Small Then + currentView = Views.Medium + toolStripSplitButton1.Image = My.Resources.medium + smallToolStripMenuItem.Checked = False + mediumToolStripMenuItem.Checked = True + largeToolStripMenuItem.Checked = False + extraLargeToolStripMenuItem.Checked = False + ElseIf currentView = Views.Medium Then + currentView = Views.Large + toolStripSplitButton1.Image = My.Resources.large + smallToolStripMenuItem.Checked = False + mediumToolStripMenuItem.Checked = False + largeToolStripMenuItem.Checked = True + extraLargeToolStripMenuItem.Checked = False + ElseIf currentView = Views.Large Then + currentView = Views.ExtraLarge + toolStripSplitButton1.Image = My.Resources.extralarge + smallToolStripMenuItem.Checked = False + mediumToolStripMenuItem.Checked = False + largeToolStripMenuItem.Checked = False + extraLargeToolStripMenuItem.Checked = True + ElseIf currentView = Views.ExtraLarge Then + currentView = Views.Small + toolStripSplitButton1.Image = My.Resources.small + smallToolStripMenuItem.Checked = True + mediumToolStripMenuItem.Checked = False + largeToolStripMenuItem.Checked = False + extraLargeToolStripMenuItem.Checked = False + End If + + ' Update the image + UpdatePreview() + End Sub + + Private Sub smallToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles smallToolStripMenuItem.Click + ' Update current view + currentView = Views.Small + + ' Update the menu item states + smallToolStripMenuItem.Checked = True + mediumToolStripMenuItem.Checked = False + largeToolStripMenuItem.Checked = False + extraLargeToolStripMenuItem.Checked = False + + ' Update the main splitbutton image + toolStripSplitButton1.Image = My.Resources.small + + ' Update the image + UpdatePreview() + End Sub + + Private Sub mediumToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles mediumToolStripMenuItem.Click + ' Update current view + currentView = Views.Medium + + ' Update the menu item states + smallToolStripMenuItem.Checked = False + mediumToolStripMenuItem.Checked = True + largeToolStripMenuItem.Checked = False + extraLargeToolStripMenuItem.Checked = False + + ' Update the main splitbutton image + toolStripSplitButton1.Image = My.Resources.medium + + ' Update the image + UpdatePreview() + End Sub + + Private Sub largeToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles largeToolStripMenuItem.Click + ' Update current view + currentView = Views.Large + + ' Update the menu item states + smallToolStripMenuItem.Checked = False + mediumToolStripMenuItem.Checked = False + largeToolStripMenuItem.Checked = True + extraLargeToolStripMenuItem.Checked = False + + ' Update the main splitbutton image + toolStripSplitButton1.Image = My.Resources.large + + ' Update the image + UpdatePreview() + End Sub + + Private Sub extraLargeToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles extraLargeToolStripMenuItem.Click + ' Update current view + currentView = Views.ExtraLarge + + ' Update the menu item states + smallToolStripMenuItem.Checked = False + mediumToolStripMenuItem.Checked = False + largeToolStripMenuItem.Checked = False + extraLargeToolStripMenuItem.Checked = True + + ' Update the main splitbutton image + toolStripSplitButton1.Image = My.Resources.extralarge + + ' Update the image + UpdatePreview() + + End Sub + + Private Sub comboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles comboBox1.SelectedIndexChanged + If comboBox1.SelectedIndex = 0 Then + currentMode = Mode.ThumbnailOrIcon + ElseIf comboBox1.SelectedIndex = 1 Then + currentMode = Mode.ThumbnailOnly + Else + currentMode = Mode.IconOnly + End If + + UpdatePreview() + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/App.xaml b/source/Samples/Shell/StarBackupUsingLibraries/CS/App.xaml new file mode 100644 index 00000000..9f3632d5 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/App.xaml @@ -0,0 +1,5 @@ + + + diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/BackupProcessPage.xaml b/source/Samples/Shell/StarBackupUsingLibraries/CS/BackupProcessPage.xaml new file mode 100644 index 00000000..c503ddff --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/BackupProcessPage.xaml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/BackupProcessPage.xaml.cs b/source/Samples/Shell/StarBackupUsingLibraries/CS/BackupProcessPage.xaml.cs new file mode 100644 index 00000000..2418408a --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/BackupProcessPage.xaml.cs @@ -0,0 +1,188 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Threading; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Navigation; +using Microsoft.WindowsAPICodePack.Shell; + +namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample +{ + public partial class BackupProcessPage : PageFunction + { + private IEnumerable backupList; + private BackgroundWorker bw; + + public BackupProcessPage(IEnumerable list) + { + InitializeComponent(); + + // The list of folders from the previous page + backupList = list; + + // Add the list of folders to our listbox. This won't actually start the backup + UpdateList(backupList); + + // Create a BackgroundBorker thread to do the actual backup + bw = new BackgroundWorker(); + bw.WorkerReportsProgress = true; + bw.WorkerSupportsCancellation = true; + bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged); + bw.DoWork += new DoWorkEventHandler(bw_DoWork); + bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted); + bw.RunWorkerAsync(); + } + + /// + /// Gets called when the actual backup process is completed. + /// + /// + /// + void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + // if finished, change button text to done. + if (!e.Cancelled) + buttonStopBackup.Content = "Backup Done!"; + else + buttonStopBackup.Content = "Backup Cancelled!"; + + // Disable the start backup button as files are already backed up. + buttonStopBackup.IsEnabled = false; + } + + /// + /// The method that does the real work. + /// + /// + /// + void bw_DoWork(object sender, DoWorkEventArgs e) + { + // Our counter for the folder that we are currently backing up + int current = 1; + + // Loop through all the items and back each folder up + // Since the item is just a string path, we could create a ShellFolder (using ShellFolder.FromPath) + // and then enumerate all the subitems in that folder. + foreach (ListBoxItem lbi in listBox1.Items) + { + // If user has requested a cancel, set our event arg + if (((BackgroundWorker)sender).CancellationPending) + e.Cancel = true; + else + { + // Do a fake copy/backup of folder ... + + // Sleep two seconds + Thread.Sleep(2000); + + // Once the copy has been done, report progress back to the Background Worker. + // This could be used for a ProgressBar, or in our case, show "check" icon next + // to each folder that was backed up. + ((BackgroundWorker)sender).ReportProgress((current / listBox1.Items.Count) * 100, lbi); + + // Increment our counter for folders. + current++; + } + } + } + + /// + /// When each folder is backed up, some progress is reported. This method will get called each time. + /// + /// + /// + void bw_ProgressChanged(object sender, ProgressChangedEventArgs e) + { + // The item we get passed in is the actual ListBoxItem + // (contains the StackPanel and label for the folder name) + ListBoxItem lbi = e.UserState as ListBoxItem; + + if (lbi != null) + { + // Get the stack panel so we can get to it's contents + StackPanel sp = lbi.Content as StackPanel; + + if (sp != null) + { + // Get the image control and set our checked state. + Image img = sp.Children[0] as Image; + if (img != null) + img.Source = StarBackupHelper.ConvertGDI_To_WPF(Properties.Resources.Check); + } + + // Select the item and make sure its in view. This will give good feedback to the user + // as we are going down the list and performing some operation on the items. + listBox1.SelectedItem = lbi; + listBox1.ScrollIntoView(lbi); + } + } + + /// + /// Goes through the list of folders to backup and adds each folder name (and an empty image control) + /// to the listbox. + /// + /// + private void UpdateList(IEnumerable backupList) + { + listBox1.Items.Clear(); + + foreach (object item in backupList) + { + // Start creating our listbox items.. + ListBoxItem lbi = new ListBoxItem(); + + // Create a stackpanel to hold our image and textblock + StackPanel sp = new StackPanel(); + sp.Orientation = Orientation.Horizontal; + Image img = new Image(); + TextBlock tb = new TextBlock(); + tb.Margin = new Thickness(3); + tb.Text = item.ToString(); + sp.Children.Add(img); + sp.Children.Add(tb); + + // Set the StackPanel as the content of the listbox Item. + lbi.Content = sp; + + // + listBox1.Items.Add(lbi); + } + } + + /// + /// + /// + /// + /// + public void wizardPage_Return(object sender, ReturnEventArgs e) + { + CancelBackup(); + + // If returning, wizard was completed (finished or canceled), + // so continue returning to calling page + OnReturn(e); + } + + /// + /// + /// + /// + /// + private void buttonStopBackup_Click(object sender, RoutedEventArgs e) + { + CancelBackup(); + } + + /// + /// Cancel the backup operation + /// + private void CancelBackup() + { + bw.CancelAsync(); + buttonStopBackup.IsEnabled = false; + } + } +} \ No newline at end of file diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/Icons/BackupRestore.ico b/source/Samples/Shell/StarBackupUsingLibraries/CS/Icons/BackupRestore.ico new file mode 100644 index 00000000..2e116a58 Binary files /dev/null and b/source/Samples/Shell/StarBackupUsingLibraries/CS/Icons/BackupRestore.ico differ diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/MainWindow.xaml b/source/Samples/Shell/StarBackupUsingLibraries/CS/MainWindow.xaml new file mode 100644 index 00000000..39c2a52b --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/MainWindow.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/MainWindow.xaml.cs b/source/Samples/Shell/StarBackupUsingLibraries/CS/MainWindow.xaml.cs new file mode 100644 index 00000000..25eac9e0 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/MainWindow.xaml.cs @@ -0,0 +1,34 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample +{ + using System; + using System.Windows; + + public partial class MainWindow : Window + { + public MainWindow() + { + InitializeComponent(); + + WizardDialogBox wizard = new WizardDialogBox(); + bool dialogResult = (bool)wizard.ShowDialog(); + + if (dialogResult == true) + { + + } + else + { + + } + + // shutdown + Application.Current.Shutdown(); + } + + void runWizardButton_Click(object sender, RoutedEventArgs e) + { + } + } +} \ No newline at end of file diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/Properties/AssemblyInfo.cs b/source/Samples/Shell/StarBackupUsingLibraries/CS/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..48b65dd0 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Star Backup")] +[assembly: AssemblyDescription("Star Backup Demo")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("fca64848-d81d-4f5a-89fb-01c3c7f4a855")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/Properties/Resources.Designer.cs b/source/Samples/Shell/StarBackupUsingLibraries/CS/Properties/Resources.Designer.cs new file mode 100644 index 00000000..7e93996b --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/Properties/Resources.Designer.cs @@ -0,0 +1,84 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.WindowsAPICodePack.Samples.StarBackupSample.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.Drawing.Bitmap Backup { + get { + object obj = ResourceManager.GetObject("Backup", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap Check { + get { + object obj = ResourceManager.GetObject("Check", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + internal static System.Drawing.Bitmap Restore { + get { + object obj = ResourceManager.GetObject("Restore", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/Properties/Resources.resx b/source/Samples/Shell/StarBackupUsingLibraries/CS/Properties/Resources.resx new file mode 100644 index 00000000..70b7c445 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/Properties/Resources.resx @@ -0,0 +1,2334 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + TkSuQmCC + + + + + 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 + ASfGYDlN57g4AAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/StarBackup.sln b/source/Samples/Shell/StarBackupUsingLibraries/CS/StarBackup.sln new file mode 100644 index 00000000..d4891829 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/StarBackup.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StarBackupUsingLibraries", "StarBackupUsingLibraries.csproj", "{709ECE68-5107-4C42-8A92-AD9A79EAC07E}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/StarBackupHelper.cs b/source/Samples/Shell/StarBackupUsingLibraries/CS/StarBackupHelper.cs new file mode 100644 index 00000000..4a36c21d --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/StarBackupHelper.cs @@ -0,0 +1,62 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows; +using System.Windows.Media; +using System.Windows.Media.Imaging; + +namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample +{ + public static class StarBackupHelper + { + /// + /// Convert GDI bitmap into a WPF BitmapSource + /// + /// + /// + /// + /// + public static BitmapSource ConvertGDI_To_WPF(System.Drawing.Bitmap bmp) + { + BitmapSource bms = null; + if (bmp != null) + { + IntPtr h_bm = bmp.GetHbitmap(); + bms = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(h_bm, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()); + } + return bms; + } + + /// + /// Resize a given image using the new width/height + /// + /// + /// + /// + /// + public static ImageSource CreateResizedImage(ImageSource source, int width, int height) + { + // Target Rect for the resize operation + Rect rect = new Rect(0, 0, width, height); + + // Create a DrawingVisual/Context to render with + DrawingVisual drawingVisual = new DrawingVisual(); + using (DrawingContext drawingContext = drawingVisual.RenderOpen()) + { + drawingContext.DrawImage(source, rect); + } + + // Use RenderTargetBitmap to resize the original image + RenderTargetBitmap resizedImage = new RenderTargetBitmap( + (int)rect.Width, (int)rect.Height, // Resized dimensions + 96, 96, // Default DPI values + PixelFormats.Default); // Default pixel format + resizedImage.Render(drawingVisual); + + // Return the resized image + return resizedImage; + } + + + } +} diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/StarBackupMain.xaml b/source/Samples/Shell/StarBackupUsingLibraries/CS/StarBackupMain.xaml new file mode 100644 index 00000000..fbfd32ef --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/StarBackupMain.xaml @@ -0,0 +1,20 @@ + + + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/StarBackupMain.xaml.cs b/source/Samples/Shell/StarBackupUsingLibraries/CS/StarBackupMain.xaml.cs new file mode 100644 index 00000000..f5ad0331 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/StarBackupMain.xaml.cs @@ -0,0 +1,50 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Windows; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; + +namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample +{ + public partial class StarBackupMain : PageFunction + { + public StarBackupMain() + { + InitializeComponent(); + + // Images for the command link buttons + BitmapSource backupBitmapSource = StarBackupHelper.ConvertGDI_To_WPF(Properties.Resources.Backup); + BitmapSource restoreBitmapSource = StarBackupHelper.ConvertGDI_To_WPF(Properties.Resources.Restore); + + commandLink1.Icon = StarBackupHelper.CreateResizedImage(backupBitmapSource, 32, 32); + commandLink2.Icon = StarBackupHelper.CreateResizedImage(restoreBitmapSource, 32, 32); + + } + + void cancelButton_Click(object sender, RoutedEventArgs e) + { + // Cancel the wizard and don't return any data + OnReturn(new ReturnEventArgs(WizardResult.Canceled)); + } + + public void wizardPage_Return(object sender, ReturnEventArgs e) + { + // If returning, wizard was completed (finished or canceled), + // so continue returning to calling page + OnReturn(e); + } + + void BackupClicked(object sender, RoutedEventArgs e) + { + // Go to next wizard page + StartBackupPage backupPage = new StartBackupPage(); + backupPage.Return += new ReturnEventHandler(wizardPage_Return); + this.NavigationService.Navigate(backupPage); + } + + void RestoreClicked(object sender, RoutedEventArgs e) + { + MessageBox.Show("Backup application example: This will perform the restore operation in a real backup application.", "Star Backup Wizard"); + } + } +} \ No newline at end of file diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/StarBackupUsingLibraries.csproj b/source/Samples/Shell/StarBackupUsingLibraries/CS/StarBackupUsingLibraries.csproj new file mode 100644 index 00000000..ce28a752 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/StarBackupUsingLibraries.csproj @@ -0,0 +1,164 @@ + + + + Debug + AnyCPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E} + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Microsoft.WindowsAPICodePack.Samples.StarBackupSample + StarBackup + 4 + winexe + 1.0.0.* + + false + 3.0 + v3.5 + + + + + 3.5 + Icons\BackupRestore.ico + + + + + + + true + full + false + .\bin\Debug\ + DEBUG;TRACE + AllRules.ruleset + + + false + true + .\bin\Release\ + TRACE + AllRules.ruleset + + + + 3.0 + + + + 3.0 + + + + 3.0 + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + MSBuild:Compile + Designer + + + BackupProcessPage.xaml + Code + + + commandlinkwpf.xaml + Code + + + + True + True + Resources.resx + + + + MainWindow.xaml + Code + + + StarBackupMain.xaml + Code + + + StartBackupPage.xaml + Code + + + WizardDialogBox.xaml + Code + + + Code + + + + + + + + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/StartBackupPage.xaml b/source/Samples/Shell/StarBackupUsingLibraries/CS/StartBackupPage.xaml new file mode 100644 index 00000000..2fb41c98 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/StartBackupPage.xaml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/StartBackupPage.xaml.cs b/source/Samples/Shell/StarBackupUsingLibraries/CS/StartBackupPage.xaml.cs new file mode 100644 index 00000000..80c6f276 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/StartBackupPage.xaml.cs @@ -0,0 +1,86 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Navigation; +using Microsoft.WindowsAPICodePack.Shell; +using System.Collections.Generic; +using System.Collections; +using Microsoft.WindowsAPICodePack.Dialogs; + +namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample +{ + public partial class StartBackupPage : PageFunction + { + public StartBackupPage() + { + InitializeComponent(); + } + + void cancelButton_Click(object sender, RoutedEventArgs e) + { + // Cancel the wizard and don't return any data + OnReturn(new ReturnEventArgs(WizardResult.Canceled)); + } + + public void wizardPage_Return(object sender, ReturnEventArgs e) + { + // If returning, wizard was completed (finished or canceled), + // so continue returning to calling page + OnReturn(e); + } + + private void buttonAddFolders_Click(object sender, RoutedEventArgs e) + { + // Show an Open File Dialog + CommonOpenFileDialog cfd = new CommonOpenFileDialog(); + + // Allow users to select folders and non-filesystem items such as Libraries + cfd.AllowNonFileSystemItems = true; + cfd.IsFolderPicker = true; + + // MultiSelect = true will allow mutliple selection of folders/libraries. + cfd.Multiselect = true; + + if (cfd.ShowDialog() == CommonFileDialogResult.Ok) + { + ICollection items = cfd.FilesAsShellObject; + + foreach (ShellObject item in items) + { + // If it's a library, need to add the actual folders (scopes) + if (item is ShellLibrary) + { + foreach (ShellFileSystemFolder folder in ((ShellLibrary)item)) + listBox1.Items.Add(folder.Path); + } + else if (item is ShellFileSystemFolder) + { + // else, just add it... + listBox1.Items.Add(((ShellFileSystemFolder)item).Path); + } + else + { + // For unsupported locations, display an error message. + // The above code could be expanded to backup Known Folders that are not virtual, + // Search Folders, etc. + MessageBox.Show(string.Format("The {0} folder was skipped because it cannot be backed up.", item.Name), "Star Backup"); + } + } + } + + // If we added something, Enable the "Start Backup" button + if (listBox1.Items.Count > 0) + buttonStartBackup.IsEnabled = true; + } + + private void buttonStartBackup_Click(object sender, RoutedEventArgs e) + { + // Go to next wizard page (Processing or doing the actual backup) + BackupProcessPage processPage = new BackupProcessPage(listBox1.Items); + processPage.Return += new ReturnEventHandler(wizardPage_Return); + this.NavigationService.Navigate(processPage); + } + } +} diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/Wizard/WizardDialogBox.xaml b/source/Samples/Shell/StarBackupUsingLibraries/CS/Wizard/WizardDialogBox.xaml new file mode 100644 index 00000000..4e16c7f5 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/Wizard/WizardDialogBox.xaml @@ -0,0 +1,7 @@ + + + diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/Wizard/WizardDialogBox.xaml.cs b/source/Samples/Shell/StarBackupUsingLibraries/CS/Wizard/WizardDialogBox.xaml.cs new file mode 100644 index 00000000..c733c2fb --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/Wizard/WizardDialogBox.xaml.cs @@ -0,0 +1,30 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows; +using System.Windows.Navigation; + +namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample +{ + public partial class WizardDialogBox : NavigationWindow + { + public WizardDialogBox() + { + InitializeComponent(); + + // Launch the wizard + WizardLauncher wizardLauncher = new WizardLauncher(); + wizardLauncher.WizardReturn += new WizardReturnEventHandler(wizardLauncher_WizardReturn); + this.Navigate(wizardLauncher); + } + + void wizardLauncher_WizardReturn(object sender, WizardReturnEventArgs e) + { + // Handle wizard return + if (this.DialogResult == null) + { + this.DialogResult = (e.Result == WizardResult.Finished); + } + } + } +} diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/Wizard/WizardLauncher.cs b/source/Samples/Shell/StarBackupUsingLibraries/CS/Wizard/WizardLauncher.cs new file mode 100644 index 00000000..efe8ab40 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/Wizard/WizardLauncher.cs @@ -0,0 +1,40 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Navigation; + +namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample +{ + public class WizardLauncher : PageFunction + { + public event WizardReturnEventHandler WizardReturn; + + protected override void Start() + { + base.Start(); + + // So we remember the WizardCompleted event registration + this.KeepAlive = true; + + // Launch the wizard + StarBackupMain StarBackupMain = new StarBackupMain(); + StarBackupMain.Return += new ReturnEventHandler(wizardPage_Return); + this.NavigationService.Navigate(StarBackupMain); + } + + public void wizardPage_Return(object sender, ReturnEventArgs e) + { + // Notify client that wizard has completed + // NOTE: We need this custom event because the Return event cannot be + // registered by window code - if WizardDialogBox registers an event handler with + // the WizardLauncher's Return event, the event is not raised. + if (this.WizardReturn != null) + { + this.WizardReturn(this, new WizardReturnEventArgs(e.Result, null)); + } + OnReturn(null); + } + } +} diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/Wizard/WizardResult.cs b/source/Samples/Shell/StarBackupUsingLibraries/CS/Wizard/WizardResult.cs new file mode 100644 index 00000000..6f9fff60 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/Wizard/WizardResult.cs @@ -0,0 +1,12 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; + +namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample +{ + public enum WizardResult + { + Finished, + Canceled + } +} diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/Wizard/WizardReturnEventArgs.cs b/source/Samples/Shell/StarBackupUsingLibraries/CS/Wizard/WizardReturnEventArgs.cs new file mode 100644 index 00000000..39e9bf85 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/Wizard/WizardReturnEventArgs.cs @@ -0,0 +1,30 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Text; + +namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample +{ + public class WizardReturnEventArgs + { + WizardResult result; + object data; + + public WizardReturnEventArgs(WizardResult result, object data) + { + this.result = result; + this.data = data; + } + + public WizardResult Result + { + get { return this.result; } + } + + public object Data + { + get { return this.data; } + } + } +} diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/Wizard/WizardReturnEventHandler.cs b/source/Samples/Shell/StarBackupUsingLibraries/CS/Wizard/WizardReturnEventHandler.cs new file mode 100644 index 00000000..885f8c36 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/Wizard/WizardReturnEventHandler.cs @@ -0,0 +1,9 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Navigation; + +namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample +{ + public delegate void WizardReturnEventHandler(object sender, WizardReturnEventArgs e); +} diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/commandlinkwpf.xaml b/source/Samples/Shell/StarBackupUsingLibraries/CS/commandlinkwpf.xaml new file mode 100644 index 00000000..1c634ea4 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/commandlinkwpf.xaml @@ -0,0 +1,171 @@ + + + + + + + + diff --git a/source/Samples/Shell/StarBackupUsingLibraries/CS/commandlinkwpf.xaml.cs b/source/Samples/Shell/StarBackupUsingLibraries/CS/commandlinkwpf.xaml.cs new file mode 100644 index 00000000..4bd5421b --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/CS/commandlinkwpf.xaml.cs @@ -0,0 +1,107 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Navigation; +using System.Windows.Shapes; +using System.Windows.Input; +using System.ComponentModel; + +namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample +{ + /// + /// Implements a CommandLink button that can be used in WPF user interfaces. + /// + + public partial class CommandLinkWPF : UserControl, INotifyPropertyChanged + { + public CommandLinkWPF() + { + this.DataContext = this; + InitializeComponent(); + this.button.Click += new RoutedEventHandler(button_Click); + } + + void button_Click(object sender, RoutedEventArgs e) + { + e.Source = this; + if (Click != null) + Click(sender, e); + } + + RoutedUICommand command; + + public RoutedUICommand Command + { + get { return command; } + set { command = value; } + } + + public event RoutedEventHandler Click; + + private string link; + + public string Link + { + get { return link; } + set + { + link = value; + + if (PropertyChanged != null) + { + PropertyChanged(this, new PropertyChangedEventArgs("Link")); + } + } + } + private string note; + + public string Note + { + get { return note; } + set + { + note = value; + if (PropertyChanged != null) + { + PropertyChanged(this, new PropertyChangedEventArgs("Note")); + } + } + } + private ImageSource icon; + + public ImageSource Icon + { + get { return icon; } + set + { + icon = value; + if (PropertyChanged != null) + { + PropertyChanged(this, new PropertyChangedEventArgs("Icon")); + } + } + } + + public bool? IsCheck + { + get + { + return button.IsChecked; + } + set { button.IsChecked = value; } + } + + + #region INotifyPropertyChanged Members + + public event PropertyChangedEventHandler PropertyChanged; + + #endregion + } +} \ No newline at end of file diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/Application.xaml b/source/Samples/Shell/StarBackupUsingLibraries/VB/Application.xaml new file mode 100644 index 00000000..9f3632d5 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/Application.xaml @@ -0,0 +1,5 @@ + + + diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/BackupProcessPage.xaml b/source/Samples/Shell/StarBackupUsingLibraries/VB/BackupProcessPage.xaml new file mode 100644 index 00000000..c503ddff --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/BackupProcessPage.xaml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/BackupProcessPage.xaml.vb b/source/Samples/Shell/StarBackupUsingLibraries/VB/BackupProcessPage.xaml.vb new file mode 100644 index 00000000..dd17f889 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/BackupProcessPage.xaml.vb @@ -0,0 +1,178 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Collections +Imports System.Collections.Generic +Imports System.ComponentModel +Imports System.Threading +Imports System.Windows +Imports System.Windows.Controls +Imports System.Windows.Navigation +Imports Microsoft.WindowsAPICodePack.Shell + +Namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample + Partial Public Class BackupProcessPage + Inherits PageFunction(Of WizardResult) + Private backupList As IEnumerable + Private bw As BackgroundWorker + + Public Sub New(ByVal list As IEnumerable) + InitializeComponent() + + ' The list of folders from the previous page + backupList = list + + ' Add the list of folders to our listbox. This won't actually start the backup + UpdateList(backupList) + + ' Create a BackgroundBorker thread to do the actual backup + bw = New BackgroundWorker() + bw.WorkerReportsProgress = True + bw.WorkerSupportsCancellation = True + AddHandler bw.ProgressChanged, AddressOf bw_ProgressChanged + AddHandler bw.DoWork, AddressOf bw_DoWork + AddHandler bw.RunWorkerCompleted, AddressOf bw_RunWorkerCompleted + bw.RunWorkerAsync() + End Sub + + ''' + ''' Gets called when the actual backup process is completed. + ''' + ''' + ''' + Private Sub bw_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) + ' if finished, change button text to done. + If Not e.Cancelled Then + buttonStopBackup.Content = "Backup Done!" + Else + buttonStopBackup.Content = "Backup Cancelled!" + End If + + ' Disable the start backup button as files are already backed up. + buttonStopBackup.IsEnabled = False + End Sub + + ''' + ''' The method that does the real work. + ''' + ''' + ''' + Private Sub bw_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs) + ' Our counter for the folder that we are currently backing up + Dim current As Integer = 1 + + ' Loop through all the items and back each folder up + ' Since the item is just a string path, we could create a ShellFolder (using ShellFolder.FromPath) + ' and then enumerate all the subitems in that folder. + For Each lbi As ListBoxItem In listBox1.Items + ' If user has requested a cancel, set our event arg + If (CType(sender, BackgroundWorker)).CancellationPending Then + e.Cancel = True + Else + ' Do a fake copy/backup of folder ... + + ' Sleep two seconds + Thread.Sleep(2000) + + ' Once the copy has been done, report progress back to the Background Worker. + ' This could be used for a ProgressBar, or in our case, show "check" icon next + ' to each folder that was backed up. + CType(sender, BackgroundWorker).ReportProgress(CInt((current / listBox1.Items.Count) * 100), lbi) + + ' Increment our counter for folders. + current += 1 + End If + Next lbi + End Sub + + ''' + ''' When each folder is backed up, some progress is reported. This method will get called each time. + ''' + ''' + ''' + Private Sub bw_ProgressChanged(ByVal sender As Object, ByVal e As ProgressChangedEventArgs) + ' The item we get passed in is the actual ListBoxItem + ' (contains the StackPanel and label for the folder name) + Dim lbi As ListBoxItem = TryCast(e.UserState, ListBoxItem) + + If lbi IsNot Nothing Then + ' Get the stack panel so we can get to it's contents + Dim sp As StackPanel = TryCast(lbi.Content, StackPanel) + + If sp IsNot Nothing Then + ' Get the image control and set our checked state. + Dim img As Image = TryCast(sp.Children(0), Image) + If img IsNot Nothing Then + img.Source = StarBackupHelper.ConvertGDI_To_WPF(My.Resources.Check) + End If + End If + + ' Select the item and make sure its in view. This will give good feedback to the user + ' as we are going down the list and performing some operation on the items. + listBox1.SelectedItem = lbi + listBox1.ScrollIntoView(lbi) + End If + End Sub + + ''' + ''' Goes through the list of folders to backup and adds each folder name (and an empty image control) + ''' to the listbox. + ''' + ''' + Private Sub UpdateList(ByVal backupList As IEnumerable) + listBox1.Items.Clear() + + For Each item As Object In backupList + ' Start creating our listbox items.. + Dim lbi As New ListBoxItem() + + ' Create a stackpanel to hold our image and textblock + Dim sp As New StackPanel() + sp.Orientation = Orientation.Horizontal + Dim img As New Image() + Dim tb As New TextBlock() + tb.Margin = New Thickness(3) + tb.Text = item.ToString() + sp.Children.Add(img) + sp.Children.Add(tb) + + ' Set the StackPanel as the content of the listbox Item. + lbi.Content = sp + + ' + listBox1.Items.Add(lbi) + Next item + End Sub + + ''' + ''' + ''' + ''' + ''' + Public Sub wizardPage_Return(ByVal sender As Object, ByVal e As ReturnEventArgs(Of WizardResult)) + CancelBackup() + + ' If returning, wizard was completed (finished or canceled), + ' so continue returning to calling page + OnReturn(e) + End Sub + + ''' + ''' + ''' + ''' + ''' + Private Sub buttonStopBackup_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + CancelBackup() + End Sub + + ''' + ''' Cancel the backup operation + ''' + Private Sub CancelBackup() + bw.CancelAsync() + buttonStopBackup.IsEnabled = False + End Sub + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/Icons/BackupRestore.ico b/source/Samples/Shell/StarBackupUsingLibraries/VB/Icons/BackupRestore.ico new file mode 100644 index 00000000..2e116a58 Binary files /dev/null and b/source/Samples/Shell/StarBackupUsingLibraries/VB/Icons/BackupRestore.ico differ diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/MainWindow.xaml b/source/Samples/Shell/StarBackupUsingLibraries/VB/MainWindow.xaml new file mode 100644 index 00000000..39c2a52b --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/MainWindow.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/MainWindow.xaml.vb b/source/Samples/Shell/StarBackupUsingLibraries/VB/MainWindow.xaml.vb new file mode 100644 index 00000000..22d617d9 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/MainWindow.xaml.vb @@ -0,0 +1,31 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows + +Namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample + + Partial Public Class MainWindow + Inherits Window + Public Sub New() + InitializeComponent() + + Dim wizard As New WizardDialogBox() + Dim dialogResult As Boolean = CBool(wizard.ShowDialog()) + + If dialogResult = True Then + + Else + + End If + + ' shutdown + Application.Current.Shutdown() + End Sub + + Private Sub runWizardButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + End Sub + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/My Project/AssemblyInfo.vb b/source/Samples/Shell/StarBackupUsingLibraries/VB/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..0f03f44f --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/My Project/AssemblyInfo.vb @@ -0,0 +1,37 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' + + diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/My Project/Resources.Designer.vb b/source/Samples/Shell/StarBackupUsingLibraries/VB/My Project/Resources.Designer.vb new file mode 100644 index 00000000..fd4a2a79 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/My Project/Resources.Designer.vb @@ -0,0 +1,84 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + Friend ReadOnly Property Backup() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("Backup", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + Friend ReadOnly Property Check() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("Check", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + + Friend ReadOnly Property Restore() As System.Drawing.Bitmap + Get + Dim obj As Object = ResourceManager.GetObject("Restore", resourceCulture) + Return CType(obj,System.Drawing.Bitmap) + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/My Project/Resources.resx b/source/Samples/Shell/StarBackupUsingLibraries/VB/My Project/Resources.resx new file mode 100644 index 00000000..70b7c445 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/My Project/Resources.resx @@ -0,0 +1,2334 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + TkSuQmCC + + + + + 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 + ASfGYDlN57g4AAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/StarBackup.sln b/source/Samples/Shell/StarBackupUsingLibraries/VB/StarBackup.sln new file mode 100644 index 00000000..631e1531 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/StarBackup.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "StarBackupUsingLibraries", "StarBackupUsingLibraries.vbproj", "{709ECE68-5107-4C42-8A92-AD9A79EAC07E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {709ECE68-5107-4C42-8A92-AD9A79EAC07E}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/StarBackupHelper.vb b/source/Samples/Shell/StarBackupUsingLibraries/VB/StarBackupHelper.vb new file mode 100644 index 00000000..e353af39 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/StarBackupHelper.vb @@ -0,0 +1,57 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows +Imports System.Windows.Media +Imports System.Windows.Media.Imaging + +Namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample + Public NotInheritable Class StarBackupHelper + ''' + ''' Convert GDI bitmap into a WPF BitmapSource + ''' + ''' + ''' + ''' + ''' + Private Sub New() + End Sub + Public Shared Function ConvertGDI_To_WPF(ByVal bmp As System.Drawing.Bitmap) As BitmapSource + Dim bms As BitmapSource = Nothing + If bmp IsNot Nothing Then + Dim h_bm As IntPtr = bmp.GetHbitmap() + bms = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(h_bm, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions()) + End If + Return bms + End Function + + ''' + ''' Resize a given image using the new width/height + ''' + ''' + ''' + ''' + ''' + Public Shared Function CreateResizedImage(ByVal source As ImageSource, ByVal width As Integer, ByVal height As Integer) As ImageSource + ' Target Rect for the resize operation + Dim rect As New Rect(0, 0, width, height) + + ' Create a DrawingVisual/Context to render with + Dim drawingVisual As New DrawingVisual() + Using drawingContext As DrawingContext = drawingVisual.RenderOpen() + drawingContext.DrawImage(source, rect) + End Using + + ' Use RenderTargetBitmap to resize the original image + Dim resizedImage As New RenderTargetBitmap(CInt(Fix(rect.Width)), CInt(Fix(rect.Height)), 96, 96, PixelFormats.Default) ' Default pixel format + resizedImage.Render(drawingVisual) + + ' Return the resized image + Return resizedImage + End Function + + + End Class +End Namespace diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/StarBackupMain.xaml b/source/Samples/Shell/StarBackupUsingLibraries/VB/StarBackupMain.xaml new file mode 100644 index 00000000..fbfd32ef --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/StarBackupMain.xaml @@ -0,0 +1,20 @@ + + + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/StarBackupMain.xaml.vb b/source/Samples/Shell/StarBackupUsingLibraries/VB/StarBackupMain.xaml.vb new file mode 100644 index 00000000..a2318cb6 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/StarBackupMain.xaml.vb @@ -0,0 +1,46 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Windows +Imports System.Windows.Media.Imaging +Imports System.Windows.Navigation + +Namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample + Partial Public Class StarBackupMain + Inherits PageFunction(Of WizardResult) + Public Sub New() + InitializeComponent() + + ' Images for the command link buttons + Dim backupBitmapSource As BitmapSource = StarBackupHelper.ConvertGDI_To_WPF(My.Resources.Backup) + Dim restoreBitmapSource As BitmapSource = StarBackupHelper.ConvertGDI_To_WPF(My.Resources.Restore) + + commandLink1.Icon = StarBackupHelper.CreateResizedImage(backupBitmapSource, 32, 32) + commandLink2.Icon = StarBackupHelper.CreateResizedImage(restoreBitmapSource, 32, 32) + + End Sub + + Private Sub cancelButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' Cancel the wizard and don't return any data + OnReturn(New ReturnEventArgs(Of WizardResult)(WizardResult.Canceled)) + End Sub + + Public Sub wizardPage_Return(ByVal sender As Object, ByVal e As ReturnEventArgs(Of WizardResult)) + ' If returning, wizard was completed (finished or canceled), + ' so continue returning to calling page + OnReturn(e) + End Sub + + Private Sub BackupClicked(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' Go to next wizard page + Dim backupPage As New StartBackupPage() + AddHandler backupPage.Return, AddressOf wizardPage_Return + Me.NavigationService.Navigate(backupPage) + End Sub + + Private Sub RestoreClicked(ByVal sender As Object, ByVal e As RoutedEventArgs) + MessageBox.Show("Backup application example: This will perform the restore operation in a real backup application.", "Star Backup Wizard") + End Sub + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/StarBackupUsingLibraries.vbproj b/source/Samples/Shell/StarBackupUsingLibraries/VB/StarBackupUsingLibraries.vbproj new file mode 100644 index 00000000..2de8fe73 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/StarBackupUsingLibraries.vbproj @@ -0,0 +1,201 @@ + + + + Debug + AnyCPU + {BE1CD7DB-FFE0-4317-B975-76CA7D726715} + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + StarBackup + winexe + + 3.0 + v3.5 + On + Binary + Off + On + + + + + 3.5 + Icons\BackupRestore.ico + + + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + false + + + true + full + false + .\bin\Debug\ + true + true + AllRules.ruleset + + + false + true + .\bin\Release\ + false + true + AllRules.ruleset + + + + 3.0 + + + + 3.0 + + + + 3.0 + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + MSBuild:Compile + Designer + + + BackupProcessPage.xaml + Code + + + commandlinkwpf.xaml + Code + + + + True + True + Resources.resx + + + + MainWindow.xaml + Code + + + StarBackupMain.xaml + Code + + + StartBackupPage.xaml + Code + + + WizardDialogBox.xaml + Code + + + Code + + + + + + + + + + + + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + Designer + My.Resources + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + \ No newline at end of file diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/StartBackupPage.xaml b/source/Samples/Shell/StarBackupUsingLibraries/VB/StartBackupPage.xaml new file mode 100644 index 00000000..2fb41c98 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/StartBackupPage.xaml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/StartBackupPage.xaml.vb b/source/Samples/Shell/StarBackupUsingLibraries/VB/StartBackupPage.xaml.vb new file mode 100644 index 00000000..3e8d2845 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/StartBackupPage.xaml.vb @@ -0,0 +1,77 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows +Imports System.Windows.Controls +Imports System.Windows.Navigation +Imports Microsoft.WindowsAPICodePack.Shell +Imports System.Collections.Generic +Imports System.Collections +Imports Microsoft.WindowsAPICodePack.Dialogs + +Namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample + Partial Public Class StartBackupPage + Inherits PageFunction(Of WizardResult) + Public Sub New() + InitializeComponent() + End Sub + + Private Sub cancelButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' Cancel the wizard and don't return any data + OnReturn(New ReturnEventArgs(Of WizardResult)(WizardResult.Canceled)) + End Sub + + Public Sub wizardPage_Return(ByVal sender As Object, ByVal e As ReturnEventArgs(Of WizardResult)) + ' If returning, wizard was completed (finished or canceled), + ' so continue returning to calling page + OnReturn(e) + End Sub + + Private Sub buttonAddFolders_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' Show an Open File Dialog + Dim cfd As New CommonOpenFileDialog() + + ' Allow users to select folders and non-filesystem items such as Libraries + cfd.AllowNonFileSystemItems = True + cfd.IsFolderPicker = True + + ' MultiSelect = true will allow mutliple selection of folders/libraries. + cfd.Multiselect = True + + If cfd.ShowDialog() = CommonFileDialogResult.Ok Then + Dim items As ICollection(Of ShellObject) = cfd.FilesAsShellObject + + For Each item As ShellObject In items + ' If it's a library, need to add the actual folders (scopes) + If TypeOf item Is ShellLibrary Then + For Each folder As ShellFileSystemFolder In (CType(item, ShellLibrary)) + listBox1.Items.Add(folder.Path) + Next folder + ElseIf TypeOf item Is ShellFileSystemFolder Then + ' else, just add it... + listBox1.Items.Add((CType(item, ShellFileSystemFolder)).Path) + Else + ' For unsupported locations, display an error message. + ' The above code could be expanded to backup Known Folders that are not virtual, + ' Search Folders, etc. + MessageBox.Show(String.Format("The {0} folder was skipped because it cannot be backed up.", item.Name), "Star Backup") + End If + Next item + End If + + ' If we added something, Enable the "Start Backup" button + If listBox1.Items.Count > 0 Then + buttonStartBackup.IsEnabled = True + End If + End Sub + + Private Sub buttonStartBackup_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + ' Go to next wizard page (Processing or doing the actual backup) + Dim processPage As New BackupProcessPage(listBox1.Items) + AddHandler processPage.Return, AddressOf wizardPage_Return + Me.NavigationService.Navigate(processPage) + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/Wizard/WizardDialogBox.xaml b/source/Samples/Shell/StarBackupUsingLibraries/VB/Wizard/WizardDialogBox.xaml new file mode 100644 index 00000000..4e16c7f5 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/Wizard/WizardDialogBox.xaml @@ -0,0 +1,7 @@ + + + diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/Wizard/WizardDialogBox.xaml.vb b/source/Samples/Shell/StarBackupUsingLibraries/VB/Wizard/WizardDialogBox.xaml.vb new file mode 100644 index 00000000..11e3b0b2 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/Wizard/WizardDialogBox.xaml.vb @@ -0,0 +1,28 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows +Imports System.Windows.Navigation + +Namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample + Partial Public Class WizardDialogBox + Inherits NavigationWindow + Public Sub New() + InitializeComponent() + + ' Launch the wizard + Dim wizardLauncher As New WizardLauncher() + AddHandler wizardLauncher.WizardReturn, AddressOf wizardLauncher_WizardReturn + Me.Navigate(wizardLauncher) + End Sub + + Private Sub wizardLauncher_WizardReturn(ByVal sender As Object, ByVal e As WizardReturnEventArgs) + ' Handle wizard return + If Me.DialogResult Is Nothing Then + Me.DialogResult = (e.Result = WizardResult.Finished) + End If + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/Wizard/WizardLauncher.vb b/source/Samples/Shell/StarBackupUsingLibraries/VB/Wizard/WizardLauncher.vb new file mode 100644 index 00000000..ecae68d3 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/Wizard/WizardLauncher.vb @@ -0,0 +1,38 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows +Imports System.Windows.Controls +Imports System.Windows.Navigation + +Namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample + Public Class WizardLauncher + Inherits PageFunction(Of WizardResult) + Public Event WizardReturn As WizardReturnEventHandler + + Protected Overrides Sub Start() + MyBase.Start() + + ' So we remember the WizardCompleted event registration + Me.KeepAlive = True + + ' Launch the wizard + Dim StarBackupMain As New StarBackupMain() + AddHandler StarBackupMain.Return, AddressOf wizardPage_Return + Me.NavigationService.Navigate(StarBackupMain) + End Sub + + Public Sub wizardPage_Return(ByVal sender As Object, ByVal e As ReturnEventArgs(Of WizardResult)) + ' Notify client that wizard has completed + ' NOTE: We need this custom event because the Return event cannot be + ' registered by window code - if WizardDialogBox registers an event handler with + ' the WizardLauncher's Return event, the event is not raised. + If Me.WizardReturnEvent IsNot Nothing Then + RaiseEvent WizardReturn(Me, New WizardReturnEventArgs(e.Result, Nothing)) + End If + OnReturn(Nothing) + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/Wizard/WizardResult.vb b/source/Samples/Shell/StarBackupUsingLibraries/VB/Wizard/WizardResult.vb new file mode 100644 index 00000000..c2b4677a --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/Wizard/WizardResult.vb @@ -0,0 +1,12 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System + +Namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample + Public Enum WizardResult + Finished + Canceled + End Enum +End Namespace diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/Wizard/WizardReturnEventArgs.vb b/source/Samples/Shell/StarBackupUsingLibraries/VB/Wizard/WizardReturnEventArgs.vb new file mode 100644 index 00000000..a65bc317 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/Wizard/WizardReturnEventArgs.vb @@ -0,0 +1,31 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Text + +Namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample + Public Class WizardReturnEventArgs + Private result_Renamed As WizardResult + Private data_Renamed As Object + + Public Sub New(ByVal result As WizardResult, ByVal data As Object) + Me.result_Renamed = result + Me.data_Renamed = data + End Sub + + Public ReadOnly Property Result() As WizardResult + Get + Return Me.result_Renamed + End Get + End Property + + Public ReadOnly Property Data() As Object + Get + Return Me.data_Renamed + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/Wizard/WizardReturnEventHandler.vb b/source/Samples/Shell/StarBackupUsingLibraries/VB/Wizard/WizardReturnEventHandler.vb new file mode 100644 index 00000000..1661bf8b --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/Wizard/WizardReturnEventHandler.vb @@ -0,0 +1,10 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Navigation + +Namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample + Public Delegate Sub WizardReturnEventHandler(ByVal sender As Object, ByVal e As WizardReturnEventArgs) +End Namespace diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/commandlinkwpf.xaml b/source/Samples/Shell/StarBackupUsingLibraries/VB/commandlinkwpf.xaml new file mode 100644 index 00000000..1c634ea4 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/commandlinkwpf.xaml @@ -0,0 +1,171 @@ + + + + + + + + diff --git a/source/Samples/Shell/StarBackupUsingLibraries/VB/commandlinkwpf.xaml.vb b/source/Samples/Shell/StarBackupUsingLibraries/VB/commandlinkwpf.xaml.vb new file mode 100644 index 00000000..90f81877 --- /dev/null +++ b/source/Samples/Shell/StarBackupUsingLibraries/VB/commandlinkwpf.xaml.vb @@ -0,0 +1,100 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows +Imports System.Windows.Controls +Imports System.Windows.Data +Imports System.Windows.Documents +Imports System.Windows.Media +Imports System.Windows.Media.Imaging +Imports System.Windows.Navigation +Imports System.Windows.Shapes +Imports System.Windows.Input +Imports System.ComponentModel + +Namespace Microsoft.WindowsAPICodePack.Samples.StarBackupSample + ''' + ''' Implements a CommandLink button that can be used in WPF user interfaces. + ''' + + Partial Public Class CommandLinkWPF + Inherits UserControl + Implements INotifyPropertyChanged + Public Sub New() + Me.DataContext = Me + InitializeComponent() + AddHandler button.Click, AddressOf button_Click + End Sub + + Private Sub button_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) + e.Source = Me + RaiseEvent Click(sender, e) + End Sub + + Private command_Renamed As RoutedUICommand + + Public Property Command() As RoutedUICommand + Get + Return command_Renamed + End Get + Set(ByVal value As RoutedUICommand) + command_Renamed = value + End Set + End Property + + Public Event Click As RoutedEventHandler + + Private link_Renamed As String + + Public Property Link() As String + Get + Return link_Renamed + End Get + Set(ByVal value As String) + link_Renamed = value + + RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Link")) + End Set + End Property + Private note_Renamed As String + + Public Property Note() As String + Get + Return note_Renamed + End Get + Set(ByVal value As String) + note_Renamed = value + RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Note")) + End Set + End Property + Private icon_Renamed As ImageSource + + Public Property Icon() As ImageSource + Get + Return icon_Renamed + End Get + Set(ByVal value As ImageSource) + icon_Renamed = value + RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Icon")) + End Set + End Property + + Public Property IsCheck() As Boolean? + Get + Return button.IsChecked + End Get + Set(ByVal value? As Boolean) + button.IsChecked = value + End Set + End Property + + + #Region "INotifyPropertyChanged Members" + + Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged + + #End Region + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo.sln b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo.sln new file mode 100644 index 00000000..530f2da5 --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StockIconsDemo", "StockIconsDemo\StockIconsDemo.csproj", "{F5F48434-A2BD-4065-9EAC-C9B028C5C05F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/App.xaml b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/App.xaml new file mode 100644 index 00000000..06df3d66 --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/App.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/App.xaml.cs b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/App.xaml.cs new file mode 100644 index 00000000..cf3f8da2 --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/App.xaml.cs @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Windows; + +namespace StockIconsDemo +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Properties/AssemblyInfo.cs b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..3cdf2faf --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Properties/AssemblyInfo.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Resources; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Windows; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("StockIconsDemo")] +[assembly: AssemblyDescription("Stock Icons Demo")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +[assembly: ThemeInfo( + ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located + //(used if a resource is not found in the page, + // or application resource dictionaries) + ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located + //(used if a resource is not found in the page, + // app, or any theme specific resource dictionaries) +)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// + + + +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Properties/Resources.Designer.cs b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Properties/Resources.Designer.cs new file mode 100644 index 00000000..1a2b0f31 --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.StockIconsDemo.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.WindowsAPICodePack.Samples.StockIconsDemo.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Properties/Resources.resx b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Properties/Settings.Designer.cs b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Properties/Settings.Designer.cs new file mode 100644 index 00000000..1846f86d --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.StockIconsDemo.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Properties/Settings.settings b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Properties/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/StockIconsDemo.csproj b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/StockIconsDemo.csproj new file mode 100644 index 00000000..3f256572 --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/StockIconsDemo.csproj @@ -0,0 +1,128 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F} + WinExe + Properties + Microsoft.WindowsAPICodePack.Samples.StockIconsDemo + StockIconsDemo + v3.5 + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + 4 + + + + + + + + + 3.5 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + App.xaml + Code + + + Window1.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Window1.xaml b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Window1.xaml new file mode 100644 index 00000000..4ad72757 --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Window1.xaml @@ -0,0 +1,47 @@ + + + + + + + + Small + Large + Shell Size + + + Link Overlay + + + Selected + + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Window1.xaml.cs b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Window1.xaml.cs new file mode 100644 index 00000000..cb3a3c13 --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/CS/StockIconsDemo/Window1.xaml.cs @@ -0,0 +1,98 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Windows; +using System.Windows.Controls; +using System.Windows.Media; +using Microsoft.WindowsAPICodePack.Shell; + +namespace StockIconsDemo +{ + /// + /// Interaction logic for Window1.xaml + /// + public partial class Window1 : Window + { + private StockIcons stockIcons = null; + + public Window1() + { + InitializeComponent(); + + // Initialize our default collection of StockIcons. + // We will reuse this collection and only change certain properties as needed + stockIcons = new StockIcons(); + + // Select large size + comboBox1.SelectedIndex = 1; + } + + private void UpdateStockIcon(StockIconSize size, bool? isLinkOverlay, bool? isSelected) + { + UpdateStockIcon(size, isLinkOverlay == true, isSelected == true); + } + + private void UpdateStockIcon(StockIconSize newSize, bool isLinkOverlay, bool isSelected) + { + // Clear any existing items in the wrap panel + // Using the updated UI settings, get all the stock icons and show them in an Image control + wrapPanel1.Children.Clear(); + + // Update all the stock icons with these latest settings + UpdateStockIconSettings(newSize, isLinkOverlay, isSelected); + + // Get the new bitmap source + foreach (StockIcon icon in stockIcons.AllStockIcons) + { + Image img = new Image(); + img.Tag = icon; + img.Stretch = Stretch.None; + img.Source = icon.BitmapSource; + img.Margin = new Thickness(10); + img.MouseLeftButtonDown += new System.Windows.Input.MouseButtonEventHandler(img_MouseLeftButtonDown); + wrapPanel1.Children.Add(img); + } + + stockIconsCount.Text = stockIcons.AllStockIcons.Count.ToString(); + } + + void img_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) + { + Image img = sender as Image; + + // Get the stock icon object that we stored in the tag property + if(img.Tag != null) + { + // Toggle the selection (i.e. get a new bitmapsource) + bool selected = ((StockIcon)img.Tag).Selected; + ((StockIcon)img.Tag).Selected = !selected; + img.Source = ((StockIcon)img.Tag).BitmapSource; + } + } + + private void UpdateStockIconSettings(StockIconSize newSize, bool isLinkOverlay, bool isSelected) + { + // Update all the stock icons in the collection with the latest settings + foreach (StockIcon icon in stockIcons.AllStockIcons) + { + icon.CurrentSize = newSize; + icon.LinkOverlay = isLinkOverlay; + icon.Selected = isSelected; + } + } + + private void linkOverlayCheckBox_Checked(object sender, RoutedEventArgs e) + { + UpdateStockIcon((StockIconSize)comboBox1.SelectedIndex, linkOverlayCheckBox.IsChecked, selectedCheckBox.IsChecked); + } + + private void selectedCheckBox_Checked(object sender, RoutedEventArgs e) + { + UpdateStockIcon((StockIconSize)comboBox1.SelectedIndex, linkOverlayCheckBox.IsChecked, selectedCheckBox.IsChecked); + } + + private void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e) + { + UpdateStockIcon((StockIconSize)comboBox1.SelectedIndex, linkOverlayCheckBox.IsChecked, selectedCheckBox.IsChecked); + } + } +} diff --git a/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo.sln b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo.sln new file mode 100644 index 00000000..0d47995f --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "StockIconsDemo", "StockIconsDemo\StockIconsDemo.vbproj", "{F5F48434-A2BD-4065-9EAC-C9B028C5C05F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F5F48434-A2BD-4065-9EAC-C9B028C5C05F}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/Application.xaml b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/Application.xaml new file mode 100644 index 00000000..06df3d66 --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/Application.xaml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/Application.xaml.vb b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/Application.xaml.vb new file mode 100644 index 00000000..67f7e0b4 --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/Application.xaml.vb @@ -0,0 +1,19 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Configuration +Imports System.Data +Imports System.Linq +Imports System.Windows + +Namespace StockIconsDemo + ''' + ''' Interaction logic for App.xaml + ''' + Partial Public Class App + Inherits Application + End Class +End Namespace diff --git a/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/My Project/AssemblyInfo.vb b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..76a7a409 --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/My Project/AssemblyInfo.vb @@ -0,0 +1,56 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Resources +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices +Imports System.Windows + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + + '(used if a resource is not found in the page, + ' or application resource dictionaries) + '(used if a resource is not found in the page, + ' app, or any theme specific resource dictionaries) + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' + + + + + diff --git a/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/My Project/Resources.Designer.vb b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/My Project/Resources.Designer.vb new file mode 100644 index 00000000..e96b8aff --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/My Project/Resources.resx b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/My Project/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/My Project/Settings.Designer.vb b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/My Project/Settings.Designer.vb new file mode 100644 index 00000000..f2ffe239 --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class Settings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()),Settings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As Settings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Settings + Get + Return Global.Settings.Default + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/My Project/Settings.settings b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/My Project/Settings.settings new file mode 100644 index 00000000..033d7a5e --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/StockIconsDemo.vbproj b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/StockIconsDemo.vbproj new file mode 100644 index 00000000..97402f05 --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/StockIconsDemo.vbproj @@ -0,0 +1,138 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {676A1177-EAE2-400A-931A-E1BA31E81908} + WinExe + + + StockIconsDemo + v3.5 + On + Binary + Off + On + 512 + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + + + + + + + 3.5 + + + true + full + false + bin\Debug\ + true + true + prompt + + AllRules.ruleset + + + pdbonly + true + bin\Release\ + false + true + prompt + + AllRules.ruleset + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + Application.xaml + Code + + + Window1.xaml + Code + + + + + Code + + + True + True + Resources.resx + + + True + Settings.settings + True + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + Designer + My.Resources + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/Window1.xaml b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/Window1.xaml new file mode 100644 index 00000000..4ad72757 --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/Window1.xaml @@ -0,0 +1,47 @@ + + + + + + + + Small + Large + Shell Size + + + Link Overlay + + + Selected + + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/Window1.xaml.vb b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/Window1.xaml.vb new file mode 100644 index 00000000..5381587b --- /dev/null +++ b/source/Samples/Shell/StockIconsDemo/VB/StockIconsDemo/Window1.xaml.vb @@ -0,0 +1,88 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Windows +Imports System.Windows.Controls +Imports System.Windows.Media +Imports Microsoft.WindowsAPICodePack.Shell + +Namespace StockIconsDemo + ''' + ''' Interaction logic for Window1.xaml + ''' + Partial Public Class Window1 + Inherits Window + Private stockIcons As StockIcons = Nothing + + Public Sub New() + InitializeComponent() + + ' Initialize our default collection of StockIcons. + ' We will reuse this collection and only change certain properties as needed + stockIcons = New StockIcons() + + ' Select large size + comboBox1.SelectedIndex = 1 + End Sub + + Private Sub UpdateStockIcon(ByVal newSize As StockIconSize, ByVal linkOverlay? As Boolean, ByVal selected? As Boolean) + ' Clear any existing items in the wrap panel + ' Using the updated UI settings, get all the stock icons and show them in an Image control + wrapPanel1.Children.Clear() + + ' + Dim isLinkOverlay As Boolean = (linkOverlay.GetValueOrDefault() = True) + Dim isSelected As Boolean = (selected.GetValueOrDefault() = True) + + ' Update all the stock icons with these latest settings + UpdateStockIconSettings(newSize, isLinkOverlay, isSelected) + + ' Get the new bitmap source + For Each icon As StockIcon In stockIcons.AllStockIcons + Dim img As New Image() + img.Tag = icon + img.Stretch = Stretch.None + img.Source = icon.BitmapSource + img.Margin = New Thickness(10) + AddHandler img.MouseLeftButtonDown, AddressOf img_MouseLeftButtonDown + wrapPanel1.Children.Add(img) + Next icon + + stockIconsCount.Text = stockIcons.AllStockIcons.Count.ToString() + End Sub + + Private Sub img_MouseLeftButtonDown(ByVal sender As Object, ByVal e As System.Windows.Input.MouseButtonEventArgs) + Dim img As Image = TryCast(sender, Image) + + ' Get the stock icon object that we stored in the tag property + If img.Tag IsNot Nothing Then + ' Toggle the selection (i.e. get a new bitmapsource) + Dim selected As Boolean = (CType(img.Tag, StockIcon)).Selected + CType(img.Tag, StockIcon).Selected = Not selected + img.Source = (CType(img.Tag, StockIcon)).BitmapSource + End If + End Sub + + Private Sub UpdateStockIconSettings(ByVal newSize As StockIconSize, ByVal isLinkOverlay As Boolean, ByVal isSelected As Boolean) + ' Update all the stock icons in the collection with the latest settings + For Each icon As StockIcon In stockIcons.AllStockIcons + icon.CurrentSize = newSize + icon.LinkOverlay = isLinkOverlay + icon.Selected = isSelected + Next icon + End Sub + + Private Sub linkOverlayCheckBox_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs) + UpdateStockIcon(CType(comboBox1.SelectedIndex, StockIconSize), linkOverlayCheckBox.IsChecked, selectedCheckBox.IsChecked) + End Sub + + Private Sub selectedCheckBox_Checked(ByVal sender As Object, ByVal e As RoutedEventArgs) + UpdateStockIcon(CType(comboBox1.SelectedIndex, StockIconSize), linkOverlayCheckBox.IsChecked, selectedCheckBox.IsChecked) + End Sub + + Private Sub comboBox1_SelectionChanged(ByVal sender As Object, ByVal e As SelectionChangedEventArgs) + UpdateStockIcon(CType(comboBox1.SelectedIndex, StockIconSize), linkOverlayCheckBox.IsChecked, selectedCheckBox.IsChecked) + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/FavoritesWindow.Designer.cs b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/FavoritesWindow.Designer.cs new file mode 100644 index 00000000..1067eb31 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/FavoritesWindow.Designer.cs @@ -0,0 +1,62 @@ +using Microsoft.WindowsAPICodePack.Controls.WindowsForms; +namespace Microsoft.WindowsAPICodePack.Samples.TabbedThumbnailDemo +{ + partial class FavoritesWindow + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.explorerBrowser1 = new ExplorerBrowser(); + this.SuspendLayout(); + // + // explorerBrowser1 + // + this.explorerBrowser1.Dock = System.Windows.Forms.DockStyle.Fill; + this.explorerBrowser1.Location = new System.Drawing.Point(0, 0); + this.explorerBrowser1.Name = "explorerBrowser1"; + this.explorerBrowser1.Size = new System.Drawing.Size(215, 378); + this.explorerBrowser1.TabIndex = 0; + this.explorerBrowser1.Text = "explorerBrowser1"; + // + // FavoritesWindow + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(215, 378); + this.Controls.Add(this.explorerBrowser1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; + this.Name = "FavoritesWindow"; + this.Text = "Favorites"; + this.TopMost = true; + this.ResumeLayout(false); + + } + + #endregion + + private Microsoft.WindowsAPICodePack.Controls.WindowsForms.ExplorerBrowser explorerBrowser1; + } +} \ No newline at end of file diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/FavoritesWindow.cs b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/FavoritesWindow.cs new file mode 100644 index 00000000..d2a89cb6 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/FavoritesWindow.cs @@ -0,0 +1,66 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.Shell; +using Microsoft.WindowsAPICodePack.Taskbar; +using System.IO; +using Microsoft.WindowsAPICodePack.Controls; + +namespace Microsoft.WindowsAPICodePack.Samples.TabbedThumbnailDemo +{ + public partial class FavoritesWindow : Form + { + private Form1 parentForm = null; + + public FavoritesWindow(Form1 parent) + { + parentForm = parent; + + InitializeComponent(); + + explorerBrowser1.NavigationOptions.PaneVisibility.AdvancedQuery = PaneVisibilityState.Hide; + explorerBrowser1.NavigationOptions.PaneVisibility.Commands= PaneVisibilityState.Hide; + explorerBrowser1.NavigationOptions.PaneVisibility.CommandsOrganize= PaneVisibilityState.Hide; + explorerBrowser1.NavigationOptions.PaneVisibility.CommandsView= PaneVisibilityState.Hide; + explorerBrowser1.NavigationOptions.PaneVisibility.Details = PaneVisibilityState.Hide; + explorerBrowser1.NavigationOptions.PaneVisibility.Navigation= PaneVisibilityState.Hide; + explorerBrowser1.NavigationOptions.PaneVisibility.Preview = PaneVisibilityState.Hide; + explorerBrowser1.NavigationOptions.PaneVisibility.Query= PaneVisibilityState.Hide; + + explorerBrowser1.ContentOptions.NoSubfolders = true; + explorerBrowser1.ContentOptions.NoColumnHeader = true; + explorerBrowser1.ContentOptions.NoHeaderInAllViews = true; + + explorerBrowser1.SelectionChanged += new EventHandler(explorerBrowser1_SelectionChanged); + this.Load += new EventHandler(FavoritesWindow_Load); + } + + void explorerBrowser1_SelectionChanged(object sender, EventArgs e) + { + if (explorerBrowser1.SelectedItems.Count > 0 && explorerBrowser1.SelectedItems[0] is ShellFile) + { + string path = ((ShellFile)explorerBrowser1.SelectedItems[0]).Path; + + if (Path.GetExtension(path).ToLower() == ".url") + { + if (parentForm != null) + parentForm.Navigate(path); + } + } + } + + void FavoritesWindow_Load(object sender, EventArgs e) + { + explorerBrowser1.ContentOptions.ViewMode = ExplorerBrowserViewMode.List; + + explorerBrowser1.Navigate((ShellObject)KnownFolders.Favorites); + } + } +} diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/FavoritesWindow.resx b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/FavoritesWindow.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/FavoritesWindow.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Form1.Designer.cs b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Form1.Designer.cs new file mode 100644 index 00000000..90524f8f --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Form1.Designer.cs @@ -0,0 +1,187 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +namespace Microsoft.WindowsAPICodePack.Samples.TabbedThumbnailDemo +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.panel1 = new System.Windows.Forms.Panel(); + this.button4 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button2 = new System.Windows.Forms.Button(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.button1 = new System.Windows.Forms.Button(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.toolStripProgressBar1 = new System.Windows.Forms.ToolStripProgressBar(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.panel1.SuspendLayout(); + this.statusStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // panel1 + // + this.panel1.Controls.Add(this.button4); + this.panel1.Controls.Add(this.button3); + this.panel1.Controls.Add(this.button2); + this.panel1.Controls.Add(this.comboBox1); + this.panel1.Controls.Add(this.button1); + this.panel1.Dock = System.Windows.Forms.DockStyle.Top; + this.panel1.Location = new System.Drawing.Point(0, 0); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(956, 35); + this.panel1.TabIndex = 0; + // + // button4 + // + this.button4.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.button4.Enabled = false; + this.button4.Location = new System.Drawing.Point(797, 6); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(82, 23); + this.button4.TabIndex = 4; + this.button4.Text = "F&ull thumbnail"; + this.toolTip1.SetToolTip(this.button4, resources.GetString("button4.ToolTip")); + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // button3 + // + this.button3.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.button3.Location = new System.Drawing.Point(715, 6); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(75, 23); + this.button3.TabIndex = 3; + this.button3.Text = "Open &File"; + this.toolTip1.SetToolTip(this.button3, resources.GetString("button3.ToolTip")); + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // button2 + // + this.button2.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.button2.Enabled = false; + this.button2.Location = new System.Drawing.Point(885, 6); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(68, 23); + this.button2.TabIndex = 2; + this.button2.Text = "&Close Tab"; + this.toolTip1.SetToolTip(this.button2, "Close the currently selected tab. \r\nThis removes the tab from the application UI " + + "(TabControl), \r\nas well as from the taskbar\'s tabbed thumbnail list. See code \r\n" + + "for details."); + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click); + // + // comboBox1 + // + this.comboBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); + this.comboBox1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest; + this.comboBox1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.HistoryList; + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Location = new System.Drawing.Point(3, 8); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(589, 21); + this.comboBox1.TabIndex = 1; + this.comboBox1.Text = "http://code.msdn.com/WindowsAPICodePack"; + // + // button1 + // + this.button1.Anchor = System.Windows.Forms.AnchorStyles.Right; + this.button1.Location = new System.Drawing.Point(598, 6); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(111, 23); + this.button1.TabIndex = 0; + this.button1.Text = "&Navigate (new tab)"; + this.toolTip1.SetToolTip(this.button1, "Navigate to the URL specified in the addressbar. \r\nThis button will open a new ta" + + "b.\r\nThe thumbnail displayed on the taskbar for this\r\n tab is updated after sever" + + "al events (see code for details)."); + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // tabControl1 + // + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Location = new System.Drawing.Point(0, 35); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(956, 514); + this.tabControl1.TabIndex = 1; + // + // statusStrip1 + // + this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripProgressBar1}); + this.statusStrip1.Location = new System.Drawing.Point(0, 549); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(956, 22); + this.statusStrip1.TabIndex = 2; + this.statusStrip1.Text = "statusStrip1"; + // + // toolStripProgressBar1 + // + this.toolStripProgressBar1.Name = "toolStripProgressBar1"; + this.toolStripProgressBar1.Size = new System.Drawing.Size(100, 16); + // + // Form1 + // + this.AcceptButton = this.button1; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(956, 571); + this.Controls.Add(this.tabControl1); + this.Controls.Add(this.panel1); + this.Controls.Add(this.statusStrip1); + this.Name = "Form1"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Tabbed Thumbnail Demo"; + this.panel1.ResumeLayout(false); + this.statusStrip1.ResumeLayout(false); + this.statusStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.ToolStripProgressBar toolStripProgressBar1; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.ToolTip toolTip1; + + } +} + diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Form1.cs b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Form1.cs new file mode 100644 index 00000000..0d3ad9b2 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Form1.cs @@ -0,0 +1,687 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Drawing; +using System.IO; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.Dialogs; +using Microsoft.WindowsAPICodePack.Taskbar; + +namespace Microsoft.WindowsAPICodePack.Samples.TabbedThumbnailDemo +{ + public partial class Form1 : Form + { + /// + /// Keeping track of the previously selected tab, + /// so we can capture it's bitmap when the user selects another tab. + /// Unfortunately, we cannot access the previously selected tab via the + /// "selecting" event from TabControl or use any of its properties. + /// This seems to be the best way - keep track ourselves. + /// + private TabPage previousSelectedPage = null; + + // + private ThumbnailToolBarButton thumbButtonBack; + private ThumbnailToolBarButton thumbButtonForward; + private ThumbnailToolBarButton thumbButtonRefresh; + + private ThumbnailToolBarButton thumbButtonCut; + private ThumbnailToolBarButton thumbButtonCopy; + private ThumbnailToolBarButton thumbButtonPaste; + private ThumbnailToolBarButton thumbButtonSelectAll; + + /// + /// Internal bool to keep track of the scroll event that is on the HTML Document's Window class. + /// We don't get a document or a window until we have a page loaded. This bool will be set once we + /// navigate. It will be reset once we get add the scroll event... + /// + private bool scrollEventAdded = false; + + /// + /// Reference to our window for displaying the favorite links + /// + private FavoritesWindow favsWindow = null; + + public Form1() + { + InitializeComponent(); + + // Listen for specific events on the tab control + tabControl1.Selecting += new TabControlCancelEventHandler(tabControl1_Selecting); + tabControl1.SelectedIndexChanged += new EventHandler(tabControl1_SelectedIndexChanged); + + // When the size of our form changes, invalidate the thumbnails so we can capture them again + // when user requests a peek or thumbnail preview. + this.SizeChanged += new EventHandler(Form1_SizeChanged); + + // Set our minimum size so the form will not have 0 height/width when user tries to resize it all the way + this.MinimumSize = new Size(500, 100); + + // Show the Favorites window + favsWindow = new FavoritesWindow(this); + favsWindow.Show(); + + // Create our Thumbnail toolbar buttons for the Browser doc + thumbButtonBack = new ThumbnailToolBarButton(Properties.Resources.prevArrow, "Back"); + thumbButtonBack.Click += new EventHandler(thumbButtonBack_Click); + + thumbButtonForward = new ThumbnailToolBarButton(Properties.Resources.nextArrow, "Forward"); + thumbButtonForward.Click += new EventHandler(thumbButtonForward_Click); + + thumbButtonRefresh = new ThumbnailToolBarButton(Properties.Resources.refresh, "Refresh"); + thumbButtonRefresh.Click += new EventHandler(thumbButtonRefresh_Click); + + // Create our thumbnail toolbar buttons for the RichTextBox doc + thumbButtonCut = new ThumbnailToolBarButton(Properties.Resources.cut, "Cut"); + thumbButtonCut.Click += new EventHandler(thumbButtonCut_Click); + + thumbButtonCopy = new ThumbnailToolBarButton(Properties.Resources.copy, "Copy"); + thumbButtonCopy.Click += new EventHandler(thumbButtonCopy_Click); + + thumbButtonPaste = new ThumbnailToolBarButton(Properties.Resources.paste, "Paste"); + thumbButtonPaste.Click += new EventHandler(thumbButtonPaste_Click); + + thumbButtonSelectAll = new ThumbnailToolBarButton(Properties.Resources.selectAll, "SelectAll"); + thumbButtonSelectAll.Click += new EventHandler(thumbButtonSelectAll_Click); + + this.FormClosing += new FormClosingEventHandler(Form1_FormClosing); + } + + bool cancelFormClosing = false; + + void Form1_FormClosing(object sender, FormClosingEventArgs e) + { + // If the user is closing the app, ask them if they wish to close the current tab + // or all the tabs + + if (tabControl1 != null && tabControl1.TabPages.Count > 0) + { + if (tabControl1.TabPages.Count <= 1) + { + // close the tab and the application + cancelFormClosing = false; + } + else + { + // More than 1 tab.... show the user the TaskDialog + TaskDialog tdClose = new TaskDialog(); + tdClose.Caption = "Tabbed Thumbnail demo (Winforms)"; + tdClose.InstructionText = "Do you want to close all the tabs or the current tab?"; + tdClose.Cancelable = true; + tdClose.OwnerWindowHandle = this.Handle; + + TaskDialogButton closeAllTabsButton = new TaskDialogButton("closeAllTabsButton", "Close all tabs"); + closeAllTabsButton.Default = true; + closeAllTabsButton.Click += new EventHandler(closeAllTabsButton_Click); + tdClose.Controls.Add(closeAllTabsButton); + + TaskDialogButton closeCurrentTabButton = new TaskDialogButton("closeCurrentTabButton", "Close current tab"); + closeCurrentTabButton.Click += new EventHandler(closeCurrentTabButton_Click); + tdClose.Controls.Add(closeCurrentTabButton); + + tdClose.Show(); + } + } + + e.Cancel = cancelFormClosing; + } + + void closeCurrentTabButton_Click(object sender, EventArgs e) + { + button2_Click(this, EventArgs.Empty); + cancelFormClosing = true; + } + + void closeAllTabsButton_Click(object sender, EventArgs e) + { + cancelFormClosing = false; + } + + void Form1_SizeChanged(object sender, EventArgs e) + { + // If we are in minimized state, don't invalidate the thumbnail as we want to keep the + // cached image. Minimized forms can't be captured. + if (WindowState != FormWindowState.Minimized) + { + // Just invalidate the selected tab's thumbnail so we can recapture them when requested + if (tabControl1.TabPages.Count > 0 && tabControl1.SelectedTab != null) + TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview(tabControl1.SelectedTab).InvalidatePreview(); + + } + } + + private TabPage FindTab(IntPtr handle) + { + if (handle == IntPtr.Zero) + return null; + + foreach (TabPage page in tabControl1.TabPages) + { + if (page.Handle == handle) + return page; + } + + return null; + } + + void thumbButtonBack_Click(object sender, ThumbnailButtonClickedEventArgs e) + { + TabPage page = FindTab(e.WindowHandle); + + if (page != null && page.Controls[0] is WebBrowser) + ((WebBrowser)page.Controls[0]).GoBack(); + } + + void thumbButtonForward_Click(object sender, ThumbnailButtonClickedEventArgs e) + { + TabPage page = FindTab(e.WindowHandle); + + if (page != null && page.Controls[0] is WebBrowser) + ((WebBrowser)page.Controls[0]).GoForward(); + } + + + void thumbButtonRefresh_Click(object sender, ThumbnailButtonClickedEventArgs e) + { + TabPage page = FindTab(e.WindowHandle); + + if (page != null && page.Controls[0] is WebBrowser) + ((WebBrowser)page.Controls[0]).Refresh(); + } + + + void thumbButtonCut_Click(object sender, ThumbnailButtonClickedEventArgs e) + { + TabPage page = FindTab(e.WindowHandle); + + if (page != null && page.Controls[0] is RichTextBox) + { + ((RichTextBox)page.Controls[0]).Cut(); + + // If there is a selected tab, take it's screenshot + // invalidate the tab's thumbnail + // update the "preview" object with the new thumbnail + if (tabControl1.Size != Size.Empty && tabControl1.TabPages.Count > 0 && tabControl1.SelectedTab != null) + UpdatePreviewBitmap(tabControl1.SelectedTab); + } + } + + void thumbButtonCopy_Click(object sender, ThumbnailButtonClickedEventArgs e) + { + TabPage page = FindTab(e.WindowHandle); + + if (page != null && page.Controls[0] is RichTextBox) + { + ((RichTextBox)page.Controls[0]).Copy(); + + // If there is a selected tab, take its screenshot + // invalidate the tab's thumbnail + // update the "preview" object with the new thumbnail + if (tabControl1.Size != Size.Empty && tabControl1.TabPages.Count > 0 && tabControl1.SelectedTab != null) + UpdatePreviewBitmap(tabControl1.SelectedTab); + } + } + + void thumbButtonPaste_Click(object sender, ThumbnailButtonClickedEventArgs e) + { + TabPage page = FindTab(e.WindowHandle); + + if (page != null && page.Controls[0] is RichTextBox) + { + ((RichTextBox)page.Controls[0]).Paste(); + + // If there is a selected tab, take it's screenshot + // invalidate the tab's thumbnail + // update the "preview" object with the new thumbnail + if (tabControl1.Size != Size.Empty && tabControl1.TabPages.Count > 0 && tabControl1.SelectedTab != null) + UpdatePreviewBitmap(tabControl1.SelectedTab); + } + } + + void thumbButtonSelectAll_Click(object sender, ThumbnailButtonClickedEventArgs e) + { + TabPage page = FindTab(e.WindowHandle); + + if (page != null && page.Controls[0] is RichTextBox) + ((RichTextBox)page.Controls[0]).SelectAll(); + } + + void tabControl1_Selecting(object sender, TabControlCancelEventArgs e) + { + // Before selecting, + // If there is a selected tab, take it's screenshot + // invalidate the tab's thumbnail + // update the "preview" object with the new thumbnail + if (tabControl1.TabPages.Count > 0 && tabControl1.SelectedTab != null) + UpdatePreviewBitmap(previousSelectedPage); + + // update our selected tab + previousSelectedPage = tabControl1.SelectedTab; + } + + /// + /// Helper method to update the thumbnail preview for a given tab page. + /// + /// + private void UpdatePreviewBitmap(TabPage tabPage) + { + if (tabPage != null) + { + TabbedThumbnail preview = TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview(tabPage); + + if (preview != null) + { + Bitmap bitmap = TabbedThumbnailScreenCapture.GrabWindowBitmap(tabPage.Handle, tabPage.Size); + preview.SetImage(bitmap); + + if (bitmap != null) + { + bitmap.Dispose(); + bitmap = null; + } + } + } + } + + void tabControl1_SelectedIndexChanged(object sender, EventArgs e) + { + // Make sure we let the Taskbar know about the active/selected tab + // Tabbed thumbnails need to be updated to indicate which one is currently selected + if (tabControl1.TabPages.Count > 0 && tabControl1.SelectedTab != null) + { + TaskbarManager.Instance.TabbedThumbnail.SetActiveTab(tabControl1.SelectedTab); + + if (tabControl1.SelectedTab.Controls[0] is RichTextBox) + button4.Enabled = true; + else + button4.Enabled = false; + } + } + + void Window_Scroll(object sender, HtmlElementEventArgs e) + { + // If there is a selected tab, take it's screenshot + // invalidate the tab's thumbnail + // update the "preview" object with the new thumbnail + if (tabControl1.TabPages.Count > 0 && tabControl1.SelectedTab != null) + UpdatePreviewBitmap(tabControl1.SelectedTab); + } + + void wb_Navigated(object sender, WebBrowserNavigatedEventArgs e) + { + // Update the combobox / addressbar + comboBox1.Text = ((WebBrowser)sender).Document.Url.ToString(); + + if (!scrollEventAdded) + { + ((WebBrowser)sender).Document.Window.Scroll += new HtmlElementEventHandler(Window_Scroll); + scrollEventAdded = true; + } + } + + /// + /// Create a new tab, add a webbrowser and navigate the given address/URL + /// + /// + /// + private void button1_Click(object sender, System.EventArgs args) + { + TabPage newTab = new TabPage(comboBox1.Text); + tabControl1.TabPages.Add(newTab); + WebBrowser wb = new WebBrowser(); + wb.DocumentTitleChanged += new EventHandler(wb_DocumentTitleChanged); + wb.Navigated += new WebBrowserNavigatedEventHandler(wb_Navigated); + wb.ProgressChanged += new WebBrowserProgressChangedEventHandler(wb_ProgressChanged); + wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted); + wb.Dock = DockStyle.Fill; + wb.Navigate(comboBox1.Text); + newTab.Controls.Add(wb); + + // Add thumbnail toolbar buttons + TaskbarManager.Instance.ThumbnailToolBars.AddButtons(newTab.Handle, thumbButtonBack, thumbButtonForward, thumbButtonRefresh); + + // Add a new preview + TabbedThumbnail preview = new TabbedThumbnail(this.Handle, newTab.Handle); + + // Event handlers for this preview + preview.TabbedThumbnailActivated += preview_TabbedThumbnailActivated; + preview.TabbedThumbnailClosed += preview_TabbedThumbnailClosed; + preview.TabbedThumbnailMaximized += preview_TabbedThumbnailMaximized; + preview.TabbedThumbnailMinimized += preview_TabbedThumbnailMinimized; + + TaskbarManager.Instance.TabbedThumbnail.AddThumbnailPreview(preview); + + // Select the tab in the application UI as well as taskbar tabbed thumbnail list + tabControl1.SelectedTab = newTab; + TaskbarManager.Instance.TabbedThumbnail.SetActiveTab(tabControl1.SelectedTab); + + // set false for this new webbrowser + scrollEventAdded = false; + + // + button2.Enabled = true; + } + + void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) + { + if (tabControl1.Size != Size.Empty && tabControl1.TabPages.Count > 0 && tabControl1.SelectedTab != null) + { + UpdatePreviewBitmap(tabControl1.SelectedTab); + } + } + + void wb_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e) + { + // Based on the webbrowser's progress, update our statusbar progressbar + if (e.CurrentProgress >= 0) + { + toolStripProgressBar1.Maximum = (int)e.MaximumProgress; + toolStripProgressBar1.Value = (int)Math.Max(e.CurrentProgress, e.MaximumProgress); + } + } + + void wb_DocumentTitleChanged(object sender, System.EventArgs e) + { + // When the webpage's title changes, + // update the tab's title and taskbar thumbnail's title + TabPage page = ((WebBrowser)sender).Parent as TabPage; + + if (page != null) + { + page.Text = ((WebBrowser)sender).DocumentTitle; + + TabbedThumbnail preview = TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview(page); + + if (preview != null) + preview.Title = page.Text; + + } + } + + /// + /// Close button - close the specific tab and also + /// remove the thumbnail preview + /// + /// + /// + private void button2_Click(object sender, EventArgs e) + { + if (tabControl1.SelectedTab != null) + { + TaskbarManager.Instance.TabbedThumbnail.RemoveThumbnailPreview(tabControl1.SelectedTab); + tabControl1.TabPages.Remove(tabControl1.SelectedTab); + } + + if (tabControl1.TabPages.Count == 0) + button2.Enabled = false; + } + + /// + /// Open a user-specified text file in a new tab (using a RichTextBox) + /// + /// + /// + private void button3_Click(object sender, EventArgs e) + { + // Open text file + CommonOpenFileDialog cfd = new CommonOpenFileDialog(); + + CommonFileDialogStandardFilters.TextFiles.ShowExtensions = true; + CommonFileDialogFilter rtfFilter = new CommonFileDialogFilter("RTF Files", ".rtf"); + rtfFilter.ShowExtensions = true; + + cfd.Filters.Add(CommonFileDialogStandardFilters.TextFiles); + cfd.Filters.Add(rtfFilter); + + if (cfd.ShowDialog() == CommonFileDialogResult.Ok) + { + TabPage newTab = new TabPage(Path.GetFileName(cfd.FileName)); + tabControl1.TabPages.Add(newTab); + RichTextBox rtbText = new RichTextBox(); + rtbText.KeyDown += new KeyEventHandler(rtbText_KeyDown); + rtbText.MouseMove += new MouseEventHandler(rtbText_MouseMove); + rtbText.KeyUp += new KeyEventHandler(rtbText_KeyUp); + rtbText.Dock = DockStyle.Fill; + + // Based on the extension, load the file appropriately in the RichTextBox + if (Path.GetExtension(cfd.FileName).ToLower() == ".txt") + rtbText.LoadFile(cfd.FileName, RichTextBoxStreamType.PlainText); + else if (Path.GetExtension(cfd.FileName).ToLower() == ".rtf") + rtbText.LoadFile(cfd.FileName, RichTextBoxStreamType.RichText); + + // Update the tab + newTab.Controls.Add(rtbText); + + // Add a new preview + TabbedThumbnail preview = new TabbedThumbnail(this.Handle, newTab.Handle); + + // Event handlers for this preview + preview.TabbedThumbnailActivated += preview_TabbedThumbnailActivated; + preview.TabbedThumbnailClosed += preview_TabbedThumbnailClosed; + preview.TabbedThumbnailMaximized += preview_TabbedThumbnailMaximized; + preview.TabbedThumbnailMinimized += preview_TabbedThumbnailMinimized; + + preview.ClippingRectangle = GetClippingRectangle(rtbText); + TaskbarManager.Instance.TabbedThumbnail.AddThumbnailPreview(preview); + + // Add thumbnail toolbar buttons + TaskbarManager.Instance.ThumbnailToolBars.AddButtons(newTab.Handle, thumbButtonCut, thumbButtonCopy, thumbButtonPaste, thumbButtonSelectAll); + + // Select the tab in the application UI as well as taskbar tabbed thumbnail list + tabControl1.SelectedTab = newTab; + TaskbarManager.Instance.TabbedThumbnail.SetActiveTab(tabControl1.SelectedTab); + + button2.Enabled = true; + button4.Enabled = true; + } + } + + void preview_TabbedThumbnailMinimized(object sender, TabbedThumbnailEventArgs e) + { + // User clicked on the minimize button on the thumbnail's context menu + // Minimize the app + this.WindowState = FormWindowState.Minimized; + } + + void preview_TabbedThumbnailMaximized(object sender, TabbedThumbnailEventArgs e) + { + // User clicked on the maximize button on the thumbnail's context menu + // Maximize the app + this.WindowState = FormWindowState.Maximized; + + // If there is a selected tab, take it's screenshot + // invalidate the tab's thumbnail + // update the "preview" object with the new thumbnail + if (tabControl1.Size != Size.Empty && tabControl1.TabPages.Count > 0 && tabControl1.SelectedTab != null) + UpdatePreviewBitmap(tabControl1.SelectedTab); + } + + void preview_TabbedThumbnailClosed(object sender, TabbedThumbnailClosedEventArgs e) + { + + TabPage pageClosed = null; + + // Find the tabpage that was "closed" by the user (via the taskbar tabbed thumbnail) + foreach (TabPage page in tabControl1.TabPages) + { + if (page.Handle == e.WindowHandle) + { + pageClosed = page; + break; + } + } + + if (pageClosed != null) + { + // Remove the event handlers + WebBrowser wb = pageClosed.Controls[0] as WebBrowser; + + if (wb != null) + { + wb.DocumentTitleChanged -= new EventHandler(wb_DocumentTitleChanged); + //wb.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted); + wb.Navigated -= new WebBrowserNavigatedEventHandler(wb_Navigated); + wb.ProgressChanged -= new WebBrowserProgressChangedEventHandler(wb_ProgressChanged); + wb.Document.Window.Scroll -= new HtmlElementEventHandler(Window_Scroll); + + wb.Dispose(); + } + else + { + // It's most likely a RichTextBox. + + RichTextBox rtbText = pageClosed.Controls[0] as RichTextBox; + + if (rtbText != null) + { + rtbText.KeyDown -= new KeyEventHandler(rtbText_KeyDown); + rtbText.MouseMove -= new MouseEventHandler(rtbText_MouseMove); + rtbText.KeyUp -= new KeyEventHandler(rtbText_KeyUp); + } + + rtbText.Dispose(); + } + + // Finally, remove the tab from our UI + if (pageClosed != null) + tabControl1.TabPages.Remove(pageClosed); + + // Dispose the tab + pageClosed.Dispose(); + + if (tabControl1.TabPages.Count > 0) + button2.Enabled = true; + else + button2.Enabled = false; + } + + TabbedThumbnail tabbedThumbnail = sender as TabbedThumbnail; + if (tabbedThumbnail != null) + { + // Remove the event handlers from the tab preview + tabbedThumbnail.TabbedThumbnailActivated -= (preview_TabbedThumbnailActivated); + tabbedThumbnail.TabbedThumbnailClosed -= (preview_TabbedThumbnailClosed); + tabbedThumbnail.TabbedThumbnailMaximized -= (preview_TabbedThumbnailMaximized); + tabbedThumbnail.TabbedThumbnailMinimized -= (preview_TabbedThumbnailMinimized); + } + } + + void preview_TabbedThumbnailActivated(object sender, TabbedThumbnailEventArgs e) + { + // User selected a tab via the thumbnail preview + // Select the corresponding control in our app + foreach (TabPage page in tabControl1.TabPages) + { + if (page.Handle == e.WindowHandle) + { + // Select the tab in the application UI as well as taskbar tabbed thumbnail list + tabControl1.SelectedTab = page; + TaskbarManager.Instance.TabbedThumbnail.SetActiveTab(page); + } + } + + // Also activate our parent form (incase we are minimized, this will restore it) + if (this.WindowState == FormWindowState.Minimized) + this.WindowState = FormWindowState.Normal; + } + + void rtbText_KeyUp(object sender, KeyEventArgs e) + { + TabbedThumbnail preview = TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview((Control)sender); + if (preview != null) + preview.ClippingRectangle = GetClippingRectangle((RichTextBox)sender); + } + + void rtbText_KeyDown(object sender, KeyEventArgs e) + { + TabbedThumbnail preview = TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview((Control)sender); + if (preview != null) + preview.ClippingRectangle = GetClippingRectangle((RichTextBox)sender); + } + + void rtbText_MouseMove(object sender, MouseEventArgs e) + { + TabbedThumbnail preview = TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview((Control)sender); + if (preview != null) + preview.ClippingRectangle = GetClippingRectangle((RichTextBox)sender); + } + + private string clipText = "Cli&p thumbnail"; + private string showFullText = "F&ull thumbnail"; + + private void button4_Click(object sender, EventArgs e) + { + // Clip the thumbnail when showing the thumbnail preview or aero peek + + // Only supported for RTF/Text files (as an example to show that we can do thumbnail clip + // for specific windows if needed) + + if (tabControl1.SelectedTab == null) + return; + + TabbedThumbnail preview = TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview(tabControl1.SelectedTab); + + if (tabControl1.SelectedTab != null && preview != null) + { + RichTextBox rtbText = tabControl1.SelectedTab.Controls[0] as RichTextBox; + + if (button4.Text == clipText && rtbText != null) + { + preview.ClippingRectangle = GetClippingRectangle(rtbText); + } + else if (button4.Text == showFullText) + { + preview.ClippingRectangle = null; + } + } + + // toggle the text + if (button4.Text == clipText) + button4.Text = showFullText; + else + button4.Text = clipText; + } + + private Rectangle GetClippingRectangle(RichTextBox rtbText) + { + int index = rtbText.GetFirstCharIndexOfCurrentLine(); + Point point = rtbText.GetPositionFromCharIndex(index); + return new Rectangle(point, new Size(200, 119)); + } + + /// + /// Navigates to the given path or URL file. + /// Uses the currently selected tab + /// + /// + internal void Navigate(string path) + { + string[] lines = File.ReadAllLines(path); + string urlString = ""; + + foreach (string line in lines) + { + if (line.StartsWith("URL=")) + { + urlString = line.Replace("URL=", ""); + + break; + } + } + + if (!string.IsNullOrEmpty(path) && tabControl1.TabPages.Count > 0 && tabControl1.SelectedTab != null) + { + if (tabControl1.SelectedTab.Controls[0] is WebBrowser) + { + ((WebBrowser)tabControl1.SelectedTab.Controls[0]).Navigate(urlString); + } + } + else + { + // Simulate a click + comboBox1.Text = urlString; + button1_Click(this, EventArgs.Empty); + } + } + } +} \ No newline at end of file diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Form1.resx b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Form1.resx new file mode 100644 index 00000000..2976aa03 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Form1.resx @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 133, 17 + + + Toggles the behaviour of the thumbnail clip feature. +Full thumbnail means the bitmap captured is of the entire region +of the RichTextBox control. +Clip thumbnail means only a small portion of the control is captured. + + + Open a text (.txt) or RTF (.rtf) file in a new tab. +This example shows thumbnail clip feature of the tabbed +thumbnails. By default the thumbnail clip is set on txt/rtf document tab. +This ensures user has good readability when looking at the tabbed thumbnail. +Click on the Full Thumbnail / Clip thumbnail button to toggle this behaviour. + + + 17, 17 + + \ No newline at end of file diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Program.cs b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Program.cs new file mode 100644 index 00000000..4c9d3e22 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Program.cs @@ -0,0 +1,29 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.Taskbar; + +namespace Microsoft.WindowsAPICodePack.Samples.TabbedThumbnailDemo +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + if (!TaskbarManager.IsPlatformSupported) + { + MessageBox.Show("This demo requires to be run on Windows 7", "Demo needs Windows 7", MessageBoxButtons.OK, MessageBoxIcon.Error); + System.Environment.Exit(0); + return; + } + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Properties/AssemblyInfo.cs b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..b46531fa --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Tabbed Thumbnail Demo (Winforms)")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("0f11372f-b577-4cac-b764-af13332ee5d5")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Properties/Resources.Designer.cs b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Properties/Resources.Designer.cs new file mode 100644 index 00000000..df986b7c --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Properties/Resources.Designer.cs @@ -0,0 +1,112 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.TabbedThumbnailDemo.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.WindowsAPICodePack.Samples.TabbedThumbnailDemo.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.Drawing.Icon copy { + get { + object obj = ResourceManager.GetObject("copy", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + internal static System.Drawing.Icon cut { + get { + object obj = ResourceManager.GetObject("cut", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + internal static System.Drawing.Icon nextArrow { + get { + object obj = ResourceManager.GetObject("nextArrow", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + internal static System.Drawing.Icon paste { + get { + object obj = ResourceManager.GetObject("paste", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + internal static System.Drawing.Icon prevArrow { + get { + object obj = ResourceManager.GetObject("prevArrow", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + internal static System.Drawing.Icon refresh { + get { + object obj = ResourceManager.GetObject("refresh", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + internal static System.Drawing.Icon selectAll { + get { + object obj = ResourceManager.GetObject("selectAll", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + } +} diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Properties/Resources.resx b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Properties/Resources.resx new file mode 100644 index 00000000..4281ce26 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Properties/Resources.resx @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\copy.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\cut.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\nextArrow.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\paste.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\prevArrow.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\refresh.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\selectAll.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Properties/Settings.Designer.cs b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Properties/Settings.Designer.cs new file mode 100644 index 00000000..feac79c9 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.TabbedThumbnailDemo.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Properties/Settings.settings b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/copy.ico b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/copy.ico new file mode 100644 index 00000000..8e32b4cd Binary files /dev/null and b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/copy.ico differ diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/cut.ico b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/cut.ico new file mode 100644 index 00000000..ef04a3a7 Binary files /dev/null and b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/cut.ico differ diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/nextArrow.ico b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/nextArrow.ico new file mode 100644 index 00000000..6203d1a6 Binary files /dev/null and b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/nextArrow.ico differ diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/paste.ico b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/paste.ico new file mode 100644 index 00000000..0092cabc Binary files /dev/null and b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/paste.ico differ diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/prevArrow.ico b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/prevArrow.ico new file mode 100644 index 00000000..73ebec75 Binary files /dev/null and b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/prevArrow.ico differ diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/refresh.ico b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/refresh.ico new file mode 100644 index 00000000..4e362e54 Binary files /dev/null and b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/refresh.ico differ diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/selectAll.ico b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/selectAll.ico new file mode 100644 index 00000000..68a6f12a Binary files /dev/null and b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/Resources/selectAll.ico differ diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/TabbedThumbnailDemoWinforms.csproj b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/TabbedThumbnailDemoWinforms.csproj new file mode 100644 index 00000000..eafc0128 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/TabbedThumbnailDemoWinforms.csproj @@ -0,0 +1,152 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {69865974-3934-4060-B9F5-29B5FAE26DF7} + WinExe + Properties + Microsoft.WindowsAPICodePack.Samples.TabbedThumbnailDemo + TabbedThumbnailDemoWinforms + v3.5 + 512 + + + + + + + + + 3.5 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + 3.0 + + + 3.0 + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + 3.0 + + + + + Form + + + FavoritesWindow.cs + + + Form + + + Form1.cs + + + + + FavoritesWindow.cs + Designer + + + Form1.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + + + + + + + + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/TabbedThumbnailDemoWinforms.sln b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/TabbedThumbnailDemoWinforms.sln new file mode 100644 index 00000000..38304df5 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/CS/Winforms/TabbedThumbnailDemoWinforms.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TabbedThumbnailDemoWinforms", "TabbedThumbnailDemoWinforms.csproj", "{69865974-3934-4060-B9F5-29B5FAE26DF7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {69865974-3934-4060-B9F5-29B5FAE26DF7}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {69865974-3934-4060-B9F5-29B5FAE26DF7}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {69865974-3934-4060-B9F5-29B5FAE26DF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {69865974-3934-4060-B9F5-29B5FAE26DF7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {69865974-3934-4060-B9F5-29B5FAE26DF7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {69865974-3934-4060-B9F5-29B5FAE26DF7}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/FavoritesWindow.Designer.vb b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/FavoritesWindow.Designer.vb new file mode 100644 index 00000000..3fd67390 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/FavoritesWindow.Designer.vb @@ -0,0 +1,59 @@ +Imports Microsoft.VisualBasic +Imports System +Imports Microsoft.WindowsAPICodePack.Controls.WindowsForms +Namespace Microsoft.WindowsAPICodePack.Samples.TabbedThumbnailDemo + Partial Public Class FavoritesWindow + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Me.explorerBrowser1 = New ExplorerBrowser() + Me.SuspendLayout() + ' + ' explorerBrowser1 + ' + Me.explorerBrowser1.Dock = System.Windows.Forms.DockStyle.Fill + Me.explorerBrowser1.Location = New System.Drawing.Point(0, 0) + Me.explorerBrowser1.Name = "explorerBrowser1" + Me.explorerBrowser1.Size = New System.Drawing.Size(215, 378) + Me.explorerBrowser1.TabIndex = 0 + Me.explorerBrowser1.Text = "explorerBrowser1" + ' + ' FavoritesWindow + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0F, 13.0F) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(215, 378) + Me.Controls.Add(Me.explorerBrowser1) + Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow + Me.Name = "FavoritesWindow" + Me.Text = "Favorites" + Me.TopMost = True + Me.ResumeLayout(False) + + End Sub + + + + Private explorerBrowser1 As Microsoft.WindowsAPICodePack.Controls.WindowsForms.ExplorerBrowser + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/FavoritesWindow.resx b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/FavoritesWindow.resx new file mode 100644 index 00000000..19dc0dd8 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/FavoritesWindow.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/FavoritesWindow.vb b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/FavoritesWindow.vb new file mode 100644 index 00000000..54a36322 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/FavoritesWindow.vb @@ -0,0 +1,63 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +Imports System.Data +Imports System.Drawing +Imports System.Linq +Imports System.Text +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.Shell +Imports Microsoft.WindowsAPICodePack.Taskbar +Imports System.IO +Imports Microsoft.WindowsAPICodePack.Controls + +Namespace Microsoft.WindowsAPICodePack.Samples.TabbedThumbnailDemo + Partial Public Class FavoritesWindow + Inherits Form + Private parentForm_Renamed As Form1 = Nothing + + Public Sub New(ByVal parent As Form1) + parentForm_Renamed = parent + + InitializeComponent() + + explorerBrowser1.NavigationOptions.PaneVisibility.AdvancedQuery = PaneVisibilityState.Hide + explorerBrowser1.NavigationOptions.PaneVisibility.Commands= PaneVisibilityState.Hide + explorerBrowser1.NavigationOptions.PaneVisibility.CommandsOrganize= PaneVisibilityState.Hide + explorerBrowser1.NavigationOptions.PaneVisibility.CommandsView= PaneVisibilityState.Hide + explorerBrowser1.NavigationOptions.PaneVisibility.Details = PaneVisibilityState.Hide + explorerBrowser1.NavigationOptions.PaneVisibility.Navigation= PaneVisibilityState.Hide + explorerBrowser1.NavigationOptions.PaneVisibility.Preview = PaneVisibilityState.Hide + explorerBrowser1.NavigationOptions.PaneVisibility.Query= PaneVisibilityState.Hide + + explorerBrowser1.ContentOptions.NoSubfolders = True + explorerBrowser1.ContentOptions.NoColumnHeader = True + explorerBrowser1.ContentOptions.NoHeaderInAllViews = True + + AddHandler explorerBrowser1.SelectionChanged, AddressOf explorerBrowser1_SelectionChanged + AddHandler Load, AddressOf FavoritesWindow_Load + End Sub + + Private Sub explorerBrowser1_SelectionChanged(ByVal sender As Object, ByVal e As EventArgs) + If explorerBrowser1.SelectedItems.Count > 0 AndAlso TypeOf explorerBrowser1.SelectedItems(0) Is ShellFile Then + Dim path As String = (CType(explorerBrowser1.SelectedItems(0), ShellFile)).Path + + If System.IO.Path.GetExtension(path).ToLower() = ".url" Then + If parentForm_Renamed IsNot Nothing Then + parentForm_Renamed.Navigate(path) + End If + End If + End If + End Sub + + Private Sub FavoritesWindow_Load(ByVal sender As Object, ByVal e As EventArgs) + explorerBrowser1.ContentOptions.ViewMode = ExplorerBrowserViewMode.List + + explorerBrowser1.Navigate(CType(KnownFolders.Favorites, ShellObject)) + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Form1.Designer.vb b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Form1.Designer.vb new file mode 100644 index 00000000..8f68ba14 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Form1.Designer.vb @@ -0,0 +1,180 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Namespace Microsoft.WindowsAPICodePack.Samples.TabbedThumbnailDemo + Partial Public Class Form1 + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1)) + Me.panel1 = New System.Windows.Forms.Panel + Me.button4 = New System.Windows.Forms.Button + Me.button3 = New System.Windows.Forms.Button + Me.button2 = New System.Windows.Forms.Button + Me.comboBox1 = New System.Windows.Forms.ComboBox + Me.button1 = New System.Windows.Forms.Button + Me.tabControl1 = New System.Windows.Forms.TabControl + Me.statusStrip1 = New System.Windows.Forms.StatusStrip + Me.toolStripProgressBar1 = New System.Windows.Forms.ToolStripProgressBar + Me.toolTip1 = New System.Windows.Forms.ToolTip(Me.components) + Me.panel1.SuspendLayout() + Me.statusStrip1.SuspendLayout() + Me.SuspendLayout() + ' + 'panel1 + ' + Me.panel1.Controls.Add(Me.button4) + Me.panel1.Controls.Add(Me.button3) + Me.panel1.Controls.Add(Me.button2) + Me.panel1.Controls.Add(Me.comboBox1) + Me.panel1.Controls.Add(Me.button1) + Me.panel1.Dock = System.Windows.Forms.DockStyle.Top + Me.panel1.Location = New System.Drawing.Point(0, 0) + Me.panel1.Name = "panel1" + Me.panel1.Size = New System.Drawing.Size(956, 35) + Me.panel1.TabIndex = 0 + ' + 'button4 + ' + Me.button4.Anchor = System.Windows.Forms.AnchorStyles.Right + Me.button4.Enabled = False + Me.button4.Location = New System.Drawing.Point(797, 6) + Me.button4.Name = "button4" + Me.button4.Size = New System.Drawing.Size(82, 23) + Me.button4.TabIndex = 4 + Me.button4.Text = "F&ull thumbnail" + Me.toolTip1.SetToolTip(Me.button4, resources.GetString("button4.ToolTip")) + Me.button4.UseVisualStyleBackColor = True + ' + 'button3 + ' + Me.button3.Anchor = System.Windows.Forms.AnchorStyles.Right + Me.button3.Location = New System.Drawing.Point(715, 6) + Me.button3.Name = "button3" + Me.button3.Size = New System.Drawing.Size(75, 23) + Me.button3.TabIndex = 3 + Me.button3.Text = "Open &File" + Me.toolTip1.SetToolTip(Me.button3, resources.GetString("button3.ToolTip")) + Me.button3.UseVisualStyleBackColor = True + ' + 'button2 + ' + Me.button2.Anchor = System.Windows.Forms.AnchorStyles.Right + Me.button2.Enabled = False + Me.button2.Location = New System.Drawing.Point(885, 6) + Me.button2.Name = "button2" + Me.button2.Size = New System.Drawing.Size(68, 23) + Me.button2.TabIndex = 2 + Me.button2.Text = "&Close Tab" + Me.toolTip1.SetToolTip(Me.button2, "Close the currently selected tab. " & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "This removes the tab from the application UI " & _ + "(TabControl), " & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "as well as from the taskbar's tabbed thumbnail list. See code " & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & _ + "for details.") + Me.button2.UseVisualStyleBackColor = True + ' + 'comboBox1 + ' + Me.comboBox1.Anchor = CType((System.Windows.Forms.AnchorStyles.Left Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.comboBox1.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest + Me.comboBox1.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.HistoryList + Me.comboBox1.FormattingEnabled = True + Me.comboBox1.Location = New System.Drawing.Point(3, 8) + Me.comboBox1.Name = "comboBox1" + Me.comboBox1.Size = New System.Drawing.Size(589, 21) + Me.comboBox1.TabIndex = 1 + Me.comboBox1.Text = "http://code.msdn.com/WindowsAPICodePack" + ' + 'button1 + ' + Me.button1.Anchor = System.Windows.Forms.AnchorStyles.Right + Me.button1.Location = New System.Drawing.Point(598, 6) + Me.button1.Name = "button1" + Me.button1.Size = New System.Drawing.Size(111, 23) + Me.button1.TabIndex = 0 + Me.button1.Text = "&Navigate (new tab)" + Me.toolTip1.SetToolTip(Me.button1, "Navigate to the URL specified in the addressbar. " & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "This button will open a new ta" & _ + "b." & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & "The thumbnail displayed on the taskbar for this" & Global.Microsoft.VisualBasic.ChrW(13) & Global.Microsoft.VisualBasic.ChrW(10) & " tab is updated after sever" & _ + "al events (see code for details).") + Me.button1.UseVisualStyleBackColor = True + ' + 'tabControl1 + ' + Me.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill + Me.tabControl1.Location = New System.Drawing.Point(0, 35) + Me.tabControl1.Name = "tabControl1" + Me.tabControl1.SelectedIndex = 0 + Me.tabControl1.Size = New System.Drawing.Size(956, 514) + Me.tabControl1.TabIndex = 1 + ' + 'statusStrip1 + ' + Me.statusStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.toolStripProgressBar1}) + Me.statusStrip1.Location = New System.Drawing.Point(0, 549) + Me.statusStrip1.Name = "statusStrip1" + Me.statusStrip1.Size = New System.Drawing.Size(956, 22) + Me.statusStrip1.TabIndex = 2 + Me.statusStrip1.Text = "statusStrip1" + ' + 'toolStripProgressBar1 + ' + Me.toolStripProgressBar1.Name = "toolStripProgressBar1" + Me.toolStripProgressBar1.Size = New System.Drawing.Size(100, 16) + ' + 'Form1 + ' + Me.AcceptButton = Me.button1 + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(956, 571) + Me.Controls.Add(Me.tabControl1) + Me.Controls.Add(Me.panel1) + Me.Controls.Add(Me.statusStrip1) + Me.Name = "Form1" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Tabbed Thumbnail Demo" + Me.panel1.ResumeLayout(False) + Me.statusStrip1.ResumeLayout(False) + Me.statusStrip1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + #End Region + + Private panel1 As System.Windows.Forms.Panel + Private comboBox1 As System.Windows.Forms.ComboBox + Private WithEvents button1 As System.Windows.Forms.Button + Private tabControl1 As System.Windows.Forms.TabControl + Private WithEvents button2 As System.Windows.Forms.Button + Private statusStrip1 As System.Windows.Forms.StatusStrip + Private toolStripProgressBar1 As System.Windows.Forms.ToolStripProgressBar + Private WithEvents button3 As System.Windows.Forms.Button + Private WithEvents button4 As System.Windows.Forms.Button + Private toolTip1 As System.Windows.Forms.ToolTip + + End Class +End Namespace + diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Form1.resx b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Form1.resx new file mode 100644 index 00000000..2976aa03 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Form1.resx @@ -0,0 +1,139 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 133, 17 + + + Toggles the behaviour of the thumbnail clip feature. +Full thumbnail means the bitmap captured is of the entire region +of the RichTextBox control. +Clip thumbnail means only a small portion of the control is captured. + + + Open a text (.txt) or RTF (.rtf) file in a new tab. +This example shows thumbnail clip feature of the tabbed +thumbnails. By default the thumbnail clip is set on txt/rtf document tab. +This ensures user has good readability when looking at the tabbed thumbnail. +Click on the Full Thumbnail / Clip thumbnail button to toggle this behaviour. + + + 17, 17 + + \ No newline at end of file diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Form1.vb b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Form1.vb new file mode 100644 index 00000000..0e7c0fe5 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Form1.vb @@ -0,0 +1,643 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Drawing +Imports System.IO +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.Dialogs +Imports Microsoft.WindowsAPICodePack.Taskbar + +Namespace Microsoft.WindowsAPICodePack.Samples.TabbedThumbnailDemo + Partial Public Class Form1 + Inherits Form + ''' + ''' Keeping track of the previously selected tab, + ''' so we can capture it's bitmap when the user selects another tab. + ''' Unfortunately, we cannot access the previously selected tab via the + ''' "selecting" event from TabControl or use any of its properties. + ''' This seems to be the best way - keep track ourselves. + ''' + Private previousSelectedPage As TabPage = Nothing + + ' + Private thumbButtonBack As ThumbnailToolbarButton + Private thumbButtonForward As ThumbnailToolbarButton + Private thumbButtonRefresh As ThumbnailToolbarButton + + Private thumbButtonCut As ThumbnailToolbarButton + Private thumbButtonCopy As ThumbnailToolbarButton + Private thumbButtonPaste As ThumbnailToolbarButton + Private thumbButtonSelectAll As ThumbnailToolbarButton + + ''' + ''' Internal bool to keep track of the scroll event that is on the HTML Document's Window class. + ''' We don't get a document or a window until we have a page loaded. This bool will be set once we + ''' navigate. It will be reset once we get add the scroll event... + ''' + Private scrollEventAdded As Boolean = False + + ''' + ''' Reference to our window for displaying the favorite links + ''' + Private favsWindow As FavoritesWindow = Nothing + + Public Sub New() + InitializeComponent() + + ' Listen for specific events on the tab control + AddHandler tabControl1.Selecting, AddressOf tabControl1_Selecting + AddHandler tabControl1.SelectedIndexChanged, AddressOf tabControl1_SelectedIndexChanged + + ' When the size of our form changes, invalidate the thumbnails so we can capture them again + ' when user requests a peek or thumbnail preview. + AddHandler SizeChanged, AddressOf Form1_SizeChanged + + ' Set our minimum size so the form will not have 0 height/width when user tries to resize it all the way + Me.MinimumSize = New Size(500, 100) + + ' Show the Favorites window + favsWindow = New FavoritesWindow(Me) + favsWindow.Show() + + ' Create our Thumbnail toolbar buttons for the Browser doc + thumbButtonBack = New ThumbnailToolbarButton(My.Resources.prevArrow, "Back") + AddHandler thumbButtonBack.Click, AddressOf thumbButtonBack_Click + + thumbButtonForward = New ThumbnailToolbarButton(My.Resources.nextArrow, "Forward") + AddHandler thumbButtonForward.Click, AddressOf thumbButtonForward_Click + + thumbButtonRefresh = New ThumbnailToolbarButton(My.Resources.refresh, "Refresh") + AddHandler thumbButtonRefresh.Click, AddressOf thumbButtonRefresh_Click + + ' Create our thumbnail toolbar buttons for the RichTextBox doc + thumbButtonCut = New ThumbnailToolbarButton(My.Resources.cut, "Cut") + AddHandler thumbButtonCut.Click, AddressOf thumbButtonCut_Click + + thumbButtonCopy = New ThumbnailToolbarButton(My.Resources.copy, "Copy") + AddHandler thumbButtonCopy.Click, AddressOf thumbButtonCopy_Click + + thumbButtonPaste = New ThumbnailToolbarButton(My.Resources.paste, "Paste") + AddHandler thumbButtonPaste.Click, AddressOf thumbButtonPaste_Click + + thumbButtonSelectAll = New ThumbnailToolbarButton(My.Resources.selectAll, "SelectAll") + AddHandler thumbButtonSelectAll.Click, AddressOf thumbButtonSelectAll_Click + + AddHandler FormClosing, AddressOf Form1_FormClosing + End Sub + + Private cancelFormClosing As Boolean = False + + Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) + ' If the user is closing the app, ask them if they wish to close the current tab + ' or all the tabs + + If tabControl1 IsNot Nothing AndAlso tabControl1.TabPages.Count > 0 Then + If tabControl1.TabPages.Count = 1 Then + ' close the tab and the application + cancelFormClosing = False + Else + ' More than 1 tab.... show the user the TaskDialog + Dim tdClose As New TaskDialog() + tdClose.Caption = "Tabbed Thumbnail demo (Winforms)" + tdClose.InstructionText = "Do you want to close all the tabs or the current tab?" + tdClose.Cancelable = True + tdClose.OwnerWindowHandle = Me.Handle + + Dim closeAllTabsButton As New TaskDialogButton("closeAllTabsButton", "Close all tabs") + closeAllTabsButton.Default = True + AddHandler closeAllTabsButton.Click, AddressOf closeAllTabsButton_Click + tdClose.Controls.Add(closeAllTabsButton) + + Dim closeCurrentTabButton As New TaskDialogButton("closeCurrentTabButton", "Close current tab") + AddHandler closeCurrentTabButton.Click, AddressOf closeCurrentTabButton_Click + tdClose.Controls.Add(closeCurrentTabButton) + + tdClose.Show() + End If + End If + + e.Cancel = cancelFormClosing + End Sub + + Private Sub closeCurrentTabButton_Click(ByVal sender As Object, ByVal e As EventArgs) + button2_Click(Me, EventArgs.Empty) + cancelFormClosing = True + End Sub + + Private Sub closeAllTabsButton_Click(ByVal sender As Object, ByVal e As EventArgs) + cancelFormClosing = False + End Sub + + Private Sub Form1_SizeChanged(ByVal sender As Object, ByVal e As EventArgs) + ' If we are in minimized state, don't invalidate the thumbnail as we want to keep the + ' cached image. Minimized forms can't be captured. + If WindowState <> FormWindowState.Minimized Then + ' Just invalidate the selected tab's thumbnail so we can recapture them when requested + If tabControl1.TabPages.Count > 0 AndAlso tabControl1.SelectedTab IsNot Nothing Then + TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview(tabControl1.SelectedTab).InvalidatePreview() + End If + + End If + End Sub + + Private Function FindTab(ByVal handle As IntPtr) As TabPage + If handle = IntPtr.Zero Then + Return Nothing + End If + + For Each page As TabPage In tabControl1.TabPages + If page.Handle = handle Then + Return page + End If + Next page + + Return Nothing + End Function + + Private Sub thumbButtonBack_Click(ByVal sender As Object, ByVal e As ThumbnailButtonClickedEventArgs) + Dim page As TabPage = FindTab(e.WindowHandle) + + If page IsNot Nothing AndAlso TypeOf page.Controls(0) Is WebBrowser Then + CType(page.Controls(0), WebBrowser).GoBack() + End If + End Sub + + Private Sub thumbButtonForward_Click(ByVal sender As Object, ByVal e As ThumbnailButtonClickedEventArgs) + Dim page As TabPage = FindTab(e.WindowHandle) + + If page IsNot Nothing AndAlso TypeOf page.Controls(0) Is WebBrowser Then + CType(page.Controls(0), WebBrowser).GoForward() + End If + End Sub + + + Private Sub thumbButtonRefresh_Click(ByVal sender As Object, ByVal e As ThumbnailButtonClickedEventArgs) + Dim page As TabPage = FindTab(e.WindowHandle) + + If page IsNot Nothing AndAlso TypeOf page.Controls(0) Is WebBrowser Then + CType(page.Controls(0), WebBrowser).Refresh() + End If + End Sub + + + Private Sub thumbButtonCut_Click(ByVal sender As Object, ByVal e As ThumbnailButtonClickedEventArgs) + Dim page As TabPage = FindTab(e.WindowHandle) + + If page IsNot Nothing AndAlso TypeOf page.Controls(0) Is RichTextBox Then + CType(page.Controls(0), RichTextBox).Cut() + + ' If there is a selected tab, take it's screenshot + ' invalidate the tab's thumbnail + ' update the "preview" object with the new thumbnail + If tabControl1.Size <> Size.Empty AndAlso tabControl1.TabPages.Count > 0 AndAlso tabControl1.SelectedTab IsNot Nothing Then + UpdatePreviewBitmap(tabControl1.SelectedTab) + End If + End If + End Sub + + Private Sub thumbButtonCopy_Click(ByVal sender As Object, ByVal e As ThumbnailButtonClickedEventArgs) + Dim page As TabPage = FindTab(e.WindowHandle) + + If page IsNot Nothing AndAlso TypeOf page.Controls(0) Is RichTextBox Then + CType(page.Controls(0), RichTextBox).Copy() + + ' If there is a selected tab, take it's screenshot + ' invalidate the tab's thumbnail + ' update the "preview" object with the new thumbnail + If tabControl1.Size <> Size.Empty AndAlso tabControl1.TabPages.Count > 0 AndAlso tabControl1.SelectedTab IsNot Nothing Then + UpdatePreviewBitmap(tabControl1.SelectedTab) + End If + End If + End Sub + + Private Sub thumbButtonPaste_Click(ByVal sender As Object, ByVal e As ThumbnailButtonClickedEventArgs) + Dim page As TabPage = FindTab(e.WindowHandle) + + If page IsNot Nothing AndAlso TypeOf page.Controls(0) Is RichTextBox Then + CType(page.Controls(0), RichTextBox).Paste() + + ' If there is a selected tab, take it's screenshot + ' invalidate the tab's thumbnail + ' update the "preview" object with the new thumbnail + If tabControl1.Size <> Size.Empty AndAlso tabControl1.TabPages.Count > 0 AndAlso tabControl1.SelectedTab IsNot Nothing Then + UpdatePreviewBitmap(tabControl1.SelectedTab) + End If + End If + End Sub + + Private Sub thumbButtonSelectAll_Click(ByVal sender As Object, ByVal e As ThumbnailButtonClickedEventArgs) + Dim page As TabPage = FindTab(e.WindowHandle) + + If page IsNot Nothing AndAlso TypeOf page.Controls(0) Is RichTextBox Then + CType(page.Controls(0), RichTextBox).SelectAll() + End If + End Sub + + Private Sub tabControl1_Selecting(ByVal sender As Object, ByVal e As TabControlCancelEventArgs) + ' Before selecting, + ' If there is a selected tab, take it's screenshot + ' invalidate the tab's thumbnail + ' update the "preview" object with the new thumbnail + If tabControl1.TabPages.Count > 0 AndAlso tabControl1.SelectedTab IsNot Nothing Then + UpdatePreviewBitmap(previousSelectedPage) + End If + + ' update our selected tab + previousSelectedPage = tabControl1.SelectedTab + End Sub + + ''' + ''' Helper method to update the thumbnail preview for a given tab page. + ''' + ''' + Private Sub UpdatePreviewBitmap(ByVal tabPage As TabPage) + If tabPage IsNot Nothing Then + Dim preview As TabbedThumbnail = TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview(tabPage) + + If preview IsNot Nothing Then + Dim bitmap As Bitmap = TabbedThumbnailScreenCapture.GrabWindowBitmap(tabPage.Handle, tabPage.Size) + preview.SetImage(bitmap) + End If + + + End If + End Sub + + Private Sub tabControl1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) + ' Make sure we let the Taskbar know about the active/selected tab + ' Tabbed thumbnails need to be updated to indicate which one is currently selected + If tabControl1.TabPages.Count > 0 AndAlso tabControl1.SelectedTab IsNot Nothing Then + TaskbarManager.Instance.TabbedThumbnail.SetActiveTab(tabControl1.SelectedTab) + + If TypeOf tabControl1.SelectedTab.Controls(0) Is RichTextBox Then + button4.Enabled = True + Else + button4.Enabled = False + End If + End If + End Sub + + Private Sub Window_Scroll(ByVal sender As Object, ByVal e As HtmlElementEventArgs) + ' If there is a selected tab, take it's screenshot + ' invalidate the tab's thumbnail + ' update the "preview" object with the new thumbnail + If tabControl1.TabPages.Count > 0 AndAlso tabControl1.SelectedTab IsNot Nothing Then + UpdatePreviewBitmap(tabControl1.SelectedTab) + End If + End Sub + + Private Sub wb_Navigated(ByVal sender As Object, ByVal e As WebBrowserNavigatedEventArgs) + ' If there is a selected tab, take it's screenshot + ' invalidate the tab's thumbnail + ' update the "preview" object with the new thumbnail + If tabControl1.TabPages.Count > 0 AndAlso tabControl1.SelectedTab IsNot Nothing Then + UpdatePreviewBitmap(tabControl1.SelectedTab) + End If + + ' Update the combobox / addressbar + comboBox1.Text = (CType(sender, WebBrowser)).Document.Url.ToString() + + If Not scrollEventAdded Then + AddHandler (CType(sender, WebBrowser)).Document.Window.Scroll, AddressOf Window_Scroll + scrollEventAdded = True + End If + End Sub + + ''' + ''' Create a new tab, add a webbrowser and navigate the given address/URL + ''' + ''' + ''' + Private Sub button1_Click(ByVal sender As Object, ByVal args As System.EventArgs) Handles button1.Click + Dim newTab As New TabPage(comboBox1.Text) + tabControl1.TabPages.Add(newTab) + Dim wb As New WebBrowser() + AddHandler wb.DocumentTitleChanged, AddressOf wb_DocumentTitleChanged + AddHandler wb.DocumentCompleted, AddressOf wb_DocumentCompleted + AddHandler wb.Navigated, AddressOf wb_Navigated + AddHandler wb.ProgressChanged, AddressOf wb_ProgressChanged + wb.Dock = DockStyle.Fill + wb.Navigate(comboBox1.Text) + newTab.Controls.Add(wb) + + ' Add thumbnail toolbar buttons + TaskbarManager.Instance.ThumbnailToolbars.AddButtons(newTab.Handle, thumbButtonBack, thumbButtonForward, thumbButtonRefresh) + + ' Add a new preview + Dim preview As New TabbedThumbnail(Me.Handle, newTab.Handle) + + ' Event handlers for this preview + AddHandler preview.TabbedThumbnailActivated, AddressOf preview_TabbedThumbnailActivated + AddHandler preview.TabbedThumbnailClosed, AddressOf preview_TabbedThumbnailClosed + AddHandler preview.TabbedThumbnailMaximized, AddressOf preview_TabbedThumbnailMaximized + AddHandler preview.TabbedThumbnailMinimized, AddressOf preview_TabbedThumbnailMinimized + + TaskbarManager.Instance.TabbedThumbnail.AddThumbnailPreview(preview) + + ' Select the tab in the application UI as well as taskbar tabbed thumbnail list + tabControl1.SelectedTab = newTab + TaskbarManager.Instance.TabbedThumbnail.SetActiveTab(tabControl1.SelectedTab) + + ' set false for this new webbrowser + scrollEventAdded = False + + ' + button2.Enabled = True + End Sub + + Private Sub wb_ProgressChanged(ByVal sender As Object, ByVal e As WebBrowserProgressChangedEventArgs) + ' Based on the webbrowser's progress, update our statusbar progressbar + If e.CurrentProgress >= 0 Then + toolStripProgressBar1.Maximum = CInt(Fix(e.MaximumProgress)) + toolStripProgressBar1.Value = CInt(Fix(e.CurrentProgress)) + End If + End Sub + + Private Sub wb_DocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs) + ' If there is a selected tab, take it's screenshot + ' invalidate the tab's thumbnail + ' update the "preview" object with the new thumbnail + If tabControl1.TabPages.Count > 0 AndAlso tabControl1.SelectedTab IsNot Nothing Then + UpdatePreviewBitmap(tabControl1.SelectedTab) + End If + End Sub + + Private Sub wb_DocumentTitleChanged(ByVal sender As Object, ByVal e As System.EventArgs) + ' When the webpage's title changes, + ' update the tab's title and taskbar thumbnail's title + Dim page As TabPage = TryCast((CType(sender, WebBrowser)).Parent, TabPage) + + If page IsNot Nothing Then + page.Text = (CType(sender, WebBrowser)).DocumentTitle + + Dim preview As TabbedThumbnail = TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview(page) + + If preview IsNot Nothing Then + preview.Title = page.Text + End If + + End If + End Sub + + ''' + ''' Close button - close the specific tab and also + ''' remove the thumbnail preview + ''' + ''' + ''' + Private Sub button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles button2.Click + If tabControl1.SelectedTab IsNot Nothing Then + TaskbarManager.Instance.TabbedThumbnail.RemoveThumbnailPreview(tabControl1.SelectedTab) + tabControl1.TabPages.Remove(tabControl1.SelectedTab) + End If + + If tabControl1.TabPages.Count = 0 Then + button2.Enabled = False + End If + End Sub + + ''' + ''' Open a user-specified text file in a new tab (using a RichTextBox) + ''' + ''' + ''' + Private Sub button3_Click(ByVal sender As Object, ByVal e As EventArgs) Handles button3.Click + ' Open text file + Dim cfd As New CommonOpenFileDialog() + + CommonFileDialogStandardFilters.TextFiles.ShowExtensions = True + Dim rtfFilter As New CommonFileDialogFilter("RTF Files", ".rtf") + rtfFilter.ShowExtensions = True + + cfd.Filters.Add(CommonFileDialogStandardFilters.TextFiles) + cfd.Filters.Add(rtfFilter) + + If cfd.ShowDialog() = CommonFileDialogResult.OK Then + Dim newTab As New TabPage(Path.GetFileName(cfd.FileName)) + tabControl1.TabPages.Add(newTab) + Dim rtbText As New RichTextBox() + AddHandler rtbText.KeyDown, AddressOf rtbText_KeyDown + AddHandler rtbText.MouseMove, AddressOf rtbText_MouseMove + AddHandler rtbText.KeyUp, AddressOf rtbText_KeyUp + rtbText.Dock = DockStyle.Fill + + ' Based on the extension, load the file appropriately in the RichTextBox + If Path.GetExtension(cfd.FileName).ToLower() = ".txt" Then + rtbText.LoadFile(cfd.FileName, RichTextBoxStreamType.PlainText) + ElseIf Path.GetExtension(cfd.FileName).ToLower() = ".rtf" Then + rtbText.LoadFile(cfd.FileName, RichTextBoxStreamType.RichText) + End If + + ' Update the tab + newTab.Controls.Add(rtbText) + + ' Add a new preview + Dim preview As New TabbedThumbnail(Me.Handle, newTab.Handle) + + ' Event handlers for this preview + AddHandler preview.TabbedThumbnailActivated, AddressOf preview_TabbedThumbnailActivated + AddHandler preview.TabbedThumbnailClosed, AddressOf preview_TabbedThumbnailClosed + AddHandler preview.TabbedThumbnailMaximized, AddressOf preview_TabbedThumbnailMaximized + AddHandler preview.TabbedThumbnailMinimized, AddressOf preview_TabbedThumbnailMinimized + + preview.ClippingRectangle = GetClippingRectangle(rtbText) + TaskbarManager.Instance.TabbedThumbnail.AddThumbnailPreview(preview) + + ' Add thumbnail toolbar buttons + TaskbarManager.Instance.ThumbnailToolbars.AddButtons(newTab.Handle, thumbButtonCut, thumbButtonCopy, thumbButtonPaste, thumbButtonSelectAll) + + ' Select the tab in the application UI as well as taskbar tabbed thumbnail list + tabControl1.SelectedTab = newTab + TaskbarManager.Instance.TabbedThumbnail.SetActiveTab(tabControl1.SelectedTab) + + button2.Enabled = True + button4.Enabled = True + End If + End Sub + + Private Sub preview_TabbedThumbnailMinimized(ByVal sender As Object, ByVal e As TabbedThumbnailEventArgs) + ' User clicked on the minimize button on the thumbnail's context menu + ' Minimize the app + Me.WindowState = FormWindowState.Minimized + End Sub + + Private Sub preview_TabbedThumbnailMaximized(ByVal sender As Object, ByVal e As TabbedThumbnailEventArgs) + ' User clicked on the maximize button on the thumbnail's context menu + ' Maximize the app + Me.WindowState = FormWindowState.Maximized + + ' If there is a selected tab, take it's screenshot + ' invalidate the tab's thumbnail + ' update the "preview" object with the new thumbnail + If tabControl1.Size <> Size.Empty AndAlso tabControl1.TabPages.Count > 0 AndAlso tabControl1.SelectedTab IsNot Nothing Then + UpdatePreviewBitmap(tabControl1.SelectedTab) + End If + End Sub + + Private Sub preview_TabbedThumbnailClosed(ByVal sender As Object, ByVal e As TabbedThumbnailClosedEventArgs) + Dim pageClosed As TabPage = Nothing + + ' Find the tabpage that was "closed" by the user (via the taskbar tabbed thumbnail) + For Each page As TabPage In tabControl1.TabPages + If page.Handle = e.WindowHandle Then + pageClosed = page + Exit For + End If + Next page + + If pageClosed IsNot Nothing Then + ' Remove the event handlers + Dim wb As WebBrowser = TryCast(pageClosed.Controls(0), WebBrowser) + + If wb IsNot Nothing Then + RemoveHandler wb.DocumentTitleChanged, AddressOf wb_DocumentTitleChanged + RemoveHandler wb.DocumentCompleted, AddressOf wb_DocumentCompleted + RemoveHandler wb.Navigated, AddressOf wb_Navigated + RemoveHandler wb.ProgressChanged, AddressOf wb_ProgressChanged + RemoveHandler wb.Document.Window.Scroll, AddressOf Window_Scroll + + wb.Dispose() + Else + ' It's most likely a RichTextBox. + + Dim rtbText As RichTextBox = TryCast(pageClosed.Controls(0), RichTextBox) + + If rtbText IsNot Nothing Then + RemoveHandler rtbText.KeyDown, AddressOf rtbText_KeyDown + RemoveHandler rtbText.MouseMove, AddressOf rtbText_MouseMove + RemoveHandler rtbText.KeyUp, AddressOf rtbText_KeyUp + End If + + rtbText.Dispose() + End If + + ' Finally, remove the tab from our UI + If pageClosed IsNot Nothing Then + tabControl1.TabPages.Remove(pageClosed) + End If + + ' Dispose the tab + pageClosed.Dispose() + + If tabControl1.TabPages.Count > 0 Then + button2.Enabled = True + Else + button2.Enabled = False + End If + End If + + Dim tabbedThumbnail As TabbedThumbnail = TryCast(sender, TabbedThumbnail) + If tabbedThumbnail IsNot Nothing Then + ' Remove the event handlers from the tab preview + RemoveHandler tabbedThumbnail.TabbedThumbnailActivated, AddressOf preview_TabbedThumbnailActivated + RemoveHandler tabbedThumbnail.TabbedThumbnailClosed, AddressOf preview_TabbedThumbnailClosed + RemoveHandler tabbedThumbnail.TabbedThumbnailMaximized, AddressOf preview_TabbedThumbnailMaximized + RemoveHandler tabbedThumbnail.TabbedThumbnailMinimized, AddressOf preview_TabbedThumbnailMinimized + End If + End Sub + + Private Sub preview_TabbedThumbnailActivated(ByVal sender As Object, ByVal e As TabbedThumbnailEventArgs) + ' User selected a tab via the thumbnail preview + ' Select the corresponding control in our app + For Each page As TabPage In tabControl1.TabPages + If page.Handle = e.WindowHandle Then + ' Select the tab in the application UI as well as taskbar tabbed thumbnail list + tabControl1.SelectedTab = page + TaskbarManager.Instance.TabbedThumbnail.SetActiveTab(page) + End If + Next page + + ' Also activate our parent form (incase we are minimized, this will restore it) + If Me.WindowState = FormWindowState.Minimized Then + Me.WindowState = FormWindowState.Normal + End If + End Sub + + Private Sub rtbText_KeyUp(ByVal sender As Object, ByVal e As KeyEventArgs) + Dim preview As TabbedThumbnail = TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview(CType(sender, Control)) + If preview IsNot Nothing Then + preview.ClippingRectangle = GetClippingRectangle(CType(sender, RichTextBox)) + End If + End Sub + + Private Sub rtbText_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) + Dim preview As TabbedThumbnail = TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview(CType(sender, Control)) + If preview IsNot Nothing Then + preview.ClippingRectangle = GetClippingRectangle(CType(sender, RichTextBox)) + End If + End Sub + + Private Sub rtbText_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) + Dim preview As TabbedThumbnail = TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview(CType(sender, Control)) + If preview IsNot Nothing Then + preview.ClippingRectangle = GetClippingRectangle(CType(sender, RichTextBox)) + End If + End Sub + + Private clipText As String = "Cli&p thumbnail" + Private showFullText As String = "F&ull thumbnail" + + Private Sub button4_Click(ByVal sender As Object, ByVal e As EventArgs) Handles button4.Click + ' Clip the thumbnail when showing the thumbnail preview or aero peek + + ' Only supported for RTF/Text files (as an example to show that we can do thumbnail clip + ' for specific windows if needed) + + ' + Dim preview As TabbedThumbnail = TaskbarManager.Instance.TabbedThumbnail.GetThumbnailPreview(tabControl1.SelectedTab) + + If tabControl1.SelectedTab IsNot Nothing AndAlso preview IsNot Nothing Then + Dim rtbText As RichTextBox = TryCast(tabControl1.SelectedTab.Controls(0), RichTextBox) + + If button4.Text = clipText AndAlso rtbText IsNot Nothing Then + preview.ClippingRectangle = GetClippingRectangle(rtbText) + ElseIf button4.Text = showFullText Then + preview.ClippingRectangle = Rectangle.Empty + End If + End If + + ' toggle the text + If button4.Text = clipText Then + button4.Text = showFullText + Else + button4.Text = clipText + End If + End Sub + + Private Function GetClippingRectangle(ByVal rtbText As RichTextBox) As Rectangle + Dim index As Integer = rtbText.GetFirstCharIndexOfCurrentLine() + Dim point As Point = rtbText.GetPositionFromCharIndex(index) + Return New Rectangle(point, New Size(200, 119)) + End Function + + ''' + ''' Navigates to the given path or URL file. + ''' Uses the currently selected tab + ''' + ''' + Friend Sub Navigate(ByVal path As String) + Dim lines() As String = File.ReadAllLines(path) + Dim urlString As String = "" + + For Each line As String In lines + If line.StartsWith("URL=") Then + urlString = line.Replace("URL=", "") + + Exit For + End If + Next line + + If (Not String.IsNullOrEmpty(path)) AndAlso tabControl1.TabPages.Count > 0 AndAlso tabControl1.SelectedTab IsNot Nothing Then + If TypeOf tabControl1.SelectedTab.Controls(0) Is WebBrowser Then + CType(tabControl1.SelectedTab.Controls(0), WebBrowser).Navigate(urlString) + End If + Else + ' Simulate a click + comboBox1.Text = urlString + button1_Click(Me, EventArgs.Empty) + End If + End Sub + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/My Project/AssemblyInfo.vb b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..ba29ed68 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/My Project/AssemblyInfo.vb @@ -0,0 +1,40 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/My Project/Resources.Designer.vb b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/My Project/Resources.Designer.vb new file mode 100644 index 00000000..ceb7abbc --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/My Project/Resources.Designer.vb @@ -0,0 +1,112 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + Friend ReadOnly Property copy() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("copy", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + Friend ReadOnly Property cut() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("cut", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + Friend ReadOnly Property nextArrow() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("nextArrow", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + Friend ReadOnly Property paste() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("paste", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + Friend ReadOnly Property prevArrow() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("prevArrow", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + Friend ReadOnly Property refresh() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("refresh", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + Friend ReadOnly Property selectAll() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("selectAll", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/My Project/Resources.resx b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/My Project/Resources.resx new file mode 100644 index 00000000..4281ce26 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/My Project/Resources.resx @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\copy.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\cut.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\nextArrow.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\paste.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\prevArrow.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\refresh.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\selectAll.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/My Project/Settings.Designer.vb b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/My Project/Settings.Designer.vb new file mode 100644 index 00000000..34f1fe80 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/My Project/Settings.Designer.vb @@ -0,0 +1,29 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:2.0.50727.4918 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + +Imports Microsoft.VisualBasic +Imports System +Namespace My + + + _ + Friend NotInheritable Partial Class Settings + Inherits System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = (CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()), Settings)) + + Public Shared ReadOnly Property [Default]() As Settings + Get + Return defaultInstance + End Get + End Property + End Class +End Namespace diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/My Project/Settings.settings b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Program.vb b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Program.vb new file mode 100644 index 00000000..d651f4b1 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Program.vb @@ -0,0 +1,29 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.Taskbar + +Namespace Microsoft.WindowsAPICodePack.Samples.TabbedThumbnailDemo + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + If Not TaskbarManager.IsPlatformSupported Then + MessageBox.Show("This demo requires to be run on Windows 7", "Demo needs Windows 7", MessageBoxButtons.OK, MessageBoxIcon.Error) + System.Environment.Exit(0) + Return + End If + + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New Form1()) + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/Resources.resx b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/Resources.resx new file mode 100644 index 00000000..76a277fe --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/Resources.resx @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8 + AAACRElEQVQ4T6WTW0iTYRyHXygLsaBujOhAKBKUFkZGEjms/FBzeWqmWTMNddMgDxiREdphYhCCQSIm + pRSiZqaZdNIShFCKGN5UGEFpROLa1Dkmm0/fO+O76E69eOC7+J7n5v39BSCWg5ifn2cpCCHWqfgJr9dL + ZOMYUU0/0DV9/48xdM3jRD38g65zlv29HkJbXUhHlcN9EY/Hw+EWD/FdkPR4ipS2X6S0j3O8bRxD528M + L72k9tgx3B9BX/+O5IZhpKPK0SqBYm5uDkt1KXmWVnJbRjE+d5LVNUH2Uzs5fR7yqu6SnhDDmaMKRkWh + OO4I0tECbrebG0+uMvFqL6+7zVT2f6Dk7QzFQ1Ba14MpTkd2ehJZRjO1+gLeZJiRjhZwuVwUdkzR1HiN + okcDFDRbudM/iOUTVF6soCzPSL65iPMXLMy+N/G1qgLpaAGn08m9Bx/JvvKMhPrPFJ7rIM3UgrHPTU5m + GgmHoth3IJ2BF3r1tXVYh08hHS0wPT1NdVkzEbF1JBYPEro9l6CAWPzLvrBZp5c/+pi5rs7lhKCyfA3S + 0QIOh4OG/Cp27imgtGaI6N2JKOt3EX55BKUXNqny1g1+WDf6QZwgXqxFOlrAbrczGryDLWHHMJW30iFC + qBH+BBXWkmFVn/a0mfwIwc2Tq2BAkBy7GuloAZvNhkut3hYH6VZy+CkCaRfbiEgMIfNSGKklMaQqwZwN + DeBb8kpuRa5AOlpgcnKSpaAF/m1azlIuazEsTNl3EAsfgYtk4ZiWc8rS/QvFMEMOBF9DCwAAAABJRU5E + rkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8 + AAABuElEQVQ4T8WTT0jTYRjHfxfvgTDw1i08KCXVoSDsINROsUOFEGUH2yLoNnBRQ2SyGqOpu9gfqsFg + 2lhBCyMiRERybOWcGZLQu5ZBydjmGmPN/T6+7xiD8bsoHjx8Lw+f5/Mc3u+rAdp+sq9ldbgu0HWdvUTT + tEMybU1BrVbjyL0UPZ40R92C0z7BCY/A8kTgjwkiKwJvPM2DuWUUK5ePKUlTUK1WcbxJ81KAKwbuRXDO + weR3WJHUf5noFthnf6JYuXxWxtQUVCoVkvk8/+RkS4eUhD/8hlAG5kvwbRv+yvnMqkCxBkG5XMb+4jnR + 9VVqUiL36peVTMh8bcwSmR8o1iAolUqcHLxI/8RN7r9/xefNAmW9Sl7f5o8UZGUqUrL+awPFGgTFYpEO + cyeHL3XRc7uPcyMDXHvm4HJgBFtoCls4SmBpkcRaEsUaBIVCgY7zVrqvuzhuHeXMkI/euw+54JnA4vUw + 8NTPrdfTOCNBFGsQ5HI52q8+ouvOW04Nv8PsnqV/bIEr45+48fgLo+E1gh83mIzEUaxBkM1m2UsMgkaz + VDnU++4mrUVStWxITKogu0hrlQ/0N+4AtbCfjuJSibQAAAAASUVORK5CYII= + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8 + AAACFElEQVQ4T6WRX0hTYRjG34tCCcaMJIgulLqKLtRIKErTQVAQEUMGBYnBIAoSIohsOAPpDxgxJi4w + W3+UiP4ogrMWsbCi2G5KMi/aYOestQ0swulZ+9N6el/B5RmrXXTg4fm+5/m+9+Pwo3w+j7+JiKrK9ZTL + 5XAvCjjeAWdeA+9/AZ5vPyE5D2gQf9y3GyNjg7g9B4zMAvYn2UJP6XQaz5UAlj++jyxLch7QKj67geDo + JniUcVw+CZh2+gs9aZoGaiQc7T8Nh28Ql3yTeDQTwFLOA8T9qhMd/vU4MGTEiwkVww/chZ6SySQqm2zY + dHwA287egKn3Fo7dHIXkMkDc4WvAqZeb0XTNiOlPbdy1F3qKRCIL8Xg8oyiKFg6HF8VjsVgmkUhkZQCv + fxT3vM9Go9E09y0sqmLVsfaUUD1nNSzx0n0ZTDXl+iWMV7cQ+rcSbESY+fARX5jCSowXHz6F/W0KPW8y + sF5w4qD5hB7jmJXg7SRcoQpM3bXg87NGHcb74y4MTc/DNRnAkX174XF36jGO8ssTlRV4ZV4Fr50wbCEd + xkNdXmzf34s663Ws5rM5V60eo7vrPO6c68DXvmq01a+DwWDQYWy3dMO2cRfMTg9Mph2YOrz2D0ZG911V + VS0UCiWDweC8OO9TjDclmHi9UKoX3MUYmzlYKcEmeAXjMubiM5IT/xYZWdUlJPmaf/ZMjP5HvwFZvlxd + l91a5QAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8 + AAABVElEQVQ4T72SPUvDYBSF7+Kgi1nUrf0FCuKgSwUruLt01N1FwYKCix8IQhEV3FQQJ3FwqBT9BYVu + CXQLhBCQShOQ2FaSIRzvjSVW86oFweHA4XByc9+HS1EUoVdEpJmmaXme9yxib3M2HARBqsf5AIVhiKJR + x2G1CvEcTrqu27q/LaB0A7BvczbebDZRGiTUV6eTnvyMOp0O6GgJWq2C2BPNNRqN1lZtBGd3e2D/ytms + 4zgojxFO85T0OB8l3/fRKxmg67pj2/YLq20YxpMMsCwr1YsHxGvw2vJhV+IzsjYr15V4yb72NFJAzCqy + jKrHA4diiCe6j5WNnQSOCqxkV8cT2L1EGuLM8gXyuakEjgqsZIvXhIPz9d8hqsCqsp8gZhXAVFnfEFVg + ZeA7xHoEPOIDzndg5RIrm4U0xIX9NWw/lD9BVIGNL3G+j0v8X4j8dPqL3gCN8zpouxGRbAAAAABJRU5E + rkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAAEkAAAAgCAIAAADR6sIZAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8 + AAACdElEQVRYR93RTU8TURgF4PcHyFYKpRAhkYWyEFbQHbDiQxIbQRLYyIJ+g4LMB5XGjnESEBsBGVrB + Ok6pxVZqlTrQNGm6VRMWuuHfuL7h3uTmzW2qJM/q7M45cJQ/varA/n0h3p8L+x8A66c18c5q6xw2zmoi + lWsbJHhRqrLo36sNYFd1nNOqToLYt4p4J5UYB+2kIlKpopHg6Zcyy1qx3ABfy2uCgPzZFu/Yljkox7ZI + BVshwdKnEstyrtQA+dKyIBDKFFnCH4sNkC2GcY6KYRLMWwUWr1VAShe8HHzpAsVhwScIPEzlWebe55HM + /Bzah/ycIDCznxXvIDvDYfYgS/EuOysITCUyLA+SmbqaTmYo3mamcfYz0yS4t2uxeHYtJMPyoO1ZHpyE + 5SHB+LbJcnfHrKuJHZPijTmBs2tOkGDkdUq8rdQIh9GtFMV2ahRnJzVKguvzEkuzV0LySc0cHD6Jwi85 + cAKSg3SFul1aBJrnJRaHV0KiHnIpbPFJFH6pRRBo8cosrT4ZyS+3cnD6ZYqA7MQJyk4SOH0KS5tfQQoo + bRxcAYUiqLhwQoqLBC6/ytIeUJGCajuHjqBKEVI7cMJqBwluhCIsneEI0kKkk0PXQkSkxUgXCW4uRlm6 + H0WRHke70Zai3YLArScay+0Vra56VjQKSevBkbUeEtxRdJZeVUda1Xs59K3qIkX0PhL0P4uzDMTideWO + xSm0uBvnedxNgqENg+mlMYSzaQxxGN40RHplDJNgzDDF2zPHOIzvmRQJc1wQuG/lWCatHFI6N8lhKp0T + 6TA3RYLEj3OW5M/z/8mv8yQJrvUPsjQNDDaAe7BJkL93Aa1Rr/C1RAAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/copy.ico b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/copy.ico new file mode 100644 index 00000000..8e32b4cd Binary files /dev/null and b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/copy.ico differ diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/cut.ico b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/cut.ico new file mode 100644 index 00000000..ef04a3a7 Binary files /dev/null and b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/cut.ico differ diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/nextArrow.ico b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/nextArrow.ico new file mode 100644 index 00000000..6203d1a6 Binary files /dev/null and b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/nextArrow.ico differ diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/paste.ico b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/paste.ico new file mode 100644 index 00000000..0092cabc Binary files /dev/null and b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/paste.ico differ diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/prevArrow.ico b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/prevArrow.ico new file mode 100644 index 00000000..73ebec75 Binary files /dev/null and b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/prevArrow.ico differ diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/refresh.ico b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/refresh.ico new file mode 100644 index 00000000..4e362e54 Binary files /dev/null and b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/refresh.ico differ diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/selectAll.ico b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/selectAll.ico new file mode 100644 index 00000000..68a6f12a Binary files /dev/null and b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/Resources/selectAll.ico differ diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/TabbedThumbnailDemoWinforms.sln b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/TabbedThumbnailDemoWinforms.sln new file mode 100644 index 00000000..bef605db --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/TabbedThumbnailDemoWinforms.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TabbedThumbnailDemoWinforms", "TabbedThumbnailDemoWinforms.vbproj", "{69865974-3934-4060-B9F5-29B5FAE26DF7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {69865974-3934-4060-B9F5-29B5FAE26DF7}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {69865974-3934-4060-B9F5-29B5FAE26DF7}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {69865974-3934-4060-B9F5-29B5FAE26DF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {69865974-3934-4060-B9F5-29B5FAE26DF7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {69865974-3934-4060-B9F5-29B5FAE26DF7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {69865974-3934-4060-B9F5-29B5FAE26DF7}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/TabbedThumbnailDemoWinforms.vbproj b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/TabbedThumbnailDemoWinforms.vbproj new file mode 100644 index 00000000..98e7fec7 --- /dev/null +++ b/source/Samples/Shell/TabbedThumbnailDemo/VB/Winforms/TabbedThumbnailDemoWinforms.vbproj @@ -0,0 +1,191 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {E17540B9-E5FC-489F-8AE6-38657ED9998D} + WinExe + + + TabbedThumbnailDemoWinforms + v3.5 + On + Binary + Off + On + 512 + + + + + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + true + true + prompt + AllRules.ruleset + + + pdbonly + true + bin\Release\ + false + true + prompt + AllRules.ruleset + + + + 3.0 + + + 3.0 + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + 3.0 + + + + + Form + + + FavoritesWindow.vb + + + Form + + + Form1.vb + + + + + FavoritesWindow.vb + Designer + + + Form1.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + Designer + My.Resources + + + True + Resources.resx + True + + + Designer + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + True + Settings.settings + True + + + + + + + + + + + + + + + + + + + + + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/TaskbarDemo/CS/RegistrationHelper/Properties/AssemblyInfo.cs b/source/Samples/Shell/TaskbarDemo/CS/RegistrationHelper/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..72d453fc --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/CS/RegistrationHelper/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("RegistrationHelper")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("44a7deec-694c-45ab-bff4-ef0a28185d1f")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/Shell/TaskbarDemo/CS/RegistrationHelper/RegistrationHelper.csproj b/source/Samples/Shell/TaskbarDemo/CS/RegistrationHelper/RegistrationHelper.csproj new file mode 100644 index 00000000..ef81d56d --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/CS/RegistrationHelper/RegistrationHelper.csproj @@ -0,0 +1,70 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC} + Exe + Properties + RegistrationHelper + RegistrationHelper + v3.5 + 512 + + + + + + + + + 3.5 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/TaskbarDemo/CS/RegistrationHelper/RegistrationHelperMain.cs b/source/Samples/Shell/TaskbarDemo/CS/RegistrationHelper/RegistrationHelperMain.cs new file mode 100644 index 00000000..3600708d --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/CS/RegistrationHelper/RegistrationHelperMain.cs @@ -0,0 +1,106 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Diagnostics; +using System.IO; +using System.Linq; +using Microsoft.Win32; + +namespace TaskbarDemo +{ + class RegistrationHelperMain + { + static void Main(string[] args) + { + if (args.Length < 6) + { + Console.WriteLine("Usage: [Ext2 [Ext3] ...]"); + Console.ReadLine(); + return; + } + try + { + + string progId = args[0]; + bool registerInHKCU = bool.Parse(args[1]); + string appId = args[2]; + string openWith = args[3]; + bool unregister = bool.Parse(args[4]); + + string[] associationsToRegister = args.Skip(5).ToArray(); + + if (registerInHKCU) + classesRoot = Registry.CurrentUser.OpenSubKey(@"Software\Classes"); + else + classesRoot = Registry.ClassesRoot; + + //First of all, unregister: + Array.ForEach(associationsToRegister, + assoc => UnregisterFileAssociation(progId, assoc)); + UnregisterProgId(progId); + + if (!unregister) + { + RegisterProgId(progId, appId, openWith); + Array.ForEach(associationsToRegister, + assoc => RegisterFileAssociation(progId, assoc)); + } + } + catch (Exception e) + { + Console.WriteLine(e); + Console.ReadLine(); + } + } + + static RegistryKey classesRoot; + + private static void RegisterProgId(string progId, string appId, + string openWith) + { + RegistryKey progIdKey = classesRoot.CreateSubKey(progId); + progIdKey.SetValue("FriendlyTypeName", "@shell32.dll,-8975"); + progIdKey.SetValue("DefaultIcon", "@shell32.dll,-47"); + progIdKey.SetValue("CurVer", progId); + progIdKey.SetValue("AppUserModelID", appId); + RegistryKey shell = progIdKey.CreateSubKey("shell"); + shell.SetValue(String.Empty, "Open"); + shell = shell.CreateSubKey("Open"); + shell = shell.CreateSubKey("Command"); + shell.SetValue(String.Empty, openWith); + + shell.Close(); + progIdKey.Close(); + } + private static void UnregisterProgId(string progId) + { + try + { + classesRoot.DeleteSubKeyTree(progId); + } + catch { } + } + private static void RegisterFileAssociation(string progId, string extension) + { + + RegistryKey openWithKey = classesRoot.CreateSubKey( + Path.Combine(extension, "OpenWithProgIds")); + openWithKey.SetValue(progId, String.Empty); + openWithKey.Close(); + } + private static void UnregisterFileAssociation(string progId, string extension) + { + try + { + RegistryKey openWithKey = classesRoot.CreateSubKey( + Path.Combine(extension, "OpenWithProgIds")); + openWithKey.DeleteValue(progId); + openWithKey.Close(); + } + catch(Exception e) + { + Debug.WriteLine("Error while unregistering file association: " + e.Message); + } + } + } +} diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo.sln b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo.sln new file mode 100644 index 00000000..e5460400 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo.sln @@ -0,0 +1,48 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TaskbarDemo", "TaskbarDemo\TaskbarDemo.csproj", "{12F17213-0DEC-41E6-91EB-48C74A0B6AB0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RegistrationHelper", "RegistrationHelper\RegistrationHelper.csproj", "{03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.Release|Any CPU.Build.0 = Release|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/ChildDocument.Designer.cs b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/ChildDocument.Designer.cs new file mode 100644 index 00000000..3f6d0925 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/ChildDocument.Designer.cs @@ -0,0 +1,291 @@ +namespace TaskbarDemo +{ + partial class ChildDocument + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ChildDocument)); + this.groupBoxIconOverlay = new System.Windows.Forms.GroupBox(); + this.labelNoIconOverlay = new System.Windows.Forms.Label(); + this.pictureIconOverlay3 = new System.Windows.Forms.PictureBox(); + this.pictureIconOverlay2 = new System.Windows.Forms.PictureBox(); + this.label7 = new System.Windows.Forms.Label(); + this.pictureIconOverlay1 = new System.Windows.Forms.PictureBox(); + this.groupBoxCustomCategories = new System.Windows.Forms.GroupBox(); + this.listBox1 = new System.Windows.Forms.ListBox(); + this.label5 = new System.Windows.Forms.Label(); + this.buttonRefreshTaskbarList = new System.Windows.Forms.Button(); + this.button1 = new System.Windows.Forms.Button(); + this.groupBoxProgressBar = new System.Windows.Forms.GroupBox(); + this.trackBar1 = new System.Windows.Forms.TrackBar(); + this.label8 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.comboBoxProgressBarStates = new System.Windows.Forms.ComboBox(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.groupBoxIconOverlay.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconOverlay3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconOverlay2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconOverlay1)).BeginInit(); + this.groupBoxCustomCategories.SuspendLayout(); + this.groupBoxProgressBar.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).BeginInit(); + this.SuspendLayout(); + // + // groupBoxIconOverlay + // + this.groupBoxIconOverlay.Controls.Add(this.labelNoIconOverlay); + this.groupBoxIconOverlay.Controls.Add(this.pictureIconOverlay3); + this.groupBoxIconOverlay.Controls.Add(this.pictureIconOverlay2); + this.groupBoxIconOverlay.Controls.Add(this.label7); + this.groupBoxIconOverlay.Controls.Add(this.pictureIconOverlay1); + this.groupBoxIconOverlay.Location = new System.Drawing.Point(13, 342); + this.groupBoxIconOverlay.Name = "groupBoxIconOverlay"; + this.groupBoxIconOverlay.Size = new System.Drawing.Size(305, 88); + this.groupBoxIconOverlay.TabIndex = 12; + this.groupBoxIconOverlay.TabStop = false; + this.groupBoxIconOverlay.Text = "Icon Overlay"; + // + // labelNoIconOverlay + // + this.labelNoIconOverlay.Location = new System.Drawing.Point(9, 50); + this.labelNoIconOverlay.Name = "labelNoIconOverlay"; + this.labelNoIconOverlay.Size = new System.Drawing.Size(35, 13); + this.labelNoIconOverlay.TabIndex = 0; + this.labelNoIconOverlay.Text = "None"; + this.labelNoIconOverlay.Click += new System.EventHandler(this.labelNoIconOverlay_Click); + // + // pictureIconOverlay3 + // + this.pictureIconOverlay3.Image = ((System.Drawing.Image)(resources.GetObject("pictureIconOverlay3.Image"))); + this.pictureIconOverlay3.Location = new System.Drawing.Point(126, 41); + this.pictureIconOverlay3.Name = "pictureIconOverlay3"; + this.pictureIconOverlay3.Size = new System.Drawing.Size(32, 32); + this.pictureIconOverlay3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureIconOverlay3.TabIndex = 3; + this.pictureIconOverlay3.TabStop = false; + this.pictureIconOverlay3.Click += new System.EventHandler(this.pictureIconOverlay3_Click); + // + // pictureIconOverlay2 + // + this.pictureIconOverlay2.Image = ((System.Drawing.Image)(resources.GetObject("pictureIconOverlay2.Image"))); + this.pictureIconOverlay2.Location = new System.Drawing.Point(88, 41); + this.pictureIconOverlay2.Name = "pictureIconOverlay2"; + this.pictureIconOverlay2.Size = new System.Drawing.Size(32, 32); + this.pictureIconOverlay2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureIconOverlay2.TabIndex = 2; + this.pictureIconOverlay2.TabStop = false; + this.pictureIconOverlay2.Click += new System.EventHandler(this.pictureIconOverlay2_Click); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(9, 20); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(209, 13); + this.label7.TabIndex = 1; + this.label7.Text = "Select an image to overlay on the task bar:"; + // + // pictureIconOverlay1 + // + this.pictureIconOverlay1.Image = ((System.Drawing.Image)(resources.GetObject("pictureIconOverlay1.Image"))); + this.pictureIconOverlay1.Location = new System.Drawing.Point(50, 41); + this.pictureIconOverlay1.Name = "pictureIconOverlay1"; + this.pictureIconOverlay1.Size = new System.Drawing.Size(32, 32); + this.pictureIconOverlay1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureIconOverlay1.TabIndex = 0; + this.pictureIconOverlay1.TabStop = false; + this.pictureIconOverlay1.Click += new System.EventHandler(this.pictureIconOverlay1_Click); + // + // groupBoxCustomCategories + // + this.groupBoxCustomCategories.Controls.Add(this.listBox1); + this.groupBoxCustomCategories.Controls.Add(this.buttonRefreshTaskbarList); + this.groupBoxCustomCategories.Controls.Add(this.label5); + this.groupBoxCustomCategories.Enabled = false; + this.groupBoxCustomCategories.Location = new System.Drawing.Point(13, 12); + this.groupBoxCustomCategories.Name = "groupBoxCustomCategories"; + this.groupBoxCustomCategories.Size = new System.Drawing.Size(304, 174); + this.groupBoxCustomCategories.TabIndex = 13; + this.groupBoxCustomCategories.TabStop = false; + this.groupBoxCustomCategories.Text = "Custom JumpList"; + // + // listBox1 + // + this.listBox1.FormattingEnabled = true; + this.listBox1.Items.AddRange(new object[] { + "Notepad", + "Calculator", + "Paint", + "WordPad", + "Windows Explorer", + "Internet Explorer", + "Control Panel", + "Documents Library"}); + this.listBox1.Location = new System.Drawing.Point(87, 30); + this.listBox1.Name = "listBox1"; + this.listBox1.SelectionMode = System.Windows.Forms.SelectionMode.MultiSimple; + this.listBox1.Size = new System.Drawing.Size(210, 108); + this.listBox1.TabIndex = 11; + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(8, 30); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(64, 13); + this.label5.TabIndex = 8; + this.label5.Text = "User Tasks:"; + // + // buttonRefreshTaskbarList + // + this.buttonRefreshTaskbarList.Enabled = false; + this.buttonRefreshTaskbarList.Location = new System.Drawing.Point(143, 144); + this.buttonRefreshTaskbarList.Name = "buttonRefreshTaskbarList"; + this.buttonRefreshTaskbarList.Size = new System.Drawing.Size(123, 23); + this.buttonRefreshTaskbarList.TabIndex = 14; + this.buttonRefreshTaskbarList.Text = "Refresh JumpList"; + this.buttonRefreshTaskbarList.UseVisualStyleBackColor = true; + this.buttonRefreshTaskbarList.Click += new System.EventHandler(this.buttonRefreshTaskbarList_Click); + // + // button1 + // + this.button1.Location = new System.Drawing.Point(11, 445); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(132, 23); + this.button1.TabIndex = 15; + this.button1.Text = "Add separate JumpList"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // groupBoxProgressBar + // + this.groupBoxProgressBar.Controls.Add(this.trackBar1); + this.groupBoxProgressBar.Controls.Add(this.label8); + this.groupBoxProgressBar.Controls.Add(this.label6); + this.groupBoxProgressBar.Controls.Add(this.comboBoxProgressBarStates); + this.groupBoxProgressBar.Controls.Add(this.progressBar1); + this.groupBoxProgressBar.Location = new System.Drawing.Point(13, 192); + this.groupBoxProgressBar.Name = "groupBoxProgressBar"; + this.groupBoxProgressBar.Size = new System.Drawing.Size(305, 144); + this.groupBoxProgressBar.TabIndex = 16; + this.groupBoxProgressBar.TabStop = false; + this.groupBoxProgressBar.Text = "Progress Bar"; + // + // trackBar1 + // + this.trackBar1.LargeChange = 25; + this.trackBar1.Location = new System.Drawing.Point(92, 59); + this.trackBar1.Maximum = 100; + this.trackBar1.Name = "trackBar1"; + this.trackBar1.Size = new System.Drawing.Size(203, 45); + this.trackBar1.SmallChange = 10; + this.trackBar1.TabIndex = 12; + this.trackBar1.TickStyle = System.Windows.Forms.TickStyle.None; + this.trackBar1.Scroll += new System.EventHandler(this.trackBar1_Scroll); + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(6, 71); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(77, 13); + this.label8.TabIndex = 11; + this.label8.Text = "Update value: "; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(6, 25); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(35, 13); + this.label6.TabIndex = 3; + this.label6.Text = "State:"; + // + // comboBoxProgressBarStates + // + this.comboBoxProgressBarStates.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxProgressBarStates.FormattingEnabled = true; + this.comboBoxProgressBarStates.Location = new System.Drawing.Point(47, 22); + this.comboBoxProgressBarStates.Name = "comboBoxProgressBarStates"; + this.comboBoxProgressBarStates.Size = new System.Drawing.Size(154, 21); + this.comboBoxProgressBarStates.TabIndex = 2; + this.comboBoxProgressBarStates.SelectedIndexChanged += new System.EventHandler(this.comboBoxProgressBarStates_SelectedIndexChanged); + // + // progressBar1 + // + this.progressBar1.Location = new System.Drawing.Point(11, 110); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(285, 23); + this.progressBar1.Step = 5; + this.progressBar1.TabIndex = 0; + // + // ChildDocument + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(327, 510); + this.Controls.Add(this.groupBoxProgressBar); + this.Controls.Add(this.button1); + this.Controls.Add(this.groupBoxCustomCategories); + this.Controls.Add(this.groupBoxIconOverlay); + this.Name = "ChildDocument"; + this.Text = "Child Document Window"; + this.groupBoxIconOverlay.ResumeLayout(false); + this.groupBoxIconOverlay.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconOverlay3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconOverlay2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconOverlay1)).EndInit(); + this.groupBoxCustomCategories.ResumeLayout(false); + this.groupBoxCustomCategories.PerformLayout(); + this.groupBoxProgressBar.ResumeLayout(false); + this.groupBoxProgressBar.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.GroupBox groupBoxIconOverlay; + private System.Windows.Forms.Label labelNoIconOverlay; + private System.Windows.Forms.PictureBox pictureIconOverlay3; + private System.Windows.Forms.PictureBox pictureIconOverlay2; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.PictureBox pictureIconOverlay1; + private System.Windows.Forms.GroupBox groupBoxCustomCategories; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Button buttonRefreshTaskbarList; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.ListBox listBox1; + private System.Windows.Forms.GroupBox groupBoxProgressBar; + private System.Windows.Forms.TrackBar trackBar1; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.ComboBox comboBoxProgressBarStates; + private System.Windows.Forms.ProgressBar progressBar1; + } +} \ No newline at end of file diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/ChildDocument.cs b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/ChildDocument.cs new file mode 100644 index 00000000..3011a076 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/ChildDocument.cs @@ -0,0 +1,241 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.IO; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.Shell; +using Microsoft.WindowsAPICodePack.Taskbar; +using System.Reflection; + +namespace TaskbarDemo +{ + public partial class ChildDocument : Form + { + // Keep a reference to the Taskbar instance + private TaskbarManager windowsTaskbar = TaskbarManager.Instance; + + private JumpList childWindowJumpList; + private string childWindowAppId; + + public ChildDocument(int count) + { + childWindowAppId = "TaskbarDemo.ChildWindow" + count; + + InitializeComponent(); + + // Progress Bar + foreach (string state in Enum.GetNames(typeof(TaskbarProgressBarState))) + comboBoxProgressBarStates.Items.Add(state); + + // + comboBoxProgressBarStates.SelectedItem = "NoProgress"; + + this.Shown += new EventHandler(ChildDocument_Shown); + + HighlightOverlaySelection(labelNoIconOverlay); + } + + void ChildDocument_Shown(object sender, EventArgs e) + { + // Set our default + windowsTaskbar.SetProgressState(TaskbarProgressBarState.NoProgress, this.Handle); + } + + #region Progress Bar + + private void trackBar1_Scroll(object sender, EventArgs e) + { + // When the user changes the trackBar value, + // update the progress bar in our UI as well as Taskbar + progressBar1.Value = trackBar1.Value; + + windowsTaskbar.SetProgressValue(trackBar1.Value, 100, this.Handle); + } + + + private void comboBoxProgressBarStates_SelectedIndexChanged(object sender, EventArgs e) + { + // Update the status of the taskbar progress bar + + TaskbarProgressBarState state = (TaskbarProgressBarState)(Enum.Parse(typeof(TaskbarProgressBarState), (string)comboBoxProgressBarStates.SelectedItem)); + + windowsTaskbar.SetProgressState(state, this.Handle); + + // Update the application progress bar, + // as well disable the trackbar in some cases + switch (state) + { + case TaskbarProgressBarState.Normal: + if (trackBar1.Value == 0) + { + trackBar1.Value = 20; + progressBar1.Value = trackBar1.Value; + } + + progressBar1.Style = ProgressBarStyle.Continuous; + windowsTaskbar.SetProgressValue(trackBar1.Value, 100, this.Handle); + trackBar1.Enabled = true; + break; + case TaskbarProgressBarState.Paused: + if (trackBar1.Value == 0) + { + trackBar1.Value = 20; + progressBar1.Value = trackBar1.Value; + } + + progressBar1.Style = ProgressBarStyle.Continuous; + windowsTaskbar.SetProgressValue(trackBar1.Value, 100, this.Handle); + trackBar1.Enabled = true; + break; + case TaskbarProgressBarState.Error: + if (trackBar1.Value == 0) + { + trackBar1.Value = 20; + progressBar1.Value = trackBar1.Value; + } + + progressBar1.Style = ProgressBarStyle.Continuous; + windowsTaskbar.SetProgressValue(trackBar1.Value, 100, this.Handle); + trackBar1.Enabled = true; + break; + case TaskbarProgressBarState.Indeterminate: + progressBar1.Style = ProgressBarStyle.Marquee; + progressBar1.MarqueeAnimationSpeed = 30; + trackBar1.Enabled = false; + break; + case TaskbarProgressBarState.NoProgress: + progressBar1.Value = 0; + trackBar1.Value = 0; + progressBar1.Style = ProgressBarStyle.Continuous; + trackBar1.Enabled = false; + break; + } + } + + #endregion + + #region Icon Overlay + + private void HighlightOverlaySelection(Control ctlOverlay) + { + TaskbarDemoMainForm.CheckOverlaySelection(ctlOverlay, labelNoIconOverlay); + TaskbarDemoMainForm.CheckOverlaySelection(ctlOverlay, pictureIconOverlay1); + TaskbarDemoMainForm.CheckOverlaySelection(ctlOverlay, pictureIconOverlay2); + TaskbarDemoMainForm.CheckOverlaySelection(ctlOverlay, pictureIconOverlay3); + } + + private void labelNoIconOverlay_Click(object sender, EventArgs e) + { + windowsTaskbar.SetOverlayIcon(this.Handle, null, null); + + HighlightOverlaySelection(labelNoIconOverlay); + } + + private void pictureIconOverlay1_Click(object sender, EventArgs e) + { + windowsTaskbar.SetOverlayIcon(this.Handle, TaskbarDemo.Properties.Resources.Green, "Green"); + + HighlightOverlaySelection(pictureIconOverlay1); + } + + private void pictureIconOverlay2_Click(object sender, EventArgs e) + { + windowsTaskbar.SetOverlayIcon(this.Handle, TaskbarDemo.Properties.Resources.Yellow, "Yellow"); + + HighlightOverlaySelection(pictureIconOverlay2); + } + + private void pictureIconOverlay3_Click(object sender, EventArgs e) + { + windowsTaskbar.SetOverlayIcon(this.Handle, TaskbarDemo.Properties.Resources.Red, "Red"); + + HighlightOverlaySelection(pictureIconOverlay3); + } + + #endregion + + private void buttonRefreshTaskbarList_Click(object sender, EventArgs e) + { + // Start from an empty list for user tasks + childWindowJumpList.ClearAllUserTasks(); + + // Path to Windows system folder + string systemFolder = Environment.GetFolderPath(Environment.SpecialFolder.System); + + // Path to the Program Files folder + string programFilesFolder = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles); + + // Path to Windows folder (if targeting .NET 4.0, can use Environment.SpecialFolder.Windows instead) + string windowsFolder = Environment.GetEnvironmentVariable("windir"); + + foreach (object item in listBox1.SelectedItems) + { + switch (item.ToString()) + { + case "Notepad": + childWindowJumpList.AddUserTasks(new JumpListLink(Path.Combine(systemFolder, "notepad.exe"), "Open Notepad") + { + IconReference = new IconReference(Path.Combine(systemFolder, "notepad.exe"), 0) + }); + break; + case "Calculator": + childWindowJumpList.AddUserTasks(new JumpListLink(Path.Combine(systemFolder, "calc.exe"), "Open Calculator") + { + IconReference = new IconReference(Path.Combine(systemFolder, "calc.exe"), 0) + }); + break; + case "Paint": + childWindowJumpList.AddUserTasks(new JumpListLink(Path.Combine(systemFolder, "mspaint.exe"), "Open Paint") + { + IconReference = new IconReference(Path.Combine(systemFolder, "mspaint.exe"), 0) + }); + break; + case "WordPad": + childWindowJumpList.AddUserTasks(new JumpListLink(Path.Combine(programFilesFolder, "Windows NT\\Accessories\\wordpad.exe"), "Open WordPad") + { + IconReference = new IconReference(Path.Combine(programFilesFolder, "Windows NT\\Accessories\\wordpad.exe"), 0) + }); + break; + case "Windows Explorer": + childWindowJumpList.AddUserTasks(new JumpListLink(Path.Combine(windowsFolder, "explorer.exe"), "Open Windows Explorer") + { + IconReference = new IconReference(Path.Combine(windowsFolder, "explorer.exe"), 0) + }); + break; + case "Internet Explorer": + childWindowJumpList.AddUserTasks(new JumpListLink(Path.Combine(programFilesFolder, "Internet Explorer\\iexplore.exe"), "Open Internet Explorer") + { + IconReference = new IconReference(Path.Combine(programFilesFolder, "Internet Explorer\\iexplore.exe"), 0) + }); + break; + case "Control Panel": + childWindowJumpList.AddUserTasks(new JumpListLink(((ShellObject)KnownFolders.ControlPanel).ParsingName, "Open Control Panel") + { + IconReference = new IconReference(Path.Combine(windowsFolder, "explorer.exe"), 0) + }); + break; + case "Documents Library": + if (ShellLibrary.IsPlatformSupported) + { + childWindowJumpList.AddUserTasks(new JumpListLink(KnownFolders.DocumentsLibrary.Path, "Open Documents Library") + { + IconReference = new IconReference(Path.Combine(windowsFolder, "explorer.exe"), 0) + }); + } + break; + } + } + + childWindowJumpList.Refresh(); + } + + private void button1_Click(object sender, EventArgs e) + { + childWindowJumpList = JumpList.CreateJumpListForIndividualWindow(childWindowAppId, this.Handle); + + ((Button)sender).Enabled = false; + groupBoxCustomCategories.Enabled = true; + buttonRefreshTaskbarList.Enabled = true; + } + } +} diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/ChildDocument.resx b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/ChildDocument.resx new file mode 100644 index 00000000..2fc87df4 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/ChildDocument.resx @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + uAAADrgBakH1WwAAADlJREFUWEft0LERADAIAzGPzuYkTAGFiqfFpyTprSo1v9P/rmQAAQIECBAgQIAA + AQIECBC4IzBLtnqFOrrmMht1fQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + uAAADrgBakH1WwAAADlJREFUWEft0LERADAMAjFG9+bkkiWcQsXXcEqSbjXzttN2JwcIECBAgAABAgQI + ECBAgMAfAvfFZgdzeDyeYQpN+QAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + uAAADrgBakH1WwAAADlJREFUWEft0MENACAMAkBGd3OrLoGPS0O/kEuSXct63ee1zgACBAgQIECAAAEC + BAgQIPCHwF1RzABFgpxmS0knOAAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Program.cs b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Program.cs new file mode 100644 index 00000000..fbe7eff9 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Program.cs @@ -0,0 +1,30 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack; +using Microsoft.WindowsAPICodePack.Taskbar; + +namespace TaskbarDemo +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + if (!TaskbarManager.IsPlatformSupported) + { + MessageBox.Show("This demo requires to be run on Windows 7", "Demo needs Windows 7", MessageBoxButtons.OK, MessageBoxIcon.Error); + System.Environment.Exit(0); + return; + } + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new TaskbarDemoMainForm()); + } + } +} diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Properties/AssemblyInfo.cs b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..573198f9 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Properties/AssemblyInfo.cs @@ -0,0 +1,34 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("TaskbarDemo")] +[assembly: AssemblyDescription("Taskbar Demo")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("AA4C2B2F-C0A2-408c-A13D-2E2CC74319E3")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Properties/Resources.Designer.cs b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Properties/Resources.Designer.cs new file mode 100644 index 00000000..987fa08f --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Properties/Resources.Designer.cs @@ -0,0 +1,91 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace TaskbarDemo.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TaskbarDemo.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.Drawing.Icon Green { + get { + object obj = ResourceManager.GetObject("Green", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + internal static System.Drawing.Icon Red { + get { + object obj = ResourceManager.GetObject("Red", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + internal static System.Drawing.Icon Taskbar { + get { + object obj = ResourceManager.GetObject("Taskbar", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + internal static System.Drawing.Icon Yellow { + get { + object obj = ResourceManager.GetObject("Yellow", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + } +} diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Properties/Resources.resx b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Properties/Resources.resx new file mode 100644 index 00000000..cbbabd20 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Green.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Red.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Taskbar.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Yellow.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Properties/Settings.Designer.cs b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Properties/Settings.Designer.cs new file mode 100644 index 00000000..107f43a5 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace TaskbarDemo.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Properties/Settings.settings b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Properties/Settings.settings new file mode 100644 index 00000000..8e615f25 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Properties/Settings.settings @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/RegistrationHelper.cs b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/RegistrationHelper.cs new file mode 100644 index 00000000..d176e083 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/RegistrationHelper.cs @@ -0,0 +1,81 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Diagnostics; +using System.ComponentModel; +using Microsoft.WindowsAPICodePack.Dialogs; + +namespace TaskbarDemo +{ + /// + /// Helper class for registering file associations. + /// + public static class RegistrationHelper + { + private static void InternalRegisterFileAssociations( + bool unregister, string progId, bool registerInHKCU, + string appId, string openWith, string[] extensions) + { + ProcessStartInfo psi = new ProcessStartInfo("RegistrationHelper.exe"); + psi.Arguments = + string.Format("{0} {1} {2} \"{3}\" {4} {5}", + progId, // 0 + registerInHKCU, // 1 + appId, // 2 + openWith, + unregister, + string.Join(" ", extensions)); + psi.UseShellExecute = true; + psi.Verb = "runas"; //Launch elevated + psi.WindowStyle = ProcessWindowStyle.Hidden; + + try + { + Process.Start(psi).WaitForExit(); + TaskDialog.Show("File associations were " + (unregister ? "un" : "") + "registered"); + } + catch (Win32Exception e) + { + if (e.NativeErrorCode == 1223) // 1223: The operation was canceled by the user. + TaskDialog.Show("The operation was canceled by the user."); + } + } + + /// + /// Registers file associations for an application. + /// + /// The application's ProgID. + /// Whether to register the + /// association per-user (in HKCU). The only supported value + /// at this time is false. + /// The application's app-id. + /// The command and arguments to be used + /// when opening a shortcut to a document. + /// The extensions to register. + public static void RegisterFileAssociations(string progId, + bool registerInHKCU, string appId, string openWith, + params string[] extensions) + { + InternalRegisterFileAssociations( + false, progId, registerInHKCU, appId, openWith, extensions); + } + + /// + /// Unregisters file associations for an application. + /// + /// The application's ProgID. + /// Whether to register the + /// association per-user (in HKCU). The only supported value + /// at this time is false. + /// The application's app-id. + /// The command and arguments to be used + /// when opening a shortcut to a document. + /// The extensions to unregister. + public static void UnregisterFileAssociations(string progId, + bool registerInHKCU, string appId, string openWith, + params string[] extensions) + { + InternalRegisterFileAssociations( + true, progId, registerInHKCU, appId, openWith, extensions); + } + } +} diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Resources/Green.ico b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Resources/Green.ico new file mode 100644 index 00000000..c7c1c238 Binary files /dev/null and b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Resources/Green.ico differ diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Resources/Red.ico b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Resources/Red.ico new file mode 100644 index 00000000..ef11cfaf Binary files /dev/null and b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Resources/Red.ico differ diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Resources/Taskbar.ico b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Resources/Taskbar.ico new file mode 100644 index 00000000..5e21fb01 Binary files /dev/null and b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Resources/Taskbar.ico differ diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Resources/Yellow.ico b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Resources/Yellow.ico new file mode 100644 index 00000000..efb9583e Binary files /dev/null and b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/Resources/Yellow.ico differ diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/TaskbarDemo.csproj b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/TaskbarDemo.csproj new file mode 100644 index 00000000..b22fb8a6 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/TaskbarDemo.csproj @@ -0,0 +1,193 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0} + WinExe + Properties + TaskbarDemo + TaskbarDemo + v3.5 + 512 + TaskbarDemo.Program + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + Resources\Taskbar.ico + + + + + app.manifest + + + + + 3.5 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + 3.0 + + + 3.0 + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + 3.0 + + + + + Form + + + ChildDocument.cs + + + Form + + + TaskbarDemoMainForm.cs + + + + + ChildDocument.cs + Designer + + + TaskbarDemoMainForm.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + False + .NET Framework Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + false + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC} + RegistrationHelper %28Samples\CS\RegistrationHelper%29 + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/TaskbarDemoMainForm.Designer.cs b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/TaskbarDemoMainForm.Designer.cs new file mode 100644 index 00000000..21f1c1af --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/TaskbarDemoMainForm.Designer.cs @@ -0,0 +1,565 @@ +namespace TaskbarDemo +{ + partial class TaskbarDemoMainForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TaskbarDemoMainForm)); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.saveToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.administrationToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.registerFileTypeToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.unregisterFileTypeToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.openToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.administrativeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.registerFileTypeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.unregisterFileTypeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel(); + this.groupBoxKnownCategories = new System.Windows.Forms.GroupBox(); + this.numericUpDownKnownCategoryLocation = new System.Windows.Forms.NumericUpDown(); + this.comboBoxKnownCategoryType = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.groupBoxIconOverlay = new System.Windows.Forms.GroupBox(); + this.labelNoIconOverlay = new System.Windows.Forms.Label(); + this.pictureIconOverlay3 = new System.Windows.Forms.PictureBox(); + this.pictureIconOverlay2 = new System.Windows.Forms.PictureBox(); + this.label7 = new System.Windows.Forms.Label(); + this.pictureIconOverlay1 = new System.Windows.Forms.PictureBox(); + this.groupBoxCustomCategories = new System.Windows.Forms.GroupBox(); + this.buttonCategoryOneRename = new System.Windows.Forms.Button(); + this.label5 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.buttonCategoryTwoAddLink = new System.Windows.Forms.Button(); + this.buttonCategoryOneAddLink = new System.Windows.Forms.Button(); + this.buttonUserTasksAddTasks = new System.Windows.Forms.Button(); + this.groupBoxProgressBar = new System.Windows.Forms.GroupBox(); + this.trackBar1 = new System.Windows.Forms.TrackBar(); + this.label8 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.comboBoxProgressBarStates = new System.Windows.Forms.ComboBox(); + this.progressBar1 = new System.Windows.Forms.ProgressBar(); + this.buttonRefreshTaskbarList = new System.Windows.Forms.Button(); + this.menuStrip1.SuspendLayout(); + this.groupBoxKnownCategories.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownKnownCategoryLocation)).BeginInit(); + this.groupBoxIconOverlay.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconOverlay3)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconOverlay2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconOverlay1)).BeginInit(); + this.groupBoxCustomCategories.SuspendLayout(); + this.groupBoxProgressBar.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).BeginInit(); + this.SuspendLayout(); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem1, + this.administrationToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(327, 24); + this.menuStrip1.TabIndex = 0; + this.menuStrip1.Text = "menuStrip1"; + // + // fileToolStripMenuItem1 + // + this.fileToolStripMenuItem1.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.newToolStripMenuItem, + this.openToolStripMenuItem1, + this.saveToolStripMenuItem1}); + this.fileToolStripMenuItem1.Name = "fileToolStripMenuItem1"; + this.fileToolStripMenuItem1.Size = new System.Drawing.Size(37, 20); + this.fileToolStripMenuItem1.Text = "&File"; + // + // newToolStripMenuItem + // + this.newToolStripMenuItem.Name = "newToolStripMenuItem"; + this.newToolStripMenuItem.Size = new System.Drawing.Size(176, 22); + this.newToolStripMenuItem.Text = "&New Child Window"; + this.newToolStripMenuItem.Click += new System.EventHandler(this.newToolStripMenuItem_Click); + // + // openToolStripMenuItem1 + // + this.openToolStripMenuItem1.Name = "openToolStripMenuItem1"; + this.openToolStripMenuItem1.Size = new System.Drawing.Size(176, 22); + this.openToolStripMenuItem1.Text = "&Open"; + this.openToolStripMenuItem1.Click += new System.EventHandler(this.openToolStripMenuItem_Click); + // + // saveToolStripMenuItem1 + // + this.saveToolStripMenuItem1.Name = "saveToolStripMenuItem1"; + this.saveToolStripMenuItem1.Size = new System.Drawing.Size(176, 22); + this.saveToolStripMenuItem1.Text = "&Save"; + this.saveToolStripMenuItem1.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); + // + // administrationToolStripMenuItem + // + this.administrationToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.registerFileTypeToolStripMenuItem1, + this.unregisterFileTypeToolStripMenuItem1}); + this.administrationToolStripMenuItem.Name = "administrationToolStripMenuItem"; + this.administrationToolStripMenuItem.Size = new System.Drawing.Size(98, 20); + this.administrationToolStripMenuItem.Text = "&Administration"; + // + // registerFileTypeToolStripMenuItem1 + // + this.registerFileTypeToolStripMenuItem1.Name = "registerFileTypeToolStripMenuItem1"; + this.registerFileTypeToolStripMenuItem1.Size = new System.Drawing.Size(178, 22); + this.registerFileTypeToolStripMenuItem1.Text = "Register File Type"; + this.registerFileTypeToolStripMenuItem1.Click += new System.EventHandler(this.registerFileTypeToolStripMenuItem_Click); + // + // unregisterFileTypeToolStripMenuItem1 + // + this.unregisterFileTypeToolStripMenuItem1.Name = "unregisterFileTypeToolStripMenuItem1"; + this.unregisterFileTypeToolStripMenuItem1.Size = new System.Drawing.Size(178, 22); + this.unregisterFileTypeToolStripMenuItem1.Text = "Unregister File Type"; + this.unregisterFileTypeToolStripMenuItem1.Click += new System.EventHandler(this.unregisterFileTypeToolStripMenuItem_Click); + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.openToolStripMenuItem, + this.saveToolStripMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + this.fileToolStripMenuItem.Text = "&File"; + // + // openToolStripMenuItem + // + this.openToolStripMenuItem.Name = "openToolStripMenuItem"; + this.openToolStripMenuItem.Size = new System.Drawing.Size(103, 22); + this.openToolStripMenuItem.Text = "&Open"; + this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click); + // + // saveToolStripMenuItem + // + this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; + this.saveToolStripMenuItem.Size = new System.Drawing.Size(103, 22); + this.saveToolStripMenuItem.Text = "&Save"; + this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); + // + // administrativeToolStripMenuItem + // + this.administrativeToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.registerFileTypeToolStripMenuItem, + this.unregisterFileTypeToolStripMenuItem}); + this.administrativeToolStripMenuItem.Name = "administrativeToolStripMenuItem"; + this.administrativeToolStripMenuItem.Size = new System.Drawing.Size(96, 20); + this.administrativeToolStripMenuItem.Text = "&Administrative"; + // + // registerFileTypeToolStripMenuItem + // + this.registerFileTypeToolStripMenuItem.Name = "registerFileTypeToolStripMenuItem"; + this.registerFileTypeToolStripMenuItem.Size = new System.Drawing.Size(178, 22); + this.registerFileTypeToolStripMenuItem.Text = "&Register File Type"; + this.registerFileTypeToolStripMenuItem.Click += new System.EventHandler(this.registerFileTypeToolStripMenuItem_Click); + // + // unregisterFileTypeToolStripMenuItem + // + this.unregisterFileTypeToolStripMenuItem.Name = "unregisterFileTypeToolStripMenuItem"; + this.unregisterFileTypeToolStripMenuItem.Size = new System.Drawing.Size(178, 22); + this.unregisterFileTypeToolStripMenuItem.Text = "&Unregister File Type"; + this.unregisterFileTypeToolStripMenuItem.Click += new System.EventHandler(this.unregisterFileTypeToolStripMenuItem_Click); + // + // statusStrip1 + // + this.statusStrip1.Location = new System.Drawing.Point(0, 488); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(327, 22); + this.statusStrip1.TabIndex = 9; + this.statusStrip1.Text = "statusStrip1"; + // + // toolStripStatusLabel1 + // + this.toolStripStatusLabel1.Name = "toolStripStatusLabel1"; + this.toolStripStatusLabel1.Size = new System.Drawing.Size(118, 17); + this.toolStripStatusLabel1.Text = "toolStripStatusLabel1"; + // + // groupBoxKnownCategories + // + this.groupBoxKnownCategories.Controls.Add(this.numericUpDownKnownCategoryLocation); + this.groupBoxKnownCategories.Controls.Add(this.comboBoxKnownCategoryType); + this.groupBoxKnownCategories.Controls.Add(this.label2); + this.groupBoxKnownCategories.Controls.Add(this.label1); + this.groupBoxKnownCategories.Location = new System.Drawing.Point(12, 27); + this.groupBoxKnownCategories.Name = "groupBoxKnownCategories"; + this.groupBoxKnownCategories.Size = new System.Drawing.Size(305, 68); + this.groupBoxKnownCategories.TabIndex = 7; + this.groupBoxKnownCategories.TabStop = false; + this.groupBoxKnownCategories.Text = "Known Categories"; + // + // numericUpDownKnownCategoryLocation + // + this.numericUpDownKnownCategoryLocation.Location = new System.Drawing.Point(156, 38); + this.numericUpDownKnownCategoryLocation.Name = "numericUpDownKnownCategoryLocation"; + this.numericUpDownKnownCategoryLocation.Size = new System.Drawing.Size(120, 20); + this.numericUpDownKnownCategoryLocation.TabIndex = 12; + this.numericUpDownKnownCategoryLocation.ValueChanged += new System.EventHandler(this.numericUpDownKnownCategoryLocation_ValueChanged); + // + // comboBoxKnownCategoryType + // + this.comboBoxKnownCategoryType.FormattingEnabled = true; + this.comboBoxKnownCategoryType.Items.AddRange(new object[] { + "None", + "Recent", + "Frequent"}); + this.comboBoxKnownCategoryType.Location = new System.Drawing.Point(5, 37); + this.comboBoxKnownCategoryType.Name = "comboBoxKnownCategoryType"; + this.comboBoxKnownCategoryType.Size = new System.Drawing.Size(121, 21); + this.comboBoxKnownCategoryType.TabIndex = 11; + this.comboBoxKnownCategoryType.SelectedIndexChanged += new System.EventHandler(this.comboBoxKnownCategoryType_SelectedIndexChanged); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(5, 21); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(37, 13); + this.label2.TabIndex = 9; + this.label2.Text = "Show:"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(153, 20); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(51, 13); + this.label1.TabIndex = 7; + this.label1.Text = "Location:"; + // + // groupBoxIconOverlay + // + this.groupBoxIconOverlay.Controls.Add(this.labelNoIconOverlay); + this.groupBoxIconOverlay.Controls.Add(this.pictureIconOverlay3); + this.groupBoxIconOverlay.Controls.Add(this.pictureIconOverlay2); + this.groupBoxIconOverlay.Controls.Add(this.label7); + this.groupBoxIconOverlay.Controls.Add(this.pictureIconOverlay1); + this.groupBoxIconOverlay.Location = new System.Drawing.Point(12, 361); + this.groupBoxIconOverlay.Name = "groupBoxIconOverlay"; + this.groupBoxIconOverlay.Size = new System.Drawing.Size(305, 85); + this.groupBoxIconOverlay.TabIndex = 11; + this.groupBoxIconOverlay.TabStop = false; + this.groupBoxIconOverlay.Text = "Icon Overlay"; + // + // labelNoIconOverlay + // + this.labelNoIconOverlay.Location = new System.Drawing.Point(9, 50); + this.labelNoIconOverlay.Name = "labelNoIconOverlay"; + this.labelNoIconOverlay.Size = new System.Drawing.Size(35, 13); + this.labelNoIconOverlay.TabIndex = 0; + this.labelNoIconOverlay.Text = "None"; + this.labelNoIconOverlay.Click += new System.EventHandler(this.labelNoIconOverlay_Click); + // + // pictureIconOverlay3 + // + this.pictureIconOverlay3.Image = ((System.Drawing.Image)(resources.GetObject("pictureIconOverlay3.Image"))); + this.pictureIconOverlay3.Location = new System.Drawing.Point(126, 41); + this.pictureIconOverlay3.Name = "pictureIconOverlay3"; + this.pictureIconOverlay3.Size = new System.Drawing.Size(32, 32); + this.pictureIconOverlay3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureIconOverlay3.TabIndex = 3; + this.pictureIconOverlay3.TabStop = false; + this.pictureIconOverlay3.Click += new System.EventHandler(this.pictureIconOverlay3_Click); + // + // pictureIconOverlay2 + // + this.pictureIconOverlay2.Image = ((System.Drawing.Image)(resources.GetObject("pictureIconOverlay2.Image"))); + this.pictureIconOverlay2.Location = new System.Drawing.Point(88, 41); + this.pictureIconOverlay2.Name = "pictureIconOverlay2"; + this.pictureIconOverlay2.Size = new System.Drawing.Size(32, 32); + this.pictureIconOverlay2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureIconOverlay2.TabIndex = 2; + this.pictureIconOverlay2.TabStop = false; + this.pictureIconOverlay2.Click += new System.EventHandler(this.pictureIconOverlay2_Click); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(9, 20); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(209, 13); + this.label7.TabIndex = 1; + this.label7.Text = "Select an image to overlay on the task bar:"; + // + // pictureIconOverlay1 + // + this.pictureIconOverlay1.Image = ((System.Drawing.Image)(resources.GetObject("pictureIconOverlay1.Image"))); + this.pictureIconOverlay1.Location = new System.Drawing.Point(50, 41); + this.pictureIconOverlay1.Name = "pictureIconOverlay1"; + this.pictureIconOverlay1.Size = new System.Drawing.Size(32, 32); + this.pictureIconOverlay1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.pictureIconOverlay1.TabIndex = 0; + this.pictureIconOverlay1.TabStop = false; + this.pictureIconOverlay1.Click += new System.EventHandler(this.pictureIconOverlay1_Click); + // + // groupBoxCustomCategories + // + this.groupBoxCustomCategories.Controls.Add(this.buttonCategoryOneRename); + this.groupBoxCustomCategories.Controls.Add(this.label5); + this.groupBoxCustomCategories.Controls.Add(this.label4); + this.groupBoxCustomCategories.Controls.Add(this.label3); + this.groupBoxCustomCategories.Controls.Add(this.buttonCategoryTwoAddLink); + this.groupBoxCustomCategories.Controls.Add(this.buttonCategoryOneAddLink); + this.groupBoxCustomCategories.Controls.Add(this.buttonUserTasksAddTasks); + this.groupBoxCustomCategories.Location = new System.Drawing.Point(14, 101); + this.groupBoxCustomCategories.Name = "groupBoxCustomCategories"; + this.groupBoxCustomCategories.Size = new System.Drawing.Size(304, 104); + this.groupBoxCustomCategories.TabIndex = 8; + this.groupBoxCustomCategories.TabStop = false; + this.groupBoxCustomCategories.Text = "Custom Categories"; + // + // buttonCategoryOneRename + // + this.buttonCategoryOneRename.Location = new System.Drawing.Point(207, 16); + this.buttonCategoryOneRename.Name = "buttonCategoryOneRename"; + this.buttonCategoryOneRename.Size = new System.Drawing.Size(88, 23); + this.buttonCategoryOneRename.TabIndex = 10; + this.buttonCategoryOneRename.Text = "Change Name"; + this.buttonCategoryOneRename.UseVisualStyleBackColor = true; + this.buttonCategoryOneRename.Click += new System.EventHandler(this.buttonCategoryOneRename_Click); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(8, 79); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(64, 13); + this.label5.TabIndex = 8; + this.label5.Text = "User Tasks:"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(8, 50); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(99, 13); + this.label4.TabIndex = 7; + this.label4.Text = "Custom Category 2:"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(8, 21); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(99, 13); + this.label3.TabIndex = 6; + this.label3.Text = "Custom Category 1:"; + // + // buttonCategoryTwoAddLink + // + this.buttonCategoryTwoAddLink.Location = new System.Drawing.Point(113, 45); + this.buttonCategoryTwoAddLink.Name = "buttonCategoryTwoAddLink"; + this.buttonCategoryTwoAddLink.Size = new System.Drawing.Size(88, 23); + this.buttonCategoryTwoAddLink.TabIndex = 4; + this.buttonCategoryTwoAddLink.Text = "Add Item"; + this.buttonCategoryTwoAddLink.UseVisualStyleBackColor = true; + this.buttonCategoryTwoAddLink.Click += new System.EventHandler(this.buttonCategoryTwoAddLink_Click); + // + // buttonCategoryOneAddLink + // + this.buttonCategoryOneAddLink.Location = new System.Drawing.Point(113, 16); + this.buttonCategoryOneAddLink.Name = "buttonCategoryOneAddLink"; + this.buttonCategoryOneAddLink.Size = new System.Drawing.Size(88, 23); + this.buttonCategoryOneAddLink.TabIndex = 3; + this.buttonCategoryOneAddLink.Text = "Add Item"; + this.buttonCategoryOneAddLink.UseVisualStyleBackColor = true; + this.buttonCategoryOneAddLink.Click += new System.EventHandler(this.buttonCategoryOneAddLink_Click); + // + // buttonUserTasksAddTasks + // + this.buttonUserTasksAddTasks.Location = new System.Drawing.Point(113, 74); + this.buttonUserTasksAddTasks.Name = "buttonUserTasksAddTasks"; + this.buttonUserTasksAddTasks.Size = new System.Drawing.Size(88, 23); + this.buttonUserTasksAddTasks.TabIndex = 5; + this.buttonUserTasksAddTasks.Text = "Add Tasks"; + this.buttonUserTasksAddTasks.UseVisualStyleBackColor = true; + this.buttonUserTasksAddTasks.Click += new System.EventHandler(this.buttonUserTasksAddTasks_Click); + // + // groupBoxProgressBar + // + this.groupBoxProgressBar.Controls.Add(this.trackBar1); + this.groupBoxProgressBar.Controls.Add(this.label8); + this.groupBoxProgressBar.Controls.Add(this.label6); + this.groupBoxProgressBar.Controls.Add(this.comboBoxProgressBarStates); + this.groupBoxProgressBar.Controls.Add(this.progressBar1); + this.groupBoxProgressBar.Location = new System.Drawing.Point(14, 211); + this.groupBoxProgressBar.Name = "groupBoxProgressBar"; + this.groupBoxProgressBar.Size = new System.Drawing.Size(305, 144); + this.groupBoxProgressBar.TabIndex = 10; + this.groupBoxProgressBar.TabStop = false; + this.groupBoxProgressBar.Text = "Progress Bar"; + // + // trackBar1 + // + this.trackBar1.LargeChange = 25; + this.trackBar1.Location = new System.Drawing.Point(92, 59); + this.trackBar1.Maximum = 100; + this.trackBar1.Name = "trackBar1"; + this.trackBar1.Size = new System.Drawing.Size(203, 45); + this.trackBar1.SmallChange = 10; + this.trackBar1.TabIndex = 12; + this.trackBar1.TickStyle = System.Windows.Forms.TickStyle.None; + this.trackBar1.Scroll += new System.EventHandler(this.trackBar1_Scroll); + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(6, 71); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(77, 13); + this.label8.TabIndex = 11; + this.label8.Text = "Update value: "; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(6, 25); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(35, 13); + this.label6.TabIndex = 3; + this.label6.Text = "State:"; + // + // comboBoxProgressBarStates + // + this.comboBoxProgressBarStates.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBoxProgressBarStates.FormattingEnabled = true; + this.comboBoxProgressBarStates.Location = new System.Drawing.Point(47, 22); + this.comboBoxProgressBarStates.Name = "comboBoxProgressBarStates"; + this.comboBoxProgressBarStates.Size = new System.Drawing.Size(154, 21); + this.comboBoxProgressBarStates.TabIndex = 2; + this.comboBoxProgressBarStates.SelectedIndexChanged += new System.EventHandler(this.comboBoxProgressBarStates_SelectedIndexChanged); + // + // progressBar1 + // + this.progressBar1.Location = new System.Drawing.Point(11, 110); + this.progressBar1.Name = "progressBar1"; + this.progressBar1.Size = new System.Drawing.Size(285, 23); + this.progressBar1.Step = 5; + this.progressBar1.TabIndex = 0; + // + // buttonRefreshTaskbarList + // + this.buttonRefreshTaskbarList.Location = new System.Drawing.Point(100, 456); + this.buttonRefreshTaskbarList.Name = "buttonRefreshTaskbarList"; + this.buttonRefreshTaskbarList.Size = new System.Drawing.Size(132, 23); + this.buttonRefreshTaskbarList.TabIndex = 12; + this.buttonRefreshTaskbarList.Text = "Refresh JumpList"; + this.buttonRefreshTaskbarList.UseVisualStyleBackColor = true; + this.buttonRefreshTaskbarList.Click += new System.EventHandler(this.buttonRefreshTaskbarList_Click); + // + // TaskbarDemoMainForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(327, 510); + this.Controls.Add(this.buttonRefreshTaskbarList); + this.Controls.Add(this.groupBoxKnownCategories); + this.Controls.Add(this.groupBoxIconOverlay); + this.Controls.Add(this.groupBoxCustomCategories); + this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.groupBoxProgressBar); + this.Controls.Add(this.menuStrip1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MainMenuStrip = this.menuStrip1; + this.Name = "TaskbarDemoMainForm"; + this.Text = "Taskbar Demo"; + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.groupBoxKnownCategories.ResumeLayout(false); + this.groupBoxKnownCategories.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownKnownCategoryLocation)).EndInit(); + this.groupBoxIconOverlay.ResumeLayout(false); + this.groupBoxIconOverlay.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconOverlay3)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconOverlay2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureIconOverlay1)).EndInit(); + this.groupBoxCustomCategories.ResumeLayout(false); + this.groupBoxCustomCategories.PerformLayout(); + this.groupBoxProgressBar.ResumeLayout(false); + this.groupBoxProgressBar.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.trackBar1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem administrativeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem registerFileTypeToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem unregisterFileTypeToolStripMenuItem; + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.ToolStripStatusLabel toolStripStatusLabel1; + private System.Windows.Forms.GroupBox groupBoxKnownCategories; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.GroupBox groupBoxIconOverlay; + private System.Windows.Forms.Label labelNoIconOverlay; + private System.Windows.Forms.PictureBox pictureIconOverlay3; + private System.Windows.Forms.PictureBox pictureIconOverlay2; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.PictureBox pictureIconOverlay1; + private System.Windows.Forms.GroupBox groupBoxCustomCategories; + private System.Windows.Forms.Button buttonCategoryOneRename; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Button buttonCategoryTwoAddLink; + private System.Windows.Forms.Button buttonCategoryOneAddLink; + private System.Windows.Forms.Button buttonUserTasksAddTasks; + private System.Windows.Forms.GroupBox groupBoxProgressBar; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.ComboBox comboBoxProgressBarStates; + private System.Windows.Forms.ProgressBar progressBar1; + private System.Windows.Forms.ComboBox comboBoxKnownCategoryType; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem openToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem administrationToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem registerFileTypeToolStripMenuItem1; + private System.Windows.Forms.ToolStripMenuItem unregisterFileTypeToolStripMenuItem1; + private System.Windows.Forms.NumericUpDown numericUpDownKnownCategoryLocation; + private System.Windows.Forms.Button buttonRefreshTaskbarList; + private System.Windows.Forms.ToolStripMenuItem newToolStripMenuItem; + private System.Windows.Forms.TrackBar trackBar1; + private System.Windows.Forms.Label label8; + } +} + diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/TaskbarDemoMainForm.cs b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/TaskbarDemoMainForm.cs new file mode 100644 index 00000000..820d8ba4 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/TaskbarDemoMainForm.cs @@ -0,0 +1,477 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.IO; +using System.Reflection; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.Shell; +using Microsoft.WindowsAPICodePack.Taskbar; +using Microsoft.Win32; +using Microsoft.WindowsAPICodePack; +using System.Diagnostics; +using Microsoft.WindowsAPICodePack.Dialogs; + +namespace TaskbarDemo +{ + /// + /// A word about known/custom categories. In order for an application + /// to have known/custom categories, a file type must be registered with + /// that application. This demo provides two menu items that allows you + /// to register and unregister .txt files with this demo. By default + /// shell displays the 'Recent' category for an application with a + /// registered file type. + /// + /// An exception will be thrown if you try to add a shell item to + /// 'Custom Category 1' before registering a file type with this demo + /// application. + /// + /// Also, once a file type has been registered with this demo, setting + /// jumpList.KnownCategoryToDisplay = KnownCategoryType.Neither will have + /// no effect until at least one custom category or user task has been + /// added to the taskbar jump list. + /// + public partial class TaskbarDemoMainForm : Form + { + private const string appId = "TaskbarDemo"; + private const string progId = "TaskbarDemo"; + + private JumpListCustomCategory category1 = new JumpListCustomCategory("Custom Category 1"); + private JumpListCustomCategory category2 = new JumpListCustomCategory("Custom Category 2"); + + private JumpList jumpList; + + private string executableFolder; + private readonly string executablePath; + + private TaskDialog td = null; + + // Keep a reference to the Taskbar instance + private TaskbarManager windowsTaskbar = TaskbarManager.Instance; + + private int childCount = 0; + + #region Form Initialize + + public TaskbarDemoMainForm() + { + InitializeComponent(); + + this.Shown += new EventHandler(TaskbarDemoMainForm_Shown); + + // Set the application specific id + windowsTaskbar.ApplicationId = appId; + + // Save current folder and path of running executable + executablePath = Assembly.GetEntryAssembly().Location; + executableFolder = Path.GetDirectoryName(executablePath); + + // Sanity check - will avoid throwing exceptions if the file type is not registered. + CheckFileRegistration(); + + // Set our title if we were launched from the Taskbar + string[] args = Environment.GetCommandLineArgs(); + + if (args.Length > 2 && args[1] == "/doc") + { + string fileName = string.Join(" ", args, 2, args.Length - 2); + this.Text = string.Format("{0} - Taskbar Demo", Path.GetFileName(fileName)); + } + else + this.Text = "Taskbar Demo"; + + HighlightOverlaySelection(labelNoIconOverlay); + } + + void TaskbarDemoMainForm_Shown(object sender, EventArgs e) + { + // create a new taskbar jump list for the main window + jumpList = JumpList.CreateJumpList(); + + // Add custom categories + jumpList.AddCustomCategories(category1, category2); + + // Default values for jump lists + comboBoxKnownCategoryType.SelectedItem = "Recent"; + + // Progress Bar + foreach (string state in Enum.GetNames(typeof(TaskbarProgressBarState))) + comboBoxProgressBarStates.Items.Add(state); + + // + comboBoxProgressBarStates.SelectedItem = "NoProgress"; + + // Update UI + UpdateStatusBar("Application ready..."); + + // Set our default + TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.NoProgress); + } + + private void CheckFileRegistration() + { + bool registered = false; + + try + { + RegistryKey openWithKey = Registry.ClassesRoot.OpenSubKey(Path.Combine(".txt", "OpenWithProgIds")); + string value = openWithKey.GetValue(progId, null) as string; + + if (value == null) + registered = false; + else + registered = true; + } + finally + { + // Let the user know + if (!registered) + { + td = new TaskDialog(); + + td.Text = "File type is not registered"; + td.InstructionText = "This demo application needs to register .txt files as associated files to properly execute the Taskbar related features."; + td.Icon = TaskDialogStandardIcon.Information; + td.Cancelable = true; + + TaskDialogCommandLink button1 = new TaskDialogCommandLink("registerButton", "Register file type for this application", + "Register .txt files with this application to run this demo application correctly."); + + button1.Click += new EventHandler(button1_Click); + // Show UAC shield as this task requires elevation + button1.UseElevationIcon = true; + + td.Controls.Add(button1); + + TaskDialogResult tdr = td.Show(); + } + } + } + + void button1_Click(object sender, EventArgs e) + { + registerFileTypeToolStripMenuItem_Click(null, EventArgs.Empty); + td.Close(); + } + + #endregion + + #region File Registration Helpers + + private void registerFileTypeToolStripMenuItem_Click(object sender, EventArgs e) + { + RegistrationHelper.RegisterFileAssociations( + progId, + false, + appId, + executablePath + " /doc %1", + ".txt"); + } + + private void unregisterFileTypeToolStripMenuItem_Click(object sender, EventArgs e) + { + RegistrationHelper.UnregisterFileAssociations( + progId, + false, + appId, + executablePath + " /doc %1", + ".txt"); + } + + #endregion + + #region Menu Open/Close + + private void openToolStripMenuItem_Click(object sender, EventArgs e) + { + CommonOpenFileDialog dialog = new CommonOpenFileDialog(); + dialog.Title = "Select a text document to load"; + dialog.Filters.Add(new CommonFileDialogFilter("Text files (*.txt)", "*.txt")); + + CommonFileDialogResult result = dialog.ShowDialog(); + + if (result == CommonFileDialogResult.Ok) + { + ReportUsage(dialog.FileName); + Process.Start(executablePath, "/doc " + dialog.FileName); + } + } + + private void saveToolStripMenuItem_Click(object sender, EventArgs e) + { + CommonSaveFileDialog dialog = new CommonSaveFileDialog(); + dialog.Title = "Select where to save your file"; + dialog.Filters.Add(new CommonFileDialogFilter("Text files (*.txt)", "*.txt")); + + CommonFileDialogResult result = dialog.ShowDialog(); + + if (result == CommonFileDialogResult.Ok) + ReportUsage(dialog.FileName); + } + + private void ReportUsage(string fileName) + { + // Report file usage to shell. Note: The dialog box automatically + // reports usage to shell, but it's still recommeneded that the user + // explicitly calls AddToRecent. Shell will automatically handle + // duplicate additions. + JumpList.AddToRecent(fileName); + + UpdateStatusBar("File added to recent documents"); + } + + #endregion; + + #region Known Categories + + private void comboBoxKnownCategoryType_SelectedIndexChanged(object sender, EventArgs e) + { + switch (comboBoxKnownCategoryType.SelectedItem as string) + { + case "None": + jumpList.KnownCategoryToDisplay = JumpListKnownCategoryType.Neither; + break; + case "Recent": + jumpList.KnownCategoryToDisplay = JumpListKnownCategoryType.Recent; + break; + case "Frequent": + jumpList.KnownCategoryToDisplay = JumpListKnownCategoryType.Frequent; + break; + } + } + + #endregion + + #region Custom Categories + + private int category1ItemsCount = 0; + private int category2ItemsCount = 0; + + private void buttonCategoryOneAddLink_Click(object sender, EventArgs e) + { + category1ItemsCount++; + + // Specify path for shell item + string path = String.Format("{0}\\test{1}.txt", + executableFolder, + category1ItemsCount); + + // Make sure this file exists + EnsureFile(path); + + // Add shell item to custom category + category1.AddJumpListItems(new JumpListItem(path)); + + // Update status + UpdateStatusBar(Path.GetFileName(path) + " added to 'Custom Category 1'"); + } + + private void buttonCategoryTwoAddLink_Click(object sender, EventArgs e) + { + category2ItemsCount++; + + // Specify path for file + string path = String.Format("{0}\\test{1}.txt", + executableFolder, + category2ItemsCount); + + // Make sure this file exists + EnsureFile(path); + + // Add jump list item to custom category + category2.AddJumpListItems(new JumpListItem(path)); + + // Update status + UpdateStatusBar(Path.GetFileName(path) + " added to 'Custom Category 2'"); + } + + private void EnsureFile(string path) + { + if (File.Exists(path)) + return; + + // Simply create an empty file with the specified path + FileStream fileStream = File.Create(path); + fileStream.Close(); + } + + private void buttonUserTasksAddTasks_Click(object sender, EventArgs e) + { + // Path to Windows system folder + string systemFolder = Environment.GetFolderPath(Environment.SpecialFolder.System); + + // Add our user tasks + jumpList.AddUserTasks(new JumpListLink(Path.Combine(systemFolder, "notepad.exe"), "Open Notepad") + { + IconReference = new IconReference(Path.Combine(systemFolder, "notepad.exe"), 0) + }); + + jumpList.AddUserTasks(new JumpListLink(Path.Combine(systemFolder, "mspaint.exe"), "Open Paint") + { + IconReference = new IconReference(Path.Combine(systemFolder, "mspaint.exe"), 0) + }); + + jumpList.AddUserTasks(new JumpListSeparator()); + + jumpList.AddUserTasks(new JumpListLink(Path.Combine(systemFolder, "calc.exe"), "Open Calculator") + { + IconReference = new IconReference(Path.Combine(systemFolder, "calc.exe"), 0) + }); + + // Update status + UpdateStatusBar("Three user tasks added to jump list"); + } + + private void buttonCategoryOneRename_Click(object sender, EventArgs e) + { + category1.Name = "Updated Category Name"; + } + + #endregion + + #region Progress Bar + + private void trackBar1_Scroll(object sender, EventArgs e) + { + // When the user changes the trackBar value, + // update the progress bar in our UI as well as Taskbar + progressBar1.Value = trackBar1.Value; + + TaskbarManager.Instance.SetProgressValue(trackBar1.Value, 100); + } + + + private void comboBoxProgressBarStates_SelectedIndexChanged(object sender, EventArgs e) + { + // Update the status of the taskbar progress bar + + TaskbarProgressBarState state = (TaskbarProgressBarState)(Enum.Parse(typeof(TaskbarProgressBarState), (string)comboBoxProgressBarStates.SelectedItem)); + + windowsTaskbar.SetProgressState(state); + + // Update the application progress bar, + // as well disable the trackbar in some cases + switch (state) + { + case TaskbarProgressBarState.Normal: + if (trackBar1.Value == 0) + { + trackBar1.Value = 20; + progressBar1.Value = trackBar1.Value; + } + + progressBar1.Style = ProgressBarStyle.Continuous; + windowsTaskbar.SetProgressValue(trackBar1.Value, 100); + trackBar1.Enabled = true; + break; + case TaskbarProgressBarState.Paused: + if (trackBar1.Value == 0) + { + trackBar1.Value = 20; + progressBar1.Value = trackBar1.Value; + } + + progressBar1.Style = ProgressBarStyle.Continuous; + windowsTaskbar.SetProgressValue(trackBar1.Value, 100); + trackBar1.Enabled = true; + break; + case TaskbarProgressBarState.Error: + if (trackBar1.Value == 0) + { + trackBar1.Value = 20; + progressBar1.Value = trackBar1.Value; + } + + progressBar1.Style = ProgressBarStyle.Continuous; + windowsTaskbar.SetProgressValue(trackBar1.Value , 100); + trackBar1.Enabled = true; + break; + case TaskbarProgressBarState.Indeterminate: + progressBar1.Style = ProgressBarStyle.Marquee; + progressBar1.MarqueeAnimationSpeed = 30; + trackBar1.Enabled = false; + break; + case TaskbarProgressBarState.NoProgress: + progressBar1.Value = 0; + trackBar1.Value = 0; + progressBar1.Style = ProgressBarStyle.Continuous; + trackBar1.Enabled = false; + break; + } + } + + #endregion; + + #region Icon Overlay + + private void HighlightOverlaySelection(Control ctlOverlay) + { + CheckOverlaySelection(ctlOverlay, labelNoIconOverlay); + CheckOverlaySelection(ctlOverlay, pictureIconOverlay1); + CheckOverlaySelection(ctlOverlay, pictureIconOverlay2); + CheckOverlaySelection(ctlOverlay, pictureIconOverlay3); + } + + internal static void CheckOverlaySelection(Control ctlOverlay, Label ctlCheck) + { + ctlCheck.BorderStyle = ctlCheck == ctlOverlay ? BorderStyle.Fixed3D : BorderStyle.None; + } + + internal static void CheckOverlaySelection(Control ctlOverlay, PictureBox ctlCheck) + { + ctlCheck.BorderStyle = ctlCheck == ctlOverlay ? BorderStyle.Fixed3D : BorderStyle.None; + } + + private void labelNoIconOverlay_Click(object sender, EventArgs e) + { + windowsTaskbar.SetOverlayIcon(this.Handle, null, null); + HighlightOverlaySelection(labelNoIconOverlay); + } + + private void pictureIconOverlay1_Click(object sender, EventArgs e) + { + windowsTaskbar.SetOverlayIcon(this.Handle, TaskbarDemo.Properties.Resources.Green, "Green"); + + HighlightOverlaySelection(pictureIconOverlay1); + } + + private void pictureIconOverlay2_Click(object sender, EventArgs e) + { + windowsTaskbar.SetOverlayIcon(this.Handle, TaskbarDemo.Properties.Resources.Yellow, "Yellow"); + + HighlightOverlaySelection(pictureIconOverlay2); + } + + private void pictureIconOverlay3_Click(object sender, EventArgs e) + { + windowsTaskbar.SetOverlayIcon(this.Handle, TaskbarDemo.Properties.Resources.Red, "Red"); + + HighlightOverlaySelection(pictureIconOverlay3); + } + + #endregion + + private void UpdateStatusBar(string status) + { + toolStripStatusLabel1.Text = status; + } + + private void numericUpDownKnownCategoryLocation_ValueChanged(object sender, EventArgs e) + { + jumpList.KnownCategoryOrdinalPosition = Convert.ToInt32(numericUpDownKnownCategoryLocation.Value); + } + + private void buttonRefreshTaskbarList_Click(object sender, EventArgs e) + { + jumpList.Refresh(); + } + + private void newToolStripMenuItem_Click(object sender, EventArgs e) + { + childCount++; + ChildDocument childWindow = new ChildDocument(childCount); + childWindow.Text = string.Format("Child Document Window ({0})", childCount); + childWindow.Show(); + } + + } +} \ No newline at end of file diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/TaskbarDemoMainForm.resx b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/TaskbarDemoMainForm.resx new file mode 100644 index 00000000..d2cac9f0 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/TaskbarDemoMainForm.resx @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 132, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + uAAADrgBakH1WwAAADlJREFUWEft0LERADAIAzGPzuYkTAGFiqfFpyTprSo1v9P/rmQAAQIECBAgQIAA + AQIECBC4IzBLtnqFOrrmMht1fQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + uAAADrgBakH1WwAAADlJREFUWEft0LERADAMAjFG9+bkkiWcQsXXcEqSbjXzttN2JwcIECBAgAABAgQI + ECBAgMAfAvfFZgdzeDyeYQpN+QAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + uAAADrgBakH1WwAAADlJREFUWEft0MENACAMAkBGd3OrLoGPS0O/kEuSXct63ee1zgACBAgQIECAAAEC + BAgQIPCHwF1RzABFgpxmS0knOAAAAABJRU5ErkJggg== + + + + + AAABAAIAEBAQAAAABAAoAQAAJgAAACAgEAAAAAQA6AIAAE4BAAAoAAAAEAAAACAAAAABAAQAAAAAAIAA + AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ + AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAH///////wAAf///////AAB///////8AAH///w// + /wAAf///D///AAB///8P//8AAH///w///wAAf///D///AAB///8P//8AAH///w///wAAf/8AAA//AAB/ + ////8AAAAH/////39wAAf/////dwAAB3d3d3dwAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMAB + AADAAQAAwAEAAMABAADAAQAAwAEAAMADAADABwAAwA8AACgAAAAgAAAAQAAAAAEABAAAAAAAAAIAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAHiIiIiIiIiIiIiIiIAAAAB/////////// + ////+AAAAAf///////////////gAAAAH///////////////4AAAAB///////////////+AAAAAf///// + //////////gAAAAH//8PAP/wDw8P///4AAAAB///AP8PD/APD///+AAAAAf//w//Dw//Dw////gAAAAH + //8P/w/wAA8P///4AAAAB///AP8PD/8PAP//+AAAAAf//w8A//AA/w8P//gAAAAH//8P///////////4 + AAAAB///D///////////+AAAAAf/8P/wDw/wAP8P8PgAAAAH//D/D/APD/8PDw/4AAAAB//w/w//D//w + /w8P+AAAAAf/8P/wAA/wD/8A//gAAAAH//D/D/8PD/8PDw/4AAAAB//w//AA//AA/w/w+AAAAAf/8P// + //////8P//gAAAAH8AAA////////D//4AAAAB///////////////+AAAAAf///////////////gAAAAH + ////////////cAAAAAAAB////////////3/4cAAAAAf///////////9/hwAAAAAH////////////eHAA + AAAAB////////////3cAAAAAAAf///////////9wAAAAAAAHd3d3d3d3d3d3cAAAAADgAAAH4AAAB+AA + AAfgAAAH4AAAB+AAAAfgAAAH4AAAB+AAAAfgAAAH4AAAB+AAAAfgAAAH4AAAB+AAAAfgAAAH4AAAB+AA + AAfgAAAH4AAAB+AAAAfgAAAH4AAAB+AAAAfgAAAH4AAAB+AAAA/gAAAf4AAAP+AAAH/gAAD/4AAB/w== + + + \ No newline at end of file diff --git a/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/app.manifest b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/app.manifest new file mode 100644 index 00000000..388cf96b --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/CS/TaskbarDemo/app.manifest @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/TaskbarDemo/VB/RegistrationHelper/My Project/AssemblyInfo.vb b/source/Samples/Shell/TaskbarDemo/VB/RegistrationHelper/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..cc8ec571 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/VB/RegistrationHelper/My Project/AssemblyInfo.vb @@ -0,0 +1,37 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' + + diff --git a/source/Samples/Shell/TaskbarDemo/VB/RegistrationHelper/RegistrationHelper.vbproj b/source/Samples/Shell/TaskbarDemo/VB/RegistrationHelper/RegistrationHelper.vbproj new file mode 100644 index 00000000..484d723c --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/VB/RegistrationHelper/RegistrationHelper.vbproj @@ -0,0 +1,107 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {A1AC4592-6309-492C-B0F1-C9241886718F} + Exe + + + RegistrationHelper + v3.5 + On + Binary + Off + On + 512 + + + + + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + true + true + prompt + + AllRules.ruleset + + + pdbonly + true + bin\Release\ + false + true + prompt + + AllRules.ruleset + + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/TaskbarDemo/VB/RegistrationHelper/RegistrationHelperMain.vb b/source/Samples/Shell/TaskbarDemo/VB/RegistrationHelper/RegistrationHelperMain.vb new file mode 100644 index 00000000..952f1a7b --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/VB/RegistrationHelper/RegistrationHelperMain.vb @@ -0,0 +1,91 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Diagnostics +Imports System.IO +Imports System.Linq +Imports Microsoft.Win32 + +Namespace TaskbarDemo + Friend Class RegistrationHelperMain + Shared Sub Main(ByVal args() As String) + If args.Length < 6 Then + Console.WriteLine("Usage: [Ext2 [Ext3] ...]") + Console.ReadLine() + Return + End If + Try + + Dim progId As String = args(0) + Dim registerInHKCU As Boolean = Boolean.Parse(args(1)) + Dim appId As String = args(2) + Dim openWith As String = args(3) + Dim unregister As Boolean = Boolean.Parse(args(4)) + + Dim associationsToRegister() As String = args.Skip(5).ToArray() + + If registerInHKCU Then + classesRoot = Registry.CurrentUser.OpenSubKey("Software\Classes") + Else + classesRoot = Registry.ClassesRoot + End If + + 'First of all, unregister: + For Each assoc In associationsToRegister + UnregisterFileAssociation(progId, assoc) + Next + + If (Not unregister) Then + RegisterProgId(progId, appId, openWith) + For Each assoc In associationsToRegister + RegisterFileAssociation(progId, assoc) + Next + End If + Catch e As Exception + Console.WriteLine(e) + Console.ReadLine() + End Try + End Sub + + Private Shared classesRoot As RegistryKey + + Private Shared Sub RegisterProgId(ByVal progId As String, ByVal appId As String, ByVal openWith As String) + Dim progIdKey As RegistryKey = classesRoot.CreateSubKey(progId) + progIdKey.SetValue("FriendlyTypeName", "@shell32.dll,-8975") + progIdKey.SetValue("DefaultIcon", "@shell32.dll,-47") + progIdKey.SetValue("CurVer", progId) + progIdKey.SetValue("AppUserModelID", appId) + Dim shell As RegistryKey = progIdKey.CreateSubKey("shell") + shell.SetValue(String.Empty, "Open") + shell = shell.CreateSubKey("Open") + shell = shell.CreateSubKey("Command") + shell.SetValue(String.Empty, openWith) + + shell.Close() + progIdKey.Close() + End Sub + Private Shared Sub UnregisterProgId(ByVal progId As String) + Try + classesRoot.DeleteSubKeyTree(progId) + Catch + End Try + End Sub + Private Shared Sub RegisterFileAssociation(ByVal progId As String, ByVal extension As String) + + Dim openWithKey As RegistryKey = classesRoot.CreateSubKey(Path.Combine(extension, "OpenWithProgIds")) + openWithKey.SetValue(progId, String.Empty) + openWithKey.Close() + End Sub + Private Shared Sub UnregisterFileAssociation(ByVal progId As String, ByVal extension As String) + Try + Dim openWithKey As RegistryKey = classesRoot.CreateSubKey(Path.Combine(extension, "OpenWithProgIds")) + openWithKey.DeleteValue(progId) + openWithKey.Close() + Catch e As Exception + Debug.WriteLine("Error while unregistering file association: " & e.Message) + End Try + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo.sln b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo.sln new file mode 100644 index 00000000..f0578578 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo.sln @@ -0,0 +1,48 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "TaskbarDemo", "TaskbarDemo\TaskbarDemo.vbproj", "{12F17213-0DEC-41E6-91EB-48C74A0B6AB0}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RegistrationHelper", "RegistrationHelper\RegistrationHelper.vbproj", "{03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {12F17213-0DEC-41E6-91EB-48C74A0B6AB0}.Release|Any CPU.Build.0 = Release|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/ChildDocument.Designer.vb b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/ChildDocument.Designer.vb new file mode 100644 index 00000000..a9940f96 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/ChildDocument.Designer.vb @@ -0,0 +1,272 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace TaskbarDemo + Partial Public Class ChildDocument + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(ChildDocument)) + Me.groupBoxIconOverlay = New System.Windows.Forms.GroupBox + Me.labelNoIconOverlay = New System.Windows.Forms.Label + Me.pictureIconOverlay3 = New System.Windows.Forms.PictureBox + Me.pictureIconOverlay2 = New System.Windows.Forms.PictureBox + Me.label7 = New System.Windows.Forms.Label + Me.pictureIconOverlay1 = New System.Windows.Forms.PictureBox + Me.groupBoxCustomCategories = New System.Windows.Forms.GroupBox + Me.listBox1 = New System.Windows.Forms.ListBox + Me.label5 = New System.Windows.Forms.Label + Me.buttonRefreshTaskbarList = New System.Windows.Forms.Button + Me.button1 = New System.Windows.Forms.Button + Me.groupBoxProgressBar = New System.Windows.Forms.GroupBox + Me.trackBar1 = New System.Windows.Forms.TrackBar + Me.label8 = New System.Windows.Forms.Label + Me.label6 = New System.Windows.Forms.Label + Me.comboBoxProgressBarStates = New System.Windows.Forms.ComboBox + Me.progressBar1 = New System.Windows.Forms.ProgressBar + Me.groupBoxIconOverlay.SuspendLayout() + CType(Me.pictureIconOverlay3, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pictureIconOverlay2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pictureIconOverlay1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.groupBoxCustomCategories.SuspendLayout() + Me.groupBoxProgressBar.SuspendLayout() + CType(Me.trackBar1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + 'groupBoxIconOverlay + ' + Me.groupBoxIconOverlay.Controls.Add(Me.labelNoIconOverlay) + Me.groupBoxIconOverlay.Controls.Add(Me.pictureIconOverlay3) + Me.groupBoxIconOverlay.Controls.Add(Me.pictureIconOverlay2) + Me.groupBoxIconOverlay.Controls.Add(Me.label7) + Me.groupBoxIconOverlay.Controls.Add(Me.pictureIconOverlay1) + Me.groupBoxIconOverlay.Location = New System.Drawing.Point(13, 342) + Me.groupBoxIconOverlay.Name = "groupBoxIconOverlay" + Me.groupBoxIconOverlay.Size = New System.Drawing.Size(305, 88) + Me.groupBoxIconOverlay.TabIndex = 12 + Me.groupBoxIconOverlay.TabStop = False + Me.groupBoxIconOverlay.Text = "Icon Overlay" + ' + 'labelNoIconOverlay + ' + Me.labelNoIconOverlay.Location = New System.Drawing.Point(9, 50) + Me.labelNoIconOverlay.Name = "labelNoIconOverlay" + Me.labelNoIconOverlay.Size = New System.Drawing.Size(35, 13) + Me.labelNoIconOverlay.TabIndex = 0 + Me.labelNoIconOverlay.Text = "None" + ' + 'pictureIconOverlay3 + ' + Me.pictureIconOverlay3.Image = CType(resources.GetObject("pictureIconOverlay3.Image"), System.Drawing.Image) + Me.pictureIconOverlay3.Location = New System.Drawing.Point(126, 41) + Me.pictureIconOverlay3.Name = "pictureIconOverlay3" + Me.pictureIconOverlay3.Size = New System.Drawing.Size(32, 32) + Me.pictureIconOverlay3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.pictureIconOverlay3.TabIndex = 3 + Me.pictureIconOverlay3.TabStop = False + ' + 'pictureIconOverlay2 + ' + Me.pictureIconOverlay2.Image = CType(resources.GetObject("pictureIconOverlay2.Image"), System.Drawing.Image) + Me.pictureIconOverlay2.Location = New System.Drawing.Point(88, 41) + Me.pictureIconOverlay2.Name = "pictureIconOverlay2" + Me.pictureIconOverlay2.Size = New System.Drawing.Size(32, 32) + Me.pictureIconOverlay2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.pictureIconOverlay2.TabIndex = 2 + Me.pictureIconOverlay2.TabStop = False + ' + 'label7 + ' + Me.label7.AutoSize = True + Me.label7.Location = New System.Drawing.Point(9, 20) + Me.label7.Name = "label7" + Me.label7.Size = New System.Drawing.Size(209, 13) + Me.label7.TabIndex = 1 + Me.label7.Text = "Select an image to overlay on the task bar:" + ' + 'pictureIconOverlay1 + ' + Me.pictureIconOverlay1.Image = CType(resources.GetObject("pictureIconOverlay1.Image"), System.Drawing.Image) + Me.pictureIconOverlay1.Location = New System.Drawing.Point(50, 41) + Me.pictureIconOverlay1.Name = "pictureIconOverlay1" + Me.pictureIconOverlay1.Size = New System.Drawing.Size(32, 32) + Me.pictureIconOverlay1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.pictureIconOverlay1.TabIndex = 0 + Me.pictureIconOverlay1.TabStop = False + ' + 'groupBoxCustomCategories + ' + Me.groupBoxCustomCategories.Controls.Add(Me.listBox1) + Me.groupBoxCustomCategories.Controls.Add(Me.buttonRefreshTaskbarList) + Me.groupBoxCustomCategories.Controls.Add(Me.label5) + Me.groupBoxCustomCategories.Enabled = False + Me.groupBoxCustomCategories.Location = New System.Drawing.Point(13, 12) + Me.groupBoxCustomCategories.Name = "groupBoxCustomCategories" + Me.groupBoxCustomCategories.Size = New System.Drawing.Size(304, 174) + Me.groupBoxCustomCategories.TabIndex = 13 + Me.groupBoxCustomCategories.TabStop = False + Me.groupBoxCustomCategories.Text = "Custom JumpList" + ' + 'listBox1 + ' + Me.listBox1.FormattingEnabled = True + Me.listBox1.Items.AddRange(New Object() {"Notepad", "Calculator", "Paint", "WordPad", "Windows Explorer", "Internet Explorer", "Control Panel", "Documents Library"}) + Me.listBox1.Location = New System.Drawing.Point(87, 30) + Me.listBox1.Name = "listBox1" + Me.listBox1.SelectionMode = System.Windows.Forms.SelectionMode.MultiSimple + Me.listBox1.Size = New System.Drawing.Size(210, 108) + Me.listBox1.TabIndex = 11 + ' + 'label5 + ' + Me.label5.AutoSize = True + Me.label5.Location = New System.Drawing.Point(8, 30) + Me.label5.Name = "label5" + Me.label5.Size = New System.Drawing.Size(64, 13) + Me.label5.TabIndex = 8 + Me.label5.Text = "User Tasks:" + ' + 'buttonRefreshTaskbarList + ' + Me.buttonRefreshTaskbarList.Enabled = False + Me.buttonRefreshTaskbarList.Location = New System.Drawing.Point(143, 144) + Me.buttonRefreshTaskbarList.Name = "buttonRefreshTaskbarList" + Me.buttonRefreshTaskbarList.Size = New System.Drawing.Size(123, 23) + Me.buttonRefreshTaskbarList.TabIndex = 14 + Me.buttonRefreshTaskbarList.Text = "Refresh JumpList" + Me.buttonRefreshTaskbarList.UseVisualStyleBackColor = True + ' + 'button1 + ' + Me.button1.Location = New System.Drawing.Point(11, 445) + Me.button1.Name = "button1" + Me.button1.Size = New System.Drawing.Size(132, 23) + Me.button1.TabIndex = 15 + Me.button1.Text = "Add separate JumpList" + Me.button1.UseVisualStyleBackColor = True + ' + 'groupBoxProgressBar + ' + Me.groupBoxProgressBar.Controls.Add(Me.trackBar1) + Me.groupBoxProgressBar.Controls.Add(Me.label8) + Me.groupBoxProgressBar.Controls.Add(Me.label6) + Me.groupBoxProgressBar.Controls.Add(Me.comboBoxProgressBarStates) + Me.groupBoxProgressBar.Controls.Add(Me.progressBar1) + Me.groupBoxProgressBar.Location = New System.Drawing.Point(13, 192) + Me.groupBoxProgressBar.Name = "groupBoxProgressBar" + Me.groupBoxProgressBar.Size = New System.Drawing.Size(305, 144) + Me.groupBoxProgressBar.TabIndex = 16 + Me.groupBoxProgressBar.TabStop = False + Me.groupBoxProgressBar.Text = "Progress Bar" + ' + 'trackBar1 + ' + Me.trackBar1.LargeChange = 25 + Me.trackBar1.Location = New System.Drawing.Point(92, 59) + Me.trackBar1.Maximum = 100 + Me.trackBar1.Name = "trackBar1" + Me.trackBar1.Size = New System.Drawing.Size(203, 45) + Me.trackBar1.SmallChange = 10 + Me.trackBar1.TabIndex = 12 + Me.trackBar1.TickStyle = System.Windows.Forms.TickStyle.None + ' + 'label8 + ' + Me.label8.AutoSize = True + Me.label8.Location = New System.Drawing.Point(6, 71) + Me.label8.Name = "label8" + Me.label8.Size = New System.Drawing.Size(77, 13) + Me.label8.TabIndex = 11 + Me.label8.Text = "Update value: " + ' + 'label6 + ' + Me.label6.AutoSize = True + Me.label6.Location = New System.Drawing.Point(6, 25) + Me.label6.Name = "label6" + Me.label6.Size = New System.Drawing.Size(35, 13) + Me.label6.TabIndex = 3 + Me.label6.Text = "State:" + ' + 'comboBoxProgressBarStates + ' + Me.comboBoxProgressBarStates.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.comboBoxProgressBarStates.FormattingEnabled = True + Me.comboBoxProgressBarStates.Location = New System.Drawing.Point(47, 22) + Me.comboBoxProgressBarStates.Name = "comboBoxProgressBarStates" + Me.comboBoxProgressBarStates.Size = New System.Drawing.Size(154, 21) + Me.comboBoxProgressBarStates.TabIndex = 2 + ' + 'progressBar1 + ' + Me.progressBar1.Location = New System.Drawing.Point(11, 110) + Me.progressBar1.Name = "progressBar1" + Me.progressBar1.Size = New System.Drawing.Size(285, 23) + Me.progressBar1.Step = 5 + Me.progressBar1.TabIndex = 0 + ' + 'ChildDocument + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(327, 510) + Me.Controls.Add(Me.groupBoxProgressBar) + Me.Controls.Add(Me.button1) + Me.Controls.Add(Me.groupBoxCustomCategories) + Me.Controls.Add(Me.groupBoxIconOverlay) + Me.Name = "ChildDocument" + Me.Text = "Child Document Window" + Me.groupBoxIconOverlay.ResumeLayout(False) + Me.groupBoxIconOverlay.PerformLayout() + CType(Me.pictureIconOverlay3, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pictureIconOverlay2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pictureIconOverlay1, System.ComponentModel.ISupportInitialize).EndInit() + Me.groupBoxCustomCategories.ResumeLayout(False) + Me.groupBoxCustomCategories.PerformLayout() + Me.groupBoxProgressBar.ResumeLayout(False) + Me.groupBoxProgressBar.PerformLayout() + CType(Me.trackBar1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + + End Sub + + #End Region + + Private groupBoxIconOverlay As System.Windows.Forms.GroupBox + Private WithEvents labelNoIconOverlay As System.Windows.Forms.Label + Private WithEvents pictureIconOverlay3 As System.Windows.Forms.PictureBox + Private WithEvents pictureIconOverlay2 As System.Windows.Forms.PictureBox + Private label7 As System.Windows.Forms.Label + Private WithEvents pictureIconOverlay1 As System.Windows.Forms.PictureBox + Private groupBoxCustomCategories As System.Windows.Forms.GroupBox + Private label5 As System.Windows.Forms.Label + Private WithEvents buttonRefreshTaskbarList As System.Windows.Forms.Button + Private WithEvents button1 As System.Windows.Forms.Button + Private listBox1 As System.Windows.Forms.ListBox + Private groupBoxProgressBar As System.Windows.Forms.GroupBox + Private WithEvents trackBar1 As System.Windows.Forms.TrackBar + Private label8 As System.Windows.Forms.Label + Private label6 As System.Windows.Forms.Label + Private WithEvents comboBoxProgressBarStates As System.Windows.Forms.ComboBox + Private progressBar1 As System.Windows.Forms.ProgressBar + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/ChildDocument.resx b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/ChildDocument.resx new file mode 100644 index 00000000..2fc87df4 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/ChildDocument.resx @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + uAAADrgBakH1WwAAADlJREFUWEft0LERADAIAzGPzuYkTAGFiqfFpyTprSo1v9P/rmQAAQIECBAgQIAA + AQIECBC4IzBLtnqFOrrmMht1fQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + uAAADrgBakH1WwAAADlJREFUWEft0LERADAMAjFG9+bkkiWcQsXXcEqSbjXzttN2JwcIECBAgAABAgQI + ECBAgMAfAvfFZgdzeDyeYQpN+QAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + uAAADrgBakH1WwAAADlJREFUWEft0MENACAMAkBGd3OrLoGPS0O/kEuSXct63ee1zgACBAgQIECAAAEC + BAgQIPCHwF1RzABFgpxmS0knOAAAAABJRU5ErkJggg== + + + \ No newline at end of file diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/ChildDocument.vb b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/ChildDocument.vb new file mode 100644 index 00000000..c217a133 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/ChildDocument.vb @@ -0,0 +1,220 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.IO +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.Shell +Imports Microsoft.WindowsAPICodePack.Taskbar +Imports System.Reflection + +Namespace TaskbarDemo + Partial Public Class ChildDocument + Inherits Form + ' Keep a reference to the Taskbar instance + Private windowsTaskbar As TaskbarManager = TaskbarManager.Instance + + Private childWindowJumpList As JumpList + Private childWindowAppId As String + + Public Sub New(ByVal count As Integer) + childWindowAppId = "TaskbarDemo.ChildWindow" & count + + InitializeComponent() + + ' Progress Bar + For Each state As String In System.Enum.GetNames(GetType(TaskbarProgressBarState)) + comboBoxProgressBarStates.Items.Add(state) + Next state + + ' + comboBoxProgressBarStates.SelectedItem = "NoProgress" + + AddHandler Shown, AddressOf ChildDocument_Shown + + HighlightOverlaySelection(labelNoIconOverlay) + End Sub + + Private Sub ChildDocument_Shown(ByVal sender As Object, ByVal e As EventArgs) + ' Set our default + windowsTaskbar.SetProgressState(TaskbarProgressBarState.NoProgress, Me.Handle) + End Sub + + #Region "Progress Bar" + + Private Sub trackBar1_Scroll(ByVal sender As Object, ByVal e As EventArgs) Handles trackBar1.Scroll + ' When the user changes the trackBar value, + ' update the progress bar in our UI as well as Taskbar + progressBar1.Value = trackBar1.Value + + windowsTaskbar.SetProgressValue(trackBar1.Value, 100, Me.Handle) + End Sub + + + Private Sub comboBoxProgressBarStates_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles comboBoxProgressBarStates.SelectedIndexChanged + ' Update the status of the taskbar progress bar + + Dim state As TaskbarProgressBarState = CType(System.Enum.Parse(GetType(TaskbarProgressBarState), CStr(comboBoxProgressBarStates.SelectedItem)), TaskbarProgressBarState) + + windowsTaskbar.SetProgressState(state, Me.Handle) + + ' Update the application progress bar, + ' as well disable the trackbar in some cases + Select Case state + Case TaskbarProgressBarState.Normal + If trackBar1.Value = 0 Then + trackBar1.Value = 20 + progressBar1.Value = trackBar1.Value + End If + + progressBar1.Style = ProgressBarStyle.Continuous + windowsTaskbar.SetProgressValue(trackBar1.Value, 100, Me.Handle) + trackBar1.Enabled = True + Case TaskbarProgressBarState.Paused + If trackBar1.Value = 0 Then + trackBar1.Value = 20 + progressBar1.Value = trackBar1.Value + End If + + progressBar1.Style = ProgressBarStyle.Continuous + windowsTaskbar.SetProgressValue(trackBar1.Value, 100, Me.Handle) + trackBar1.Enabled = True + Case TaskbarProgressBarState.Error + If trackBar1.Value = 0 Then + trackBar1.Value = 20 + progressBar1.Value = trackBar1.Value + End If + + progressBar1.Style = ProgressBarStyle.Continuous + windowsTaskbar.SetProgressValue(trackBar1.Value, 100, Me.Handle) + trackBar1.Enabled = True + Case TaskbarProgressBarState.Indeterminate + progressBar1.Style = ProgressBarStyle.Marquee + progressBar1.MarqueeAnimationSpeed = 30 + trackBar1.Enabled = False + Case TaskbarProgressBarState.NoProgress + progressBar1.Value = 0 + trackBar1.Value = 0 + progressBar1.Style = ProgressBarStyle.Continuous + trackBar1.Enabled = False + End Select + End Sub + + #End Region + + #Region "Icon Overlay" + + Private Sub HighlightOverlaySelection(ByVal ctlOverlay As Control) + TaskbarDemoMainForm.CheckOverlaySelection(ctlOverlay, labelNoIconOverlay) + TaskbarDemoMainForm.CheckOverlaySelection(ctlOverlay, pictureIconOverlay1) + TaskbarDemoMainForm.CheckOverlaySelection(ctlOverlay, pictureIconOverlay2) + TaskbarDemoMainForm.CheckOverlaySelection(ctlOverlay, pictureIconOverlay3) + End Sub + + Private Sub labelNoIconOverlay_Click(ByVal sender As Object, ByVal e As EventArgs) Handles labelNoIconOverlay.Click + windowsTaskbar.SetOverlayIcon(Me.Handle, Nothing, Nothing) + + HighlightOverlaySelection(labelNoIconOverlay) + End Sub + + Private Sub pictureIconOverlay1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles pictureIconOverlay1.Click + windowsTaskbar.SetOverlayIcon(Me.Handle, My.Resources.Green, "Green") + + HighlightOverlaySelection(pictureIconOverlay1) + End Sub + + Private Sub pictureIconOverlay2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles pictureIconOverlay2.Click + windowsTaskbar.SetOverlayIcon(Me.Handle, My.Resources.Yellow, "Yellow") + + HighlightOverlaySelection(pictureIconOverlay2) + End Sub + + Private Sub pictureIconOverlay3_Click(ByVal sender As Object, ByVal e As EventArgs) Handles pictureIconOverlay3.Click + windowsTaskbar.SetOverlayIcon(Me.Handle, My.Resources.Red, "Red") + + HighlightOverlaySelection(pictureIconOverlay3) + End Sub + + #End Region + + Private Sub buttonRefreshTaskbarList_Click(ByVal sender As Object, ByVal e As EventArgs) Handles buttonRefreshTaskbarList.Click + ' Start from an empty list for user tasks + childWindowJumpList.ClearAllUserTasks() + + ' Path to Windows system folder + Dim systemFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.System) + + ' Path to the Program Files folder + Dim programFilesFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + + ' Path to Windows folder + Dim windowsFolder As String = Environment.GetEnvironmentVariable("windir") + + For Each item As Object In listBox1.SelectedItems + Select Case item.ToString() + Case "Notepad" + childWindowJumpList.AddUserTasks( _ + New JumpListLink(Path.Combine(systemFolder, "notepad.exe"), "Open Notepad") With _ + { _ + .IconReference = New IconReference(Path.Combine(systemFolder, "notepad.exe"), 0) _ + }) + Case "Calculator" + childWindowJumpList.AddUserTasks( _ + New JumpListLink(Path.Combine(systemFolder, "calc.exe"), "Open Calculator") With _ + { _ + .IconReference = New IconReference(Path.Combine(systemFolder, "calc.exe"), 0) _ + }) + Case "Paint" + childWindowJumpList.AddUserTasks( _ + New JumpListLink(Path.Combine(systemFolder, "mspaint.exe"), "Open Paint") With _ + { _ + .IconReference = New IconReference(Path.Combine(systemFolder, "mspaint.exe"), 0) _ + }) + Case "WordPad" + childWindowJumpList.AddUserTasks( _ + New JumpListLink(Path.Combine(programFilesFolder, "Windows NT\Accessories\wordpad.exe"), "Open WordPad") With _ + { _ + .IconReference = New IconReference(Path.Combine(programFilesFolder, "Windows NT\Accessories\wordpad.exe"), 0) _ + }) + Case "Windows Explorer" + childWindowJumpList.AddUserTasks( _ + New JumpListLink(Path.Combine(windowsFolder, "explorer.exe"), "Open Windows Explorer") With _ + { _ + .IconReference = New IconReference(Path.Combine(windowsFolder, "explorer.exe"), 0) _ + }) + Case "Internet Explorer" + childWindowJumpList.AddUserTasks( _ + New JumpListLink(Path.Combine(programFilesFolder, "Internet Explorer\iexplore.exe"), "Open Internet Explorer") With _ + { _ + .IconReference = New IconReference(Path.Combine(programFilesFolder, "Internet Explorer\iexplore.exe"), 0) _ + }) + Case "Control Panel" + childWindowJumpList.AddUserTasks( _ + New JumpListLink((CType(KnownFolders.ControlPanel, ShellObject)).ParsingName, "Open Control Panel") With _ + { _ + .IconReference = New IconReference(Path.Combine(windowsFolder, "explorer.exe"), 0) _ + }) + Case "Documents Library" + If ShellLibrary.IsPlatformSupported Then + childWindowJumpList.AddUserTasks( _ + New JumpListLink(KnownFolders.DocumentsLibrary.Path, "Open Documents Library") With _ + { _ + .IconReference = New IconReference(Path.Combine(windowsFolder, "explorer.exe"), 0) _ + }) + End If + End Select + Next item + + childWindowJumpList.Refresh() + End Sub + + Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles button1.Click + childWindowJumpList = JumpList.CreateJumpListForIndividualWindow(childWindowAppId, Me.Handle) + + CType(sender, Button).Enabled = False + groupBoxCustomCategories.Enabled = True + buttonRefreshTaskbarList.Enabled = True + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/My Project/AssemblyInfo.vb b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..b9abefdd --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/My Project/AssemblyInfo.vb @@ -0,0 +1,36 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision + + diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/My Project/Resources.Designer.vb b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/My Project/Resources.Designer.vb new file mode 100644 index 00000000..0c376811 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/My Project/Resources.Designer.vb @@ -0,0 +1,91 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + Friend ReadOnly Property Green() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("Green", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + Friend ReadOnly Property Red() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("Red", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + Friend ReadOnly Property Taskbar() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("Taskbar", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + Friend ReadOnly Property Yellow() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("Yellow", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/My Project/Resources.resx b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/My Project/Resources.resx new file mode 100644 index 00000000..cbbabd20 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/My Project/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Green.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Red.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Taskbar.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\Yellow.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/My Project/Settings.Designer.vb b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/My Project/Settings.Designer.vb new file mode 100644 index 00000000..f2ffe239 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class Settings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()),Settings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As Settings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Settings + Get + Return Global.Settings.Default + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/My Project/Settings.settings b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/My Project/Settings.settings new file mode 100644 index 00000000..8e615f25 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/My Project/Settings.settings @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/Program.vb b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/Program.vb new file mode 100644 index 00000000..7b48ce08 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/Program.vb @@ -0,0 +1,30 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack +Imports Microsoft.WindowsAPICodePack.Taskbar + +Namespace TaskbarDemo + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + If Not TaskbarManager.IsPlatformSupported Then + MessageBox.Show("This demo requires to be run on Windows 7", "Demo needs Windows 7", MessageBoxButtons.OK, MessageBoxIcon.Error) + System.Environment.Exit(0) + Return + End If + + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New TaskbarDemoMainForm()) + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/RegistrationHelper.vb b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/RegistrationHelper.vb new file mode 100644 index 00000000..f7fb9724 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/RegistrationHelper.vb @@ -0,0 +1,64 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Diagnostics +Imports Microsoft.WindowsAPICodePack.Dialogs +Imports System.ComponentModel + +Namespace TaskbarDemo + ''' + ''' Helper class for registering file associations. + ''' + Public NotInheritable Class RegistrationHelper + Private Sub New() + End Sub + Private Shared Sub InternalRegisterFileAssociations(ByVal unregister As Boolean, ByVal progId As String, ByVal registerInHKCU As Boolean, ByVal appId As String, ByVal openWith As String, ByVal extensions() As String) + Dim psi As New ProcessStartInfo("RegistrationHelper.exe") + psi.Arguments = String.Format("{0} {1} {2} ""{3}"" {4} {5}", progId, registerInHKCU, appId, openWith, unregister, String.Join(" ", extensions)) + psi.UseShellExecute = True + psi.Verb = "runas" 'Launch elevated + psi.WindowStyle = ProcessWindowStyle.Hidden + + Try + Process.Start(psi).WaitForExit() + TaskDialog.Show("File associations were " & If(unregister, "un", "") & "registered") + Catch e As Win32Exception + If e.NativeErrorCode = 1223 Then ' 1223: The operation was canceled by the user. + TaskDialog.Show("The operation was canceled by the user.") + End If + End Try + + End Sub + + ''' + ''' Registers file associations for an application. + ''' + ''' The application's ProgID. + ''' Whether to register the + ''' association per-user (in HKCU). The only supported value + ''' at this time is false. + ''' The application's app-id. + ''' The command and arguments to be used + ''' when opening a shortcut to a document. + ''' The extensions to register. + Public Shared Sub RegisterFileAssociations(ByVal progId As String, ByVal registerInHKCU As Boolean, ByVal appId As String, ByVal openWith As String, ByVal ParamArray extensions() As String) + InternalRegisterFileAssociations(False, progId, registerInHKCU, appId, openWith, extensions) + End Sub + + ''' + ''' Unregisters file associations for an application. + ''' + ''' The application's ProgID. + ''' Whether to register the + ''' association per-user (in HKCU). The only supported value + ''' at this time is false. + ''' The application's app-id. + ''' The command and arguments to be used + ''' when opening a shortcut to a document. + ''' The extensions to unregister. + Public Shared Sub UnregisterFileAssociations(ByVal progId As String, ByVal registerInHKCU As Boolean, ByVal appId As String, ByVal openWith As String, ByVal ParamArray extensions() As String) + InternalRegisterFileAssociations(True, progId, registerInHKCU, appId, openWith, extensions) + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/Resources/Green.ico b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/Resources/Green.ico new file mode 100644 index 00000000..c7c1c238 Binary files /dev/null and b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/Resources/Green.ico differ diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/Resources/Red.ico b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/Resources/Red.ico new file mode 100644 index 00000000..ef11cfaf Binary files /dev/null and b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/Resources/Red.ico differ diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/Resources/Taskbar.ico b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/Resources/Taskbar.ico new file mode 100644 index 00000000..5e21fb01 Binary files /dev/null and b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/Resources/Taskbar.ico differ diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/Resources/Yellow.ico b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/Resources/Yellow.ico new file mode 100644 index 00000000..efb9583e Binary files /dev/null and b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/Resources/Yellow.ico differ diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/TaskbarDemo.vbproj b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/TaskbarDemo.vbproj new file mode 100644 index 00000000..c728f27f --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/TaskbarDemo.vbproj @@ -0,0 +1,201 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {981637D1-48D8-4763-B0FC-B3A2E3E199A0} + WinExe + + + TaskbarDemo + v3.5 + On + Binary + Off + On + 512 + TaskbarDemo.Program + false + Resources\Taskbar.ico + + + + + app.manifest + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + + + true + full + false + bin\Debug\ + true + true + prompt + AllRules.ruleset + + + pdbonly + true + bin\Release\ + false + true + prompt + AllRules.ruleset + + + + 3.0 + + + 3.0 + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + 3.0 + + + + + Form + + + ChildDocument.vb + + + Form + + + TaskbarDemoMainForm.vb + + + + + ChildDocument.vb + Designer + + + TaskbarDemoMainForm.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + Designer + My.Resources + + + True + Resources.resx + True + + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + True + Settings.settings + True + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + false + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + {03F9F5A8-F3F4-499A-8B15-57ADBA5148CC} + RegistrationHelper %28Samples\CS\RegistrationHelper%29 + + + {A1AC4592-6309-492C-B0F1-C9241886718F} + RegistrationHelper %28Samples\VB\RegistrationHelper%29 + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/TaskbarDemoMainForm.Designer.vb b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/TaskbarDemoMainForm.Designer.vb new file mode 100644 index 00000000..2b015ebf --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/TaskbarDemoMainForm.Designer.vb @@ -0,0 +1,548 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace TaskbarDemo + Partial Public Class TaskbarDemoMainForm + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Dim resources As New System.ComponentModel.ComponentResourceManager(GetType(TaskbarDemoMainForm)) + Me.menuStrip1 = New System.Windows.Forms.MenuStrip() + Me.fileToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.newToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.openToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.saveToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.administrationToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.registerFileTypeToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.unregisterFileTypeToolStripMenuItem1 = New System.Windows.Forms.ToolStripMenuItem() + Me.fileToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.openToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.saveToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.administrativeToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.registerFileTypeToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.unregisterFileTypeToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem() + Me.statusStrip1 = New System.Windows.Forms.StatusStrip() + Me.toolStripStatusLabel1 = New System.Windows.Forms.ToolStripStatusLabel() + Me.groupBoxKnownCategories = New System.Windows.Forms.GroupBox() + Me.numericUpDownKnownCategoryLocation = New System.Windows.Forms.NumericUpDown() + Me.comboBoxKnownCategoryType = New System.Windows.Forms.ComboBox() + Me.label2 = New System.Windows.Forms.Label() + Me.label1 = New System.Windows.Forms.Label() + Me.groupBoxIconOverlay = New System.Windows.Forms.GroupBox() + Me.labelNoIconOverlay = New System.Windows.Forms.Label() + Me.pictureIconOverlay3 = New System.Windows.Forms.PictureBox() + Me.pictureIconOverlay2 = New System.Windows.Forms.PictureBox() + Me.label7 = New System.Windows.Forms.Label() + Me.pictureIconOverlay1 = New System.Windows.Forms.PictureBox() + Me.groupBoxCustomCategories = New System.Windows.Forms.GroupBox() + Me.buttonCategoryOneRename = New System.Windows.Forms.Button() + Me.label5 = New System.Windows.Forms.Label() + Me.label4 = New System.Windows.Forms.Label() + Me.label3 = New System.Windows.Forms.Label() + Me.buttonCategoryTwoAddLink = New System.Windows.Forms.Button() + Me.buttonCategoryOneAddLink = New System.Windows.Forms.Button() + Me.buttonUserTasksAddTasks = New System.Windows.Forms.Button() + Me.groupBoxProgressBar = New System.Windows.Forms.GroupBox() + Me.trackBar1 = New System.Windows.Forms.TrackBar() + Me.label8 = New System.Windows.Forms.Label() + Me.label6 = New System.Windows.Forms.Label() + Me.comboBoxProgressBarStates = New System.Windows.Forms.ComboBox() + Me.progressBar1 = New System.Windows.Forms.ProgressBar() + Me.buttonRefreshTaskbarList = New System.Windows.Forms.Button() + Me.menuStrip1.SuspendLayout() + Me.groupBoxKnownCategories.SuspendLayout() + CType(Me.numericUpDownKnownCategoryLocation, System.ComponentModel.ISupportInitialize).BeginInit() + Me.groupBoxIconOverlay.SuspendLayout() + CType(Me.pictureIconOverlay3, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pictureIconOverlay2, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pictureIconOverlay1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.groupBoxCustomCategories.SuspendLayout() + Me.groupBoxProgressBar.SuspendLayout() + CType(Me.trackBar1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.SuspendLayout() + ' + ' menuStrip1 + ' + Me.menuStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() { Me.fileToolStripMenuItem1, Me.administrationToolStripMenuItem}) + Me.menuStrip1.Location = New System.Drawing.Point(0, 0) + Me.menuStrip1.Name = "menuStrip1" + Me.menuStrip1.Size = New System.Drawing.Size(327, 24) + Me.menuStrip1.TabIndex = 0 + Me.menuStrip1.Text = "menuStrip1" + ' + ' fileToolStripMenuItem1 + ' + Me.fileToolStripMenuItem1.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() { Me.newToolStripMenuItem, Me.openToolStripMenuItem1, Me.saveToolStripMenuItem1}) + Me.fileToolStripMenuItem1.Name = "fileToolStripMenuItem1" + Me.fileToolStripMenuItem1.Size = New System.Drawing.Size(37, 20) + Me.fileToolStripMenuItem1.Text = "&File" + ' + ' newToolStripMenuItem + ' + Me.newToolStripMenuItem.Name = "newToolStripMenuItem" + Me.newToolStripMenuItem.Size = New System.Drawing.Size(176, 22) + Me.newToolStripMenuItem.Text = "&New Child Window" +' Me.newToolStripMenuItem.Click += New System.EventHandler(Me.newToolStripMenuItem_Click) + ' + ' openToolStripMenuItem1 + ' + Me.openToolStripMenuItem1.Name = "openToolStripMenuItem1" + Me.openToolStripMenuItem1.Size = New System.Drawing.Size(176, 22) + Me.openToolStripMenuItem1.Text = "&Open" +' Me.openToolStripMenuItem1.Click += New System.EventHandler(Me.openToolStripMenuItem_Click) + ' + ' saveToolStripMenuItem1 + ' + Me.saveToolStripMenuItem1.Name = "saveToolStripMenuItem1" + Me.saveToolStripMenuItem1.Size = New System.Drawing.Size(176, 22) + Me.saveToolStripMenuItem1.Text = "&Save" +' Me.saveToolStripMenuItem1.Click += New System.EventHandler(Me.saveToolStripMenuItem_Click) + ' + ' administrationToolStripMenuItem + ' + Me.administrationToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() { Me.registerFileTypeToolStripMenuItem1, Me.unregisterFileTypeToolStripMenuItem1}) + Me.administrationToolStripMenuItem.Name = "administrationToolStripMenuItem" + Me.administrationToolStripMenuItem.Size = New System.Drawing.Size(98, 20) + Me.administrationToolStripMenuItem.Text = "&Administration" + ' + ' registerFileTypeToolStripMenuItem1 + ' + Me.registerFileTypeToolStripMenuItem1.Name = "registerFileTypeToolStripMenuItem1" + Me.registerFileTypeToolStripMenuItem1.Size = New System.Drawing.Size(178, 22) + Me.registerFileTypeToolStripMenuItem1.Text = "Register File Type" +' Me.registerFileTypeToolStripMenuItem1.Click += New System.EventHandler(Me.registerFileTypeToolStripMenuItem_Click) + ' + ' unregisterFileTypeToolStripMenuItem1 + ' + Me.unregisterFileTypeToolStripMenuItem1.Name = "unregisterFileTypeToolStripMenuItem1" + Me.unregisterFileTypeToolStripMenuItem1.Size = New System.Drawing.Size(178, 22) + Me.unregisterFileTypeToolStripMenuItem1.Text = "Unregister File Type" +' Me.unregisterFileTypeToolStripMenuItem1.Click += New System.EventHandler(Me.unregisterFileTypeToolStripMenuItem_Click) + ' + ' fileToolStripMenuItem + ' + Me.fileToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() { Me.openToolStripMenuItem, Me.saveToolStripMenuItem}) + Me.fileToolStripMenuItem.Name = "fileToolStripMenuItem" + Me.fileToolStripMenuItem.Size = New System.Drawing.Size(37, 20) + Me.fileToolStripMenuItem.Text = "&File" + ' + ' openToolStripMenuItem + ' + Me.openToolStripMenuItem.Name = "openToolStripMenuItem" + Me.openToolStripMenuItem.Size = New System.Drawing.Size(103, 22) + Me.openToolStripMenuItem.Text = "&Open" +' Me.openToolStripMenuItem.Click += New System.EventHandler(Me.openToolStripMenuItem_Click) + ' + ' saveToolStripMenuItem + ' + Me.saveToolStripMenuItem.Name = "saveToolStripMenuItem" + Me.saveToolStripMenuItem.Size = New System.Drawing.Size(103, 22) + Me.saveToolStripMenuItem.Text = "&Save" +' Me.saveToolStripMenuItem.Click += New System.EventHandler(Me.saveToolStripMenuItem_Click) + ' + ' administrativeToolStripMenuItem + ' + Me.administrativeToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() { Me.registerFileTypeToolStripMenuItem, Me.unregisterFileTypeToolStripMenuItem}) + Me.administrativeToolStripMenuItem.Name = "administrativeToolStripMenuItem" + Me.administrativeToolStripMenuItem.Size = New System.Drawing.Size(96, 20) + Me.administrativeToolStripMenuItem.Text = "&Administrative" + ' + ' registerFileTypeToolStripMenuItem + ' + Me.registerFileTypeToolStripMenuItem.Name = "registerFileTypeToolStripMenuItem" + Me.registerFileTypeToolStripMenuItem.Size = New System.Drawing.Size(178, 22) + Me.registerFileTypeToolStripMenuItem.Text = "&Register File Type" +' Me.registerFileTypeToolStripMenuItem.Click += New System.EventHandler(Me.registerFileTypeToolStripMenuItem_Click) + ' + ' unregisterFileTypeToolStripMenuItem + ' + Me.unregisterFileTypeToolStripMenuItem.Name = "unregisterFileTypeToolStripMenuItem" + Me.unregisterFileTypeToolStripMenuItem.Size = New System.Drawing.Size(178, 22) + Me.unregisterFileTypeToolStripMenuItem.Text = "&Unregister File Type" +' Me.unregisterFileTypeToolStripMenuItem.Click += New System.EventHandler(Me.unregisterFileTypeToolStripMenuItem_Click) + ' + ' statusStrip1 + ' + Me.statusStrip1.Location = New System.Drawing.Point(0, 488) + Me.statusStrip1.Name = "statusStrip1" + Me.statusStrip1.Size = New System.Drawing.Size(327, 22) + Me.statusStrip1.TabIndex = 9 + Me.statusStrip1.Text = "statusStrip1" + ' + ' toolStripStatusLabel1 + ' + Me.toolStripStatusLabel1.Name = "toolStripStatusLabel1" + Me.toolStripStatusLabel1.Size = New System.Drawing.Size(118, 17) + Me.toolStripStatusLabel1.Text = "toolStripStatusLabel1" + ' + ' groupBoxKnownCategories + ' + Me.groupBoxKnownCategories.Controls.Add(Me.numericUpDownKnownCategoryLocation) + Me.groupBoxKnownCategories.Controls.Add(Me.comboBoxKnownCategoryType) + Me.groupBoxKnownCategories.Controls.Add(Me.label2) + Me.groupBoxKnownCategories.Controls.Add(Me.label1) + Me.groupBoxKnownCategories.Location = New System.Drawing.Point(12, 27) + Me.groupBoxKnownCategories.Name = "groupBoxKnownCategories" + Me.groupBoxKnownCategories.Size = New System.Drawing.Size(305, 68) + Me.groupBoxKnownCategories.TabIndex = 7 + Me.groupBoxKnownCategories.TabStop = False + Me.groupBoxKnownCategories.Text = "Known Categories" + ' + ' numericUpDownKnownCategoryLocation + ' + Me.numericUpDownKnownCategoryLocation.Location = New System.Drawing.Point(156, 38) + Me.numericUpDownKnownCategoryLocation.Name = "numericUpDownKnownCategoryLocation" + Me.numericUpDownKnownCategoryLocation.Size = New System.Drawing.Size(120, 20) + Me.numericUpDownKnownCategoryLocation.TabIndex = 12 +' Me.numericUpDownKnownCategoryLocation.ValueChanged += New System.EventHandler(Me.numericUpDownKnownCategoryLocation_ValueChanged) + ' + ' comboBoxKnownCategoryType + ' + Me.comboBoxKnownCategoryType.FormattingEnabled = True + Me.comboBoxKnownCategoryType.Items.AddRange(New Object() { "None", "Recent", "Frequent"}) + Me.comboBoxKnownCategoryType.Location = New System.Drawing.Point(5, 37) + Me.comboBoxKnownCategoryType.Name = "comboBoxKnownCategoryType" + Me.comboBoxKnownCategoryType.Size = New System.Drawing.Size(121, 21) + Me.comboBoxKnownCategoryType.TabIndex = 11 +' Me.comboBoxKnownCategoryType.SelectedIndexChanged += New System.EventHandler(Me.comboBoxKnownCategoryType_SelectedIndexChanged) + ' + ' label2 + ' + Me.label2.AutoSize = True + Me.label2.Location = New System.Drawing.Point(5, 21) + Me.label2.Name = "label2" + Me.label2.Size = New System.Drawing.Size(37, 13) + Me.label2.TabIndex = 9 + Me.label2.Text = "Show:" + ' + ' label1 + ' + Me.label1.AutoSize = True + Me.label1.Location = New System.Drawing.Point(153, 20) + Me.label1.Name = "label1" + Me.label1.Size = New System.Drawing.Size(51, 13) + Me.label1.TabIndex = 7 + Me.label1.Text = "Location:" + ' + ' groupBoxIconOverlay + ' + Me.groupBoxIconOverlay.Controls.Add(Me.labelNoIconOverlay) + Me.groupBoxIconOverlay.Controls.Add(Me.pictureIconOverlay3) + Me.groupBoxIconOverlay.Controls.Add(Me.pictureIconOverlay2) + Me.groupBoxIconOverlay.Controls.Add(Me.label7) + Me.groupBoxIconOverlay.Controls.Add(Me.pictureIconOverlay1) + Me.groupBoxIconOverlay.Location = New System.Drawing.Point(12, 361) + Me.groupBoxIconOverlay.Name = "groupBoxIconOverlay" + Me.groupBoxIconOverlay.Size = New System.Drawing.Size(305, 85) + Me.groupBoxIconOverlay.TabIndex = 11 + Me.groupBoxIconOverlay.TabStop = False + Me.groupBoxIconOverlay.Text = "Icon Overlay" + ' + ' labelNoIconOverlay + ' + Me.labelNoIconOverlay.Location = New System.Drawing.Point(9, 50) + Me.labelNoIconOverlay.Name = "labelNoIconOverlay" + Me.labelNoIconOverlay.Size = New System.Drawing.Size(35, 13) + Me.labelNoIconOverlay.TabIndex = 0 + Me.labelNoIconOverlay.Text = "None" +' Me.labelNoIconOverlay.Click += New System.EventHandler(Me.labelNoIconOverlay_Click) + ' + ' pictureIconOverlay3 + ' + Me.pictureIconOverlay3.Image = (CType(resources.GetObject("pictureIconOverlay3.Image"), System.Drawing.Image)) + Me.pictureIconOverlay3.Location = New System.Drawing.Point(126, 41) + Me.pictureIconOverlay3.Name = "pictureIconOverlay3" + Me.pictureIconOverlay3.Size = New System.Drawing.Size(32, 32) + Me.pictureIconOverlay3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.pictureIconOverlay3.TabIndex = 3 + Me.pictureIconOverlay3.TabStop = False +' Me.pictureIconOverlay3.Click += New System.EventHandler(Me.pictureIconOverlay3_Click) + ' + ' pictureIconOverlay2 + ' + Me.pictureIconOverlay2.Image = (CType(resources.GetObject("pictureIconOverlay2.Image"), System.Drawing.Image)) + Me.pictureIconOverlay2.Location = New System.Drawing.Point(88, 41) + Me.pictureIconOverlay2.Name = "pictureIconOverlay2" + Me.pictureIconOverlay2.Size = New System.Drawing.Size(32, 32) + Me.pictureIconOverlay2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.pictureIconOverlay2.TabIndex = 2 + Me.pictureIconOverlay2.TabStop = False +' Me.pictureIconOverlay2.Click += New System.EventHandler(Me.pictureIconOverlay2_Click) + ' + ' label7 + ' + Me.label7.AutoSize = True + Me.label7.Location = New System.Drawing.Point(9, 20) + Me.label7.Name = "label7" + Me.label7.Size = New System.Drawing.Size(209, 13) + Me.label7.TabIndex = 1 + Me.label7.Text = "Select an image to overlay on the task bar:" + ' + ' pictureIconOverlay1 + ' + Me.pictureIconOverlay1.Image = (CType(resources.GetObject("pictureIconOverlay1.Image"), System.Drawing.Image)) + Me.pictureIconOverlay1.Location = New System.Drawing.Point(50, 41) + Me.pictureIconOverlay1.Name = "pictureIconOverlay1" + Me.pictureIconOverlay1.Size = New System.Drawing.Size(32, 32) + Me.pictureIconOverlay1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage + Me.pictureIconOverlay1.TabIndex = 0 + Me.pictureIconOverlay1.TabStop = False +' Me.pictureIconOverlay1.Click += New System.EventHandler(Me.pictureIconOverlay1_Click) + ' + ' groupBoxCustomCategories + ' + Me.groupBoxCustomCategories.Controls.Add(Me.buttonCategoryOneRename) + Me.groupBoxCustomCategories.Controls.Add(Me.label5) + Me.groupBoxCustomCategories.Controls.Add(Me.label4) + Me.groupBoxCustomCategories.Controls.Add(Me.label3) + Me.groupBoxCustomCategories.Controls.Add(Me.buttonCategoryTwoAddLink) + Me.groupBoxCustomCategories.Controls.Add(Me.buttonCategoryOneAddLink) + Me.groupBoxCustomCategories.Controls.Add(Me.buttonUserTasksAddTasks) + Me.groupBoxCustomCategories.Location = New System.Drawing.Point(14, 101) + Me.groupBoxCustomCategories.Name = "groupBoxCustomCategories" + Me.groupBoxCustomCategories.Size = New System.Drawing.Size(304, 104) + Me.groupBoxCustomCategories.TabIndex = 8 + Me.groupBoxCustomCategories.TabStop = False + Me.groupBoxCustomCategories.Text = "Custom Categories" + ' + ' buttonCategoryOneRename + ' + Me.buttonCategoryOneRename.Location = New System.Drawing.Point(207, 16) + Me.buttonCategoryOneRename.Name = "buttonCategoryOneRename" + Me.buttonCategoryOneRename.Size = New System.Drawing.Size(88, 23) + Me.buttonCategoryOneRename.TabIndex = 10 + Me.buttonCategoryOneRename.Text = "Change Name" + Me.buttonCategoryOneRename.UseVisualStyleBackColor = True +' Me.buttonCategoryOneRename.Click += New System.EventHandler(Me.buttonCategoryOneRename_Click) + ' + ' label5 + ' + Me.label5.AutoSize = True + Me.label5.Location = New System.Drawing.Point(8, 79) + Me.label5.Name = "label5" + Me.label5.Size = New System.Drawing.Size(64, 13) + Me.label5.TabIndex = 8 + Me.label5.Text = "User Tasks:" + ' + ' label4 + ' + Me.label4.AutoSize = True + Me.label4.Location = New System.Drawing.Point(8, 50) + Me.label4.Name = "label4" + Me.label4.Size = New System.Drawing.Size(99, 13) + Me.label4.TabIndex = 7 + Me.label4.Text = "Custom Category 2:" + ' + ' label3 + ' + Me.label3.AutoSize = True + Me.label3.Location = New System.Drawing.Point(8, 21) + Me.label3.Name = "label3" + Me.label3.Size = New System.Drawing.Size(99, 13) + Me.label3.TabIndex = 6 + Me.label3.Text = "Custom Category 1:" + ' + ' buttonCategoryTwoAddLink + ' + Me.buttonCategoryTwoAddLink.Location = New System.Drawing.Point(113, 45) + Me.buttonCategoryTwoAddLink.Name = "buttonCategoryTwoAddLink" + Me.buttonCategoryTwoAddLink.Size = New System.Drawing.Size(88, 23) + Me.buttonCategoryTwoAddLink.TabIndex = 4 + Me.buttonCategoryTwoAddLink.Text = "Add Item" + Me.buttonCategoryTwoAddLink.UseVisualStyleBackColor = True +' Me.buttonCategoryTwoAddLink.Click += New System.EventHandler(Me.buttonCategoryTwoAddLink_Click) + ' + ' buttonCategoryOneAddLink + ' + Me.buttonCategoryOneAddLink.Location = New System.Drawing.Point(113, 16) + Me.buttonCategoryOneAddLink.Name = "buttonCategoryOneAddLink" + Me.buttonCategoryOneAddLink.Size = New System.Drawing.Size(88, 23) + Me.buttonCategoryOneAddLink.TabIndex = 3 + Me.buttonCategoryOneAddLink.Text = "Add Item" + Me.buttonCategoryOneAddLink.UseVisualStyleBackColor = True +' Me.buttonCategoryOneAddLink.Click += New System.EventHandler(Me.buttonCategoryOneAddLink_Click) + ' + ' buttonUserTasksAddTasks + ' + Me.buttonUserTasksAddTasks.Location = New System.Drawing.Point(113, 74) + Me.buttonUserTasksAddTasks.Name = "buttonUserTasksAddTasks" + Me.buttonUserTasksAddTasks.Size = New System.Drawing.Size(88, 23) + Me.buttonUserTasksAddTasks.TabIndex = 5 + Me.buttonUserTasksAddTasks.Text = "Add Tasks" + Me.buttonUserTasksAddTasks.UseVisualStyleBackColor = True +' Me.buttonUserTasksAddTasks.Click += New System.EventHandler(Me.buttonUserTasksAddTasks_Click) + ' + ' groupBoxProgressBar + ' + Me.groupBoxProgressBar.Controls.Add(Me.trackBar1) + Me.groupBoxProgressBar.Controls.Add(Me.label8) + Me.groupBoxProgressBar.Controls.Add(Me.label6) + Me.groupBoxProgressBar.Controls.Add(Me.comboBoxProgressBarStates) + Me.groupBoxProgressBar.Controls.Add(Me.progressBar1) + Me.groupBoxProgressBar.Location = New System.Drawing.Point(14, 211) + Me.groupBoxProgressBar.Name = "groupBoxProgressBar" + Me.groupBoxProgressBar.Size = New System.Drawing.Size(305, 144) + Me.groupBoxProgressBar.TabIndex = 10 + Me.groupBoxProgressBar.TabStop = False + Me.groupBoxProgressBar.Text = "Progress Bar" + ' + ' trackBar1 + ' + Me.trackBar1.LargeChange = 25 + Me.trackBar1.Location = New System.Drawing.Point(92, 59) + Me.trackBar1.Maximum = 100 + Me.trackBar1.Name = "trackBar1" + Me.trackBar1.Size = New System.Drawing.Size(203, 45) + Me.trackBar1.SmallChange = 10 + Me.trackBar1.TabIndex = 12 + Me.trackBar1.TickStyle = System.Windows.Forms.TickStyle.None +' Me.trackBar1.Scroll += New System.EventHandler(Me.trackBar1_Scroll) + ' + ' label8 + ' + Me.label8.AutoSize = True + Me.label8.Location = New System.Drawing.Point(6, 71) + Me.label8.Name = "label8" + Me.label8.Size = New System.Drawing.Size(77, 13) + Me.label8.TabIndex = 11 + Me.label8.Text = "Update value: " + ' + ' label6 + ' + Me.label6.AutoSize = True + Me.label6.Location = New System.Drawing.Point(6, 25) + Me.label6.Name = "label6" + Me.label6.Size = New System.Drawing.Size(35, 13) + Me.label6.TabIndex = 3 + Me.label6.Text = "State:" + ' + ' comboBoxProgressBarStates + ' + Me.comboBoxProgressBarStates.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList + Me.comboBoxProgressBarStates.FormattingEnabled = True + Me.comboBoxProgressBarStates.Location = New System.Drawing.Point(47, 22) + Me.comboBoxProgressBarStates.Name = "comboBoxProgressBarStates" + Me.comboBoxProgressBarStates.Size = New System.Drawing.Size(154, 21) + Me.comboBoxProgressBarStates.TabIndex = 2 +' Me.comboBoxProgressBarStates.SelectedIndexChanged += New System.EventHandler(Me.comboBoxProgressBarStates_SelectedIndexChanged) + ' + ' progressBar1 + ' + Me.progressBar1.Location = New System.Drawing.Point(11, 110) + Me.progressBar1.Name = "progressBar1" + Me.progressBar1.Size = New System.Drawing.Size(285, 23) + Me.progressBar1.Step = 5 + Me.progressBar1.TabIndex = 0 + ' + ' buttonRefreshTaskbarList + ' + Me.buttonRefreshTaskbarList.Location = New System.Drawing.Point(100, 456) + Me.buttonRefreshTaskbarList.Name = "buttonRefreshTaskbarList" + Me.buttonRefreshTaskbarList.Size = New System.Drawing.Size(132, 23) + Me.buttonRefreshTaskbarList.TabIndex = 12 + Me.buttonRefreshTaskbarList.Text = "Refresh JumpList" + Me.buttonRefreshTaskbarList.UseVisualStyleBackColor = True +' Me.buttonRefreshTaskbarList.Click += New System.EventHandler(Me.buttonRefreshTaskbarList_Click) + ' + ' TaskbarDemoMainForm + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6F, 13F) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(327, 510) + Me.Controls.Add(Me.buttonRefreshTaskbarList) + Me.Controls.Add(Me.groupBoxKnownCategories) + Me.Controls.Add(Me.groupBoxIconOverlay) + Me.Controls.Add(Me.groupBoxCustomCategories) + Me.Controls.Add(Me.statusStrip1) + Me.Controls.Add(Me.groupBoxProgressBar) + Me.Controls.Add(Me.menuStrip1) + Me.Icon = (CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)) + Me.MainMenuStrip = Me.menuStrip1 + Me.Name = "TaskbarDemoMainForm" + Me.Text = "Taskbar Demo" + Me.menuStrip1.ResumeLayout(False) + Me.menuStrip1.PerformLayout() + Me.groupBoxKnownCategories.ResumeLayout(False) + Me.groupBoxKnownCategories.PerformLayout() + CType(Me.numericUpDownKnownCategoryLocation, System.ComponentModel.ISupportInitialize).EndInit() + Me.groupBoxIconOverlay.ResumeLayout(False) + Me.groupBoxIconOverlay.PerformLayout() + CType(Me.pictureIconOverlay3, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pictureIconOverlay2, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pictureIconOverlay1, System.ComponentModel.ISupportInitialize).EndInit() + Me.groupBoxCustomCategories.ResumeLayout(False) + Me.groupBoxCustomCategories.PerformLayout() + Me.groupBoxProgressBar.ResumeLayout(False) + Me.groupBoxProgressBar.PerformLayout() + CType(Me.trackBar1, System.ComponentModel.ISupportInitialize).EndInit() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + #End Region + + Private menuStrip1 As System.Windows.Forms.MenuStrip + Private fileToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents openToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents saveToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private administrativeToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents registerFileTypeToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents unregisterFileTypeToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private statusStrip1 As System.Windows.Forms.StatusStrip + Private toolStripStatusLabel1 As System.Windows.Forms.ToolStripStatusLabel + Private groupBoxKnownCategories As System.Windows.Forms.GroupBox + Private label2 As System.Windows.Forms.Label + Private label1 As System.Windows.Forms.Label + Private groupBoxIconOverlay As System.Windows.Forms.GroupBox + Private WithEvents labelNoIconOverlay As System.Windows.Forms.Label + Private WithEvents pictureIconOverlay3 As System.Windows.Forms.PictureBox + Private WithEvents pictureIconOverlay2 As System.Windows.Forms.PictureBox + Private label7 As System.Windows.Forms.Label + Private WithEvents pictureIconOverlay1 As System.Windows.Forms.PictureBox + Private groupBoxCustomCategories As System.Windows.Forms.GroupBox + Private WithEvents buttonCategoryOneRename As System.Windows.Forms.Button + Private label5 As System.Windows.Forms.Label + Private label4 As System.Windows.Forms.Label + Private label3 As System.Windows.Forms.Label + Private WithEvents buttonCategoryTwoAddLink As System.Windows.Forms.Button + Private WithEvents buttonCategoryOneAddLink As System.Windows.Forms.Button + Private WithEvents buttonUserTasksAddTasks As System.Windows.Forms.Button + Private groupBoxProgressBar As System.Windows.Forms.GroupBox + Private label6 As System.Windows.Forms.Label + Private WithEvents comboBoxProgressBarStates As System.Windows.Forms.ComboBox + Private progressBar1 As System.Windows.Forms.ProgressBar + Private WithEvents comboBoxKnownCategoryType As System.Windows.Forms.ComboBox + Private fileToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem + Private WithEvents openToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem + Private WithEvents saveToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem + Private administrationToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents registerFileTypeToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem + Private WithEvents unregisterFileTypeToolStripMenuItem1 As System.Windows.Forms.ToolStripMenuItem + Private WithEvents numericUpDownKnownCategoryLocation As System.Windows.Forms.NumericUpDown + Private WithEvents buttonRefreshTaskbarList As System.Windows.Forms.Button + Private WithEvents newToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem + Private WithEvents trackBar1 As System.Windows.Forms.TrackBar + Private label8 As System.Windows.Forms.Label + End Class +End Namespace + diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/TaskbarDemoMainForm.resx b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/TaskbarDemoMainForm.resx new file mode 100644 index 00000000..d2cac9f0 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/TaskbarDemoMainForm.resx @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 132, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + uAAADrgBakH1WwAAADlJREFUWEft0LERADAIAzGPzuYkTAGFiqfFpyTprSo1v9P/rmQAAQIECBAgQIAA + AQIECBC4IzBLtnqFOrrmMht1fQAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + uAAADrgBakH1WwAAADlJREFUWEft0LERADAMAjFG9+bkkiWcQsXXcEqSbjXzttN2JwcIECBAgAABAgQI + ECBAgMAfAvfFZgdzeDyeYQpN+QAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO + uAAADrgBakH1WwAAADlJREFUWEft0MENACAMAkBGd3OrLoGPS0O/kEuSXct63ee1zgACBAgQIECAAAEC + BAgQIPCHwF1RzABFgpxmS0knOAAAAABJRU5ErkJggg== + + + + + AAABAAIAEBAQAAAABAAoAQAAJgAAACAgEAAAAAQA6AIAAE4BAAAoAAAAEAAAACAAAAABAAQAAAAAAIAA + AAAAAAAAAAAAABAAAAAQAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/ + AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAH///////wAAf///////AAB///////8AAH///w// + /wAAf///D///AAB///8P//8AAH///w///wAAf///D///AAB///8P//8AAH///w///wAAf/8AAA//AAB/ + ////8AAAAH/////39wAAf/////dwAAB3d3d3dwAAwAEAAMABAADAAQAAwAEAAMABAADAAQAAwAEAAMAB + AADAAQAAwAEAAMABAADAAQAAwAEAAMADAADABwAAwA8AACgAAAAgAAAAQAAAAAEABAAAAAAAAAIAAAAA + AAAAAAAAEAAAABAAAAAAAAAAAACAAACAAAAAgIAAgAAAAIAAgACAgAAAgICAAMDAwAAAAP8AAP8AAAD/ + /wD/AAAA/wD/AP//AAD///8AAAAAAAAAAAAAAAAAAAAAAAAHiIiIiIiIiIiIiIiIAAAAB/////////// + ////+AAAAAf///////////////gAAAAH///////////////4AAAAB///////////////+AAAAAf///// + //////////gAAAAH//8PAP/wDw8P///4AAAAB///AP8PD/APD///+AAAAAf//w//Dw//Dw////gAAAAH + //8P/w/wAA8P///4AAAAB///AP8PD/8PAP//+AAAAAf//w8A//AA/w8P//gAAAAH//8P///////////4 + AAAAB///D///////////+AAAAAf/8P/wDw/wAP8P8PgAAAAH//D/D/APD/8PDw/4AAAAB//w/w//D//w + /w8P+AAAAAf/8P/wAA/wD/8A//gAAAAH//D/D/8PD/8PDw/4AAAAB//w//AA//AA/w/w+AAAAAf/8P// + //////8P//gAAAAH8AAA////////D//4AAAAB///////////////+AAAAAf///////////////gAAAAH + ////////////cAAAAAAAB////////////3/4cAAAAAf///////////9/hwAAAAAH////////////eHAA + AAAAB////////////3cAAAAAAAf///////////9wAAAAAAAHd3d3d3d3d3d3cAAAAADgAAAH4AAAB+AA + AAfgAAAH4AAAB+AAAAfgAAAH4AAAB+AAAAfgAAAH4AAAB+AAAAfgAAAH4AAAB+AAAAfgAAAH4AAAB+AA + AAfgAAAH4AAAB+AAAAfgAAAH4AAAB+AAAAfgAAAH4AAAB+AAAA/gAAAf4AAAP+AAAH/gAAD/4AAB/w== + + + \ No newline at end of file diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/TaskbarDemoMainForm.vb b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/TaskbarDemoMainForm.vb new file mode 100644 index 00000000..b73f04f2 --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/TaskbarDemoMainForm.vb @@ -0,0 +1,412 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.IO +Imports System.Reflection +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.Shell +Imports Microsoft.WindowsAPICodePack.Taskbar +Imports Microsoft.Win32 +Imports Microsoft.WindowsAPICodePack +Imports System.Diagnostics +Imports Microsoft.WindowsAPICodePack.Dialogs + +Namespace TaskbarDemo + ''' + ''' A word about known/custom categories. In order for an application + ''' to have known/custom categories, a file type must be registered with + ''' that application. This demo provides two menu items that allows you + ''' to register and unregister .txt files with this demo. By default + ''' shell displays the 'Recent' category for an application with a + ''' registered file type. + ''' + ''' An exception will be thrown if you try to add a shell item to + ''' 'Custom Category 1' before registering a file type with this demo + ''' application. + ''' + ''' Also, once a file type has been registered with this demo, setting + ''' jumpList.KnownCategoryToDisplay = KnownCategoryType.Neither will have + ''' no effect until at least one custom category or user task has been + ''' added to the taskbar jump list. + ''' + Partial Public Class TaskbarDemoMainForm + Inherits Form + Private Const appId As String = "TaskbarDemo" + Private Const progId As String = "TaskbarDemo" + + Private category1 As New JumpListCustomCategory("Custom Category 1") + Private category2 As New JumpListCustomCategory("Custom Category 2") + + Private jumpList As JumpList + + Private executableFolder As String + Private ReadOnly executablePath As String + + Private td As TaskDialog = Nothing + + ' Keep a reference to the Taskbar instance + Private windowsTaskbar As TaskbarManager = TaskbarManager.Instance + + Private childCount As Integer = 0 + + #Region "Form Initialize" + + Public Sub New() + InitializeComponent() + + AddHandler Shown, AddressOf TaskbarDemoMainForm_Shown + + ' Set the application specific id + windowsTaskbar.ApplicationId = appId + + ' Save current folder and path of running executable + executablePath = System.Reflection.Assembly.GetEntryAssembly().Location + executableFolder = Path.GetDirectoryName(executablePath) + + ' Sanity check - will avoid throwing exceptions if the file type is not registered. + CheckFileRegistration() + + ' Set our title if we were launched from the Taskbar + Dim args() As String = Environment.GetCommandLineArgs() + + If args.Length > 2 AndAlso args(1) = "/doc" Then + Dim fileName As String = String.Join(" ", args, 2, args.Length - 2) + Me.Text = String.Format("{0} - Taskbar Demo", Path.GetFileName(fileName)) + Else + Me.Text = "Taskbar Demo" + End If + + HighlightOverlaySelection(labelNoIconOverlay) + End Sub + + Private Sub TaskbarDemoMainForm_Shown(ByVal sender As Object, ByVal e As EventArgs) + ' create a new taskbar jump list for the main window + jumpList = JumpList.CreateJumpList() + + ' Add custom categories + jumpList.AddCustomCategories(category1, category2) + + ' Default values for jump lists + comboBoxKnownCategoryType.SelectedItem = "Recent" + + ' Progress Bar + For Each state As String In System.Enum.GetNames(GetType(TaskbarProgressBarState)) + comboBoxProgressBarStates.Items.Add(state) + Next state + + ' + comboBoxProgressBarStates.SelectedItem = "NoProgress" + + ' Update UI + UpdateStatusBar("Application ready...") + + ' Set our default + TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.NoProgress) + End Sub + + Private Sub CheckFileRegistration() + Dim registered As Boolean = False + + Try + Dim openWithKey As RegistryKey = Registry.ClassesRoot.OpenSubKey(Path.Combine(".txt", "OpenWithProgIds")) + Dim value As String = TryCast(openWithKey.GetValue(progId, Nothing), String) + + If value Is Nothing Then + registered = False + Else + registered = True + End If + Finally + ' Let the user know + If Not registered Then + td = New TaskDialog() + + td.Text = "File type is not registered" + td.InstructionText = "This demo application needs to register .txt files as associated files to properly execute the Taskbar related features." + td.Icon = TaskDialogStandardIcon.Information + td.Cancelable = True + + Dim button1 As New TaskDialogCommandLink("registerButton", "Register file type for this application", "Register .txt files with this application to run this demo application correctly.") + + AddHandler button1.Click, AddressOf button1_Click + ' Show UAC shield as this task requires elevation + button1.UseElevationIcon = True + + td.Controls.Add(button1) + + Dim tdr As TaskDialogResult = td.Show() + End If + End Try + End Sub + + Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) + registerFileTypeToolStripMenuItem_Click(Nothing, EventArgs.Empty) + td.Close() + End Sub + + #End Region + + #Region "File Registration Helpers" + + Private Sub registerFileTypeToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles registerFileTypeToolStripMenuItem1.Click, registerFileTypeToolStripMenuItem.Click + RegistrationHelper.RegisterFileAssociations(progId, False, appId, executablePath & " /doc %1", ".txt") + End Sub + + Private Sub unregisterFileTypeToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles unregisterFileTypeToolStripMenuItem1.Click, unregisterFileTypeToolStripMenuItem.Click + RegistrationHelper.UnregisterFileAssociations(progId, False, appId, executablePath & " /doc %1", ".txt") + End Sub + + #End Region + + #Region "Menu Open/Close" + + Private Sub openToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles openToolStripMenuItem1.Click, openToolStripMenuItem.Click + Dim dialog As New CommonOpenFileDialog() + dialog.Title = "Select a text document to load" + dialog.Filters.Add(New CommonFileDialogFilter("Text files (*.txt)", "*.txt")) + + Dim result As CommonFileDialogResult = dialog.ShowDialog() + + If result = CommonFileDialogResult.OK Then + ReportUsage(dialog.FileName) + Process.Start(executablePath, "/doc " & dialog.FileName) + End If + End Sub + + Private Sub saveToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles saveToolStripMenuItem1.Click, saveToolStripMenuItem.Click + Dim dialog As New CommonSaveFileDialog() + dialog.Title = "Select where to save your file" + dialog.Filters.Add(New CommonFileDialogFilter("Text files (*.txt)", "*.txt")) + + Dim result As CommonFileDialogResult = dialog.ShowDialog() + + If result = CommonFileDialogResult.OK Then + ReportUsage(dialog.FileName) + End If + End Sub + + Private Sub ReportUsage(ByVal fileName As String) + ' Report file usage to shell. Note: The dialog box automatically + ' reports usage to shell, but it's still recommeneded that the user + ' explicitly calls AddToRecent. Shell will automatically handle + ' duplicate additions. + jumpList.AddToRecent(fileName) + + UpdateStatusBar("File added to recent documents") + End Sub + + #End Region '; + + #Region "Known Categories" + + Private Sub comboBoxKnownCategoryType_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles comboBoxKnownCategoryType.SelectedIndexChanged + Select Case TryCast(comboBoxKnownCategoryType.SelectedItem, String) + Case "None" + jumpList.KnownCategoryToDisplay = JumpListKnownCategoryType.Neither + Case "Recent" + jumpList.KnownCategoryToDisplay = JumpListKnownCategoryType.Recent + Case "Frequent" + jumpList.KnownCategoryToDisplay = JumpListKnownCategoryType.Frequent + End Select + End Sub + + #End Region + + #Region "Custom Categories" + + Private category1ItemsCount As Integer = 0 + Private category2ItemsCount As Integer = 0 + + Private Sub buttonCategoryOneAddLink_Click(ByVal sender As Object, ByVal e As EventArgs) Handles buttonCategoryOneAddLink.Click + category1ItemsCount += 1 + + ' Specify path for shell item + Dim path As String = String.Format("{0}\test{1}.txt", executableFolder, category1ItemsCount) + + ' Make sure this file exists + EnsureFile(path) + + ' Add shell item to custom category + category1.AddJumpListItems(New JumpListItem(path)) + + ' Update status + UpdateStatusBar(System.IO.Path.GetFileName(path) & " added to 'Custom Category 1'") + End Sub + + Private Sub buttonCategoryTwoAddLink_Click(ByVal sender As Object, ByVal e As EventArgs) Handles buttonCategoryTwoAddLink.Click + category2ItemsCount += 1 + + ' Specify path for file + Dim path As String = String.Format("{0}\test{1}.txt", executableFolder, category2ItemsCount) + + ' Make sure this file exists + EnsureFile(path) + + ' Add jump list item to custom category + category2.AddJumpListItems(New JumpListItem(path)) + + ' Update status + UpdateStatusBar(System.IO.Path.GetFileName(path) & " added to 'Custom Category 2'") + End Sub + + Private Sub EnsureFile(ByVal path As String) + If File.Exists(path) Then + Return + End If + + ' Simply create an empty file with the specified path + Dim fileStream As FileStream = File.Create(path) + fileStream.Close() + End Sub + + Private Sub buttonUserTasksAddTasks_Click(ByVal sender As Object, ByVal e As EventArgs) Handles buttonUserTasksAddTasks.Click + ' Path to Windows system folder + Dim systemFolder As String = Environment.GetFolderPath(Environment.SpecialFolder.System) + + ' Add our user tasks + jumpList.AddUserTasks(New JumpListLink(Path.Combine(systemFolder, "notepad.exe"), "Open Notepad") With {.IconReference = New IconReference(Path.Combine(systemFolder, "notepad.exe"), 0)}) + + jumpList.AddUserTasks(New JumpListLink(Path.Combine(systemFolder, "mspaint.exe"), "Open Paint") With {.IconReference = New IconReference(Path.Combine(systemFolder, "mspaint.exe"), 0)}) + + jumpList.AddUserTasks(New JumpListSeparator()) + + jumpList.AddUserTasks(New JumpListLink(Path.Combine(systemFolder, "calc.exe"), "Open Calculator") With {.IconReference = New IconReference(Path.Combine(systemFolder, "calc.exe"), 0)}) + + ' Update status + UpdateStatusBar("Three user tasks added to jump list") + End Sub + + Private Sub buttonCategoryOneRename_Click(ByVal sender As Object, ByVal e As EventArgs) Handles buttonCategoryOneRename.Click + category1.Name = "Updated Category Name" + End Sub + + #End Region + + #Region "Progress Bar" + + Private Sub trackBar1_Scroll(ByVal sender As Object, ByVal e As EventArgs) Handles trackBar1.Scroll + ' When the user changes the trackBar value, + ' update the progress bar in our UI as well as Taskbar + progressBar1.Value = trackBar1.Value + + TaskbarManager.Instance.SetProgressValue(trackBar1.Value, 100) + End Sub + + + Private Sub comboBoxProgressBarStates_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles comboBoxProgressBarStates.SelectedIndexChanged + ' Update the status of the taskbar progress bar + + Dim state As TaskbarProgressBarState = CType(System.Enum.Parse(GetType(TaskbarProgressBarState), CStr(comboBoxProgressBarStates.SelectedItem)), TaskbarProgressBarState) + + windowsTaskbar.SetProgressState(state) + + ' Update the application progress bar, + ' as well disable the trackbar in some cases + Select Case state + Case TaskbarProgressBarState.Normal + If trackBar1.Value = 0 Then + trackBar1.Value = 20 + progressBar1.Value = trackBar1.Value + End If + + progressBar1.Style = ProgressBarStyle.Continuous + windowsTaskbar.SetProgressValue(trackBar1.Value, 100) + trackBar1.Enabled = True + Case TaskbarProgressBarState.Paused + If trackBar1.Value = 0 Then + trackBar1.Value = 20 + progressBar1.Value = trackBar1.Value + End If + + progressBar1.Style = ProgressBarStyle.Continuous + windowsTaskbar.SetProgressValue(trackBar1.Value, 100) + trackBar1.Enabled = True + Case TaskbarProgressBarState.Error + If trackBar1.Value = 0 Then + trackBar1.Value = 20 + progressBar1.Value = trackBar1.Value + End If + + progressBar1.Style = ProgressBarStyle.Continuous + windowsTaskbar.SetProgressValue(trackBar1.Value, 100) + trackBar1.Enabled = True + Case TaskbarProgressBarState.Indeterminate + progressBar1.Style = ProgressBarStyle.Marquee + progressBar1.MarqueeAnimationSpeed = 30 + trackBar1.Enabled = False + Case TaskbarProgressBarState.NoProgress + progressBar1.Value = 0 + trackBar1.Value = 0 + progressBar1.Style = ProgressBarStyle.Continuous + trackBar1.Enabled = False + End Select + End Sub + + #End Region '; + + #Region "Icon Overlay" + + Private Sub HighlightOverlaySelection(ByVal ctlOverlay As Control) + TaskbarDemoMainForm.CheckOverlaySelection(ctlOverlay, labelNoIconOverlay) + TaskbarDemoMainForm.CheckOverlaySelection(ctlOverlay, pictureIconOverlay1) + TaskbarDemoMainForm.CheckOverlaySelection(ctlOverlay, pictureIconOverlay2) + TaskbarDemoMainForm.CheckOverlaySelection(ctlOverlay, pictureIconOverlay3) + End Sub + + Friend Shared Sub CheckOverlaySelection(ByVal ctlOverlay As Control, ByVal ctlCheck As Label) + ctlCheck.BorderStyle = If(ctlCheck Is ctlOverlay, BorderStyle.Fixed3D, BorderStyle.None) + End Sub + + Friend Shared Sub CheckOverlaySelection(ByVal ctlOverlay As Control, ByVal ctlCheck As PictureBox) + ctlCheck.BorderStyle = If(ctlCheck Is ctlOverlay, BorderStyle.Fixed3D, BorderStyle.None) + End Sub + + Private Sub labelNoIconOverlay_Click(ByVal sender As Object, ByVal e As EventArgs) Handles labelNoIconOverlay.Click + windowsTaskbar.SetOverlayIcon(Me.Handle, Nothing, Nothing) + + HighlightOverlaySelection(labelNoIconOverlay) + End Sub + + Private Sub pictureIconOverlay1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles pictureIconOverlay1.Click + windowsTaskbar.SetOverlayIcon(Me.Handle, My.Resources.Green, "Green") + + HighlightOverlaySelection(pictureIconOverlay1) + End Sub + + Private Sub pictureIconOverlay2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles pictureIconOverlay2.Click + windowsTaskbar.SetOverlayIcon(Me.Handle, My.Resources.Yellow, "Yellow") + + HighlightOverlaySelection(pictureIconOverlay2) + End Sub + + Private Sub pictureIconOverlay3_Click(ByVal sender As Object, ByVal e As EventArgs) Handles pictureIconOverlay3.Click + windowsTaskbar.SetOverlayIcon(Me.Handle, My.Resources.Red, "Red") + + HighlightOverlaySelection(pictureIconOverlay3) + End Sub + + #End Region + + Private Sub UpdateStatusBar(ByVal status As String) + toolStripStatusLabel1.Text = status + End Sub + + Private Sub numericUpDownKnownCategoryLocation_ValueChanged(ByVal sender As Object, ByVal e As EventArgs) Handles numericUpDownKnownCategoryLocation.ValueChanged + jumpList.KnownCategoryOrdinalPosition = Convert.ToInt32(numericUpDownKnownCategoryLocation.Value) + End Sub + + Private Sub buttonRefreshTaskbarList_Click(ByVal sender As Object, ByVal e As EventArgs) Handles buttonRefreshTaskbarList.Click + jumpList.Refresh() + End Sub + + Private Sub newToolStripMenuItem_Click(ByVal sender As Object, ByVal e As EventArgs) Handles newToolStripMenuItem.Click + childCount += 1 + Dim childWindow As New ChildDocument(childCount) + childWindow.Text = String.Format("Child Document Window ({0})", childCount) + childWindow.Show() + End Sub + + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/app.manifest b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/app.manifest new file mode 100644 index 00000000..388cf96b --- /dev/null +++ b/source/Samples/Shell/TaskbarDemo/VB/TaskbarDemo/app.manifest @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/App.xaml b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/App.xaml new file mode 100644 index 00000000..a9fb3992 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/App.xaml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/App.xaml.cs b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/App.xaml.cs new file mode 100644 index 00000000..9adcab85 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/App.xaml.cs @@ -0,0 +1,13 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +namespace Microsoft.WindowsAPICodePack.Samples.ImageViewerDemo +{ + /// + /// Interaction logic for App.xaml + /// + + public partial class App : System.Windows.Application + { + + } +} diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Icons/first.ico b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Icons/first.ico new file mode 100644 index 00000000..23af4d8f Binary files /dev/null and b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Icons/first.ico differ diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Icons/last.ico b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Icons/last.ico new file mode 100644 index 00000000..0410c75b Binary files /dev/null and b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Icons/last.ico differ diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Icons/nextArrow.ico b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Icons/nextArrow.ico new file mode 100644 index 00000000..6203d1a6 Binary files /dev/null and b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Icons/nextArrow.ico differ diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Icons/prevArrow.ico b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Icons/prevArrow.ico new file mode 100644 index 00000000..73ebec75 Binary files /dev/null and b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Icons/prevArrow.ico differ diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Properties/AssemblyInfo.cs b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..8372c9a5 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Properties/AssemblyInfo.cs @@ -0,0 +1,64 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +#region Using directives + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Resources; +using System.Globalization; +using System.Windows; +using System.Runtime.InteropServices; + +#endregion + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ImageViewerDemo")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: ComVisible(false)] + +//In order to begin building localizable applications, set +//CultureYouAreCodingWith in your .csproj file +//inside a . For example, if you are using US english +//in your source files, set the to en-US. Then uncomment +//the NeutralResourceLanguage attribute below. Update the "en-US" in +//the line below to match the UICulture setting in the project file. + +//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +// Specifies the location in which theme dictionaries are stored for types in an assembly. +[assembly: ThemeInfo( + // Specifies the location of system theme-specific resource dictionaries for this project. + // The default setting in this project is "None" since this default project does not + // include these user-defined theme files: + // Themes\Aero.NormalColor.xaml + // Themes\Classic.xaml + // Themes\Luna.Homestead.xaml + // Themes\Luna.Metallic.xaml + // Themes\Luna.NormalColor.xaml + // Themes\Royale.NormalColor.xaml + ResourceDictionaryLocation.None, + + // Specifies the location of the system non-theme specific resource dictionary: + // Themes\generic.xaml + ResourceDictionaryLocation.SourceAssembly)] + + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Properties/Resources.Designer.cs b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Properties/Resources.Designer.cs new file mode 100644 index 00000000..d6b2458f --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Properties/Resources.Designer.cs @@ -0,0 +1,91 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.ImageViewerDemo.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.WindowsAPICodePack.Samples.ImageViewerDemo.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.Drawing.Icon first { + get { + object obj = ResourceManager.GetObject("first", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + internal static System.Drawing.Icon last { + get { + object obj = ResourceManager.GetObject("last", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + internal static System.Drawing.Icon nextArrow { + get { + object obj = ResourceManager.GetObject("nextArrow", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + internal static System.Drawing.Icon prevArrow { + get { + object obj = ResourceManager.GetObject("prevArrow", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + } +} diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Properties/Resources.resx b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Properties/Resources.resx new file mode 100644 index 00000000..30b24fc3 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\icons\first.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\last.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\nextarrow.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\prevarrow.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Properties/Settings.Designer.cs b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Properties/Settings.Designer.cs new file mode 100644 index 00000000..a16ebcca --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.ImageViewerDemo.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Properties/Settings.settings b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Properties/Settings.settings new file mode 100644 index 00000000..40246947 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/ThumbnailToolbarDemoWPF.csproj b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/ThumbnailToolbarDemoWPF.csproj new file mode 100644 index 00000000..6ef838a7 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/ThumbnailToolbarDemoWPF.csproj @@ -0,0 +1,143 @@ + + + + Debug + AnyCPU + {52A6AB4A-F177-4133-93B0-24BE2F350055} + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Microsoft.WindowsAPICodePack.Samples.ImageViewerDemo + ImageViewerDemo + 4 + winexe + 3.0 + true + Web + true + Foreground + 7 + Days + false + false + false + 1.0.0.* + true + true + Publish\ + v3.5 + + + + + 3.5 + + + + + app.manifest + + + true + full + false + .\bin\Debug\ + DEBUG;TRACE + AllRules.ruleset + + + false + true + .\bin\Release\ + TRACE + AllRules.ruleset + + + + + + 3.5 + + + + + + 3.0 + + + 3.0 + + + 3.0 + + + 3.0 + + + + + + + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + MSBuild:Compile + Designer + + + App.xaml + Code + + + + + + ResXFileCodeGenerator + Designer + Resources.Designer.cs + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + True + Resources.resx + + + True + True + Settings.settings + + + Window1.xaml + + + + + + + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + \ No newline at end of file diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/ThumbnailToolbarDemoWPF.sln b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/ThumbnailToolbarDemoWPF.sln new file mode 100644 index 00000000..b7cc188f --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/ThumbnailToolbarDemoWPF.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThumbnailToolbarDemoWPF", "ThumbnailToolbarDemoWPF.csproj", "{52A6AB4A-F177-4133-93B0-24BE2F350055}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {52A6AB4A-F177-4133-93B0-24BE2F350055}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {52A6AB4A-F177-4133-93B0-24BE2F350055}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {52A6AB4A-F177-4133-93B0-24BE2F350055}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {52A6AB4A-F177-4133-93B0-24BE2F350055}.Debug|Any CPU.Build.0 = Debug|Any CPU + {52A6AB4A-F177-4133-93B0-24BE2F350055}.Release|Any CPU.ActiveCfg = Release|Any CPU + {52A6AB4A-F177-4133-93B0-24BE2F350055}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Window1.xaml b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Window1.xaml new file mode 100644 index 00000000..c9435453 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Window1.xaml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Window1.xaml.cs b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Window1.xaml.cs new file mode 100644 index 00000000..646f26d4 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/Window1.xaml.cs @@ -0,0 +1,223 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Windows; +using System.Windows.Interop; +using System.Windows.Media; +using Microsoft.WindowsAPICodePack.Dialogs; +using Microsoft.WindowsAPICodePack.Shell; +using Microsoft.WindowsAPICodePack.Taskbar; + +namespace Microsoft.WindowsAPICodePack.Samples.ImageViewerDemo +{ + /// + /// Interaction logic for Window1.xaml + /// + public partial class Window1 : Window + { + private ThumbnailToolBarButton buttonPrevious; + private ThumbnailToolBarButton buttonNext; + private ThumbnailToolBarButton buttonFirst; + private ThumbnailToolBarButton buttonLast; + private List picturesList; + + public Window1() + { + if (!TaskbarManager.IsPlatformSupported) + { + MessageBox.Show("This demo application interacts with the Windows 7 Taskbar. The current operating system does not support this feature."); + Application.Current.Shutdown(); + } + + InitializeComponent(); + DataContext = this; + + ImageList.SelectionChanged += new System.Windows.Controls.SelectionChangedEventHandler(ImageList_SelectionChanged); + this.Loaded += new RoutedEventHandler(Window1_Loaded); + + // When the LayoutUpdated event is raised, we are sure that the picturebox is rendered + // (i.e. we'll be able to get the height and width of that control) + pictureBox1.LayoutUpdated += new EventHandler(pictureBox1_LayoutUpdated); + } + + void pictureBox1_LayoutUpdated(object sender, EventArgs e) + { + // On LayoutUpdated, get the offset of the pictureBox with repsect to its parent. + // Form a clip rectangle (offset + size of the control) and pass it to Taskbar + // for DWM to clip only the specific porition of the app window. + // This allows us to not include the "misc" controls from the app window - scroll bars, + // list view on the right, any toolbars, etc. + + // Get the offset for picturebox + Vector v = VisualTreeHelper.GetOffset(pictureBox1); + + // Set the thumbnail clip + TaskbarManager.Instance.TabbedThumbnail.SetThumbnailClip((new WindowInteropHelper(this)).Handle, new System.Drawing.Rectangle((int)v.X, (int)v.Y, (int)pictureBox1.RenderSize.Width, (int)pictureBox1.RenderSize.Height)); + } + + void ImageList_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) + { + // Update the button states + if (ImageList.SelectedIndex == 0) + { + buttonFirst.Enabled = false; + buttonPrevious.Enabled = false; + } + else if (ImageList.SelectedIndex > 0) + { + buttonFirst.Enabled = true; + buttonPrevious.Enabled = true; + } + + if (ImageList.SelectedIndex == ImageList.Items.Count - 1) + { + buttonLast.Enabled = false; + buttonNext.Enabled = false; + } + else if (ImageList.SelectedIndex < ImageList.Items.Count - 1) + { + buttonLast.Enabled = true; + buttonNext.Enabled = true; + } + } + + void Window1_Loaded(object sender, RoutedEventArgs e) + { + buttonFirst = new ThumbnailToolBarButton(Properties.Resources.first, "First Image"); + buttonFirst.Enabled = false; + buttonFirst.Click += new EventHandler(buttonFirst_Click); + + buttonPrevious = new ThumbnailToolBarButton(Properties.Resources.prevArrow, "Previous Image"); + buttonPrevious.Enabled = false; + buttonPrevious.Click += new EventHandler(buttonPrevious_Click); + + buttonNext = new ThumbnailToolBarButton(Properties.Resources.nextArrow, "Next Image"); + buttonNext.Click += new EventHandler(buttonNext_Click); + + buttonLast = new ThumbnailToolBarButton(Properties.Resources.last, "Last Image"); + buttonLast.Click += new EventHandler(buttonLast_Click); + + TaskbarManager.Instance.ThumbnailToolBars.AddButtons(new WindowInteropHelper(this).Handle, buttonFirst, buttonPrevious, buttonNext, buttonLast); + + // Set our selection + ImageList.SelectedIndex = 0; + ImageList.Focus(); + + if (ImageList.SelectedItem != null) + ImageList.ScrollIntoView(ImageList.SelectedItem); + } + + void buttonPrevious_Click(object sender, EventArgs e) + { + int newIndex = ImageList.SelectedIndex - 1; + + if (newIndex > -1) + ImageList.SelectedIndex = newIndex; + + ImageList.Focus(); + + if (ImageList.SelectedItem != null) + ImageList.ScrollIntoView(ImageList.SelectedItem); + } + + void buttonNext_Click(object sender, EventArgs e) + { + int newIndex = ImageList.SelectedIndex + 1; + + if (newIndex < ImageList.Items.Count) + ImageList.SelectedIndex = newIndex; + + ImageList.Focus(); + + if (ImageList.SelectedItem != null) + ImageList.ScrollIntoView(ImageList.SelectedItem); + } + + void buttonFirst_Click(object sender, EventArgs e) + { + ImageList.SelectedIndex = 0; + ImageList.Focus(); + + if (ImageList.SelectedItem != null) + ImageList.ScrollIntoView(ImageList.SelectedItem); + } + + void buttonLast_Click(object sender, EventArgs e) + { + ImageList.SelectedIndex = ImageList.Items.Count - 1; + ImageList.Focus(); + + if (ImageList.SelectedItem != null) + ImageList.ScrollIntoView(ImageList.SelectedItem); + } + + public class MyImage + { + public MyImage(ImageSource sourceImage, string imageName) + { + Image = sourceImage; + Name = imageName; + } + + public override string ToString() + { + return Name; + } + + public ImageSource Image { get; set; } + public string Name { get; set; } + } + + public List AllImages + { + get + { + ShellContainer pics = (ShellContainer)KnownFolders.Pictures; + + if (ShellLibrary.IsPlatformSupported) + pics = (ShellContainer)KnownFolders.PicturesLibrary; + + if (picturesList == null) + picturesList = new List(); + else + picturesList.Clear(); + + // Recursively get the pictures + GetPictures(pics); + + if (picturesList.Count == 0) + { + if (pics is ShellLibrary) + TaskDialog.Show("Pictures library is empty", "Please add some pictures to the library", "No pictures found"); + else + TaskDialog.Show("Pictures folder is empty", "Please add some pictures to your pictures folder", "No pictures found"); + } + + return picturesList; + } + } + + private void GetPictures(ShellContainer folder) + { + // Just for demo purposes, stop at 20 pics + if (picturesList.Count >= 20) + return; + + // First get the pictures in this folder + foreach (ShellFile sf in folder.OfType()) + { + string ext = Path.GetExtension(sf.Path).ToLower(); + + if (ext == ".jpg" || ext == ".jpeg" || ext == ".png" || ext == ".bmp") + picturesList.Add(sf); + } + + // Then recurse into each subfolder + foreach (ShellContainer subFolder in folder.OfType()) + GetPictures(subFolder); + } + } +} \ No newline at end of file diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/app.manifest b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/app.manifest new file mode 100644 index 00000000..4ddad9b4 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/WPF/app.manifest @@ -0,0 +1,18 @@ + + + + Image Viewer Demo Application + + + + + + + diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Form1.Designer.cs b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Form1.Designer.cs new file mode 100644 index 00000000..655ff544 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Form1.Designer.cs @@ -0,0 +1,168 @@ +namespace Microsoft.WindowsAPICodePack.Samples.ImageViewerDemoWinforms +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.listView1 = new System.Windows.Forms.ListView(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.toolStripButtonFirst = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonPrevious = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonNext = new System.Windows.Forms.ToolStripButton(); + this.toolStripButtonLast = new System.Windows.Forms.ToolStripButton(); + this.imageList1 = new System.Windows.Forms.ImageList(this.components); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.toolStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // listView1 + // + this.listView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listView1.Location = new System.Drawing.Point(0, 42); + this.listView1.Name = "listView1"; + this.listView1.Size = new System.Drawing.Size(165, 520); + this.listView1.TabIndex = 0; + this.listView1.UseCompatibleStateImageBehavior = false; + // + // pictureBox1 + // + this.pictureBox1.Dock = System.Windows.Forms.DockStyle.Right; + this.pictureBox1.Location = new System.Drawing.Point(165, 0); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(619, 562); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox1.TabIndex = 1; + this.pictureBox1.TabStop = false; + this.pictureBox1.SizeChanged += new System.EventHandler(this.pictureBox1_SizeChanged); + // + // toolStrip1 + // + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripButtonFirst, + this.toolStripButtonPrevious, + this.toolStripButtonNext, + this.toolStripButtonLast}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(165, 25); + this.toolStrip1.TabIndex = 2; + this.toolStrip1.Text = "toolStrip1"; + // + // toolStripButtonFirst + // + this.toolStripButtonFirst.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonFirst.Enabled = false; + this.toolStripButtonFirst.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButtonFirst.Image"))); + this.toolStripButtonFirst.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButtonFirst.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonFirst.Name = "toolStripButtonFirst"; + this.toolStripButtonFirst.Size = new System.Drawing.Size(23, 22); + this.toolStripButtonFirst.Text = "First Image"; + this.toolStripButtonFirst.Click += new System.EventHandler(this.buttonFirst_Click); + // + // toolStripButtonPrevious + // + this.toolStripButtonPrevious.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonPrevious.Enabled = false; + this.toolStripButtonPrevious.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButtonPrevious.Image"))); + this.toolStripButtonPrevious.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButtonPrevious.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonPrevious.Name = "toolStripButtonPrevious"; + this.toolStripButtonPrevious.Size = new System.Drawing.Size(23, 22); + this.toolStripButtonPrevious.Text = "Previous Image"; + this.toolStripButtonPrevious.Click += new System.EventHandler(this.buttonPrevious_Click); + // + // toolStripButtonNext + // + this.toolStripButtonNext.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonNext.Enabled = false; + this.toolStripButtonNext.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButtonNext.Image"))); + this.toolStripButtonNext.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButtonNext.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonNext.Name = "toolStripButtonNext"; + this.toolStripButtonNext.Size = new System.Drawing.Size(23, 22); + this.toolStripButtonNext.Text = "Next Image"; + this.toolStripButtonNext.Click += new System.EventHandler(this.buttonNext_Click); + // + // toolStripButtonLast + // + this.toolStripButtonLast.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButtonLast.Enabled = false; + this.toolStripButtonLast.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButtonLast.Image"))); + this.toolStripButtonLast.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButtonLast.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButtonLast.Name = "toolStripButtonLast"; + this.toolStripButtonLast.Size = new System.Drawing.Size(23, 22); + this.toolStripButtonLast.Text = "Last Image"; + this.toolStripButtonLast.Click += new System.EventHandler(this.buttonLast_Click); + // + // imageList1 + // + this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream"))); + this.imageList1.TransparentColor = System.Drawing.Color.Transparent; + this.imageList1.Images.SetKeyName(0, "first.ico"); + this.imageList1.Images.SetKeyName(1, "prevArrow.ico"); + this.imageList1.Images.SetKeyName(2, "nextArrow.ico"); + this.imageList1.Images.SetKeyName(3, "last.ico"); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(784, 562); + this.Controls.Add(this.listView1); + this.Controls.Add(this.toolStrip1); + this.Controls.Add(this.pictureBox1); + this.Name = "Form1"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Image Viewer Winforms Demo (with Taskbar Thumbnail toolbar)"; + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ListView listView1; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripButton toolStripButtonFirst; + private System.Windows.Forms.ToolStripButton toolStripButtonPrevious; + private System.Windows.Forms.ToolStripButton toolStripButtonNext; + private System.Windows.Forms.ToolStripButton toolStripButtonLast; + private System.Windows.Forms.ImageList imageList1; + } +} + diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Form1.cs b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Form1.cs new file mode 100644 index 00000000..d8912fcb --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Form1.cs @@ -0,0 +1,215 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.Shell; +using Microsoft.WindowsAPICodePack.Taskbar; +using Microsoft.WindowsAPICodePack.Dialogs; + +namespace Microsoft.WindowsAPICodePack.Samples.ImageViewerDemoWinforms +{ + public partial class Form1 : Form + { + private ThumbnailToolBarButton buttonPrevious; + private ThumbnailToolBarButton buttonNext; + private ThumbnailToolBarButton buttonFirst; + private ThumbnailToolBarButton buttonLast; + private List picturesList; + private int imgListCount = 0; + private ImageList imgList = null; + + public Form1() + { + InitializeComponent(); + listView1.MultiSelect = false; + + InitListView(); + + this.Shown += new System.EventHandler(Form1_Shown); + + // + toolStrip1.ImageList = imageList1; + toolStrip1.ImageScalingSize = new Size(32, 32); + toolStripButtonFirst.ImageIndex = 0; + toolStripButtonPrevious.ImageIndex = 1; + toolStripButtonNext.ImageIndex = 2; + toolStripButtonLast.ImageIndex = 3; + + } + + void Form1_Shown(object sender, System.EventArgs e) + { + listView1.SelectedIndexChanged += new System.EventHandler(listView1_SelectedIndexChanged); + + buttonFirst = new ThumbnailToolBarButton(Properties.Resources.first, "First Image"); + buttonFirst.Enabled = false; + buttonFirst.Click += new EventHandler(buttonFirst_Click); + + buttonPrevious = new ThumbnailToolBarButton(Properties.Resources.prevArrow, "Previous Image"); + buttonPrevious.Enabled = false; + buttonPrevious.Click += new EventHandler(buttonPrevious_Click); + + buttonNext = new ThumbnailToolBarButton(Properties.Resources.nextArrow, "Next Image"); + buttonNext.Click += new EventHandler(buttonNext_Click); + + buttonLast = new ThumbnailToolBarButton(Properties.Resources.last, "Last Image"); + buttonLast.Click += new EventHandler(buttonLast_Click); + + TaskbarManager.Instance.ThumbnailToolBars.AddButtons(this.Handle, buttonFirst, buttonPrevious, buttonNext, buttonLast); + + if (listView1.Items.Count > 0) + listView1.Items[0].Selected = true; + + // + TaskbarManager.Instance.TabbedThumbnail.SetThumbnailClip(this.Handle, new Rectangle(pictureBox1.Location, pictureBox1.Size)); + } + + void buttonPrevious_Click(object sender, EventArgs e) + { + int newIndex = listView1.SelectedIndices[0] - 1; + + if (newIndex > -1) + { + listView1.Items[newIndex].Selected = true; + listView1.Items[newIndex].EnsureVisible(); + } + + listView1.Focus(); + } + + void buttonNext_Click(object sender, EventArgs e) + { + int newIndex = listView1.SelectedIndices[0] + 1; + + if (newIndex < listView1.Items.Count) + { + listView1.Items[newIndex].Selected = true; + listView1.Items[newIndex].EnsureVisible(); + } + + listView1.Focus(); + } + + void buttonFirst_Click(object sender, EventArgs e) + { + listView1.Items[0].Selected = true; + listView1.Items[0].EnsureVisible(); + listView1.Focus(); + } + + void buttonLast_Click(object sender, EventArgs e) + { + listView1.Items[listView1.Items.Count - 1].Selected = true; + listView1.Items[listView1.Items.Count - 1].EnsureVisible(); + listView1.Focus(); + } + + void listView1_SelectedIndexChanged(object sender, System.EventArgs e) + { + // Update the picture + if (listView1.SelectedItems.Count > 0) + pictureBox1.Image = Image.FromFile(((ListViewItem)listView1.SelectedItems[0]).Tag.ToString()); + + // Update the button states + if (listView1.SelectedIndices.Count > 0 && listView1.SelectedIndices[0] == 0) + { + buttonFirst.Enabled = false; + toolStripButtonFirst.Enabled = false; + buttonPrevious.Enabled = false; + toolStripButtonPrevious.Enabled = false; + } + else if (listView1.SelectedIndices.Count > 0 && listView1.SelectedIndices[0] > 0) + { + buttonFirst.Enabled = true; + toolStripButtonFirst.Enabled = true; + buttonPrevious.Enabled = true; + toolStripButtonPrevious.Enabled = true; + } + + if (listView1.SelectedIndices.Count > 0 && listView1.SelectedIndices[0] == listView1.Items.Count - 1) + { + buttonLast.Enabled = false; + toolStripButtonLast.Enabled = false; + buttonNext.Enabled = false; + toolStripButtonNext.Enabled = false; + } + else if (listView1.SelectedIndices.Count > 0 && listView1.SelectedIndices[0] < listView1.Items.Count - 1) + { + buttonLast.Enabled = true; + toolStripButtonLast.Enabled = true; + buttonNext.Enabled = true; + toolStripButtonNext.Enabled = true; + } + } + + private void InitListView() + { + imgList = new ImageList(); + imgList.ImageSize = new Size(96, 96); + imgList.ColorDepth = ColorDepth.Depth32Bit; + + listView1.LargeImageList = imgList; + + ShellContainer pics = (ShellContainer)KnownFolders.Pictures; + + if (ShellLibrary.IsPlatformSupported) + pics = (ShellContainer)KnownFolders.PicturesLibrary; + + if (picturesList == null) + picturesList = new List(); + else + picturesList.Clear(); + + // Recursively get the pictures + GetPictures(pics); + + if (picturesList.Count == 0) + { + if (pics is ShellLibrary) + TaskDialog.Show("Please add some pictures to the library", "Pictures library is empty", "No pictures found"); + else + TaskDialog.Show("Please add some pictures to your pictures folder", "Pictures folder is empty", "No pictures found"); + } + + listView1.Items.AddRange(picturesList.ToArray()); + } + + private void GetPictures(ShellContainer folder) + { + // Just for demo purposes, stop at 20 pics + if (picturesList.Count >= 20) + return; + + // First get the pictures in this folder + foreach (ShellFile sf in folder.OfType()) + { + string ext = Path.GetExtension(sf.Path).ToLower(); + + if (ext == ".jpg" || ext == ".jpeg" || ext == ".png" || ext == ".bmp") + { + ListViewItem item = new ListViewItem(); + item.Text = sf.Name; + item.ImageIndex = imgListCount; + item.Tag = sf.Path; + imgList.Images.Add(Image.FromFile(sf.Path)); + + picturesList.Add(item); + imgListCount++; + } + } + + // Then recurse into each subfolder + foreach (ShellContainer subFolder in folder.OfType()) + GetPictures(subFolder); + } + + private void pictureBox1_SizeChanged(object sender, EventArgs e) + { + TaskbarManager.Instance.TabbedThumbnail.SetThumbnailClip(this.Handle, new Rectangle(pictureBox1.Location, pictureBox1.Size)); + } + } +} diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Form1.resx b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Form1.resx new file mode 100644 index 00000000..28f59375 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Form1.resx @@ -0,0 +1,505 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + 122, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACu + SAAAAk1TRnQBSQFMAgEBBAEAASABAAEgAQABIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA + AwABQAMAAQEBAAEgBgABgP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A + /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A + /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8ApgACRwFGAYAkAAHtATwBAwH//wAFAAHtATEBAQH/JAACRwFG + AYCcAAHrAY4BEQH/Ae0BRAETAf8B6wFuAQ0B/xwAAesBmAETAf8B8gGJAWAB/wHrAWIBCgH//wABAAHr + AZsBFAH/AesBWAEIAf8B8gGQAWEB/wGOAXMBQwHfHAAB6wFkAQsB/wHzAYoBYgH/AXoBaAFPAc+QAAHq + AZgBEwH/AeoBYQEKAf8B6gFBAQQB/wHqAZcBEwH/GAAB6QGXARMB/wHpAW0BDAH/AekBNAECAf8B6QGK + ARAB/ygAAwEBAgMgAS4DQgFzA1gBqgNxAc0DfgHZA4IB2gNrAccDVQGgAzsBZQMWAR4DAgEDUAADAQEC + AyABLgNCAXMDWAGqA3EBzQN+AdkDggHaA2sBxwNVAaADOwFlAxYBHgMCAQMoAAHpAZgBEwH/AekBgAEP + Af8B6wFAARkB/wHpAXcBDgH/AekBlwETAf8YAAHqAY0BEQH/AeoBNwECAf8B6gFrAQwB/wHqAZgBEwH/ + iAAB6AGXARMB/wHsAaQBQAH/AfgBvgGtAf8B7AGCATQB/wHoAZcBEwH/EAADDAEQAegBlgESAf8B6wGj + ATYB/wH4AccBswH/AfEBmwFnAf8B6AGWARIB/xsAAQEDBAEGAwsBDwM4AV4DbAHNA+AB/wP0Af8D/gH/ + Av4B/AH/Av4B+wH/Av4B+wH/Av4B/QH/A/0B/wPwAf8DzQH8A1wBtgMtAUUDCwEPAwQBBgMBAQIzAAEB + AwQBBgMLAQ8DOAFeA2wBzQPgAf8D9AH/A/4B/wL+AfwB/wL+AfsB/wL+AfsB/wL+Af0B/wP9Af8D7wH/ + A8wB/ANcAbYDLQFFAwsBDwMEAQYDAQECGAAB6AGWARIB/wHoAZYBEgH/AfMBoQF4Af8B9gG+AaMB/wHp + AZgBGgH/AegBlgESAf8UAAHoAZcBEwH/Ae0BhAFDAf8B9gG1AZ0B/wHrAaQBNQH/AegBlwETAf98AAHn + AZQBEgH/AecBlAESAf8B5wGTARIB/wHtAcIBdwH/AfQB2QGuAf8B8AHEAYYB/wHnAZQBEgH/DAAB5gGU + ARIB/wHmAZQBEgH/AeYBlAESAf8B6gG6AWUB/wHvAcgBigH/AfIB0AGeAf8B5gGUARIB/xAAAwEBAgMH + AQkDDgETAyYBOQNnAcgD5gH/Af4C/QH/AeIB6wH0Af8BkQGsAd8B/wFOAYAB0wH/ASUBZAHQAf8BDQFZ + Ac8B/wERAVoBzwH/ASoBaAHRAf8BWwGHAdQB/wGhAboB4wH/Ae8B9QH3Af8D+wH/A9cB/gNWAagDHQEp + Aw8BFAMHAQoDAgEDIAADAQECAwcBCQMOARMDJgE5A2cByAPmAf8C/gH9Af8B4gHrAfQB/wGRAawB3wH/ + AU4BgAHTAf8BJQFkAdAB/wENAVkBzwH/AREBWgHPAf8BKgFoAdEB/wFbAYcB0wH/AaABuQHjAf8B7wH1 + AfcB/wP7Af8D1wH+A1UBqAMdASkDDwEUAwcBCgMCAQMQAAHmAZQBEgH/AeYBlAESAf8B6wG0AWMB/wHv + AccBhwH/AfMB1wGnAf8B5gGUARIB/wHmAZQBEgH/AeYBlAESAf8MAAHnAZQBEgH/AfMB1AGnAf8B9AHZ + Aa4B/wHzAdcBpwH/AecBkwESAf8B5wGUARIB/wGvAX8BMgHvcAAB5QGSARIB/wHlAZIBEgH/AeUBkgES + Af8B5gGsAUoB/wHkAaIBOQH/AeEBmAEoAf8B6wGxAVwB/wHlAZIBEgH/CAAB5QGSARIB/wHlAZIBEgH/ + AeUBkgESAf8B5gGrAUgB/wHkAaEBOAH/AeIBlwEnAf8B7AG7AXQB/wHlAZIBEgH/CwABAQMEAQYDCwEP + AxMBGgM4AVwDowHwA/kB/wHgAeoB8wH/AVYBhwHVAf8BAAFLAdEB/wEAAUsB0wH/AQABTQHUAf8BAAFP + AdQB/wEAAVEB1AH/AQABUQHUAf8BAAFOAdMB/wEAAUwB1AH/AQABSgHSAf8BCwFSAdAB/wF2AZwB2QH/ + AfEB9gH4Af8D8gH/A30B3AMoATwDFAEbAwwBEAMFAQcDAAEBEwABAQMEAQYDCwEPAxMBGgM4AVwDowHw + AvkB+AH/AeAB6gH0Af8BVgGHAdYB/wEAAUsB0QH/AQABTAHTAf8BAAFNAdQB/wEAAU8B1AH/AQABUQHU + Af8BAAFRAdQB/wEAAU4B0wH/AQABSwHTAf8BAAFJAdEB/wELAVIBzwH/AXYBnAHZAf8B8QH2AfgB/wPy + Af8DfQHcAygBPAMUARsDDAEQAwUBBwMAAQEIAAHlAZIBEgH/AeUBkgESAf8B3wGNARgB/wHiAZgBKgH/ + AeQBowE6Af8B5gGsAUsB/wHlAZIBEgH/AeUBkgESAf8B5QGSARIB/wgAAeUBkgESAf8B7QG8AXYB/wHi + AZkBKgH/AeQBowE7Af8B5gGuAUwB/wHlAZIBEgH/AeUBkgESAf8B5QGSARIB/2QAAxcBIAHjAY8BEQH/ + AeMBjwERAf8B8wHcAbMB/wHkAacBRAH/AeEBnQEzAf8B4AGSASIB/wHdAYcBEQH/AegBrAFYAf8B4wGP + AREB/wMeASsB4wGPAREB/wHjAY8BEQH/AfQB3AGzAf8B5AGnAUMB/wHiAZ0BMQH/Ad8BkQEhAf8B3gGJ + ARQB/wHrAbgBcgH/AeMBjwERAf8HAAEBAwUBBwMNAREDFAEbAzgBXgO+AfgC/QH8Af8BnwG7AeQB/wEH + AVEB0QH/AQABTQHVAf8BAAFTAdcB/wEAAWgB5QH/AQABcwHtAf8BAAF0AfAB/wEAAXQB8QH/AQABdAHw + Af8BAAF0Ae8B/wEAAXEB7AH/AQABYwHhAf8BAAFPAdMB/wEAAU0B1AH/ARwBXAHQAf8BxgHXAewB/wL5 + AfgB/wOLAeYDKQE+AxQBHAMNARIDBgEIAwEBAgsAAQEDBQEHAw0BEQMUARsDOAFeA74B+AP9Af8BoAG8 + AeUB/wEIAVEB0gH/AQABTgHWAf8BAAFTAdcB/wEAAWgB5gH/AQABcwHuAf8BAAF0AfAB/wEAAXQB8QH/ + AQABdAHwAf8BAAF0Ae8B/wEAAXEB6wH/AQABYwHgAf8BAAFPAdIB/wEAAU0B1AH/ARwBXAHPAf8BxgHW + AesB/wL5AfgB/wOLAeYDKQE+AxQBHAMNARIDBgEIAwEBAgQAAeMBjwERAf8B4wGPAREB/wHdAYgBFAH/ + Ad4BiQEVAf8B4AGTASMB/wHiAZ4BNAH/AeQBqAFFAf8B8AHLAZAB/wHjAY8BEQH/AeMBjwERAf8EAAHj + AY8BEQH/AeoBtgFwAf8B3QGIARMB/wHgAZQBJAH/AeIBngE2Af8B5AGpAUcB/wHtAb4BcwH/AeMBjwER + Af8B4wGPAREB/1wAAeIBjQERAf8B4gGNAREB/wHiAY0BEQH/AeUBsAFVAf8B4wGjAT4B/wHgAZgBLQH/ + Ad0BjQEdAf8B2wGEAQ8B/wHbAYIBDwH/AecBqgFYAf8B4QGNARAB/wGSAXIBPgHkAeEBjQEQAf8B5AGt + AU8B/wHiAaIBPQH/Ad8BlwEsAf8B3gGMARwB/wHcAYYBEwH/AdsBhQETAf8B6AG0AW8B/wHhAY0BEAH/ + BAADBAEFAwsBDwMTARoDLAFDA68B9AL9AfwB/wGEAaYB3wH/AQABTwHXAf8BAAFQAdYB/wEAAWkB6AH/ + AQABdQHzAf8BAAF3AfgB/wEAAXkB+wH/AQABewH9Af8BAAF7Af0B/wEAAXsB/QH/AQABegH8Af8BAAF4 + AfoB/wEAAXYB9gH/AQABdAHxAf8BAAFiAeIB/wEAAU8B1QH/AQQBUQHSAf8BsgHJAegB/wP3Af8DewHb + Ax4BKwMUARsDDAEQAwQBBgMAAQEEAAMEAQUDCwEPAxMBGgMsAUMDrwH0Av0B/AH/AYQBpgHfAf8BAAFQ + AdgB/wEAAVAB1wH/AQABagHpAf8BAAF2AfQB/wEAAXgB+QH/AQABegH8Af8BAAF7Af0B/wEAAYAB/QH/ + AQABewH9Af8BAAF6AfwB/wEAAXgB+QH/AQABdgH1Af8BAAF0AfAB/wEAAWIB4QH/AQABTwHUAf8BBAFR + AdEB/wGyAckB5wH/A/cB/wN7AdsDHgErAxQBGwMMARADBAEGAwABAQHhAY0BEAH/AeEBjQEQAf8B2QGB + AQ8B/wHbAYUBEwH/AdwBhgETAf8B3gGNAR4B/wHgAZgBLgH/AeIBowFAAf8B7AHEAYQB/wHhAY0BEAH/ + AYkBbAFEAd4B4QGNARAB/wHpAbQBbwH/AdsBggEPAf8B2wGEAQ8B/wHeAY4BHwH/AeABmQEvAf8B4wGk + AUEB/wHtAcsBkAH/AeIBjQERAf8B4gGNAREB/wHiAY0BEQH/UAAB4AGLARAB/wHgAYsBEAH/AeABiwEQ + Af8B4gGoAUoB/wHgAZ0BOQH/Ad4BkgEnAf8B2wGHARYB/wHZAYEBDwH/AdkBgAEPAf8B2AF7AQ8B/wHj + AZgBMgH/AeABigEQAf8BkgFwAT4B5AHiAagBSAH/AeABnQE4Af8B3gGSASYB/wHbAYcBFgH/AdoBhAET + Af8B2gGDARMB/wHYAXsBDgH/AecBsgFuAf8B4AGKARAB/wMBAQIDBwEJAw8BFAMYASIDdAHUA/gB/wGY + AbcB5AH/AQABUQHZAf8BAAFUAdkB/wEAAXMB8AH/AQABeAH5Af8BAAF7Af0B/wEAAYMB/gH/AQABhQL/ + AQABhwL/AQABiAL/AQABiAL/AQABhgL/AQABhAH+Af8BAAGBAf4B/wEAAXoB+wH/AQABdgH1Af8BAAFt + AesB/wEAAVAB1gH/AQUBUwHUAf8ByQHYAe0B/wPvAf8DVAGlAxYBHwMQARUDBwEJAwEBAgMBAQIDBwEJ + Aw8BFAMYASIDdQHUA/gB/wGYAbcB5QH/AQABUgHaAf8BAAFUAdoB/wEAAXMB8gH/AQABeAH6Af8BAAGA + Af0B/wEAAYMB/gH/AQABhgL/AQABhwL/AQABiAL/AQABhwL/AQABhgL/AQABhAL/AQABgQH+Af8BAAF5 + AfsB/wEAAXYB9AH/AQABbQHqAf8BAAFQAdUB/wEFAVMB0wH/AcgB2AHsAf8D7wH/A1QBpQMWAR8DEAEV + AwcBCQMBAQIB4AGKARAB/wHgAYoBEAH/AdcBeQEOAf8B2AF7AQ4B/wHaAYMBEwH/AdoBhAETAf8B2wGI + ARgB/wHeAZMBKQH/AeEBngE6Af8B4gGpAUsB/wGJAWwBRAHeAeABigEQAf8B5AGeAT4B/wHYAXsBDwH/ + AdkBgAEPAf8B2gGBAQ8B/wHcAYgBGAH/Ad4BlAEpAf8B4QGfATsB/wHjAaoBTQH/AeABiwEQAf8B4AGL + ARAB/wHgAYsBEAH/RAADMgFQAd4BiAEPAf8B3gGIAQ8B/wHzAdwBtwH/AeEBowFEAf8B3gGYATMB/wHb + AY0BIgH/AdkBgQERAf8B2AF7AQ8B/wHXAXkBDgH/AdcBegEOAf8B2QGAAQ8B/wHhAZYBMQH/AewBwgGG + Af8BkgF6AVMB5AHeAZcBMgH/AdsBjAEhAf8B2QGCARQB/wHZAYEBEgH/AdcBeQEOAf8B1gF4AQ4B/wHV + AXcBDgH/AeYBsAFtAf8B3gGIAQ8B/wMBAQIDBwEKAxABFgNEAXoD5wH/AdQB4gHxAf8BAwFVAdcB/wEA + AVUB2wH/AQABdQHzAf8BAAF7AfwB/wEAAYQB/gH/AQABiAL/AQABjAL/AQIBkAL/AUsBsgL/AQABkQL/ + AQABkgL/AQABkAL/AQABjgL/AQABigL/AQABhgL/AQABggH+Af8BAAF5AfgB/wEAAW4B7AH/AQABUwHY + Af8BHwFjAdUB/wHzAfcB+AH/A8wB/AMvAUoDEQEXAwcBCgMBAQIDAQECAwcBCgMQARYDRAF6A+gB/wHV + AeIB8gH/AQMBVgHZAf8BAAFVAdwB/wEAAXYB9AH/AQABgAH9Af8BAAGFAv8BAAGJAv8BAAGNAv8BAAGQ + Av8BAAGSAv8BAAGSAv8BAAGSAv8BMAGnAv8BHgGaAv8BAAGKAv8BAAGFAv8BAAGBAf4B/wEAAXgB9wH/ + AQABbgHrAf8BAAFSAdgB/wEfAWIB1AH/AfIB9gH3Af8DywH8Ay8BSgMRARcDBwEKAwEBAgHeAYgBDwH/ + Ad4BiAEPAf8B1QF2AQ0B/wHWAXcBDgH/AdYBeAEOAf8B1wF6AQ8B/wHZAYIBEgH/AdoBgwEUAf8B3AGO + ASMB/wHeAZkBNAH/AYkBdwFVAd4B7AHAAYIB/wHiAZwBPgH/AdkBgAEPAf8B1gF4AQ4B/wHXAXoBDwH/ + AdgBewEPAf8B2gGDARMB/wHcAY4BJAH/Ad4BmgE1Af8B4QGlAUYB/wHyAdcBrQH/Ad4BiAEPAf8B3gGI + AQ8B/zwAAd0BhgEPAf8B3QGGAQ8B/wHdAYYBDwH/AeEBqgFQAf8B3wGeAT8B/wHcAZMBLgH/AdoBiAEc + Af8B1wF6AQ8B/wHWAXkBDwH/AdYBdwEOAf8B1gF3AQ0B/wHWAXgBDgH/AdYBeQEOAf8B4gGmAVIB/wHe + AZcBMAH/AZIBdAFLAeQB2gGHARsB/wHYAYABEgH/AdcBewESAf8B1QF3AQ4B/wHVAXUBDQH/AdQBdAEN + Af8B0wFzAQ0B/wHkAa4BbQH/AdwBhQEPAf8DAQECAwcBCQMSARkDiQHjAvwB+wH/AUMBgQHcAf8BAAFV + Ad4B/wEAAXEB8AH/AQABggH9Af8BAAGHAv8BAAGNAv8BAAGTAv8BAgGXAv8BtAHfAv8B/gP/AWUByAL/ + AQABngL/AQABnQL/AQABmQL/AQABlQL/AQABkAL/AQABigL/AQABhQH+Af8BAAF7AfoB/wEAAWYB5wH/ + AQABVAHbAf8BgQGmAeAB/wP0Af8DWgG0AxABFgMHAQoDAQECAwEBAgMHAQkDEgEZA4kB4wL8AfsB/wFD + AYEB3QH/AQABVQHeAf8BAAFyAfIB/wEAAYMB/gH/AQABiAL/AQABjgL/AQABkwL/AQABmAL/AQABnAL/ + AQABngL/AQABnwL/ATEBswL/Ae8B+gL/AeAB8wL/AR0BnwL/AQABjwL/AQABigL/AQABhAH+Af8BAAF7 + AfgB/wEAAWYB5gH/AQABVAHaAf8BgQGlAd8B/wP0Af8DWgG0AxABFgMHAQoDAQECAdwBhQEPAf8B3AGF + AQ8B/wHSAXIBDQH/AdMBcwENAf8B1AF0AQ0B/wHVAXUBDQH/AdUBdwEOAf8B1wF7ARIB/wHYAYABEgH/ + AdoBiAEdAf8BiQFyAU4C3gGXATAB/wHkAa0BYgH/AdYBeQEOAf8B1gF3AQ4B/wHWAXcBDQH/AdYBdwEO + Af8B1gF5AQ8B/wHXAXoBDwH/AdoBiQEeAf8B3QGVAS8B/wHfAaABQQH/AeQBtAFkAf8B3QGGAQ8B/wHd + AYYBDwH/Ad0BhgEPAf8wAAHbAYQBDwH/AdsBhAEPAf8B3wGSASkB/wHfAaUBSgH/Ad0BmQE5Af8B2gGO + AScB/wHXAYIBFgH/AdUBeAEPAf8B1QF2AQ4B/wHUAXQBDQH/AdMBcwENAf8B0wFzAQ0B/wHWAXoBFwH/ + AdYBhgEiAf8B3wGdAUYB/wHaAYoBHwH/AZABawFCAeQB1gF6ARIB/wHWAXgBEQH/AdQBdAENAf8B0wFz + AQ0B/wHSAXIBDQH/AdIBcQEMAf8B0QFwAQwB/wHjAawBbQH/AdsBgwEPAf8DAAEBAwQBBgM0AVQD5AH/ + AcwB3QHwAf8BAAFVAd0B/wEAAWAB5QH/AQABgQH9Af8BAAGGAv8BAAGNAv8BAAGTAv8BAgGaAv8BtAHg + Cv8B/QP/AWUBzwL/AQABpgL/AQABogL/AQABnQL/AQABlwL/AQABkAL/AQABigL/AQABgwH+Af8BAAF6 + AfgB/wEAAVgB3gH/AQ0BXgHaAf8B8wH2AfcB/wPBAfkDGgEkAwUBBwMAAQEDAAEBAwQBBgM0AVQD5QH/ + AcwB3gHxAf8BAAFVAd4B/wEAAWEB5wH/AQABggH+Af8BAAGHAv8BAAGOAv8BAAGUAv8BAAGbAv8BAAGg + Av8BAAGlAv8BAAGnAv8BNAG9Av8B7wH7Cv8B4AHzAv8BHQGhAv8BAAGPAv8BAAGJAv8BAAGDAf4B/wEA + AXkB9wH/AQABWAHdAf8BDQFdAdkB/wHyAfUB9gH/A8AB+QMaASQDBQEHAwABAQHbAYMBDwH/AdsBgwEP + Af8B0AFvAQwB/wHRAXABDAH/AdIBcQEMAf8B0gFyAQ0B/wHTAXMBDQH/AdQBdAENAf8B1gF4AREB/wHW + AXoBEgH/AYgBaQFIAd4B2gGLASAB/wHgAaMBUwH/AdYBhQEhAf8B1AF1AQ0B/wHUAXQBDQH/AdMBdAEN + Af8B1AF1AQ0B/wHVAXcBDgH/AdYBeAEPAf8B1wGDARgB/wHaAY8BKQH/Ad0BmwE7Af8B3wGmAU0B/wHb + AYQBDwH/AdsBhAEPAf8B2wGEAQ8B/yQAAVMBUQFOAZ8B2gGBAQ8B/wHaAYEBDwH/AfAB1gGuAf8B3QGf + AUUB/wHbAZQBMwH/AdgBiAEiAf8B1QF4ARAB/wHUAXUBDgH/AdMBcwENAf8B0gFyAQ0B/wHSAXEBDAH/ + AdEBcAEMAf8B0wF5ARsB/wHSAXgBGAH/AdMBeQEZAf8B3AGSAToB/wHWAXoBEQH/AZABaQE/AeQB0wFz + AQ0B/wHSAXIBDAH/AdEBcAEMAf8B0AFvAQwB/wHQAW4BDAH/Ac8BbQEMAf8BzgFsAQsB/wHhAakBbAH/ + AdkBgQEPAf8EAAMBAQIDUAGZAfEC8AH/AW0BngHjAf8BAAFaAeIB/wEAAXUB9gH/AQABhgL/AQABjgL/ + AQABlQL/AQIBnQL/AbQB4hL/AaIB5gL/AQABsgL/AQABrQL/AQABpwL/AQABoAL/AQABmQL/AQABkQL/ + AQABigL/AQABgwH+Af8BAAFqAewB/wEAAVcB3gH/AakBxAHqAf8D5gH/AzoBYgMCAQMIAAMBAQIDUAGZ + A/IB/wFtAZ8B5AH/AQABWwHkAf8BAAF2AfcB/wEAAYgC/wEAAY8C/wEAAZYC/wEAAZ4C/wEAAaUC/wEA + AawC/wEAAbEC/wEAAbQC/wFQAdUC/wH7D/8B4AH0Av8BHQGiAv8BAAGQAv8BAAGJAv8BAAGDAf0B/wEA + AWkB6wH/AQABVwHdAf8BqQHDAegB/wPlAf8DOgFiAwIBAwQAAdkBgQEPAf8B2QGBAQ8B/wHOAWsBCwH/ + Ac8BbAELAf8BzwFuAQwB/wHQAW8BDAH/AdEBcAEMAf8B0gFxAQwB/wHSAXIBDQH/AdMBcwENAf8BhAFn + AUQB3gHXAXsBEQH/Ad0BmQFHAf8B0wF5ARkB/wHSAXgBFwH/AdMBeAEaAf8B0QFwAQwB/wHSAXEBDAH/ + AdIBcgENAf8B0wFzAQ0B/wHUAXUBDgH/AdYBeQESAf8B2AGKASQB/wHbAZUBNQH/Ad4BoQFHAf8B8QHa + AbQB/wHaAYEBDwH/AdoBgQEPAf8DDAEQGAAB2AF7AQ4B/wHYAXsBDgH/AdgBewEOAf8B3gGmAVAB/wHb + AZoBPgH/AdgBjgEtAf8B1gGCARwB/wHTAXQBDgH/AdIBcwEOAf8B0gFxAQwB/wHRAXABDAH/AdABbwEM + Af8BzwFuAQwB/wHPAWwBCwH/Ac8BbwEPAf8B0AFxARIB/wHPAXEBEAH/AdkBiwExAf8B1AF3AQ8B/wGO + AWcBPAHkAdABbwEMAf8B0AFuAQwB/wHPAW0BDAH/Ac4BbAELAf8BzQFrAQsB/wHNAWoBCwH/AcwBaQEL + Af8B4AGnAWsB/wHYAXsBDgH/BwABAQN1AdIC9gHzAf8BKAFzAeEB/wEAAV4B5wH/AQABgwH+Af8BAAGJ + Av8BAAGRAv8BAwGaAv8BtAHhEv8BowHpAv8BAAG8Av8BAAG5Av8BAAG0Av8BAAGtAv8BAAGlAv8BAAGc + Av8BAAGUAv8BAAGNAv8BAAGGAv8BAAF3AfkB/wEAAVsB4wH/AWIBmgHiAf8D7QH/A1ABlw8AAQEDdQHS + AvcB9QH/ASkBdAHiAf8BAAFeAegB/wEAAYQB/gH/AQABigL/AQABjwL/AQABlwL/AQABoAL/AQABqAL/ + AQABrwL/AQABtgL/AQABugL/AQABuwL/AVIB2AL/AfkB/g7/AeAB8wL/AR0BnwL/AQABjAL/AQABhQH+ + Af8BAAF3AfcB/wEAAVoB4QH/AWIBmQHhAf8D7AH/A1ABlwgAAdgBewEOAf8B2AF7AQ4B/wHLAWcBCgH/ + AcwBaQELAf8BzQFqAQsB/wHNAWsBCwH/Ac4BbAELAf8BzwFtAQwB/wHQAW4BDAH/AdABbwEMAf8BgwFl + AUMB3gHVAXcBDwH/AdoBkAE9Af8BzwFxAREB/wHPAXEBEQH/Ac8BbwEPAf8BzwFsAQsB/wHPAW4BDAH/ + AdABbwEMAf8B0QFwAQwB/wHSAXEBDAH/AdIBcwEOAf8B0wF0AQ4B/wHWAYQBHgH/AdkBjwEvAf8B2wGc + AUAB/wHeAacBUwH/AdgBewEOAf8B2AF7AQ4B/wHYAXsBDgH/EAAB1gF4AQ4B/wHWAXgBDgH/AeUBrgFn + Af8B3AGhAUoB/wHZAZUBOQH/AdYBiQEnAf8B0wF5ARUB/wHRAXEBDQH/AdABcAENAf8B0AFuAQwB/wHP + AW0BDAH/Ac4BbAELAf8BzQFrAQwB/wHNAWoBCwH/AcwBaQELAf8BzAFqAQ0B/wHMAWoBDQH/Ac0BawEN + Af8B1wGIATAB/wHSAXEBDQH/AY0BZAE8AeQBzgFsAQsB/wHNAWsBCwH/Ac0BagELAf8BzAFpAQsB/wHL + AWcBCgH/AcoBZgEKAf8BygFlAQoB/wHfAaUBawH/AdYBeAEOAf8EAAMNARIDtAHzAfAB8gHxAf8BAwFg + AeMB/wEAAXEB+gH/AQABkAL/AQABkgL/AQMBmAL/AbQB4Rb/AfYB/QL/AfYB/QL/AfYB/QL/AfYB/QL/ + AfYB/AL/AfYB/AL/AfYB/AL/AfYB+wL/AfQB+wL/AYYByAL/AQABjQL/AQABaAHzAf8BNwGAAeEB/wHw + Ae8B7gH/A2UBvQwAAw0BEgO1AfMB8QH0AfMB/wEEAWEB5QH/AQABcgH7Af8BAAGRAv8BIwGmAv8B0AHs + Av8B0AHtAv8B0AHvAv8B0AHxAv8B0AHyAv8B0AHzAv8B0AH0Av8B0AH0Av8BzgH0Av8B8wH9Ev8B4AHz + Av8BHAGeAv8BAAGOAv8BAAGMAv8BAAFnAfIB/wE2AYAB4AH/Ae8B7gHtAf8DZQG9CAAB1gF4AQ4B/wHW + AXgBDgH/AckBZAEKAf8BygFlAQoB/wHKAWYBCgH/AcsBZwEKAf8BzAFpAQsB/wHNAWoBCwH/Ac0BawEL + Af8BzgFsAQsB/wGDAWQBQwHeAdIBcQENAf8B2AGOAT0B/wHNAWoBDAH/Ac0BawENAf8BzQFrAQ0B/wHM + AWkBCwH/Ac0BagELAf8BzgFrAQsB/wHPAWwBCwH/Ac8BbgEMAf8B0AFuAQwB/wHQAXABDQH/AdEBcQEN + Af8B1AF6ARgB/wHXAYsBKQH/AdkBlgE7Af8B3AGiAUwB/wHXAYABFQH/AdYBeAEOAf8B1gF4AQ4B/wgA + AdUBNAECAf8B2QFHARsB/wH6AfIB5AH/AegBtAFkAf8B4gGeATYB/wHgAZQBJAH/Ad4BigEUAf8B3gGH + ARAB/wHeAYcBDwH/Ad4BhwEPAf8B3gGHAQ8B/wHeAYcBDwH/Ad4BhwEQAf8B3gGHAQ8B/wHeAYcBDwH/ + Ad4BhwEPAf8B3gGIARAB/wHeAYgBEAH/Ad4BiAEPAf8B4wGZATIB/wHcAYQBDwH/AZIBcAE+AeQB3wGJ + ARAB/wHfAYkBEAH/Ad8BiQEQAf8B3wGJARAB/wHfAYkBEAH/Ad8BiQEQAf8B3wGJARAB/wHsAbgBbwH/ + AdUBdQENAf8EAAMaASQD2QH+AeMB6QHuAf8BAAFeAecB/wEAAXcB/AH/AQABkwL/AQIBnAL/AbUB4T7/ + AY0BzAL/AQABkAL/AQABbQH4Af8BGgFxAeMB/wHwAe8B7AH/A3cB0wwAAxoBJAPbAf4B5AHrAfAB/wEA + AV8B6QH/AQABdwH9Af8BAAGTAv8BLAGxPv8B3wHzAv8BHQGiAv8BAAGPAv8BAAFsAfYB/wEaAXAB4gH/ + Ae8B7gHrAf8DdwHTCAAB1QF1AQ0B/wHVAXUBDQH/Ad8BiQEQAf8B3wGJARAB/wHfAYkBEAH/Ad8BiQEQ + Af8B3wGJARAB/wHfAYkBEAH/Ad8BiQEQAf8B3wGJARAB/wGJAWwBRAHeAdwBhAEPAf8B5QGgAT8B/wHe + AYgBDwH/Ad4BiAEQAf8B3gGIARAB/wHeAYcBDwH/Ad4BhwEPAf8B3gGHARAB/wHeAYcBEAH/Ad4BhwEP + Af8B3gGHAQ8B/wHeAYcBDwH/Ad4BhwEPAf8B3gGHARAB/wHfAYsBFgH/AeABlQEnAf8B4gGfATgB/wHq + Ab0BdgH/AfYB1wHKAf8B1QE0AQIB/wHVATQBAgH/BAAB0wFzAQ0B/wHTAXMBDQH/AdcBgwEjAf8B6AGs + AU0B/wHjAZcBIQH/AeIBjgESAf8B4gGOARIB/wHiAY4BEQH/AeIBjgERAf8B4gGOAREB/wHiAY4BEQH/ + AeIBjgERAf8B4gGOAREB/wHiAY4BEQH/AeIBjgERAf8B4gGOAREB/wHiAY4BEgH/AeIBjgERAf8B4gGO + AREB/wHnAZ8BMwH/Ad4BiAEQAf8BlgF0AT8B5AHjAY8BEQH/AeMBjwERAf8B4wGPAREB/wHjAY8BEQH/ + AeMBjwERAf8B4wGPAREB/wHjAY8BEQH/Ae4BvAFwAf8B0wFzAQ0B/wQAAxoBJQPcAf4B4AHnAewB/wEA + AWAB6gH/AQABeQH9Af8BAAGVAv8BAAGfAv8BqwHiPv8BjQHOAv8BAAGTAv8BAAFwAfoB/wEZAXIB5QH/ + Ae4B7QHqAf8DegHUDAADGgElA90B/gHhAegB7gH/AQABYQHsAf8BAAF7Af4B/wEAAZcC/wEsAbQ+/wHm + AfgC/wEjAakC/wEAAZIC/wEAAW8B+AH/ARkBcQHkAf8B7QHsAegB/wN6AdQIAAHTAXMBDQH/AdMBcwEN + Af8B4wGPAREB/wHjAY8BEQH/AeMBjwERAf8B4wGPAREB/wHjAY8BEQH/AeMBjwERAf8B4wGPAREB/wHj + AY8BEQH/AYoBbQFEAt4BiAEPAf8B6AGlAUAB/wHiAY4BEQH/AeIBjgERAf8B4gGOAREB/wHiAY4BEQH/ + AeIBjgERAf8B4gGOAREB/wHiAY4BEQH/AeIBjgERAf8B4gGOAREB/wHiAY4BEQH/AeIBjgERAf8B4gGO + AREB/wHiAY4BEgH/AeIBjwETAf8B5AGYASMB/wHvAcUBhwH/AdYBgAEdAf8B0wFzAQ0B/wFcAVYBUQGv + DAAB0gFxAQwB/wHSAXEBDAH/AfABvwF1Af8B5wGWARMB/wHnAZYBEgH/AecBlgESAf8B5wGWARIB/wHn + AZYBEgH/AecBlgESAf8B5wGWARIB/wHnAZYBEgH/AecBlgESAf8B5wGWARIB/wHnAZYBEgH/AecBlgES + Af8B5wGWARIB/wHnAZYBEgH/AesBpQE0Af8B4gGNAREB/wGYAXQBQQHkAegBlwETAf8B6AGXARMB/wHo + AZcBEwH/AegBlwETAf8B6AGXARMB/wHoAZcBEwH/AegBlwETAf8B8QHBAXEB/wHSAXEBDAH/BAADDwEU + A7wB9AHnAeoB6QH/AQEBZgHqAf8BAAF4Af4B/wEAAZUC/wEAAZ0C/wEAAacC/wGsAeUW/wHQAfgC/wHQ + AfYC/wHQAfYC/wHQAfUC/wHQAfUC/wHQAfMC/wHQAfEC/wHQAe8C/wHQAe0C/wFvAcQC/wEAAZIC/wEA + AW8B+gH/ATQBhAHoAf8B6QHoAeYB/wNoAcAMAAMPARQDvQH0AegC6wH/AQEBZgHsAf8BAAF5Av8BAAGX + Av8BKgGyAv8B9wH8Av8B9gH8Av8B9gH8Av8B9gH9Av8B9gH9Av8B9gH9Av8B9gH9Av8B9gH9Av8B9gH9 + Av8B/AH+Ev8B5gH5Av8BJAGwAv8BAAGYAv8BAAGRAv8BAAFuAfgB/wE0AYQB5gH/AegB5wHlAf8DaAHA + CAAB0gFxAQwB/wHSAXEBDAH/AegBlwETAf8B6AGXARMB/wHoAZcBEwH/AegBlwETAf8B6AGXARMB/wHo + AZcBEwH/AegBlwETAf8B6AGXARMB/wGNAXIBRAHeAeEBjAEQAf8B7AGrAUEB/wHnAZYBEgH/AecBlgES + Af8B5wGWARIB/wHnAZYBEgH/AecBlgESAf8B5wGWARIB/wHnAZYBEgH/AecBlgESAf8B5wGWARIB/wHn + AZYBEgH/AecBlgESAf8B5wGWARIB/wHnAZYBEgH/AecBlgETAf8B3QGSATUB/wHSAXEBDAH/AdIBcQEM + Af8YAAHQAW8BDAH/AdABbwEMAf8B0AFvAQwB/wHsAZwBFAH/AewBnAEUAf8B7AGcARQB/wHsAZwBFAH/ + AewBnAEUAf8B7AGcARQB/wHsAZwBFAH/AewBnAEUAf8B7AGcARQB/wHsAZwBFAH/Ae0BoQEfAf8B7AGc + ARQB/wHsAZ0BFAH/Ae8BqwE1Af8B5QGRAREB/wGZAXoBQQHkAe0BngEUAf8B7QGeARQB/wHtAZ4BFAH/ + Ae0BngEUAf8B7QGeARQB/wHtAZ4BFAH/Ae0BngEUAf8B9AHFAXEB/wHQAW4BDAH/BAADAQECA38B1gHp + AegB5QH/ASUBeQHrAf8BAAF1Af0B/wEAAZcC/wEAAZ4C/wEAAaYC/wEBAbAC/wGsAegS/wGhAfEC/wEA + AdMC/wEAAc8C/wEAAc0C/wEAAcYC/wEAAb0C/wEAAbMC/wEAAagC/wEAAaAC/wEAAZkC/wEAAZAC/wEA + AWwB9wH/AVwBnwHrAf8D5AH/A1IBmwwAAwEBAgN/AdYC6QHmAf8BJQF6Ae0B/wEAAXYB/QH/AQABmAL/ + AQABnwL/AQABpwL/AQABsQL/AQABuwL/AQABxAL/AQABzQL/AQAB0gL/AQAB0wL/AQAB0wL/AUkB3wL/ + AfkB/g7/AeYB+gL/ASMBuAL/AQABoQL/AQABmQL/AQABjwL/AQABbAH2Af8BXAGeAeoB/wPjAf8DUgGb + CAAB0AFuAQwB/wHQAW4BDAH/Ae0BngEUAf8B7QGeARQB/wHtAZ4BFAH/Ae0BngEUAf8B7QGeARQB/wHt + AZ4BFAH/Ae0BngEUAf8B7QGeARQB/wGOAXMBRwHeAeQBkAERAf8B8AGxAUIB/wHsAZ0BFAH/AewBnAEU + Af8B7QGgAR4B/wHsAZwBFAH/AewBnAEUAf8B7AGcARQB/wHsAZwBFAH/AewBnAEUAf8B7AGcARQB/wHs + AZwBFAH/AewBnAEUAf8B7AGcARQB/wHsAZwBFAH/AdABbwEMAf8B0AFvAQwB/wHQAW8BDAH/IAABogFm + AS4B7wHPAWwBCwH/Ac8BbAELAf8B8gGsASoB/wHxAaQBFQH/AfEBpAEVAf8B8QGkARUB/wHxAaQBFQH/ + AfEBpAEVAf8B8QGkARUB/wHxAaQBFQH/AfEBpAEVAf8B7QGfARQB/wHrAZ0BGwH/AfEBpAEVAf8B8wGy + ATcB/wHnAZYBEwH/AZoBewFCAeQB8QGlARYB/wHxAaUBFgH/AfEBpQEWAf8B8QGlARYB/wHxAaUBFgH/ + AfEBpQEWAf8B8QGlARYB/wH3AcoBcwH/Ac4BbAELAf8IAANSAZwD4wH/AWUBpQHvAf8BAAFvAfcB/wEA + AZIC/wEAAZ4C/wEAAaYC/wEAAa4C/wEAAbgC/wGsAeoS/wGlAfQC/wEAAdIC/wEAAcwC/wEAAcUC/wEA + AbwC/wEAAbMC/wEAAaoC/wEAAaIC/wEAAZoC/wEAAYoC/wEAAWoB8gH/AZsBvwHpAf8D5gH/AzoBYhAA + A1IBnAPkAf8BZgGmAfAB/wEAAW8B9wH/AQABkwL/AQABnwL/AQABpwL/AQABsAL/AQABuQL/AQABwQL/ + AQABygL/AQAB0AL/AQAB1AL/AUcB4gL/AfkB/g7/AeUB+gL/ASIBvwL/AQABqQL/AQABoAL/AQABmQL/ + AQABiAL/AQABaQHxAf8BmwG+AekB/wPlAf8DOgFiCAABzgFsAQsB/wHOAWwBCwH/AfEBpQEWAf8B8QGl + ARYB/wHxAaUBFgH/AfEBpQEWAf8B8QGlARYB/wHxAaUBFgH/AfEBpQEWAf8B8QGlARYB/wGPAXcBSAHe + AeYBlAESAf8B9AG3AUMB/wHxAaQBFQH/AeoBmQETAf8B7gGfARQB/wHxAaQBFQH/AfEBpAEVAf8B8QGk + ARUB/wHxAaQBFQH/AfEBpAEVAf8B8QGkARUB/wHxAaQBFQH/AfEBpAEVAf8B9gHJAXIB/wHPAWwBCwH/ + Ac8BbAELAf8COgE5AWAsAAHNAWoBCwH/Ac0BagELAf8B9wHRAZAB/wH2AasBFwH/AfYBqwEXAf8B9gGr + ARcB/wH2AasBFwH/AfYBqwEXAf8B9gGrARcB/wH2AasBFwH/AfEBpAEWAf8B7QGdARQB/wHnAZQBEgH/ + AfcBuAE4Af8B6gGaARMB/wGdAYABQwHkAfYBrAEXAf8B9gGsARcB/wH2AawBFwH/AfYBrAEXAf8B9gGs + ARcB/wH2AawBFwH/AfYBrAEXAf8B+gHOAXMB/wHNAWoBCwH/CAADMgFRA+cB/wG2Ac8B6AH/AQABaQHy + Af8BAAGIAv8BAAGcAv8BAAGjAv8BAAGrAv8BAAGzAv8BAAG6Av8BrAHqDv8BjQHmAv8BAAHKAv8BAAHF + Av8BAAG+Av8BAAG3Av8BAAGvAv8BAAGnAv8BAAGgAv8BAAGZAv8BAAF7Af0B/wEIAWsB7gH/AdoB3wHh + Af8D0wH7AxMBGhAAAzIBUQPoAf8BtgHQAekB/wEAAWkB8wH/AQABiQL/AQABnQL/AQABpAL/AQABrAL/ + AQABtAL/AQABuwL/AQABwwL/AQAByAL/AQABzQL/AScB1gL/AegB+wr/AeQB+gL/ASIBwgL/AQABrgL/ + AQABpgL/AQABnwL/AQABmAL/AQABegH9Af8BCAFrAe0B/wHZAd4B4AH/A9MB+wMTARoIAAHNAWoBCwH/ + Ac0BagELAf8B9gGsARcB/wH2AawBFwH/AfYBrAEXAf8B9gGsARcB/wH2AawBFwH/AfYBrAEXAf8B9gGs + ARcB/wH2AawBFwH/AY8BeAFIAd4B6QGZARMB/wH4AbwBRAH/AecBlQETAf8B7QGeARQB/wHyAaUBFgH/ + AfYBqwEXAf8B9gGrARcB/wH2AasBFwH/AfYBqwEXAf8B9gGrARcB/wH2AasBFwH/AfYBqwEXAf8B3wGd + AVEB/wHNAWoBCwH/Ac0BagELAf84AAHLAWcBCgH/AcsBZwEKAf8BywFnAQoB/wH6AbIBGAH/AfoBsgEY + Af8B+gGyARgB/wH6AbIBGAH/AfoBsgEYAf8B+gGyARgB/wH6AbIBGAH/AfkBsQEYAf8B6QGYARMB/wHc + AY8BLwH/Ae4BtgFeAf8BnwGBAUMB5AH7AbMBGQH/AfsBswEZAf8B+wGzARkB/wH7AbMBGQH/AfsBswEZ + Af8B+wGzARkB/wH7AbMBGQH/Af0B0wF0Af8BywFnAQoB/wgAAwUBBwOfAegB3QHcAdoB/wE2AY0B8gH/ + AQABdQH5Af8BAAGXAv8BAAGhAv8BAAGoAv8BAAGvAv8BAAG1Av8BAAG8Av8BrAHqBv8BjAHjAv8BAAHF + Av8BAAHCAv8BAAG+Av8BAAG5Av8BAAGyAv8BAAGrAv8BAAGkAv8BAAGeAv8BAAGPAv8BAAFvAfUB/wFt + AasB7wH/AtkB2AH/A2ABtRQAAwUBBwOgAegC3QHbAf8BNgGOAfQB/wEAAXYB+QH/AQABmAL/AQABogL/ + AQABqQL/AQABrwL/AQABtgL/AQABvAL/AQABwQL/AQABxAL/AQABxQL/ASUBzgL/AegB+wL/AeQB+gL/ + ASABwwL/AQABsQL/AQABqgL/AQABowL/AQABnQL/AQABjwL/AQABbwH0Af8BbQGqAe4B/wLYAdcB/wNg + AbUMAAHLAWcBCgH/AcsBZwEKAf8B+wGzARkB/wH7AbMBGQH/AfsBswEZAf8B+wGzARkB/wH7AbMBGQH/ + AfsBswEZAf8B+wGzARkB/wH7AbMBGQH/AZEBegFIAd4B7QG3AWYB/wHjAZ0BPgH/AeoBmQETAf8B+gGy + ARgB/wH6AbIBGAH/AfoBsgEYAf8B+gGyARgB/wH6AbIBGAH/AfoBsgEYAf8B+gGyARgB/wH6AbIBGAH/ + AcsBZwEKAf8BywFnAQoB/wHLAWcBCgH/QAABcgFfAUwBzwHKAWUBCgH/AcoBZQEKAv8BuwEiAv8BuQEa + Av8BuQEaAv8BuQEaAv8BuQEaAv8BuQEaAv8BuQEaAv8BuQEaAf8B3AGQATAB/wHJAWUBCgH/AZEBdAFW + AeQB/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wHWAXUB/wHJAWUBCgH/ + DAADQgF2A+AB/wG7AdEB5wH/AQABbAH0Af8BAAGGAf0B/wEAAZ4C/wEAAaQC/wEAAaoC/wEAAbAC/wEA + AbUC/wEAAbkC/wFaAdMC/wEAAbwC/wEAAbwC/wEAAboC/wEAAbcC/wEAAbIC/wEAAa0C/wEAAacC/wEA + AaEC/wEAAZkC/wEAAXoB+gH/ARUBdwHzAf8B0wHZAdwB/wPeAf4DKAE8GAADQgF2A+AB/wG8AdIB6AH/ + AQABbQH1Af8BAAGHAf4B/wEAAZ8C/wEAAaUC/wEAAasC/wEAAbAC/wEAAbUC/wEAAbkC/wEAAbwC/wEA + Ab0C/wEAAbwC/wEoAcUC/wEjAcIC/wEAAbEC/wEAAawC/wEAAaYC/wEAAaAC/wEAAZgC/wEAAXkB+gH/ + ARUBdgHyAf8B0gHYAdwB/wPdAf4DKAE8DAAByQFlAQoB/wHJAWUBCgL/AbkBGgL/AbkBGgL/AbkBGgL/ + AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgH/AYMBYAFCAd4ByQFlAQoB/wHkAZ4BPgL/AbkBGgL/ + AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgL/AdMBbgH/AcoBZQEKAf8BygFlAQoB/wMX + ASBMAAHIAWMBCQH/AcgBYwEJAf8B+QHXAZkC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5 + ARoB/wHxAboBWgH/AcgBYgEJAf8BigFhATwB5AHIAWIBCQL/AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgL/ + AbkBGgL/AbkBGgL/AdYBdQH/AcgBYgEJAf8MAAMGAQgDgwHZAtIB0QH/AYEBtgHxAf8BAAFuAfQB/wEA + AYwB/gH/AQABnwL/AQABpAL/AQABqAL/AQABrAL/AQABsAL/AQABsgL/AQABswL/AQABswL/AQABsQL/ + AQABrgL/AQABqwL/AQABpgL/AQABogL/AQABmwL/AQABhQH8Af8BAAFuAfQB/wGtAcoB6AH/AtQB1QH/ + A1gBphwAAwYBCAODAdkB0wLSAf8BggG2AfIB/wEAAW4B9AH/AQABjQH+Af8BAAGfAv8BAAGlAv8BAAGp + Av8BAAGtAv8BAAGwAv8BAAGyAv8BAAGzAv8BAAGzAv8BAAGxAv8BAAGuAv8BAAGqAv8BAAGlAv8BAAGh + Av8BAAGaAv8BAAGFAfwB/wEAAW4B8wH/Aa0BygHnAf8D1AH/A1gBphAAAcgBYgEJAf8ByAFiAQkC/wG5 + ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoB/wHIAWIBCQH/AYIBYAFCAd4ByAFi + AQkC/wHWAXUC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoB/wHgAagBbgH/AcgBYwEJ + Af8ByAFjAQkB/1gAAccBYQEJAf8BxwFhAQkB/wHHAWEBCQL/AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgL/ + AbkBGgH/AfEBuQFaAf8BxwFhAQkB/wQAAcUBYAEJAf8BxQFgAQkC/wHXAXgC/wG5ARoC/wG5ARoC/wG5 + ARoC/wG5ARoC/wHWAXUB/wHFAWABCQH/EAADJAE2A8kB+AHRAdABzwH/AWMBrAH1Af8BAAFvAfQB/wEA + AYsB/QH/AQABnAL/AQABowL/AQABpgL/AQABqQL/AQABqwL/AQABrAL/AQABqwL/AQABqgL/AQABpwL/ + AQABpQL/AQABoQL/AQABmAL/AQABhAH7Af8BAAFuAfUB/wGeAcIB7QH/As0BzAH/AZACkQHgAw0BEiAA + AyQBNgPKAfgB0gHRAdAB/wFjAawB9QH/AQABbwH1Af8BAAGLAf0B/wEAAZ0C/wEAAaQC/wEAAaYC/wEA + AakC/wEAAasC/wEAAawC/wEAAasC/wEAAaoC/wEAAacC/wEAAaQC/wEAAaEC/wEAAZgC/wEAAYQB+wH/ + AQABbgH0Af8BnQHBAewB/wLMAcsB/wKQAZEB4AMNARIQAAHFAWABCQH/AcUBYAEJAv8BuQEaAv8BuQEa + Av8BuQEaAv8BuQEaAv8BuQEaAf8B/QHeAZsB/wHFAWABCQH/AcUBYAEJAf8EAAHHAWEBCQL/AdYBdQL/ + AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgH/AccBYQEJAf8BxwFhAQkB/wHHAWEBCQH/YAACRwFG + AYABxAFeAQgB/wHEAV4BCAL/AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgH/AfEBuAFaAf8BxAFeAQgB/wgA + AcQBXgEIAf8BxAFeAQgB/wHbAZ0BZAL/AbkBGgL/AbkBGgL/AbkBGgL/AdYBdQH/AcQBXgEIAf8UAAM1 + AVYDzwH8As0BywH/AYQBuAHxAf8BAAFwAfYB/wEAAYAB+AH/AQABlAL/AQABnQL/AQABogL/AQABowL/ + AQABpAL/AQABpAL/AQABowL/AQABoQL/AQABmgL/AQABkAH+Af8BAAF3AfYB/wEOAXcB9wH/AacByAHp + Af8ByQLIAf8DqAHtAx8BLCgAAzUBVgPQAfwBzgHNAcwB/wGFAbkB8gH/AQABcAH2Af8BAAGBAfgB/wEA + AZQC/wEAAZ4C/wEAAaIC/wEAAaMC/wEAAaQC/wEAAaQC/wEAAaMC/wEAAaEC/wEAAZkC/wEAAY8B/gH/ + AQABdwH2Af8BDgF3AfYB/wGnAccB6AH/AsgBxwH/A6gB7QMfASwUAAHEAV4BCAH/AcQBXgEIAv8BuQEa + Av8BuQEaAv8BuQEaAv8BuQEaAf8BxwFjARAB/wHEAV4BCAH/AcQBXgEIAf8IAAHEAV4BCAL/AdYBdQL/ + AbkBGgL/AbkBGgL/AbkBGgL/Ac8BYAH/AcQBXgEIAf8BxAFeAQgB/3AAAcIBXAEIAf8BwgFcAQgB/wH1 + AdEBlwL/AbkBGgL/AbkBGgL/AdYBdQH/AcIBXAEIAf8MAAHCAVsBCAH/AcIBWwEIAf8BwgFbAQgC/wG5 + ARoC/wG7ASIC/wHWAXUB/wHCAVsBCAH/GAADNQFVA70B9gHGAsUB/wG5Ac4B4QH/AUABmQH4Af8BAAFx + AfYB/wEAAXkB9wH/AQABiAH6Af8BAAGSAf4B/wEAAZYC/wEAAZUC/wEAAZAB/QH/AQABhQH6Af8BAAF3 + AfYB/wEBAXEB9gH/AV0BpwH2Af8BxgHRAdgB/wPHAf8DkgHiAx8BLDAAAzUBVQO9AfYBxwLGAf8BuQHO + AeIB/wFAAZkB+AH/AQABcQH2Af8BAAF5AfcB/wEAAYkB+gH/AQABkgH+Af8BAAGWAv8BAAGVAv8BAAGQ + Af0B/wEAAYUB+gH/AQABdwH2Af8BAQFxAfYB/wFdAaYB9QH/AcUB0AHXAf8DxgH/A5IB4gMfASwYAAHC + AVsBCAH/AcIBWwEIAv8BuQEaAv8BuwEiAv8BuQEaAf8BwgFbAQgB/wHCAVsBCAH/AWQBWQFQAb8MAAHC + AVwBCAL/AdYBdQL/AbkBGgL/AbkBGgH/AeABqQF1Af8BwgFcAQgB/wHCAVwBCAH/eAABwQFZAQcB/wHB + AVkBBwH/Ac8BewE9Av8B9AHdAf8B1wGUAVwB/wHBAVkBBwH/FAABwAFZAQcB/wHAAVkBBwH/AfsB7QHa + Af8B4QGwAYsB/wHAAVkBBwH/HAADIAEuA3oB0wPPAf8CxgHEAf8BtQHKAd4B/wFxAbIB9AH/ATcBlAH4 + Af8BDwF6AfcB/wEDAXEB8wH/AQQBcQH0Af8BFgGBAfcB/wFDAZsB+AH/AYIBtwHvAf8BwQHOAdgB/wHC + AcEBwAH/A9UB/wNeAbIDEAEVOAADIAEuA3oB0wPPAf8BxwHGAcQB/wG1AcsB3gH/AXEBswH0Af8BNwGV + AfgB/wEPAXoB9wH/AQMBcQHzAf8BBAFxAfQB/wEWAYEB9wH/AUMBmwH4Af8BgQG2Ae8B/wHBAc4B1wH/ + AcIBwQHAAf8D1QH/A14BsgMQARUcAAHAAVkBBwH/AcABWQEHAf8B6AHCAaQB/wH3AekB3AH/AcABWQEH + Af8BwAFZAQcB/xQAAcEBWQEHAf8B4AGpAXgC/wHxAdEB/wHHAWUBGgH/AcEBWQEHAf8BwQFZAQcB/4AA + AyoBQAG/AVcBBwH/AckBbgErAf8B8gHeAc8B/wG/AVcBBwH/GAABvwFXAQcB/wG/AVcBBwH/AfIB3gHP + Af8BvwFXAQcB/yAAAwMBBAM9AWgDiQHeA9MB/wLAAcEB/wHGAcMBwQH/Ac8BzgHLAf8B0ALRAf8B0QLQ + Af8BzQHMAckB/wHDAcEBvwH/A8MB/wPVAf8DbAHGAy8BSkQAAwMBBAM9AWgDiQHeA9MB/wPBAf8BxgHE + AcIB/wHPAc4BywH/AdAC0QH/AdEC0AH/Ac4BzAHJAf8BwgHBAb8B/wPDAf8D1QH/A2wBxgMvAUokAAG/ + AVcBBwH/Ab8BVwEHAf8B8gHeAc8B/wG/AVcBBwH/Ab8BVwEHAf8YAAG/AVcBBwH/AfMB3wHRAf8BxQFn + AR8B/wG/AVcBBwH/kAABvQFUAQYB/wHyAd0BzgH/AdUBkgFaAf8cAAG9AVQBBgH/AfIB3QHNAf8B8gHd + Ac0B/ygAAwEBAgMrAUIDSgGJA2gBwgOPAeEDpQHvA6kB8AOGAd0DYgG3A0QBegMgAS5UAAMBAQIDKwFC + A0oBiQNoAcIDjwHhA6UB7wOpAfADhgHdA2IBtwNEAXoDIAEuLAABvQFUAQYB/wHyAd0BzQH/AcABXAER + Af8DQAFwHAAB8gHdAc4B/wHyAd0BzgH/Ab0BVAEGAf+YAAHhAbEBjwH/AfEB3AHNAf8kAAHxAdwBzQH/ + /wAFAAHxAdwBzQH/JAAB8QHcAc0B/wG8AVIBBgH//wD/AE4AAUIBTQE+BwABPgMAASgDAAGAAwABQAMA + AQEBAAEBBgABBBYAA///AP8AAwAC/wH7Af4I/wG/Ae8E/wHjAfgI/wEPAeME/wHDAfAB/wHAAQMC/wHA + AQMB/wEHAeEE/wGDAcAB/AIAAT8B/AIAAT8BAwHgA/8B/gEDAYAB8AIAAQ8B8AIAAQ8BAAHgAT8C/wH8 + AQMBAAHAAgABAwHAAgABAwEAAWABHwL/AfACAAGAAgABAQGAAgABAQEAASABDwL/AeACAAGAAwABgAUA + AQMC/wHADAABAQL/DgAB/wH+DgABPwH8DgABHwHwAwABgAIAAQEBgAIAAQEDAAEHAeADAAGAAgABAwGA + AgABAwMAAQMBwAMAAYACAAEDAYACAAEDAwABAQGAAwABgAIAAQMBgAIAAQMEAAGAAwABgAIAAQMBgAIA + AQMEAAHgAwABgAIAAQMBgAIAAQMDAAEDAfADAAGAAgABAwGAAgABAwMAAQcB+AMAAcACAAEDAcACAAED + AwABDwH+AwABwAIAAQMBwAIAAQMDAAE/Af8DAAHAAgABBwHAAgABBwMAAX8B/wGAAgAB4AIAAQcB4AIA + AQcDAAL/AeACAAHgAgABDwHgAgABDwIAAQMC/wHwAQIBAAHwAgABDwHwAgABDwEAASABBwL/AfgBAwEA + AfgCAAEfAfgCAAEfAQABYAEfAv8B/gEDAYAB/AIAAT8B/AIAAT8BAAHgAT8D/wEDAeAB/gIAAX8B/gIA + AX8BAwHgAX8D/wGDAfAB/wEAAQEC/wEAAQEB/wEHAeEE/wHjAfgB/wHAAQcC/wHAAQcB/wEPAeME/wHz + Af4I/wG/AecS/ws= + + + \ No newline at end of file diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Program.cs b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Program.cs new file mode 100644 index 00000000..6c0edbcd --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Program.cs @@ -0,0 +1,29 @@ +//Copyright (c) Microsoft Corporation. All rights reserved. + +using System; +using System.Windows.Forms; +using Microsoft.WindowsAPICodePack.Taskbar; + +namespace Microsoft.WindowsAPICodePack.Samples.ImageViewerDemoWinforms +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + if (!TaskbarManager.IsPlatformSupported) + { + MessageBox.Show("This demo requires to be run on Windows 7", "Demo needs Windows 7", MessageBoxButtons.OK, MessageBoxIcon.Error); + System.Environment.Exit(0); + return; + } + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Properties/AssemblyInfo.cs b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..64cdb24a --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Properties/AssemblyInfo.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. + +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Image Viewer Demo (Winforms)")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Microsoft Windows API Code Pack for .NET Framework")] +[assembly: AssemblyCopyright("Copyright Microsoft 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("a2395a93-d9c0-4328-9deb-7ce20f7141e3")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Properties/Resources.Designer.cs b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Properties/Resources.Designer.cs new file mode 100644 index 00000000..6b943116 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Properties/Resources.Designer.cs @@ -0,0 +1,92 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.ImageViewerDemoWinforms.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Microsoft.WindowsAPICodePack.Samples.ImageViewerDemoWinforms.Properties.Resources" + + "", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static System.Drawing.Icon first { + get { + object obj = ResourceManager.GetObject("first", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + internal static System.Drawing.Icon last { + get { + object obj = ResourceManager.GetObject("last", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + internal static System.Drawing.Icon nextArrow { + get { + object obj = ResourceManager.GetObject("nextArrow", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + + internal static System.Drawing.Icon prevArrow { + get { + object obj = ResourceManager.GetObject("prevArrow", resourceCulture); + return ((System.Drawing.Icon)(obj)); + } + } + } +} diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Properties/Resources.resx b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Properties/Resources.resx new file mode 100644 index 00000000..9dde1023 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\first.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\last.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\nextArrow.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\prevArrow.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Properties/Settings.Designer.cs b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Properties/Settings.Designer.cs new file mode 100644 index 00000000..56a07e53 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30128.1 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Microsoft.WindowsAPICodePack.Samples.ImageViewerDemoWinforms.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Properties/Settings.settings b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Resources/first.ico b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Resources/first.ico new file mode 100644 index 00000000..23af4d8f Binary files /dev/null and b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Resources/first.ico differ diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Resources/last.ico b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Resources/last.ico new file mode 100644 index 00000000..0410c75b Binary files /dev/null and b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Resources/last.ico differ diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Resources/nextArrow.ico b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Resources/nextArrow.ico new file mode 100644 index 00000000..6203d1a6 Binary files /dev/null and b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Resources/nextArrow.ico differ diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Resources/prevArrow.ico b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Resources/prevArrow.ico new file mode 100644 index 00000000..73ebec75 Binary files /dev/null and b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/Resources/prevArrow.ico differ diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/ThumbnailToolbarDemoWinforms.csproj b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/ThumbnailToolbarDemoWinforms.csproj new file mode 100644 index 00000000..deb13cfd --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/ThumbnailToolbarDemoWinforms.csproj @@ -0,0 +1,138 @@ + + + + Debug + AnyCPU + 9.0.21022 + 2.0 + {FEE9384C-251C-4D42-A190-F89775D339F1} + WinExe + Properties + Microsoft.WindowsAPICodePack.Samples.ImageViewerDemoWinforms + ImageViewerDemoWinforms + v3.5 + 512 + + + + + app.manifest + + + + + 3.5 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + AllRules.ruleset + + + + 3.0 + + + 3.0 + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + 3.0 + + + + + Form + + + Form1.cs + + + + + Form1.cs + Designer + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + + + + + + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/ThumbnailToolbarDemoWinforms.sln b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/ThumbnailToolbarDemoWinforms.sln new file mode 100644 index 00000000..02ded801 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/ThumbnailToolbarDemoWinforms.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ThumbnailToolbarDemoWinforms", "ThumbnailToolbarDemoWinforms.csproj", "{FEE9384C-251C-4D42-A190-F89775D339F1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FEE9384C-251C-4D42-A190-F89775D339F1}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {FEE9384C-251C-4D42-A190-F89775D339F1}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {FEE9384C-251C-4D42-A190-F89775D339F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FEE9384C-251C-4D42-A190-F89775D339F1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FEE9384C-251C-4D42-A190-F89775D339F1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FEE9384C-251C-4D42-A190-F89775D339F1}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/app.manifest b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/app.manifest new file mode 100644 index 00000000..4ddad9b4 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/CS/Winforms/app.manifest @@ -0,0 +1,18 @@ + + + + Image Viewer Demo Application + + + + + + + diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Application.xaml b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Application.xaml new file mode 100644 index 00000000..a9fb3992 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Application.xaml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Application.xaml.vb b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Application.xaml.vb new file mode 100644 index 00000000..2b008fe4 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Application.xaml.vb @@ -0,0 +1,15 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Namespace Microsoft.WindowsAPICodePack.Samples.ImageViewerDemo + ''' + ''' Interaction logic for App.xaml + ''' + + Partial Public Class App + Inherits System.Windows.Application + + End Class +End Namespace diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Icons/first.ico b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Icons/first.ico new file mode 100644 index 00000000..23af4d8f Binary files /dev/null and b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Icons/first.ico differ diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Icons/last.ico b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Icons/last.ico new file mode 100644 index 00000000..0410c75b Binary files /dev/null and b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Icons/last.ico differ diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Icons/nextArrow.ico b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Icons/nextArrow.ico new file mode 100644 index 00000000..6203d1a6 Binary files /dev/null and b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Icons/nextArrow.ico differ diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Icons/prevArrow.ico b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Icons/prevArrow.ico new file mode 100644 index 00000000..73ebec75 Binary files /dev/null and b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Icons/prevArrow.ico differ diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/My Project/AssemblyInfo.vb b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..e2d75898 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/My Project/AssemblyInfo.vb @@ -0,0 +1,63 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +#Region "Using directives" + +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Resources +Imports System.Globalization +Imports System.Windows +Imports System.Runtime.InteropServices + +#End Region + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .csproj file +'inside a . For example, if you are using US english +'in your source files, set the to en-US. Then uncomment +'the NeutralResourceLanguage attribute below. Update the "en-US" in +'the line below to match the UICulture setting in the project file. + +'[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)] + + +' Specifies the location in which theme dictionaries are stored for types in an assembly. + ' Specifies the location of system theme-specific resource dictionaries for this project. + ' The default setting in this project is "None" since this default project does not + ' include these user-defined theme files: + ' Themes\Aero.NormalColor.xaml + ' Themes\Classic.xaml + ' Themes\Luna.Homestead.xaml + ' Themes\Luna.Metallic.xaml + ' Themes\Luna.NormalColor.xaml + ' Themes\Royale.NormalColor.xaml + ' Specifies the location of the system non-theme specific resource dictionary: + ' Themes\generic.xaml + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Revision and Build Numbers +' by using the '*' as shown below: + diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/My Project/Resources.Designer.vb b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/My Project/Resources.Designer.vb new file mode 100644 index 00000000..0bed8e7e --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/My Project/Resources.Designer.vb @@ -0,0 +1,91 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + Friend ReadOnly Property first() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("first", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + Friend ReadOnly Property last() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("last", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + Friend ReadOnly Property nextArrow() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("nextArrow", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + Friend ReadOnly Property prevArrow() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("prevArrow", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/My Project/Resources.resx b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/My Project/Resources.resx new file mode 100644 index 00000000..30b24fc3 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/My Project/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\icons\first.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\last.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\nextarrow.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\icons\prevarrow.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/My Project/Settings.Designer.vb b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/My Project/Settings.Designer.vb new file mode 100644 index 00000000..f2ffe239 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class Settings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()),Settings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As Settings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Settings + Get + Return Global.Settings.Default + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/My Project/Settings.settings b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/My Project/Settings.settings new file mode 100644 index 00000000..40246947 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/ThumbnailToolbarDemoWPF.sln b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/ThumbnailToolbarDemoWPF.sln new file mode 100644 index 00000000..f836708d --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/ThumbnailToolbarDemoWPF.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ThumbnailToolbarDemoWPF", "ThumbnailToolbarDemoWPF.vbproj", "{52A6AB4A-F177-4133-93B0-24BE2F350055}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {52A6AB4A-F177-4133-93B0-24BE2F350055}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {52A6AB4A-F177-4133-93B0-24BE2F350055}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {52A6AB4A-F177-4133-93B0-24BE2F350055}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {52A6AB4A-F177-4133-93B0-24BE2F350055}.Debug|Any CPU.Build.0 = Debug|Any CPU + {52A6AB4A-F177-4133-93B0-24BE2F350055}.Release|Any CPU.ActiveCfg = Release|Any CPU + {52A6AB4A-F177-4133-93B0-24BE2F350055}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/ThumbnailToolbarDemoWPF.vbproj b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/ThumbnailToolbarDemoWPF.vbproj new file mode 100644 index 00000000..5ccfc56d --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/ThumbnailToolbarDemoWPF.vbproj @@ -0,0 +1,162 @@ + + + + Debug + AnyCPU + {43619AA5-B3A2-47B9-A3B1-8B80BE502FD9} + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + + + ImageViewerDemo + winexe + 3.0 + false + v3.5 + On + Binary + Off + On + + + + + 3.5 + + + + + app.manifest + Publish\ + true + Web + true + Foreground + 7 + Days + false + false + false + 0 + 1.0.0.%2a + false + true + + + true + full + false + .\bin\Debug\ + true + true + AllRules.ruleset + + + false + true + .\bin\Release\ + false + true + AllRules.ruleset + + + + + + 3.5 + + + + 3.0 + + + 3.0 + + + 3.0 + + + + + MSBuild:Compile + Designer + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + Designer + MSBuild:Compile + MSBuild:Compile + Designer + MSBuild:Compile + Designer + + + Application.xaml + Code + + + + + + VbMyResourcesResXFileCodeGenerator + Designer + Resources.Designer.vb + My.Resources + + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + True + True + Resources.resx + + + True + True + Settings.settings + + + Window1.xaml + + + + + + + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + \ No newline at end of file diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Window1.xaml b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Window1.xaml new file mode 100644 index 00000000..c9435453 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Window1.xaml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Window1.xaml.vb b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Window1.xaml.vb new file mode 100644 index 00000000..dbe8de3a --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/Window1.xaml.vb @@ -0,0 +1,230 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.IO +Imports System.Linq +Imports System.Windows +Imports System.Windows.Interop +Imports System.Windows.Media +Imports Microsoft.WindowsAPICodePack.Dialogs +Imports Microsoft.WindowsAPICodePack.Shell +Imports Microsoft.WindowsAPICodePack.Taskbar + +Namespace Microsoft.WindowsAPICodePack.Samples.ImageViewerDemo + ''' + ''' Interaction logic for Window1.xaml + ''' + Partial Public Class Window1 + Inherits Window + Private buttonPrevious As ThumbnailToolbarButton + Private buttonNext As ThumbnailToolbarButton + Private buttonFirst As ThumbnailToolbarButton + Private buttonLast As ThumbnailToolbarButton + Private picturesList As List(Of ShellFile) + + Public Sub New() + If Not TaskbarManager.IsPlatformSupported Then + MessageBox.Show("This demo application interacts with the Windows 7 Taskbar. The current operating system does not support this feature.") + Application.Current.Shutdown() + End If + + InitializeComponent() + DataContext = Me + + AddHandler ImageList.SelectionChanged, AddressOf ImageList_SelectionChanged + AddHandler Loaded, AddressOf Window1_Loaded + + ' When the LayoutUpdated event is raised, we are sure that the picturebox is rendered + ' (i.e. we'll be able to get the height and width of that control) + AddHandler pictureBox1.LayoutUpdated, AddressOf pictureBox1_LayoutUpdated + End Sub + + Private Sub pictureBox1_LayoutUpdated(ByVal sender As Object, ByVal e As EventArgs) + ' On LayoutUpdated, get the offset of the pictureBox with repsect to its parent. + ' Form a clip rectangle (offset + size of the control) and pass it to Taskbar + ' for DWM to clip only the specific porition of the app window. + ' This allows us to not include the "misc" controls from the app window - scroll bars, + ' list view on the right, any toolbars, etc. + + ' Get the offset for picturebox + Dim v As Vector = VisualTreeHelper.GetOffset(pictureBox1) + + ' Set the thumbnail clip + TaskbarManager.Instance.TabbedThumbnail.SetThumbnailClip((New WindowInteropHelper(Me)).Handle, New System.Drawing.Rectangle(CInt(Fix(v.X)), CInt(Fix(v.Y)), CInt(Fix(pictureBox1.RenderSize.Width)), CInt(Fix(pictureBox1.RenderSize.Height)))) + End Sub + + Private Sub ImageList_SelectionChanged(ByVal sender As Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) + ' Update the button states + If ImageList.SelectedIndex = 0 Then + buttonFirst.Enabled = False + buttonPrevious.Enabled = False + ElseIf ImageList.SelectedIndex > 0 Then + buttonFirst.Enabled = True + buttonPrevious.Enabled = True + End If + + If ImageList.SelectedIndex = ImageList.Items.Count - 1 Then + buttonLast.Enabled = False + buttonNext.Enabled = False + ElseIf ImageList.SelectedIndex < ImageList.Items.Count - 1 Then + buttonLast.Enabled = True + buttonNext.Enabled = True + End If + End Sub + + Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) + buttonFirst = New ThumbnailToolbarButton(My.Resources.first, "First Image") + buttonFirst.Enabled = False + AddHandler buttonFirst.Click, AddressOf buttonFirst_Click + + buttonPrevious = New ThumbnailToolbarButton(My.Resources.prevArrow, "Previous Image") + buttonPrevious.Enabled = False + AddHandler buttonPrevious.Click, AddressOf buttonPrevious_Click + + buttonNext = New ThumbnailToolbarButton(My.Resources.nextArrow, "Next Image") + AddHandler buttonNext.Click, AddressOf buttonNext_Click + + buttonLast = New ThumbnailToolbarButton(My.Resources.last, "Last Image") + AddHandler buttonLast.Click, AddressOf buttonLast_Click + + TaskbarManager.Instance.ThumbnailToolbars.AddButtons(New WindowInteropHelper(Me).Handle, buttonFirst, buttonPrevious, buttonNext, buttonLast) + + ' Set our selection + ImageList.SelectedIndex = 0 + ImageList.Focus() + + If ImageList.SelectedItem IsNot Nothing Then + ImageList.ScrollIntoView(ImageList.SelectedItem) + End If + End Sub + + Private Sub buttonPrevious_Click(ByVal sender As Object, ByVal e As EventArgs) + Dim newIndex As Integer = ImageList.SelectedIndex - 1 + + If newIndex > -1 Then + ImageList.SelectedIndex = newIndex + End If + + ImageList.Focus() + + If ImageList.SelectedItem IsNot Nothing Then + ImageList.ScrollIntoView(ImageList.SelectedItem) + End If + End Sub + + Private Sub buttonNext_Click(ByVal sender As Object, ByVal e As EventArgs) + Dim newIndex As Integer = ImageList.SelectedIndex + 1 + + If newIndex < ImageList.Items.Count Then + ImageList.SelectedIndex = newIndex + End If + + ImageList.Focus() + + If ImageList.SelectedItem IsNot Nothing Then + ImageList.ScrollIntoView(ImageList.SelectedItem) + End If + End Sub + + Private Sub buttonFirst_Click(ByVal sender As Object, ByVal e As EventArgs) + ImageList.SelectedIndex = 0 + ImageList.Focus() + + If ImageList.SelectedItem IsNot Nothing Then + ImageList.ScrollIntoView(ImageList.SelectedItem) + End If + End Sub + + Private Sub buttonLast_Click(ByVal sender As Object, ByVal e As EventArgs) + ImageList.SelectedIndex = ImageList.Items.Count - 1 + ImageList.Focus() + + If ImageList.SelectedItem IsNot Nothing Then + ImageList.ScrollIntoView(ImageList.SelectedItem) + End If + End Sub + + Public Class MyImage + Public Sub New(ByVal sourceImage As ImageSource, ByVal imageName As String) + Image = sourceImage + Name = imageName + End Sub + + Public Overrides Function ToString() As String + Return Name + End Function + + Private privateImage As ImageSource + Public Property Image() As ImageSource + Get + Return privateImage + End Get + Set(ByVal value As ImageSource) + privateImage = value + End Set + End Property + Private privateName As String + Public Property Name() As String + Get + Return privateName + End Get + Set(ByVal value As String) + privateName = value + End Set + End Property + End Class + + Public ReadOnly Property AllImages() As List(Of ShellFile) + Get + Dim pics As ShellContainer = CType(KnownFolders.Pictures, ShellContainer) + + If ShellLibrary.IsPlatformSupported Then + pics = CType(KnownFolders.PicturesLibrary, ShellContainer) + End If + + If picturesList Is Nothing Then + picturesList = New List(Of ShellFile)() + Else + picturesList.Clear() + End If + + ' Recursively get the pictures + GetPictures(pics) + + If picturesList.Count = 0 Then + If TypeOf pics Is ShellLibrary Then + TaskDialog.Show("Pictures library is empty", "Please add some pictures to the library", "No pictures found") + Else + TaskDialog.Show("Pictures folder is empty", "Please add some pictures to your pictures folder", "No pictures found") + End If + End If + + Return picturesList + End Get + End Property + + Private Sub GetPictures(ByVal folder As ShellContainer) + ' Just for demo purposes, stop at 20 pics + If picturesList.Count >= 20 Then + Return + End If + + ' First get the pictures in this folder + For Each sf As ShellFile In folder.OfType(Of ShellFile)() + Dim ext As String = Path.GetExtension(sf.Path).ToLower() + + If ext = ".jpg" OrElse ext = ".jpeg" OrElse ext = ".png" OrElse ext = ".bmp" Then + picturesList.Add(sf) + End If + Next sf + + ' Then recurse into each subfolder + For Each subFolder As ShellContainer In folder.OfType(Of ShellContainer)() + GetPictures(subFolder) + Next subFolder + End Sub + End Class +End Namespace \ No newline at end of file diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/app.manifest b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/app.manifest new file mode 100644 index 00000000..4ddad9b4 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/WPF/app.manifest @@ -0,0 +1,18 @@ + + + + Image Viewer Demo Application + + + + + + + diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Form1.Designer.vb b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Form1.Designer.vb new file mode 100644 index 00000000..2449263d --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Form1.Designer.vb @@ -0,0 +1,156 @@ +Imports Microsoft.VisualBasic +Imports System +Namespace Microsoft.WindowsAPICodePack.Samples.ImageViewerDemoWinforms + Partial Public Class Form1 + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Me.components = New System.ComponentModel.Container + Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1)) + Me.listView1 = New System.Windows.Forms.ListView + Me.pictureBox1 = New System.Windows.Forms.PictureBox + Me.toolStrip1 = New System.Windows.Forms.ToolStrip + Me.toolStripButtonFirst = New System.Windows.Forms.ToolStripButton + Me.toolStripButtonPrevious = New System.Windows.Forms.ToolStripButton + Me.toolStripButtonNext = New System.Windows.Forms.ToolStripButton + Me.toolStripButtonLast = New System.Windows.Forms.ToolStripButton + Me.imageList1 = New System.Windows.Forms.ImageList(Me.components) + CType(Me.pictureBox1, System.ComponentModel.ISupportInitialize).BeginInit() + Me.toolStrip1.SuspendLayout() + Me.SuspendLayout() + ' + 'listView1 + ' + Me.listView1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ + Or System.Windows.Forms.AnchorStyles.Left) _ + Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) + Me.listView1.Location = New System.Drawing.Point(0, 42) + Me.listView1.Name = "listView1" + Me.listView1.Size = New System.Drawing.Size(165, 520) + Me.listView1.TabIndex = 0 + Me.listView1.UseCompatibleStateImageBehavior = False + ' + 'pictureBox1 + ' + Me.pictureBox1.Dock = System.Windows.Forms.DockStyle.Right + Me.pictureBox1.Location = New System.Drawing.Point(165, 0) + Me.pictureBox1.Name = "pictureBox1" + Me.pictureBox1.Size = New System.Drawing.Size(619, 562) + Me.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom + Me.pictureBox1.TabIndex = 1 + Me.pictureBox1.TabStop = False + ' + 'toolStrip1 + ' + Me.toolStrip1.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.toolStripButtonFirst, Me.toolStripButtonPrevious, Me.toolStripButtonNext, Me.toolStripButtonLast}) + Me.toolStrip1.Location = New System.Drawing.Point(0, 0) + Me.toolStrip1.Name = "toolStrip1" + Me.toolStrip1.Size = New System.Drawing.Size(165, 25) + Me.toolStrip1.TabIndex = 2 + Me.toolStrip1.Text = "toolStrip1" + ' + 'toolStripButtonFirst + ' + Me.toolStripButtonFirst.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.toolStripButtonFirst.Enabled = False + Me.toolStripButtonFirst.Image = CType(resources.GetObject("toolStripButtonFirst.Image"), System.Drawing.Image) + Me.toolStripButtonFirst.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None + Me.toolStripButtonFirst.ImageTransparentColor = System.Drawing.Color.Magenta + Me.toolStripButtonFirst.Name = "toolStripButtonFirst" + Me.toolStripButtonFirst.Size = New System.Drawing.Size(23, 22) + Me.toolStripButtonFirst.Text = "First Image" + ' + 'toolStripButtonPrevious + ' + Me.toolStripButtonPrevious.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.toolStripButtonPrevious.Enabled = False + Me.toolStripButtonPrevious.Image = CType(resources.GetObject("toolStripButtonPrevious.Image"), System.Drawing.Image) + Me.toolStripButtonPrevious.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None + Me.toolStripButtonPrevious.ImageTransparentColor = System.Drawing.Color.Magenta + Me.toolStripButtonPrevious.Name = "toolStripButtonPrevious" + Me.toolStripButtonPrevious.Size = New System.Drawing.Size(23, 22) + Me.toolStripButtonPrevious.Text = "Previous Image" + ' + 'toolStripButtonNext + ' + Me.toolStripButtonNext.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.toolStripButtonNext.Enabled = False + Me.toolStripButtonNext.Image = CType(resources.GetObject("toolStripButtonNext.Image"), System.Drawing.Image) + Me.toolStripButtonNext.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None + Me.toolStripButtonNext.ImageTransparentColor = System.Drawing.Color.Magenta + Me.toolStripButtonNext.Name = "toolStripButtonNext" + Me.toolStripButtonNext.Size = New System.Drawing.Size(23, 22) + Me.toolStripButtonNext.Text = "Next Image" + ' + 'toolStripButtonLast + ' + Me.toolStripButtonLast.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image + Me.toolStripButtonLast.Enabled = False + Me.toolStripButtonLast.Image = CType(resources.GetObject("toolStripButtonLast.Image"), System.Drawing.Image) + Me.toolStripButtonLast.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None + Me.toolStripButtonLast.ImageTransparentColor = System.Drawing.Color.Magenta + Me.toolStripButtonLast.Name = "toolStripButtonLast" + Me.toolStripButtonLast.Size = New System.Drawing.Size(23, 22) + Me.toolStripButtonLast.Text = "Last Image" + ' + 'imageList1 + ' + Me.imageList1.ImageStream = CType(resources.GetObject("imageList1.ImageStream"), System.Windows.Forms.ImageListStreamer) + Me.imageList1.TransparentColor = System.Drawing.Color.Transparent + Me.imageList1.Images.SetKeyName(0, "first.ico") + Me.imageList1.Images.SetKeyName(1, "prevArrow.ico") + Me.imageList1.Images.SetKeyName(2, "nextArrow.ico") + Me.imageList1.Images.SetKeyName(3, "last.ico") + ' + 'Form1 + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.ClientSize = New System.Drawing.Size(784, 562) + Me.Controls.Add(Me.listView1) + Me.Controls.Add(Me.toolStrip1) + Me.Controls.Add(Me.pictureBox1) + Me.Name = "Form1" + Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen + Me.Text = "Image Viewer Winforms Demo (with Taskbar Thumbnail toolbar)" + CType(Me.pictureBox1, System.ComponentModel.ISupportInitialize).EndInit() + Me.toolStrip1.ResumeLayout(False) + Me.toolStrip1.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + #End Region + + Private listView1 As System.Windows.Forms.ListView + Private WithEvents pictureBox1 As System.Windows.Forms.PictureBox + Private toolStrip1 As System.Windows.Forms.ToolStrip + Private WithEvents toolStripButtonFirst As System.Windows.Forms.ToolStripButton + Private WithEvents toolStripButtonPrevious As System.Windows.Forms.ToolStripButton + Private WithEvents toolStripButtonNext As System.Windows.Forms.ToolStripButton + Private WithEvents toolStripButtonLast As System.Windows.Forms.ToolStripButton + Private imageList1 As System.Windows.Forms.ImageList + End Class +End Namespace + diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Form1.resx b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Form1.resx new file mode 100644 index 00000000..28f59375 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Form1.resx @@ -0,0 +1,505 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIISURBVDhPpZP7S1NxGMbPPxKaXVUkMEq8IpKUCoY/hGgI + ymqkDYYXcCjDZOANURSjCNGFQUTsl4GXVMxKk62YU4fXQpaIlygHQxBRH8/zwvyaIAYe+HLgnPN8nue9 + HA3nvDTq63oW/jm13XOwvPTB3DYFY5MH+bXfcN8ygfTSMSSXfESicQDxBqdYHwH29g9w2tnZ3UcguIvN + rR3417exuBJE5N1n/wfwLgXEOc38Bc6xNRHb+/y4nm49G0Bnit2zf9H6bkliE/jKuYxrd6oVgDWfjB+K + TWeKMyrGEVfowITvD9re/9ABVQrAhh0HHK+ZselMMaN/mvwtDb+aVqkA7HYIwIj3ysfluPTorJnP6Ezx + oHsD1s5ZXEktUwCOioB5f1CEPR9+wTG6iuiserTo8dkwng7HT/R+XUPF8xlcTjErAOdMcW6NW8STiwG8 + 7vej8oUPN/PsEv3t8Ao0TZP3T1u8uJRkUgAuSYHtO97oLxmXd5t9Ho8aPTK+GzntqNfrLm2fFoihwYOI + xGIF4KjoGBLzY1OrF9k6OOFxnwDC4wxIMX1G0pMhgVyMNyoA13PAtS7OrJk1PrC69LUdQWxuF6IybHrX + LRI7JrtZdoDAo1XmbjMyD+tjSXxGcXRmnYg5ttD9QuxDhN0uUgDOmbvNTpPOJaGAo2K36cyaGZvOFIfd + KlSA8/zRh9ABIDUG+1JpAAAAAElFTkSuQmCC + + + + 122, 17 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w + LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 + ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACu + SAAAAk1TRnQBSQFMAgEBBAEAASABAAEgAQABIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA + AwABQAMAAQEBAAEgBgABgP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A + /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A + /wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8ApgACRwFGAYAkAAHtATwBAwH//wAFAAHtATEBAQH/JAACRwFG + AYCcAAHrAY4BEQH/Ae0BRAETAf8B6wFuAQ0B/xwAAesBmAETAf8B8gGJAWAB/wHrAWIBCgH//wABAAHr + AZsBFAH/AesBWAEIAf8B8gGQAWEB/wGOAXMBQwHfHAAB6wFkAQsB/wHzAYoBYgH/AXoBaAFPAc+QAAHq + AZgBEwH/AeoBYQEKAf8B6gFBAQQB/wHqAZcBEwH/GAAB6QGXARMB/wHpAW0BDAH/AekBNAECAf8B6QGK + ARAB/ygAAwEBAgMgAS4DQgFzA1gBqgNxAc0DfgHZA4IB2gNrAccDVQGgAzsBZQMWAR4DAgEDUAADAQEC + AyABLgNCAXMDWAGqA3EBzQN+AdkDggHaA2sBxwNVAaADOwFlAxYBHgMCAQMoAAHpAZgBEwH/AekBgAEP + Af8B6wFAARkB/wHpAXcBDgH/AekBlwETAf8YAAHqAY0BEQH/AeoBNwECAf8B6gFrAQwB/wHqAZgBEwH/ + iAAB6AGXARMB/wHsAaQBQAH/AfgBvgGtAf8B7AGCATQB/wHoAZcBEwH/EAADDAEQAegBlgESAf8B6wGj + ATYB/wH4AccBswH/AfEBmwFnAf8B6AGWARIB/xsAAQEDBAEGAwsBDwM4AV4DbAHNA+AB/wP0Af8D/gH/ + Av4B/AH/Av4B+wH/Av4B+wH/Av4B/QH/A/0B/wPwAf8DzQH8A1wBtgMtAUUDCwEPAwQBBgMBAQIzAAEB + AwQBBgMLAQ8DOAFeA2wBzQPgAf8D9AH/A/4B/wL+AfwB/wL+AfsB/wL+AfsB/wL+Af0B/wP9Af8D7wH/ + A8wB/ANcAbYDLQFFAwsBDwMEAQYDAQECGAAB6AGWARIB/wHoAZYBEgH/AfMBoQF4Af8B9gG+AaMB/wHp + AZgBGgH/AegBlgESAf8UAAHoAZcBEwH/Ae0BhAFDAf8B9gG1AZ0B/wHrAaQBNQH/AegBlwETAf98AAHn + AZQBEgH/AecBlAESAf8B5wGTARIB/wHtAcIBdwH/AfQB2QGuAf8B8AHEAYYB/wHnAZQBEgH/DAAB5gGU + ARIB/wHmAZQBEgH/AeYBlAESAf8B6gG6AWUB/wHvAcgBigH/AfIB0AGeAf8B5gGUARIB/xAAAwEBAgMH + AQkDDgETAyYBOQNnAcgD5gH/Af4C/QH/AeIB6wH0Af8BkQGsAd8B/wFOAYAB0wH/ASUBZAHQAf8BDQFZ + Ac8B/wERAVoBzwH/ASoBaAHRAf8BWwGHAdQB/wGhAboB4wH/Ae8B9QH3Af8D+wH/A9cB/gNWAagDHQEp + Aw8BFAMHAQoDAgEDIAADAQECAwcBCQMOARMDJgE5A2cByAPmAf8C/gH9Af8B4gHrAfQB/wGRAawB3wH/ + AU4BgAHTAf8BJQFkAdAB/wENAVkBzwH/AREBWgHPAf8BKgFoAdEB/wFbAYcB0wH/AaABuQHjAf8B7wH1 + AfcB/wP7Af8D1wH+A1UBqAMdASkDDwEUAwcBCgMCAQMQAAHmAZQBEgH/AeYBlAESAf8B6wG0AWMB/wHv + AccBhwH/AfMB1wGnAf8B5gGUARIB/wHmAZQBEgH/AeYBlAESAf8MAAHnAZQBEgH/AfMB1AGnAf8B9AHZ + Aa4B/wHzAdcBpwH/AecBkwESAf8B5wGUARIB/wGvAX8BMgHvcAAB5QGSARIB/wHlAZIBEgH/AeUBkgES + Af8B5gGsAUoB/wHkAaIBOQH/AeEBmAEoAf8B6wGxAVwB/wHlAZIBEgH/CAAB5QGSARIB/wHlAZIBEgH/ + AeUBkgESAf8B5gGrAUgB/wHkAaEBOAH/AeIBlwEnAf8B7AG7AXQB/wHlAZIBEgH/CwABAQMEAQYDCwEP + AxMBGgM4AVwDowHwA/kB/wHgAeoB8wH/AVYBhwHVAf8BAAFLAdEB/wEAAUsB0wH/AQABTQHUAf8BAAFP + AdQB/wEAAVEB1AH/AQABUQHUAf8BAAFOAdMB/wEAAUwB1AH/AQABSgHSAf8BCwFSAdAB/wF2AZwB2QH/ + AfEB9gH4Af8D8gH/A30B3AMoATwDFAEbAwwBEAMFAQcDAAEBEwABAQMEAQYDCwEPAxMBGgM4AVwDowHw + AvkB+AH/AeAB6gH0Af8BVgGHAdYB/wEAAUsB0QH/AQABTAHTAf8BAAFNAdQB/wEAAU8B1AH/AQABUQHU + Af8BAAFRAdQB/wEAAU4B0wH/AQABSwHTAf8BAAFJAdEB/wELAVIBzwH/AXYBnAHZAf8B8QH2AfgB/wPy + Af8DfQHcAygBPAMUARsDDAEQAwUBBwMAAQEIAAHlAZIBEgH/AeUBkgESAf8B3wGNARgB/wHiAZgBKgH/ + AeQBowE6Af8B5gGsAUsB/wHlAZIBEgH/AeUBkgESAf8B5QGSARIB/wgAAeUBkgESAf8B7QG8AXYB/wHi + AZkBKgH/AeQBowE7Af8B5gGuAUwB/wHlAZIBEgH/AeUBkgESAf8B5QGSARIB/2QAAxcBIAHjAY8BEQH/ + AeMBjwERAf8B8wHcAbMB/wHkAacBRAH/AeEBnQEzAf8B4AGSASIB/wHdAYcBEQH/AegBrAFYAf8B4wGP + AREB/wMeASsB4wGPAREB/wHjAY8BEQH/AfQB3AGzAf8B5AGnAUMB/wHiAZ0BMQH/Ad8BkQEhAf8B3gGJ + ARQB/wHrAbgBcgH/AeMBjwERAf8HAAEBAwUBBwMNAREDFAEbAzgBXgO+AfgC/QH8Af8BnwG7AeQB/wEH + AVEB0QH/AQABTQHVAf8BAAFTAdcB/wEAAWgB5QH/AQABcwHtAf8BAAF0AfAB/wEAAXQB8QH/AQABdAHw + Af8BAAF0Ae8B/wEAAXEB7AH/AQABYwHhAf8BAAFPAdMB/wEAAU0B1AH/ARwBXAHQAf8BxgHXAewB/wL5 + AfgB/wOLAeYDKQE+AxQBHAMNARIDBgEIAwEBAgsAAQEDBQEHAw0BEQMUARsDOAFeA74B+AP9Af8BoAG8 + AeUB/wEIAVEB0gH/AQABTgHWAf8BAAFTAdcB/wEAAWgB5gH/AQABcwHuAf8BAAF0AfAB/wEAAXQB8QH/ + AQABdAHwAf8BAAF0Ae8B/wEAAXEB6wH/AQABYwHgAf8BAAFPAdIB/wEAAU0B1AH/ARwBXAHPAf8BxgHW + AesB/wL5AfgB/wOLAeYDKQE+AxQBHAMNARIDBgEIAwEBAgQAAeMBjwERAf8B4wGPAREB/wHdAYgBFAH/ + Ad4BiQEVAf8B4AGTASMB/wHiAZ4BNAH/AeQBqAFFAf8B8AHLAZAB/wHjAY8BEQH/AeMBjwERAf8EAAHj + AY8BEQH/AeoBtgFwAf8B3QGIARMB/wHgAZQBJAH/AeIBngE2Af8B5AGpAUcB/wHtAb4BcwH/AeMBjwER + Af8B4wGPAREB/1wAAeIBjQERAf8B4gGNAREB/wHiAY0BEQH/AeUBsAFVAf8B4wGjAT4B/wHgAZgBLQH/ + Ad0BjQEdAf8B2wGEAQ8B/wHbAYIBDwH/AecBqgFYAf8B4QGNARAB/wGSAXIBPgHkAeEBjQEQAf8B5AGt + AU8B/wHiAaIBPQH/Ad8BlwEsAf8B3gGMARwB/wHcAYYBEwH/AdsBhQETAf8B6AG0AW8B/wHhAY0BEAH/ + BAADBAEFAwsBDwMTARoDLAFDA68B9AL9AfwB/wGEAaYB3wH/AQABTwHXAf8BAAFQAdYB/wEAAWkB6AH/ + AQABdQHzAf8BAAF3AfgB/wEAAXkB+wH/AQABewH9Af8BAAF7Af0B/wEAAXsB/QH/AQABegH8Af8BAAF4 + AfoB/wEAAXYB9gH/AQABdAHxAf8BAAFiAeIB/wEAAU8B1QH/AQQBUQHSAf8BsgHJAegB/wP3Af8DewHb + Ax4BKwMUARsDDAEQAwQBBgMAAQEEAAMEAQUDCwEPAxMBGgMsAUMDrwH0Av0B/AH/AYQBpgHfAf8BAAFQ + AdgB/wEAAVAB1wH/AQABagHpAf8BAAF2AfQB/wEAAXgB+QH/AQABegH8Af8BAAF7Af0B/wEAAYAB/QH/ + AQABewH9Af8BAAF6AfwB/wEAAXgB+QH/AQABdgH1Af8BAAF0AfAB/wEAAWIB4QH/AQABTwHUAf8BBAFR + AdEB/wGyAckB5wH/A/cB/wN7AdsDHgErAxQBGwMMARADBAEGAwABAQHhAY0BEAH/AeEBjQEQAf8B2QGB + AQ8B/wHbAYUBEwH/AdwBhgETAf8B3gGNAR4B/wHgAZgBLgH/AeIBowFAAf8B7AHEAYQB/wHhAY0BEAH/ + AYkBbAFEAd4B4QGNARAB/wHpAbQBbwH/AdsBggEPAf8B2wGEAQ8B/wHeAY4BHwH/AeABmQEvAf8B4wGk + AUEB/wHtAcsBkAH/AeIBjQERAf8B4gGNAREB/wHiAY0BEQH/UAAB4AGLARAB/wHgAYsBEAH/AeABiwEQ + Af8B4gGoAUoB/wHgAZ0BOQH/Ad4BkgEnAf8B2wGHARYB/wHZAYEBDwH/AdkBgAEPAf8B2AF7AQ8B/wHj + AZgBMgH/AeABigEQAf8BkgFwAT4B5AHiAagBSAH/AeABnQE4Af8B3gGSASYB/wHbAYcBFgH/AdoBhAET + Af8B2gGDARMB/wHYAXsBDgH/AecBsgFuAf8B4AGKARAB/wMBAQIDBwEJAw8BFAMYASIDdAHUA/gB/wGY + AbcB5AH/AQABUQHZAf8BAAFUAdkB/wEAAXMB8AH/AQABeAH5Af8BAAF7Af0B/wEAAYMB/gH/AQABhQL/ + AQABhwL/AQABiAL/AQABiAL/AQABhgL/AQABhAH+Af8BAAGBAf4B/wEAAXoB+wH/AQABdgH1Af8BAAFt + AesB/wEAAVAB1gH/AQUBUwHUAf8ByQHYAe0B/wPvAf8DVAGlAxYBHwMQARUDBwEJAwEBAgMBAQIDBwEJ + Aw8BFAMYASIDdQHUA/gB/wGYAbcB5QH/AQABUgHaAf8BAAFUAdoB/wEAAXMB8gH/AQABeAH6Af8BAAGA + Af0B/wEAAYMB/gH/AQABhgL/AQABhwL/AQABiAL/AQABhwL/AQABhgL/AQABhAL/AQABgQH+Af8BAAF5 + AfsB/wEAAXYB9AH/AQABbQHqAf8BAAFQAdUB/wEFAVMB0wH/AcgB2AHsAf8D7wH/A1QBpQMWAR8DEAEV + AwcBCQMBAQIB4AGKARAB/wHgAYoBEAH/AdcBeQEOAf8B2AF7AQ4B/wHaAYMBEwH/AdoBhAETAf8B2wGI + ARgB/wHeAZMBKQH/AeEBngE6Af8B4gGpAUsB/wGJAWwBRAHeAeABigEQAf8B5AGeAT4B/wHYAXsBDwH/ + AdkBgAEPAf8B2gGBAQ8B/wHcAYgBGAH/Ad4BlAEpAf8B4QGfATsB/wHjAaoBTQH/AeABiwEQAf8B4AGL + ARAB/wHgAYsBEAH/RAADMgFQAd4BiAEPAf8B3gGIAQ8B/wHzAdwBtwH/AeEBowFEAf8B3gGYATMB/wHb + AY0BIgH/AdkBgQERAf8B2AF7AQ8B/wHXAXkBDgH/AdcBegEOAf8B2QGAAQ8B/wHhAZYBMQH/AewBwgGG + Af8BkgF6AVMB5AHeAZcBMgH/AdsBjAEhAf8B2QGCARQB/wHZAYEBEgH/AdcBeQEOAf8B1gF4AQ4B/wHV + AXcBDgH/AeYBsAFtAf8B3gGIAQ8B/wMBAQIDBwEKAxABFgNEAXoD5wH/AdQB4gHxAf8BAwFVAdcB/wEA + AVUB2wH/AQABdQHzAf8BAAF7AfwB/wEAAYQB/gH/AQABiAL/AQABjAL/AQIBkAL/AUsBsgL/AQABkQL/ + AQABkgL/AQABkAL/AQABjgL/AQABigL/AQABhgL/AQABggH+Af8BAAF5AfgB/wEAAW4B7AH/AQABUwHY + Af8BHwFjAdUB/wHzAfcB+AH/A8wB/AMvAUoDEQEXAwcBCgMBAQIDAQECAwcBCgMQARYDRAF6A+gB/wHV + AeIB8gH/AQMBVgHZAf8BAAFVAdwB/wEAAXYB9AH/AQABgAH9Af8BAAGFAv8BAAGJAv8BAAGNAv8BAAGQ + Av8BAAGSAv8BAAGSAv8BAAGSAv8BMAGnAv8BHgGaAv8BAAGKAv8BAAGFAv8BAAGBAf4B/wEAAXgB9wH/ + AQABbgHrAf8BAAFSAdgB/wEfAWIB1AH/AfIB9gH3Af8DywH8Ay8BSgMRARcDBwEKAwEBAgHeAYgBDwH/ + Ad4BiAEPAf8B1QF2AQ0B/wHWAXcBDgH/AdYBeAEOAf8B1wF6AQ8B/wHZAYIBEgH/AdoBgwEUAf8B3AGO + ASMB/wHeAZkBNAH/AYkBdwFVAd4B7AHAAYIB/wHiAZwBPgH/AdkBgAEPAf8B1gF4AQ4B/wHXAXoBDwH/ + AdgBewEPAf8B2gGDARMB/wHcAY4BJAH/Ad4BmgE1Af8B4QGlAUYB/wHyAdcBrQH/Ad4BiAEPAf8B3gGI + AQ8B/zwAAd0BhgEPAf8B3QGGAQ8B/wHdAYYBDwH/AeEBqgFQAf8B3wGeAT8B/wHcAZMBLgH/AdoBiAEc + Af8B1wF6AQ8B/wHWAXkBDwH/AdYBdwEOAf8B1gF3AQ0B/wHWAXgBDgH/AdYBeQEOAf8B4gGmAVIB/wHe + AZcBMAH/AZIBdAFLAeQB2gGHARsB/wHYAYABEgH/AdcBewESAf8B1QF3AQ4B/wHVAXUBDQH/AdQBdAEN + Af8B0wFzAQ0B/wHkAa4BbQH/AdwBhQEPAf8DAQECAwcBCQMSARkDiQHjAvwB+wH/AUMBgQHcAf8BAAFV + Ad4B/wEAAXEB8AH/AQABggH9Af8BAAGHAv8BAAGNAv8BAAGTAv8BAgGXAv8BtAHfAv8B/gP/AWUByAL/ + AQABngL/AQABnQL/AQABmQL/AQABlQL/AQABkAL/AQABigL/AQABhQH+Af8BAAF7AfoB/wEAAWYB5wH/ + AQABVAHbAf8BgQGmAeAB/wP0Af8DWgG0AxABFgMHAQoDAQECAwEBAgMHAQkDEgEZA4kB4wL8AfsB/wFD + AYEB3QH/AQABVQHeAf8BAAFyAfIB/wEAAYMB/gH/AQABiAL/AQABjgL/AQABkwL/AQABmAL/AQABnAL/ + AQABngL/AQABnwL/ATEBswL/Ae8B+gL/AeAB8wL/AR0BnwL/AQABjwL/AQABigL/AQABhAH+Af8BAAF7 + AfgB/wEAAWYB5gH/AQABVAHaAf8BgQGlAd8B/wP0Af8DWgG0AxABFgMHAQoDAQECAdwBhQEPAf8B3AGF + AQ8B/wHSAXIBDQH/AdMBcwENAf8B1AF0AQ0B/wHVAXUBDQH/AdUBdwEOAf8B1wF7ARIB/wHYAYABEgH/ + AdoBiAEdAf8BiQFyAU4C3gGXATAB/wHkAa0BYgH/AdYBeQEOAf8B1gF3AQ4B/wHWAXcBDQH/AdYBdwEO + Af8B1gF5AQ8B/wHXAXoBDwH/AdoBiQEeAf8B3QGVAS8B/wHfAaABQQH/AeQBtAFkAf8B3QGGAQ8B/wHd + AYYBDwH/Ad0BhgEPAf8wAAHbAYQBDwH/AdsBhAEPAf8B3wGSASkB/wHfAaUBSgH/Ad0BmQE5Af8B2gGO + AScB/wHXAYIBFgH/AdUBeAEPAf8B1QF2AQ4B/wHUAXQBDQH/AdMBcwENAf8B0wFzAQ0B/wHWAXoBFwH/ + AdYBhgEiAf8B3wGdAUYB/wHaAYoBHwH/AZABawFCAeQB1gF6ARIB/wHWAXgBEQH/AdQBdAENAf8B0wFz + AQ0B/wHSAXIBDQH/AdIBcQEMAf8B0QFwAQwB/wHjAawBbQH/AdsBgwEPAf8DAAEBAwQBBgM0AVQD5AH/ + AcwB3QHwAf8BAAFVAd0B/wEAAWAB5QH/AQABgQH9Af8BAAGGAv8BAAGNAv8BAAGTAv8BAgGaAv8BtAHg + Cv8B/QP/AWUBzwL/AQABpgL/AQABogL/AQABnQL/AQABlwL/AQABkAL/AQABigL/AQABgwH+Af8BAAF6 + AfgB/wEAAVgB3gH/AQ0BXgHaAf8B8wH2AfcB/wPBAfkDGgEkAwUBBwMAAQEDAAEBAwQBBgM0AVQD5QH/ + AcwB3gHxAf8BAAFVAd4B/wEAAWEB5wH/AQABggH+Af8BAAGHAv8BAAGOAv8BAAGUAv8BAAGbAv8BAAGg + Av8BAAGlAv8BAAGnAv8BNAG9Av8B7wH7Cv8B4AHzAv8BHQGhAv8BAAGPAv8BAAGJAv8BAAGDAf4B/wEA + AXkB9wH/AQABWAHdAf8BDQFdAdkB/wHyAfUB9gH/A8AB+QMaASQDBQEHAwABAQHbAYMBDwH/AdsBgwEP + Af8B0AFvAQwB/wHRAXABDAH/AdIBcQEMAf8B0gFyAQ0B/wHTAXMBDQH/AdQBdAENAf8B1gF4AREB/wHW + AXoBEgH/AYgBaQFIAd4B2gGLASAB/wHgAaMBUwH/AdYBhQEhAf8B1AF1AQ0B/wHUAXQBDQH/AdMBdAEN + Af8B1AF1AQ0B/wHVAXcBDgH/AdYBeAEPAf8B1wGDARgB/wHaAY8BKQH/Ad0BmwE7Af8B3wGmAU0B/wHb + AYQBDwH/AdsBhAEPAf8B2wGEAQ8B/yQAAVMBUQFOAZ8B2gGBAQ8B/wHaAYEBDwH/AfAB1gGuAf8B3QGf + AUUB/wHbAZQBMwH/AdgBiAEiAf8B1QF4ARAB/wHUAXUBDgH/AdMBcwENAf8B0gFyAQ0B/wHSAXEBDAH/ + AdEBcAEMAf8B0wF5ARsB/wHSAXgBGAH/AdMBeQEZAf8B3AGSAToB/wHWAXoBEQH/AZABaQE/AeQB0wFz + AQ0B/wHSAXIBDAH/AdEBcAEMAf8B0AFvAQwB/wHQAW4BDAH/Ac8BbQEMAf8BzgFsAQsB/wHhAakBbAH/ + AdkBgQEPAf8EAAMBAQIDUAGZAfEC8AH/AW0BngHjAf8BAAFaAeIB/wEAAXUB9gH/AQABhgL/AQABjgL/ + AQABlQL/AQIBnQL/AbQB4hL/AaIB5gL/AQABsgL/AQABrQL/AQABpwL/AQABoAL/AQABmQL/AQABkQL/ + AQABigL/AQABgwH+Af8BAAFqAewB/wEAAVcB3gH/AakBxAHqAf8D5gH/AzoBYgMCAQMIAAMBAQIDUAGZ + A/IB/wFtAZ8B5AH/AQABWwHkAf8BAAF2AfcB/wEAAYgC/wEAAY8C/wEAAZYC/wEAAZ4C/wEAAaUC/wEA + AawC/wEAAbEC/wEAAbQC/wFQAdUC/wH7D/8B4AH0Av8BHQGiAv8BAAGQAv8BAAGJAv8BAAGDAf0B/wEA + AWkB6wH/AQABVwHdAf8BqQHDAegB/wPlAf8DOgFiAwIBAwQAAdkBgQEPAf8B2QGBAQ8B/wHOAWsBCwH/ + Ac8BbAELAf8BzwFuAQwB/wHQAW8BDAH/AdEBcAEMAf8B0gFxAQwB/wHSAXIBDQH/AdMBcwENAf8BhAFn + AUQB3gHXAXsBEQH/Ad0BmQFHAf8B0wF5ARkB/wHSAXgBFwH/AdMBeAEaAf8B0QFwAQwB/wHSAXEBDAH/ + AdIBcgENAf8B0wFzAQ0B/wHUAXUBDgH/AdYBeQESAf8B2AGKASQB/wHbAZUBNQH/Ad4BoQFHAf8B8QHa + AbQB/wHaAYEBDwH/AdoBgQEPAf8DDAEQGAAB2AF7AQ4B/wHYAXsBDgH/AdgBewEOAf8B3gGmAVAB/wHb + AZoBPgH/AdgBjgEtAf8B1gGCARwB/wHTAXQBDgH/AdIBcwEOAf8B0gFxAQwB/wHRAXABDAH/AdABbwEM + Af8BzwFuAQwB/wHPAWwBCwH/Ac8BbwEPAf8B0AFxARIB/wHPAXEBEAH/AdkBiwExAf8B1AF3AQ8B/wGO + AWcBPAHkAdABbwEMAf8B0AFuAQwB/wHPAW0BDAH/Ac4BbAELAf8BzQFrAQsB/wHNAWoBCwH/AcwBaQEL + Af8B4AGnAWsB/wHYAXsBDgH/BwABAQN1AdIC9gHzAf8BKAFzAeEB/wEAAV4B5wH/AQABgwH+Af8BAAGJ + Av8BAAGRAv8BAwGaAv8BtAHhEv8BowHpAv8BAAG8Av8BAAG5Av8BAAG0Av8BAAGtAv8BAAGlAv8BAAGc + Av8BAAGUAv8BAAGNAv8BAAGGAv8BAAF3AfkB/wEAAVsB4wH/AWIBmgHiAf8D7QH/A1ABlw8AAQEDdQHS + AvcB9QH/ASkBdAHiAf8BAAFeAegB/wEAAYQB/gH/AQABigL/AQABjwL/AQABlwL/AQABoAL/AQABqAL/ + AQABrwL/AQABtgL/AQABugL/AQABuwL/AVIB2AL/AfkB/g7/AeAB8wL/AR0BnwL/AQABjAL/AQABhQH+ + Af8BAAF3AfcB/wEAAVoB4QH/AWIBmQHhAf8D7AH/A1ABlwgAAdgBewEOAf8B2AF7AQ4B/wHLAWcBCgH/ + AcwBaQELAf8BzQFqAQsB/wHNAWsBCwH/Ac4BbAELAf8BzwFtAQwB/wHQAW4BDAH/AdABbwEMAf8BgwFl + AUMB3gHVAXcBDwH/AdoBkAE9Af8BzwFxAREB/wHPAXEBEQH/Ac8BbwEPAf8BzwFsAQsB/wHPAW4BDAH/ + AdABbwEMAf8B0QFwAQwB/wHSAXEBDAH/AdIBcwEOAf8B0wF0AQ4B/wHWAYQBHgH/AdkBjwEvAf8B2wGc + AUAB/wHeAacBUwH/AdgBewEOAf8B2AF7AQ4B/wHYAXsBDgH/EAAB1gF4AQ4B/wHWAXgBDgH/AeUBrgFn + Af8B3AGhAUoB/wHZAZUBOQH/AdYBiQEnAf8B0wF5ARUB/wHRAXEBDQH/AdABcAENAf8B0AFuAQwB/wHP + AW0BDAH/Ac4BbAELAf8BzQFrAQwB/wHNAWoBCwH/AcwBaQELAf8BzAFqAQ0B/wHMAWoBDQH/Ac0BawEN + Af8B1wGIATAB/wHSAXEBDQH/AY0BZAE8AeQBzgFsAQsB/wHNAWsBCwH/Ac0BagELAf8BzAFpAQsB/wHL + AWcBCgH/AcoBZgEKAf8BygFlAQoB/wHfAaUBawH/AdYBeAEOAf8EAAMNARIDtAHzAfAB8gHxAf8BAwFg + AeMB/wEAAXEB+gH/AQABkAL/AQABkgL/AQMBmAL/AbQB4Rb/AfYB/QL/AfYB/QL/AfYB/QL/AfYB/QL/ + AfYB/AL/AfYB/AL/AfYB/AL/AfYB+wL/AfQB+wL/AYYByAL/AQABjQL/AQABaAHzAf8BNwGAAeEB/wHw + Ae8B7gH/A2UBvQwAAw0BEgO1AfMB8QH0AfMB/wEEAWEB5QH/AQABcgH7Af8BAAGRAv8BIwGmAv8B0AHs + Av8B0AHtAv8B0AHvAv8B0AHxAv8B0AHyAv8B0AHzAv8B0AH0Av8B0AH0Av8BzgH0Av8B8wH9Ev8B4AHz + Av8BHAGeAv8BAAGOAv8BAAGMAv8BAAFnAfIB/wE2AYAB4AH/Ae8B7gHtAf8DZQG9CAAB1gF4AQ4B/wHW + AXgBDgH/AckBZAEKAf8BygFlAQoB/wHKAWYBCgH/AcsBZwEKAf8BzAFpAQsB/wHNAWoBCwH/Ac0BawEL + Af8BzgFsAQsB/wGDAWQBQwHeAdIBcQENAf8B2AGOAT0B/wHNAWoBDAH/Ac0BawENAf8BzQFrAQ0B/wHM + AWkBCwH/Ac0BagELAf8BzgFrAQsB/wHPAWwBCwH/Ac8BbgEMAf8B0AFuAQwB/wHQAXABDQH/AdEBcQEN + Af8B1AF6ARgB/wHXAYsBKQH/AdkBlgE7Af8B3AGiAUwB/wHXAYABFQH/AdYBeAEOAf8B1gF4AQ4B/wgA + AdUBNAECAf8B2QFHARsB/wH6AfIB5AH/AegBtAFkAf8B4gGeATYB/wHgAZQBJAH/Ad4BigEUAf8B3gGH + ARAB/wHeAYcBDwH/Ad4BhwEPAf8B3gGHAQ8B/wHeAYcBDwH/Ad4BhwEQAf8B3gGHAQ8B/wHeAYcBDwH/ + Ad4BhwEPAf8B3gGIARAB/wHeAYgBEAH/Ad4BiAEPAf8B4wGZATIB/wHcAYQBDwH/AZIBcAE+AeQB3wGJ + ARAB/wHfAYkBEAH/Ad8BiQEQAf8B3wGJARAB/wHfAYkBEAH/Ad8BiQEQAf8B3wGJARAB/wHsAbgBbwH/ + AdUBdQENAf8EAAMaASQD2QH+AeMB6QHuAf8BAAFeAecB/wEAAXcB/AH/AQABkwL/AQIBnAL/AbUB4T7/ + AY0BzAL/AQABkAL/AQABbQH4Af8BGgFxAeMB/wHwAe8B7AH/A3cB0wwAAxoBJAPbAf4B5AHrAfAB/wEA + AV8B6QH/AQABdwH9Af8BAAGTAv8BLAGxPv8B3wHzAv8BHQGiAv8BAAGPAv8BAAFsAfYB/wEaAXAB4gH/ + Ae8B7gHrAf8DdwHTCAAB1QF1AQ0B/wHVAXUBDQH/Ad8BiQEQAf8B3wGJARAB/wHfAYkBEAH/Ad8BiQEQ + Af8B3wGJARAB/wHfAYkBEAH/Ad8BiQEQAf8B3wGJARAB/wGJAWwBRAHeAdwBhAEPAf8B5QGgAT8B/wHe + AYgBDwH/Ad4BiAEQAf8B3gGIARAB/wHeAYcBDwH/Ad4BhwEPAf8B3gGHARAB/wHeAYcBEAH/Ad4BhwEP + Af8B3gGHAQ8B/wHeAYcBDwH/Ad4BhwEPAf8B3gGHARAB/wHfAYsBFgH/AeABlQEnAf8B4gGfATgB/wHq + Ab0BdgH/AfYB1wHKAf8B1QE0AQIB/wHVATQBAgH/BAAB0wFzAQ0B/wHTAXMBDQH/AdcBgwEjAf8B6AGs + AU0B/wHjAZcBIQH/AeIBjgESAf8B4gGOARIB/wHiAY4BEQH/AeIBjgERAf8B4gGOAREB/wHiAY4BEQH/ + AeIBjgERAf8B4gGOAREB/wHiAY4BEQH/AeIBjgERAf8B4gGOAREB/wHiAY4BEgH/AeIBjgERAf8B4gGO + AREB/wHnAZ8BMwH/Ad4BiAEQAf8BlgF0AT8B5AHjAY8BEQH/AeMBjwERAf8B4wGPAREB/wHjAY8BEQH/ + AeMBjwERAf8B4wGPAREB/wHjAY8BEQH/Ae4BvAFwAf8B0wFzAQ0B/wQAAxoBJQPcAf4B4AHnAewB/wEA + AWAB6gH/AQABeQH9Af8BAAGVAv8BAAGfAv8BqwHiPv8BjQHOAv8BAAGTAv8BAAFwAfoB/wEZAXIB5QH/ + Ae4B7QHqAf8DegHUDAADGgElA90B/gHhAegB7gH/AQABYQHsAf8BAAF7Af4B/wEAAZcC/wEsAbQ+/wHm + AfgC/wEjAakC/wEAAZIC/wEAAW8B+AH/ARkBcQHkAf8B7QHsAegB/wN6AdQIAAHTAXMBDQH/AdMBcwEN + Af8B4wGPAREB/wHjAY8BEQH/AeMBjwERAf8B4wGPAREB/wHjAY8BEQH/AeMBjwERAf8B4wGPAREB/wHj + AY8BEQH/AYoBbQFEAt4BiAEPAf8B6AGlAUAB/wHiAY4BEQH/AeIBjgERAf8B4gGOAREB/wHiAY4BEQH/ + AeIBjgERAf8B4gGOAREB/wHiAY4BEQH/AeIBjgERAf8B4gGOAREB/wHiAY4BEQH/AeIBjgERAf8B4gGO + AREB/wHiAY4BEgH/AeIBjwETAf8B5AGYASMB/wHvAcUBhwH/AdYBgAEdAf8B0wFzAQ0B/wFcAVYBUQGv + DAAB0gFxAQwB/wHSAXEBDAH/AfABvwF1Af8B5wGWARMB/wHnAZYBEgH/AecBlgESAf8B5wGWARIB/wHn + AZYBEgH/AecBlgESAf8B5wGWARIB/wHnAZYBEgH/AecBlgESAf8B5wGWARIB/wHnAZYBEgH/AecBlgES + Af8B5wGWARIB/wHnAZYBEgH/AesBpQE0Af8B4gGNAREB/wGYAXQBQQHkAegBlwETAf8B6AGXARMB/wHo + AZcBEwH/AegBlwETAf8B6AGXARMB/wHoAZcBEwH/AegBlwETAf8B8QHBAXEB/wHSAXEBDAH/BAADDwEU + A7wB9AHnAeoB6QH/AQEBZgHqAf8BAAF4Af4B/wEAAZUC/wEAAZ0C/wEAAacC/wGsAeUW/wHQAfgC/wHQ + AfYC/wHQAfYC/wHQAfUC/wHQAfUC/wHQAfMC/wHQAfEC/wHQAe8C/wHQAe0C/wFvAcQC/wEAAZIC/wEA + AW8B+gH/ATQBhAHoAf8B6QHoAeYB/wNoAcAMAAMPARQDvQH0AegC6wH/AQEBZgHsAf8BAAF5Av8BAAGX + Av8BKgGyAv8B9wH8Av8B9gH8Av8B9gH8Av8B9gH9Av8B9gH9Av8B9gH9Av8B9gH9Av8B9gH9Av8B9gH9 + Av8B/AH+Ev8B5gH5Av8BJAGwAv8BAAGYAv8BAAGRAv8BAAFuAfgB/wE0AYQB5gH/AegB5wHlAf8DaAHA + CAAB0gFxAQwB/wHSAXEBDAH/AegBlwETAf8B6AGXARMB/wHoAZcBEwH/AegBlwETAf8B6AGXARMB/wHo + AZcBEwH/AegBlwETAf8B6AGXARMB/wGNAXIBRAHeAeEBjAEQAf8B7AGrAUEB/wHnAZYBEgH/AecBlgES + Af8B5wGWARIB/wHnAZYBEgH/AecBlgESAf8B5wGWARIB/wHnAZYBEgH/AecBlgESAf8B5wGWARIB/wHn + AZYBEgH/AecBlgESAf8B5wGWARIB/wHnAZYBEgH/AecBlgETAf8B3QGSATUB/wHSAXEBDAH/AdIBcQEM + Af8YAAHQAW8BDAH/AdABbwEMAf8B0AFvAQwB/wHsAZwBFAH/AewBnAEUAf8B7AGcARQB/wHsAZwBFAH/ + AewBnAEUAf8B7AGcARQB/wHsAZwBFAH/AewBnAEUAf8B7AGcARQB/wHsAZwBFAH/Ae0BoQEfAf8B7AGc + ARQB/wHsAZ0BFAH/Ae8BqwE1Af8B5QGRAREB/wGZAXoBQQHkAe0BngEUAf8B7QGeARQB/wHtAZ4BFAH/ + Ae0BngEUAf8B7QGeARQB/wHtAZ4BFAH/Ae0BngEUAf8B9AHFAXEB/wHQAW4BDAH/BAADAQECA38B1gHp + AegB5QH/ASUBeQHrAf8BAAF1Af0B/wEAAZcC/wEAAZ4C/wEAAaYC/wEBAbAC/wGsAegS/wGhAfEC/wEA + AdMC/wEAAc8C/wEAAc0C/wEAAcYC/wEAAb0C/wEAAbMC/wEAAagC/wEAAaAC/wEAAZkC/wEAAZAC/wEA + AWwB9wH/AVwBnwHrAf8D5AH/A1IBmwwAAwEBAgN/AdYC6QHmAf8BJQF6Ae0B/wEAAXYB/QH/AQABmAL/ + AQABnwL/AQABpwL/AQABsQL/AQABuwL/AQABxAL/AQABzQL/AQAB0gL/AQAB0wL/AQAB0wL/AUkB3wL/ + AfkB/g7/AeYB+gL/ASMBuAL/AQABoQL/AQABmQL/AQABjwL/AQABbAH2Af8BXAGeAeoB/wPjAf8DUgGb + CAAB0AFuAQwB/wHQAW4BDAH/Ae0BngEUAf8B7QGeARQB/wHtAZ4BFAH/Ae0BngEUAf8B7QGeARQB/wHt + AZ4BFAH/Ae0BngEUAf8B7QGeARQB/wGOAXMBRwHeAeQBkAERAf8B8AGxAUIB/wHsAZ0BFAH/AewBnAEU + Af8B7QGgAR4B/wHsAZwBFAH/AewBnAEUAf8B7AGcARQB/wHsAZwBFAH/AewBnAEUAf8B7AGcARQB/wHs + AZwBFAH/AewBnAEUAf8B7AGcARQB/wHsAZwBFAH/AdABbwEMAf8B0AFvAQwB/wHQAW8BDAH/IAABogFm + AS4B7wHPAWwBCwH/Ac8BbAELAf8B8gGsASoB/wHxAaQBFQH/AfEBpAEVAf8B8QGkARUB/wHxAaQBFQH/ + AfEBpAEVAf8B8QGkARUB/wHxAaQBFQH/AfEBpAEVAf8B7QGfARQB/wHrAZ0BGwH/AfEBpAEVAf8B8wGy + ATcB/wHnAZYBEwH/AZoBewFCAeQB8QGlARYB/wHxAaUBFgH/AfEBpQEWAf8B8QGlARYB/wHxAaUBFgH/ + AfEBpQEWAf8B8QGlARYB/wH3AcoBcwH/Ac4BbAELAf8IAANSAZwD4wH/AWUBpQHvAf8BAAFvAfcB/wEA + AZIC/wEAAZ4C/wEAAaYC/wEAAa4C/wEAAbgC/wGsAeoS/wGlAfQC/wEAAdIC/wEAAcwC/wEAAcUC/wEA + AbwC/wEAAbMC/wEAAaoC/wEAAaIC/wEAAZoC/wEAAYoC/wEAAWoB8gH/AZsBvwHpAf8D5gH/AzoBYhAA + A1IBnAPkAf8BZgGmAfAB/wEAAW8B9wH/AQABkwL/AQABnwL/AQABpwL/AQABsAL/AQABuQL/AQABwQL/ + AQABygL/AQAB0AL/AQAB1AL/AUcB4gL/AfkB/g7/AeUB+gL/ASIBvwL/AQABqQL/AQABoAL/AQABmQL/ + AQABiAL/AQABaQHxAf8BmwG+AekB/wPlAf8DOgFiCAABzgFsAQsB/wHOAWwBCwH/AfEBpQEWAf8B8QGl + ARYB/wHxAaUBFgH/AfEBpQEWAf8B8QGlARYB/wHxAaUBFgH/AfEBpQEWAf8B8QGlARYB/wGPAXcBSAHe + AeYBlAESAf8B9AG3AUMB/wHxAaQBFQH/AeoBmQETAf8B7gGfARQB/wHxAaQBFQH/AfEBpAEVAf8B8QGk + ARUB/wHxAaQBFQH/AfEBpAEVAf8B8QGkARUB/wHxAaQBFQH/AfEBpAEVAf8B9gHJAXIB/wHPAWwBCwH/ + Ac8BbAELAf8COgE5AWAsAAHNAWoBCwH/Ac0BagELAf8B9wHRAZAB/wH2AasBFwH/AfYBqwEXAf8B9gGr + ARcB/wH2AasBFwH/AfYBqwEXAf8B9gGrARcB/wH2AasBFwH/AfEBpAEWAf8B7QGdARQB/wHnAZQBEgH/ + AfcBuAE4Af8B6gGaARMB/wGdAYABQwHkAfYBrAEXAf8B9gGsARcB/wH2AawBFwH/AfYBrAEXAf8B9gGs + ARcB/wH2AawBFwH/AfYBrAEXAf8B+gHOAXMB/wHNAWoBCwH/CAADMgFRA+cB/wG2Ac8B6AH/AQABaQHy + Af8BAAGIAv8BAAGcAv8BAAGjAv8BAAGrAv8BAAGzAv8BAAG6Av8BrAHqDv8BjQHmAv8BAAHKAv8BAAHF + Av8BAAG+Av8BAAG3Av8BAAGvAv8BAAGnAv8BAAGgAv8BAAGZAv8BAAF7Af0B/wEIAWsB7gH/AdoB3wHh + Af8D0wH7AxMBGhAAAzIBUQPoAf8BtgHQAekB/wEAAWkB8wH/AQABiQL/AQABnQL/AQABpAL/AQABrAL/ + AQABtAL/AQABuwL/AQABwwL/AQAByAL/AQABzQL/AScB1gL/AegB+wr/AeQB+gL/ASIBwgL/AQABrgL/ + AQABpgL/AQABnwL/AQABmAL/AQABegH9Af8BCAFrAe0B/wHZAd4B4AH/A9MB+wMTARoIAAHNAWoBCwH/ + Ac0BagELAf8B9gGsARcB/wH2AawBFwH/AfYBrAEXAf8B9gGsARcB/wH2AawBFwH/AfYBrAEXAf8B9gGs + ARcB/wH2AawBFwH/AY8BeAFIAd4B6QGZARMB/wH4AbwBRAH/AecBlQETAf8B7QGeARQB/wHyAaUBFgH/ + AfYBqwEXAf8B9gGrARcB/wH2AasBFwH/AfYBqwEXAf8B9gGrARcB/wH2AasBFwH/AfYBqwEXAf8B3wGd + AVEB/wHNAWoBCwH/Ac0BagELAf84AAHLAWcBCgH/AcsBZwEKAf8BywFnAQoB/wH6AbIBGAH/AfoBsgEY + Af8B+gGyARgB/wH6AbIBGAH/AfoBsgEYAf8B+gGyARgB/wH6AbIBGAH/AfkBsQEYAf8B6QGYARMB/wHc + AY8BLwH/Ae4BtgFeAf8BnwGBAUMB5AH7AbMBGQH/AfsBswEZAf8B+wGzARkB/wH7AbMBGQH/AfsBswEZ + Af8B+wGzARkB/wH7AbMBGQH/Af0B0wF0Af8BywFnAQoB/wgAAwUBBwOfAegB3QHcAdoB/wE2AY0B8gH/ + AQABdQH5Af8BAAGXAv8BAAGhAv8BAAGoAv8BAAGvAv8BAAG1Av8BAAG8Av8BrAHqBv8BjAHjAv8BAAHF + Av8BAAHCAv8BAAG+Av8BAAG5Av8BAAGyAv8BAAGrAv8BAAGkAv8BAAGeAv8BAAGPAv8BAAFvAfUB/wFt + AasB7wH/AtkB2AH/A2ABtRQAAwUBBwOgAegC3QHbAf8BNgGOAfQB/wEAAXYB+QH/AQABmAL/AQABogL/ + AQABqQL/AQABrwL/AQABtgL/AQABvAL/AQABwQL/AQABxAL/AQABxQL/ASUBzgL/AegB+wL/AeQB+gL/ + ASABwwL/AQABsQL/AQABqgL/AQABowL/AQABnQL/AQABjwL/AQABbwH0Af8BbQGqAe4B/wLYAdcB/wNg + AbUMAAHLAWcBCgH/AcsBZwEKAf8B+wGzARkB/wH7AbMBGQH/AfsBswEZAf8B+wGzARkB/wH7AbMBGQH/ + AfsBswEZAf8B+wGzARkB/wH7AbMBGQH/AZEBegFIAd4B7QG3AWYB/wHjAZ0BPgH/AeoBmQETAf8B+gGy + ARgB/wH6AbIBGAH/AfoBsgEYAf8B+gGyARgB/wH6AbIBGAH/AfoBsgEYAf8B+gGyARgB/wH6AbIBGAH/ + AcsBZwEKAf8BywFnAQoB/wHLAWcBCgH/QAABcgFfAUwBzwHKAWUBCgH/AcoBZQEKAv8BuwEiAv8BuQEa + Av8BuQEaAv8BuQEaAv8BuQEaAv8BuQEaAv8BuQEaAv8BuQEaAf8B3AGQATAB/wHJAWUBCgH/AZEBdAFW + AeQB/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wHWAXUB/wHJAWUBCgH/ + DAADQgF2A+AB/wG7AdEB5wH/AQABbAH0Af8BAAGGAf0B/wEAAZ4C/wEAAaQC/wEAAaoC/wEAAbAC/wEA + AbUC/wEAAbkC/wFaAdMC/wEAAbwC/wEAAbwC/wEAAboC/wEAAbcC/wEAAbIC/wEAAa0C/wEAAacC/wEA + AaEC/wEAAZkC/wEAAXoB+gH/ARUBdwHzAf8B0wHZAdwB/wPeAf4DKAE8GAADQgF2A+AB/wG8AdIB6AH/ + AQABbQH1Af8BAAGHAf4B/wEAAZ8C/wEAAaUC/wEAAasC/wEAAbAC/wEAAbUC/wEAAbkC/wEAAbwC/wEA + Ab0C/wEAAbwC/wEoAcUC/wEjAcIC/wEAAbEC/wEAAawC/wEAAaYC/wEAAaAC/wEAAZgC/wEAAXkB+gH/ + ARUBdgHyAf8B0gHYAdwB/wPdAf4DKAE8DAAByQFlAQoB/wHJAWUBCgL/AbkBGgL/AbkBGgL/AbkBGgL/ + AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgH/AYMBYAFCAd4ByQFlAQoB/wHkAZ4BPgL/AbkBGgL/ + AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgL/AdMBbgH/AcoBZQEKAf8BygFlAQoB/wMX + ASBMAAHIAWMBCQH/AcgBYwEJAf8B+QHXAZkC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5 + ARoB/wHxAboBWgH/AcgBYgEJAf8BigFhATwB5AHIAWIBCQL/AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgL/ + AbkBGgL/AbkBGgL/AdYBdQH/AcgBYgEJAf8MAAMGAQgDgwHZAtIB0QH/AYEBtgHxAf8BAAFuAfQB/wEA + AYwB/gH/AQABnwL/AQABpAL/AQABqAL/AQABrAL/AQABsAL/AQABsgL/AQABswL/AQABswL/AQABsQL/ + AQABrgL/AQABqwL/AQABpgL/AQABogL/AQABmwL/AQABhQH8Af8BAAFuAfQB/wGtAcoB6AH/AtQB1QH/ + A1gBphwAAwYBCAODAdkB0wLSAf8BggG2AfIB/wEAAW4B9AH/AQABjQH+Af8BAAGfAv8BAAGlAv8BAAGp + Av8BAAGtAv8BAAGwAv8BAAGyAv8BAAGzAv8BAAGzAv8BAAGxAv8BAAGuAv8BAAGqAv8BAAGlAv8BAAGh + Av8BAAGaAv8BAAGFAfwB/wEAAW4B8wH/Aa0BygHnAf8D1AH/A1gBphAAAcgBYgEJAf8ByAFiAQkC/wG5 + ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoB/wHIAWIBCQH/AYIBYAFCAd4ByAFi + AQkC/wHWAXUC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoC/wG5ARoB/wHgAagBbgH/AcgBYwEJ + Af8ByAFjAQkB/1gAAccBYQEJAf8BxwFhAQkB/wHHAWEBCQL/AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgL/ + AbkBGgH/AfEBuQFaAf8BxwFhAQkB/wQAAcUBYAEJAf8BxQFgAQkC/wHXAXgC/wG5ARoC/wG5ARoC/wG5 + ARoC/wG5ARoC/wHWAXUB/wHFAWABCQH/EAADJAE2A8kB+AHRAdABzwH/AWMBrAH1Af8BAAFvAfQB/wEA + AYsB/QH/AQABnAL/AQABowL/AQABpgL/AQABqQL/AQABqwL/AQABrAL/AQABqwL/AQABqgL/AQABpwL/ + AQABpQL/AQABoQL/AQABmAL/AQABhAH7Af8BAAFuAfUB/wGeAcIB7QH/As0BzAH/AZACkQHgAw0BEiAA + AyQBNgPKAfgB0gHRAdAB/wFjAawB9QH/AQABbwH1Af8BAAGLAf0B/wEAAZ0C/wEAAaQC/wEAAaYC/wEA + AakC/wEAAasC/wEAAawC/wEAAasC/wEAAaoC/wEAAacC/wEAAaQC/wEAAaEC/wEAAZgC/wEAAYQB+wH/ + AQABbgH0Af8BnQHBAewB/wLMAcsB/wKQAZEB4AMNARIQAAHFAWABCQH/AcUBYAEJAv8BuQEaAv8BuQEa + Av8BuQEaAv8BuQEaAv8BuQEaAf8B/QHeAZsB/wHFAWABCQH/AcUBYAEJAf8EAAHHAWEBCQL/AdYBdQL/ + AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgH/AccBYQEJAf8BxwFhAQkB/wHHAWEBCQH/YAACRwFG + AYABxAFeAQgB/wHEAV4BCAL/AbkBGgL/AbkBGgL/AbkBGgL/AbkBGgH/AfEBuAFaAf8BxAFeAQgB/wgA + AcQBXgEIAf8BxAFeAQgB/wHbAZ0BZAL/AbkBGgL/AbkBGgL/AbkBGgL/AdYBdQH/AcQBXgEIAf8UAAM1 + AVYDzwH8As0BywH/AYQBuAHxAf8BAAFwAfYB/wEAAYAB+AH/AQABlAL/AQABnQL/AQABogL/AQABowL/ + AQABpAL/AQABpAL/AQABowL/AQABoQL/AQABmgL/AQABkAH+Af8BAAF3AfYB/wEOAXcB9wH/AacByAHp + Af8ByQLIAf8DqAHtAx8BLCgAAzUBVgPQAfwBzgHNAcwB/wGFAbkB8gH/AQABcAH2Af8BAAGBAfgB/wEA + AZQC/wEAAZ4C/wEAAaIC/wEAAaMC/wEAAaQC/wEAAaQC/wEAAaMC/wEAAaEC/wEAAZkC/wEAAY8B/gH/ + AQABdwH2Af8BDgF3AfYB/wGnAccB6AH/AsgBxwH/A6gB7QMfASwUAAHEAV4BCAH/AcQBXgEIAv8BuQEa + Av8BuQEaAv8BuQEaAv8BuQEaAf8BxwFjARAB/wHEAV4BCAH/AcQBXgEIAf8IAAHEAV4BCAL/AdYBdQL/ + AbkBGgL/AbkBGgL/AbkBGgL/Ac8BYAH/AcQBXgEIAf8BxAFeAQgB/3AAAcIBXAEIAf8BwgFcAQgB/wH1 + AdEBlwL/AbkBGgL/AbkBGgL/AdYBdQH/AcIBXAEIAf8MAAHCAVsBCAH/AcIBWwEIAf8BwgFbAQgC/wG5 + ARoC/wG7ASIC/wHWAXUB/wHCAVsBCAH/GAADNQFVA70B9gHGAsUB/wG5Ac4B4QH/AUABmQH4Af8BAAFx + AfYB/wEAAXkB9wH/AQABiAH6Af8BAAGSAf4B/wEAAZYC/wEAAZUC/wEAAZAB/QH/AQABhQH6Af8BAAF3 + AfYB/wEBAXEB9gH/AV0BpwH2Af8BxgHRAdgB/wPHAf8DkgHiAx8BLDAAAzUBVQO9AfYBxwLGAf8BuQHO + AeIB/wFAAZkB+AH/AQABcQH2Af8BAAF5AfcB/wEAAYkB+gH/AQABkgH+Af8BAAGWAv8BAAGVAv8BAAGQ + Af0B/wEAAYUB+gH/AQABdwH2Af8BAQFxAfYB/wFdAaYB9QH/AcUB0AHXAf8DxgH/A5IB4gMfASwYAAHC + AVsBCAH/AcIBWwEIAv8BuQEaAv8BuwEiAv8BuQEaAf8BwgFbAQgB/wHCAVsBCAH/AWQBWQFQAb8MAAHC + AVwBCAL/AdYBdQL/AbkBGgL/AbkBGgH/AeABqQF1Af8BwgFcAQgB/wHCAVwBCAH/eAABwQFZAQcB/wHB + AVkBBwH/Ac8BewE9Av8B9AHdAf8B1wGUAVwB/wHBAVkBBwH/FAABwAFZAQcB/wHAAVkBBwH/AfsB7QHa + Af8B4QGwAYsB/wHAAVkBBwH/HAADIAEuA3oB0wPPAf8CxgHEAf8BtQHKAd4B/wFxAbIB9AH/ATcBlAH4 + Af8BDwF6AfcB/wEDAXEB8wH/AQQBcQH0Af8BFgGBAfcB/wFDAZsB+AH/AYIBtwHvAf8BwQHOAdgB/wHC + AcEBwAH/A9UB/wNeAbIDEAEVOAADIAEuA3oB0wPPAf8BxwHGAcQB/wG1AcsB3gH/AXEBswH0Af8BNwGV + AfgB/wEPAXoB9wH/AQMBcQHzAf8BBAFxAfQB/wEWAYEB9wH/AUMBmwH4Af8BgQG2Ae8B/wHBAc4B1wH/ + AcIBwQHAAf8D1QH/A14BsgMQARUcAAHAAVkBBwH/AcABWQEHAf8B6AHCAaQB/wH3AekB3AH/AcABWQEH + Af8BwAFZAQcB/xQAAcEBWQEHAf8B4AGpAXgC/wHxAdEB/wHHAWUBGgH/AcEBWQEHAf8BwQFZAQcB/4AA + AyoBQAG/AVcBBwH/AckBbgErAf8B8gHeAc8B/wG/AVcBBwH/GAABvwFXAQcB/wG/AVcBBwH/AfIB3gHP + Af8BvwFXAQcB/yAAAwMBBAM9AWgDiQHeA9MB/wLAAcEB/wHGAcMBwQH/Ac8BzgHLAf8B0ALRAf8B0QLQ + Af8BzQHMAckB/wHDAcEBvwH/A8MB/wPVAf8DbAHGAy8BSkQAAwMBBAM9AWgDiQHeA9MB/wPBAf8BxgHE + AcIB/wHPAc4BywH/AdAC0QH/AdEC0AH/Ac4BzAHJAf8BwgHBAb8B/wPDAf8D1QH/A2wBxgMvAUokAAG/ + AVcBBwH/Ab8BVwEHAf8B8gHeAc8B/wG/AVcBBwH/Ab8BVwEHAf8YAAG/AVcBBwH/AfMB3wHRAf8BxQFn + AR8B/wG/AVcBBwH/kAABvQFUAQYB/wHyAd0BzgH/AdUBkgFaAf8cAAG9AVQBBgH/AfIB3QHNAf8B8gHd + Ac0B/ygAAwEBAgMrAUIDSgGJA2gBwgOPAeEDpQHvA6kB8AOGAd0DYgG3A0QBegMgAS5UAAMBAQIDKwFC + A0oBiQNoAcIDjwHhA6UB7wOpAfADhgHdA2IBtwNEAXoDIAEuLAABvQFUAQYB/wHyAd0BzQH/AcABXAER + Af8DQAFwHAAB8gHdAc4B/wHyAd0BzgH/Ab0BVAEGAf+YAAHhAbEBjwH/AfEB3AHNAf8kAAHxAdwBzQH/ + /wAFAAHxAdwBzQH/JAAB8QHcAc0B/wG8AVIBBgH//wD/AE4AAUIBTQE+BwABPgMAASgDAAGAAwABQAMA + AQEBAAEBBgABBBYAA///AP8AAwAC/wH7Af4I/wG/Ae8E/wHjAfgI/wEPAeME/wHDAfAB/wHAAQMC/wHA + AQMB/wEHAeEE/wGDAcAB/AIAAT8B/AIAAT8BAwHgA/8B/gEDAYAB8AIAAQ8B8AIAAQ8BAAHgAT8C/wH8 + AQMBAAHAAgABAwHAAgABAwEAAWABHwL/AfACAAGAAgABAQGAAgABAQEAASABDwL/AeACAAGAAwABgAUA + AQMC/wHADAABAQL/DgAB/wH+DgABPwH8DgABHwHwAwABgAIAAQEBgAIAAQEDAAEHAeADAAGAAgABAwGA + AgABAwMAAQMBwAMAAYACAAEDAYACAAEDAwABAQGAAwABgAIAAQMBgAIAAQMEAAGAAwABgAIAAQMBgAIA + AQMEAAHgAwABgAIAAQMBgAIAAQMDAAEDAfADAAGAAgABAwGAAgABAwMAAQcB+AMAAcACAAEDAcACAAED + AwABDwH+AwABwAIAAQMBwAIAAQMDAAE/Af8DAAHAAgABBwHAAgABBwMAAX8B/wGAAgAB4AIAAQcB4AIA + AQcDAAL/AeACAAHgAgABDwHgAgABDwIAAQMC/wHwAQIBAAHwAgABDwHwAgABDwEAASABBwL/AfgBAwEA + AfgCAAEfAfgCAAEfAQABYAEfAv8B/gEDAYAB/AIAAT8B/AIAAT8BAAHgAT8D/wEDAeAB/gIAAX8B/gIA + AX8BAwHgAX8D/wGDAfAB/wEAAQEC/wEAAQEB/wEHAeEE/wHjAfgB/wHAAQcC/wHAAQcB/wEPAeME/wHz + Af4I/wG/AecS/ws= + + + \ No newline at end of file diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Form1.vb b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Form1.vb new file mode 100644 index 00000000..dc747256 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Form1.vb @@ -0,0 +1,202 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Collections.Generic +Imports System.Drawing +Imports System.IO +Imports System.Linq +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.Shell +Imports Microsoft.WindowsAPICodePack.Taskbar +Imports Microsoft.WindowsAPICodePack.Dialogs + +Namespace Microsoft.WindowsAPICodePack.Samples.ImageViewerDemoWinforms + Partial Public Class Form1 + Inherits Form + Private buttonPrevious As ThumbnailToolbarButton + Private buttonNext As ThumbnailToolbarButton + Private buttonFirst As ThumbnailToolbarButton + Private buttonLast As ThumbnailToolbarButton + Private picturesList As List(Of ListViewItem) + Private imgListCount As Integer = 0 + Private imgList As ImageList = Nothing + + Public Sub New() + InitializeComponent() + listView1.MultiSelect = False + + InitListView() + + AddHandler Shown, AddressOf Form1_Shown + + ' + toolStrip1.ImageList = imageList1 + toolStrip1.ImageScalingSize = New Size(32, 32) + toolStripButtonFirst.ImageIndex = 0 + toolStripButtonPrevious.ImageIndex = 1 + toolStripButtonNext.ImageIndex = 2 + toolStripButtonLast.ImageIndex = 3 + + End Sub + + Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) + AddHandler listView1.SelectedIndexChanged, AddressOf listView1_SelectedIndexChanged + + buttonFirst = New ThumbnailToolbarButton(My.Resources.first, "First Image") + buttonFirst.Enabled = False + AddHandler buttonFirst.Click, AddressOf buttonFirst_Click + + buttonPrevious = New ThumbnailToolbarButton(My.Resources.prevArrow, "Previous Image") + buttonPrevious.Enabled = False + AddHandler buttonPrevious.Click, AddressOf buttonPrevious_Click + + buttonNext = New ThumbnailToolbarButton(My.Resources.nextArrow, "Next Image") + AddHandler buttonNext.Click, AddressOf buttonNext_Click + + buttonLast = New ThumbnailToolbarButton(My.Resources.last, "Last Image") + AddHandler buttonLast.Click, AddressOf buttonLast_Click + + TaskbarManager.Instance.ThumbnailToolbars.AddButtons(Me.Handle, buttonFirst, buttonPrevious, buttonNext, buttonLast) + + If listView1.Items.Count > 0 Then + listView1.Items(0).Selected = True + End If + + ' + TaskbarManager.Instance.TabbedThumbnail.SetThumbnailClip(Me.Handle, New Rectangle(pictureBox1.Location, pictureBox1.Size)) + End Sub + + Private Sub buttonPrevious_Click(ByVal sender As Object, ByVal e As EventArgs) Handles toolStripButtonPrevious.Click + Dim newIndex As Integer = listView1.SelectedIndices(0) - 1 + + If newIndex > -1 Then + listView1.Items(newIndex).Selected = True + listView1.Items(newIndex).EnsureVisible() + End If + + listView1.Focus() + End Sub + + Private Sub buttonNext_Click(ByVal sender As Object, ByVal e As EventArgs) Handles toolStripButtonNext.Click + Dim newIndex As Integer = listView1.SelectedIndices(0) + 1 + + If newIndex < listView1.Items.Count Then + listView1.Items(newIndex).Selected = True + listView1.Items(newIndex).EnsureVisible() + End If + + listView1.Focus() + End Sub + + Private Sub buttonFirst_Click(ByVal sender As Object, ByVal e As EventArgs) Handles toolStripButtonFirst.Click + listView1.Items(0).Selected = True + listView1.Items(0).EnsureVisible() + listView1.Focus() + End Sub + + Private Sub buttonLast_Click(ByVal sender As Object, ByVal e As EventArgs) Handles toolStripButtonLast.Click + listView1.Items(listView1.Items.Count - 1).Selected = True + listView1.Items(listView1.Items.Count - 1).EnsureVisible() + listView1.Focus() + End Sub + + Private Sub listView1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) + ' Update the picture + If listView1.SelectedItems.Count > 0 Then + pictureBox1.Image = Image.FromFile((CType(listView1.SelectedItems(0), ListViewItem)).Tag.ToString()) + End If + + ' Update the button states + If listView1.SelectedIndices.Count > 0 AndAlso listView1.SelectedIndices(0) = 0 Then + buttonFirst.Enabled = False + toolStripButtonFirst.Enabled = False + buttonPrevious.Enabled = False + toolStripButtonPrevious.Enabled = False + ElseIf listView1.SelectedIndices.Count > 0 AndAlso listView1.SelectedIndices(0) > 0 Then + buttonFirst.Enabled = True + toolStripButtonFirst.Enabled = True + buttonPrevious.Enabled = True + toolStripButtonPrevious.Enabled = True + End If + + If listView1.SelectedIndices.Count > 0 AndAlso listView1.SelectedIndices(0) = listView1.Items.Count - 1 Then + buttonLast.Enabled = False + toolStripButtonLast.Enabled = False + buttonNext.Enabled = False + toolStripButtonNext.Enabled = False + ElseIf listView1.SelectedIndices.Count > 0 AndAlso listView1.SelectedIndices(0) < listView1.Items.Count - 1 Then + buttonLast.Enabled = True + toolStripButtonLast.Enabled = True + buttonNext.Enabled = True + toolStripButtonNext.Enabled = True + End If + End Sub + + Private Sub InitListView() + imgList = New ImageList() + imgList.ImageSize = New Size(96, 96) + imgList.ColorDepth = ColorDepth.Depth32Bit + + listView1.LargeImageList = imgList + + Dim pics As ShellContainer = CType(KnownFolders.Pictures, ShellContainer) + + If ShellLibrary.IsPlatformSupported Then + pics = CType(KnownFolders.PicturesLibrary, ShellContainer) + End If + + If picturesList Is Nothing Then + picturesList = New List(Of ListViewItem)() + Else + picturesList.Clear() + End If + + ' Recursively get the pictures + GetPictures(pics) + + If picturesList.Count = 0 Then + If TypeOf pics Is ShellLibrary Then + TaskDialog.Show("Please add some pictures to the library", "Pictures library is empty", "No pictures found") + Else + TaskDialog.Show("Please add some pictures to your pictures folder", "Pictures folder is empty", "No pictures found") + End If + End If + + listView1.Items.AddRange(picturesList.ToArray()) + End Sub + + Private Sub GetPictures(ByVal folder As ShellContainer) + ' Just for demo purposes, stop at 20 pics + If picturesList.Count >= 20 Then + Return + End If + + ' First get the pictures in this folder + For Each sf As ShellFile In folder.OfType(Of ShellFile)() + Dim ext As String = Path.GetExtension(sf.Path).ToLower() + + If ext = ".jpg" OrElse ext = ".jpeg" OrElse ext = ".png" OrElse ext = ".bmp" Then + Dim item As New ListViewItem() + item.Text = sf.Name + item.ImageIndex = imgListCount + item.Tag = sf.Path + imgList.Images.Add(Image.FromFile(sf.Path)) + + picturesList.Add(item) + imgListCount += 1 + End If + Next sf + + ' Then recurse into each subfolder + For Each subFolder As ShellContainer In folder.OfType(Of ShellContainer)() + GetPictures(subFolder) + Next subFolder + End Sub + + Private Sub pictureBox1_SizeChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pictureBox1.SizeChanged + TaskbarManager.Instance.TabbedThumbnail.SetThumbnailClip(Me.Handle, New Rectangle(pictureBox1.Location, pictureBox1.Size)) + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/My Project/AssemblyInfo.vb b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/My Project/AssemblyInfo.vb new file mode 100644 index 00000000..5f902238 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/My Project/AssemblyInfo.vb @@ -0,0 +1,40 @@ +' Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' [assembly: AssemblyVersion("1.0.*")] + + diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/My Project/Resources.Designer.vb b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/My Project/Resources.Designer.vb new file mode 100644 index 00000000..0bed8e7e --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/My Project/Resources.Designer.vb @@ -0,0 +1,91 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + + Friend ReadOnly Property first() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("first", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + Friend ReadOnly Property last() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("last", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + Friend ReadOnly Property nextArrow() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("nextArrow", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + + Friend ReadOnly Property prevArrow() As System.Drawing.Icon + Get + Dim obj As Object = ResourceManager.GetObject("prevArrow", resourceCulture) + Return CType(obj,System.Drawing.Icon) + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/My Project/Resources.resx b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/My Project/Resources.resx new file mode 100644 index 00000000..9dde1023 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/My Project/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\first.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\last.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\nextArrow.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\Resources\prevArrow.ico;System.Drawing.Icon, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/My Project/Settings.Designer.vb b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/My Project/Settings.Designer.vb new file mode 100644 index 00000000..f2ffe239 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.1 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class Settings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As Settings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New Settings()),Settings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As Settings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.Settings + Get + Return Global.Settings.Default + End Get + End Property + End Module +End Namespace diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/My Project/Settings.settings b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/My Project/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Program.vb b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Program.vb new file mode 100644 index 00000000..1915ed05 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Program.vb @@ -0,0 +1,29 @@ +'Copyright (c) Microsoft Corporation. All rights reserved. + + +Imports Microsoft.VisualBasic +Imports System +Imports System.Windows.Forms +Imports Microsoft.WindowsAPICodePack.Taskbar + +Namespace Microsoft.WindowsAPICodePack.Samples.ImageViewerDemoWinforms + Friend NotInheritable Class Program + ''' + ''' The main entry point for the application. + ''' + Private Sub New() + End Sub + _ + Shared Sub Main() + If Not TaskbarManager.IsPlatformSupported Then + MessageBox.Show("This demo requires to be run on Windows 7", "Demo needs Windows 7", MessageBoxButtons.OK, MessageBoxIcon.Error) + System.Environment.Exit(0) + Return + End If + + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + Application.Run(New Form1()) + End Sub + End Class +End Namespace diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Resources/first.ico b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Resources/first.ico new file mode 100644 index 00000000..23af4d8f Binary files /dev/null and b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Resources/first.ico differ diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Resources/last.ico b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Resources/last.ico new file mode 100644 index 00000000..0410c75b Binary files /dev/null and b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Resources/last.ico differ diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Resources/nextArrow.ico b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Resources/nextArrow.ico new file mode 100644 index 00000000..6203d1a6 Binary files /dev/null and b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Resources/nextArrow.ico differ diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Resources/prevArrow.ico b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Resources/prevArrow.ico new file mode 100644 index 00000000..73ebec75 Binary files /dev/null and b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/Resources/prevArrow.ico differ diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/ThumbnailToolbarDemoWinforms.sln b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/ThumbnailToolbarDemoWinforms.sln new file mode 100644 index 00000000..ca970196 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/ThumbnailToolbarDemoWinforms.sln @@ -0,0 +1,40 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ThumbnailToolbarDemoWinforms", "ThumbnailToolbarDemoWinforms.vbproj", "{FEE9384C-251C-4D42-A190-F89775D339F1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "..\..\..\..\..\WindowsAPICodePack\Core\Core.csproj", "{2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shell", "..\..\..\..\..\WindowsAPICodePack\Shell\Shell.csproj", "{AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}" +EndProject +Global + + GlobalSection(SolutionConfigurationPlatforms) = preSolution + CodeAnalysisDebug|Any CPU = CodeAnalysisDebug|Any CPU + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {FEE9384C-251C-4D42-A190-F89775D339F1}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {FEE9384C-251C-4D42-A190-F89775D339F1}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {FEE9384C-251C-4D42-A190-F89775D339F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FEE9384C-251C-4D42-A190-F89775D339F1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FEE9384C-251C-4D42-A190-F89775D339F1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FEE9384C-251C-4D42-A190-F89775D339F1}.Release|Any CPU.Build.0 = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.CodeAnalysisDebug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57}.Release|Any CPU.Build.0 = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.ActiveCfg = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.CodeAnalysisDebug|Any CPU.Build.0 = CodeAnalysisDebug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/ThumbnailToolbarDemoWinforms.vbproj b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/ThumbnailToolbarDemoWinforms.vbproj new file mode 100644 index 00000000..c0cc09ca --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/ThumbnailToolbarDemoWinforms.vbproj @@ -0,0 +1,176 @@ + + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {8618F7BE-4377-4537-AA9E-53C11352FAB3} + WinExe + + + ImageViewerDemoWinforms + v3.5 + On + Binary + Off + On + 512 + + + + + app.manifest + + + 3.5 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + full + false + bin\Debug\ + true + true + prompt + AllRules.ruleset + + + + pdbonly + true + bin\Release\ + false + true + prompt + AllRules.ruleset + + + + + 3.0 + + + 3.0 + + + + 3.5 + + + 3.5 + + + 3.5 + + + + + + + + 3.0 + + + + + Form + + + Form1.vb + + + + + Form1.vb + Designer + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + Designer + My.Resources + + + True + Resources.resx + True + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + True + Settings.settings + True + + + + + + + + + + + + + + + + + + {2E1FB0DF-F9BB-4909-9F32-2D9D022A8E57} + Core + + + {AA0C00CB-8699-4F37-BFAE-40CA87ACC06D} + Shell + + + + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + \ No newline at end of file diff --git a/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/app.manifest b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/app.manifest new file mode 100644 index 00000000..4ddad9b4 --- /dev/null +++ b/source/Samples/Shell/ThumbnailToolbarDemo/VB/Winforms/app.manifest @@ -0,0 +1,18 @@ + + + + Image Viewer Demo Application + + + + + + + diff --git a/source/Samples/ShellObjectWatcherSampleWPF/App.xaml b/source/Samples/ShellObjectWatcherSampleWPF/App.xaml new file mode 100644 index 00000000..90a0edfe --- /dev/null +++ b/source/Samples/ShellObjectWatcherSampleWPF/App.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/source/Samples/ShellObjectWatcherSampleWPF/App.xaml.cs b/source/Samples/ShellObjectWatcherSampleWPF/App.xaml.cs new file mode 100644 index 00000000..9c061a08 --- /dev/null +++ b/source/Samples/ShellObjectWatcherSampleWPF/App.xaml.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Windows; + +namespace ShellObjectWatcherSampleWPF +{ + /// + /// Interaction logic for App.xaml + /// + public partial class App : Application + { + } +} diff --git a/source/Samples/ShellObjectWatcherSampleWPF/MainWindow.xaml b/source/Samples/ShellObjectWatcherSampleWPF/MainWindow.xaml new file mode 100644 index 00000000..3d777cba --- /dev/null +++ b/source/Samples/ShellObjectWatcherSampleWPF/MainWindow.xaml @@ -0,0 +1,19 @@ + + + +