History

More work on avatar customization.

Andrzej Kapolka committed 12 years ago

Commit 6caa9281 parent c8877c34 files · +95 −30Browse files

Showing the changes to interface/src/ModelUploader.cpp (1 of 4 files). Show all

Unified · Split

interface/src/ModelUploader.cpp+73−26
@@ -148,6 +148,43 @@ bool ModelUploader::zip() { · 147 unmodified lines
148148 mapping.insert(TEXDIR_FIELD, ".");
149149 }
150150
151+ // mixamo/autodesk defaults
152+ if (!mapping.contains(SCALE_FIELD)) {
153+ mapping.insert(SCALE_FIELD, 10.0);
154+ }
155+ QVariantHash joints = mapping.value(JOINT_FIELD).toHash();
156+ if (!joints.contains("jointEyeLeft")) {
157+ joints.insert("jointEyeLeft", "LeftEye");
158+ }
159+ if (!joints.contains("jointEyeRight")) {
160+ joints.insert("jointEyeRight", "RightEye");
161+ }
162+ if (!joints.contains("jointNeck")) {
163+ joints.insert("jointNeck", "Neck");
164+ }
165+ if (!joints.contains("jointRoot")) {
166+ joints.insert("jointRoot", "Hips");
167+ }
168+ if (!joints.contains("jointLean")) {
169+ joints.insert("jointLean", "Spine");
170+ }
171+ if (!joints.contains("jointHead")) {
172+ joints.insert("jointHead", geometry.applicationName == "mixamo.com" ? "HeadTop_End" : "HeadEnd");
173+ }
174+ if (!joints.contains("jointLeftHand")) {
175+ joints.insert("jointLeftHand", "LeftHand");
176+ }
177+ if (!joints.contains("jointRightHand")) {
178+ joints.insert("jointRightHand", "RightHand");
179+ }
180+ mapping.insert(JOINT_FIELD, joints);
181+ if (!mapping.contains(FREE_JOINT_FIELD)) {
182+ mapping.insertMulti(FREE_JOINT_FIELD, "LeftArm");
183+ mapping.insertMulti(FREE_JOINT_FIELD, "LeftForeArm");
184+ mapping.insertMulti(FREE_JOINT_FIELD, "RightArm");
185+ mapping.insertMulti(FREE_JOINT_FIELD, "RightForeArm");
186+ }
187+
151188 // open the dialog to configure the rest
152189 ModelPropertiesDialog properties(_isHead, mapping, basePath, geometry);
153190 if (properties.exec() == QDialog::Rejected) {
@@ -475,10 +512,8 @@ ModelPropertiesDialog::ModelPropertiesDialog(bool isHead, const QVariantHash& or · 321 unmodified lines
475512 _scale->setMaximum(FLT_MAX);
476513 _scale->setSingleStep(0.01);
477514
478− if (isHead) {
479− form->addRow("Left Eye Joint:", _leftEyeJoint = createJointBox());
480− form->addRow("Right Eye Joint:", _rightEyeJoint = createJointBox());
481− }
515+ form->addRow("Left Eye Joint:", _leftEyeJoint = createJointBox());
516+ form->addRow("Right Eye Joint:", _rightEyeJoint = createJointBox());
482517 form->addRow("Neck Joint:", _neckJoint = createJointBox());
483518 if (!isHead) {
484519 form->addRow("Root Joint:", _rootJoint = createJointBox());
@@ -519,17 +554,15 @@ QVariantHash ModelPropertiesDialog::getMapping() const { · 34 unmodified lines
519554 mapping.insert(JOINT_INDEX_FIELD, jointIndices);
520555
521556 QVariantHash joints = mapping.value(JOINT_FIELD).toHash();
522− if (_isHead) {
523− joints.insert("jointEyeLeft", _leftEyeJoint->currentText());
524− joints.insert("jointEyeRight", _rightEyeJoint->currentText());
525− }
526− joints.insert("jointNeck", _neckJoint->currentText());
557+ insertJointMapping(joints, "jointEyeLeft", _leftEyeJoint->currentText());
558+ insertJointMapping(joints, "jointEyeRight", _rightEyeJoint->currentText());
559+ insertJointMapping(joints, "jointNeck", _neckJoint->currentText());
527560 if (!_isHead) {
528− joints.insert("jointRoot", _rootJoint->currentText());
529− joints.insert("jointLean", _leanJoint->currentText());
530− joints.insert("jointHead", _headJoint->currentText());
531− joints.insert("jointLeftHand", _leftHandJoint->currentText());
532− joints.insert("jointRightHand", _rightHandJoint->currentText());
561+ insertJointMapping(joints, "jointRoot", _rootJoint->currentText());
562+ insertJointMapping(joints, "jointLean", _leanJoint->currentText());
563+ insertJointMapping(joints, "jointHead", _headJoint->currentText());
564+ insertJointMapping(joints, "jointLeftHand", _leftHandJoint->currentText());
565+ insertJointMapping(joints, "jointRightHand", _rightHandJoint->currentText());
533566
534567 mapping.remove(FREE_JOINT_FIELD);
535568 for (int i = 0; i < _freeJoints->count() - 1; i++) {
@@ -542,23 +575,25 @@ QVariantHash ModelPropertiesDialog::getMapping() const { · 6 unmodified lines
542575 return mapping;
543576 }
544577
578+static void setJointText(QComboBox* box, const QString& text) {
579+ box->setCurrentIndex(qMax(box->findText(text), 0));
580+}
581+
545582 void ModelPropertiesDialog::reset() {
546583 _name->setText(_originalMapping.value(NAME_FIELD).toString());
547584 _textureDirectory->setText(_originalMapping.value(TEXDIR_FIELD).toString());
548585 _scale->setValue(_originalMapping.value(SCALE_FIELD, 1.0).toDouble());
549586
550587 QVariantHash jointHash = _originalMapping.value(JOINT_FIELD).toHash();
551− if (_isHead) {
552− _leftEyeJoint->setCurrentText(jointHash.value("jointEyeLeft").toString());
553− _rightEyeJoint->setCurrentText(jointHash.value("jointEyeRight").toString());
554− }
555− _neckJoint->setCurrentText(jointHash.value("jointNeck").toString());
588+ setJointText(_leftEyeJoint, jointHash.value("jointEyeLeft").toString());
589+ setJointText(_rightEyeJoint, jointHash.value("jointEyeRight").toString());
590+ setJointText(_neckJoint, jointHash.value("jointNeck").toString());
556591 if (!_isHead) {
557− _rootJoint->setCurrentText(jointHash.value("jointRoot").toString());
558− _leanJoint->setCurrentText(jointHash.value("jointLean").toString());
559− _headJoint->setCurrentText(jointHash.value("jointHead").toString());
560− _leftHandJoint->setCurrentText(jointHash.value("jointLeftHand").toString());
561− _rightHandJoint->setCurrentText(jointHash.value("jointRightHand").toString());
592+ setJointText(_rootJoint, jointHash.value("jointRoot").toString());
593+ setJointText(_leanJoint, jointHash.value("jointLean").toString());
594+ setJointText(_headJoint, jointHash.value("jointHead").toString());
595+ setJointText(_leftHandJoint, jointHash.value("jointLeftHand").toString());
596+ setJointText(_rightHandJoint, jointHash.value("jointRightHand").toString());
562597
563598 while (_freeJoints->count() > 1) {
564599 delete _freeJoints->itemAt(0)->widget();
@@ -587,7 +622,7 @@ void ModelPropertiesDialog::createNewFreeJoint(const QString& joint) { · 22 unmodified lines
587622 QHBoxLayout* freeJointLayout = new QHBoxLayout();
588623 freeJointLayout->setContentsMargins(QMargins());
589624 freeJoint->setLayout(freeJointLayout);
590− QComboBox* jointBox = createJointBox();
625+ QComboBox* jointBox = createJointBox(false);
591626 jointBox->setCurrentText(joint);
592627 freeJointLayout->addWidget(jointBox, 1);
593628 QPushButton* deleteJoint = new QPushButton("Delete");
@@ -596,10 +631,22 @@ void ModelPropertiesDialog::createNewFreeJoint(const QString& joint) { · 2 unmodified lines
596631 _freeJoints->insertWidget(_freeJoints->count() - 1, freeJoint);
597632 }
598633
599−QComboBox* ModelPropertiesDialog::createJointBox() const {
634+QComboBox* ModelPropertiesDialog::createJointBox(bool withNone) const {
600635 QComboBox* box = new QComboBox();
636+ if (withNone) {
637+ box->addItem("(none)");
638+ }
601639 foreach (const FBXJoint& joint, _geometry.joints) {
602640 box->addItem(joint.name);
603641 }
604642 return box;
605643 }
644+
645+void ModelPropertiesDialog::insertJointMapping(QVariantHash& joints, const QString& joint, const QString& name) const {
646+ if (_geometry.jointIndices.contains(name)) {
647+ joints.insert(joint, name);
648+ } else {
649+ joints.remove(joint);
650+ }
651+}
652+