├── FaceMig ├── FaceMig.Native │ ├── Kinoko │ │ ├── Image.h │ │ ├── memo.txt │ │ ├── morph.h │ │ ├── image.cpp │ │ ├── morph.cpp │ │ └── REPLACE_HERE_KINOKO_FILES │ ├── FaceTracker │ │ ├── PUT_HERE_FACE_TRACKER │ │ └── .gitignore │ ├── model │ │ └── PUT_HERE_FACE_TRACKER_MODELS │ ├── DllMain.cpp │ ├── packages.config │ ├── FaceMig.Native.vcxproj.filters │ └── FaceMig.Native.vcxproj ├── FaceMig │ ├── Libs │ │ └── MikuMikuPlugin.XML │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── ConfigForm.cs │ ├── Stabilizer.cs │ ├── NativeBridge.cs │ ├── FaceMig.csproj │ ├── ConfigForm.resx │ ├── FaceMig.cs │ └── ConfigForm.Designer.cs ├── FaceMig.Testflight │ ├── App.config │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── Program.cs │ └── FaceMig.Testflight.csproj └── FaceMig.sln ├── README.md └── .gitignore /FaceMig/FaceMig.Native/Kinoko/Image.h: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /FaceMig/FaceMig.Native/Kinoko/memo.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /FaceMig/FaceMig.Native/Kinoko/morph.h: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /FaceMig/FaceMig.Native/Kinoko/image.cpp: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /FaceMig/FaceMig.Native/Kinoko/morph.cpp: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /FaceMig/FaceMig.Native/FaceTracker/PUT_HERE_FACE_TRACKER: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /FaceMig/FaceMig.Native/Kinoko/REPLACE_HERE_KINOKO_FILES: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /FaceMig/FaceMig.Native/model/PUT_HERE_FACE_TRACKER_MODELS: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /FaceMig/FaceMig.Native/FaceTracker/.gitignore: -------------------------------------------------------------------------------- 1 | *.d 2 | *.o 3 | .DS_Store -------------------------------------------------------------------------------- /FaceMig/FaceMig.Native/DllMain.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohemohe/FaceMig-Bridge/HEAD/FaceMig/FaceMig.Native/DllMain.cpp -------------------------------------------------------------------------------- /FaceMig/FaceMig/Libs/MikuMikuPlugin.XML: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mohemohe/FaceMig-Bridge/HEAD/FaceMig/FaceMig/Libs/MikuMikuPlugin.XML -------------------------------------------------------------------------------- /FaceMig/FaceMig.Native/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /FaceMig/FaceMig.Testflight/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FaceMig-Bridge 2 | #### FaceMig. Inspired by FaceRig. 3 | #### Not Rig but Mig. Designd for MikuMikuMoving. 4 | 5 | ---- 6 | 7 | きのこ氏の平成27年度 北海道科学大学 卒業研究「Webカメラを用いた表情の検出とその利用について」の成果物である「FaceMig」のうち, mohemohe が参考実装した部分を掲載しています. 8 | MikuMikuMovingのプラグイン部,およびC#とC++のマネージ・アンマネージ間のブリッジ部のコードが含まれています. 9 | 10 | ### ⚠ 実際にMikuMikuMovingで動作させるには,きのこ氏のコア部分のコードと,[FaceTracker](https://github.com/kylemcdonald/FaceTracker)が必要です. 11 | 12 | ![https://i.imgur.com/jAj3vtW.gif](https://i.imgur.com/jAj3vtW.gif) 13 | -------------------------------------------------------------------------------- /FaceMig/FaceMig/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 6 | // アセンブリに関連付けられている情報を変更するには、 7 | // これらの属性値を変更してください。 8 | [assembly: AssemblyTitle("FaceMig")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("FaceMig")] 13 | [assembly: AssemblyCopyright("Copyright © 2016")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから 18 | // 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 19 | // その型の ComVisible 属性を true に設定してください。 20 | [assembly: ComVisible(false)] 21 | 22 | // このプロジェクトが COM に公開される場合、次の GUID が typelib の ID になります 23 | [assembly: Guid("7467470b-3585-4450-abe1-73bf077b490f")] 24 | 25 | // アセンブリのバージョン情報は次の 4 つの値で構成されています: 26 | // 27 | // メジャー バージョン 28 | // マイナー バージョン 29 | // ビルド番号 30 | // Revision 31 | // 32 | // すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を 33 | // 既定値にすることができます: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /FaceMig/FaceMig.Testflight/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 6 | // アセンブリに関連付けられている情報を変更するには、 7 | // これらの属性値を変更してください。 8 | [assembly: AssemblyTitle("FaceMig.Testflight")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("FaceMig.Testflight")] 13 | [assembly: AssemblyCopyright("Copyright © 2016")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // ComVisible を false に設定すると、その型はこのアセンブリ内で COM コンポーネントから 18 | // 参照不可能になります。COM からこのアセンブリ内の型にアクセスする場合は、 19 | // その型の ComVisible 属性を true に設定してください。 20 | [assembly: ComVisible(false)] 21 | 22 | // このプロジェクトが COM に公開される場合、次の GUID が typelib の ID になります 23 | [assembly: Guid("cf42af33-5468-45cd-87ef-57ea9535fb44")] 24 | 25 | // アセンブリのバージョン情報は次の 4 つの値で構成されています: 26 | // 27 | // メジャー バージョン 28 | // マイナー バージョン 29 | // ビルド番号 30 | // Revision 31 | // 32 | // すべての値を指定するか、下のように '*' を使ってビルドおよびリビジョン番号を 33 | // 既定値にすることができます: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /FaceMig/FaceMig/ConfigForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows.Forms; 10 | 11 | namespace FaceMig 12 | { 13 | public partial class ConfigForm : Form 14 | { 15 | public ConfigForm() 16 | { 17 | InitializeComponent(); 18 | } 19 | 20 | private void button1_Click(object sender, EventArgs e) 21 | { 22 | NativeBridge.ModelReset(); 23 | } 24 | 25 | private void checkBox1_CheckedChanged(object sender, EventArgs e) 26 | { 27 | var button = sender as CheckBox; 28 | if (button == null) return; 29 | if (button.Checked) 30 | { 31 | NativeBridge.ShowTrackingInfoWindow(); 32 | } 33 | else 34 | { 35 | NativeBridge.CloseTrackingInfoWindow(); 36 | } 37 | } 38 | 39 | private void numericUpDown1_ValueChanged(object sender, EventArgs e) 40 | { 41 | var upDown = sender as NumericUpDown; 42 | if (upDown == null) return; 43 | NativeBridge.ReOpenDevice(Convert.ToInt32(upDown.Value)); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /FaceMig/FaceMig.Testflight/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading; 6 | using System.Threading.Tasks; 7 | using FaceMig; 8 | 9 | namespace FaceMig.Testflight 10 | { 11 | class Program 12 | { 13 | static void Main(string[] args) 14 | { 15 | var facemig = new FaceMig(); 16 | facemig.Initialize(); 17 | facemig.Enabled(); 18 | NativeBridge.ReOpenDevice(0); 19 | 20 | Console.WriteLine(@"press any key to next step"); 21 | Console.ReadKey(false); 22 | 23 | for (var i = 0; i < 500; i++) 24 | { 25 | NativeBridge.Track(); 26 | var status = NativeBridge.GetStatus(); 27 | facemig.eyeL.Add(status.EyeL); 28 | facemig.eyeR.Add(status.EyeR); 29 | var eyeL = facemig.eyeL.Many(); 30 | var eyeR = facemig.eyeR.Many(); 31 | //var mouth = facemig.Limit(status.Mouth); 32 | //var lean = status.Lean; 33 | 34 | //Console.Clear(); 35 | //Console.WriteLine(eyeL + "\t" + eyeR + "\t" + mouth + "\t" + lean); 36 | 37 | Thread.Sleep(50); 38 | } 39 | 40 | Console.WriteLine(@"press any key to exit"); 41 | Console.ReadKey(false); 42 | 43 | facemig.Disabled(); 44 | facemig.Dispose(); 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /FaceMig/FaceMig/Stabilizer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace FaceMig 8 | { 9 | public class Stabilizer : List 10 | { 11 | public Stabilizer(int num) : base(num) { } 12 | 13 | public new void Add(float num) 14 | { 15 | if (base.Count == base.Capacity) 16 | { 17 | base.RemoveAt(0); 18 | } 19 | 20 | base.Add(num); 21 | } 22 | 23 | public float Average() 24 | { 25 | return this.Sum() / base.Count; 26 | } 27 | 28 | public float MovingAverage() 29 | { 30 | var num = 0F; 31 | var denom = 0F; 32 | for (var i = 0; i < this.Count; i++) 33 | { 34 | num += this[i] * (i + 1); 35 | denom += (i + 1); 36 | } 37 | return num / denom; 38 | } 39 | 40 | public float Many() 41 | { 42 | 43 | return (this.Sum() < (this.Count >> 1)) ? 0 : 1; 44 | } 45 | 46 | float stabilized = 0; 47 | public float Stabilize() 48 | { 49 | var result = 0; 50 | if (this.Count == 1) 51 | { 52 | return this[0]; 53 | } 54 | else 55 | { 56 | if (Math.Abs(this[this.Count - 1] - stabilized) < 0.05) 57 | { 58 | return this[this.Count - 1]; 59 | } 60 | else 61 | { 62 | return stabilized; 63 | } 64 | } 65 | 66 | return result; 67 | } 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /FaceMig/FaceMig/NativeBridge.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.IO; 5 | using System.Linq; 6 | using System.Runtime.InteropServices; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | 10 | namespace FaceMig 11 | { 12 | public static class NativeBridge 13 | { 14 | const string DllName = @"FaceMig.Native.dll"; 15 | private const CharSet DefaultCharSet = CharSet.Ansi; 16 | 17 | [DllImport(DllName, CharSet = DefaultCharSet)] 18 | public static extern void Initialize(); 19 | 20 | [DllImport(DllName, CharSet = DefaultCharSet)] 21 | public static extern void Enabled(); 22 | 23 | [DllImport(DllName, CharSet = DefaultCharSet)] 24 | public static extern void Disabled(); 25 | 26 | [DllImport(DllName, CharSet = DefaultCharSet)] 27 | public static extern void Dispose(); 28 | 29 | [DllImport(DllName, CharSet = DefaultCharSet)] 30 | public static extern void ReOpenDevice(int deviceId); 31 | 32 | [DllImport(DllName, CharSet = DefaultCharSet)] 33 | public static extern void ModelReset(); 34 | 35 | [DllImport(DllName, CharSet = DefaultCharSet)] 36 | public static extern void Track(); 37 | 38 | [DllImport(DllName, CharSet = DefaultCharSet)] 39 | public static extern void ShowTrackingInfoWindow(); 40 | 41 | [DllImport(DllName, CharSet = DefaultCharSet)] 42 | public static extern void CloseTrackingInfoWindow(); 43 | 44 | [DllImport(DllName, CharSet = DefaultCharSet, EntryPoint = @"GetStatus")] 45 | private static unsafe extern float __GetStatus(StatusUnsafe* ptr); 46 | 47 | [StructLayout(LayoutKind.Sequential)] 48 | public unsafe struct StatusUnsafe 49 | { 50 | //total 16bytes 51 | public float EyeL; //4bytes 52 | public float EyeR; //4bytes 53 | public float Mouth; //4bytes 54 | public float leanX; //4bytes 55 | public float leanY; //4bytes 56 | public float leanZ; //4bytes 57 | } 58 | 59 | public static unsafe StatusUnsafe GetStatus() 60 | { 61 | StatusUnsafe result; 62 | var marshal = new StatusUnsafe[1]; 63 | fixed (StatusUnsafe* marshalPtr = marshal) 64 | { 65 | __GetStatus(marshalPtr); 66 | result = *marshalPtr; 67 | } 68 | return result; 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /FaceMig/FaceMig.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.24720.0 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FaceMig", "FaceMig\FaceMig.csproj", "{7467470B-3585-4450-ABE1-73BF077B490F}" 7 | ProjectSection(ProjectDependencies) = postProject 8 | {3DE23687-D90E-4F35-B1D9-CDC0D3F10B63} = {3DE23687-D90E-4F35-B1D9-CDC0D3F10B63} 9 | EndProjectSection 10 | EndProject 11 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FaceMig.Testflight", "FaceMig.Testflight\FaceMig.Testflight.csproj", "{CF42AF33-5468-45CD-87EF-57EA9535FB44}" 12 | ProjectSection(ProjectDependencies) = postProject 13 | {3DE23687-D90E-4F35-B1D9-CDC0D3F10B63} = {3DE23687-D90E-4F35-B1D9-CDC0D3F10B63} 14 | EndProjectSection 15 | EndProject 16 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "FaceMig.Native", "FaceMig.Native\FaceMig.Native.vcxproj", "{3DE23687-D90E-4F35-B1D9-CDC0D3F10B63}" 17 | EndProject 18 | Global 19 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 20 | Debug|Any CPU = Debug|Any CPU 21 | Debug|x64 = Debug|x64 22 | Debug|x86 = Debug|x86 23 | Release|Any CPU = Release|Any CPU 24 | Release|x64 = Release|x64 25 | Release|x86 = Release|x86 26 | EndGlobalSection 27 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 28 | {7467470B-3585-4450-ABE1-73BF077B490F}.Debug|Any CPU.ActiveCfg = Debug|x64 29 | {7467470B-3585-4450-ABE1-73BF077B490F}.Debug|x64.ActiveCfg = Debug|x64 30 | {7467470B-3585-4450-ABE1-73BF077B490F}.Debug|x64.Build.0 = Debug|x64 31 | {7467470B-3585-4450-ABE1-73BF077B490F}.Debug|x86.ActiveCfg = Debug|x64 32 | {7467470B-3585-4450-ABE1-73BF077B490F}.Release|Any CPU.ActiveCfg = Release|x64 33 | {7467470B-3585-4450-ABE1-73BF077B490F}.Release|x64.ActiveCfg = Release|x64 34 | {7467470B-3585-4450-ABE1-73BF077B490F}.Release|x64.Build.0 = Release|x64 35 | {7467470B-3585-4450-ABE1-73BF077B490F}.Release|x86.ActiveCfg = Release|x64 36 | {CF42AF33-5468-45CD-87EF-57EA9535FB44}.Debug|Any CPU.ActiveCfg = Debug|x64 37 | {CF42AF33-5468-45CD-87EF-57EA9535FB44}.Debug|x64.ActiveCfg = Debug|x64 38 | {CF42AF33-5468-45CD-87EF-57EA9535FB44}.Debug|x64.Build.0 = Debug|x64 39 | {CF42AF33-5468-45CD-87EF-57EA9535FB44}.Debug|x86.ActiveCfg = Debug|x64 40 | {CF42AF33-5468-45CD-87EF-57EA9535FB44}.Release|Any CPU.ActiveCfg = Release|x64 41 | {CF42AF33-5468-45CD-87EF-57EA9535FB44}.Release|x64.ActiveCfg = Release|x64 42 | {CF42AF33-5468-45CD-87EF-57EA9535FB44}.Release|x64.Build.0 = Release|x64 43 | {CF42AF33-5468-45CD-87EF-57EA9535FB44}.Release|x86.ActiveCfg = Release|x64 44 | {3DE23687-D90E-4F35-B1D9-CDC0D3F10B63}.Debug|Any CPU.ActiveCfg = Debug|x64 45 | {3DE23687-D90E-4F35-B1D9-CDC0D3F10B63}.Debug|x64.ActiveCfg = Debug|x64 46 | {3DE23687-D90E-4F35-B1D9-CDC0D3F10B63}.Debug|x64.Build.0 = Debug|x64 47 | {3DE23687-D90E-4F35-B1D9-CDC0D3F10B63}.Debug|x86.ActiveCfg = Debug|x64 48 | {3DE23687-D90E-4F35-B1D9-CDC0D3F10B63}.Release|Any CPU.ActiveCfg = Release|x64 49 | {3DE23687-D90E-4F35-B1D9-CDC0D3F10B63}.Release|x64.ActiveCfg = Release|x64 50 | {3DE23687-D90E-4F35-B1D9-CDC0D3F10B63}.Release|x64.Build.0 = Release|x64 51 | {3DE23687-D90E-4F35-B1D9-CDC0D3F10B63}.Release|x86.ActiveCfg = Release|x64 52 | EndGlobalSection 53 | GlobalSection(SolutionProperties) = preSolution 54 | HideSolutionNode = FALSE 55 | EndGlobalSection 56 | EndGlobal 57 | -------------------------------------------------------------------------------- /FaceMig/FaceMig.Native/FaceMig.Native.vcxproj.filters: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hh;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms 15 | 16 | 17 | {0790ab94-059f-4c21-880c-2ee4e2498e10} 18 | 19 | 20 | {0e221505-6fe3-4a03-939c-281a7e7d36f4} 21 | 22 | 23 | {c970ae69-6599-4622-ac38-cb021f70a766} 24 | 25 | 26 | {645e44ec-e354-4252-834d-6b4e4eb4253e} 27 | 28 | 29 | 30 | 31 | 32 | model 33 | 34 | 35 | model 36 | 37 | 38 | model 39 | 40 | 41 | model 42 | 43 | 44 | 45 | 46 | ソース ファイル 47 | 48 | 49 | ソース ファイル\FaceTracker 50 | 51 | 52 | ソース ファイル\FaceTracker 53 | 54 | 55 | ソース ファイル\FaceTracker 56 | 57 | 58 | ソース ファイル\FaceTracker 59 | 60 | 61 | ソース ファイル\FaceTracker 62 | 63 | 64 | ソース ファイル\FaceTracker 65 | 66 | 67 | ソース ファイル\FaceTracker 68 | 69 | 70 | ソース ファイル\FaceTracker 71 | 72 | 73 | ソース ファイル\Kinoko 74 | 75 | 76 | ソース ファイル\Kinoko 77 | 78 | 79 | 80 | 81 | ヘッダー ファイル\Kinoko 82 | 83 | 84 | ヘッダー ファイル\Kinoko 85 | 86 | 87 | -------------------------------------------------------------------------------- /FaceMig/FaceMig.Testflight/FaceMig.Testflight.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {CF42AF33-5468-45CD-87EF-57EA9535FB44} 8 | Exe 9 | Properties 10 | FaceMig.Testflight 11 | FaceMig.Testflight 12 | v4.5 13 | 512 14 | 15 | 16 | true 17 | bin\Debug\ 18 | DEBUG;TRACE 19 | full 20 | x64 21 | prompt 22 | MinimumRecommendedRules.ruleset 23 | true 24 | 25 | 26 | bin\Release\ 27 | TRACE 28 | true 29 | pdbonly 30 | x64 31 | prompt 32 | MinimumRecommendedRules.ruleset 33 | true 34 | 35 | 36 | Always 37 | 38 | 39 | 40 | False 41 | ..\FaceMig\Libs\DxMath.dll 42 | 43 | 44 | False 45 | ..\FaceMig\Libs\MikuMikuPlugin.dll 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | {7467470b-3585-4450-abe1-73bf077b490f} 66 | FaceMig 67 | 68 | 69 | 70 | 71 | xcopy "$(SolutionDir)$(PlatformName)\$(ConfigurationName)" "$(TargetDir)" /d /s /r /y /i /k 72 | 73 | 74 | 75 | 76 | 77 | 84 | -------------------------------------------------------------------------------- /FaceMig/FaceMig/FaceMig.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {7467470B-3585-4450-ABE1-73BF077B490F} 8 | Library 9 | Properties 10 | FaceMig 11 | FaceMig 12 | v4.5 13 | 512 14 | 15 | 16 | true 17 | bin\Debug\ 18 | DEBUG;TRACE 19 | full 20 | x64 21 | prompt 22 | MinimumRecommendedRules.ruleset 23 | true 24 | 25 | 26 | bin\Release\ 27 | TRACE 28 | true 29 | pdbonly 30 | x64 31 | prompt 32 | MinimumRecommendedRules.ruleset 33 | true 34 | 35 | 36 | 37 | False 38 | Libs\DxMath.dll 39 | 40 | 41 | False 42 | Libs\MikuMikuPlugin.dll 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | Form 57 | 58 | 59 | ConfigForm.cs 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | ConfigForm.cs 74 | 75 | 76 | 77 | 78 | forfiles /p "$(SolutionDir)$(PlatformName)\$(ConfigurationName)" /c "cmd /c copy @path \"$(TargetDir)\"" 79 | 80 | 81 | 82 | 83 | 84 | 91 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | 10 | # User-specific files (MonoDevelop/Xamarin Studio) 11 | *.userprefs 12 | 13 | # Build results 14 | [Dd]ebug/ 15 | [Dd]ebugPublic/ 16 | [Rr]elease/ 17 | [Rr]eleases/ 18 | x64/ 19 | x86/ 20 | bld/ 21 | [Bb]in/ 22 | [Oo]bj/ 23 | 24 | # Visual Studio 2015 cache/options directory 25 | .vs/ 26 | # Uncomment if you have tasks that create the project's static files in wwwroot 27 | #wwwroot/ 28 | 29 | # MSTest test Results 30 | [Tt]est[Rr]esult*/ 31 | [Bb]uild[Ll]og.* 32 | 33 | # NUNIT 34 | *.VisualState.xml 35 | TestResult.xml 36 | 37 | # Build Results of an ATL Project 38 | [Dd]ebugPS/ 39 | [Rr]eleasePS/ 40 | dlldata.c 41 | 42 | # DNX 43 | project.lock.json 44 | artifacts/ 45 | 46 | *_i.c 47 | *_p.c 48 | *_i.h 49 | *.ilk 50 | *.meta 51 | *.obj 52 | *.pch 53 | *.pdb 54 | *.pgc 55 | *.pgd 56 | *.rsp 57 | *.sbr 58 | *.tlb 59 | *.tli 60 | *.tlh 61 | *.tmp 62 | *.tmp_proj 63 | *.log 64 | *.vspscc 65 | *.vssscc 66 | .builds 67 | *.pidb 68 | *.svclog 69 | *.scc 70 | 71 | # Chutzpah Test files 72 | _Chutzpah* 73 | 74 | # Visual C++ cache files 75 | ipch/ 76 | *.aps 77 | *.ncb 78 | *.opendb 79 | *.opensdf 80 | *.sdf 81 | *.cachefile 82 | 83 | # Visual Studio profiler 84 | *.psess 85 | *.vsp 86 | *.vspx 87 | *.sap 88 | 89 | # TFS 2012 Local Workspace 90 | $tf/ 91 | 92 | # Guidance Automation Toolkit 93 | *.gpState 94 | 95 | # ReSharper is a .NET coding add-in 96 | _ReSharper*/ 97 | *.[Rr]e[Ss]harper 98 | *.DotSettings.user 99 | 100 | # JustCode is a .NET coding add-in 101 | .JustCode 102 | 103 | # TeamCity is a build add-in 104 | _TeamCity* 105 | 106 | # DotCover is a Code Coverage Tool 107 | *.dotCover 108 | 109 | # NCrunch 110 | _NCrunch_* 111 | .*crunch*.local.xml 112 | nCrunchTemp_* 113 | 114 | # MightyMoose 115 | *.mm.* 116 | AutoTest.Net/ 117 | 118 | # Web workbench (sass) 119 | .sass-cache/ 120 | 121 | # Installshield output folder 122 | [Ee]xpress/ 123 | 124 | # DocProject is a documentation generator add-in 125 | DocProject/buildhelp/ 126 | DocProject/Help/*.HxT 127 | DocProject/Help/*.HxC 128 | DocProject/Help/*.hhc 129 | DocProject/Help/*.hhk 130 | DocProject/Help/*.hhp 131 | DocProject/Help/Html2 132 | DocProject/Help/html 133 | 134 | # Click-Once directory 135 | publish/ 136 | 137 | # Publish Web Output 138 | *.[Pp]ublish.xml 139 | *.azurePubxml 140 | # TODO: Comment the next line if you want to checkin your web deploy settings 141 | # but database connection strings (with potential passwords) will be unencrypted 142 | *.pubxml 143 | *.publishproj 144 | 145 | # NuGet Packages 146 | *.nupkg 147 | # The packages folder can be ignored because of Package Restore 148 | **/packages/* 149 | # except build/, which is used as an MSBuild target. 150 | !**/packages/build/ 151 | # Uncomment if necessary however generally it will be regenerated when needed 152 | #!**/packages/repositories.config 153 | # NuGet v3's project.json files produces more ignoreable files 154 | *.nuget.props 155 | *.nuget.targets 156 | 157 | # Microsoft Azure Build Output 158 | csx/ 159 | *.build.csdef 160 | 161 | # Microsoft Azure Emulator 162 | ecf/ 163 | rcf/ 164 | 165 | # Microsoft Azure ApplicationInsights config file 166 | ApplicationInsights.config 167 | 168 | # Windows Store app package directory 169 | AppPackages/ 170 | BundleArtifacts/ 171 | 172 | # Visual Studio cache files 173 | # files ending in .cache can be ignored 174 | *.[Cc]ache 175 | # but keep track of directories ending in .cache 176 | !*.[Cc]ache/ 177 | 178 | # Others 179 | ClientBin/ 180 | ~$* 181 | *~ 182 | *.dbmdl 183 | *.dbproj.schemaview 184 | *.pfx 185 | *.publishsettings 186 | node_modules/ 187 | orleans.codegen.cs 188 | 189 | # RIA/Silverlight projects 190 | Generated_Code/ 191 | 192 | # Backup & report files from converting an old project file 193 | # to a newer Visual Studio version. Backup files are not needed, 194 | # because we have git ;-) 195 | _UpgradeReport_Files/ 196 | Backup*/ 197 | UpgradeLog*.XML 198 | UpgradeLog*.htm 199 | 200 | # SQL Server files 201 | *.mdf 202 | *.ldf 203 | 204 | # Business Intelligence projects 205 | *.rdl.data 206 | *.bim.layout 207 | *.bim_*.settings 208 | 209 | # Microsoft Fakes 210 | FakesAssemblies/ 211 | 212 | # GhostDoc plugin setting file 213 | *.GhostDoc.xml 214 | 215 | # Node.js Tools for Visual Studio 216 | .ntvs_analysis.dat 217 | 218 | # Visual Studio 6 build log 219 | *.plg 220 | 221 | # Visual Studio 6 workspace options file 222 | *.opt 223 | 224 | # Visual Studio LightSwitch build output 225 | **/*.HTMLClient/GeneratedArtifacts 226 | **/*.DesktopClient/GeneratedArtifacts 227 | **/*.DesktopClient/ModelManifest.xml 228 | **/*.Server/GeneratedArtifacts 229 | **/*.Server/ModelManifest.xml 230 | _Pvt_Extensions 231 | 232 | # Paket dependency manager 233 | .paket/paket.exe 234 | 235 | # FAKE - F# Make 236 | .fake/ 237 | -------------------------------------------------------------------------------- /FaceMig/FaceMig/ConfigForm.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /FaceMig/FaceMig.Native/FaceMig.Native.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Debug 7 | x64 8 | 9 | 10 | Release 11 | x64 12 | 13 | 14 | 15 | {3DE23687-D90E-4F35-B1D9-CDC0D3F10B63} 16 | FaceMigNative 17 | 8.1 18 | 19 | 20 | 21 | DynamicLibrary 22 | true 23 | v120 24 | MultiByte 25 | false 26 | 27 | 28 | DynamicLibrary 29 | false 30 | v120 31 | true 32 | MultiByte 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | NativeRecommendedRules.ruleset 48 | 49 | 50 | 51 | 52 | Level3 53 | Disabled 54 | true 55 | $(SolutionDir)FaceMig.Native\FaceTracker\include;%(AdditionalIncludeDirectories) 56 | false 57 | false 58 | 59 | 60 | true 61 | 62 | 63 | 64 | 65 | Level3 66 | MaxSpeed 67 | true 68 | true 69 | true 70 | $(SolutionDir)FaceMig.Native\FaceTracker\include;%(AdditionalIncludeDirectories) 71 | false 72 | AdvancedVectorExtensions 73 | Fast 74 | true 75 | true 76 | AnySuitable 77 | Speed 78 | true 79 | false 80 | 81 | 82 | true 83 | true 84 | 85 | 86 | 87 | 88 | true 89 | 90 | 91 | true 92 | 93 | 94 | true 95 | 96 | 97 | true 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | このプロジェクトは、このコンピューター上にない NuGet パッケージを参照しています。それらのパッケージをダウンロードするには、[NuGet パッケージの復元] を使用します。詳細については、http://go.microsoft.com/fwlink/?LinkID=322105 を参照してください。見つからないファイルは {0} です。 125 | 126 | 127 | 128 | 129 | -------------------------------------------------------------------------------- /FaceMig/FaceMig/FaceMig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Drawing; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading; 7 | using System.Threading.Tasks; 8 | using System.Windows.Forms; 9 | using DxMath; 10 | using MikuMikuPlugin; 11 | 12 | namespace FaceMig 13 | { 14 | public class FaceMig : IResidentPlugin 15 | { 16 | public string Description => @"FaceMig, inspired by FaceRig"; 17 | public Guid GUID => new Guid(@"BC7D5699-06B9-467B-BDA5-77CC638445F4"); 18 | public string Text => @"FaceMig"; 19 | public string EnglishText => Text; 20 | public Image Image => null; 21 | public Image SmallImage => null; 22 | public IWin32Window ApplicationForm { get; set; } 23 | public Scene Scene { get; set; } 24 | 25 | private ConfigForm _configForm; 26 | 27 | public Stabilizer eyeL = new Stabilizer(2); 28 | public Stabilizer eyeR = new Stabilizer(2); 29 | public Stabilizer mouth = new Stabilizer(3); 30 | public Stabilizer leanX = new Stabilizer(10); 31 | public Stabilizer leanY = new Stabilizer(10); 32 | public Stabilizer leanZ = new Stabilizer(10); 33 | 34 | private bool _isTracking; 35 | private float _time = 0; 36 | private NativeBridge.StatusUnsafe _status; 37 | 38 | private Model _model; 39 | private Morph _leftEye; 40 | private Morph _rightEye; 41 | private Morph _a; 42 | private Bone _atama; 43 | private Bone _kubi; 44 | 45 | public void Initialize() 46 | { 47 | NativeBridge.Initialize(); 48 | } 49 | 50 | public void Enabled() 51 | { 52 | NativeBridge.Enabled(); 53 | #if !DEBUG 54 | _configForm = new ConfigForm(); 55 | #endif 56 | _configForm?.Show(ApplicationForm); 57 | _time = 0; 58 | _isTracking = true; 59 | Track(); 60 | } 61 | 62 | public void Disabled() 63 | { 64 | _isTracking = false; 65 | _configForm?.Close(); 66 | NativeBridge.Disabled(); 67 | } 68 | 69 | private void Track() 70 | { 71 | Task.Run(() => { 72 | while (_isTracking) 73 | { 74 | if (_time > 1000 / (float)_configForm.numericUpDown2.Value) 75 | { 76 | _time = float.MinValue; 77 | NativeBridge.Track(); 78 | _status = NativeBridge.GetStatus(); 79 | _time = 0; 80 | eyeL.Add(_status.EyeL); 81 | eyeR.Add(_status.EyeR); 82 | mouth.Add(_status.Mouth); 83 | leanX.Add(_status.leanX); 84 | leanY.Add(_status.leanY); 85 | leanZ.Add(-_status.leanZ); 86 | } 87 | Thread.Sleep(1); 88 | } 89 | }); 90 | } 91 | 92 | // ReSharper disable InconsistentNaming 93 | public void Update(float Frame, float ElapsedTime) 94 | // ReSharper restore InconsistentNaming 95 | { 96 | _time += ElapsedTime*1000; 97 | if (_time < 1000/(float) _configForm.numericUpDown2.Value) 98 | { 99 | return; 100 | } 101 | 102 | if (Scene.Models.Count == 0) 103 | { 104 | return; 105 | } 106 | if (_model == null || _model != Scene.ActiveModel) 107 | { 108 | _model = Scene.ActiveModel; 109 | if (_model.Morphs["ウィンク左"] != null) 110 | { 111 | _leftEye = _model.Morphs["ウィンク左"]; 112 | if (_model.Morphs["ウィンク"] != null) 113 | { 114 | _rightEye = _model.Morphs["ウィンク"]; 115 | } 116 | } 117 | else if (_model.Morphs["ウィンク右"] != null) 118 | { 119 | _rightEye = _model.Morphs["ウィンク右"]; 120 | if (_model.Morphs["ウィンク"] != null) 121 | { 122 | _leftEye = _model.Morphs["ウィンク"]; 123 | } 124 | } 125 | else if (_model.Morphs["まばたき"] != null) 126 | { 127 | _leftEye = _rightEye = _model.Morphs["まばたき"]; 128 | } 129 | else return; 130 | 131 | if (_model.Morphs["あ"] != null) 132 | { 133 | _a = _model.Morphs["あ"]; 134 | } 135 | else return; 136 | 137 | if (_model.Bones["頭"] != null) 138 | { 139 | _atama = _model.Bones["頭"]; 140 | } 141 | else return; 142 | 143 | if (_model.Bones["首"] != null) 144 | { 145 | _kubi = _model.Bones["首"]; 146 | } 147 | else return; 148 | } 149 | 150 | float nextWeight; 151 | if (_configForm.checkBox3.Checked) 152 | { 153 | nextWeight = 1.0F - eyeL.Average(); 154 | } 155 | else 156 | { 157 | nextWeight = 1.0F - eyeL.Many(); 158 | } 159 | _leftEye.CurrentWeight = nextWeight; 160 | 161 | if (_configForm.checkBox2.Checked) 162 | { 163 | if (_configForm.checkBox3.Checked) 164 | { 165 | nextWeight = 1.0F - eyeR.Average(); 166 | } 167 | else 168 | { 169 | nextWeight = 1.0F - eyeR.Many(); 170 | } 171 | } 172 | else 173 | { 174 | if (_configForm.checkBox3.Checked) 175 | { 176 | nextWeight = 1.0F - eyeL.Average(); 177 | } 178 | else 179 | { 180 | nextWeight = 1.0F - eyeL.Many(); 181 | } 182 | } 183 | _rightEye.CurrentWeight = nextWeight; 184 | 185 | _a.CurrentWeight = Limit(mouth.MovingAverage(), 0, 1, 0.5F); 186 | 187 | var xAverage = Limit(leanY.MovingAverage(), -45, 45, 0); 188 | var yAverage = Limit(leanX.MovingAverage(), -45, 45, 0); 189 | var zAverage = Limit(leanZ.MovingAverage(), -45, 45, 0); 190 | 191 | var atamaMotion = _atama.CurrentLocalMotion; 192 | atamaMotion.Rotation = Quaternion.RotationYawPitchRoll(xAverage, yAverage, zAverage); 193 | _atama.CurrentLocalMotion = atamaMotion; 194 | 195 | var kubiMotion = _kubi.CurrentLocalMotion; 196 | kubiMotion.Rotation = Quaternion.RotationYawPitchRoll(xAverage/1.4142F, yAverage/1.4142F, zAverage/1.4142F); 197 | _kubi.CurrentLocalMotion = kubiMotion; 198 | } 199 | 200 | public void Dispose() 201 | { 202 | Disabled(); 203 | NativeBridge.Dispose(); 204 | } 205 | 206 | public float Limit(float value, float min, float max, float NaN) 207 | { 208 | if (value < min) 209 | { 210 | return min; 211 | } 212 | if (value > max) 213 | { 214 | return max; 215 | } 216 | if (float.IsNaN(value)) 217 | { 218 | return NaN; 219 | } 220 | return value; 221 | } 222 | } 223 | } 224 | -------------------------------------------------------------------------------- /FaceMig/FaceMig/ConfigForm.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace FaceMig 2 | { 3 | partial class ConfigForm 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.button1 = new System.Windows.Forms.Button(); 32 | this.checkBox1 = new System.Windows.Forms.CheckBox(); 33 | this.label1 = new System.Windows.Forms.Label(); 34 | this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); 35 | this.checkBox2 = new System.Windows.Forms.CheckBox(); 36 | this.checkBox3 = new System.Windows.Forms.CheckBox(); 37 | this.label2 = new System.Windows.Forms.Label(); 38 | this.label3 = new System.Windows.Forms.Label(); 39 | this.numericUpDown2 = new System.Windows.Forms.NumericUpDown(); 40 | ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); 41 | ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).BeginInit(); 42 | this.SuspendLayout(); 43 | // 44 | // button1 45 | // 46 | this.button1.Location = new System.Drawing.Point(12, 12); 47 | this.button1.Name = "button1"; 48 | this.button1.Size = new System.Drawing.Size(97, 22); 49 | this.button1.TabIndex = 0; 50 | this.button1.Text = "Calibration"; 51 | this.button1.UseVisualStyleBackColor = true; 52 | this.button1.Click += new System.EventHandler(this.button1_Click); 53 | // 54 | // checkBox1 55 | // 56 | this.checkBox1.Appearance = System.Windows.Forms.Appearance.Button; 57 | this.checkBox1.AutoSize = true; 58 | this.checkBox1.Location = new System.Drawing.Point(12, 40); 59 | this.checkBox1.Name = "checkBox1"; 60 | this.checkBox1.Size = new System.Drawing.Size(97, 22); 61 | this.checkBox1.TabIndex = 1; 62 | this.checkBox1.Text = "TrackingWindow"; 63 | this.checkBox1.UseVisualStyleBackColor = true; 64 | this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); 65 | // 66 | // label1 67 | // 68 | this.label1.AutoSize = true; 69 | this.label1.Location = new System.Drawing.Point(133, 17); 70 | this.label1.Name = "label1"; 71 | this.label1.Size = new System.Drawing.Size(55, 12); 72 | this.label1.TabIndex = 2; 73 | this.label1.Text = "Device ID"; 74 | // 75 | // numericUpDown1 76 | // 77 | this.numericUpDown1.ImeMode = System.Windows.Forms.ImeMode.Off; 78 | this.numericUpDown1.Location = new System.Drawing.Point(194, 15); 79 | this.numericUpDown1.Name = "numericUpDown1"; 80 | this.numericUpDown1.ReadOnly = true; 81 | this.numericUpDown1.Size = new System.Drawing.Size(54, 19); 82 | this.numericUpDown1.TabIndex = 3; 83 | this.numericUpDown1.ValueChanged += new System.EventHandler(this.numericUpDown1_ValueChanged); 84 | // 85 | // checkBox2 86 | // 87 | this.checkBox2.AutoSize = true; 88 | this.checkBox2.Location = new System.Drawing.Point(135, 44); 89 | this.checkBox2.Name = "checkBox2"; 90 | this.checkBox2.Size = new System.Drawing.Size(130, 16); 91 | this.checkBox2.TabIndex = 4; 92 | this.checkBox2.Text = "目を独立して制御する"; 93 | this.checkBox2.UseVisualStyleBackColor = true; 94 | // 95 | // checkBox3 96 | // 97 | this.checkBox3.AutoSize = true; 98 | this.checkBox3.Location = new System.Drawing.Point(135, 66); 99 | this.checkBox3.Name = "checkBox3"; 100 | this.checkBox3.Size = new System.Drawing.Size(76, 16); 101 | this.checkBox3.TabIndex = 5; 102 | this.checkBox3.Text = "平均を使う"; 103 | this.checkBox3.UseVisualStyleBackColor = true; 104 | // 105 | // label2 106 | // 107 | this.label2.AutoSize = true; 108 | this.label2.Location = new System.Drawing.Point(286, 17); 109 | this.label2.Name = "label2"; 110 | this.label2.Size = new System.Drawing.Size(67, 12); 111 | this.label2.TabIndex = 6; 112 | this.label2.Text = "TrakingRate"; 113 | // 114 | // label3 115 | // 116 | this.label3.AutoSize = true; 117 | this.label3.Location = new System.Drawing.Point(419, 17); 118 | this.label3.Name = "label3"; 119 | this.label3.Size = new System.Drawing.Size(21, 12); 120 | this.label3.TabIndex = 8; 121 | this.label3.Text = "fps"; 122 | // 123 | // numericUpDown2 124 | // 125 | this.numericUpDown2.ImeMode = System.Windows.Forms.ImeMode.Off; 126 | this.numericUpDown2.Location = new System.Drawing.Point(359, 15); 127 | this.numericUpDown2.Maximum = new decimal(new int[] { 128 | 60, 129 | 0, 130 | 0, 131 | 0}); 132 | this.numericUpDown2.Minimum = new decimal(new int[] { 133 | 1, 134 | 0, 135 | 0, 136 | 0}); 137 | this.numericUpDown2.Name = "numericUpDown2"; 138 | this.numericUpDown2.Size = new System.Drawing.Size(54, 19); 139 | this.numericUpDown2.TabIndex = 7; 140 | this.numericUpDown2.Value = new decimal(new int[] { 141 | 30, 142 | 0, 143 | 0, 144 | 0}); 145 | // 146 | // ConfigForm 147 | // 148 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); 149 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 150 | this.BackColor = System.Drawing.SystemColors.Window; 151 | this.ClientSize = new System.Drawing.Size(456, 94); 152 | this.ControlBox = false; 153 | this.Controls.Add(this.label3); 154 | this.Controls.Add(this.numericUpDown2); 155 | this.Controls.Add(this.label2); 156 | this.Controls.Add(this.checkBox3); 157 | this.Controls.Add(this.checkBox2); 158 | this.Controls.Add(this.numericUpDown1); 159 | this.Controls.Add(this.label1); 160 | this.Controls.Add(this.checkBox1); 161 | this.Controls.Add(this.button1); 162 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; 163 | this.MaximizeBox = false; 164 | this.MinimizeBox = false; 165 | this.Name = "ConfigForm"; 166 | this.Text = "FaceMig - Config"; 167 | ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); 168 | ((System.ComponentModel.ISupportInitialize)(this.numericUpDown2)).EndInit(); 169 | this.ResumeLayout(false); 170 | this.PerformLayout(); 171 | 172 | } 173 | 174 | #endregion 175 | 176 | private System.Windows.Forms.Button button1; 177 | private System.Windows.Forms.CheckBox checkBox1; 178 | private System.Windows.Forms.Label label1; 179 | private System.Windows.Forms.NumericUpDown numericUpDown1; 180 | public System.Windows.Forms.CheckBox checkBox2; 181 | public System.Windows.Forms.CheckBox checkBox3; 182 | private System.Windows.Forms.Label label3; 183 | private System.Windows.Forms.Label label2; 184 | public System.Windows.Forms.NumericUpDown numericUpDown2; 185 | } 186 | } --------------------------------------------------------------------------------