FaceGen 3 SDKs Reference
Loading...
Searching...
No Matches
Fg3CmdCreate.cpp
1//
2// Copyright (c) Singular Inversions Inc. 2012
3//
4// Authors: Andrew Beatty
5// Created: Feb 16, 2012
6//
7
8#include "stdafx.h"
9
10#include "Fg3Face.hpp"
11#include "Fg3Controls.hpp"
12#include "FgCommand.hpp"
13
14#include "FgSerial.hpp"
15#include "FgFileSystem.hpp"
16#include "FgTestUtils.hpp"
17
18using namespace std;
19
20namespace Fg {
21
22static
24getRaceCode(string const & raceStr)
25{
26 string raceStrLower = toLower(raceStr);
27 if (raceStrLower == "any")
28 return FANRACE_ALL;
29 else if (raceStrLower == "african")
30 return FANRACE_AFRO;
31 else if (raceStrLower == "european")
32 return FANRACE_EURO;
33 else if (raceStrLower == "eastasian")
34 return FANRACE_EASIA;
35 else if (raceStrLower == "southasian")
36 return FANRACE_SASIA;
37 fgThrow("Race type must be 'any', 'african', european', 'eastAsian' or 'southAsian'",raceStrLower);
38 FG_UNREACHABLE_RETURN(FANRACE_ALL)
39}
40
41static
42FanGender
43getGenderCode(string const & str)
44{
45 if (str == "male")
46 return FANGENDER_MALE;
47 else if (str == "female")
48 return FANGENDER_FEMALE;
49 else if (str == "any")
50 return FANGENDER_SIZE;
51 fgThrow("Gender must be 'male', 'female' or 'any'",str);
52 FG_UNREACHABLE_RETURN(FANGENDER_SIZE)
53}
54
59void
60cmd3Create(CLArgs const & args)
61{
62 Syntax syn(args,"(random | average) <race> <gender> <out>.fg\n"
63 " <race> = african | european | eastAsian | southAsian | any\n"
64 " <gender> = male | female | any \n"
65 );
66 String8 command = syn.nextLower(),
67 race = syn.nextLower(),
68 gender = syn.nextLower(),
69 fgFile = syn.next();
70 FanRaceE raceE = getRaceCode(race.m_str);
71 FanGender genderE = getGenderCode(gender.m_str);
72 if (!checkExt(fgFile,"fg"))
73 syn.error("Not a valid FG filename",fgFile);
74 Sam3Controls ctls(dataDir() + "main/si.ctl");
75 Face3 face;
76 if (command == "random") {
78 randSeedTime();
83 ctls.setRandom_(face.coord,raceE,genderE);
84 }
85 else if (command == "average") {
86 ctls.setToAverage_(face.coord,raceE,genderE);
87 }
88 else
89 syn.error("Unrecognized command",command);
90 face.save(fgFile);
91}
92
93}
Sam3Coord coord
Coordinate of this face in 'face space'.
Definition Fg3Face.hpp:90
void save(String8 const &filename_fg) const
Save face to .FG file:
void cmd3Create(CLArgs const &)
void setToAverage_(Sam3Coord &coord, FanRaceE race, FanGender gender) const
void setRandom_(Sam3Coord &coord, FanRaceE race, FanGender gender=FANGENDER_SIZE, bool ageLock=false, bool caricatureLock=false, bool asymmetryLock=false) const