Skip to content

Commit b130016

Browse files
cdtwiggfacebook-github-bot
authored andcommitted
Move ParameterTransform operations out of header file. (#789)
Summary: These are very uncommon opertions that don't need to be inlined. Reviewed By: cstollmeta, jeongseok-meta Differential Revision: D86359238
1 parent 69eb490 commit b130016

File tree

2 files changed

+48
-45
lines changed

2 files changed

+48
-45
lines changed

momentum/character/parameter_transform.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,30 @@
1515

1616
namespace momentum {
1717

18+
bool PoseConstraint::operator==(const PoseConstraint& poseConstraint) const {
19+
// Compare the parameterIdValue as sets
20+
std::map<size_t, float> paramIdToValue1;
21+
std::copy(
22+
parameterIdValue.begin(),
23+
parameterIdValue.end(),
24+
std::inserter(paramIdToValue1, paramIdToValue1.begin()));
25+
26+
std::map<size_t, float> paramIdToValue2;
27+
std::copy(
28+
poseConstraint.parameterIdValue.begin(),
29+
poseConstraint.parameterIdValue.end(),
30+
std::inserter(paramIdToValue2, paramIdToValue2.begin()));
31+
32+
if (paramIdToValue1.size() != paramIdToValue2.size()) {
33+
return false;
34+
}
35+
36+
auto pred = [](const auto& l, const auto& r) {
37+
return ((l.first == r.first) && isApprox(l.second, r.second));
38+
};
39+
return std::equal(paramIdToValue1.begin(), paramIdToValue1.end(), paramIdToValue2.begin(), pred);
40+
}
41+
1842
template <typename T>
1943
size_t ParameterTransformT<T>::getParameterIdByName(const std::string& nm) const {
2044
for (size_t d = 0; d < name.size(); d++) {
@@ -506,6 +530,28 @@ ParameterSet ParameterTransformT<T>::getFaceExpressionParameters() const {
506530
return result;
507531
}
508532

533+
template <typename T>
534+
bool ParameterTransformT<T>::isApprox(const ParameterTransformT<T>& parameterTransform) const {
535+
bool isTransformEqual = false;
536+
if (transform.cols() > 0 && transform.rows() > 0 && parameterTransform.transform.cols() > 0 &&
537+
parameterTransform.transform.rows() > 0) {
538+
isTransformEqual = transform.isApprox(parameterTransform.transform);
539+
} else {
540+
isTransformEqual = (transform.cols() == parameterTransform.transform.cols()) &&
541+
(transform.rows() == parameterTransform.transform.rows());
542+
}
543+
if (!isTransformEqual) {
544+
return false;
545+
}
546+
547+
return (
548+
(name == parameterTransform.name) &&
549+
activeJointParams.isApprox(parameterTransform.activeJointParams) &&
550+
(parameterSets == parameterTransform.parameterSets) &&
551+
(poseConstraints == parameterTransform.poseConstraints) &&
552+
(blendShapeParameters == parameterTransform.blendShapeParameters));
553+
}
554+
509555
std::tuple<ParameterTransform, ParameterLimits> addBlendShapeParameters(
510556
ParameterTransform paramTransform,
511557
ParameterLimits paramLimits,

momentum/character/parameter_transform.h

Lines changed: 2 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -26,30 +26,7 @@ struct PoseConstraint {
2626
/// map would be more semantically correct) since it stores an index to the model parameters
2727
std::vector<std::pair<size_t, float>> parameterIdValue;
2828

29-
inline bool operator==(const PoseConstraint& poseConstraint) const {
30-
// Compare the parameterIdValue as sets
31-
std::map<size_t, float> paramIdToValue1;
32-
std::copy(
33-
parameterIdValue.begin(),
34-
parameterIdValue.end(),
35-
std::inserter(paramIdToValue1, paramIdToValue1.begin()));
36-
37-
std::map<size_t, float> paramIdToValue2;
38-
std::copy(
39-
poseConstraint.parameterIdValue.begin(),
40-
poseConstraint.parameterIdValue.end(),
41-
std::inserter(paramIdToValue2, paramIdToValue2.begin()));
42-
43-
if (paramIdToValue1.size() != paramIdToValue2.size()) {
44-
return false;
45-
}
46-
47-
auto pred = [](const auto& l, const auto& r) {
48-
return ((l.first == r.first) && isApprox(l.second, r.second));
49-
};
50-
return std::equal(
51-
paramIdToValue1.begin(), paramIdToValue1.end(), paramIdToValue2.begin(), pred);
52-
}
29+
bool operator==(const PoseConstraint& poseConstraint) const;
5330
};
5431

5532
using ParameterSets = std::unordered_map<std::string, ParameterSet>;
@@ -181,27 +158,7 @@ struct ParameterTransformT {
181158
numSkinnedLocatorParameters();
182159
}
183160

184-
[[nodiscard]] inline bool isApprox(const ParameterTransformT<T>& parameterTransform) const {
185-
// special handling of zero sparse matrix
186-
bool isTransformEqual = false;
187-
if (transform.cols() > 0 && transform.rows() > 0 && parameterTransform.transform.cols() > 0 &&
188-
parameterTransform.transform.rows() > 0) {
189-
isTransformEqual = transform.isApprox(parameterTransform.transform);
190-
} else {
191-
isTransformEqual = (transform.cols() == parameterTransform.transform.cols()) &&
192-
(transform.rows() == parameterTransform.transform.rows());
193-
}
194-
if (!isTransformEqual) {
195-
return false;
196-
}
197-
198-
return (
199-
(name == parameterTransform.name) &&
200-
activeJointParams.isApprox(parameterTransform.activeJointParams) &&
201-
(parameterSets == parameterTransform.parameterSets) &&
202-
(poseConstraints == parameterTransform.poseConstraints) &&
203-
(blendShapeParameters == parameterTransform.blendShapeParameters));
204-
}
161+
[[nodiscard]] bool isApprox(const ParameterTransformT<T>& parameterTransform) const;
205162
};
206163

207164
using ParameterTransform = ParameterTransformT<float>;

0 commit comments

Comments
 (0)