Skip to content

Commit e644dd5

Browse files
committed
Readme file and Help messages.
1 parent 4cea824 commit e644dd5

File tree

2 files changed

+117
-11
lines changed

2 files changed

+117
-11
lines changed

README.md

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,45 @@ A content-based 3D shape retrieval system that, given a 3D shape, finds the most
44

55
## Purpose
66

7-
Explain why this repository exists.
7+
This program was originally constructed for the Multimedia Retrieval course from the University of Utrecht, Game and Media master classes. The point of the assignment was to build a content-based 3D shape retrieval system that, given a 3D shape, finds the most similar shapes in a given 3D shape database. This would teach us the following skills while making the progam:
8+
- Build up practical skills in choosing, customizing, and applying specific techniques and algorithms to construct a realistic end-to-end MR system;
9+
- Learn the pro's and con's of different techniques, and also subtle practical constraints these have, such as robustness, ease of use, and computational scalability;
10+
- Make concrete design and implementation choices based on real-world output created by their system;
11+
- Get exposed to all steps of the MR pipeline (data representation, cleaning, feature extraction, matching, evaluation, and presentation);
812

913
## Workings
1014

11-
Explain how it does what it does.
15+
For more details on the inner workins of this program we would like to redirect you to the paper Building a content-based3D shape retrieval system by K.J.J. WesterBaan and G. de Jonge.
1216

1317
## Getting Started
1418

15-
Explain how you can use the application.
19+
The program has all its interaction with the console, it is advised to call the application's .exe file through a console or batch file as well for easier usage. Some premade batch files are present in the application "Prepared Statements" folder and these also show insights in how you can configure your personal call to the program. If this is not clear than you can call the application with the help verb to get more information on how it can be used. "ShapeDatabase.exe help"
1620

1721
### Prerequisites
1822

19-
Explain the needed items before you download this project.
23+
A good understanding of C# and Visual Studio is required to code for this program.
2024

2125
### Installing
2226

23-
Explain how to install this application for use.
27+
There are 2 ways to use the application: One is to go to the releases section and download the database fully set-up and configured including .ini file weights; The other one is to clone this repository and build it manually with visual studio. The downside of this second approach is that the calculated weights from the .ini file are not present so you can figure these out on your own. For more information on how to clone a github repository check out the [Visual Studio Github tutorial](https://github.com/github/VisualStudio/blob/master/docs/using/cloning-a-repository-to-visual-studio.md)
2428

2529
## Build With
2630

27-
Explain the different packages which are used in this program.
31+
This program wasn't possible without the following public packages from authors around Github.
32+
- *Accord.Net:* for their statistical data processing, in particular their PCA system.
33+
- *Geometry3Sharp:* for their 3D mesh computational algorithms.
34+
- *HNSW.Net:* for their approximate neirest neighbour search program.
35+
- *OpenTK:* for their visualisation code in C#.
36+
- *CommandLineParser:* for easier console usage.
37+
- *CsvHelper:* for their Csv reader and writers.
38+
- *IniParser:* for their ini readers and writers.
2839

2940
## Contributors / Authors
3041

3142
The people who made this original repository and brought this code to the world were:
3243
- @kevin4998
44+
- @guusdejonge
3345

3446
## Acknolwedgements
3547

36-
Show who helped us in creating this project.
48+
And finally we would like to thank all the public library authors who made it possible for us to construct this program, the C# team for this programming language and our professor prof. dr. Alexandru C. Telea for teaching us how to design such an extensive system.

ShapeDatabase-UI/Console/Verbs/ModeOptions.cs

Lines changed: 98 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Collections.Generic;
22
using CommandLine;
3+
using CommandLine.Text;
34

45
namespace ShapeDatabase.UI.Console.Verbs {
56

@@ -18,31 +19,99 @@ public class CleanOptions : BaseOptions {
1819
HelpText = "If the settings file should be cleaned.")]
1920
public bool CleanSettings { get; set; }
2021

22+
/// <summary>
23+
/// Display help information on how to use this verb.
24+
/// </summary>
25+
[Usage]
26+
public static IEnumerable<Example> Examples {
27+
get {
28+
yield return new Example("Clean the application including settings files.", new CleanOptions() { CleanSettings = true });
29+
yield return new Example("Clean the application excluding settings files.", new CleanOptions() { CleanSettings = false });
30+
yield return new Example("Clean the application and continue.", new CleanOptions() { CleanSettings = false, AutoExit = true, DebugMessages = true });
31+
}
32+
}
33+
2134
}
2235

