├── 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 | 
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 | }
--------------------------------------------------------------------------------