2336
/// <summary>
2437
/// The options to display a collection of shapes to the user.
2538
/// </summary>
2639
[Verb("view", HelpText = "View the different Shapes in the system.")]
27-
public class ViewOptions : ShapeOptions { }
40+
public class ViewOptions : ShapeOptions {
41+
42+
/// <summary>
43+
/// Display help information on how to use this verb.
44+
/// </summary>
45+
[Usage]
46+
public static IEnumerable<Example> Examples {
47+
get {
48+
yield return new Example("View the unrefined demo files.", new ViewOptions() { ShapeDirectories = new string[] { "Content/Shapes/Demo" } });
49+
yield return new Example("View the unrefined small files.", new ViewOptions() { ShapeDirectories = new string[] { "Content/Shapes/Small" } });
50+
yield return new Example("View the previously refined files.", new ViewOptions() { });
51+
}
52+
}
53+
54+
}
2855

2956
/// <summary>
3057
/// The options to refine a collection of shapes for the user.
3158
/// </summary>
3259
[Verb("refine", HelpText = "Refine provided shapes and stores them in the system.")]
33-
public class RefineOptions : ShapeOptions { }
60+
public class RefineOptions : ShapeOptions {
61+
62+
/// <summary>
63+
/// Display help information on how to use this verb.
64+
/// </summary>
65+
[Usage]
66+
public static IEnumerable<Example> Examples {
67+
get {
68+
yield return new Example("Refine all the files in the demo map, overwriting existing ones.",
69+
new RefineOptions() { ShapeDirectories = new string[] { "Content/Shapes/Demo" }, Overwrite = true });
70+
yield return new Example("Refine all the files in the all map.", new RefineOptions() { ShapeDirectories = new string[] { "Content/Shapes/All" } });
71+
}
72+
}
73+
74+
}
3475

3576
/// <summary>
3677
/// The options to calculate metrics for the current shapes.
3778
/// </summary>
3879
[Verb("measure", HelpText = "Calculate metrics for all the current shapes.")]
39-
public class MeasureOptions : ShapeOptions { }
80+
public class MeasureOptions : ShapeOptions {
81+
82+
/// <summary>
83+
/// Display help information on how to use this verb.
84+
/// </summary>
85+
[Usage]
86+
public static IEnumerable<Example> Examples {
87+
get {
88+
yield return new Example("Measure the unrefined files in the Demo directory, overwriting refined variants.",
89+
new MeasureOptions() { ShapeDirectories = new string[] { "Content/Shapes/Demo" }, Overwrite = true });
90+
yield return new Example("Measure all the refined files.", new MeasureOptions() { });
91+
}
92+
}
93+
94+
}
4095

4196
/// <summary>
4297
/// The options to calculate features for the current shapes for comparison.
4398
/// </summary>
4499
[Verb("feature", HelpText = "Calculate features for all the current shapes.")]
45-
public class FeatureOptions : CalculateOptions { }
100+
public class FeatureOptions : CalculateOptions {
101+
102+
/// <summary>
103+
/// Display help information on how to use this verb.
104+
/// </summary>
105+
[Usage]
106+
public static IEnumerable<Example> Examples {
107+
get {
108+
yield return new Example("Calculate the features from the refined files and exit the application.",
109+
new FeatureOptions() { AutoExit = true });
110+
yield return new Example("Calculate the features from the refined files but do not save it.", new FeatureOptions() { Export = false });
111+
}
112+
}
113+
114+
}
46115

47116
/// <summary>
48117
/// The options to compare shapes for similarity.
@@ -101,6 +170,18 @@ public bool HasDirectories {
101170
HelpText = "The mode which is used to determine the query size.")]
102171
public string QuerySize { get; set; }
103172

173+
/// <summary>
174+
/// Display help information on how to use this verb.
175+
/// </summary>
176+
[Usage]
177+
public static IEnumerable<Example> Examples {
178+
get {
179+
yield return new Example("Compare all the items in the database with each other with the query size being the size of the class.",
180+
new QueryOptions() { AutoExit = true, QueryInput = "internal", QuerySize = "class" });
181+
yield return new Example("Compare with items from the query folder returning the amount of items as specified in the settings.ini file.",
182+
new QueryOptions() { AutoExit = true, QueryInput = "refine", QuerySize = "kbest" });
183+
}
184+
}
104185

105186
}
106187

@@ -124,6 +205,19 @@ public class EvaluateOptions : CalculateOptions {
124205
HelpText = "The mode which is used to determine the outputed query results.")]
125206
public string Evaluation { get; set; }
126207

208+
/// <summary>
209+
/// Display help information on how to use this verb.
210+
/// </summary>
211+
[Usage]
212+
public static IEnumerable<Example> Examples {
213+
get {
214+
yield return new Example("Evaluate the last query results showing the metrics for each individual file.",
215+
new EvaluateOptions() { AutoExit = true, Evaluation = "individual" });
216+
yield return new Example("Evaluate the last query results showing the metrics per class.",
217+
new EvaluateOptions() { AutoExit = true, Evaluation = "aggregated" });
218+
}
219+
}
220+
127221
}
128222

129223
}

0 commit comments

Comments
 (0)