Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5ecef2fb1b | ||
|
|
c637aaf568 | ||
|
|
8794135cc2 | ||
|
|
ec8d97d065 | ||
|
|
8077296a8e | ||
|
|
e1baf24097 | ||
|
|
ad74e1dfe9 | ||
|
|
0daefeb3f1 | ||
|
|
4b44ae2e33 | ||
|
|
1c14061930 | ||
|
|
b708c95c26 | ||
|
|
06ce8fbf39 | ||
|
|
9b1968a4e5 | ||
|
|
e45cc2e94d | ||
|
|
d588ffefc4 | ||
|
|
ec0a3e6d52 | ||
|
|
346b4845dd | ||
|
|
ef2bf4857f | ||
|
|
026b085568 | ||
|
|
b3c7c19e82 | ||
|
|
684d4d4a4c | ||
|
|
21570cb66a | ||
|
|
c2a77d5c5d | ||
|
|
f4446b410c | ||
|
|
3f2bff91fc | ||
|
|
0850b3fe09 | ||
|
|
a85659bb6a | ||
|
|
daa5d542c2 | ||
|
|
a80cb71432 | ||
|
|
e7a9563f54 | ||
|
|
1ae50692cc | ||
|
|
24d8ad9da6 | ||
|
|
2a41e7933b | ||
|
|
ce9f453cb5 | ||
|
|
f8f4ad6985 | ||
|
|
606388bfd9 | ||
|
|
2d094f7ac5 | ||
|
|
a7d5d80bdc | ||
|
|
34e914a73d | ||
|
|
39739f8236 | ||
|
|
455053cc8a | ||
|
|
18b04658f3 | ||
|
|
75b585ec2f | ||
|
|
ce8c721131 | ||
|
|
83f7ae677d | ||
|
|
0430a0b7fb | ||
|
|
1c469c2554 | ||
|
|
d0f867793e | ||
|
|
3648fb3ec8 | ||
|
|
ad6fb8fc0a | ||
|
|
77dda7ff66 | ||
|
|
896051ee6c | ||
|
|
6f841f5c8d | ||
|
|
50dfe23fb4 | ||
|
|
bb9feed0d8 | ||
|
|
011f9b1f9c | ||
|
|
a7e7584c88 | ||
|
|
77bb7cc695 | ||
|
|
4b558517b5 | ||
|
|
2cddea5f5b | ||
|
|
7806d61532 | ||
|
|
f8d551f480 | ||
|
|
e11ba6a1c7 | ||
|
|
26dc86427f | ||
|
|
af18a4ec31 | ||
|
|
9ae08a9ff3 | ||
|
|
cad7df1ac8 | ||
|
|
0e7c378f29 | ||
|
|
cd7313b909 | ||
|
|
96b6d23503 | ||
|
|
f62c5b5a2b | ||
|
|
5d1d99ceaa | ||
|
|
4d15255f82 | ||
|
|
6dd6d29eab | ||
|
|
81a690665f | ||
|
|
3d2056e9d8 | ||
|
|
996b997698 | ||
|
|
41e76f012b | ||
|
|
ce4bfb0521 | ||
|
|
afde5e80e5 | ||
|
|
890347a84b | ||
|
|
c745f14c27 | ||
|
|
3af45e98d6 | ||
|
|
34a4d4cc21 | ||
|
|
a0a14de29b | ||
|
|
a8682b4b74 | ||
|
|
c2368d7e69 | ||
|
|
3f5d0cf01a | ||
|
|
0d5611d354 | ||
|
|
26adec1097 | ||
|
|
30aa1aa0ab | ||
|
|
eabd71b217 | ||
|
|
4fd5eb1bc1 | ||
|
|
4881abf719 | ||
|
|
1a8e656737 | ||
|
|
ca50bad07f | ||
|
|
b93838dc87 | ||
|
|
42cbbaf63c | ||
|
|
9dd7cf705b | ||
|
|
54bfcd75ed | ||
|
|
bfa1b7cdf9 | ||
|
|
07058d057a | ||
|
|
6295eab220 | ||
|
|
5abcf65a9c | ||
|
|
cd3c79c565 | ||
|
|
724cbb3dbc | ||
|
|
b12b78521f | ||
|
|
d20733e792 | ||
|
|
e9b97c88b6 | ||
|
|
9867e66093 | ||
|
|
d47ef29cdf | ||
|
|
35785e9e3d | ||
|
|
e63e30e3a8 | ||
|
|
432f07342f | ||
|
|
a1c00334c5 | ||
|
|
f7f94fe8dd | ||
|
|
b57f3d3727 | ||
|
|
4b1049bec6 | ||
|
|
2dd2f88b1a | ||
|
|
ed15478080 | ||
|
|
8620b9b870 | ||
|
|
e8bdea1e3f | ||
|
|
9558a4224d | ||
|
|
df82252a09 | ||
|
|
e25e592113 | ||
|
|
664fa56c92 | ||
|
|
bf5bb40e0b | ||
|
|
4a67d66143 | ||
|
|
fd4d6e07a0 | ||
|
|
2349b0e8b3 | ||
|
|
d490cea5b2 | ||
|
|
831562803e | ||
|
|
aa080f5282 | ||
|
|
aab17cbadc | ||
|
|
4e8b04de2a | ||
|
|
030839a74e | ||
|
|
548c81f36a | ||
|
|
79d664f425 | ||
|
|
51a8dacbc2 | ||
|
|
fcbfd629cb | ||
|
|
5cfae0f74c | ||
|
|
e7166ebfb6 | ||
|
|
ab5c236c22 | ||
|
|
674dceb768 | ||
|
|
9548fccf5d | ||
|
|
8f06f25da5 | ||
|
|
3dc496dfb4 | ||
|
|
70f419aed2 | ||
|
|
5d44c3508c | ||
|
|
55fd3ef7bd | ||
|
|
795d870cc4 | ||
|
|
0c8e856f96 | ||
|
|
da594fff55 | ||
|
|
eb076ad53f | ||
|
|
9e38ecdbd2 | ||
|
|
d80726d7b5 | ||
|
|
f4bcfb05d0 | ||
|
|
4fc6f5eab7 | ||
|
|
b187315a5f | ||
|
|
77b592a930 | ||
|
|
bd2ecfd766 | ||
|
|
3e8d6aab7f | ||
|
|
10a6f31f3d | ||
|
|
fa8ec2cfb8 | ||
|
|
8fab1301e4 | ||
|
|
f1a6316de9 | ||
|
|
6964a73de9 | ||
|
|
3bad583e9c | ||
|
|
7ca02f07dc | ||
|
|
66b398359a | ||
|
|
8859fbd791 | ||
|
|
c66fa95d4e | ||
|
|
f8792559b0 | ||
|
|
83a67de58a | ||
|
|
c8c074a4d7 | ||
|
|
bc3d27eaed | ||
|
|
1a635edaa2 | ||
|
|
9297cddba3 | ||
|
|
b530571af2 | ||
|
|
54bbdf56f7 | ||
|
|
70a8e73903 | ||
|
|
d299c048fc | ||
|
|
224f9e37fe | ||
|
|
04d14954b0 | ||
|
|
ff41d5e1d4 | ||
|
|
057e98a194 | ||
|
|
a8a2aab7c0 | ||
|
|
ecb23b2d17 | ||
|
|
e321cea6ba | ||
|
|
30f3bd2b70 | ||
|
|
45ac0237f5 | ||
|
|
30933b96fd | ||
|
|
a0853851c2 | ||
|
|
b4afcd56a9 | ||
|
|
81c42bdf75 | ||
|
|
2b1ddd2269 | ||
|
|
00914a7d4e | ||
|
|
0346c4bfce | ||
|
|
241979fb05 | ||
|
|
602f225e6e | ||
|
|
5df52bf95b | ||
|
|
4986a310ab | ||
|
|
2686dbe5e0 | ||
|
|
a5c8135a5c | ||
|
|
ee8c0ad0d0 | ||
|
|
e3d8585895 | ||
|
|
a272846bfd | ||
|
|
ab7ead25e2 | ||
|
|
f620fea10c | ||
|
|
1539be0d80 | ||
|
|
0477dadf15 | ||
|
|
71102ba0a2 | ||
|
|
3e69bf63db | ||
|
|
1f0dc059e4 | ||
|
|
33e203f116 | ||
|
|
6b36a563fe | ||
|
|
c6e9680dcd | ||
|
|
0c29d69e32 | ||
|
|
8fee7ca19e | ||
|
|
2c584f139a | ||
|
|
aba682f8c4 | ||
|
|
0ec1fa9359 | ||
|
|
a422784023 | ||
|
|
214414faff | ||
|
|
eb231a72de | ||
|
|
11cd795270 | ||
|
|
7902da8259 | ||
|
|
f999cd58c8 | ||
|
|
902ddab527 | ||
|
|
0f78dd2ce0 | ||
|
|
06cbabbc4d | ||
|
|
6f03442c11 | ||
|
|
343c8c31ac | ||
|
|
4f31295d72 | ||
|
|
8b0b1a1679 | ||
|
|
8a1b3a2332 | ||
|
|
9b0d5551dd | ||
|
|
1e8d7eccea | ||
|
|
6f75e51f46 | ||
|
|
4f108856a8 | ||
|
|
b8b9630cad | ||
|
|
51482132a2 | ||
|
|
4a5b76b7c9 | ||
|
|
a37e6c8dd0 | ||
|
|
e42b2d5ee6 | ||
|
|
a0f7e13586 | ||
|
|
0cc2d4c344 | ||
|
|
f8d048a4e9 | ||
|
|
1b859befac | ||
|
|
44ece3d9ab | ||
|
|
7bcea0035e | ||
|
|
81839a983c | ||
|
|
6a35ffaf6d | ||
|
|
ecde0335d4 | ||
|
|
0fa961ce3e | ||
|
|
5a334e6b55 | ||
|
|
4d68859d54 | ||
|
|
d1959ca22d | ||
|
|
9c6daad6f7 | ||
|
|
a7e0384c9e | ||
|
|
178bd98517 | ||
|
|
bfd4061f22 | ||
|
|
4698a18158 | ||
|
|
9097a249f9 | ||
|
|
f0a0584bcf | ||
|
|
272859db20 | ||
|
|
cf55671d75 | ||
|
|
cf28e166a4 | ||
|
|
d7e18df9d3 | ||
|
|
8855ea8118 | ||
|
|
a817fa1357 | ||
|
|
e5de8af3d0 | ||
|
|
4d41db7297 | ||
|
|
be4457a361 | ||
|
|
272d7813bd | ||
|
|
6697328bef | ||
|
|
809a20e127 | ||
|
|
b614dd7f43 | ||
|
|
fceb192d6f | ||
|
|
3998ca4d85 | ||
|
|
57f25187b8 | ||
|
|
62f68516e8 | ||
|
|
1fc7d26deb | ||
|
|
51d739ead2 | ||
|
|
44a005c8b6 | ||
|
|
d96bbd45da | ||
|
|
1e11a23f82 | ||
|
|
92355bb1a5 | ||
|
|
33d1d4d99a | ||
|
|
517079c90a | ||
|
|
f847e89c80 | ||
|
|
076446e4b8 | ||
|
|
cd53f96c35 | ||
|
|
4b83887036 | ||
|
|
cce2cb8215 | ||
|
|
0dec2960e6 | ||
|
|
706f08aca6 | ||
|
|
512561baa0 | ||
|
|
9998022fb5 | ||
|
|
1420bec65b | ||
|
|
4dbd40f9e8 | ||
|
|
b9df43240c | ||
|
|
fbc20f0bc4 | ||
|
|
c334ca7aac | ||
|
|
fb4b0237be | ||
|
|
93052bd226 | ||
|
|
e164881182 | ||
|
|
a11329dc16 | ||
|
|
2f0a642bfe | ||
|
|
3c282ccfa2 | ||
|
|
f2b76b079e | ||
|
|
fb8c500493 | ||
|
|
a7fddbfd96 | ||
|
|
afa11c919d | ||
|
|
0d210661b9 | ||
|
|
4c3abee063 | ||
|
|
e88acdea1d | ||
|
|
21cc563e7f | ||
|
|
93309c322b | ||
|
|
ba6fc87960 | ||
|
|
f883bd9acf | ||
|
|
047f49d162 | ||
|
|
465cbab2f9 | ||
|
|
afac7851dd | ||
|
|
303831e12d | ||
|
|
f8bc3bb288 | ||
|
|
d9c98f3783 | ||
|
|
362d51dac3 | ||
|
|
2bc77f3645 | ||
|
|
02277d479c | ||
|
|
b1673443c9 | ||
|
|
0246ac474c | ||
|
|
eb09902b09 | ||
|
|
dc8ede1dcd | ||
|
|
07e74ad3a7 | ||
|
|
3d2cf4a91c | ||
|
|
0fa0e65b68 | ||
|
|
0a96fdbc52 | ||
|
|
e8d414e0fa | ||
|
|
265938b8cf | ||
|
|
32757b5553 | ||
|
|
7b7de12370 | ||
|
|
50ad087b7d | ||
|
|
6018ac015f | ||
|
|
d565a9022a | ||
|
|
ed5c52c695 | ||
|
|
a83a738613 | ||
|
|
748e92af0d | ||
|
|
31da7d0a26 | ||
|
|
9d7e36295c | ||
|
|
93c51d074b | ||
|
|
002de60d8a | ||
|
|
043920647d | ||
|
|
3114bf2865 | ||
|
|
ea6bdaf007 | ||
|
|
65730e976c | ||
|
|
24a834d4ea | ||
|
|
1235573ef1 | ||
|
|
e5ae464968 | ||
|
|
54ab63564a | ||
|
|
5565fef975 | ||
|
|
ebe6ba4867 | ||
|
|
e6a4099164 | ||
|
|
3b20345994 | ||
|
|
ce0472ff0c | ||
|
|
87414e6e62 | ||
|
|
6b0c62bc3e | ||
|
|
1a8350d899 | ||
|
|
85de768e72 | ||
|
|
b45d06618b | ||
|
|
37da8fe7ed | ||
|
|
837c4f23e1 | ||
|
|
78b804ec54 | ||
|
|
5c57705a40 | ||
|
|
e14d78a64a | ||
|
|
a307705d93 | ||
|
|
f37439148b | ||
|
|
beb52ec9c2 | ||
|
|
4496969b50 | ||
|
|
1765712b3b | ||
|
|
116c4e40f2 | ||
|
|
1d6867736a | ||
|
|
26c2ce6779 | ||
|
|
01487238b9 | ||
|
|
cb5bc28316 | ||
|
|
6e0ca20bda | ||
|
|
33d2baae9c | ||
|
|
9c22d7330d | ||
|
|
5cfbf61305 | ||
|
|
40130a21a5 | ||
|
|
835b53a661 | ||
|
|
18a90052e8 | ||
|
|
44dc8893f2 | ||
|
|
10db4155a0 | ||
|
|
6625783fd9 | ||
|
|
5ecf086141 | ||
|
|
1cdbcefc14 | ||
|
|
3d8ce214c8 | ||
|
|
0ba44ca476 | ||
|
|
c1316d0ac4 | ||
|
|
94e67a708a | ||
|
|
24b325ccd9 | ||
|
|
23fda0c30b | ||
|
|
46ead1c3c7 | ||
|
|
fe1a1ae5f1 | ||
|
|
872cf88884 | ||
|
|
e806c21d13 | ||
|
|
2e5a8858b3 | ||
|
|
13b243e0fe | ||
|
|
f7d0f5fde4 | ||
|
|
2fb7358c88 | ||
|
|
7810c4d958 | ||
|
|
c4a11171c0 | ||
|
|
0a552ee46f | ||
|
|
7de3891015 | ||
|
|
aab35d46ea | ||
|
|
dc09c5bc9e | ||
|
|
465d48db99 | ||
|
|
ffdc47e39f | ||
|
|
c2516ed007 | ||
|
|
3ab2ab8eab | ||
|
|
cc78b51f47 | ||
|
|
e7f2d281b5 | ||
|
|
704f3737a4 | ||
|
|
ce5e8d1604 | ||
|
|
9b311dca27 | ||
|
|
80c870b4c8 | ||
|
|
9d43782d38 | ||
|
|
5a6720edb3 | ||
|
|
d5095fa98c | ||
|
|
14ef99cd71 | ||
|
|
70da588273 | ||
|
|
2f4d048fd9 | ||
|
|
09e6b2d45f | ||
|
|
d0c2698fda | ||
|
|
d5cc2452d2 | ||
|
|
c7afa94b08 | ||
|
|
78e8348c00 | ||
|
|
cdbd393db9 | ||
|
|
5ebda87fc8 | ||
|
|
07afe73512 | ||
|
|
49602cedde | ||
|
|
0f01a0d1f9 | ||
|
|
d53a1ce7a1 | ||
|
|
bbe85304da | ||
|
|
8bbfe9b6d8 | ||
|
|
66fc532d7f | ||
|
|
4a841b1594 | ||
|
|
f81e2ad7a0 | ||
|
|
13a0978ffb | ||
|
|
35d83f2380 | ||
|
|
65f786504b | ||
|
|
70563be965 | ||
|
|
26687734b5 | ||
|
|
220ac18ce1 | ||
|
|
ad4fcb7814 | ||
|
|
33a086637e |
No files matched your search
@@ -0,0 +1,216 @@
|
||||
---
|
||||
Language: Cpp
|
||||
BasedOnStyle: WebKit
|
||||
AccessModifierOffset: -4
|
||||
AlignAfterOpenBracket: DontAlign
|
||||
AlignArrayOfStructures: None
|
||||
AlignConsecutiveAssignments:
|
||||
Enabled: false
|
||||
AcrossEmptyLines: false
|
||||
AcrossComments: false
|
||||
AlignCompound: false
|
||||
PadOperators: true
|
||||
AlignConsecutiveBitFields:
|
||||
Enabled: false
|
||||
AcrossEmptyLines: false
|
||||
AcrossComments: false
|
||||
AlignCompound: false
|
||||
PadOperators: false
|
||||
AlignConsecutiveDeclarations:
|
||||
Enabled: false
|
||||
AcrossEmptyLines: false
|
||||
AcrossComments: false
|
||||
AlignCompound: false
|
||||
PadOperators: false
|
||||
AlignConsecutiveMacros:
|
||||
Enabled: false
|
||||
AcrossEmptyLines: false
|
||||
AcrossComments: false
|
||||
AlignCompound: false
|
||||
PadOperators: false
|
||||
AlignEscapedNewlines: Right
|
||||
AlignOperands: DontAlign
|
||||
AlignTrailingComments:
|
||||
Kind: Never
|
||||
OverEmptyLines: 0
|
||||
AllowAllArgumentsOnNextLine: true
|
||||
AllowAllParametersOfDeclarationOnNextLine: true
|
||||
AllowShortBlocksOnASingleLine: Empty
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortEnumsOnASingleLine: true
|
||||
AllowShortFunctionsOnASingleLine: All
|
||||
AllowShortIfStatementsOnASingleLine: Never
|
||||
AllowShortLambdasOnASingleLine: All
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AlwaysBreakAfterDefinitionReturnType: None
|
||||
AlwaysBreakBeforeMultilineStrings: false
|
||||
AttributeMacros:
|
||||
- __capability
|
||||
BinPackArguments: true
|
||||
BinPackParameters: true
|
||||
BitFieldColonSpacing: Both
|
||||
BraceWrapping:
|
||||
AfterCaseLabel: false
|
||||
AfterClass: false
|
||||
AfterControlStatement: Never
|
||||
AfterEnum: false
|
||||
AfterFunction: true
|
||||
AfterNamespace: false
|
||||
AfterObjCDeclaration: false
|
||||
AfterStruct: false
|
||||
AfterUnion: false
|
||||
AfterExternBlock: false
|
||||
BeforeCatch: false
|
||||
BeforeElse: false
|
||||
BeforeLambdaBody: false
|
||||
BeforeWhile: false
|
||||
IndentBraces: false
|
||||
SplitEmptyFunction: true
|
||||
SplitEmptyRecord: true
|
||||
SplitEmptyNamespace: true
|
||||
BreakAfterAttributes: Leave
|
||||
BreakAfterJavaFieldAnnotations: false
|
||||
BreakArrays: true
|
||||
BreakBeforeBinaryOperators: All
|
||||
BreakBeforeBraces: WebKit
|
||||
BreakBeforeConceptDeclarations: Always
|
||||
BreakBeforeInlineASMColon: OnlyMultiline
|
||||
BreakBeforeTernaryOperators: true
|
||||
BreakConstructorInitializers: BeforeComma
|
||||
BreakInheritanceList: BeforeColon
|
||||
BreakStringLiterals: true
|
||||
ColumnLimit: 0
|
||||
CommentPragmas: "^ IWYU pragma:"
|
||||
CompactNamespaces: false
|
||||
ConstructorInitializerIndentWidth: 4
|
||||
ContinuationIndentWidth: 4
|
||||
Cpp11BracedListStyle: false
|
||||
DerivePointerAlignment: false
|
||||
DisableFormat: false
|
||||
EmptyLineAfterAccessModifier: Never
|
||||
EmptyLineBeforeAccessModifier: LogicalBlock
|
||||
ExperimentalAutoDetectBinPacking: false
|
||||
FixNamespaceComments: false
|
||||
ForEachMacros:
|
||||
- foreach
|
||||
- Q_FOREACH
|
||||
- BOOST_FOREACH
|
||||
IfMacros:
|
||||
- KJ_IF_MAYBE
|
||||
IncludeBlocks: Preserve
|
||||
IncludeCategories:
|
||||
- Regex: ^"(llvm|llvm-c|clang|clang-c)/
|
||||
Priority: 2
|
||||
SortPriority: 0
|
||||
CaseSensitive: false
|
||||
- Regex: ^(<|"(gtest|gmock|isl|json)/)
|
||||
Priority: 3
|
||||
SortPriority: 0
|
||||
CaseSensitive: false
|
||||
- Regex: .*
|
||||
Priority: 1
|
||||
SortPriority: 0
|
||||
CaseSensitive: false
|
||||
IncludeIsMainRegex: (Test)?$
|
||||
IncludeIsMainSourceRegex: ""
|
||||
IndentAccessModifiers: false
|
||||
IndentCaseBlocks: false
|
||||
IndentCaseLabels: false
|
||||
IndentExternBlock: AfterExternBlock
|
||||
IndentGotoLabels: true
|
||||
IndentPPDirectives: None
|
||||
IndentRequiresClause: true
|
||||
IndentWidth: 4
|
||||
IndentWrappedFunctionNames: false
|
||||
InsertBraces: false
|
||||
InsertNewlineAtEOF: false
|
||||
InsertTrailingCommas: None
|
||||
IntegerLiteralSeparator:
|
||||
Binary: 0
|
||||
BinaryMinDigits: 0
|
||||
Decimal: 0
|
||||
DecimalMinDigits: 0
|
||||
Hex: 0
|
||||
HexMinDigits: 0
|
||||
JavaScriptQuotes: Leave
|
||||
JavaScriptWrapImports: true
|
||||
LambdaBodyIndentation: Signature
|
||||
LineEnding: CRLF
|
||||
MacroBlockBegin: ""
|
||||
MacroBlockEnd: ""
|
||||
MaxEmptyLinesToKeep: 1
|
||||
NamespaceIndentation: Inner
|
||||
ObjCBinPackProtocolList: Auto
|
||||
ObjCBlockIndentWidth: 4
|
||||
ObjCBreakBeforeNestedBlockParam: true
|
||||
ObjCSpaceAfterProperty: true
|
||||
ObjCSpaceBeforeProtocolList: true
|
||||
PPIndentWidth: -1
|
||||
PackConstructorInitializers: BinPack
|
||||
PenaltyBreakAssignment: 2
|
||||
PenaltyBreakBeforeFirstCallParameter: 19
|
||||
PenaltyBreakComment: 300
|
||||
PenaltyBreakFirstLessLess: 120
|
||||
PenaltyBreakOpenParenthesis: 0
|
||||
PenaltyBreakString: 1000
|
||||
PenaltyBreakTemplateDeclaration: 10
|
||||
PenaltyExcessCharacter: 1000000
|
||||
PenaltyIndentedWhitespace: 0
|
||||
PenaltyReturnTypeOnItsOwnLine: 60
|
||||
PointerAlignment: Left
|
||||
QualifierAlignment: Leave
|
||||
ReferenceAlignment: Pointer
|
||||
ReflowComments: true
|
||||
RemoveBracesLLVM: false
|
||||
RemoveSemicolon: false
|
||||
RequiresClausePosition: OwnLine
|
||||
RequiresExpressionIndentation: OuterScope
|
||||
SeparateDefinitionBlocks: Leave
|
||||
ShortNamespaceLines: 1
|
||||
SortIncludes: CaseInsensitive
|
||||
SortJavaStaticImport: Before
|
||||
SortUsingDeclarations: LexicographicNumeric
|
||||
SpaceAfterCStyleCast: false
|
||||
SpaceAfterLogicalNot: false
|
||||
SpaceAfterTemplateKeyword: true
|
||||
SpaceAroundPointerQualifiers: Default
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceBeforeCaseColon: false
|
||||
SpaceBeforeCpp11BracedList: true
|
||||
SpaceBeforeCtorInitializerColon: true
|
||||
SpaceBeforeInheritanceColon: true
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpaceBeforeParensOptions:
|
||||
AfterControlStatements: true
|
||||
AfterForeachMacros: true
|
||||
AfterFunctionDeclarationName: false
|
||||
AfterFunctionDefinitionName: false
|
||||
AfterIfMacros: true
|
||||
AfterOverloadedOperator: false
|
||||
AfterRequiresInClause: false
|
||||
AfterRequiresInExpression: false
|
||||
BeforeNonEmptyParentheses: false
|
||||
SpaceBeforeRangeBasedForLoopColon: true
|
||||
SpaceBeforeSquareBrackets: false
|
||||
SpaceInEmptyBlock: true
|
||||
SpacesBeforeTrailingComments: 1
|
||||
SpacesInAngles: Never
|
||||
SpacesInContainerLiterals: true
|
||||
SpacesInLineCommentPrefix:
|
||||
Minimum: 1
|
||||
Maximum: -1
|
||||
SpacesInSquareBrackets: false
|
||||
Standard: Latest
|
||||
StatementAttributeLikeMacros:
|
||||
- Q_EMIT
|
||||
StatementMacros:
|
||||
- Q_UNUSED
|
||||
- QT_REQUIRE_VERSION
|
||||
TabWidth: 4
|
||||
UseTab: Never
|
||||
WhitespaceSensitiveMacros:
|
||||
- BOOST_PP_STRINGIZE
|
||||
- CF_SWIFT_NAME
|
||||
- NS_SWIFT_NAME
|
||||
- PP_STRINGIZE
|
||||
- STRINGIZE
|
||||
@@ -0,0 +1,10 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
end_of_line = crlf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.c,*.cc,*.cpp,*.hpp,*.h]
|
||||
indent_style = space
|
||||
indent_size = 4
|
||||
@@ -0,0 +1,7 @@
|
||||
* text=auto eol=crlf
|
||||
*.cpp text eol=crlf
|
||||
*.cc text eol=crlf
|
||||
*.c text eol=crlf
|
||||
*.h text eol=crlf
|
||||
*.hpp text eol=crlf
|
||||
*.sh text eol=lf
|
||||
@@ -0,0 +1,2 @@
|
||||
ko_fi: hyblocker
|
||||
patreon: hekky
|
||||
@@ -0,0 +1,58 @@
|
||||
---
|
||||
name: Bug report
|
||||
description: Report an issue with Space Calibrator.
|
||||
title: '[Bug]: '
|
||||
labels:
|
||||
- bug
|
||||
body:
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Description
|
||||
description: A clear and short description of the problem
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Steps to reproduce
|
||||
description: >-
|
||||
Provide clear steps to trigger the issue if possible. If you're unsure,
|
||||
describe what you did prior to it happening and what you tried doing to
|
||||
solve it.
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Expected behaviour
|
||||
description: Describe what you expected to happen
|
||||
- type: input
|
||||
attributes:
|
||||
label: VR headset
|
||||
description: >-
|
||||
The VR headset you are using, e.g. Meta Quest 3, Pico 4, Steam Frame,
|
||||
Samsung Galaxy XR, etc.
|
||||
placeholder: Meta Quest 3
|
||||
- type: input
|
||||
attributes:
|
||||
label: Connection method
|
||||
description: >-
|
||||
How you are connecting your VR headset to your computer, eg Virtual
|
||||
Desktop, Steam Link, Air Link, Oculus Link Cable.
|
||||
placeholder: Steam Link
|
||||
- type: input
|
||||
attributes:
|
||||
label: What are you calibrating with?
|
||||
description: List the trackers you are using here if you're unsure.
|
||||
placeholder: Vive Tracker 3.0
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: >-
|
||||
You are advised to also provide logs to help make it easier for me to
|
||||
troubleshoot your issues. You can go to Space Calibrator -> Settings and
|
||||
click the [View logs] button to open the folder. Please attach
|
||||
`log_overlay_latest.log` and `log_driver_latest.log`. Thank you!
|
||||
|
||||
---
|
||||
|
||||
<!--
|
||||
If you are having trouble setting this up with SteamVR and would like help, the fastest way is to ask in the Discord group. https://discord.com/invite/m7g2Wyj
|
||||
|
||||
If you are having issues after updating SteamVR, please check for a new release at https://github.com/pushrax/OpenVR-SpaceCalibrator/releases before posting an issue.
|
||||
-->
|
||||
@@ -0,0 +1,10 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest an idea for this project
|
||||
title: ''
|
||||
labels: enhancement
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 256 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 56 KiB |
@@ -0,0 +1,53 @@
|
||||
on:
|
||||
push:
|
||||
branches: [ "develop" ]
|
||||
pull_request:
|
||||
branches: [ "develop" ]
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
BUILD_TYPE: RelWithDebInfo
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build (${{ matrix.name }})
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- name: windows-x64
|
||||
os: windows-2025-vs2026
|
||||
artifact-name: space-calibrator-win64
|
||||
|
||||
- name: linux-x64
|
||||
os: ubuntu-24.04
|
||||
container: registry.gitlab.steamos.cloud/steamrt/steamrt4/sdk:latest
|
||||
artifact-name: space-calibrator-linux-x64
|
||||
|
||||
- name: linux-arm64
|
||||
os: ubuntu-24.04-arm
|
||||
container: registry.gitlab.steamos.cloud/steamrt/steamrt4/sdk/arm64:latest
|
||||
artifact-name: space-calibrator-linux-arm64
|
||||
|
||||
container: ${{ matrix.container }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Configure CMake
|
||||
run: cmake -B ./build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
|
||||
|
||||
- name: Build
|
||||
run: cmake --build ./build --config ${{env.BUILD_TYPE}}
|
||||
|
||||
- name: Upload artifacts
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: ${{ matrix.artifact-name }}
|
||||
path: |
|
||||
./build/artifacts/
|
||||
./build/driver_01spacecalibrator/
|
||||
@@ -4,6 +4,9 @@ ipch
|
||||
*.opendb
|
||||
*.aps
|
||||
*.user
|
||||
/OpenVR-SpaceCalibrator/x64/
|
||||
/x64/
|
||||
/lib/boost*
|
||||
.code
|
||||
/install/*.exe
|
||||
[bB]in
|
||||
[bB]in_linux64
|
||||
[bB]in_linuxaarch64
|
||||
[oO]ut
|
||||
@@ -0,0 +1,39 @@
|
||||
[submodule "vendor/imgui"]
|
||||
path = vendor/imgui
|
||||
url = https://github.com/ocornut/imgui
|
||||
[submodule "vendor/openvr"]
|
||||
path = vendor/openvr
|
||||
url = https://github.com/ValveSoftware/openvr
|
||||
[submodule "vendor/glfw"]
|
||||
path = vendor/glfw
|
||||
url = https://github.com/glfw/glfw
|
||||
[submodule "vendor/minhook"]
|
||||
path = vendor/minhook
|
||||
url = https://github.com/TsudaKageyu/minhook
|
||||
[submodule "vendor/fmt"]
|
||||
path = vendor/fmt
|
||||
url = https://github.com/fmtlib/fmt
|
||||
[submodule "vendor/quill"]
|
||||
path = vendor/quill
|
||||
url = https://github.com/odygrd/quill
|
||||
[submodule "vendor/glaze"]
|
||||
path = vendor/glaze
|
||||
url = https://github.com/stephenberry/glaze.git
|
||||
[submodule "vendor/volk"]
|
||||
path = vendor/volk
|
||||
url = https://github.com/zeux/volk.git
|
||||
[submodule "vendor/Vulkan-Headers"]
|
||||
path = vendor/Vulkan-Headers
|
||||
url = https://github.com/KhronosGroup/Vulkan-Headers.git
|
||||
[submodule "vendor/implot"]
|
||||
path = vendor/implot
|
||||
url = https://github.com/epezent/implot
|
||||
[submodule "vendor/simpleble"]
|
||||
path = vendor/simpleble
|
||||
url = https://github.com/simpleble/simpleble
|
||||
[submodule "vendor/implot3d"]
|
||||
path = vendor/implot3d
|
||||
url = git@github.com:brenocq/implot3d.git
|
||||
[submodule "vendor/zstd"]
|
||||
path = vendor/zstd
|
||||
url = https://github.com/facebook/zstd.git
|
||||
@@ -0,0 +1,91 @@
|
||||
cmake_minimum_required (VERSION 3.8)
|
||||
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
# Build directory
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/artifacts)
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/artifacts)
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/artifacts)
|
||||
|
||||
# Function because lazy
|
||||
function(adjust_bin_paths lib)
|
||||
set_target_properties(${lib}
|
||||
PROPERTIES
|
||||
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/artifacts
|
||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/artifacts
|
||||
ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/artifacts
|
||||
)
|
||||
endfunction()
|
||||
|
||||
# windows prefers win8.1 sdk instead of win 10 sdk for some god forsaken reason
|
||||
if(WIN32)
|
||||
set(CMAKE_SYSTEM_VERSION 10.0 CACHE STRING "Forcing Win10 SDK" FORCE)
|
||||
else()
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
endif()
|
||||
|
||||
project("SpaceCalibrator")
|
||||
|
||||
# 3rd party stuff
|
||||
add_subdirectory ("vendor")
|
||||
|
||||
# warnings for our code
|
||||
if ("${CMAKE_CXX_COMPILER}" MATCHES "Clang" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
|
||||
# add_compile_options(-Werror=return-type -Wall -Wextra -Wpedantic /MP)
|
||||
add_compile_options(-Werror=return-type)
|
||||
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
|
||||
# add_compile_options(-Werror=return-type -Wall -Wextra -Wpedantic)
|
||||
add_compile_options(-Werror=return-type -Wno-psabi)
|
||||
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "Intel")
|
||||
# add_compile_options(-Werror=return-type -Wall -Wextra -Wpedantic)
|
||||
add_compile_options(/Qdiag-error-return)
|
||||
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" OR "${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
|
||||
add_compile_options(
|
||||
# treat warnings as errors
|
||||
/we4715 # not all control paths return a value
|
||||
/we4828 # disallow invalid characters
|
||||
# prinf-like functions: format mismatch
|
||||
/we4473 # : not enough arguments passed for format string
|
||||
/we4474 # : too many arguments passed for format string
|
||||
/we4475 # : length modifier cannot be used with type field character in format specifier
|
||||
/we4476 # : unknown type field character in format specifier
|
||||
/we4477 # : format string requires an argument of type , but variadic argument has type
|
||||
/we4478 # : positional and non-positional placeholders cannot be mixed in the same format string
|
||||
/we4775 # nonstandard extension used in format string of function
|
||||
/we4776 # % is not allowed in the format string of function
|
||||
/we4777 # : format string requires an argument of type , but variadic argument has type
|
||||
/we4778 # : unterminated format string
|
||||
# macro arg mismatch
|
||||
/we4002 # too many actual parameters for macro 'identifier'
|
||||
/we4003 # not enough actual parameters for macro 'identifier'
|
||||
/Zc:threadSafeInit- # https://connect.microsoft.com/VisualStudio/feedback/details/1789709/visual-c-2015-runtime-broken-on-windows-server-2003-c-11-magic-statics
|
||||
/MP # multiprocessor compilation
|
||||
/utf-8 # utf-8 source & exec
|
||||
/GF) # eliminate duplicate strings
|
||||
endif()
|
||||
|
||||
# Match SteamVR build flags on MSVC
|
||||
if(MSVC)
|
||||
add_compile_options(/guard:cf /GS)
|
||||
add_link_options("/GUARD:CF")
|
||||
add_compile_options($<$<CONFIG:Release>:/Ot> $<$<CONFIG:Release>:/Oi> $<$<CONFIG:Release>:/Gy>)
|
||||
endif()
|
||||
|
||||
# force relative RPATH for linux so that shared objects may be found relative to the binary (fixes Steam launch)
|
||||
if (UNIX AND NOT APPLE)
|
||||
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
|
||||
SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
|
||||
SET(CMAKE_INSTALL_RPATH "")
|
||||
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH FALSE)
|
||||
SET(CMAKE_BUILD_RPATH_USE_ORIGIN TRUE)
|
||||
endif()
|
||||
|
||||
# add editorconfig to vcxprojs
|
||||
if (WIN32)
|
||||
add_custom_target(FormattingRules SOURCES "${CMAKE_SOURCE_DIR}/.editorconfig" "${CMAKE_SOURCE_DIR}/.clang-format")
|
||||
set_property(TARGET FormattingRules PROPERTY FOLDER "Solution Items")
|
||||
endif()
|
||||
|
||||
# Include project
|
||||
add_subdirectory ("src")
|
||||
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "x64-Debug",
|
||||
"generator": "Ninja",
|
||||
"configurationType": "Debug",
|
||||
"inheritEnvironments": [ "msvc_x64_x64" ],
|
||||
"buildRoot": "${projectDir}\\out\\build\\${name}",
|
||||
"installRoot": "${projectDir}\\out\\install\\${name}",
|
||||
"cmakeCommandArgs": "",
|
||||
"buildCommandArgs": "",
|
||||
"ctestCommandArgs": ""
|
||||
},
|
||||
{
|
||||
"name": "x64-Release",
|
||||
"generator": "Ninja",
|
||||
"configurationType": "RelWithDebInfo",
|
||||
"inheritEnvironments": [ "msvc_x64_x64" ],
|
||||
"buildRoot": "${projectDir}\\out\\build\\${name}",
|
||||
"installRoot": "${projectDir}\\out\\install\\${name}",
|
||||
"cmakeCommandArgs": "",
|
||||
"buildCommandArgs": "",
|
||||
"ctestCommandArgs": ""
|
||||
},
|
||||
{
|
||||
"name": "x64-Clang-Debug",
|
||||
"generator": "Ninja",
|
||||
"configurationType": "Debug",
|
||||
"inheritEnvironments": [ "clang_cl_x64_x64" ],
|
||||
"buildRoot": "${projectDir}\\out\\build\\${name}",
|
||||
"installRoot": "${projectDir}\\out\\install\\${name}",
|
||||
"cmakeCommandArgs": "",
|
||||
"buildCommandArgs": "",
|
||||
"ctestCommandArgs": ""
|
||||
},
|
||||
{
|
||||
"name": "x64-Clang-Release",
|
||||
"generator": "Ninja",
|
||||
"configurationType": "RelWithDebInfo",
|
||||
"inheritEnvironments": [ "clang_cl_x64_x64" ],
|
||||
"buildRoot": "${projectDir}\\out\\build\\${name}",
|
||||
"installRoot": "${projectDir}\\out\\install\\${name}",
|
||||
"cmakeCommandArgs": "",
|
||||
"buildCommandArgs": "",
|
||||
"ctestCommandArgs": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
@ECHO OFF
|
||||
cmake -G "Visual Studio 17 2022" -A x64 -B bin -S .
|
||||
@@ -1,6 +1,9 @@
|
||||
== Space Calibrator ==
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2018 Justin Li
|
||||
Copyright (c) 2023-2026 Hyblocker and other contributors
|
||||
Copyright (c) 2020-2022 Justin Li and other contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
@@ -19,3 +22,843 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
This software also includes components licensed as follows:
|
||||
|
||||
== MinHook ==
|
||||
|
||||
MinHook - The Minimalistic API Hooking Library for x64/x86
|
||||
Copyright (C) 2009-2017 Tsuda Kageyu.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER
|
||||
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
================================================================================
|
||||
Portions of this software are Copyright (c) 2008-2009, Vyacheslav Patkov.
|
||||
================================================================================
|
||||
Hacker Disassembler Engine 32 C
|
||||
Copyright (c) 2008-2009, Vyacheslav Patkov.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
Hacker Disassembler Engine 64 C
|
||||
Copyright (c) 2008-2009, Vyacheslav Patkov.
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
|
||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
== ImGui ==
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014-2026 Omar Cornut
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
== ImPlot ==
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020-2024 Evan Pezent
|
||||
Copyright (c) 2025-2026 Breno Cunha Queiroz
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
== glfw ==
|
||||
|
||||
Copyright (c) 2002-2006 Marcus Geelnard
|
||||
|
||||
Copyright (c) 2006-2019 Camilla Löwy
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would
|
||||
be appreciated but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must not
|
||||
be misrepresented as being the original software.
|
||||
|
||||
3. This notice may not be removed or altered from any source
|
||||
distribution.
|
||||
|
||||
== glad ==
|
||||
|
||||
The glad source code:
|
||||
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2013-2022 David Herberth
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
|
||||
The Khronos Specifications:
|
||||
|
||||
Copyright (c) 2013-2020 The Khronos Group Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
|
||||
The EGL Specification and various headers:
|
||||
|
||||
Copyright (c) 2007-2016 The Khronos Group Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and/or associated documentation files (the
|
||||
"Materials"), to deal in the Materials without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Materials, and to
|
||||
permit persons to whom the Materials are furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included
|
||||
in all copies or substantial portions of the Materials.
|
||||
|
||||
THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
|
||||
|
||||
== Eigen ==
|
||||
|
||||
Portions copyrighted by many parties; see source code for names.
|
||||
(The upstream distribution does not provide any single listing)
|
||||
|
||||
This application uses only the MPL-2.0 licensed components of Eigen.
|
||||
|
||||
Mozilla Public License Version 2.0
|
||||
==================================
|
||||
|
||||
1. Definitions
|
||||
--------------
|
||||
|
||||
1.1. "Contributor"
|
||||
means each individual or legal entity that creates, contributes to
|
||||
the creation of, or owns Covered Software.
|
||||
|
||||
1.2. "Contributor Version"
|
||||
means the combination of the Contributions of others (if any) used
|
||||
by a Contributor and that particular Contributor's Contribution.
|
||||
|
||||
1.3. "Contribution"
|
||||
means Covered Software of a particular Contributor.
|
||||
|
||||
1.4. "Covered Software"
|
||||
means Source Code Form to which the initial Contributor has attached
|
||||
the notice in Exhibit A, the Executable Form of such Source Code
|
||||
Form, and Modifications of such Source Code Form, in each case
|
||||
including portions thereof.
|
||||
|
||||
1.5. "Incompatible With Secondary Licenses"
|
||||
means
|
||||
|
||||
(a) that the initial Contributor has attached the notice described
|
||||
in Exhibit B to the Covered Software; or
|
||||
|
||||
(b) that the Covered Software was made available under the terms of
|
||||
version 1.1 or earlier of the License, but not also under the
|
||||
terms of a Secondary License.
|
||||
|
||||
1.6. "Executable Form"
|
||||
means any form of the work other than Source Code Form.
|
||||
|
||||
1.7. "Larger Work"
|
||||
means a work that combines Covered Software with other material, in
|
||||
a separate file or files, that is not Covered Software.
|
||||
|
||||
1.8. "License"
|
||||
means this document.
|
||||
|
||||
1.9. "Licensable"
|
||||
means having the right to grant, to the maximum extent possible,
|
||||
whether at the time of the initial grant or subsequently, any and
|
||||
all of the rights conveyed by this License.
|
||||
|
||||
1.10. "Modifications"
|
||||
means any of the following:
|
||||
|
||||
(a) any file in Source Code Form that results from an addition to,
|
||||
deletion from, or modification of the contents of Covered
|
||||
Software; or
|
||||
|
||||
(b) any new file in Source Code Form that contains any Covered
|
||||
Software.
|
||||
|
||||
1.11. "Patent Claims" of a Contributor
|
||||
means any patent claim(s), including without limitation, method,
|
||||
process, and apparatus claims, in any patent Licensable by such
|
||||
Contributor that would be infringed, but for the grant of the
|
||||
License, by the making, using, selling, offering for sale, having
|
||||
made, import, or transfer of either its Contributions or its
|
||||
Contributor Version.
|
||||
|
||||
1.12. "Secondary License"
|
||||
means either the GNU General Public License, Version 2.0, the GNU
|
||||
Lesser General Public License, Version 2.1, the GNU Affero General
|
||||
Public License, Version 3.0, or any later versions of those
|
||||
licenses.
|
||||
|
||||
1.13. "Source Code Form"
|
||||
means the form of the work preferred for making modifications.
|
||||
|
||||
1.14. "You" (or "Your")
|
||||
means an individual or a legal entity exercising rights under this
|
||||
License. For legal entities, "You" includes any entity that
|
||||
controls, is controlled by, or is under common control with You. For
|
||||
purposes of this definition, "control" means (a) the power, direct
|
||||
or indirect, to cause the direction or management of such entity,
|
||||
whether by contract or otherwise, or (b) ownership of more than
|
||||
fifty percent (50%) of the outstanding shares or beneficial
|
||||
ownership of such entity.
|
||||
|
||||
2. License Grants and Conditions
|
||||
--------------------------------
|
||||
|
||||
2.1. Grants
|
||||
|
||||
Each Contributor hereby grants You a world-wide, royalty-free,
|
||||
non-exclusive license:
|
||||
|
||||
(a) under intellectual property rights (other than patent or trademark)
|
||||
Licensable by such Contributor to use, reproduce, make available,
|
||||
modify, display, perform, distribute, and otherwise exploit its
|
||||
Contributions, either on an unmodified basis, with Modifications, or
|
||||
as part of a Larger Work; and
|
||||
|
||||
(b) under Patent Claims of such Contributor to make, use, sell, offer
|
||||
for sale, have made, import, and otherwise transfer either its
|
||||
Contributions or its Contributor Version.
|
||||
|
||||
2.2. Effective Date
|
||||
|
||||
The licenses granted in Section 2.1 with respect to any Contribution
|
||||
become effective for each Contribution on the date the Contributor first
|
||||
distributes such Contribution.
|
||||
|
||||
2.3. Limitations on Grant Scope
|
||||
|
||||
The licenses granted in this Section 2 are the only rights granted under
|
||||
this License. No additional rights or licenses will be implied from the
|
||||
distribution or licensing of Covered Software under this License.
|
||||
Notwithstanding Section 2.1(b) above, no patent license is granted by a
|
||||
Contributor:
|
||||
|
||||
(a) for any code that a Contributor has removed from Covered Software;
|
||||
or
|
||||
|
||||
(b) for infringements caused by: (i) Your and any other third party's
|
||||
modifications of Covered Software, or (ii) the combination of its
|
||||
Contributions with other software (except as part of its Contributor
|
||||
Version); or
|
||||
|
||||
(c) under Patent Claims infringed by Covered Software in the absence of
|
||||
its Contributions.
|
||||
|
||||
This License does not grant any rights in the trademarks, service marks,
|
||||
or logos of any Contributor (except as may be necessary to comply with
|
||||
the notice requirements in Section 3.4).
|
||||
|
||||
2.4. Subsequent Licenses
|
||||
|
||||
No Contributor makes additional grants as a result of Your choice to
|
||||
distribute the Covered Software under a subsequent version of this
|
||||
License (see Section 10.2) or under the terms of a Secondary License (if
|
||||
permitted under the terms of Section 3.3).
|
||||
|
||||
2.5. Representation
|
||||
|
||||
Each Contributor represents that the Contributor believes its
|
||||
Contributions are its original creation(s) or it has sufficient rights
|
||||
to grant the rights to its Contributions conveyed by this License.
|
||||
|
||||
2.6. Fair Use
|
||||
|
||||
This License is not intended to limit any rights You have under
|
||||
applicable copyright doctrines of fair use, fair dealing, or other
|
||||
equivalents.
|
||||
|
||||
2.7. Conditions
|
||||
|
||||
Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
|
||||
in Section 2.1.
|
||||
|
||||
3. Responsibilities
|
||||
-------------------
|
||||
|
||||
3.1. Distribution of Source Form
|
||||
|
||||
All distribution of Covered Software in Source Code Form, including any
|
||||
Modifications that You create or to which You contribute, must be under
|
||||
the terms of this License. You must inform recipients that the Source
|
||||
Code Form of the Covered Software is governed by the terms of this
|
||||
License, and how they can obtain a copy of this License. You may not
|
||||
attempt to alter or restrict the recipients' rights in the Source Code
|
||||
Form.
|
||||
|
||||
3.2. Distribution of Executable Form
|
||||
|
||||
If You distribute Covered Software in Executable Form then:
|
||||
|
||||
(a) such Covered Software must also be made available in Source Code
|
||||
Form, as described in Section 3.1, and You must inform recipients of
|
||||
the Executable Form how they can obtain a copy of such Source Code
|
||||
Form by reasonable means in a timely manner, at a charge no more
|
||||
than the cost of distribution to the recipient; and
|
||||
|
||||
(b) You may distribute such Executable Form under the terms of this
|
||||
License, or sublicense it under different terms, provided that the
|
||||
license for the Executable Form does not attempt to limit or alter
|
||||
the recipients' rights in the Source Code Form under this License.
|
||||
|
||||
3.3. Distribution of a Larger Work
|
||||
|
||||
You may create and distribute a Larger Work under terms of Your choice,
|
||||
provided that You also comply with the requirements of this License for
|
||||
the Covered Software. If the Larger Work is a combination of Covered
|
||||
Software with a work governed by one or more Secondary Licenses, and the
|
||||
Covered Software is not Incompatible With Secondary Licenses, this
|
||||
License permits You to additionally distribute such Covered Software
|
||||
under the terms of such Secondary License(s), so that the recipient of
|
||||
the Larger Work may, at their option, further distribute the Covered
|
||||
Software under the terms of either this License or such Secondary
|
||||
License(s).
|
||||
|
||||
3.4. Notices
|
||||
|
||||
You may not remove or alter the substance of any license notices
|
||||
(including copyright notices, patent notices, disclaimers of warranty,
|
||||
or limitations of liability) contained within the Source Code Form of
|
||||
the Covered Software, except that You may alter any license notices to
|
||||
the extent required to remedy known factual inaccuracies.
|
||||
|
||||
3.5. Application of Additional Terms
|
||||
|
||||
You may choose to offer, and to charge a fee for, warranty, support,
|
||||
indemnity or liability obligations to one or more recipients of Covered
|
||||
Software. However, You may do so only on Your own behalf, and not on
|
||||
behalf of any Contributor. You must make it absolutely clear that any
|
||||
such warranty, support, indemnity, or liability obligation is offered by
|
||||
You alone, and You hereby agree to indemnify every Contributor for any
|
||||
liability incurred by such Contributor as a result of warranty, support,
|
||||
indemnity or liability terms You offer. You may include additional
|
||||
disclaimers of warranty and limitations of liability specific to any
|
||||
jurisdiction.
|
||||
|
||||
4. Inability to Comply Due to Statute or Regulation
|
||||
---------------------------------------------------
|
||||
|
||||
If it is impossible for You to comply with any of the terms of this
|
||||
License with respect to some or all of the Covered Software due to
|
||||
statute, judicial order, or regulation then You must: (a) comply with
|
||||
the terms of this License to the maximum extent possible; and (b)
|
||||
describe the limitations and the code they affect. Such description must
|
||||
be placed in a text file included with all distributions of the Covered
|
||||
Software under this License. Except to the extent prohibited by statute
|
||||
or regulation, such description must be sufficiently detailed for a
|
||||
recipient of ordinary skill to be able to understand it.
|
||||
|
||||
5. Termination
|
||||
--------------
|
||||
|
||||
5.1. The rights granted under this License will terminate automatically
|
||||
if You fail to comply with any of its terms. However, if You become
|
||||
compliant, then the rights granted under this License from a particular
|
||||
Contributor are reinstated (a) provisionally, unless and until such
|
||||
Contributor explicitly and finally terminates Your grants, and (b) on an
|
||||
ongoing basis, if such Contributor fails to notify You of the
|
||||
non-compliance by some reasonable means prior to 60 days after You have
|
||||
come back into compliance. Moreover, Your grants from a particular
|
||||
Contributor are reinstated on an ongoing basis if such Contributor
|
||||
notifies You of the non-compliance by some reasonable means, this is the
|
||||
first time You have received notice of non-compliance with this License
|
||||
from such Contributor, and You become compliant prior to 30 days after
|
||||
Your receipt of the notice.
|
||||
|
||||
5.2. If You initiate litigation against any entity by asserting a patent
|
||||
infringement claim (excluding declaratory judgment actions,
|
||||
counter-claims, and cross-claims) alleging that a Contributor Version
|
||||
directly or indirectly infringes any patent, then the rights granted to
|
||||
You by any and all Contributors for the Covered Software under Section
|
||||
2.1 of this License shall terminate.
|
||||
|
||||
5.3. In the event of termination under Sections 5.1 or 5.2 above, all
|
||||
end user license agreements (excluding distributors and resellers) which
|
||||
have been validly granted by You or Your distributors under this License
|
||||
prior to termination shall survive termination.
|
||||
|
||||
************************************************************************
|
||||
* *
|
||||
* 6. Disclaimer of Warranty *
|
||||
* ------------------------- *
|
||||
* *
|
||||
* Covered Software is provided under this License on an "as is" *
|
||||
* basis, without warranty of any kind, either expressed, implied, or *
|
||||
* statutory, including, without limitation, warranties that the *
|
||||
* Covered Software is free of defects, merchantable, fit for a *
|
||||
* particular purpose or non-infringing. The entire risk as to the *
|
||||
* quality and performance of the Covered Software is with You. *
|
||||
* Should any Covered Software prove defective in any respect, You *
|
||||
* (not any Contributor) assume the cost of any necessary servicing, *
|
||||
* repair, or correction. This disclaimer of warranty constitutes an *
|
||||
* essential part of this License. No use of any Covered Software is *
|
||||
* authorized under this License except under this disclaimer. *
|
||||
* *
|
||||
************************************************************************
|
||||
|
||||
************************************************************************
|
||||
* *
|
||||
* 7. Limitation of Liability *
|
||||
* -------------------------- *
|
||||
* *
|
||||
* Under no circumstances and under no legal theory, whether tort *
|
||||
* (including negligence), contract, or otherwise, shall any *
|
||||
* Contributor, or anyone who distributes Covered Software as *
|
||||
* permitted above, be liable to You for any direct, indirect, *
|
||||
* special, incidental, or consequential damages of any character *
|
||||
* including, without limitation, damages for lost profits, loss of *
|
||||
* goodwill, work stoppage, computer failure or malfunction, or any *
|
||||
* and all other commercial damages or losses, even if such party *
|
||||
* shall have been informed of the possibility of such damages. This *
|
||||
* limitation of liability shall not apply to liability for death or *
|
||||
* personal injury resulting from such party's negligence to the *
|
||||
* extent applicable law prohibits such limitation. Some *
|
||||
* jurisdictions do not allow the exclusion or limitation of *
|
||||
* incidental or consequential damages, so this exclusion and *
|
||||
* limitation may not apply to You. *
|
||||
* *
|
||||
************************************************************************
|
||||
|
||||
8. Litigation
|
||||
-------------
|
||||
|
||||
Any litigation relating to this License may be brought only in the
|
||||
courts of a jurisdiction where the defendant maintains its principal
|
||||
place of business and such litigation shall be governed by laws of that
|
||||
jurisdiction, without reference to its conflict-of-law provisions.
|
||||
Nothing in this Section shall prevent a party's ability to bring
|
||||
cross-claims or counter-claims.
|
||||
|
||||
9. Miscellaneous
|
||||
----------------
|
||||
|
||||
This License represents the complete agreement concerning the subject
|
||||
matter hereof. If any provision of this License is held to be
|
||||
unenforceable, such provision shall be reformed only to the extent
|
||||
necessary to make it enforceable. Any law or regulation which provides
|
||||
that the language of a contract shall be construed against the drafter
|
||||
shall not be used to construe this License against a Contributor.
|
||||
|
||||
10. Versions of the License
|
||||
---------------------------
|
||||
|
||||
10.1. New Versions
|
||||
|
||||
Mozilla Foundation is the license steward. Except as provided in Section
|
||||
10.3, no one other than the license steward has the right to modify or
|
||||
publish new versions of this License. Each version will be given a
|
||||
distinguishing version number.
|
||||
|
||||
10.2. Effect of New Versions
|
||||
|
||||
You may distribute the Covered Software under the terms of the version
|
||||
of the License under which You originally received the Covered Software,
|
||||
or under the terms of any subsequent version published by the license
|
||||
steward.
|
||||
|
||||
10.3. Modified Versions
|
||||
|
||||
If you create software not governed by this License, and you want to
|
||||
create a new license for such software, you may create and use a
|
||||
modified version of this License if you rename the license and remove
|
||||
any references to the name of the license steward (except to note that
|
||||
such modified license differs from this License).
|
||||
|
||||
10.4. Distributing Source Code Form that is Incompatible With Secondary
|
||||
Licenses
|
||||
|
||||
If You choose to distribute Source Code Form that is Incompatible With
|
||||
Secondary Licenses under the terms of this version of the License, the
|
||||
notice described in Exhibit B of this License must be attached.
|
||||
|
||||
Exhibit A - Source Code Form License Notice
|
||||
-------------------------------------------
|
||||
|
||||
This Source Code Form is subject to the terms of the Mozilla Public
|
||||
License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
If it is not possible or desirable to put the notice in a particular
|
||||
file, then You may include the notice in a location (such as a LICENSE
|
||||
file in a relevant directory) where a recipient would be likely to look
|
||||
for such a notice.
|
||||
|
||||
You may add additional accurate notices of copyright ownership.
|
||||
|
||||
Exhibit B - "Incompatible With Secondary Licenses" Notice
|
||||
---------------------------------------------------------
|
||||
|
||||
This Source Code Form is "Incompatible With Secondary Licenses", as
|
||||
defined by the Mozilla Public License, v. 2.0.
|
||||
|
||||
== SimpleBLE ==
|
||||
|
||||
Official builds include SimpleBLE under a commercial license granted to Hyblocker. That license doesn’t
|
||||
cover forks. SimpleBLE itself is under BSL 1.1 — use that (or get your own commercial license) if you
|
||||
build/fork from source.
|
||||
|
||||
# SimpleBLE Commercial License Agreement
|
||||
|
||||
|
||||
Please [email us](mailto:contact@simpleble.org) or [leave us a message on our website](https://www.simpleble.org/contact?utm_source=github&utm_medium=referral&utm_campaign=simpleble_license) if you would like to purchase a commercial license or would like more information.
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
# Business Source License 1.1
|
||||
|
||||
License text copyright © 2017 MariaDB Corporation Ab, All Rights Reserved. "Business Source License"
|
||||
is a trademark of MariaDB Corporation Ab.
|
||||
|
||||
## Terms
|
||||
|
||||
The Licensor hereby grants you the right to copy, modify, create derivative works, redistribute, and
|
||||
make non-production use of the Licensed Work. The Licensor may make an Additional Use Grant, above,
|
||||
permitting limited production use.
|
||||
|
||||
Effective on the Change Date, or the fourth anniversary of the first publicly available distribution
|
||||
of a specific version of the Licensed Work under this License, whichever comes first, the Licensor
|
||||
hereby grants you rights under the terms of the Change License, and the rights granted in the
|
||||
paragraph above terminate.
|
||||
|
||||
If your use of the Licensed Work does not comply with the requirements currently in effect as
|
||||
described in this License, you must purchase a commercial license from the Licensor, its affiliated
|
||||
entities, or authorized resellers, or you must refrain from using the Licensed Work.
|
||||
|
||||
All copies of the original and modified Licensed Work, and derivative works of the Licensed Work, are
|
||||
subject to this License. This License applies separately for each version of the Licensed Work and
|
||||
the Change Date may vary for each version of the Licensed Work released by Licensor.
|
||||
|
||||
You must conspicuously display this License on each original or modified copy of the Licensed Work.
|
||||
If you receive the Licensed Work in original or modified form from a third party, the terms and
|
||||
conditions set forth in this License apply to your use of that work.
|
||||
|
||||
Any use of the Licensed Work in violation of this License will automatically terminate your rights
|
||||
under this License for the current and all other versions of the Licensed Work.
|
||||
|
||||
This License does not grant you any right in any trademark or logo of Licensor or its affiliates
|
||||
(provided that you may use a trademark or logo of Licensor as expressly required by this License).
|
||||
|
||||
TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE LICENSED WORK IS PROVIDED ON AN "AS IS" BASIS. LICENSOR
|
||||
HEREBY DISCLAIMS ALL WARRANTIES AND CONDITIONS, EXPRESS OR IMPLIED, INCLUDING (WITHOUT LIMITATION)
|
||||
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, AND TITLE.
|
||||
|
||||
== glaze ==
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2019 - present, Stephen Berry
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
== quill ==
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 - present, Odysseas Georgoudis
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
== fmt ==
|
||||
|
||||
Copyright (c) 2012 - present, Victor Zverovich and {fmt} contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
== volk ==
|
||||
|
||||
Copyright (c) 2018-2026 Arseny Kapoulkine
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
== Vulkan-Headers ==
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2015-2023 The Khronos Group Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
== IconFontCppHeaders ==
|
||||
|
||||
Copyright (c) 2017 Juliette Foucaut and Doug Binks
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
|
||||
== implot3d ==
|
||||
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2024-2026 Breno Cunha Queiroz
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
== zstd ==
|
||||
|
||||
BSD License
|
||||
|
||||
For Zstandard software
|
||||
|
||||
Copyright (c) Meta Platforms, Inc. and affiliates. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
* Neither the name Facebook, nor Meta, nor the names of its contributors may
|
||||
be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd)
|
||||
ARCH=$(uname -m)
|
||||
|
||||
if [ "$ARCH" = "x86_64" ]; then
|
||||
exec "$SCRIPT_DIR/SpaceCalibratorx64" "$@"
|
||||
elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then
|
||||
if [ -e "$SCRIPT_DIR/SpaceCalibratorArm64" ]; then
|
||||
exec "$SCRIPT_DIR/SpaceCalibratorArm64" "$@"
|
||||
else
|
||||
echo "SpaceCalibrator: aarch64 binary missing, falling back to x64..."
|
||||
exec "$SCRIPT_DIR/SpaceCalibratorx64" "$@"
|
||||
fi
|
||||
else
|
||||
echo "SpaceCalibrator: Unsupported architecture $ARCH"
|
||||
exit 1
|
||||
fi
|
||||
@@ -0,0 +1 @@
|
||||
You may find the source code of this program at https://github.com/hyblocker/OpenVR-SpaceCalibrator . You should also have a LICENSE file alongside this one.
|
||||
@@ -1,22 +0,0 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 14
|
||||
VisualStudioVersion = 14.0.25420.1
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OpenVR-SpaceCalibrator", "OpenVR-SpaceCalibrator\OpenVR-SpaceCalibrator.vcxproj", "{63BAE169-D595-4464-8E7E-50D6FD379348}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Release|x64 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{63BAE169-D595-4464-8E7E-50D6FD379348}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{63BAE169-D595-4464-8E7E-50D6FD379348}.Debug|x64.Build.0 = Debug|x64
|
||||
{63BAE169-D595-4464-8E7E-50D6FD379348}.Release|x64.ActiveCfg = Release|x64
|
||||
{63BAE169-D595-4464-8E7E-50D6FD379348}.Release|x64.Build.0 = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -1,465 +0,0 @@
|
||||
#include "stdafx.h"
|
||||
#include "Calibration.h"
|
||||
#include "Configuration.h"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
|
||||
#include <lib_vrinputemulator/vrinputemulator.h>
|
||||
#include <Eigen/Dense>
|
||||
|
||||
|
||||
static vrinputemulator::VRInputEmulator InputEmulator;
|
||||
CalibrationContext CalCtx;
|
||||
|
||||
void InitVR()
|
||||
{
|
||||
auto initError = vr::VRInitError_None;
|
||||
vr::VR_Init(&initError, vr::VRApplication_Other);
|
||||
if (initError != vr::VRInitError_None)
|
||||
{
|
||||
auto error = vr::VR_GetVRInitErrorAsEnglishDescription(initError);
|
||||
throw std::runtime_error("OpenVR error:" + std::string(error));
|
||||
}
|
||||
|
||||
if (!vr::VR_IsInterfaceVersionValid(vr::IVRSystem_Version))
|
||||
{
|
||||
throw std::runtime_error("OpenVR error: Outdated IVRSystem_Version");
|
||||
}
|
||||
else if (!vr::VR_IsInterfaceVersionValid(vr::IVRSettings_Version))
|
||||
{
|
||||
throw std::runtime_error("OpenVR error: Outdated IVRSettings_Version");
|
||||
}
|
||||
|
||||
InputEmulator.connect();
|
||||
}
|
||||
|
||||
struct Pose
|
||||
{
|
||||
Eigen::Matrix3d rot;
|
||||
Eigen::Vector3d trans;
|
||||
|
||||
Pose() { }
|
||||
Pose(vr::HmdMatrix34_t hmdMatrix)
|
||||
{
|
||||
for (int i = 0; i < 3; i++) {
|
||||
for (int j = 0; j < 3; j++) {
|
||||
rot(i,j) = hmdMatrix.m[i][j];
|
||||
}
|
||||
}
|
||||
trans = Eigen::Vector3d(hmdMatrix.m[0][3], hmdMatrix.m[1][3], hmdMatrix.m[2][3]);
|
||||
}
|
||||
Pose(double x, double y, double z) : trans(Eigen::Vector3d(x,y,z)) { }
|
||||
};
|
||||
|
||||
struct Sample
|
||||
{
|
||||
Pose ref, target;
|
||||
bool valid;
|
||||
Sample() : valid(false) { }
|
||||
Sample(Pose ref, Pose target) : valid(true), ref(ref), target(target) { }
|
||||
};
|
||||
|
||||
struct DSample
|
||||
{
|
||||
bool valid;
|
||||
Eigen::Vector3d ref, target;
|
||||
};
|
||||
|
||||
bool StartsWith(const std::string &str, const std::string &prefix)
|
||||
{
|
||||
if (str.length() < prefix.length())
|
||||
return false;
|
||||
|
||||
return str.compare(0, prefix.length(), prefix) == 0;
|
||||
}
|
||||
|
||||
bool EndsWith(const std::string &str, const std::string &suffix)
|
||||
{
|
||||
if (str.length() < suffix.length())
|
||||
return false;
|
||||
|
||||
return str.compare(str.length() - suffix.length(), suffix.length(), suffix) == 0;
|
||||
}
|
||||
|
||||
Eigen::Vector3d AxisFromRotationMatrix3(Eigen::Matrix3d rot)
|
||||
{
|
||||
return Eigen::Vector3d(rot(2,1) - rot(1,2), rot(0,2) - rot(2,0), rot(1,0) - rot(0,1));
|
||||
}
|
||||
|
||||
double AngleFromRotationMatrix3(Eigen::Matrix3d rot)
|
||||
{
|
||||
return acos((rot(0,0) + rot(1,1) + rot(2,2) - 1.0) / 2.0);
|
||||
}
|
||||
|
||||
DSample DeltaRotationSamples(Sample s1, Sample s2)
|
||||
{
|
||||
// Difference in rotation between samples.
|
||||
auto dref = s1.ref.rot * s2.ref.rot.transpose();
|
||||
auto dtarget = s1.target.rot * s2.target.rot.transpose();
|
||||
|
||||
// When stuck together, the two tracked objects rotate as a pair,
|
||||
// therefore their axes of rotation must be equal between any given pair of samples.
|
||||
DSample ds;
|
||||
ds.ref = AxisFromRotationMatrix3(dref);
|
||||
ds.target = AxisFromRotationMatrix3(dtarget);
|
||||
|
||||
// Reject samples that were too close to each other.
|
||||
auto refA = AngleFromRotationMatrix3(dref);
|
||||
auto targetA = AngleFromRotationMatrix3(dtarget);
|
||||
ds.valid = refA > 0.4 && targetA > 0.4 && ds.ref.norm() > 0.01 && ds.target.norm() > 0.01;
|
||||
|
||||
ds.ref.normalize();
|
||||
ds.target.normalize();
|
||||
return ds;
|
||||
}
|
||||
|
||||
Eigen::Vector3d CalibrateRotation(const std::vector<Sample> &samples)
|
||||
{
|
||||
std::vector<DSample> deltas;
|
||||
|
||||
for (size_t i = 0; i < samples.size(); i++)
|
||||
{
|
||||
for (size_t j = 0; j < i; j++)
|
||||
{
|
||||
auto delta = DeltaRotationSamples(samples[i], samples[j]);
|
||||
if (delta.valid)
|
||||
deltas.push_back(delta);
|
||||
}
|
||||
}
|
||||
char buf[256];
|
||||
snprintf(buf, sizeof buf, "Got %zd samples with %zd delta samples\n", samples.size(), deltas.size());
|
||||
CalCtx.Message(buf);
|
||||
|
||||
// Kabsch algorithm
|
||||
|
||||
Eigen::MatrixXd refPoints(deltas.size(), 3), targetPoints(deltas.size(), 3);
|
||||
Eigen::Vector3d refCentroid(0,0,0), targetCentroid(0,0,0);
|
||||
|
||||
for (size_t i = 0; i < deltas.size(); i++)
|
||||
{
|
||||
refPoints.row(i) = deltas[i].ref;
|
||||
refCentroid += deltas[i].ref;
|
||||
|
||||
targetPoints.row(i) = deltas[i].target;
|
||||
targetCentroid += deltas[i].target;
|
||||
}
|
||||
|
||||
refCentroid /= (double) deltas.size();
|
||||
targetCentroid /= (double) deltas.size();
|
||||
|
||||
for (size_t i = 0; i < deltas.size(); i++)
|
||||
{
|
||||
refPoints.row(i) -= refCentroid;
|
||||
targetPoints.row(i) -= targetCentroid;
|
||||
}
|
||||
|
||||
auto crossCV = refPoints.transpose() * targetPoints;
|
||||
|
||||
Eigen::BDCSVD<Eigen::MatrixXd> bdcsvd;
|
||||
auto svd = bdcsvd.compute(crossCV, Eigen::ComputeThinU | Eigen::ComputeThinV);
|
||||
|
||||
Eigen::Matrix3d i = Eigen::Matrix3d::Identity();
|
||||
if ((svd.matrixU() * svd.matrixV().transpose()).determinant() < 0)
|
||||
{
|
||||
i(2,2) = -1;
|
||||
}
|
||||
|
||||
Eigen::Matrix3d rot = svd.matrixV() * i * svd.matrixU().transpose();
|
||||
rot.transposeInPlace();
|
||||
|
||||
Eigen::Vector3d euler = rot.eulerAngles(2, 1, 0) * 180.0 / EIGEN_PI;
|
||||
|
||||
snprintf(buf, sizeof buf, "Calibrated rotation: yaw=%.2f pitch=%.2f roll=%.2f\n", euler[1], euler[2], euler[0]);
|
||||
CalCtx.Message(buf);
|
||||
return euler;
|
||||
}
|
||||
|
||||
Eigen::Vector3d CalibrateTranslation(const std::vector<Sample> &samples)
|
||||
{
|
||||
std::vector<std::pair<Eigen::Vector3d, Eigen::Matrix3d>> deltas;
|
||||
|
||||
for (size_t i = 0; i < samples.size(); i++)
|
||||
{
|
||||
for (size_t j = 0; j < i; j++)
|
||||
{
|
||||
auto QAi = samples[i].ref.rot.transpose();
|
||||
auto QAj = samples[j].ref.rot.transpose();
|
||||
auto dQA = QAj - QAi;
|
||||
auto CA = QAj * (samples[j].ref.trans - samples[j].target.trans) - QAi * (samples[i].ref.trans - samples[i].target.trans);
|
||||
deltas.push_back(std::make_pair(CA, dQA));
|
||||
|
||||
auto QBi = samples[i].target.rot.transpose();
|
||||
auto QBj = samples[j].target.rot.transpose();
|
||||
auto dQB = QBj - QBi;
|
||||
auto CB = QBj * (samples[j].ref.trans - samples[j].target.trans) - QBi * (samples[i].ref.trans - samples[i].target.trans);
|
||||
deltas.push_back(std::make_pair(CB, dQB));
|
||||
}
|
||||
}
|
||||
|
||||
Eigen::VectorXd constants(deltas.size() * 3);
|
||||
Eigen::MatrixXd coefficients(deltas.size() * 3, 3);
|
||||
|
||||
for (size_t i = 0; i < deltas.size(); i++)
|
||||
{
|
||||
for (int axis = 0; axis < 3; axis++)
|
||||
{
|
||||
constants(i * 3 + axis) = deltas[i].first(axis);
|
||||
coefficients.row(i * 3 + axis) = deltas[i].second.row(axis);
|
||||
}
|
||||
}
|
||||
|
||||
Eigen::Vector3d trans = coefficients.bdcSvd(Eigen::ComputeThinU | Eigen::ComputeThinV).solve(constants);
|
||||
auto transcm = trans * 100.0;
|
||||
|
||||
char buf[256];
|
||||
snprintf(buf, sizeof buf, "Calibrated translation x=%.2f y=%.2f z=%.2f\n", transcm[0], transcm[1], transcm[2]);
|
||||
CalCtx.Message(buf);
|
||||
return transcm;
|
||||
}
|
||||
|
||||
Sample CollectSample(const CalibrationContext &ctx)
|
||||
{
|
||||
vr::TrackedDevicePose_t reference, target;
|
||||
reference.bPoseIsValid = false;
|
||||
target.bPoseIsValid = false;
|
||||
|
||||
reference = ctx.devicePoses[ctx.referenceID];
|
||||
target = ctx.devicePoses[ctx.targetID];
|
||||
|
||||
bool ok = true;
|
||||
if (!reference.bPoseIsValid)
|
||||
{
|
||||
CalCtx.Message("Reference device is not tracking\n"); ok = false;
|
||||
}
|
||||
if (!target.bPoseIsValid)
|
||||
{
|
||||
CalCtx.Message("Target device is not tracking\n"); ok = false;
|
||||
}
|
||||
if (!ok)
|
||||
{
|
||||
CalCtx.Message("Aborting calibration!\n");
|
||||
CalCtx.state = CalibrationState::None;
|
||||
return Sample();
|
||||
}
|
||||
|
||||
return Sample(
|
||||
Pose(reference.mDeviceToAbsoluteTracking),
|
||||
Pose(target.mDeviceToAbsoluteTracking)
|
||||
);
|
||||
}
|
||||
|
||||
vr::HmdQuaternion_t VRRotationQuat(Eigen::Vector3d eulerdeg)
|
||||
{
|
||||
auto euler = eulerdeg * EIGEN_PI / 180.0;
|
||||
|
||||
Eigen::Quaterniond rotQuat =
|
||||
Eigen::AngleAxisd(euler(0), Eigen::Vector3d::UnitZ()) *
|
||||
Eigen::AngleAxisd(euler(1), Eigen::Vector3d::UnitY()) *
|
||||
Eigen::AngleAxisd(euler(2), Eigen::Vector3d::UnitX());
|
||||
|
||||
vr::HmdQuaternion_t vrRotQuat;
|
||||
vrRotQuat.x = rotQuat.coeffs()[0];
|
||||
vrRotQuat.y = rotQuat.coeffs()[1];
|
||||
vrRotQuat.z = rotQuat.coeffs()[2];
|
||||
vrRotQuat.w = rotQuat.coeffs()[3];
|
||||
return vrRotQuat;
|
||||
}
|
||||
|
||||
vr::HmdVector3d_t VRTranslationVec(Eigen::Vector3d transcm)
|
||||
{
|
||||
auto trans = transcm * 0.01;
|
||||
vr::HmdVector3d_t vrTrans;
|
||||
vrTrans.v[0] = trans[0];
|
||||
vrTrans.v[1] = trans[1];
|
||||
vrTrans.v[2] = trans[2];
|
||||
return vrTrans;
|
||||
}
|
||||
|
||||
void ScanAndApplyProfile(CalibrationContext &ctx)
|
||||
{
|
||||
char buffer[vr::k_unMaxPropertyStringSize];
|
||||
|
||||
for (uint32_t id = 0; id < vr::k_unMaxTrackedDeviceCount; ++id)
|
||||
{
|
||||
auto deviceClass = vr::VRSystem()->GetTrackedDeviceClass(id);
|
||||
if (deviceClass == vr::TrackedDeviceClass_Invalid)
|
||||
continue;
|
||||
|
||||
/*if (deviceClass == vr::TrackedDeviceClass_HMD) // for debugging unexpected universe switches
|
||||
{
|
||||
vr::ETrackedPropertyError err = vr::TrackedProp_Success;
|
||||
auto universeId = vr::VRSystem()->GetUint64TrackedDeviceProperty(id, vr::Prop_CurrentUniverseId_Uint64, &err);
|
||||
printf("uid %d err %d\n", universeId, err);
|
||||
continue;
|
||||
}*/
|
||||
|
||||
vr::ETrackedPropertyError err = vr::TrackedProp_Success;
|
||||
vr::VRSystem()->GetStringTrackedDeviceProperty(id, vr::Prop_TrackingSystemName_String, buffer, vr::k_unMaxPropertyStringSize, &err);
|
||||
|
||||
if (err != vr::TrackedProp_Success)
|
||||
continue;
|
||||
|
||||
std::string trackingSystem(buffer);
|
||||
|
||||
if (trackingSystem != ctx.targetTrackingSystem)
|
||||
continue;
|
||||
|
||||
if (deviceClass == vr::TrackedDeviceClass_TrackingReference || deviceClass == vr::TrackedDeviceClass_HMD)
|
||||
{
|
||||
// TODO(pushrax): detect zero reference switches and adjust calibration automatically
|
||||
//auto p = ctx.devicePoses[id].mDeviceToAbsoluteTracking.m;
|
||||
//printf("REF %d: %f %f %f\n", id, p[0][3], p[1][3], p[2][3]);
|
||||
}
|
||||
else
|
||||
{
|
||||
//printf("setting calibration for %d (%s)\n", id, buffer);
|
||||
auto vrRotQuat = VRRotationQuat(ctx.calibratedRotation);
|
||||
InputEmulator.setWorldFromDriverRotationOffset(id, vrRotQuat);
|
||||
|
||||
auto vrTransVec = VRTranslationVec(ctx.calibratedTranslation);
|
||||
InputEmulator.setWorldFromDriverTranslationOffset(id, vrTransVec);
|
||||
|
||||
InputEmulator.enableDeviceOffsets(id, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ResetAndDisableOffsets(uint32_t id)
|
||||
{
|
||||
vr::HmdVector3d_t zeroV;
|
||||
zeroV.v[0] = zeroV.v[1] = zeroV.v[2] = 0;
|
||||
|
||||
vr::HmdQuaternion_t zeroQ;
|
||||
zeroQ.x = 0; zeroQ.y = 0; zeroQ.z = 0; zeroQ.w = 1;
|
||||
|
||||
InputEmulator.setWorldFromDriverRotationOffset(id, zeroQ);
|
||||
InputEmulator.setWorldFromDriverTranslationOffset(id, zeroV);
|
||||
InputEmulator.enableDeviceOffsets(id, false);
|
||||
}
|
||||
|
||||
void StartCalibration()
|
||||
{
|
||||
CalCtx.state = CalibrationState::Begin;
|
||||
CalCtx.wantedUpdateInterval = 0.0;
|
||||
CalCtx.messages = "";
|
||||
}
|
||||
|
||||
void CalibrationTick(double time)
|
||||
{
|
||||
if (!vr::VRSystem())
|
||||
return;
|
||||
|
||||
auto &ctx = CalCtx;
|
||||
if ((time - ctx.timeLastTick) < 0.05)
|
||||
return;
|
||||
|
||||
ctx.timeLastTick = time;
|
||||
vr::VRSystem()->GetDeviceToAbsoluteTrackingPose(vr::TrackingUniverseRawAndUncalibrated, 0.0f, ctx.devicePoses, vr::k_unMaxTrackedDeviceCount);
|
||||
|
||||
if (ctx.state == CalibrationState::None)
|
||||
{
|
||||
ctx.wantedUpdateInterval = 1.0;
|
||||
|
||||
if (!ctx.validProfile)
|
||||
return;
|
||||
|
||||
if ((time - ctx.timeLastScan) >= 2.5)
|
||||
{
|
||||
ScanAndApplyProfile(ctx);
|
||||
ctx.timeLastScan = time;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (ctx.state == CalibrationState::Editing)
|
||||
{
|
||||
ctx.wantedUpdateInterval = 0.0;
|
||||
|
||||
if (!ctx.validProfile)
|
||||
return;
|
||||
|
||||
ScanAndApplyProfile(ctx);
|
||||
return;
|
||||
}
|
||||
|
||||
if (ctx.state == CalibrationState::Begin)
|
||||
{
|
||||
bool ok = true;
|
||||
|
||||
if (ctx.referenceID == -1)
|
||||
{
|
||||
CalCtx.Message("Missing reference device\n"); ok = false;
|
||||
}
|
||||
else if (!ctx.devicePoses[ctx.referenceID].bPoseIsValid)
|
||||
{
|
||||
CalCtx.Message("Reference device is not tracking\n"); ok = false;
|
||||
}
|
||||
|
||||
if (ctx.targetID == -1)
|
||||
{
|
||||
CalCtx.Message("Missing target device\n"); ok = false;
|
||||
}
|
||||
else if (!ctx.devicePoses[ctx.targetID].bPoseIsValid)
|
||||
{
|
||||
CalCtx.Message("Target device is not tracking\n"); ok = false;
|
||||
}
|
||||
|
||||
if (!ok)
|
||||
{
|
||||
ctx.state = CalibrationState::None;
|
||||
CalCtx.Message("Aborting calibration!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
ResetAndDisableOffsets(ctx.targetID);
|
||||
ctx.state = CalibrationState::Rotation;
|
||||
ctx.wantedUpdateInterval = 0.0;
|
||||
|
||||
char buf[256];
|
||||
snprintf(buf, sizeof buf, "Starting calibration, referenceID=%d targetID=%d\n", ctx.referenceID, ctx.targetID);
|
||||
CalCtx.Message(buf);
|
||||
return;
|
||||
}
|
||||
|
||||
auto sample = CollectSample(ctx);
|
||||
if (!sample.valid)
|
||||
{
|
||||
return;
|
||||
}
|
||||
CalCtx.Message(".");
|
||||
|
||||
const int totalSamples = 100;
|
||||
static std::vector<Sample> samples;
|
||||
samples.push_back(sample);
|
||||
|
||||
if (samples.size() == totalSamples)
|
||||
{
|
||||
CalCtx.Message("\n");
|
||||
if (ctx.state == CalibrationState::Rotation)
|
||||
{
|
||||
ctx.calibratedRotation = CalibrateRotation(samples);
|
||||
|
||||
auto vrRotQuat = VRRotationQuat(ctx.calibratedRotation);
|
||||
InputEmulator.setWorldFromDriverRotationOffset(ctx.targetID, vrRotQuat);
|
||||
InputEmulator.enableDeviceOffsets(ctx.targetID, true);
|
||||
|
||||
ctx.state = CalibrationState::Translation;
|
||||
}
|
||||
else if (ctx.state == CalibrationState::Translation)
|
||||
{
|
||||
ctx.calibratedTranslation = CalibrateTranslation(samples);
|
||||
|
||||
auto vrTrans = VRTranslationVec(ctx.calibratedTranslation);
|
||||
InputEmulator.setWorldFromDriverTranslationOffset(ctx.targetID, vrTrans);
|
||||
|
||||
SaveProfile(ctx);
|
||||
CalCtx.Message("Finished calibration, profile saved\n");
|
||||
|
||||
ctx.state = CalibrationState::None;
|
||||
}
|
||||
|
||||
samples.clear();
|
||||
}
|
||||
}
|
||||
@@ -1,45 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <Eigen/Core>
|
||||
#include <openvr.h>
|
||||
|
||||
enum class CalibrationState
|
||||
{
|
||||
None,
|
||||
Begin,
|
||||
Rotation,
|
||||
Translation,
|
||||
Editing,
|
||||
};
|
||||
|
||||
struct CalibrationContext
|
||||
{
|
||||
CalibrationState state = CalibrationState::None;
|
||||
int referenceID, targetID;
|
||||
|
||||
Eigen::Vector3d calibratedRotation;
|
||||
Eigen::Vector3d calibratedTranslation;
|
||||
|
||||
std::string referenceTrackingSystem;
|
||||
std::string targetTrackingSystem;
|
||||
|
||||
bool validProfile = false;
|
||||
double timeLastTick = 0, timeLastScan = 0;
|
||||
double wantedUpdateInterval = 1.0;
|
||||
|
||||
vr::TrackedDevicePose_t devicePoses[vr::k_unMaxTrackedDeviceCount];
|
||||
|
||||
std::string messages;
|
||||
|
||||
void Message(const std::string &msg)
|
||||
{
|
||||
messages += msg;
|
||||
std::cerr << msg;
|
||||
}
|
||||
};
|
||||
|
||||
extern CalibrationContext CalCtx;
|
||||
|
||||
void InitVR();
|
||||
void CalibrationTick(double time);
|
||||
void StartCalibration();
|
||||
@@ -1,113 +0,0 @@
|
||||
#include "stdafx.h"
|
||||
#include "Configuration.h"
|
||||
|
||||
#include <picojson.h>
|
||||
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <iomanip>
|
||||
#include <limits>
|
||||
|
||||
static void UpgradeProfileV1(CalibrationContext &ctx);
|
||||
static void ParseProfileV2(CalibrationContext &ctx, std::istream &stream);
|
||||
|
||||
void LoadProfile(CalibrationContext &ctx)
|
||||
{
|
||||
std::ifstream file("openvr_space_calibration.json");
|
||||
ctx.validProfile = false;
|
||||
|
||||
if (!file.good())
|
||||
{
|
||||
UpgradeProfileV1(ctx);
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
ParseProfileV2(ctx, file);
|
||||
std::cout << "Loaded profile" << std::endl;
|
||||
}
|
||||
catch (const std::runtime_error &e)
|
||||
{
|
||||
std::cerr << "Error loading profile: " << e.what() << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
static void ParseProfileV2(CalibrationContext &ctx, std::istream &stream)
|
||||
{
|
||||
picojson::value v;
|
||||
std::string err = picojson::parse(v, stream);
|
||||
if (!err.empty())
|
||||
throw std::runtime_error(err);
|
||||
|
||||
auto arr = v.get<picojson::array>();
|
||||
if (arr.size() < 1)
|
||||
throw std::runtime_error("no profiles in file");
|
||||
|
||||
auto obj = arr[0].get<picojson::object>();
|
||||
|
||||
ctx.referenceTrackingSystem = obj["reference_tracking_system"].get<std::string>();
|
||||
ctx.targetTrackingSystem = obj["target_tracking_system"].get<std::string>();
|
||||
ctx.calibratedRotation(0) = obj["roll"].get<double>();
|
||||
ctx.calibratedRotation(1) = obj["yaw"].get<double>();
|
||||
ctx.calibratedRotation(2) = obj["pitch"].get<double>();
|
||||
ctx.calibratedTranslation(0) = obj["x"].get<double>();
|
||||
ctx.calibratedTranslation(1) = obj["y"].get<double>();
|
||||
ctx.calibratedTranslation(2) = obj["z"].get<double>();
|
||||
|
||||
ctx.validProfile = true;
|
||||
}
|
||||
|
||||
void SaveProfile(CalibrationContext &ctx)
|
||||
{
|
||||
std::ofstream file("openvr_space_calibration.json");
|
||||
|
||||
picojson::object profile;
|
||||
profile["reference_tracking_system"].set<std::string>(ctx.referenceTrackingSystem);
|
||||
profile["target_tracking_system"].set<std::string>(ctx.targetTrackingSystem);
|
||||
profile["roll"].set<double>(ctx.calibratedRotation(0));
|
||||
profile["yaw"].set<double>(ctx.calibratedRotation(1));
|
||||
profile["pitch"].set<double>(ctx.calibratedRotation(2));
|
||||
profile["x"].set<double>(ctx.calibratedTranslation(0));
|
||||
profile["y"].set<double>(ctx.calibratedTranslation(1));
|
||||
profile["z"].set<double>(ctx.calibratedTranslation(2));
|
||||
|
||||
picojson::value profileV;
|
||||
profileV.set<picojson::object>(profile);
|
||||
|
||||
picojson::array profiles;
|
||||
profiles.push_back(profileV);
|
||||
|
||||
picojson::value profilesV;
|
||||
profilesV.set<picojson::array>(profiles);
|
||||
|
||||
file << profilesV.serialize(true);
|
||||
|
||||
ctx.validProfile = true;
|
||||
}
|
||||
|
||||
static void UpgradeProfileV1(CalibrationContext &ctx)
|
||||
{
|
||||
std::ifstream file("openvr_space_calibration.txt");
|
||||
ctx.validProfile = false;
|
||||
|
||||
if (!file.good())
|
||||
return;
|
||||
|
||||
file
|
||||
>> ctx.targetTrackingSystem
|
||||
>> ctx.calibratedRotation(1) // yaw
|
||||
>> ctx.calibratedRotation(2) // pitch
|
||||
>> ctx.calibratedRotation(0) // roll
|
||||
>> ctx.calibratedTranslation(0) // x
|
||||
>> ctx.calibratedTranslation(1) // y
|
||||
>> ctx.calibratedTranslation(2); // z
|
||||
|
||||
ctx.validProfile = true;
|
||||
|
||||
SaveProfile(ctx);
|
||||
|
||||
file.close();
|
||||
std::remove("openvr_space_calibration.txt");
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "Calibration.h"
|
||||
|
||||
void LoadProfile(CalibrationContext &ctx);
|
||||
void SaveProfile(CalibrationContext &ctx);
|
||||
@@ -1,4 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
const unsigned int DroidSans_compressed_size = 134345;
|
||||
extern const unsigned int DroidSans_compressed_data[134348 / 4];
|
||||
@@ -1,131 +0,0 @@
|
||||
#include "stdafx.h"
|
||||
#include "Calibration.h"
|
||||
#include "Configuration.h"
|
||||
#include "EmbeddedFiles.h"
|
||||
#include "UserInterface.h"
|
||||
|
||||
#include <imgui/imgui.h>
|
||||
#include <imgui/imgui_impl_glfw.h>
|
||||
#include <imgui/imgui_impl_opengl3.h>
|
||||
#include <GL/gl3w.h>
|
||||
#include <GLFW/glfw3.h>
|
||||
|
||||
#pragma comment(linker,"\"/manifestdependency:type='win32' \
|
||||
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
|
||||
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
|
||||
|
||||
void CreateConsole()
|
||||
{
|
||||
static bool created = false;
|
||||
if (!created)
|
||||
{
|
||||
AllocConsole();
|
||||
FILE *file = nullptr;
|
||||
freopen_s(&file, "CONIN$", "r", stdin);
|
||||
freopen_s(&file, "CONOUT$", "w", stdout);
|
||||
freopen_s(&file, "CONOUT$", "w", stderr);
|
||||
created = true;
|
||||
}
|
||||
}
|
||||
|
||||
void GLFWErrorCallback(int error, const char* description)
|
||||
{
|
||||
fprintf(stderr, "GLFW Error %d: %s\n", error, description);
|
||||
}
|
||||
|
||||
GLFWwindow *glfwWindow = nullptr;
|
||||
|
||||
void CreateGLFWWindow()
|
||||
{
|
||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
|
||||
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
|
||||
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
|
||||
|
||||
glfwWindow = glfwCreateWindow(1280, 800, "OpenVR-SpaceCalibrator", NULL, NULL);
|
||||
if (!glfwWindow)
|
||||
throw std::runtime_error("Failed to create window");
|
||||
|
||||
glfwMakeContextCurrent(glfwWindow);
|
||||
glfwSwapInterval(1);
|
||||
gl3wInit();
|
||||
|
||||
ImGui::CreateContext();
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;
|
||||
io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad;
|
||||
io.IniFilename = nullptr;
|
||||
io.Fonts->AddFontFromMemoryCompressedTTF(DroidSans_compressed_data, DroidSans_compressed_size, 24.0f);
|
||||
|
||||
ImGui_ImplGlfw_InitForOpenGL(glfwWindow, true);
|
||||
ImGui_ImplOpenGL3_Init("#version 150");
|
||||
|
||||
ImGui::StyleColorsDark();
|
||||
}
|
||||
|
||||
void RunLoop()
|
||||
{
|
||||
while (!glfwWindowShouldClose(glfwWindow))
|
||||
{
|
||||
double time = glfwGetTime();
|
||||
CalibrationTick(time);
|
||||
|
||||
int width, height;
|
||||
glfwGetFramebufferSize(glfwWindow, &width, &height);
|
||||
|
||||
ImGui_ImplOpenGL3_NewFrame();
|
||||
ImGui_ImplGlfw_NewFrame();
|
||||
ImGui::NewFrame();
|
||||
|
||||
BuildMainWindow();
|
||||
|
||||
ImGui::Render();
|
||||
|
||||
glViewport(0, 0, width, height);
|
||||
glClearColor(0, 0, 0, 1);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
|
||||
|
||||
glfwSwapBuffers(glfwWindow);
|
||||
glfwWaitEventsTimeout(CalCtx.wantedUpdateInterval);
|
||||
}
|
||||
|
||||
ImGui_ImplOpenGL3_Shutdown();
|
||||
ImGui_ImplGlfw_Shutdown();
|
||||
ImGui::DestroyContext();
|
||||
}
|
||||
|
||||
int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
|
||||
{
|
||||
UNREFERENCED_PARAMETER(hPrevInstance);
|
||||
UNREFERENCED_PARAMETER(lpCmdLine);
|
||||
//CreateConsole();
|
||||
|
||||
if (!glfwInit())
|
||||
{
|
||||
MessageBox(nullptr, L"Failed to initialize GLFW", L"", 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
glfwSetErrorCallback(GLFWErrorCallback);
|
||||
|
||||
try {
|
||||
InitVR();
|
||||
CreateGLFWWindow();
|
||||
LoadProfile(CalCtx);
|
||||
RunLoop();
|
||||
}
|
||||
catch (std::runtime_error &e)
|
||||
{
|
||||
std::cerr << "Runtime error: " << e.what() << std::endl;
|
||||
wchar_t message[1024];
|
||||
swprintf(message, 1024, L"%hs", e.what());
|
||||
MessageBox(nullptr, message, L"Runtime Error", 0);
|
||||
}
|
||||
|
||||
if (glfwWindow)
|
||||
glfwDestroyWindow(glfwWindow);
|
||||
|
||||
glfwTerminate();
|
||||
return 0;
|
||||
}
|
||||
|
Before Width: | Height: | Size: 45 KiB |
@@ -1,146 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{63BAE169-D595-4464-8E7E-50D6FD379348}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<RootNamespace>OpenVRSpaceCalibrator</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v140</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<AdditionalIncludeDirectories>..\lib\glfw\include;..\lib\openvr;..\lib\boost_1_63_0;..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>..\lib\glfw\lib-vc2015;..\lib\boost_1_63_0\lib64-msvc-14.0;..\lib\openvr\lib\win64</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>openvr_api.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<PreprocessorDefinitions>_SCL_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<AdditionalIncludeDirectories>..\lib\gl3w\include;..\lib\glfw\include;..\lib\openvr;..\lib\boost_1_63_0;..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalLibraryDirectories>..\lib\glfw\lib-vc2015;..\lib\boost_1_63_0\lib64-msvc-14.0;..\lib\openvr\lib\win64</AdditionalLibraryDirectories>
|
||||
<AdditionalDependencies>opengl32.lib;glfw3.lib;openvr_api.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<Text Include="ReadMe.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\lib\lib_vrinputemulator\ipc_protocol.h" />
|
||||
<ClInclude Include="..\lib\lib_vrinputemulator\vrinputemulator.h" />
|
||||
<ClInclude Include="..\lib\lib_vrinputemulator\vrinputemulator_types.h" />
|
||||
<ClInclude Include="Calibration.h" />
|
||||
<ClInclude Include="Configuration.h" />
|
||||
<ClInclude Include="EmbeddedFiles.h" />
|
||||
<ClInclude Include="stdafx.h" />
|
||||
<ClInclude Include="targetver.h" />
|
||||
<ClInclude Include="UserInterface.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\lib\gl3w\src\gl3w.c">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\lib\imgui\imgui.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\lib\imgui\imgui_demo.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\lib\imgui\imgui_draw.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\lib\imgui\imgui_impl_glfw.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\lib\imgui\imgui_impl_opengl3.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\lib\lib_vrinputemulator\vrinputemulator.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Calibration.cpp" />
|
||||
<ClCompile Include="Configuration.cpp" />
|
||||
<ClCompile Include="EmbeddedFiles.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="OpenVR-SpaceCalibrator.cpp" />
|
||||
<ClCompile Include="stdafx.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="UserInterface.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Image Include="OpenVR-SpaceCalibrator.ico" />
|
||||
<Image Include="small.ico" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="OpenVR-SpaceCalibrator.rc" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
@@ -1,109 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\ImGui">
|
||||
<UniqueIdentifier>{948e4c13-6f2b-44e3-a8b7-1a12c79aeeb7}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\GL">
|
||||
<UniqueIdentifier>{d156ae5c-9fe6-41f0-a34e-333dc7a6b2f8}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Text Include="ReadMe.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="stdafx.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="targetver.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Calibration.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\lib\lib_vrinputemulator\ipc_protocol.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\lib\lib_vrinputemulator\vrinputemulator.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\lib\lib_vrinputemulator\vrinputemulator_types.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="EmbeddedFiles.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="UserInterface.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Configuration.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="stdafx.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="OpenVR-SpaceCalibrator.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Calibration.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\lib\lib_vrinputemulator\vrinputemulator.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\lib\imgui\imgui.cpp">
|
||||
<Filter>Source Files\ImGui</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\lib\imgui\imgui_demo.cpp">
|
||||
<Filter>Source Files\ImGui</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\lib\imgui\imgui_impl_glfw.cpp">
|
||||
<Filter>Source Files\ImGui</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\lib\imgui\imgui_impl_opengl3.cpp">
|
||||
<Filter>Source Files\ImGui</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\lib\gl3w\src\gl3w.c">
|
||||
<Filter>Source Files\GL</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\lib\imgui\imgui_draw.cpp">
|
||||
<Filter>Source Files\ImGui</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="EmbeddedFiles.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="UserInterface.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Configuration.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Image Include="small.ico">
|
||||
<Filter>Resource Files</Filter>
|
||||
</Image>
|
||||
<Image Include="OpenVR-SpaceCalibrator.ico">
|
||||
<Filter>Resource Files</Filter>
|
||||
</Image>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="OpenVR-SpaceCalibrator.rc">
|
||||
<Filter>Resource Files</Filter>
|
||||
</ResourceCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -1,410 +0,0 @@
|
||||
#include "stdafx.h"
|
||||
#include "UserInterface.h"
|
||||
#include "Calibration.h"
|
||||
#include "Configuration.h"
|
||||
|
||||
#include <thread>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
#include <imgui/imgui.h>
|
||||
|
||||
struct VRDevice
|
||||
{
|
||||
int id = -1;
|
||||
vr::TrackedDeviceClass deviceClass;
|
||||
std::string model = "";
|
||||
std::string serial = "";
|
||||
std::string trackingSystem = "";
|
||||
vr::ETrackedControllerRole controllerRole = vr::TrackedControllerRole_Invalid;
|
||||
};
|
||||
|
||||
struct VRState
|
||||
{
|
||||
std::vector<std::string> trackingSystems;
|
||||
std::vector<VRDevice> devices;
|
||||
};
|
||||
|
||||
void TextWithWidth(const char *label, const char *text, float width);
|
||||
|
||||
VRState LoadVRState();
|
||||
void BuildSystemSelection(const VRState &state);
|
||||
void BuildDeviceSelections(const VRState &state);
|
||||
void BuildProfileEditor();
|
||||
|
||||
void BuildMainWindow()
|
||||
{
|
||||
ImGuiWindowFlags windowFlags =
|
||||
ImGuiWindowFlags_NoTitleBar |
|
||||
ImGuiWindowFlags_NoResize |
|
||||
ImGuiWindowFlags_NoMove;
|
||||
|
||||
auto &io = ImGui::GetIO();
|
||||
|
||||
ImGui::SetNextWindowPos(ImVec2(0.0f, 0.0f), ImGuiSetCond_Always);
|
||||
ImGui::SetNextWindowSize(io.DisplaySize, ImGuiSetCond_Always);
|
||||
|
||||
if (!ImGui::Begin("MainWindow", nullptr, windowFlags))
|
||||
{
|
||||
ImGui::End();
|
||||
return;
|
||||
}
|
||||
|
||||
ImGuiStyle &style = ImGui::GetStyle();
|
||||
|
||||
auto state = LoadVRState();
|
||||
BuildSystemSelection(state);
|
||||
BuildDeviceSelections(state);
|
||||
|
||||
ImGui::Text("");
|
||||
|
||||
if (CalCtx.state == CalibrationState::None)
|
||||
{
|
||||
float width = ImGui::GetWindowContentRegionWidth();
|
||||
float scale = 1.0f;
|
||||
if (CalCtx.validProfile)
|
||||
{
|
||||
width -= style.FramePadding.x * 2.0f;
|
||||
scale = 2.0f / 3.0f;
|
||||
}
|
||||
|
||||
if (ImGui::Button("Start New Calibration", ImVec2(width * scale, ImGui::GetTextLineHeight() * 2)))
|
||||
{
|
||||
ImGui::OpenPopup("Calibration Progress");
|
||||
StartCalibration();
|
||||
}
|
||||
|
||||
if (CalCtx.validProfile)
|
||||
{
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Edit Calibration", ImVec2(width / 3.0f, ImGui::GetTextLineHeight() * 2)))
|
||||
{
|
||||
CalCtx.state = CalibrationState::Editing;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (CalCtx.state == CalibrationState::Editing)
|
||||
{
|
||||
BuildProfileEditor();
|
||||
|
||||
if (ImGui::Button("Save Profile", ImVec2(ImGui::GetWindowContentRegionWidth(), ImGui::GetTextLineHeight() * 2)))
|
||||
{
|
||||
SaveProfile(CalCtx);
|
||||
CalCtx.state = CalibrationState::None;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ImGui::Button("Calibration in progress...", ImVec2(ImGui::GetWindowContentRegionWidth(), ImGui::GetTextLineHeight() * 2));
|
||||
}
|
||||
|
||||
ImGui::SetNextWindowPos(ImVec2(20.0f, 20.0f), ImGuiSetCond_Always);
|
||||
ImGui::SetNextWindowSize(ImVec2(io.DisplaySize.x - 40.0f, io.DisplaySize.y - 40.0f), ImGuiSetCond_Always);
|
||||
if (ImGui::BeginPopupModal("Calibration Progress", nullptr, windowFlags))
|
||||
{
|
||||
ImGui::TextWrapped(CalCtx.messages.c_str());
|
||||
|
||||
if (CalCtx.state == CalibrationState::None)
|
||||
{
|
||||
ImGui::Text("");
|
||||
if (ImGui::Button("Close", ImVec2(ImGui::GetWindowContentRegionWidth(), ImGui::GetTextLineHeight() * 2)))
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
|
||||
ImGui::SetNextWindowPos(ImVec2(ImGui::GetWindowWidth() - 60.0f, ImGui::GetWindowHeight() - ImGui::GetItemsLineHeightWithSpacing()));
|
||||
ImGui::BeginChild("version stuff", ImVec2(60.0f, ImGui::GetItemsLineHeightWithSpacing() * 2), false);
|
||||
ImGui::Text("v0.5");
|
||||
ImGui::EndChild();
|
||||
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
void BuildSystemSelection(const VRState &state)
|
||||
{
|
||||
if (state.trackingSystems.empty())
|
||||
{
|
||||
ImGui::Text("No tracked devices are present");
|
||||
return;
|
||||
}
|
||||
|
||||
ImGuiStyle &style = ImGui::GetStyle();
|
||||
float paneWidth = ImGui::GetWindowContentRegionWidth() / 2 - style.FramePadding.x;
|
||||
|
||||
TextWithWidth("ReferenceSystemLabel", "Reference Space", paneWidth);
|
||||
ImGui::SameLine();
|
||||
TextWithWidth("TargetSystemLabel", "Target Space", paneWidth);
|
||||
|
||||
int currentReferenceSystem = -1;
|
||||
int currentTargetSystem = -1;
|
||||
int firstReferenceSystemNotTargetSystem = -1;
|
||||
|
||||
std::vector<const char *> referenceSystems;
|
||||
for (auto &str : state.trackingSystems)
|
||||
{
|
||||
if (str == CalCtx.referenceTrackingSystem)
|
||||
{
|
||||
currentReferenceSystem = (int) referenceSystems.size();
|
||||
}
|
||||
else if (firstReferenceSystemNotTargetSystem == -1 && str != CalCtx.targetTrackingSystem)
|
||||
{
|
||||
firstReferenceSystemNotTargetSystem = (int) referenceSystems.size();
|
||||
}
|
||||
referenceSystems.push_back(str.c_str());
|
||||
}
|
||||
|
||||
if (currentReferenceSystem == -1 && CalCtx.referenceTrackingSystem == "")
|
||||
{
|
||||
currentReferenceSystem = firstReferenceSystemNotTargetSystem;
|
||||
}
|
||||
|
||||
ImGui::PushItemWidth(paneWidth);
|
||||
ImGui::Combo("##ReferenceTrackingSystem", ¤tReferenceSystem, &referenceSystems[0], (int) referenceSystems.size());
|
||||
|
||||
if (currentReferenceSystem != -1 && currentReferenceSystem < (int) referenceSystems.size())
|
||||
{
|
||||
CalCtx.referenceTrackingSystem = std::string(referenceSystems[currentReferenceSystem]);
|
||||
if (CalCtx.referenceTrackingSystem == CalCtx.targetTrackingSystem)
|
||||
CalCtx.targetTrackingSystem = "";
|
||||
}
|
||||
|
||||
if (CalCtx.targetTrackingSystem == "")
|
||||
currentTargetSystem = 0;
|
||||
|
||||
std::vector<const char *> targetSystems;
|
||||
for (auto &str : state.trackingSystems)
|
||||
{
|
||||
if (str != CalCtx.referenceTrackingSystem)
|
||||
{
|
||||
if (str != "" && str == CalCtx.targetTrackingSystem)
|
||||
currentTargetSystem = (int) targetSystems.size();
|
||||
targetSystems.push_back(str.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::SameLine();
|
||||
ImGui::PushItemWidth(paneWidth);
|
||||
ImGui::Combo("##TargetTrackingSystem", ¤tTargetSystem, &targetSystems[0], (int) targetSystems.size());
|
||||
|
||||
if (currentTargetSystem != -1 && currentTargetSystem < targetSystems.size())
|
||||
{
|
||||
CalCtx.targetTrackingSystem = std::string(targetSystems[currentTargetSystem]);
|
||||
}
|
||||
}
|
||||
|
||||
void AppendSeparated(std::string &buffer, const std::string &suffix)
|
||||
{
|
||||
if (!buffer.empty())
|
||||
buffer += " | ";
|
||||
buffer += suffix;
|
||||
}
|
||||
|
||||
std::string LabelString(const VRDevice &device)
|
||||
{
|
||||
std::string label;
|
||||
|
||||
/*if (device.controllerRole == vr::TrackedControllerRole_LeftHand)
|
||||
label = "Left Controller";
|
||||
else if (device.controllerRole == vr::TrackedControllerRole_RightHand)
|
||||
label = "Right Controller";
|
||||
else if (device.deviceClass == vr::TrackedDeviceClass_Controller)
|
||||
label = "Controller";
|
||||
else if (device.deviceClass == vr::TrackedDeviceClass_HMD)
|
||||
label = "HMD";
|
||||
else if (device.deviceClass == vr::TrackedDeviceClass_GenericTracker)
|
||||
label = "Tracker";*/
|
||||
|
||||
AppendSeparated(label, device.model);
|
||||
AppendSeparated(label, device.serial);
|
||||
return label;
|
||||
}
|
||||
|
||||
void BuildDeviceSelection(const VRState &state, int &selected, const std::string &system)
|
||||
{
|
||||
ImGui::TextColored(ImColor(0.5f, 0.5f, 0.5f), "Devices from: %s", system.c_str());
|
||||
|
||||
if (selected != -1)
|
||||
{
|
||||
bool matched = false;
|
||||
for (auto &device : state.devices)
|
||||
{
|
||||
if (device.trackingSystem != system)
|
||||
continue;
|
||||
|
||||
if (selected == device.id)
|
||||
{
|
||||
matched = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!matched)
|
||||
{
|
||||
// Device is no longer present.
|
||||
selected = -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (selected == -1)
|
||||
{
|
||||
for (auto &device : state.devices)
|
||||
{
|
||||
if (device.trackingSystem != system)
|
||||
continue;
|
||||
|
||||
if (device.controllerRole == vr::TrackedControllerRole_LeftHand)
|
||||
{
|
||||
selected = device.id;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (auto &device : state.devices)
|
||||
{
|
||||
if (device.trackingSystem != system)
|
||||
continue;
|
||||
|
||||
if (selected == -1)
|
||||
selected = device.id;
|
||||
|
||||
auto label = LabelString(device);
|
||||
if (ImGui::Selectable(label.c_str(), selected == device.id))
|
||||
selected = device.id;
|
||||
}
|
||||
}
|
||||
|
||||
void BuildDeviceSelections(const VRState &state)
|
||||
{
|
||||
ImGuiStyle &style = ImGui::GetStyle();
|
||||
ImVec2 paneSize(ImGui::GetWindowContentRegionWidth() / 2 - style.FramePadding.x, ImGui::GetTextLineHeightWithSpacing() * 5 + style.ItemSpacing.y * 4);
|
||||
|
||||
ImGui::BeginChild("left device pane", paneSize, true);
|
||||
static int selectedRefDevice = -1;
|
||||
BuildDeviceSelection(state, selectedRefDevice, CalCtx.referenceTrackingSystem);
|
||||
CalCtx.referenceID = selectedRefDevice;
|
||||
ImGui::EndChild();
|
||||
|
||||
ImGui::SameLine();
|
||||
|
||||
ImGui::BeginChild("right device pane", paneSize, true);
|
||||
static int selectedCalDevice = -1;
|
||||
BuildDeviceSelection(state, selectedCalDevice, CalCtx.targetTrackingSystem);
|
||||
CalCtx.targetID = selectedCalDevice;
|
||||
ImGui::EndChild();
|
||||
|
||||
if (ImGui::Button("Identify selected devices (blinks LED or vibrates)", ImVec2(ImGui::GetWindowContentRegionWidth(), ImGui::GetTextLineHeightWithSpacing() + 4.0f)))
|
||||
{
|
||||
for (unsigned i = 0; i < 100; ++i)
|
||||
{
|
||||
vr::VRSystem()->TriggerHapticPulse(CalCtx.targetID, 0, 2000);
|
||||
vr::VRSystem()->TriggerHapticPulse(CalCtx.referenceID, 0, 2000);
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(5));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
VRState LoadVRState()
|
||||
{
|
||||
VRState state;
|
||||
auto &trackingSystems = state.trackingSystems;
|
||||
|
||||
char buffer[vr::k_unMaxPropertyStringSize];
|
||||
|
||||
for (uint32_t id = 0; id < vr::k_unMaxTrackedDeviceCount; ++id)
|
||||
{
|
||||
vr::ETrackedPropertyError err = vr::TrackedProp_Success;
|
||||
auto deviceClass = vr::VRSystem()->GetTrackedDeviceClass(id);
|
||||
if (deviceClass == vr::TrackedDeviceClass_Invalid)
|
||||
continue;
|
||||
|
||||
if (deviceClass != vr::TrackedDeviceClass_TrackingReference)
|
||||
{
|
||||
vr::VRSystem()->GetStringTrackedDeviceProperty(id, vr::Prop_TrackingSystemName_String, buffer, vr::k_unMaxPropertyStringSize, &err);
|
||||
|
||||
if (err == vr::TrackedProp_Success)
|
||||
{
|
||||
std::string system(buffer);
|
||||
auto existing = std::find(trackingSystems.begin(), trackingSystems.end(), system);
|
||||
if (existing != trackingSystems.end())
|
||||
{
|
||||
if (deviceClass == vr::TrackedDeviceClass_HMD)
|
||||
{
|
||||
trackingSystems.erase(existing);
|
||||
trackingSystems.insert(trackingSystems.begin(), system);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
trackingSystems.push_back(system);
|
||||
}
|
||||
|
||||
VRDevice device;
|
||||
device.id = id;
|
||||
device.deviceClass = deviceClass;
|
||||
device.trackingSystem = system;
|
||||
|
||||
vr::VRSystem()->GetStringTrackedDeviceProperty(id, vr::Prop_ModelNumber_String, buffer, vr::k_unMaxPropertyStringSize, &err);
|
||||
device.model = std::string(buffer);
|
||||
|
||||
vr::VRSystem()->GetStringTrackedDeviceProperty(id, vr::Prop_SerialNumber_String, buffer, vr::k_unMaxPropertyStringSize, &err);
|
||||
device.serial = std::string(buffer);
|
||||
|
||||
device.controllerRole = (vr::ETrackedControllerRole) vr::VRSystem()->GetInt32TrackedDeviceProperty(id, vr::Prop_ControllerRoleHint_Int32, &err);
|
||||
state.devices.push_back(device);
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("failed to get tracking system name for id %d\n", id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
void BuildProfileEditor()
|
||||
{
|
||||
ImGuiStyle &style = ImGui::GetStyle();
|
||||
float width = ImGui::GetWindowContentRegionWidth() / 3.0f - style.FramePadding.x;
|
||||
float widthF = width - style.FramePadding.x;
|
||||
|
||||
TextWithWidth("YawLabel", "Yaw", width);
|
||||
ImGui::SameLine();
|
||||
TextWithWidth("PitchLabel", "Pitch", width);
|
||||
ImGui::SameLine();
|
||||
TextWithWidth("RollLabel", "Roll", width);
|
||||
|
||||
ImGui::PushItemWidth(widthF);
|
||||
ImGui::InputDouble("##Yaw", &CalCtx.calibratedRotation(1), 0.1, 1.0, "%.8f");
|
||||
ImGui::SameLine();
|
||||
ImGui::PushItemWidth(widthF);
|
||||
ImGui::InputDouble("##Pitch", &CalCtx.calibratedRotation(2), 0.1, 1.0, "%.8f");
|
||||
ImGui::SameLine();
|
||||
ImGui::PushItemWidth(widthF);
|
||||
ImGui::InputDouble("##Roll", &CalCtx.calibratedRotation(0), 0.1, 1.0, "%.8f");
|
||||
|
||||
TextWithWidth("XLabel", "X", width);
|
||||
ImGui::SameLine();
|
||||
TextWithWidth("YLabel", "Y", width);
|
||||
ImGui::SameLine();
|
||||
TextWithWidth("ZLabel", "Z", width);
|
||||
|
||||
ImGui::PushItemWidth(widthF);
|
||||
ImGui::InputDouble("##X", &CalCtx.calibratedTranslation(0), 1.0, 10.0, "%.8f");
|
||||
ImGui::SameLine();
|
||||
ImGui::PushItemWidth(widthF);
|
||||
ImGui::InputDouble("##Y", &CalCtx.calibratedTranslation(1), 1.0, 10.0, "%.8f");
|
||||
ImGui::SameLine();
|
||||
ImGui::PushItemWidth(widthF);
|
||||
ImGui::InputDouble("##Z", &CalCtx.calibratedTranslation(2), 1.0, 10.0, "%.8f");
|
||||
}
|
||||
|
||||
void TextWithWidth(const char *label, const char *text, float width)
|
||||
{
|
||||
ImGui::BeginChild(label, ImVec2(width, ImGui::GetTextLineHeightWithSpacing()));
|
||||
ImGui::Text(text);
|
||||
ImGui::EndChild();
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
void BuildMainWindow();
|
||||
|
Before Width: | Height: | Size: 45 KiB |
@@ -1,6 +0,0 @@
|
||||
// stdafx.cpp : source file that includes just the standard includes
|
||||
// OpenVR-SpaceCalibrator.pch will be the pre-compiled header
|
||||
// stdafx.obj will contain the pre-compiled type information
|
||||
|
||||
#include "stdafx.h"
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include "targetver.h"
|
||||
|
||||
#define WIN32_LEAN_AND_MEAN
|
||||
#include <windows.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <malloc.h>
|
||||
#include <memory.h>
|
||||
#include <tchar.h>
|
||||
#include <iostream>
|
||||
@@ -1,52 +1,75 @@
|
||||
# OpenVR-SpaceCalibrator
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://github.com/hyblocker/OpenVR-SpaceCalibrator/blob/develop/.github/logo_light.png?raw=true">
|
||||
<source media="(prefers-color-scheme: light)" srcset="https://github.com/hyblocker/OpenVR-SpaceCalibrator/blob/develop/.github/logo_dark.png?raw=true">
|
||||
<img alt="Space Calibrator" src="https://github.com/hyblocker/OpenVR-SpaceCalibrator/blob/develop/.github/logo.png?raw=true">
|
||||
</picture>
|
||||
|
||||
Use VR devices from one company with any other.
|
||||
This program is designed to allow you to synchronise multiple playspaces with one another in SteamVR. This fork of Space Calibrator (spacecal) also supports [continuous calibration](#continuous-calibration).
|
||||
|
||||
This is **beta software** and may not work for you. A quick video walkthrough of the calibration process is available at https://www.youtube.com/watch?v=W3TnQd9JMl4
|
||||
Continuous calibration is a tracking mode which automatically aligns playspaces together, using a tracker on the headset.
|
||||
|
||||
## Usage
|
||||
This version of Space Calibrator 2.0 has been rewritten from the ground up for improved robustness, QOL improvements and less tracking issues, amongst others. For a list of differences compared with other versions, please see [the features list](#features)
|
||||
|
||||
### Calibration
|
||||
## Installing
|
||||
|
||||
If you don't already run a setup with multiple device types, see [Setting up SteamVR](#setting-up-steamvr).
|
||||
### Steam
|
||||
|
||||
0. Install [OpenVR-InputEmulator](https://github.com/matzman666/OpenVR-InputEmulator).
|
||||
1. Download and unzip the [latest release](https://github.com/pushrax/OpenVR-SpaceCalibrator/releases) of OpenVR-SpaceCalibrator.
|
||||
2. Run SteamVR, and turn on your Touch controllers and only one Vive device to use for calibration.
|
||||
3. Run OpenVR-SpaceCalibrator.
|
||||
4. Hold the left Touch controller and your Vive device in your left hand securely, like they're glued together.
|
||||
5. Click "Start Calibration"
|
||||
6. Wave your left hand around, like you're calibrating the compass on your phone. You want to get as many orientations as possible.
|
||||
7. Done! A profile will be saved automatically. You can turn on the rest of your Vive devices now.
|
||||
> [!NOTE]
|
||||
> **Space Calibrator is also available on Steam.**
|
||||
|
||||
Next time you run SteamVR and OpenVR-InputEmulator it will load the calibration automatically and apply it to any Vive devices you turn on.
|
||||
You may find [Space Calibrator on Steam here](https://s.team/a/3368750).
|
||||
|
||||
### Setting up SteamVR
|
||||
### From GitHub
|
||||
|
||||
Every hardware designer with their own tracking system needs to make a "driver"
|
||||
so SteamVR can see their tracking data. SteamVR by default will load only one driver at a time,
|
||||
but we can tell it to load all of them by editing the vrsettings config file.
|
||||
To install Space Calibrator, please get the latest installer from the downloads page, and install it. Make sure that you have:
|
||||
- Installed [Visual C++ Redistributable](https://aka.ms/vs/17/release/vc_redist.x64.exe).
|
||||
- Installed SteamVR and run it at least once with a VR headset connected.
|
||||
- SteamVR is not running before you run the installer. If SteamVR is running the installer will not be able to install Space Calibrator correctly.
|
||||
|
||||
Open `Steam\steamapps\common\SteamVR\resources\settings\default.vrsettings` in a text editor,
|
||||
look for the line that has `"activateMultipleDrivers": false` and change the `false` to `true`.
|
||||
In some guides online you may also see references to `requireHmd`, this does _not_ need to be changed
|
||||
unless you truly want to be able to run without any kind of HMD.
|
||||
## Calibration
|
||||
|
||||
Sometimes when SteamVR updates this file seems to get wiped, if your setup stops working you might
|
||||
have to edit the config again.
|
||||
If you do not wish to use continuous calibration, you will have to use regular calibration. This means that every so often you will have to sync your headset's playspace with your tracker's playspace.
|
||||
|
||||
### Manually editing the calibration
|
||||
To calibrate:
|
||||
1. Copy the chaperone/guardian bounds from your HMD's play space
|
||||
> You will only have to do this once. Connect your VR headset and start SteamVR. Then go to space calibrator's window (it will be minimised), and click the "Copy Chaperone" button.
|
||||
|
||||
If you'd like to make a manual change to the calibration, the values are in `openvr_space_calibration.txt` in the same folder as the exe.
|
||||
The first 3 numbers are the rotation (yaw, pitch, roll) in degrees, and the next 3 numbers are the translation (x, y, z) in centimeters.
|
||||
2. Open the SteamVR dashboard. At the bottom, click on the Space Calibrator icon.
|
||||
3. In the Space Calibrator overlay, you'll see two lists at the top. On the left `Reference Space` column, select the controller you'll be calibrating along (e.g. Quest controller, Pico controller). On the right `Target Space`, select your SteamVR tracker (e.g. Vive Ultimate Tracker, Vive Tracker 3.0, Vive Ultimate Tracker). You can use the Identify button to make the controllers blink and tracker LEDs flash to see if you've selected the correct ones.
|
||||
4. Click the "Start calibration" button, and start calibrating.
|
||||
|
||||
### Compiling your own build
|
||||
## Continuous Calibration
|
||||
|
||||
1. Install boost 1.63 to `lib/boost_1_63_0` (required for IPC to OpenVR-InputEmulator). https://sourceforge.net/projects/boost/files/boost-binaries/1.63.0/
|
||||
2. Open `OpenVR-SpaceCalibrator.sln` in Visual Studio 2015 and build.
|
||||
> [!IMPORTANT]
|
||||
> **A tracker attached on your headset is required for this.**
|
||||
|
||||
To enable continuous calibration mode, first select your headset on the left column, then the tracker on your headset on the right column. Once you've done so, click `Start Calibration`, and click cancel. Then click `Continuous Calibration` to enable continuous calibration.
|
||||
|
||||
## The math
|
||||
1. Start SteamVR with the VR headset you wish to use.
|
||||
2. Turn on **ONLY** the tracker which is attached on the VR headset.
|
||||
3. Select the VR headset and tracker and calibrate.
|
||||
4. Turn on your other devices.
|
||||
5. You should see them line up with you as you after moving around your playspace for a bit for an initial calibration.
|
||||
|
||||
See [math.pdf](https://github.com/pushrax/OpenVR-SpaceCalibrator/blob/master/math.pdf) for details.
|
||||
If you have some ideas for how to improve the calibration process, let me know!
|
||||
## Features
|
||||
|
||||
This version has been rewritten from scratch. It shares little code with the original repository but keeps similar ideas.
|
||||
|
||||
Major features:
|
||||
- The UI has been reworked substantially to improve UX. The goal is to reduce the need of tutorials and have the app explain how to calibrate and what one may do to improve calibrations directly in app rather than elsewhere.
|
||||
- Calibrations are now more streamlined. The calibration logic has been simplified to attempt minimising the chances of erroneous data being injected into a calibration sequence yielding poor calibrations.
|
||||
- Calibrations now require you to move around by default. The app will ignore data without enough movement to minimise the chances of poor calibrations arising due to a lack of movement.
|
||||
- Continuous calibration has been improved to reduce the frequency of mis-calibrations as much as possible.
|
||||
- Relative calibrations. The aim is to re-formulate how a calibration is stored so that it is now relative to your headset, meaning that if your headset drifts your trackers would along with it, hiding the drift entirely.
|
||||
- Made calibrating require a minimum amount of movement to ensure that a calibration is valid. This is to improve the success rate of most calibrations.
|
||||
- Robust logging. Logs are saved at `%APPDATA%/space-calibrator/logs` on Windows, and `~/.local/share/space-calibrator/logs` on Linux.
|
||||
- Settings are saved to a JSON file at `%APPDATA%/space-calibrator/config.json` on Windows, and `~/.local/share/space-calibrator/config.json` on Linux.
|
||||
- Linux support. The codebase can now be compiled for Linux x64 amd arm64. Official support assumes Steam Runtime 4, compatibility with other distributions is NOT guaranteed. This is not thoroughly tested but contributions / bug reports are appreciated.
|
||||
- Space Calibration now supports translations. The app will default to showing text in your system language, and you may override it from the Settings page. For guidance regarding contributing translations please see [TRANSLATING.md](https://github.com/hyblocker/OpenVR-SpaceCalibrator/blob/develop/TRANSLATING.md)
|
||||
- The UI renderer has been upgraded and now supports either OpenGL, DirectX11 (on Windows only) or Vulkan 1.3. The app will default to DirectX11 on Windows and Vulkan on Linux. This is to reduce issues for end users on buggy GPU drivers causing the app to fail to launch. You can override the renderer by passing `--renderer <opengl|dx11|vulkan>` as launch arguments.
|
||||
- Base Station management has been integrated into the app to allow you to control them without 3rd party software.
|
||||
- More things that aren't mentioned here.
|
||||
|
||||
## Help
|
||||
|
||||
If you need help with setting up this program, please check the [wiki](https://github.com/pushrax/OpenVR-SpaceCalibrator/wiki), or join the [Discord server](https://discord.gg/ja3WgNjC3z).
|
||||
@@ -0,0 +1,72 @@
|
||||
# Translating
|
||||
|
||||
The ground truth translation will always be available at `assets/en_GB.json`. If you notice that something is different there when compared to the language you're translating please use the `en_GB` file as reference.
|
||||
|
||||
Translations are authored in JSON. They're a key value pair of IDs to the text:
|
||||
|
||||
```json
|
||||
{
|
||||
"app_title": "{0} {1}", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"app_title_vr": "{0} {1} - close VR overlay to use mouse", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"tracking_system_no_systems": "No tracked devices present. Please turn on a device to continue.", /* Should never be hit but you never know */
|
||||
|
||||
"ipc_unavailable": "Failed to connect to Space Calibrator SteamVR driver. Please verify file integrity in Properties -> Installed Files, or re-install the app.",
|
||||
"steamvr_unavailable": "Failed to connect to SteamVR.",
|
||||
"vr_troubleshooting_hmd_not_found": "Please connect your VR headset and launch SteamVR first.",
|
||||
"vr_troubleshooting_connect_steamlink": "Please open SteamLink on your VR headset and connect to SteamVR first.",
|
||||
"vr_troubleshooting_generic": "Please connect your VR headset and launch SteamVR first. ({0} {1})", /* 0 : SteamVR init error (eg 108), 1 : SteamVR init error string (eg Headset not connected) - this string is provided by Steam. */
|
||||
|
||||
// space here refers to a tracking space / tracking system.
|
||||
"reference_space": "Reference space",
|
||||
"target_space": "Target space",
|
||||
"select_reference_device": "Select reference device",
|
||||
"select_target_device": "Select target device"
|
||||
}
|
||||
```
|
||||
|
||||
The format supports comments, which are usually used to inform you of what numbered arguments are.
|
||||
|
||||
Text formatting may use `{N}`, where `N` is a numbered argument so that you can re-order text to make grammatical sense in your language of choice.
|
||||
|
||||
For example, you can write: `Arg0: {0} arg1: {1}` ; and itll appear as `Arg0: foo arg1: bar` or `Arg0: {1} arg1: {0}` which appears as `Arg0: bar arg1: foo`.
|
||||
|
||||
You can experiment with translations by making a `json` file matching a locale string at `<SPACECAL-DIR>/assets/lang/en_GB.json`
|
||||
|
||||
Missing strings will fall back to their respective English strings. For example, if you are editing `it.json` and forgot to add the string `reference_space`, the app will show the English value to the user.
|
||||
|
||||
You should also translate the languages block at the bottom of the file. This section is used to present the name of the language to the user in the language selection dropdown in the current language and the language itself. For example, if the user currently has Japanese selected, the entry for French would read as `フランス語 (Français)` in the dropdown.
|
||||
|
||||
The supported languages right now are:
|
||||
- `en_GB.json` (maintained by me, consider it ground truth)
|
||||
- `en_US.json` English (US)
|
||||
- `fr.json` French
|
||||
- `it.json` Italian
|
||||
- `de.json` German
|
||||
- `nl.json` Dutch (missing)
|
||||
- `es_ES.json` Spanish (Spain)
|
||||
- `es_US.json` Spanish (Latin America) (missing)
|
||||
- `da.json` Danish (missing)
|
||||
- `sv.json` Swedish (missing)
|
||||
- `fi.json` Finnish (missing)
|
||||
- `no.json` Norwegian
|
||||
- `bg.json` Bulgarian (missing)
|
||||
- `pl.json` Polish
|
||||
- `cs.json` Czech (missing)
|
||||
- `el.json` Greek (missing)
|
||||
- `hu.json` Hungarian
|
||||
- `pt_PT.json` Portuguese (Portugal) (missing)
|
||||
- `pt_BR.json` Portuguese (Brazil) (missing)
|
||||
- `ro.json` Romanian (missing)
|
||||
- `ru.json` Russian
|
||||
- `tr.json` Turkish (missing)
|
||||
- `uk.json` Ukrainian (missing)
|
||||
- `zh_HANS.json` Chinese (Simplified)
|
||||
- `zh_HANT.json` Chinese (Traditional) (missing)
|
||||
- `ja.json` Japanese
|
||||
- `ko.json` Korean
|
||||
- `th.json` Thai (missing)
|
||||
- `vi.json` Vietnamese (missing)
|
||||
|
||||
These files must live at `<SPACECAL-DIR>/assets/lang/<LANGUAGE>.json`.
|
||||
|
||||
Languages with `(missing)` have not been translated yet. If you know the language, feel free to make a translation. Note that machine generated translations (eg AI, Google Translate) will be rejected indiscriminately.
|
||||
@@ -0,0 +1,93 @@
|
||||
Copyright 2016 The M+ Project Authors.
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
https://openfontlicense.org
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
@@ -0,0 +1,93 @@
|
||||
Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
https://openfontlicense.org
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
@@ -0,0 +1,93 @@
|
||||
Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
https://openfontlicense.org
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
@@ -0,0 +1,93 @@
|
||||
Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
https://openfontlicense.org
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
@@ -0,0 +1,93 @@
|
||||
Copyright 2020 The Poppins Project Authors (https://github.com/itfoundry/Poppins)
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
https://openfontlicense.org
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
|
After Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 252 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 192 KiB |
|
After Width: | Height: | Size: 98 KiB |
@@ -0,0 +1,278 @@
|
||||
{
|
||||
"app_title": "{0} {1}", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"app_title_vr": "{0} {1} - VR-Overlay schließen, um die Maus zu verwenden", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"tracking_system_no_systems": "Keine Geräte vorhanden. Bitte schalte ein Gerät ein, um fortzufahren", /* Should never be hit but you never know */
|
||||
|
||||
"error_unknown_catastrophic": "Etwas ist katastrophal schiefgelaufen! Bitte melde dies dem Entwickler auf GitHub oder in den Steam-Diskussionen, damit es behoben werden kann.",
|
||||
"ipc_unavailable": "Die Verbindung zum Space Calibrator SteamVR-Treiber konnte nicht hergestellt werden. Bitte überprüfe die Dateiintegrität unter „Eigenschaften“ > „Installierte Dateien“ > „Softwaredateien auf Fehler überprüfen“ oder installiere die App neu.",
|
||||
"steamvr_unavailable": "Verbindungsfehler mit SteamVR.",
|
||||
"vr_troubleshooting_hmd_not_found": "Bitte verbinde erst dein VR-Headset und starte SteamVR.",
|
||||
"vr_troubleshooting_connect_steamlink": "Bitte erst SteamLink auf dem VR-Headset öffnen und mit SteamVR verbinden.",
|
||||
"vr_troubleshooting_generic": "Bitte verbinde erst dein VR-Headset und starte SteamVR. ({0} {1})", /* 0 : SteamVR init error (eg 108), 1 : SteamVR init error string (eg Headset not connected) - this string is provided by Steam. */
|
||||
|
||||
"calibration_title": "Kalibrierung",
|
||||
"calibration_count_none": "Keine Kalibrierung. Bitte starte eine neue Kalibrierung.", // Shown when there are no calibrations active
|
||||
"calibration_new": "Neue Kalibrierung",
|
||||
"calibration_delete": "Lösche Kalibrierung",
|
||||
"calibration_next": "Nächste Kalibrierung",
|
||||
"calibration_previous": "Vorherige Kalibrierung",
|
||||
|
||||
"calibration_status_none": "Keine aktive Kalibrierung",
|
||||
"calibration_status_none_description": "Bitte wähle Geräte aus, um mit der Kalibrierung zu starten.",
|
||||
"calibration_status_edit": "Editiere Kalibrierung",
|
||||
"calibration_status_edit_description": "Aktuelle Kalibrierung wird bearbeitet.",
|
||||
"calibration_status_continuous": "Kontinuierliche Kalibrierung",
|
||||
"calibration_status_continuous_description": "Du hast eine aktive Kalibrierung. Verwende einen befestigten Tracker, um alle paar Sekunden automatisch neu zu kalibrieren.",
|
||||
"calibration_status_standard": "Standard-Kalibrierung",
|
||||
"calibration_status_standard_description": "Du hast eine aktive Kalibrierung. Bei Auftreten von Drift musst du eventuell neu kalibrieren.",
|
||||
|
||||
// space here refers to a tracking space / tracking system.
|
||||
"reference_device": "Referenzgerät",
|
||||
"reference_device_description": "Das Gerät, mit dem du kalibrierst, meistens dein VR-Headset oder ein Kontroller.",
|
||||
"target_device": "Zielgerät",
|
||||
"target_device_description": "Dieses Gerät wird genutzt, um deine Tracker oder Kontroller auszurichten.",
|
||||
"select_reference_device": "Referenzgerät auswählen",
|
||||
"select_target_device": "Zielgerät auswählen",
|
||||
|
||||
"identify_selected_devices": "Ausgewählte Geräte identifizieren (LED blinkt oder vibriert)",
|
||||
"identify_auto_detect_devices": "Geräte automatisch erkennen",
|
||||
"calibration_error_reference_hmd_missing": "Zielgerät vom Tracking-System \"{0}\" konnte nicht gefunden werden. Du musst eventuell neu kalibrieren.", /* 0 : tracking system name, eg SteamVR Tracking*/
|
||||
"calibration_warning_stage_tracking_disabled": "Stage Tracking ist deaktiviert! Für ein besseres Ergebniss öffne auf deinem VR-Headset das Virtual-Desktop-Menü, geh auf den Reiter „Streaming“ und aktiviere „Spielfläche zentrieren (Stage Tracking)“.",
|
||||
"calibration_warning_stage_tracking_disabled_ignore_button": "Nicht mehr anzeigen",
|
||||
|
||||
"calibration_action_start": "Standard-Kalibrierung",
|
||||
"calibration_action_clear": "Kalibrierung zurücksetzen",
|
||||
"calibration_action_continuous": "Kontinuierliche Kalibrierung",
|
||||
"calibration_action_edit": "Kalibrierung bearbeiten",
|
||||
"save_calibration_profile": "Profil speichern",
|
||||
|
||||
"calibration_progress": "Kalibrierungsfortschritt",
|
||||
"calibration_info_move_around_insufficient_samples": "Halte die ausgewählten Geräte fest zusammen und geh durch deinen Spielbereich, während du sie sanft in Form einer Achter-Bewegung drehst.",
|
||||
|
||||
"calibration_speed": "Kalibrierungsgeschwindigkeit",
|
||||
"calibration_speed_description": "Wie lange die Kalibrierung dauert. Langsamere Kalibrierungen sind meistens genauer.",
|
||||
"calibration_speed_fast": "Schnell",
|
||||
"calibration_speed_slow": "Langsam",
|
||||
"calibration_speed_very_slow": "Sehr langsam",
|
||||
|
||||
/* Editing calibrations */
|
||||
"edit_calibration_rotation": "Rotation",
|
||||
"edit_calibration_position": "Position (m)",
|
||||
"edit_calibration_yaw": "Yaw",
|
||||
"edit_calibration_pitch": "Pitch",
|
||||
"edit_calibration_roll": "Roll",
|
||||
"edit_calibration_x": "X",
|
||||
"edit_calibration_y": "Y",
|
||||
"edit_calibration_z": "Z",
|
||||
"edit_calibration_scale": "Skalierung (m)",
|
||||
|
||||
"continuous_hide_tracker": "Zielgerät vor Apps verstecken",
|
||||
"continuous_relative_calibration": "Relative Kalibrierung aktivieren",
|
||||
"continuous_relative_calibration_description": "Macht die Kalibrierung relativ zum Referenzgerät (meistens dein Headset), sodass sie sich in jedem Frame aktualisiert, ohne dass du neu kalibrieren musst. Das ERFORDERT eine kontinuierliche Kalibrierung.",
|
||||
|
||||
/* HMD names for Virtual Desktop */
|
||||
/* Virtual desktop lies that it's a Quest 2/3 on most headsets, so we have to substitute the real HMD name ourselves. you generally should
|
||||
NOT have to change these! but some headsets have different names in certain regions (eg PFD MR is YVR MR in China) */
|
||||
"virtual_desktop_hmd_none": "Keines", /* should never appear but you never know*/
|
||||
"virtual_desktop_hmd_gearvr": "Samsung Gear VR",
|
||||
"virtual_desktop_hmd_oculus_go": "Oculus Go",
|
||||
"virtual_desktop_hmd_oculus_quest_1": "Oculus Quest",
|
||||
"virtual_desktop_hmd_oculus_quest_2": "Oculus Quest 2",
|
||||
"virtual_desktop_hmd_meta_quest_pro": "Meta Quest Pro",
|
||||
"virtual_desktop_hmd_pico_4": "Pico 4",
|
||||
"virtual_desktop_hmd_meta_quest_3": "Meta Quest 3",
|
||||
"virtual_desktop_hmd_meta_quest_3s": "Meta Quest 3S",
|
||||
"virtual_desktop_hmd_pico_4_ultra": "Pico 4 Ultra",
|
||||
"virtual_desktop_hmd_samsung_galaxy_xr": "Samsung Galaxy XR",
|
||||
"virtual_desktop_hmd_play_for_dream_mr": "Play For Dream MR",
|
||||
|
||||
/* vertical tabs on the left */
|
||||
"tab_page_calibration": "Kalibrierung",
|
||||
"tab_page_graphs": "Diagramme",
|
||||
"tab_page_base_station_management": "Basisstationen",
|
||||
"tab_page_settings": "Einstellungen",
|
||||
"tab_page_debug": "Debug",
|
||||
"tab_page_learn": "Anleitung",
|
||||
"tab_page_about": "Über",
|
||||
|
||||
/* graphs */
|
||||
"graphs_title": "Diagramme",
|
||||
|
||||
/* base stations */
|
||||
"base_stations_title": "Basisstationen-Verwaltung",
|
||||
"base_stations_no_bluetooth": "Kein gültiger Bluetooth-Adapter gefunden. Bitte schließe ein BLE-fähiges Bluetooth-Gerät an, um die Basisstationen-Verwaltung zu nutzen.",
|
||||
"base_stations_none_found": "Keine Basisstationen erkannt. Falls du welche hast, stelle sicher, dass sie eingeschaltet sind.",
|
||||
"base_stations_header_info": "{0}", // 0: station ID (LHB XXXXXXXX) / nickname
|
||||
"base_stations_warning_collision": "Kanal-Kollision erkannt! Das führt zu Tracking-Problemen. Jede deiner Basisstationen sollte einen eigenen Kanal nutzen.",
|
||||
"base_stations_state_sleep": "Ruhezustand",
|
||||
"base_stations_state_standby": "Standby",
|
||||
"base_stations_state_active": "Aktiv",
|
||||
"base_stations_state_unknown": "Unbekannt",
|
||||
"base_stations_state_faulty": "Fehlerhaft",
|
||||
"base_stations_channel_select_label": "Wähle einen Basisstationen-Kanal:",
|
||||
"base_stations_active_channel": "Kanal {0}", // 0: channel number (1-15) ; eg Channel 12
|
||||
"base_stations_nickname": "Name",
|
||||
|
||||
/* actions */
|
||||
"base_stations_action_wake_all": "Alle aufwecken",
|
||||
"base_stations_action_sleep_all": "Alle in den Ruhezustand versetzen",
|
||||
"base_stations_action_fix_collisions": "Kanal-Kollisionen beheben",
|
||||
"base_stations_btn_wake": "Aufwecken",
|
||||
"base_stations_btn_standby": "Standby",
|
||||
"base_stations_btn_sleep": "Ruhezustand",
|
||||
"base_stations_btn_edit": "Bearbeiten",
|
||||
"base_stations_btn_save": "Speichern",
|
||||
|
||||
"base_station_power_management": "Energieverwaltung der Basisstationen",
|
||||
"base_stations_power_mgmt_enable": "Energieverwaltung aktivieren *",
|
||||
"base_stations_power_mgmt_enable_description_standby": "Eingeschaltete Basisstationen wechseln in den Standby-Modus, wenn SteamVR ausgeschaltet wird und wachen wieder auf, sobald SteamVR startet.",
|
||||
"base_stations_power_mgmt_enable_description_sleep": "Eingeschaltete Basisstationen wechseln in den Ruhezustand, wenn SteamVR ausgeschaltet wird und wachen wieder auf, sobald SteamVR startet.",
|
||||
"base_stations_power_mgmt_on_startup": "Basisstationen beim Start von SteamVR einschalten",
|
||||
"base_stations_power_mgmt_on_startup_description": "Ausgeschaltete Basisstationen wachen auf, sobald SteamVR startet.",
|
||||
"base_stations_power_mgmt_on_shutdown": "Basisstationen beim Beenden von SteamVR ausschalten",
|
||||
"base_stations_power_mgmt_on_shutdown_description": "Eingeschaltete Basisstationen werden ausgeschaltet, wenn SteamVR ausgeschaltet wird.",
|
||||
"base_stations_power_mgmt_standby": "Standby",
|
||||
"base_stations_power_mgmt_standby_description": "Basisstationen schalten nur ihre Laser aus, um schneller wieder aufzuwachen, wenn SteamVR startet. Das ist bei Basisstation-1.0-Modellen und einigen 2.0-Modellen nicht verfügbar – in diesen Fällen wird der Ruhezustand genutzt.",
|
||||
"base_stations_power_mgmt_sleep": "Ruhezustand",
|
||||
"base_stations_power_mgmt_sleep_description": "Basisstationen schalten ihre Laser und Motoren komplett aus.",
|
||||
"base_stations_power_mgmt_warning": "* NICHT EMPFOHLEN für gemeinsam genutzte Spielbereiche mit mehreren SteamVR-Nutzern.",
|
||||
|
||||
/* settings */
|
||||
"settings_title": "Einstellungen",
|
||||
"settings_advanced": "Erweiterte Einstellungen",
|
||||
"settings_advanced_description": "Zeigt zusätzliche Einstellungen und Steuerelemente zur Feinabstimmung für erfahrene Nutzer an.",
|
||||
"settings_calibrate_motion_vectors": "Bewegungsvektoren kalibrieren",
|
||||
"settings_calibrate_motion_vectors_description": "Verbessert die Bewegungsvorhersage für ein direkteres Tracking. Kann sich auf physikintensive Spiele auswirken.",
|
||||
"settings_autofix_playspace_jumps": "Spielflächen-Sprünge automatisch korrigieren",
|
||||
"settings_autofix_playspace_jumps_description": "Versucht plötzliche Sprünge beim Spielflächen-Tracking automatisch zu erkennen und zu korrigieren.",
|
||||
"settings_enforce_minimum_rotation_variance": "Minimale Rotationsvarianz erzwingen",
|
||||
"settings_enforce_minimum_rotation_variance_description": "Verwirft automatisch Messwerte mit zu ähnlicher Drehung, um die Kalibrierungsqualität zu verbessern.",
|
||||
"settings_locale": "Sprache",
|
||||
"settings_reset": "Alle Einstellungen zurücksetzen",
|
||||
"settings_reset_description": "Setzt alle Einstellungen auf die Standardwerte zurück. Das ist dauerhaft und kann nicht rückgängig gemacht werden.",
|
||||
"settings_reset_confirm": "Diese Änderung ist dauerhaft und kann nicht rückgängig gemacht werden. Bist du sicher, dass du fortfahren möchtest?",
|
||||
"settings_reset_yes": "Ja",
|
||||
"settings_reset_no": "Nein",
|
||||
|
||||
/* about */
|
||||
"about_title": "Über",
|
||||
"about_description": "Space Calibrator ist ein kostenloses Open-Source-Tool, mit dem du Geräte verschiedener Hersteller zusammen mit SteamVR nutzen kannst.",
|
||||
"about_view_source_info": "Du kannst dir den Quellcode auf dem GitHub-Repository ansehen.",
|
||||
"about_contributors_title": "Mitwirkende",
|
||||
"about_contributors_description": "Space Calibrator wurde mit der Hilfe folgender Personen möglich gemacht:",
|
||||
"about_translators_title": "Übersetzer",
|
||||
"about_translators_description": "Space Calibrator wurde von folgenden Personen übersetzt:",
|
||||
"about_licenses_title": "Lizenzen",
|
||||
"about_licenses_description": "Dieses Programm steht unter der MIT-Lizenz. Andere Abhängigkeiten stehen unter anderen Lizenzen. Bitte schau dir die Lizenzen unten für weitere Informationen an.",
|
||||
"about_link_github": "GitHub",
|
||||
"about_link_discord": "Discord-Server",
|
||||
"about_link_logs_dir": "Log-Ordner",
|
||||
|
||||
/* self-troubleshooting */
|
||||
/* found another driver loaded in SteamVR -> legacy ipc connection successful */
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_title": "Eine andere Instanz von Space Calibrator ist bereits vorhanden",
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_description": "Eine widersprüchliche Version von Space Calibrator läuft gerade. Du musst sie deinstallieren, um diese Anwendung nutzen zu können. Möchtest du sie automatisch entfernen?",
|
||||
/* found legacy overlay key registered (non steam) */
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_title": "Eine andere Instanz von Space Calibrator ist bereits vorhanden",
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_description": "Eine andere Version von Space Calibrator ist derzeit installiert. Möchtest du sie entfernen?",
|
||||
"troubleshoot_action_yes": "Ja",
|
||||
"troubleshoot_action_no": "Nein",
|
||||
"troubleshoot_action_quit": "Beenden",
|
||||
|
||||
/* tutorial */
|
||||
"learn_title": "Anleitung",
|
||||
"learn_card_standard_calibration": "Standard-Kalibrierung",
|
||||
"learn_card_standard_calibration_description": "Lerne, wie du ein Gerätepaar kalibrierst.",
|
||||
"learn_card_continuous_calibration": "Kontinuierliche Kalibrierung",
|
||||
"learn_card_continuous_calibration_description": "Kalibriere regelmäßig nach, um Drift während der Session entgegenzuwirken.",
|
||||
"learn_card_base_station_management": "Basisstationen-Verwaltung",
|
||||
"learn_card_base_station_management_description": "Steuere deine SteamVR-Basisstationen drahtlos.",
|
||||
"learn_card_ui_tour": "UI-Tour",
|
||||
"learn_card_ui_tour_description": "Ein Überblick über die Benutzeroberfläche von Space Calibrator.",
|
||||
"learn_action_back": "Zurück",
|
||||
|
||||
/* these are kinda like a messed up wiki because its inlined into the app like this, oh well lol */
|
||||
"learn_page_standard_desc": "Die Standard-Kalibrierung richtet zwei Tracking-Systeme aufeinander aus, damit deine VR-Geräte im selben physischen Spielbereich zusammenarbeiten.",
|
||||
"learn_page_standard_select_devices_title": "Wähle deine Geräte aus",
|
||||
"learn_page_standard_select_devices_desc": "Bevor es losgeht, muss die App wissen, welche zwei Geräte du kalibrieren möchtest.",
|
||||
"learn_page_standard_ref_device": "Referenzgerät: Das Gerät, an dem ausgerichtet wird – meistens ein Kontroller.",
|
||||
"learn_page_standard_target_device": "Zielgerät: Das noch nicht ausgerichtete Gerät, das du kalibrierst – typischerweise ein Tracker oder Ähnliches.",
|
||||
"learn_page_standard_perform_title": "Kalibrierung durchführen",
|
||||
"learn_page_standard_perform_step1": "Halte beide Geräte fest zusammen in einer Hand. Halte sie so fest wie möglich, damit sie sich während des Kalibrierungsvorgangs nicht bewegen.",
|
||||
"learn_page_standard_perform_step2": "Klicke auf die Schaltfläche „Standard-Kalibrierung“, um mit dem Kalibrieren zu beginnen.",
|
||||
"learn_page_standard_perform_step3": "Bewege dich in deinem Raum, während du die Geräte in einer Achter-Bewegung drehst, wie unten abgebildet.",
|
||||
"learn_page_standard_speeds_title": "Kalibrierungsgeschwindigkeiten",
|
||||
"learn_page_standard_speeds_desc": "Du kannst optional die Kalibrierungsgeschwindigkeit ändern, um festzulegen, wie viel Bewegung nötig ist. Mehr Bewegung führt meist zu einer besseren Qualität.",
|
||||
"learn_page_standard_speed_fast": "Schnell: Dauert nicht so lange, kann aber zu einer schlechteren Kalibrierung führen.",
|
||||
"learn_page_standard_speed_slow": "Langsam / Sehr langsam: Dauert länger, führt aber meistens zu genaueren Kalibrierungen.",
|
||||
"learn_page_standard_completion_note": "Sobald der Fortschrittsbalken voll ist, sollten deine Geräte in VR sofort ausgerichtet sein. Falls nicht, versuche es einfach noch einmal.",
|
||||
"learn_page_standard_drift_title": "Ein Hinweis zum Drift",
|
||||
"learn_page_standard_drift_desc": "Mit der Zeit können deine Geräte driften, wodurch die Kalibrierung nicht mehr stimmt. In dem Fall musst du neu kalibrieren. Wenn das häufig passiert, solltest du die kontinuierliche Kalibrierung ausprobieren.",
|
||||
|
||||
"learn_page_continuous_desc1": "Wenn du merkst, dass sich deine Geräte beim Spielen langsam verschieben, verdrehen oder aus der Position driften, ist die kontinuierliche Kalibrierung die Lösung dafür.",
|
||||
"learn_page_continuous_desc2": "Anstatt dich dazu zu zwingen, ständig anzuhalten und manuell nachzukalibrieren, hält die kontinuierliche Kalibrierung dein Tracking im Hintergrund automatisch synchron.",
|
||||
"learn_page_continuous_note_title": "Hinweis",
|
||||
"learn_page_continuous_note_desc": "Für diese Funktion WIRD ein am Headset befestigter, eigener Tracker benötigt.",
|
||||
"learn_page_continuous_desc3": "Die kontinuierliche Kalibrierung versucht, deine Geräte ständig nachzukalibrieren, um jeglichen Drift zu beseitigen. Sobald sie eingerichtet ist, musst du dir meist keine Gedanken mehr darüber machen.",
|
||||
"learn_page_continuous_setup_instructions": "Um die kontinuierliche Kalibrierung einzurichten, wähle zuerst deine Geräte wie auf der Seite „Standard-Kalibrierung“ beschrieben aus. Wähle dein Headset als Referenzgerät und den Kalibrierungs-Tracker als Zielgerät. Klicke dann auf die Schaltfläche „Kontinuierliche Kalibrierung“, um zu starten. Es kann etwas dauern, bis die erste Kalibrierung abgeschlossen ist – bewege dich also ein wenig, damit die App dein Tracking erfassen kann!",
|
||||
"learn_page_continuous_should_use_title": "Solltest du die kontinuierliche Kalibrierung nutzen?",
|
||||
"learn_page_continuous_should_use_standard": "Nutze die Standard-Kalibrierung, wenn du keinen zusätzlichen Tracker am Headset hast, keine sehr langen VR-Sessions machst oder es dir nichts ausmacht, bei Drift ab und zu manuell nachzukalibrieren.",
|
||||
"learn_page_continuous_should_use_continuous": "Nutze die kontinuierliche Kalibrierung, wenn du dich praktisch nie wieder um Drift kümmern willst. Das wird empfohlen, wenn du viel Zeit in VR verbringst oder im Laufe der Zeit starken Drift bemerkst.",
|
||||
"learn_page_continuous_physical_setup_title": "Physisches Setup (Tracker am Headset befestigen)",
|
||||
"learn_page_continuous_physical_setup_desc1": "Für die kontinuierliche Kalibrierung benötigst du einen eigenen Tracker, der an deinem VR-Headset angebracht ist. Je nach Headset und Tracker gibt es dafür verschiedene Halterungen. Im Internet findest du oft passende 3D-Druckmodelle oder du fragst in der Community nach Erfahrungen.",
|
||||
"learn_page_continuous_physical_setup_desc2": "Einmal montiert, sollte der Tracker fest am Headset sitzen. Er darf nicht wackeln, sich verdrehen oder schwingen. Je stabiler die Halterung, desto genauer und gleichmäßiger ist die Kalibrierung.",
|
||||
|
||||
"learn_page_basestation_desc": "Space Calibrator ermöglicht dir die Steuerung von SteamVR-Basisstationen, wenn du einen kompatiblen BLE-Bluetooth-Adapter hast.",
|
||||
"learn_page_basestation_1_title": "Basisstation 1.0-Modelle",
|
||||
"learn_page_basestation_1_desc": "Du kannst diese Modelle nur ein- oder ausschalten. Das drahtlose Einstellen der Kanäle wird nicht unterstützt – dafür musst du die physische Taste auf der Rückseite der Basisstation drücken.",
|
||||
"learn_page_basestation_2_title": "Basisstation 2.0-Modelle",
|
||||
"learn_page_basestation_2_desc1": "Diese von Valve und HTC hergestellten Modelle bieten eine bessere Unterstützung für drahtlose Steuerung als 1.0-Basisstationen. Du kannst sie ein- und ausschalten sowie ihren Kanal festlegen. 2.0-Basisstationen müssen jeweils auf einem eigenen Kanal laufen, sonst funktionieren sie nicht. Space Calibrator hilft dir beim Beheben, falls es zu Konflikten kommt.",
|
||||
"learn_page_basestation_2_desc2": "Um den Kanal einer 2.0-Basisstation zu ändern, gehe auf den Reiter „Basisstationen“, klicke bei der gewünschten Basisstation auf Bearbeiten und wähle den gewünschten Kanal (grün markiert).",
|
||||
"learn_page_basestation_auto_power_title": "Automatische Energieverwaltung",
|
||||
"learn_page_basestation_auto_power_desc": "Unter „Einstellungen“ kannst du die automatische Basisstationen-Verwaltung aktivieren. Dadurch werden deine Basisstationen eingeschaltet, wenn Space Calibrator startet, und ausgeschaltet, wenn du SteamVR beendest (während Space Calibrator läuft). Hinweis: Wenn du Space Calibrator vor SteamVR manuell schließt, werden die Basisstationen nicht automatisch ausgeschaltet.",
|
||||
|
||||
"learn_page_ui_tour_desc": "Diese Benutzeroberfläche ist in mehrere Reiter unterteilt, die jeweils verschiedene Funktionen enthalten.",
|
||||
"learn_page_ui_tour_calibration_heading": "Reiter „Kalibrierung“",
|
||||
"learn_page_ui_tour_cal_desc1": "Der Reiter „Kalibrierung“ enthält alle Einstellungen rund um die Kalibrierung. Hier steuerst du deine Kalibrierungen.",
|
||||
"learn_page_ui_tour_cal_desc2": "Oben siehst du ein Feld, das anzeigt, ob eine Kalibrierung aktiv ist und wenn ja, welcher Typ.",
|
||||
"learn_page_ui_tour_cal_desc3": "Darunter wählst du aus, mit welchen Geräten kalibriert werden soll. Wähle zuerst die Tracking-Systeme aus. Wähle dann im linken Bereich das Gerät, an dem ausgerichtet wird, und im rechten Bereich das Gerät, das kalibriert werden soll.",
|
||||
"learn_page_ui_tour_cal_desc4": "Darunter befinden sich die Schaltflächen zum Starten der Kalibrierung. Wenn du unsicher bist, welche Methode du nutzen sollst, lies dir die Seiten zu standard und kontinuierlicher Kalibrierung durch.",
|
||||
"learn_page_ui_tour_cal_desc5": "Am Ende des Kalibrierungs-Reiters findest du weitere Optionen. Einige dieser Optionen werden erst sichtbar, wenn die erweiterten Einstellungen aktiviert sind.",
|
||||
"learn_page_ui_tour_base_stations_heading": "Reiter „Basisstationen“",
|
||||
"learn_page_ui_tour_bs_desc": "Hier kannst du mit einem unterstützten BLE-Bluetooth-Adapter Basisstationen in deinem Raum steuern. Nach der Ersteinrichtung musst du hier normalerweise selten etwas ändern.",
|
||||
"learn_page_ui_tour_settings_heading": "Reiter „Einstellungen“",
|
||||
"learn_page_ui_tour_settings_desc1": "Hier kannst du globale Einstellungen für das Programm festlegen. Dazu gehören erweiterte Einstellungen, die Basisstationen-Verwaltung und die Sprache der Benutzeroberfläche.",
|
||||
"learn_page_ui_tour_settings_desc2": "Manche Funktionen in dieser App erfordern das Aktivieren der erweiterten Einstellungen. Aktiviere diese nur, wenn du weißt, was du tust.",
|
||||
|
||||
/* Names of the various languages one may select. Shown in settings */
|
||||
"languages_en_GB": "Englisch (UK)",
|
||||
"languages_en_US": "Englisch (US)",
|
||||
"languages_fr": "Französisch",
|
||||
"languages_it": "Italienisch",
|
||||
"languages_de": "Deutsch",
|
||||
"languages_nl": "Niederländisch",
|
||||
"languages_es_ES": "Spanisch (Spanien)",
|
||||
"languages_es_US": "Spanisch (Lateinamerika)",
|
||||
"languages_da": "Dänisch",
|
||||
"languages_sv": "Schwedisch",
|
||||
"languages_fi": "Finnisch",
|
||||
"languages_no": "Norwegisch",
|
||||
"languages_bg": "Bulgarisch",
|
||||
"languages_pl": "Polnisch",
|
||||
"languages_cs": "Tschechisch",
|
||||
"languages_el": "Griechisch",
|
||||
"languages_hu": "Ungarisch",
|
||||
"languages_pt_PT": "Portugiesisch (Portugal)",
|
||||
"languages_pt_BR": "Portugiesisch (Brasilien)",
|
||||
"languages_ro": "Rumänisch",
|
||||
"languages_ru": "Russisch",
|
||||
"languages_tr": "Türkisch",
|
||||
"languages_uk": "Ukrainisch",
|
||||
"languages_zh_HANS": "Chinesisch (Vereinfacht)",
|
||||
"languages_zh_HANT": "Chinesisch (Traditionell)",
|
||||
"languages_ja": "Japanisch",
|
||||
"languages_ko": "Koreanisch",
|
||||
"languages_th": "Thailändisch",
|
||||
"languages_vi": "Vietnamesisch",
|
||||
"languages_system": "Systemsprache"
|
||||
}
|
||||
@@ -0,0 +1,280 @@
|
||||
{
|
||||
"app_title": "{0} {1}", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"app_title_vr": "{0} {1} - close VR overlay to use mouse", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"tracking_system_no_systems": "No tracked devices present. Please turn on a device to continue.", /* Should never be hit but you never know */
|
||||
|
||||
"error_unknown_catastrophic": "Something went catastrophically wrong! Please report this to the developer either on GitHub or Steam Discussions so that this can be addressed.",
|
||||
"ipc_unavailable": "Failed to connect to the Space Calibrator SteamVR driver. Please verify file integrity in Properties -> Installed Files, or re-install the app.",
|
||||
"steamvr_unavailable": "Failed to connect to SteamVR.",
|
||||
"vr_troubleshooting_hmd_not_found": "Please connect your VR headset and launch SteamVR first.",
|
||||
"vr_troubleshooting_connect_steamlink": "Please open SteamLink on your VR headset and connect to SteamVR first.",
|
||||
"vr_troubleshooting_generic": "Please connect your VR headset and launch SteamVR first. ({0} {1})", /* 0 : SteamVR init error (eg 108), 1 : SteamVR init error string (eg Headset not connected) - this string is provided by Steam. */
|
||||
"ipc_unvailable_auto_fix": "Try to fix",
|
||||
"ipc_unvailable_auto_fix_note_reboot": "Please restart your computer for the changes to take affect.",
|
||||
|
||||
"calibration_title": "Calibration",
|
||||
"calibration_count_none": "No Calibration. Please create a new calibration to get started.", // Shown when there are no calibrations active
|
||||
"calibration_new": "New Calibration",
|
||||
"calibration_delete": "Delete Calibration",
|
||||
"calibration_next": "Next Calibration",
|
||||
"calibration_previous": "Previous Calibration",
|
||||
|
||||
"calibration_status_none": "No Calibration active",
|
||||
"calibration_status_none_description": "Please select a pair of devices and calibrate to get started.",
|
||||
"calibration_status_edit": "Editing calibration",
|
||||
"calibration_status_edit_description": "Modifying the current calibration.",
|
||||
"calibration_status_continuous": "Continuous Calibration",
|
||||
"calibration_status_continuous_description": "You have an active calibration. Uses a mounted tracker to re-calibrate every few seconds automatically.",
|
||||
"calibration_status_standard": "Standard Calibration",
|
||||
"calibration_status_standard_description": "You have an active calibration. You may need to re-calibrate if drift occurs.",
|
||||
|
||||
// space here refers to a tracking space / tracking system.
|
||||
"reference_device": "Reference device",
|
||||
"reference_device_description": "This device is what you are calibrating with, usually your VR headset or a controller.",
|
||||
"target_device": "Target device",
|
||||
"target_device_description": "This device will be used to line up your trackers or controllers.",
|
||||
"select_reference_device": "Select reference device",
|
||||
"select_target_device": "Select target device",
|
||||
|
||||
"identify_selected_devices": "Identify selected devices (blinks LED or vibrates)",
|
||||
"identify_auto_detect_devices": "Auto-detect devices",
|
||||
"calibration_error_reference_hmd_missing": "Unable to find target device from tracking system \"{0}\". You may need to re-calibrate.", /* 0 : tracking system name, eg SteamVR Tracking*/
|
||||
"calibration_warning_stage_tracking_disabled": "Stage tracking is disabled! For a better experience, on your Quest open the Virtual Desktop menu, go to the Streaming tab and enable \"Center to play area (Stage Tracking)\".",
|
||||
"calibration_warning_stage_tracking_disabled_ignore_button": "Do not show this again",
|
||||
|
||||
"calibration_action_start": "Standard Calibration",
|
||||
"calibration_action_clear": "Clear Calibration",
|
||||
"calibration_action_continuous": "Continuous Calibration",
|
||||
"calibration_action_edit": "Edit Calibration",
|
||||
"save_calibration_profile": "Save Profile",
|
||||
|
||||
"calibration_progress": "Calibration Progress",
|
||||
"calibration_info_move_around_insufficient_samples": "Hold your selected devices together, then walk around your playspace while gently rotating them in figure-eight patterns.",
|
||||
|
||||
"calibration_speed": "Calibration Speed",
|
||||
"calibration_speed_description": "How long it takes to calibrate. Slower calibrations tend to be more accurate.",
|
||||
"calibration_speed_fast": "Fast",
|
||||
"calibration_speed_slow": "Slow",
|
||||
"calibration_speed_very_slow": "Very Slow",
|
||||
|
||||
/* Editing calibrations */
|
||||
"edit_calibration_rotation": "Rotation",
|
||||
"edit_calibration_position": "Position (m)",
|
||||
"edit_calibration_yaw": "Yaw",
|
||||
"edit_calibration_pitch": "Pitch",
|
||||
"edit_calibration_roll": "Roll",
|
||||
"edit_calibration_x": "X",
|
||||
"edit_calibration_y": "Y",
|
||||
"edit_calibration_z": "Z",
|
||||
"edit_calibration_scale": "Scale (m)",
|
||||
|
||||
"continuous_hide_tracker": "Hide target device from apps",
|
||||
"continuous_relative_calibration": "Enable relative calibration",
|
||||
"continuous_relative_calibration_description": "Makes the calibration relative to the reference device (typically your headset) so that it updates every frame without needing to re-calibrate. This REQUIRES Continuous Calibration.",
|
||||
|
||||
/* HMD names for Virtual Desktop */
|
||||
/* Virtual desktop lies that it's a Quest 2/3 on most headsets, so we have to substitute the real HMD name ourselves. you generally should
|
||||
NOT have to change these! but some headsets have different names in certain regions (eg PFD MR is YVR MR in China) */
|
||||
"virtual_desktop_hmd_none": "None", /* should never appear but you never know*/
|
||||
"virtual_desktop_hmd_gearvr": "Samsung Gear VR",
|
||||
"virtual_desktop_hmd_oculus_go": "Oculus Go",
|
||||
"virtual_desktop_hmd_oculus_quest_1": "Oculus Quest",
|
||||
"virtual_desktop_hmd_oculus_quest_2": "Oculus Quest 2",
|
||||
"virtual_desktop_hmd_meta_quest_pro": "Meta Quest Pro",
|
||||
"virtual_desktop_hmd_pico_4": "Pico 4",
|
||||
"virtual_desktop_hmd_meta_quest_3": "Meta Quest 3",
|
||||
"virtual_desktop_hmd_meta_quest_3s": "Meta Quest 3S",
|
||||
"virtual_desktop_hmd_pico_4_ultra": "Pico 4 Ultra",
|
||||
"virtual_desktop_hmd_samsung_galaxy_xr": "Samsung Galaxy XR",
|
||||
"virtual_desktop_hmd_play_for_dream_mr": "Play For Dream MR",
|
||||
|
||||
/* vertical tabs on the left */
|
||||
"tab_page_calibration": "Calibration",
|
||||
"tab_page_graphs": "Graphs",
|
||||
"tab_page_base_station_management": "Base Stations",
|
||||
"tab_page_settings": "Settings",
|
||||
"tab_page_debug": "Debug",
|
||||
"tab_page_learn": "Learn",
|
||||
"tab_page_about": "About",
|
||||
|
||||
/* graphs */
|
||||
"graphs_title": "Graphs",
|
||||
|
||||
/* base stations */
|
||||
"base_stations_title": "Base Station Management",
|
||||
"base_stations_no_bluetooth": "Failed to find a valid Bluetooth adapter. Please connect a BLE capable Bluetooth device to be able to use Base Station Management.",
|
||||
"base_stations_none_found": "No Base Stations detected. If you have any, make sure they are plugged in.",
|
||||
"base_stations_header_info": "{0}", // 0: station ID (LHB XXXXXXXX) / nickname
|
||||
"base_stations_warning_collision": "Channel collision detected! This will cause tracking issues. Your Base Stations should each use a unique channel.",
|
||||
"base_stations_state_sleep": "Asleep",
|
||||
"base_stations_state_standby": "Standby",
|
||||
"base_stations_state_active": "Active",
|
||||
"base_stations_state_unknown": "Unknown",
|
||||
"base_stations_state_faulty": "Faulty",
|
||||
"base_stations_channel_select_label": "Select a Base Station channel:",
|
||||
"base_stations_active_channel": "Channel {0}", // 0: channel number (1-15) ; eg Channel 12
|
||||
"base_stations_nickname": "Nickname",
|
||||
|
||||
/* actions */
|
||||
"base_stations_action_wake_all": "Wake All",
|
||||
"base_stations_action_sleep_all": "Sleep All",
|
||||
"base_stations_action_fix_collisions": "Fix Channel Collisions",
|
||||
"base_stations_btn_wake": "Wake",
|
||||
"base_stations_btn_standby": "Standby",
|
||||
"base_stations_btn_sleep": "Sleep",
|
||||
"base_stations_btn_edit": "Edit",
|
||||
"base_stations_btn_save": "Save",
|
||||
|
||||
"base_station_power_management": "Base Station Power Management",
|
||||
"base_stations_power_mgmt_enable": "Enable power management *",
|
||||
"base_stations_power_mgmt_enable_description_standby": "Powered Base Stations go into standby mode when SteamVR is not in use, and wake up again when SteamVR starts.",
|
||||
"base_stations_power_mgmt_enable_description_sleep": "Powered Base Stations go into sleep mode when SteamVR is not in use, and wake up again when SteamVR starts.",
|
||||
"base_stations_power_mgmt_on_startup": "Turn on Base Stations on SteamVR startup",
|
||||
"base_stations_power_mgmt_on_startup_description": "Unpowered Base Stations wake up when SteamVR starts.",
|
||||
"base_stations_power_mgmt_on_shutdown": "Turn off Base Stations on SteamVR shutdown",
|
||||
"base_stations_power_mgmt_on_shutdown_description": "Powered Base Stations are powered down when SteamVR is not in use.",
|
||||
"base_stations_power_mgmt_standby": "Standby",
|
||||
"base_stations_power_mgmt_standby_description": "Base Stations will power off only their lasers for a faster wake up when SteamVR starts. This is unavailable on Base Station 1.0 models and some Base Station 2.0 models, and sleep will be used in these cases.",
|
||||
"base_stations_power_mgmt_sleep": "Sleep",
|
||||
"base_stations_power_mgmt_sleep_description": "Base Stations will power off their lasers and motors.",
|
||||
"base_stations_power_mgmt_warning": "* NOT RECOMMENDED for shared tracking spaces with multiple SteamVR users.",
|
||||
|
||||
/* settings */
|
||||
"settings_title": "Settings",
|
||||
"settings_advanced": "Advanced settings",
|
||||
"settings_advanced_description": "Shows extra settings and fine-tuning controls for power users.",
|
||||
"settings_calibrate_motion_vectors": "Calibrate motion vectors",
|
||||
"settings_calibrate_motion_vectors_description": "Improves movement prediction for more responsive tracking. May affect physics-heavy games.",
|
||||
"settings_autofix_playspace_jumps": "Auto-correct playspace jumps",
|
||||
"settings_autofix_playspace_jumps_description": "Attempts to automatically detect and correct sudden jumps in playspace tracking.",
|
||||
"settings_enforce_minimum_rotation_variance": "Enforce minimum rotation variance",
|
||||
"settings_enforce_minimum_rotation_variance_description": "Automatically rejects samples that are rotationally similar to improve calibration quality.",
|
||||
"settings_locale": "Language",
|
||||
"settings_reset": "Reset all settings",
|
||||
"settings_reset_description": "Resets all settings to default. This is permanent and cannot be undone.",
|
||||
"settings_reset_confirm": "This change is permanent and cannot be undone. Are you sure you want to continue?",
|
||||
"settings_reset_yes": "Yes",
|
||||
"settings_reset_no": "No",
|
||||
|
||||
/* about */
|
||||
"about_title": "About",
|
||||
"about_description": "Space Calibrator is a free and open source tool to allow you to use multiple vendors' devices together with SteamVR.",
|
||||
"about_view_source_info": "You may view the source code on the GitHub repository.",
|
||||
"about_contributors_title": "Contributors",
|
||||
"about_contributors_description": "Space Calibrator is made possible with the help of the following people:",
|
||||
"about_translators_title": "Translators",
|
||||
"about_translators_description": "Space Calibrator has been translated by the following people:",
|
||||
"about_licenses_title": "Licenses",
|
||||
"about_licenses_description": "This program is licensed under the MIT license. Other dependencies are licensed under other licenses, please view the licenses below for more information.",
|
||||
"about_link_github": "GitHub",
|
||||
"about_link_discord": "Discord Server",
|
||||
"about_link_logs_dir": "Logs folder",
|
||||
|
||||
/* self-troubleshooting */
|
||||
/* found another driver loaded in SteamVR -> legacy ipc connection successful */
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_title": "Another instance of Space Calibrator is already present",
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_description": "A conflicting version of Space Calibrator is currently running. You will have to uninstall it to be able to use this application. Would you like to automatically remove it?",
|
||||
/* found legacy overlay key registered (non steam) */
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_title": "Another instance of Space Calibrator is already present",
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_description": "Another version of Space Calibrator is currently installed. Would you like to remove it?",
|
||||
"troubleshoot_action_yes": "Yes",
|
||||
"troubleshoot_action_no": "No",
|
||||
"troubleshoot_action_quit": "Quit",
|
||||
|
||||
/* tutorial */
|
||||
"learn_title": "Learn",
|
||||
"learn_card_standard_calibration": "Standard Calibration",
|
||||
"learn_card_standard_calibration_description": "Learn how to calibrate a pair of devices.",
|
||||
"learn_card_continuous_calibration": "Continuous Calibration",
|
||||
"learn_card_continuous_calibration_description": "Calibrate frequently to counteract drift mid-session.",
|
||||
"learn_card_base_station_management": "Base Station Management",
|
||||
"learn_card_base_station_management_description": "Wirelessly control your SteamVR Base Stations.",
|
||||
"learn_card_ui_tour": "UI Tour",
|
||||
"learn_card_ui_tour_description": "An overview of the Space Calibrator interface.",
|
||||
"learn_action_back": "Back",
|
||||
|
||||
/* these are kinda like a messed up wiki because its inlined into the app like this, oh well lol */
|
||||
"learn_page_standard_desc": "Standard Calibration aligns two tracking systems together so that your VR devices work together in the same physical playspace.",
|
||||
"learn_page_standard_select_devices_title": "Select your devices",
|
||||
"learn_page_standard_select_devices_desc": "Before starting, the app needs to know which two devices you want to align.",
|
||||
"learn_page_standard_ref_device": "Reference Device: This device is what you're calibrating to, usually a controller.",
|
||||
"learn_page_standard_target_device": "Target Device: The unaligned device you're calibrating with, typically a tracker or similar.",
|
||||
"learn_page_standard_perform_title": "Perform the Calibration",
|
||||
"learn_page_standard_perform_step1": "Hold both devices together firmly in one hand. Hold them as tight as you can so that they do not move during the calibration process.",
|
||||
"learn_page_standard_perform_step2": "Click on the Standard Calibration button to begin calibrating.",
|
||||
"learn_page_standard_perform_step3": "Move around your room while moving your devices in a figure eight, as illustrated below.",
|
||||
"learn_page_standard_speeds_title": "Calibration Speeds",
|
||||
"learn_page_standard_speeds_desc": "You can optionally alter the calibration speed to affect how much movement is required. More movement tends to improve calibration quality.",
|
||||
"learn_page_standard_speed_fast": "Fast: Takes less time to calibrate, but may result in poorer quality calibrations.",
|
||||
"learn_page_standard_speed_slow": "Slow / Very Slow: Takes longer to calibrate, and tends to yield more accurate calibrations.",
|
||||
"learn_page_standard_completion_note": "Once the progress bar fills up, your devices should instantly line up in VR. If this doesn't happen, try calibrating again.",
|
||||
"learn_page_standard_drift_title": "A Note on Drift",
|
||||
"learn_page_standard_drift_desc": "Over time, your devices may drift, breaking the calibration. If this happens, you will have to re-calibrate to correct it. If you have to do this frequently, you should consider using Continuous Calibration.",
|
||||
|
||||
"learn_page_continuous_desc1": "If you notice your devices slowly shifting, rotating, or drifting out of place while playing, Continuous Calibration is a solution to these issues.",
|
||||
"learn_page_continuous_desc2": "Instead of forcing you to stop and manually calibrate every so often, Continuous Calibration automatically keeps your tracking synced in the background while you play.",
|
||||
"learn_page_continuous_note_title": "Note",
|
||||
"learn_page_continuous_note_desc": "A dedicated tracker mounted on your headset IS required to use this feature.",
|
||||
"learn_page_continuous_desc3": "Continuous Calibration attempts to re-calibrate your devices frequently to eliminate any and all drift. It tends to make calibration something you never think about once it's set up.",
|
||||
"learn_page_continuous_setup_instructions": "To setup Continuous Calibration, first select your devices as explained in the Standard Calibration page. You will want your headset selected as the reference device, and the calibration tracker as the target device. Then click the Continuous Calibration button to start calibrating. It may take a bit of time until the initial calibration is completed, so move around to let the app learn about your tracking!",
|
||||
"learn_page_continuous_should_use_title": "Should you use Continuous Calibration?",
|
||||
"learn_page_continuous_should_use_standard": "Use Standard Calibration if you do not have an extra tracker to mount on your headset, do not spend long sessions in VR, or don't mind re-calibrating every so often whenever drift happens.",
|
||||
"learn_page_continuous_should_use_continuous": "Use Continuous Calibration if you want to practically never think about drift again. This is recommended if you spend a lot of time in VR or notice significant amounts of drift over time.",
|
||||
"learn_page_continuous_physical_setup_title": "Physical setup (mounting the tracker onto your headset)",
|
||||
"learn_page_continuous_physical_setup_desc1": "To use Continuous Calibration you will need a dedicated tracker attached onto your VR headset. There are various mounts depending on which specific VR headset and tracker you are using. You can typically find 3D models on the internet you can print to get started with, or you can ask around in the community to see what other people did.",
|
||||
"learn_page_continuous_physical_setup_desc2": "Once mounted, the tracker should be securely attached to the headset. It should not wobble, swivel or shake. The better the mounting the more consistent calibrations should be.",
|
||||
|
||||
"learn_page_basestation_desc": "Space Calibrator allows you to control SteamVR Base Stations if you have a compatible BLE Bluetooth adapter available.",
|
||||
"learn_page_basestation_1_title": "Base Station 1.0 Models",
|
||||
"learn_page_basestation_1_desc": "You can only turn these on or off. Setting channels wirelessly is unsupported, and you will have to press the physical button on the back of the Base Station to alternate between channels.",
|
||||
"learn_page_basestation_2_title": "Base Station 2.0 Models",
|
||||
"learn_page_basestation_2_desc1": "Manufactured by both Valve and HTC, these have better support for wireless management than 1.0 Base Stations. With these you're able to turn them on and off, and also set their channel. 2.0 Base Stations must each be on a unique channel, otherwise they will not work. Space Calibrator will offer to help you fix this if it happens.",
|
||||
"learn_page_basestation_2_desc2": "To change the channel of a 2.0 Base Station, navigate to the Base Station Management tab, select the edit button for the Base Station you wish to control, and click on the desired channel (marked in green).",
|
||||
"learn_page_basestation_auto_power_title": "Automatic Power Management",
|
||||
"learn_page_basestation_auto_power_desc": "You can go to the Settings tab to enable automatic Base Station Management, which will turn on your Base Stations when Space Calibrator is started, and turn them off when you close SteamVR (with Space Calibrator running). Note that manually closing Space Calibrator before closing SteamVR will NOT turn off any Base Stations automatically.",
|
||||
|
||||
"learn_page_ui_tour_desc": "This interface is divided into several tabs each containing various things.",
|
||||
"learn_page_ui_tour_calibration_heading": "Calibration Tab",
|
||||
"learn_page_ui_tour_cal_desc1": "The Calibration tab contains controls relating to calibrations. You control your calibrations here.",
|
||||
"learn_page_ui_tour_cal_desc2": "At the top, you will see a card showing you whether you have a calibration active, and if so, which type.",
|
||||
"learn_page_ui_tour_cal_desc3": "Below that, you can select what devices to calibrate with. First you should select the tracking systems you wish to calibrate. Then, on the left pane you should select what you're going to calibrate with. And on the right pane you should select what you're going to calibrate.",
|
||||
"learn_page_ui_tour_cal_desc4": "Below that are the buttons to perform a calibration. If you are unsure which calibration you should do, please read the pages talking about Standard and Continuous Calibration to learn more.",
|
||||
"learn_page_ui_tour_cal_desc5": "At the bottom of the Calibration tab you will find several options to control the calibration. A number of these settings require advanced settings to be visible.",
|
||||
"learn_page_ui_tour_base_stations_heading": "Base Station Management Tab",
|
||||
"learn_page_ui_tour_bs_desc": "Here you can control any Base Stations in your room with a supported BLE Bluetooth adapter. You should typically not have to touch this beyond initial setup.",
|
||||
"learn_page_ui_tour_settings_heading": "Settings Tab",
|
||||
"learn_page_ui_tour_settings_desc1": "Here you may set some global settings for the program. These include advanced settings, Base Station Management and UI language.",
|
||||
"learn_page_ui_tour_settings_desc2": "Some features in this app require Advanced Settings to be enabled. You should only enable this if you know what you're doing.",
|
||||
|
||||
/* Names of the various languages one may select. Shown in settings */
|
||||
"languages_en_GB": "English (UK)",
|
||||
"languages_en_US": "English (US)",
|
||||
"languages_fr": "French",
|
||||
"languages_it": "Italian",
|
||||
"languages_de": "German",
|
||||
"languages_nl": "Dutch",
|
||||
"languages_es_ES": "Spanish (Spain)",
|
||||
"languages_es_US": "Spanish (Latin America)",
|
||||
"languages_da": "Danish",
|
||||
"languages_sv": "Swedish",
|
||||
"languages_fi": "Finnish",
|
||||
"languages_no": "Norwegian",
|
||||
"languages_bg": "Bulgarian",
|
||||
"languages_pl": "Polish",
|
||||
"languages_cs": "Czech",
|
||||
"languages_el": "Greek",
|
||||
"languages_hu": "Hungarian",
|
||||
"languages_pt_PT": "Portuguese (Portugal)",
|
||||
"languages_pt_BR": "Portuguese (Brazil)",
|
||||
"languages_ro": "Romanian",
|
||||
"languages_ru": "Russian",
|
||||
"languages_tr": "Turkish",
|
||||
"languages_uk": "Ukrainian",
|
||||
"languages_zh_HANS": "Chinese (Simplified)",
|
||||
"languages_zh_HANT": "Chinese (Traditional)",
|
||||
"languages_ja": "Japanese",
|
||||
"languages_ko": "Korean",
|
||||
"languages_th": "Thai",
|
||||
"languages_vi": "Vietnamese",
|
||||
"languages_system": "System Language"
|
||||
}
|
||||
@@ -0,0 +1,278 @@
|
||||
{
|
||||
"app_title": "{0} {1}", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"app_title_vr": "{0} {1} - close VR overlay to use mouse", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"tracking_system_no_systems": "No tracked devices present. Please turn on a device to continue.", /* Should never be hit but you never know */
|
||||
|
||||
"error_unknown_catastrophic": "Something went catastrophically wrong! Please report this to the developer either on GitHub or Steam Discussions so that this can be addressed.",
|
||||
"ipc_unavailable": "Failed to connect to the Space Calibrator SteamVR driver. Please verify file integrity in Properties -> Installed Files, or reinstall the app.",
|
||||
"steamvr_unavailable": "Failed to connect to SteamVR.",
|
||||
"vr_troubleshooting_hmd_not_found": "Please connect your VR headset and launch SteamVR first.",
|
||||
"vr_troubleshooting_connect_steamlink": "Please open SteamLink on your VR headset and connect to SteamVR first.",
|
||||
"vr_troubleshooting_generic": "Please connect your VR headset and launch SteamVR first. ({0} {1})", /* 0 : SteamVR init error (eg 108), 1 : SteamVR init error string (eg Headset not connected) - this string is provided by Steam. */
|
||||
|
||||
"calibration_title": "Calibration",
|
||||
"calibration_count_none": "No Calibration. Please create a new calibration to get started.", // Shown when there are no calibrations active
|
||||
"calibration_new": "New Calibration",
|
||||
"calibration_delete": "Delete Calibration",
|
||||
"calibration_next": "Next Calibration",
|
||||
"calibration_previous": "Previous Calibration",
|
||||
|
||||
"calibration_status_none": "No Calibration active",
|
||||
"calibration_status_none_description": "Please select a pair of devices and calibrate to get started.",
|
||||
"calibration_status_edit": "Editing calibration",
|
||||
"calibration_status_edit_description": "Modifying the current calibration.",
|
||||
"calibration_status_continuous": "Continuous Calibration",
|
||||
"calibration_status_continuous_description": "You have an active calibration. Uses a mounted tracker to recalibrate every few seconds automatically.",
|
||||
"calibration_status_standard": "Standard Calibration",
|
||||
"calibration_status_standard_description": "You have an active calibration. You may need to recalibrate if drift occurs.",
|
||||
|
||||
// space here refers to a tracking space / tracking system.
|
||||
"reference_device": "Reference device",
|
||||
"reference_device_description": "This device is what you are calibrating with, usually your VR headset or a controller.",
|
||||
"target_device": "Target device",
|
||||
"target_device_description": "This device will be used to line up your trackers or controllers.",
|
||||
"select_reference_device": "Select reference device",
|
||||
"select_target_device": "Select target device",
|
||||
|
||||
"identify_selected_devices": "Identify selected devices (blinks LED or vibrates)",
|
||||
"identify_auto_detect_devices": "Auto-detect devices",
|
||||
"calibration_error_reference_hmd_missing": "Unable to find target device from tracking system \"{0}\". You may need to recalibrate.", /* 0 : tracking system name, eg SteamVR Tracking*/
|
||||
"calibration_warning_stage_tracking_disabled": "Stage tracking is disabled! For a better experience, on your Quest open the Virtual Desktop menu, go to the Streaming tab and enable \"Center to play area (Stage Tracking)\".",
|
||||
"calibration_warning_stage_tracking_disabled_ignore_button": "Do not show this again",
|
||||
|
||||
"calibration_action_start": "Standard Calibration",
|
||||
"calibration_action_clear": "Clear Calibration",
|
||||
"calibration_action_continuous": "Continuous Calibration",
|
||||
"calibration_action_edit": "Edit Calibration",
|
||||
"save_calibration_profile": "Save Profile",
|
||||
|
||||
"calibration_progress": "Calibration Progress",
|
||||
"calibration_info_move_around_insufficient_samples": "Hold your selected devices together, then walk around your playspace while gently rotating them in figure-eight patterns.",
|
||||
|
||||
"calibration_speed": "Calibration Speed",
|
||||
"calibration_speed_description": "How long it takes to calibrate. Slower calibrations tend to be more accurate.",
|
||||
"calibration_speed_fast": "Fast",
|
||||
"calibration_speed_slow": "Slow",
|
||||
"calibration_speed_very_slow": "Very Slow",
|
||||
|
||||
/* Editing calibrations */
|
||||
"edit_calibration_rotation": "Rotation",
|
||||
"edit_calibration_position": "Position (m)",
|
||||
"edit_calibration_yaw": "Yaw",
|
||||
"edit_calibration_pitch": "Pitch",
|
||||
"edit_calibration_roll": "Roll",
|
||||
"edit_calibration_x": "X",
|
||||
"edit_calibration_y": "Y",
|
||||
"edit_calibration_z": "Z",
|
||||
"edit_calibration_scale": "Scale (m)",
|
||||
|
||||
"continuous_hide_tracker": "Hide target device from apps",
|
||||
"continuous_relative_calibration": "Enable relative calibration",
|
||||
"continuous_relative_calibration_description": "Makes the calibration relative to the reference device (typically your headset) so that it updates every frame without needing to recalibrate. This REQUIRES Continuous Calibration.",
|
||||
|
||||
/* HMD names for Virtual Desktop */
|
||||
/* Virtual desktop lies that it's a Quest 2/3 on most headsets, so we have to substitute the real HMD name ourselves. you generally should
|
||||
NOT have to change these! but some headsets have different names in certain regions (eg PFD MR is YVR MR in China) */
|
||||
"virtual_desktop_hmd_none": "None", /* should never appear but you never know*/
|
||||
"virtual_desktop_hmd_gearvr": "Samsung Gear VR",
|
||||
"virtual_desktop_hmd_oculus_go": "Oculus Go",
|
||||
"virtual_desktop_hmd_oculus_quest_1": "Oculus Quest",
|
||||
"virtual_desktop_hmd_oculus_quest_2": "Oculus Quest 2",
|
||||
"virtual_desktop_hmd_meta_quest_pro": "Meta Quest Pro",
|
||||
"virtual_desktop_hmd_pico_4": "Pico 4",
|
||||
"virtual_desktop_hmd_meta_quest_3": "Meta Quest 3",
|
||||
"virtual_desktop_hmd_meta_quest_3s": "Meta Quest 3S",
|
||||
"virtual_desktop_hmd_pico_4_ultra": "Pico 4 Ultra",
|
||||
"virtual_desktop_hmd_samsung_galaxy_xr": "Samsung Galaxy XR",
|
||||
"virtual_desktop_hmd_play_for_dream_mr": "Play For Dream MR",
|
||||
|
||||
/* vertical tabs on the left */
|
||||
"tab_page_calibration": "Calibration",
|
||||
"tab_page_graphs": "Graphs",
|
||||
"tab_page_base_station_management": "Base Stations",
|
||||
"tab_page_settings": "Settings",
|
||||
"tab_page_debug": "Debug",
|
||||
"tab_page_learn": "Learn",
|
||||
"tab_page_about": "About",
|
||||
|
||||
/* graphs */
|
||||
"graphs_title": "Graphs",
|
||||
|
||||
/* base stations */
|
||||
"base_stations_title": "Base Station Management",
|
||||
"base_stations_no_bluetooth": "Failed to find a valid Bluetooth adapter. Please connect a BLE capable Bluetooth device to be able to use Base Station Management.",
|
||||
"base_stations_none_found": "No Base Stations detected. If you have any, make sure they are plugged in.",
|
||||
"base_stations_header_info": "{0}", // 0: station ID (LHB XXXXXXXX) / nickname
|
||||
"base_stations_warning_collision": "Channel collision detected! This will cause tracking issues. Your Base Stations should each use a unique channel.",
|
||||
"base_stations_state_sleep": "Asleep",
|
||||
"base_stations_state_standby": "Standby",
|
||||
"base_stations_state_active": "Active",
|
||||
"base_stations_state_unknown": "Unknown",
|
||||
"base_stations_state_faulty": "Faulty",
|
||||
"base_stations_channel_select_label": "Select a Base Station channel:",
|
||||
"base_stations_active_channel": "Channel {0}", // 0: channel number (1-15) ; eg Channel 12
|
||||
"base_stations_nickname": "Nickname",
|
||||
|
||||
/* actions */
|
||||
"base_stations_action_wake_all": "Wake All",
|
||||
"base_stations_action_sleep_all": "Sleep All",
|
||||
"base_stations_action_fix_collisions": "Fix Channel Collisions",
|
||||
"base_stations_btn_wake": "Wake",
|
||||
"base_stations_btn_standby": "Standby",
|
||||
"base_stations_btn_sleep": "Sleep",
|
||||
"base_stations_btn_edit": "Edit",
|
||||
"base_stations_btn_save": "Save",
|
||||
|
||||
"base_station_power_management": "Base Station Power Management",
|
||||
"base_stations_power_mgmt_enable": "Enable power management *",
|
||||
"base_stations_power_mgmt_enable_description_standby": "Powered Base Stations go into standby mode when SteamVR is not in use, and wake up again when SteamVR starts.",
|
||||
"base_stations_power_mgmt_enable_description_sleep": "Powered Base Stations go into sleep mode when SteamVR is not in use, and wake up again when SteamVR starts.",
|
||||
"base_stations_power_mgmt_on_startup": "Turn on Base Stations on SteamVR startup",
|
||||
"base_stations_power_mgmt_on_startup_description": "Unpowered Base Stations wake up when SteamVR starts.",
|
||||
"base_stations_power_mgmt_on_shutdown": "Turn off Base Stations on SteamVR shutdown",
|
||||
"base_stations_power_mgmt_on_shutdown_description": "Powered Base Stations are powered down when SteamVR is not in use.",
|
||||
"base_stations_power_mgmt_standby": "Standby",
|
||||
"base_stations_power_mgmt_standby_description": "Base Stations will power off only their lasers for a faster wake up when SteamVR starts. This is unavailable on Base Station 1.0 models and some Base Station 2.0 models, and sleep will be used in these cases.",
|
||||
"base_stations_power_mgmt_sleep": "Sleep",
|
||||
"base_stations_power_mgmt_sleep_description": "Base Stations will power off their lasers and motors.",
|
||||
"base_stations_power_mgmt_warning": "* NOT RECOMMENDED for shared tracking spaces with multiple SteamVR users.",
|
||||
|
||||
/* settings */
|
||||
"settings_title": "Settings",
|
||||
"settings_advanced": "Advanced settings",
|
||||
"settings_advanced_description": "Shows extra settings and fine-tuning controls for power users.",
|
||||
"settings_calibrate_motion_vectors": "Calibrate motion vectors",
|
||||
"settings_calibrate_motion_vectors_description": "Improves movement prediction for more responsive tracking. May affect physics-heavy games.",
|
||||
"settings_autofix_playspace_jumps": "Auto-correct playspace jumps",
|
||||
"settings_autofix_playspace_jumps_description": "Attempts to automatically detect and correct sudden jumps in playspace tracking.",
|
||||
"settings_enforce_minimum_rotation_variance": "Enforce minimum rotation variance",
|
||||
"settings_enforce_minimum_rotation_variance_description": "Automatically rejects samples that are rotationally similar to improve calibration quality.",
|
||||
"settings_locale": "Language",
|
||||
"settings_reset": "Reset all settings",
|
||||
"settings_reset_description": "Resets all settings to default. This is permanent and cannot be undone.",
|
||||
"settings_reset_confirm": "This change is permanent and cannot be undone. Are you sure you want to continue?",
|
||||
"settings_reset_yes": "Yes",
|
||||
"settings_reset_no": "No",
|
||||
|
||||
/* about */
|
||||
"about_title": "About",
|
||||
"about_description": "Space Calibrator is a free and open-source tool to allow you to use multiple vendors' devices together with SteamVR.",
|
||||
"about_view_source_info": "You may view the source code on the GitHub repository.",
|
||||
"about_contributors_title": "Contributors",
|
||||
"about_contributors_description": "Space Calibrator is made possible with the help of the following people:",
|
||||
"about_translators_title": "Translators",
|
||||
"about_translators_description": "Space Calibrator has been translated by the following people:",
|
||||
"about_licenses_title": "Licenses",
|
||||
"about_licenses_description": "This program is licensed under the MIT license. Other dependencies are licensed under other licenses, please view the licenses below for more information.",
|
||||
"about_link_github": "GitHub",
|
||||
"about_link_discord": "Discord Server",
|
||||
"about_link_logs_dir": "Logs folder",
|
||||
|
||||
/* self-troubleshooting */
|
||||
/* found another driver loaded in SteamVR -> legacy ipc connection successful */
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_title": "Another instance of Space Calibrator is already present",
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_description": "A conflicting version of Space Calibrator is currently running. You will have to uninstall it to be able to use this application. Would you like to automatically remove it?",
|
||||
/* found legacy overlay key registered (non steam) */
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_title": "Another instance of Space Calibrator is already present",
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_description": "Another version of Space Calibrator is currently installed. Would you like to remove it?",
|
||||
"troubleshoot_action_yes": "Yes",
|
||||
"troubleshoot_action_no": "No",
|
||||
"troubleshoot_action_quit": "Quit",
|
||||
|
||||
/* tutorial */
|
||||
"learn_title": "Learn",
|
||||
"learn_card_standard_calibration": "Standard Calibration",
|
||||
"learn_card_standard_calibration_description": "Learn how to calibrate a pair of devices.",
|
||||
"learn_card_continuous_calibration": "Continuous Calibration",
|
||||
"learn_card_continuous_calibration_description": "Calibrate frequently to counteract drift mid-session.",
|
||||
"learn_card_base_station_management": "Base Station Management",
|
||||
"learn_card_base_station_management_description": "Wirelessly control your SteamVR Base Stations.",
|
||||
"learn_card_ui_tour": "UI Tour",
|
||||
"learn_card_ui_tour_description": "An overview of the Space Calibrator interface.",
|
||||
"learn_action_back": "Back",
|
||||
|
||||
/* these are kinda like a messed up wiki because its inlined into the app like this, oh well lol */
|
||||
"learn_page_standard_desc": "Standard Calibration aligns two tracking systems together so that your VR devices work together in the same physical playspace.",
|
||||
"learn_page_standard_select_devices_title": "Select your devices",
|
||||
"learn_page_standard_select_devices_desc": "Before starting, the app needs to know which two devices you want to align.",
|
||||
"learn_page_standard_ref_device": "Reference Device: This device is what you're calibrating to, usually a controller.",
|
||||
"learn_page_standard_target_device": "Target Device: The unaligned device you're calibrating with, typically a tracker or similar.",
|
||||
"learn_page_standard_perform_title": "Perform the Calibration",
|
||||
"learn_page_standard_perform_step1": "Hold both devices together firmly in one hand. Hold them as tight as you can so that they do not move during the calibration process.",
|
||||
"learn_page_standard_perform_step2": "Click on the Standard Calibration button to begin calibrating.",
|
||||
"learn_page_standard_perform_step3": "Move around your room while moving your devices in a figure eight, as illustrated below.",
|
||||
"learn_page_standard_speeds_title": "Calibration Speeds",
|
||||
"learn_page_standard_speeds_desc": "You can optionally alter the calibration speed to affect how much movement is required. More movement tends to improve calibration quality.",
|
||||
"learn_page_standard_speed_fast": "Fast: Takes less time to calibrate, but may result in poorer quality calibrations.",
|
||||
"learn_page_standard_speed_slow": "Slow / Very Slow: Takes longer to calibrate, and tends to yield more accurate calibrations.",
|
||||
"learn_page_standard_completion_note": "Once the progress bar fills up, your devices should instantly line up in VR. If this doesn't happen, try calibrating again.",
|
||||
"learn_page_standard_drift_title": "A Note on Drift",
|
||||
"learn_page_standard_drift_desc": "Over time, your devices may drift, breaking the calibration. If this happens, you will have to re-calibrate to correct it. If you have to do this frequently, you should consider using Continuous Calibration.",
|
||||
|
||||
"learn_page_continuous_desc1": "If you notice your devices slowly shifting, rotating, or drifting out of place while playing, Continuous Calibration is a solution to these issues.",
|
||||
"learn_page_continuous_desc2": "Instead of forcing you to stop and manually calibrate every so often, Continuous Calibration automatically keeps your tracking synced in the background while you play.",
|
||||
"learn_page_continuous_note_title": "Note",
|
||||
"learn_page_continuous_note_desc": "A dedicated tracker mounted on your headset IS required to use this feature.",
|
||||
"learn_page_continuous_desc3": "Continuous Calibration attempts to re-calibrate your devices frequently to eliminate any and all drift. It tends to make calibration something you never think about once it's set up.",
|
||||
"learn_page_continuous_setup_instructions": "To set up Continuous Calibration, first select your devices as explained in the Standard Calibration page. You will want your headset selected as the reference device, and the calibration tracker as the target device. Then click the Continuous Calibration button to start calibrating. It may take a bit of time until the initial calibration is completed, so move around to let the app learn about your tracking!",
|
||||
"learn_page_continuous_should_use_title": "Should you use Continuous Calibration?",
|
||||
"learn_page_continuous_should_use_standard": "Use Standard Calibration if you do not have an extra tracker to mount on your headset, do not spend long sessions in VR, or don't mind re-calibrating every so often whenever drift happens.",
|
||||
"learn_page_continuous_should_use_continuous": "Use Continuous Calibration if you want to practically never think about drift again. This is recommended if you spend a lot of time in VR or notice significant amounts of drift over time.",
|
||||
"learn_page_continuous_physical_setup_title": "Physical setup (mounting the tracker onto your headset)",
|
||||
"learn_page_continuous_physical_setup_desc1": "To use Continuous Calibration you will need a dedicated tracker attached onto your VR headset. There are various mounts depending on which specific VR headset and tracker you are using. You can typically find 3D models on the internet you can print to get started with, or you can ask around in the community to see what other people did.",
|
||||
"learn_page_continuous_physical_setup_desc2": "Once mounted, the tracker should be securely attached to the headset. It should not wobble, swivel, or shake. The better the mounting the more consistent calibrations should be.",
|
||||
|
||||
"learn_page_basestation_desc": "Space Calibrator allows you to control SteamVR Base Stations if you have a compatible BLE Bluetooth adapter available.",
|
||||
"learn_page_basestation_1_title": "Base Station 1.0 Models",
|
||||
"learn_page_basestation_1_desc": "You can only turn these on or off. Setting channels wirelessly is unsupported, and you will have to press the physical button on the back of the Base Station to alternate between channels.",
|
||||
"learn_page_basestation_2_title": "Base Station 2.0 Models",
|
||||
"learn_page_basestation_2_desc1": "Manufactured by both Valve and HTC, these have better support for wireless management than 1.0 Base Stations. With these you're able to turn them on and off, and also set their channel. 2.0 Base Stations must each be on a unique channel, otherwise they will not work. Space Calibrator will offer to help you fix this if it happens.",
|
||||
"learn_page_basestation_2_desc2": "To change the channel of a 2.0 Base Station, navigate to the Base Station Management tab, select the edit button for the Base Station you wish to control, and click on the desired channel (marked in green).",
|
||||
"learn_page_basestation_auto_power_title": "Automatic Power Management",
|
||||
"learn_page_basestation_auto_power_desc": "You can go to the Settings tab to enable automatic Base Station Management, which will turn on your Base Stations when Space Calibrator is started, and turn them off when you close SteamVR (with Space Calibrator running). Note that manually closing Space Calibrator before closing SteamVR will NOT turn off any Base Stations automatically.",
|
||||
|
||||
"learn_page_ui_tour_desc": "This interface is divided into several tabs, each containing various things.",
|
||||
"learn_page_ui_tour_calibration_heading": "Calibration Tab",
|
||||
"learn_page_ui_tour_cal_desc1": "The Calibration tab contains controls relating to calibrations. You control your calibrations here.",
|
||||
"learn_page_ui_tour_cal_desc2": "At the top, you will see a card showing you whether you have a calibration active, and if so, which type.",
|
||||
"learn_page_ui_tour_cal_desc3": "Below that, you can select what devices to calibrate with. First, you should select the tracking systems you wish to calibrate. Then, on the left pane you should select what you're going to calibrate with. And on the right pane you should select what you're going to calibrate.",
|
||||
"learn_page_ui_tour_cal_desc4": "Below that are the buttons to perform a calibration. If you are unsure which calibration you should do, please read the pages talking about Standard and Continuous Calibration to learn more.",
|
||||
"learn_page_ui_tour_cal_desc5": "At the bottom of the Calibration tab you will find several options to control the calibration. A number of these settings require advanced settings to be visible.",
|
||||
"learn_page_ui_tour_base_stations_heading": "Base Station Management Tab",
|
||||
"learn_page_ui_tour_bs_desc": "Here you can control any Base Stations in your room with a supported BLE Bluetooth adapter. You should typically not have to touch this beyond initial setup.",
|
||||
"learn_page_ui_tour_settings_heading": "Settings Tab",
|
||||
"learn_page_ui_tour_settings_desc1": "Here you may set some global settings for the program. These include advanced settings, Base Station Management, and UI language.",
|
||||
"learn_page_ui_tour_settings_desc2": "Some features in this app require Advanced Settings to be enabled. You should only enable this if you know what you're doing.",
|
||||
|
||||
/* Names of the various languages one may select. Shown in settings */
|
||||
"languages_en_GB": "English (UK)",
|
||||
"languages_en_US": "English (US)",
|
||||
"languages_fr": "French",
|
||||
"languages_it": "Italian",
|
||||
"languages_de": "German",
|
||||
"languages_nl": "Dutch",
|
||||
"languages_es_ES": "Spanish (Spain)",
|
||||
"languages_es_US": "Spanish (Latin America)",
|
||||
"languages_da": "Danish",
|
||||
"languages_sv": "Swedish",
|
||||
"languages_fi": "Finnish",
|
||||
"languages_no": "Norwegian",
|
||||
"languages_bg": "Bulgarian",
|
||||
"languages_pl": "Polish",
|
||||
"languages_cs": "Czech",
|
||||
"languages_el": "Greek",
|
||||
"languages_hu": "Hungarian",
|
||||
"languages_pt_PT": "Portuguese (Portugal)",
|
||||
"languages_pt_BR": "Portuguese (Brazil)",
|
||||
"languages_ro": "Romanian",
|
||||
"languages_ru": "Russian",
|
||||
"languages_tr": "Turkish",
|
||||
"languages_uk": "Ukrainian",
|
||||
"languages_zh_HANS": "Chinese (Simplified)",
|
||||
"languages_zh_HANT": "Chinese (Traditional)",
|
||||
"languages_ja": "Japanese",
|
||||
"languages_ko": "Korean",
|
||||
"languages_th": "Thai",
|
||||
"languages_vi": "Vietnamese",
|
||||
"languages_system": "System Language"
|
||||
}
|
||||
@@ -0,0 +1,278 @@
|
||||
{
|
||||
"app_title": "{0} {1}", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"app_title_vr": "{0} {1} - cierra la overlay de VR para usar el ratón", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"tracking_system_no_systems": "No hay dispositivos rastreados presentes. Por favor enciende un dispositivo para continuar.", /* Should never be hit but you never know */
|
||||
|
||||
"error_unknown_catastrophic": "¡Algo ha ido catastróficamente mal! Por favor reporta esto al desarrollador en GitHub o Discusiones de Steam para poder solucionarlo.",
|
||||
"ipc_unavailable": "No se pudo conectar al driver de SteamVR de Space Calibrator. Por favor verifica la integridad de los archivos en Propiedades -> Archivos instalados, o reinstala la app.",
|
||||
"steamvr_unavailable": "No se pudo conectar a SteamVR.",
|
||||
"vr_troubleshooting_hmd_not_found": "Por favor conecta tus gafas de VR y abre SteamVR primero.",
|
||||
"vr_troubleshooting_connect_steamlink": "Por favor abre SteamLink en tus gafas de VR y conéctate a SteamVR primero.",
|
||||
"vr_troubleshooting_generic": "Por favor conecta tus gafas de VR y abre SteamVR primero. ({0} {1})", /* 0 : SteamVR init error (eg 108), 1 : SteamVR init error string (eg Headset not connected) - this string is provided by Steam. */
|
||||
|
||||
"calibration_title": "Calibración",
|
||||
"calibration_count_none": "No hay Calibración. Por favor crea una nueva calibración para empezar.", // Shown when there are no calibrations active
|
||||
"calibration_new": "Nueva Calibración",
|
||||
"calibration_delete": "Borrar Calibración",
|
||||
"calibration_next": "Siguiente Calibración",
|
||||
"calibration_previous": "Anterior Calibración",
|
||||
|
||||
"calibration_status_none": "No hay una Calibración activa",
|
||||
"calibration_status_none_description": "Por favor selecciona una pareja de dispositivos y calibra para empezar.",
|
||||
"calibration_status_edit": "Editando calibración",
|
||||
"calibration_status_edit_description": "Modificando la calibración actual.",
|
||||
"calibration_status_continuous": "Calibración Continua",
|
||||
"calibration_status_continuous_description": "Tienes una calibración activa. Utiliza un tracker para recalibrar cada pocos segundos automáticamente.",
|
||||
"calibration_status_standard": "Calibración Estándar",
|
||||
"calibration_status_standard_description": "Tienes una calibración activa. Puede ser necesario recalibrar si observas desviación (drift).",
|
||||
|
||||
// space here refers to a tracking space / tracking system.
|
||||
"reference_device": "Dispositivo de referencia",
|
||||
"reference_device_description": "Este dispositivo es con lo que estás calibrando, usualmente tus gafas de VR o un mando.",
|
||||
"target_device": "Dispositivo de destino",
|
||||
"target_device_description": "Este dispositivo se utilizará para alinear tus trackers o mandos.",
|
||||
"select_reference_device": "Selecciona dispositivo de referencia",
|
||||
"select_target_device": "Selecciona dispositivo de destino",
|
||||
|
||||
"identify_selected_devices": "Identificar dispositivos seleccionados (parpadea LED o vibra)",
|
||||
"identify_auto_detect_devices": "Auto detectar dispositivos",
|
||||
"calibration_error_reference_hmd_missing": "No se pudo encontrar el dispositivo de destino del sistema de rastreamiento \"{0}\". Puede ser necesario recalibrar..", /* 0 : tracking system name, eg SteamVR Tracking*/
|
||||
"calibration_warning_stage_tracking_disabled": "¡Stage tracking esta deshabilitado! Para una experiencia mejor, abre el menú de Virtual Desktop en tu Quest, ves a la pestaña Streaming y habilita \"Center to play area (Stage Tracking)\".",
|
||||
"calibration_warning_stage_tracking_disabled_ignore_button": "No mostrar otra vez",
|
||||
|
||||
"calibration_action_start": "Calibración Estándar",
|
||||
"calibration_action_clear": "Borrar Calibración",
|
||||
"calibration_action_continuous": "Calibración Continua",
|
||||
"calibration_action_edit": "Editar Calibración",
|
||||
"save_calibration_profile": "Guardar Perfil",
|
||||
|
||||
"calibration_progress": "Progreso de Calibración",
|
||||
"calibration_info_move_around_insufficient_samples": "Coge tus dispositivos seleccionados juntos, entonces camina por tu espacio de juego mientras los giras lentamente formando ochos.",
|
||||
|
||||
"calibration_speed": "Velocidad de Calibración",
|
||||
"calibration_speed_description": "Cuanto se tarda en calibrar. Las calibraciones más lentas suelen ser más exactas.",
|
||||
"calibration_speed_fast": "Rápido",
|
||||
"calibration_speed_slow": "Lento",
|
||||
"calibration_speed_very_slow": "Muy Lento",
|
||||
|
||||
/* Editing calibrations */
|
||||
"edit_calibration_rotation": "Rotación",
|
||||
"edit_calibration_position": "Posición (m)",
|
||||
"edit_calibration_yaw": "Yaw",
|
||||
"edit_calibration_pitch": "Pitch",
|
||||
"edit_calibration_roll": "Roll",
|
||||
"edit_calibration_x": "X",
|
||||
"edit_calibration_y": "Y",
|
||||
"edit_calibration_z": "Z",
|
||||
"edit_calibration_scale": "Escala (m)",
|
||||
|
||||
"continuous_hide_tracker": "Esconder el tracker de referencia en las apps",
|
||||
"continuous_relative_calibration": "Habilitar calibración relativa",
|
||||
"continuous_relative_calibration_description": "Hace la calibración relativa al dispositivo de destino (usualmente tus gafas de VR), actualizando cada frame sin necesitar una recalibración. Esto REQUIERE Calibración Continua",
|
||||
|
||||
/* HMD names for Virtual Desktop */
|
||||
/* Virtual desktop lies that it's a Quest 2/3 on most headsets, so we have to substitute the real HMD name ourselves. you generally should
|
||||
NOT have to change these! but some headsets have different names in certain regions (eg PFD MR is YVR MR in China) */
|
||||
"virtual_desktop_hmd_none": "Ninguno", /* should never appear but you never know*/
|
||||
"virtual_desktop_hmd_gearvr": "Samsung Gear VR",
|
||||
"virtual_desktop_hmd_oculus_go": "Oculus Go",
|
||||
"virtual_desktop_hmd_oculus_quest_1": "Oculus Quest",
|
||||
"virtual_desktop_hmd_oculus_quest_2": "Oculus Quest 2",
|
||||
"virtual_desktop_hmd_meta_quest_pro": "Meta Quest Pro",
|
||||
"virtual_desktop_hmd_pico_4": "Pico 4",
|
||||
"virtual_desktop_hmd_meta_quest_3": "Meta Quest 3",
|
||||
"virtual_desktop_hmd_meta_quest_3s": "Meta Quest 3S",
|
||||
"virtual_desktop_hmd_pico_4_ultra": "Pico 4 Ultra",
|
||||
"virtual_desktop_hmd_samsung_galaxy_xr": "Samsung Galaxy XR",
|
||||
"virtual_desktop_hmd_play_for_dream_mr": "Play For Dream MR",
|
||||
|
||||
/* vertical tabs on the left */
|
||||
"tab_page_calibration": "Calibración",
|
||||
"tab_page_graphs": "Gráficos",
|
||||
"tab_page_base_station_management": "Estaciones Base",
|
||||
"tab_page_settings": "Ajustes",
|
||||
"tab_page_debug": "Depuración",
|
||||
"tab_page_learn": "Aprende",
|
||||
"tab_page_about": "Sobre",
|
||||
|
||||
/* graphs */
|
||||
"graphs_title": "Gráficos",
|
||||
|
||||
/* base stations */
|
||||
"base_stations_title": "Gestión de Estaciones Base",
|
||||
"base_stations_no_bluetooth": "No se pudo encontrar un adaptador Bluetooth válido. Por favor conecta un dispositivo Bluetooth capaz de BLE para poder utilizar Gestión de Estaciones Base.",
|
||||
"base_stations_none_found": "No se han detectado estaciones base. Si tienes algunas, asegúrate de que están enchufadas.",
|
||||
"base_stations_header_info": "{0}", // 0: station ID (LHB XXXXXXXX) / nickname
|
||||
"base_stations_warning_collision": "¡Colisión de canales detectada! Esto causará problemas de rastreamiento. Cada una de tus estaciones base debería usar un canal distinto.",
|
||||
"base_stations_state_sleep": "Durmiendo",
|
||||
"base_stations_state_standby": "Standby",
|
||||
"base_stations_state_active": "Activo",
|
||||
"base_stations_state_unknown": "Desconocido",
|
||||
"base_stations_state_faulty": "Defectuoso",
|
||||
"base_stations_channel_select_label": "Selecciona un canal de estaciones base:",
|
||||
"base_stations_active_channel": "Canal {0}", // 0: channel number (1-15) ; eg Channel 12
|
||||
"base_stations_nickname": "Apodo",
|
||||
|
||||
/* actions */
|
||||
"base_stations_action_wake_all": "Despertar Todos",
|
||||
"base_stations_action_sleep_all": "Dormir Todos",
|
||||
"base_stations_action_fix_collisions": "Arreglar Colisiones de Canales",
|
||||
"base_stations_btn_wake": "Despertar",
|
||||
"base_stations_btn_standby": "Standby",
|
||||
"base_stations_btn_sleep": "Dormir",
|
||||
"base_stations_btn_edit": "Editar",
|
||||
"base_stations_btn_save": "Guardar",
|
||||
|
||||
"base_station_power_management": "Gestión de Energía de Estaciones Base",
|
||||
"base_stations_power_mgmt_enable": "Habilitar gestión de energía *",
|
||||
"base_stations_power_mgmt_enable_description_standby": "Las estaciones base encendidas entran en modo standby cuando SteamVR no está en uso, y se despiertan cuando SteamVR se abre.",
|
||||
"base_stations_power_mgmt_enable_description_sleep": "Las estaciones base encendidas se duermen cuando SteamVR no está en uso, y se despiertan cuando SteamVR se abre.",
|
||||
"base_stations_power_mgmt_on_startup": "Encender estaciones base con SteamVR",
|
||||
"base_stations_power_mgmt_on_startup_description": "Las estaciones base apagadas se despiertan cuando SteamVR se abre.",
|
||||
"base_stations_power_mgmt_on_shutdown": "Apagar estaciones base con SteamVR",
|
||||
"base_stations_power_mgmt_on_shutdown_description": "Las estaciones base encendidas se apagan cuando SteamVR no está en uso.",
|
||||
"base_stations_power_mgmt_standby": "Standby",
|
||||
"base_stations_power_mgmt_standby_description": "Las estaciones base apagarán únicamente sus lásers para encenderse más rápido cuando SteamVR se abre. Esto no está disponible en estaciones base 1.0 y algunos modelos de estaciones base 2.0, en esos casos, se dormirá.",
|
||||
"base_stations_power_mgmt_sleep": "Dormir",
|
||||
"base_stations_power_mgmt_sleep_description": "Las estaciones base apagarán sus lásers y motores.",
|
||||
"base_stations_power_mgmt_warning": "* NO RECOMENDADO para espacios de juego compartidos por múltiples usuarios de SteamVR.",
|
||||
|
||||
/* settings */
|
||||
"settings_title": "Ajustes",
|
||||
"settings_advanced": "Ajustes avanzados",
|
||||
"settings_advanced_description": "Muestra ajustes extra y controles más finos para power users.",
|
||||
"settings_calibrate_motion_vectors": "Calibrar vectores de movimiento",
|
||||
"settings_calibrate_motion_vectors_description": "Mejora la predicción de movimiento para rastreamiento más fluido. Puede afectar a juegos con muchas físicas.",
|
||||
"settings_autofix_playspace_jumps": "Auto corregir saltos de espacio de juego",
|
||||
"settings_autofix_playspace_jumps_description": "Intenta automáticamente detectar y corregir saltos repentinos en el rastreo del espacio de juego.",
|
||||
"settings_enforce_minimum_rotation_variance": "Forzar variación mínima de rotación",
|
||||
"settings_enforce_minimum_rotation_variance_description": "Automáticamente descarta muestras que son similares en rotación para mejorar la calidad de calibración.",
|
||||
"settings_locale": "Idioma",
|
||||
"settings_reset": "Reiniciar todos los ajustes",
|
||||
"settings_reset_description": "Reinicia todos los ajustes a su valor predeterminado. Esto es permanente y no se puede revertir.",
|
||||
"settings_reset_confirm": "Esta acción es permanente y no se puede revertir. ¿Estás seguro de que quieres continuar?",
|
||||
"settings_reset_yes": "Sí",
|
||||
"settings_reset_no": "No",
|
||||
|
||||
/* about */
|
||||
"about_title": "Sobre",
|
||||
"about_description": "Space Calibrator es una herramienta gratuita y de código abierto que te permite utilizar dispositivos de diferentes fabricantes juntos con SteamVR.",
|
||||
"about_view_source_info": "Puedes ver el código fuente en el repositorio de GitHub.",
|
||||
"about_contributors_title": "Contribuidores",
|
||||
"about_contributors_description": "Space Calibrator es posible gracias a la ayuda de las siguientes personas:",
|
||||
"about_translators_title": "Tranductores",
|
||||
"about_translators_description": "Space Calibrator se ha traducido por las siguientes personas:",
|
||||
"about_licenses_title": "Licencias",
|
||||
"about_licenses_description": "Este programa está licenciado bajo la licencia MIT. Otras dependencias están licenciadas bajo otras licencias, por favor mira las licencias abajo para más información.",
|
||||
"about_link_github": "GitHub",
|
||||
"about_link_discord": "Servidor de Discord",
|
||||
"about_link_logs_dir": "Carpeta de logs",
|
||||
|
||||
/* self-troubleshooting */
|
||||
/* found another driver loaded in SteamVR -> legacy ipc connection successful */
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_title": "Otra instancia de Space Calibrator ya está presente",
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_description": "Una versión incompatible de Space Calibrator está abierta actualmente. Has de desinstalarla para usar esta aplicación. ¿Te gustaría eliminarla automáticamente?",
|
||||
/* found legacy overlay key registered (non steam) */
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_title": "Otra instancia de Space Calibrator ya está presente",
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_description": "Otra versión de Space Calibrator está instalada actualmente. ¿Te gustaría eliminarla?",
|
||||
"troubleshoot_action_yes": "Sí",
|
||||
"troubleshoot_action_no": "No",
|
||||
"troubleshoot_action_quit": "Cerrar",
|
||||
|
||||
/* tutorial */
|
||||
"learn_title": "Aprende",
|
||||
"learn_card_standard_calibration": "Calibración Estándar",
|
||||
"learn_card_standard_calibration_description": "Aprende a calibrar una pareja de dispositivos.",
|
||||
"learn_card_continuous_calibration": "Calibración Continua",
|
||||
"learn_card_continuous_calibration_description": "Calibra frecuentemente para evitar desviación (drift) durante el juego.",
|
||||
"learn_card_base_station_management": "Gestión de Estaciones Base",
|
||||
"learn_card_base_station_management_description": "Controla tus estaciones base de SteamVR de forma inalámbrica.",
|
||||
"learn_card_ui_tour": "Tour de interfaz de usuario",
|
||||
"learn_card_ui_tour_description": "Una vista rápida de la interfaz de Space Calibrator.",
|
||||
"learn_action_back": "Atrás",
|
||||
|
||||
/* these are kinda like a messed up wiki because its inlined into the app like this, oh well lol */
|
||||
"learn_page_standard_desc": "La Calibración Estándar alinea dos sistemas de rastreamiento juntos para que tus dispositivos de realidad virtual funcionen juntos en el mismo espacio de juego físico.",
|
||||
"learn_page_standard_select_devices_title": "Selecciona tus dispositivos",
|
||||
"learn_page_standard_select_devices_desc": "Antes de empezar, la app necesita saber los dos dispositivos que quieres alinear.",
|
||||
"learn_page_standard_ref_device": "Dispositivo de referencia: Este dispositivo es lo que estás calibrando, usualmente un mando.",
|
||||
"learn_page_standard_target_device": "Dispositivo de destino: El dispositivo no alineado con el que estás calibrando, usualmente un tracker o similar.",
|
||||
"learn_page_standard_perform_title": "Haz la Calibración",
|
||||
"learn_page_standard_perform_step1": "Coge ambos dispositivos firmemente en una mano. Cógelos lo más fuerte que puedas para que no se muevan durante el proceso de calibración.",
|
||||
"learn_page_standard_perform_step2": "Haz clic en el botón de Calibración Estándar para empezar.",
|
||||
"learn_page_standard_perform_step3": "Muévete por tu habitación mientas mueves los dispositivos en ochos, como se muestra abajo.",
|
||||
"learn_page_standard_speeds_title": "Velocidades de Calibración",
|
||||
"learn_page_standard_speeds_desc": "Puedes, opcionalmente, alterar la velocidad de calibración para afectar cuánto movimiento es necesario. Más movimiento tiende a mejorar la calidad de calibración.",
|
||||
"learn_page_standard_speed_fast": "Rápido: Tarda menos tiempo en calibrarse, pero puede resultar en una calibración de menor calidad.",
|
||||
"learn_page_standard_speed_slow": "Lento / Muy Lento: Tarda más tiempo en calibrarse y tiende a resultar en calibraciones más exactas.",
|
||||
"learn_page_standard_completion_note": "Una vez la barra de progreso se llene, tus dispositivos se deberían alinear instantáneamente en realidad virtual. Si esto no ocurre, prueba a calibrar otra vez.",
|
||||
"learn_page_standard_drift_title": "Una Nota sobre la desviación (drift)",
|
||||
"learn_page_standard_drift_desc": "Con el paso del tiempo, tus dispositivos pueden desviarse, rompiendo la calibración. Si esto pasa, deberás recalibrar para corregirlo. Si has de hacer esto frecuentemente, deberías considerar usar Calibración Continua.",
|
||||
|
||||
"learn_page_continuous_desc1": "Si te das cuenta de que tus dispositivos se están moviendo lentamete, girando, o desviándose fuera de lugar mientras juegas, la Calibración Continua es la solución a esos problemas.",
|
||||
"learn_page_continuous_desc2": "En lugar de forzarte a parar y manualmente calibrar cada cierto tiempo, la Calibración Continua automáticamente mantiene tu rastreamiento sincronizado en segundo plano mientras juegas.",
|
||||
"learn_page_continuous_note_title": "Nota",
|
||||
"learn_page_continuous_note_desc": "Un tracker dedicado montado en tus gafas de VR ES necesario para utilizar esta función.",
|
||||
"learn_page_continuous_desc3": "La Calibración Continua intenta recalibrar tus dispositivos frecuentemente para eliminar toda la desviación (drift). Tiende a hacer la calibración algo sobre lo que no piensas nunca después de configurarla.",
|
||||
"learn_page_continuous_setup_instructions": "Para configurar la Calibración Continua, primero selecciona tus dispositivos tal y como se explica en la página de la Calibración Estándar. Tus gafas de VR deberán estar seleccionadas como el dispositivo de referencia, y el tracker de calibración como el dispositivo de destino. Entonces, haz clic en el botón de Calibración Continua para empezar la calibración. Puede tardar un poco de tiempo hasta que la calibración inicial se haya completado, ¡así que muévete para permitir que la app aprenda sobre tu rastreamiento!",
|
||||
"learn_page_continuous_should_use_title": "¿Debería utilizar Calibración Continua?",
|
||||
"learn_page_continuous_should_use_standard": "Utiliza Calibración Estándar si no tienes un tracker extra para montar en tus gafas de VR, no pasas mucho tiempo en realidad virtual, o no te molesta recalibrar cada cierto tiempo cuando observas desviación (drift).",
|
||||
"learn_page_continuous_should_use_continuous": "Utiliza Calibración Continua si deseas prácticamente nunca pensar sobre la desviación. Esto está recomendado si pasas mucho tiempo en realidad virtual o observas cantidades significantes de desviación (drift) al paso del tiempo.",
|
||||
"learn_page_continuous_physical_setup_title": "Configuración física (montar el tracker en tus gafas de realidad virtual)",
|
||||
"learn_page_continuous_physical_setup_desc1": "Para utilizar Calibración Continua necesitarás un tracker dedicado agarrado a tus gafas de VR. Usualmente puedes encontrar modelos 3D en el internet que puedes imprimir para empezar, o puedes preguntar alrededor en la comunidad para ver lo que otras personas han hecho.",
|
||||
"learn_page_continuous_physical_setup_desc2": "Una vez montado, el tracker debería estar enganchado de forma segura a las gafas. No debería tambalearse, girar, o sacudirse. Cuanto mejor montado, la calibración será más consistente.",
|
||||
|
||||
"learn_page_basestation_desc": "Space Calibrator te permite controlar tus estaciones base de SteamVR si tienes un adaptador Bluetooth BLE compatible disponible.",
|
||||
"learn_page_basestation_1_title": "Modelos de Estación Base 1.0",
|
||||
"learn_page_basestation_1_desc": "Únicamente las puedes encender y apagar. Cambiar canales inalámbricamente no está soportado, has de utilizar el botón físico en la parte trasera de la estación base para alternar entre canales.",
|
||||
"learn_page_basestation_2_title": "Modelos de Estación Base 2.0",
|
||||
"learn_page_basestation_2_desc1": "Fabricados por Valve y HTC, estas tienen mejor soporte para gestión inalámbrica que las estaciones base 1.0. Con estas puedes encenderlas y apagarlas, y también establecer su canal. Las estaciones base 2.0 han de estar cada una en un canal único, no funcionarán en caso contrario. Space Calibrator ofrecerá ayuda para arreglar esto si ocurre.",
|
||||
"learn_page_basestation_2_desc2": "Para cambiar el canal de una estación base 2.0, navega a la pestaña de Gestión de Estaciones Base, selecciona el botón de editar para la estación base que quieres controlar, y haz clic en el canal deseado (marcado en verde).",
|
||||
"learn_page_basestation_auto_power_title": "Gestión de Energía automática",
|
||||
"learn_page_basestation_auto_power_desc": "Puedes ir a la pestaña de Ajustes para activar Gestión automática de Estaciones Base, lo que encenderá tus estaciones base cuando Space Calibrator se abra, y las apagará cuando cierres SteamVR (con Space Calibrator abierto). Nota que cerrar Space Calibrator manualmente antes de cerrar SteamVR NO apagará tus estaciones base automáticamente.",
|
||||
|
||||
"learn_page_ui_tour_desc": "Esta interfaz está dividida en diversas pestañas, cada una conteniendo varias cosas.",
|
||||
"learn_page_ui_tour_calibration_heading": "Pestaña de Calibración",
|
||||
"learn_page_ui_tour_cal_desc1": "La pestaña de Calibración contiene controles relacionados con las calibraciones. Controlas tu calibraciones aquí.",
|
||||
"learn_page_ui_tour_cal_desc2": "Arriba verás una tarjeta mostrando si tienes una calibración activa y su tipo.",
|
||||
"learn_page_ui_tour_cal_desc3": "Debajo de eso puedes seleccionar que dispositivos deseas utilizar para calibrar. Primero deberás seleccionar los sistemas de rastreamiento que quieres calibrar. Y en el panel de la derecha deberás seleccionar que vas a calibrar.",
|
||||
"learn_page_ui_tour_cal_desc4": "Debajo de eso están los botones para hacer una calibración. Si no estás seguro de lo que deberías hacer, por favor lee las páginas sobre la Calibración Estándar y la Calibración Continua para aprender más.",
|
||||
"learn_page_ui_tour_cal_desc5": "Abajo de la pestaña de Calibración encontrarás diversas opciones para controlar la calibración. Algunos de estos ajustes sólo se hacen visibles si los ajustes avanzados están habilitados.",
|
||||
"learn_page_ui_tour_base_stations_heading": "Pestaña de Gestión de Estaciones Base",
|
||||
"learn_page_ui_tour_bs_desc": "Aquí puedes controlar cualquier estación base en tu habitación con un adaptador Bluetooth BLE soportado. Usualmente no tienes que tocarlo despueś de la configuración inicial.",
|
||||
"learn_page_ui_tour_settings_heading": "Pestaña de Ajustes",
|
||||
"learn_page_ui_tour_settings_desc1": "Aquí puedes establecer algunos ajustes globales para el programa. Éstos incluyen ajustes avanzados, Gestión de Estaciones Base, y el idioma de la interfaz.",
|
||||
"learn_page_ui_tour_settings_desc2": "Algunas funciones de esta app requieren que los Ajustes Avanzados estén activados. Sólo deberías activar esto si sabes lo que estás haciendo.",
|
||||
|
||||
/* Names of the various languages one may select. Shown in settings */
|
||||
"languages_en_GB": "Inglés (Reino Unido)",
|
||||
"languages_en_US": "Inglés (Estados Unidos)",
|
||||
"languages_fr": "Francés",
|
||||
"languages_it": "Italiano",
|
||||
"languages_de": "Alemán",
|
||||
"languages_nl": "Neerlandés",
|
||||
"languages_es_ES": "Español (España)",
|
||||
"languages_es_US": "Español (Latinomérica)",
|
||||
"languages_da": "Danés",
|
||||
"languages_sv": "Sueco",
|
||||
"languages_fi": "Finlandés",
|
||||
"languages_no": "Noruego",
|
||||
"languages_bg": "Búlgaro",
|
||||
"languages_pl": "Polaco",
|
||||
"languages_cs": "Checo",
|
||||
"languages_el": "Griego",
|
||||
"languages_hu": "Húngaro",
|
||||
"languages_pt_PT": "Portugués (Portugal)",
|
||||
"languages_pt_BR": "Portugués (Brazil)",
|
||||
"languages_ro": "Rumano",
|
||||
"languages_ru": "Ruso",
|
||||
"languages_tr": "Turco",
|
||||
"languages_uk": "Ucraniano",
|
||||
"languages_zh_HANS": "Chino (Simplificado)",
|
||||
"languages_zh_HANT": "Chino (Tradicional)",
|
||||
"languages_ja": "Japonés",
|
||||
"languages_ko": "Coreano",
|
||||
"languages_th": "Tailandés",
|
||||
"languages_vi": "Vietnamita",
|
||||
"languages_system": "Idioma del Sistema"
|
||||
}
|
||||
@@ -0,0 +1,280 @@
|
||||
{
|
||||
"app_title": "{0} {1}", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"app_title_vr": "{0} {1} - sulje VR sovelluksen näkymä käyttääksesi hiirtä", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"tracking_system_no_systems": "Seurattuja laitteita ei havaittu. Käynnistä laite jatkaaksesi.", /* Should never be hit but you never know */
|
||||
|
||||
"error_unknown_catastrophic": "Jokin meni pahasti vikaan! Kirjoita raportti kehittäjälle GitHubissa tai Steam keskustelussa, jotta tämä voidaan korjata.",
|
||||
"ipc_unavailable": "Yhdistäminen Space Calibrator SteamVR ajuriin epäonnistui. Tarkista sovellustiedostojen eheys Steamissa -> Ominaisuudet -> Tiedostot, tai asenna sovellus uudelleen.",
|
||||
"steamvr_unavailable": "Yhdistäminen SteamVR:ään epäonnistui.",
|
||||
"vr_troubleshooting_hmd_not_found": "Yhdistä ensin VR-lasisi ja käynnistä SteamVR.",
|
||||
"vr_troubleshooting_connect_steamlink": "Avaa ensin SteamLink VR-laseissasi ja yhdistä SteamVR:ään",
|
||||
"vr_troubleshooting_generic": "Yhdistä ensin VR-lasisi ja käynnistä SteamVR. ({0} {1})", /* 0 : SteamVR init error (eg 108), 1 : SteamVR init error string (eg Headset not connected) - this string is provided by Steam. */
|
||||
"ipc_unvailable_auto_fix": "Yritä korjata",
|
||||
"ipc_unvailable_auto_fix_note_reboot": "Tietokone on käynnistettävä uudelleen, jotta muutokset toteutuvat.",
|
||||
|
||||
"calibration_title": "Kalibrointi",
|
||||
"calibration_count_none": "Ei kalibrointia. Luo uusi kalibrointi aloittaaksesi.", // Shown when there are no calibrations active
|
||||
"calibration_new": "Uusi kalibrointi",
|
||||
"calibration_delete": "Poista kalibrointi",
|
||||
"calibration_next": "Seuraava kalibrointi",
|
||||
"calibration_previous": "Edellinen kalibrointi",
|
||||
|
||||
"calibration_status_none": "Ei aktiivista kalibrointia.",
|
||||
"calibration_status_none_description": "Valitse laitepari ja kalibroi ne.",
|
||||
"calibration_status_edit": "Kalibroinnin muokkaus.",
|
||||
"calibration_status_edit_description": "Muokataan nykyistä kalibrointia.",
|
||||
"calibration_status_continuous": "Jatkuva kalibrointi",
|
||||
"calibration_status_continuous_description": "Jatkuva kalibrointi käyttää toiseen laitteeseen fyysisesti kiinnitettyä seurantalaitetta ja kalibroi ne keskenään automaattisesti muutaman sekunnin välein.",
|
||||
"calibration_status_standard": "Tavallinen kalibrointi",
|
||||
"calibration_status_standard_description": "Sinulla on aktiivinen kalibrointi. Uusi kalibrointi voi olla tarpeen, jos laitteet ovat liukuneet erilleen toisistaan.",
|
||||
|
||||
// space here refers to a tracking space / tracking system.
|
||||
"reference_device": "Päälaite",
|
||||
"reference_device_description": "Kohdelaite kalibroidaan tämän laiteen kanssa. Päälaite on yleensä VR-lasit, tai ohjain.",
|
||||
"target_device": "Kohdelaite",
|
||||
"target_device_description": "Tätä laitetta käytetään muiden seurantalaitteiden tai ohjaimien kohdistamiseen.",
|
||||
"select_reference_device": "Valitse päälaite",
|
||||
"select_target_device": "Valitse kohdelaite",
|
||||
|
||||
"identify_selected_devices": "Tunnista valitut laitteet (vilkuttaa LED-valoa tai värisee)",
|
||||
"identify_auto_detect_devices": "Tunnista laitteet automaattisesti",
|
||||
"calibration_error_reference_hmd_missing": "Edellistä kohdelaitetta ei löytynyt. Kalibroi eri kohdelaitteella tai varmista, että edellinen kohdelaite on yhdistetty.", /* 0 : tracking system name, eg SteamVR Tracking*/
|
||||
"calibration_warning_stage_tracking_disabled": "Stage tracking -asetus on pois käytöstä! Paremman kokemuksen saamiseksi, avaa Virtual Desktopin Streaming-valikko VR-laseissasi ja kytke päälle \"Center to play area (Stage Tracking)\".",
|
||||
"calibration_warning_stage_tracking_disabled_ignore_button": "Älä näytä tätä uudelleen",
|
||||
|
||||
"calibration_action_start": "Tavallinen Kalibrointi",
|
||||
"calibration_action_clear": "Tyhjennä Kalibrointi",
|
||||
"calibration_action_continuous": "Jatkuva Kalibrointi",
|
||||
"calibration_action_edit": "Muokkaa Kalibrointia",
|
||||
"save_calibration_profile": "Tallenna Profiili",
|
||||
|
||||
"calibration_progress": "Kalibroinnin edistyminen",
|
||||
"calibration_info_move_around_insufficient_samples": "Pidä valitut laitteesi kiinni toisissaan ja kävele ympäri pelialuettasi, tehden laitteilla kahdeksikko muotoa ilmassa.",
|
||||
|
||||
"calibration_speed": "Kalibroinnin nopeus",
|
||||
"calibration_speed_description": "Kuinka kauan kalibrointi kestää. Hitaampi kalibrointi antaa tarkemman tuloksen.",
|
||||
"calibration_speed_fast": "Nopea",
|
||||
"calibration_speed_slow": "Hidas",
|
||||
"calibration_speed_very_slow": "Erittäin hidas",
|
||||
|
||||
/* Editing calibrations */
|
||||
"edit_calibration_rotation": "Kierto",
|
||||
"edit_calibration_position": "Sijainti (m)",
|
||||
"edit_calibration_yaw": "Kääntyminen",
|
||||
"edit_calibration_pitch": "Nyökkääminen",
|
||||
"edit_calibration_roll": "Kallistuminen",
|
||||
"edit_calibration_x": "X",
|
||||
"edit_calibration_y": "Y",
|
||||
"edit_calibration_z": "Z",
|
||||
"edit_calibration_scale": "Suhteellinen mittakaava (m)",
|
||||
|
||||
"continuous_hide_tracker": "Piilota kohdelaite muilta sovelluksilta.",
|
||||
"continuous_relative_calibration": "Käytä suhteellista kalibrointia",
|
||||
"continuous_relative_calibration_description": "Suhteellisessa kalibroinnissa kohdelaite ja siitä riippuvat laitteet seuraavat aina päälaitetta (yleensä VR-laseja) vaatimatta uutta kalibrointia. Tämä VAATII jatkuvan kalibroinnin.",
|
||||
|
||||
/* HMD names for Virtual Desktop */
|
||||
/* Virtual desktop lies that it's a Quest 2/3 on most headsets, so we have to substitute the real HMD name ourselves. you generally should
|
||||
NOT have to change these! but some headsets have different names in certain regions (eg PFD MR is YVR MR in China) */
|
||||
"virtual_desktop_hmd_none": "Ei nimeä", /* should never appear but you never know*/
|
||||
"virtual_desktop_hmd_gearvr": "Samsung Gear VR",
|
||||
"virtual_desktop_hmd_oculus_go": "Oculus Go",
|
||||
"virtual_desktop_hmd_oculus_quest_1": "Oculus Quest",
|
||||
"virtual_desktop_hmd_oculus_quest_2": "Oculus Quest 2",
|
||||
"virtual_desktop_hmd_meta_quest_pro": "Meta Quest Pro",
|
||||
"virtual_desktop_hmd_pico_4": "Pico 4",
|
||||
"virtual_desktop_hmd_meta_quest_3": "Meta Quest 3",
|
||||
"virtual_desktop_hmd_meta_quest_3s": "Meta Quest 3S",
|
||||
"virtual_desktop_hmd_pico_4_ultra": "Pico 4 Ultra",
|
||||
"virtual_desktop_hmd_samsung_galaxy_xr": "Samsung Galaxy XR",
|
||||
"virtual_desktop_hmd_play_for_dream_mr": "Play For Dream MR",
|
||||
|
||||
/* vertical tabs on the left */
|
||||
"tab_page_calibration": "Kalibrointi",
|
||||
"tab_page_graphs": "Kuvaajat",
|
||||
"tab_page_base_station_management": "Tukiasemat",
|
||||
"tab_page_settings": "Asetukset",
|
||||
"tab_page_debug": "Virheenjäljitys",
|
||||
"tab_page_learn": "Käyttöohje",
|
||||
"tab_page_about": "Tietoja",
|
||||
|
||||
/* graphs */
|
||||
"graphs_title": "Kuvaajat",
|
||||
|
||||
/* base stations */
|
||||
"base_stations_title": "Tukiasemien hallinta",
|
||||
"base_stations_no_bluetooth": "Sopivaa Bluetooth sovitinta ei löytynyt. Yhdistä BLE-yhteensopiva Bluetooth laite hallinnoidaksesi tukiasemia.",
|
||||
"base_stations_none_found": "Tukiasemia ei havaittu. Jos tukiasemia on, varmista että ne ovat kytkettynä virtaan.",
|
||||
"base_stations_header_info": "{0}", // 0: station ID (LHB XXXXXXXX) / nickname
|
||||
"base_stations_warning_collision": "Kanavaristiriita havaittu! Tämä aiheuttaa seuranta ongelmia. Varmista että mikään tukiasema ei käytä samaa kanavaa toisen tukiaseman kanssa.",
|
||||
"base_stations_state_sleep": "Lepotilassa",
|
||||
"base_stations_state_standby": "Valmiustilassa",
|
||||
"base_stations_state_active": "Aktiivinen",
|
||||
"base_stations_state_unknown": "Tuntematon tila",
|
||||
"base_stations_state_faulty": "Viallinen",
|
||||
"base_stations_channel_select_label": "Valitse tukiaseman kanava:",
|
||||
"base_stations_active_channel": "Kanava {0}", // 0: channel number (1-15) ; eg Channel 12
|
||||
"base_stations_nickname": "Lempinimi",
|
||||
|
||||
/* actions */
|
||||
"base_stations_action_wake_all": "Käynnistä kaikki",
|
||||
"base_stations_action_sleep_all": "Aseta kaikki lepotilaan",
|
||||
"base_stations_action_fix_collisions": "Korjaa kanavaristiriidat",
|
||||
"base_stations_btn_wake": "Käynnistä",
|
||||
"base_stations_btn_standby": "Valmiustilaan",
|
||||
"base_stations_btn_sleep": "Lepotilaan",
|
||||
"base_stations_btn_edit": "Muokkaa",
|
||||
"base_stations_btn_save": "Tallenna",
|
||||
|
||||
"base_station_power_management": "Tukiasemien virranhallinta",
|
||||
"base_stations_power_mgmt_enable": "Käytä virranhallintaa *",
|
||||
"base_stations_power_mgmt_enable_description_standby": "Käynnissä olevat tukiasemat menevät automaattisesti valmiustilaan kun SteamVR suljetaan, ja käynnistyvät kun SteamVR avataan.",
|
||||
"base_stations_power_mgmt_enable_description_sleep": "Käynnissä olevat tukiasemat menevät automaattisesti lepotilaan kun SteamVR suljetaan, ja käynnistyvät kun SteamVR avataan.",
|
||||
"base_stations_power_mgmt_on_startup": "Käynnistä tukiasemat kun SteamVR käynnistyy.",
|
||||
"base_stations_power_mgmt_on_startup_description": "Lepotilassa olevat tukiasemat käynnistyvät kun SteamVR avataan.",
|
||||
"base_stations_power_mgmt_on_shutdown": "Laita tukiasemat pois päältä kun SteamVR suljetaan.",
|
||||
"base_stations_power_mgmt_on_shutdown_description": "Käynnissä olevat tukiasemat sammuvat kun SteamVR suljetaan.",
|
||||
"base_stations_power_mgmt_standby": "Valmiustila",
|
||||
"base_stations_power_mgmt_standby_description": "Tukiasemat kytkevät vain laser-valon pois päältä, mutta pyörintämoottori pysyy käynnissä. Tämä on saatavilla vain 2.0 tukiasemissa. Jos tukiasema ei tue toimintoa, sen sijaan käytetään lepotilaa.",
|
||||
"base_stations_power_mgmt_sleep": "Lepotila",
|
||||
"base_stations_power_mgmt_sleep_description": "Tukiasemien laser-valot sekä moottorit sammuvat.",
|
||||
"base_stations_power_mgmt_warning": "* EI SUOSITELLA jos samaa pelialuetta käyttää useampi SteamVR käyttäjä.",
|
||||
|
||||
/* settings */
|
||||
"settings_title": "Asetukset",
|
||||
"settings_advanced": "Edistyneet asetukset",
|
||||
"settings_advanced_description": "Näyttää enemmän asetuksia ja hienosäätöjä tehokäyttäjille.",
|
||||
"settings_calibrate_motion_vectors": "Kalibroi liikevektorit",
|
||||
"settings_calibrate_motion_vectors_description": "Parantaa liikkeen ennakointia ja seurannan reaktiivisuutta nopeisiin liikkeisiin. Saattaa vaikuttaa fysiikka-painoitteisiin peleihin.",
|
||||
"settings_autofix_playspace_jumps": "Korjaa pelialue hypyt automaattisesti",
|
||||
"settings_autofix_playspace_jumps_description": "Yrittää korjata pelialueen teleporttaus- tai hyppäämisvirheet automaattisesti.",
|
||||
"settings_enforce_minimum_rotation_variance": "Pakota minimi kiertopoikkeama",
|
||||
"settings_enforce_minimum_rotation_variance_description": "Hylkää kiertoasteiltaan liian samanlaiset näytteet automaattisesti kalibroinnin laadun parantamiseksi.",
|
||||
"settings_locale": "Kieli",
|
||||
"settings_reset": "Nollaa asetukset",
|
||||
"settings_reset_description": "Palauttaa kaikki asetukset oletusarvoihin. Tätä ei voi perua.",
|
||||
"settings_reset_confirm": "Tätä ei voida perua. Haluatko varmasti jatkaa?",
|
||||
"settings_reset_yes": "Kyllä",
|
||||
"settings_reset_no": "En",
|
||||
|
||||
/* about */
|
||||
"about_title": "Tietoja",
|
||||
"about_description": "Space Calibrator on ilmainen avoimenlähdekoodin työkalu, joka mahdollistaa eri valmistajien laitteiden samanaikaisen käytön SteamVR-ympäristössä.",
|
||||
"about_view_source_info": "Voit tarkastella lähdekoodia Githubissa.",
|
||||
"about_contributors_title": "Kehittäjät",
|
||||
"about_contributors_description": "Space Calibratorin ovat mahdollistaneet:",
|
||||
"about_translators_title": "Kääntäjät",
|
||||
"about_translators_description": "Space Calibratorin ovat kääntäneet:",
|
||||
"about_licenses_title": "Lisenssit",
|
||||
"about_licenses_description": "Tämä ohjelma on lisensoitu MIT-lisenssin alla. Muut riippuvuudet käyttävät muita lisensointeja, tarkastele lisenssejä alta saadaksesi lisätietoja.",
|
||||
"about_link_github": "GitHub",
|
||||
"about_link_discord": "Discord Palvelin",
|
||||
"about_link_logs_dir": "Loki kansio",
|
||||
|
||||
/* self-troubleshooting */
|
||||
/* found another driver loaded in SteamVR -> legacy ipc connection successful */
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_title": "Löydettiin toinen Space Calibrator asennus",
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_description": "Toinen asennus Space Calibratorista on käynnissä ja se luo konfliktin tämän asennuksen kanssa. Toinen Space Calibrator versio on poistettava ennen kuin tätä versiota voidaan käyttää. Haluatko poistaa toisen version asennuksen automaattisesti?",
|
||||
/* found legacy overlay key registered (non steam) */
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_title": "Löydettiin toinen Space Calibrator asennus",
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_description": "Löydettiin toinen versio Space Calibratorista. Haluatko poistaa sen?",
|
||||
"troubleshoot_action_yes": "Kyllä",
|
||||
"troubleshoot_action_no": "Ei",
|
||||
"troubleshoot_action_quit": "Sulje",
|
||||
|
||||
/* tutorial */
|
||||
"learn_title": "Käyttöohje",
|
||||
"learn_card_standard_calibration": "Tavallinen Kalibrointi",
|
||||
"learn_card_standard_calibration_description": "Opi kalibroimaan laitepari.",
|
||||
"learn_card_continuous_calibration": "Jatkuva Kalibrointi",
|
||||
"learn_card_continuous_calibration_description": "Kalibroi laitepari jatkuvasti erilleen liukumisen minimoimiseksi.",
|
||||
"learn_card_base_station_management": "Tukiasemien hallinta",
|
||||
"learn_card_base_station_management_description": "Hallinnoi SteamVR tukiasemia langattomasti.",
|
||||
"learn_card_ui_tour": "Käyttöliittymän esittely",
|
||||
"learn_card_ui_tour_description": "Yleiskatsaus Space Calibratorin käyttöliittymästä.",
|
||||
"learn_action_back": "Takaisin",
|
||||
|
||||
/* these are kinda like a messed up wiki because its inlined into the app like this, oh well lol */
|
||||
"learn_page_standard_desc": "Tavallinen kalibrointi kohdistaa kaksi erilaista seurantalaitteistoa toisiinsa siten, että kaikkien laitteiden virtuaalinen sijainti vastaa niiden todellista sijaintia.",
|
||||
"learn_page_standard_select_devices_title": "Valitse laitteesi",
|
||||
"learn_page_standard_select_devices_desc": "Ennen aloittamista, sovelluksen tulee tietää mitkä laitteet haluat kohdistaa toisiinsa.",
|
||||
"learn_page_standard_ref_device": "Päälaite: Tämä laite on kalibroinnin kohde, yleensä ohjain.",
|
||||
"learn_page_standard_target_device": "Kohdelaite: kohdistamaton laite, jonka haluat kohdistaa Päälaitteen kanssa, yleensä seurantalaite tai vastaava.",
|
||||
"learn_page_standard_perform_title": "Suorita kalibrointi",
|
||||
"learn_page_standard_perform_step1": "Pidä laiteparia tiukasti samassa kädessä. Yritä pitää laitteet kokoajan kiinni toisissaan ilman, että ne pääsevät liikkumaan toistensa suhteen yhtään kalibroinnin aikana.",
|
||||
"learn_page_standard_perform_step2": "Paina Tavallinen Kalibrointi -nappia aloittaaksesi kalibrointi.",
|
||||
"learn_page_standard_perform_step3": "Kävele ympäri huonettasi samalla tehden laiteparilla kahdeksikko muotoa ilmassa kuvan mukaisesti.",
|
||||
"learn_page_standard_speeds_title": "Kalibrointi nopeudet",
|
||||
"learn_page_standard_speeds_desc": "Voit halutessasi muuttaa kalibrointiin vaadittavaa aikaa ja liikkeen määrä. Pidempi kalibrointi ja enemmän liikettä antaa paremman tuloksen.",
|
||||
"learn_page_standard_speed_fast": "Nopea: Kestää vähemmän aikaa, mutta voi antaa epätarkemman tuloksen.",
|
||||
"learn_page_standard_speed_slow": "Hidas / Erittäin Hidas: Kalibrointiin vaadittava aika on pidempi, ja tulokset ovat tarkempia.",
|
||||
"learn_page_standard_completion_note": "Kun edistymispalkki on täynnä, laitteidesi pitäisi välittömästi kohdistua toisiinsa VR:ässä. Jos näin ei tapahdu, yritä kalibroida uudelleen.",
|
||||
"learn_page_standard_drift_title": "Erilleen liukuminen",
|
||||
"learn_page_standard_drift_desc": "Ajan kuluessa laitteesi saattavat liukua erilleen. Jos laitteesi ovat liukuneet erilleen, sinun on kalibroitava uudelleen. Jos tätä tapahtuu usein, harkitse jatkuvan kalibroinnin käyttöä.",
|
||||
|
||||
"learn_page_continuous_desc1": "Jos havaitset laitteiden liukuvan hiljaa erilleen kääntyen tai liikkuen. Jatkuva kalibrointi on vastaus tähän ongelmaan.",
|
||||
"learn_page_continuous_desc2": "Sen sijaan, että joutuisit jatkuvasti manuaalisesti kalibroimaan laitteet uudelleen, jatkuva kalibrointi pitää laitteet kohdistettuna taustalla automaattisesti samalla kun pelaat.",
|
||||
"learn_page_continuous_note_title": "Huomaa",
|
||||
"learn_page_continuous_note_desc": "Tämä ominaisuus vaatii erillisen VR-laseihin kiinnitetyn seurantalaitteen.",
|
||||
"learn_page_continuous_desc3": "Jatkuva kalibrointi kalibroi laitteesi usein ja pitää ne kohdistettuna erilleen liukumisen estämiseksi. Tätä ominaisuutta käytettäessä, kalibrointi tehdään kerran ja sen jälkeen laitteet pysyvät kohdistettuna automaattisesti.",
|
||||
"learn_page_continuous_setup_instructions": "Jatkuvan kalibroinnin aloittamiseksi, valitse laitepari, kuten tavallisen kalibroinnin sivulla ohjeistetaan. Valitse VR-lasit päälaitteeksi ja niihin kiinnitetty seurantalaite kohdelaitteeksi. Paina jatkuva kalibrointi nappia aloittaaksesi kalibrointi. Ensimmäisen kalibroinnin valmiiksi saaminen saattaa kestää hetken, liikuta laiteparia kunnes ensimmäinen kalibrointi on valmis.",
|
||||
"learn_page_continuous_should_use_title": "Milloin jatkuvaa kalibrointia tulisi käyttää?",
|
||||
"learn_page_continuous_should_use_standard": "Jos sinulla ei ole ylimääräistä seurantalaitetta, jonka kiinnittää VR-laseihin, et pelaa pitkiä pelisessioita, tai sinua ei haittaa kalibroida laitteita uudelleen manuaalisesti erilleen liukumisen tapahtuessa, voit käyttää tavallista kalibrointia.",
|
||||
"learn_page_continuous_should_use_continuous": "Käytä jatkuvaa kalibrointia jos et halua miettiä erilleen liukumista. Tätä ominaisuutta suositellaan käytettäväksi jos pelaat pitkiä VR pelisessioita, tai havaitset usein tapahtuvaa erilleen liukumista.",
|
||||
"learn_page_continuous_physical_setup_title": "Fyysinen kokonpano (Seurantalaitteen kiinnitys VR-laseihin)",
|
||||
"learn_page_continuous_physical_setup_desc1": "Käyttääksesi jatkuvaa kalibrointia, tarvitset erillisen seurantalaitteen, jonka kiinnittää VR-laseihin. Seurantalaite voidaan kiinnittää useilla eri tavoilla, riippuen mitä VR-laseja ja seurantalaitetta käytät. Voit käyttää internetistä löytyviä 3D tulostettavia kiinnikettä, pienoiskameroille (esim GoPro tai vastaava) tarkoitettua kiinnikettä tai kysyä yhteisöltä mitä kiinnitys tapoja muut käyttävät.",
|
||||
"learn_page_continuous_physical_setup_desc2": "Kun seurantalaite on kiinnitetty VR-laseihin hyvin, sen ei pitäisi heilua tai liikkua yhtään suhteessa VR-lasien etuosaan. Parempi kiinnitys antaa tarkemmat kalibroinnin tulokset.",
|
||||
|
||||
"learn_page_basestation_desc": "Space Calibratorilla voit myös hallinnoida SteamVR tukiasemiasi, jos tietokoneessasi on yhteensopiva BLE Bluetooth sovitin.",
|
||||
"learn_page_basestation_1_title": "1.0 Tukiasema mallit",
|
||||
"learn_page_basestation_1_desc": "Voit käynnistää ja sammuttaa tukiasemat sovelluksesta, mutta kanavien langatonta hallintaa ei tueta, paina tukiaseman takaosassa olevaa nappia jos haluat vaihtaa kanavia.",
|
||||
"learn_page_basestation_2_title": "2.0 Tukiasema mallit",
|
||||
"learn_page_basestation_2_desc1": "Valven ja HTC:n valmistamat 2.0 tukiasemat. Näissä on parempi langattoman hallinnan tuki kuin 1.0 tukiasemissa. Voit käynnistää ja sammuttaa tukiasemat sovelluksesta, sekä vaihtaa niiden kanavia. 2.0 tukiasemat tulee asettaa kaikki omille erillisille kanavilleen, muuten ne eivät toimi oiken. Space Calibrator tunnistaa yleensä kanavaristiriidat ja tarjoaa niiden automaattista korjaamista.",
|
||||
"learn_page_basestation_2_desc2": "Vaihtaaksesi 2.0 tukiasemien kanavia, mene Tukiasemien hallinta -sivulle, valitse tukiasema jota haluat hallinnoida, ja sitten valitse haluttu kanava (nykyinen kanava merkitty vihreällä, muiden tukiasemien käyttämät kanavat tummanharmaalla).",
|
||||
"learn_page_basestation_auto_power_title": "Automaattinen virranhallinta",
|
||||
"learn_page_basestation_auto_power_desc": "Asetukset sivulta, voit kytkeä päälle automaattisen tukiasemien virranhallinnan, joka käynnistää tukiasemat kun Space Calibrator käynnistyy, ja sammuttaa ne, kun SteamVR sulkeutuu (Space Calibratorin ollessa käynnissä). Huomaa, että Space Calibratorin manuaalinen sulkeminen ennen SteamVR:än sulkemista ei sammuta tukiasemia automaattisesti.",
|
||||
|
||||
"learn_page_ui_tour_desc": "Käyttöliittymä on jaettu erillisiin sivuihin, jotka kukin sisältävät eri asioihin liittyviä toimintoja.",
|
||||
"learn_page_ui_tour_calibration_heading": "Kalibrointi Sivu",
|
||||
"learn_page_ui_tour_cal_desc1": "Kalibrointi sivu sisältää kalibrointiin liittyvät toiminnot, hallinnoi kalibrointia täällä.",
|
||||
"learn_page_ui_tour_cal_desc2": "Ylhäältä näet onko kalibrointi tällähetkellä aktiivinen ja mikä kalibrointi tyyppi on kyseessä.",
|
||||
"learn_page_ui_tour_cal_desc3": "Sen alta, voit valita mitä laitteita haluat käyttää kalibrointiin. Valitse ensin mitkä seurantalaitteistot haluat kalibroida. Valitse vaemmalta päälaite (tämän laitten paikka pysyy samana), ja sitten oikealta, kohdelaite, jonka haluat kohdistaa päälaitteeseen.",
|
||||
"learn_page_ui_tour_cal_desc4": "Näiden alta löydät napit kalibroinnin aloittamiseksi. Jos olet epävarma mitä kalibrointia käyttää, lue sivut joilla kerrotaan lisätietoja tavallisen kalibroinnin ja jatkuvan kalibroinnin eroista.",
|
||||
"learn_page_ui_tour_cal_desc5": "Kalibrointi sivun alaosasta löydät asetuksia joilla hallinnoida kalibrointia. Jotkin näistä asetuksista eivät näy, ellei edistyneet asetukset ole päällä.",
|
||||
"learn_page_ui_tour_base_stations_heading": "Tukiasemien hallinta Sivu",
|
||||
"learn_page_ui_tour_bs_desc": "Täällä voit hallinnoida huonessasi olevia tukiasemia tietokoneessasi olevalla tuetulla BLE Bluetooth sovittimella. Tätä sivua ei yleensä tarvitse käyttää kun sen asetukset on kerran tehty.",
|
||||
"learn_page_ui_tour_settings_heading": "Asetukset Sivu",
|
||||
"learn_page_ui_tour_settings_desc1": "Täällä voit muuttaa sovelluksen asetuksia, mukaan lukien edistyneet asetukset, tukiasemien hallinta, sekä käyttöliittymän kielen valinta.",
|
||||
"learn_page_ui_tour_settings_desc2": "Jotkin sovelluksen toiminnot vaativat edistyneiden asetusten päällä olon. Käytä edistyneitä asetuksia vain jos tiedät mitä teet.",
|
||||
|
||||
/* Names of the various languages one may select. Shown in settings */
|
||||
"languages_en_GB": "Englanti (Yhdistynyt Kuningaskunta)",
|
||||
"languages_en_US": "Englanti (Yhdysvallat)",
|
||||
"languages_fr": "Ranska",
|
||||
"languages_it": "Italia",
|
||||
"languages_de": "Saksa",
|
||||
"languages_nl": "Hollanti",
|
||||
"languages_es_ES": "Espanja (Manner-Espanja)",
|
||||
"languages_es_US": "Espanja (Etelä-Amerikka)",
|
||||
"languages_da": "Tanska",
|
||||
"languages_sv": "Ruotsi",
|
||||
"languages_fi": "Suomi",
|
||||
"languages_no": "Norja",
|
||||
"languages_bg": "Bulgaria",
|
||||
"languages_pl": "Puola",
|
||||
"languages_cs": "Tsekki",
|
||||
"languages_el": "Kreikka",
|
||||
"languages_hu": "Unkari",
|
||||
"languages_pt_PT": "Portugali (Portugali)",
|
||||
"languages_pt_BR": "Portugali (Brasilia)",
|
||||
"languages_ro": "Romania",
|
||||
"languages_ru": "Venäjä",
|
||||
"languages_tr": "Turkki",
|
||||
"languages_uk": "Ukraina",
|
||||
"languages_zh_HANS": "Kiina (Yksinkertaistettu)",
|
||||
"languages_zh_HANT": "Kiina (Perinteinen)",
|
||||
"languages_ja": "Japani",
|
||||
"languages_ko": "Korea",
|
||||
"languages_th": "Thai",
|
||||
"languages_vi": "Vietnam",
|
||||
"languages_system": "Järjestelmän Kieli"
|
||||
}
|
||||
@@ -0,0 +1,278 @@
|
||||
{
|
||||
"app_title": "{0} {1}", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"app_title_vr": "{0} {1} - fermer l'overlay VR pour pouvoir utiliser votre souris", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"tracking_system_no_systems": "Pas d'objet tracké présent. Merci d'allumer un appareil pour continuer.", /* Should never be hit but you never know */
|
||||
|
||||
"error_unknown_catastrophic": "Quelque chose s'est absolument mal passé ! Veuillez notifier cette erreur au développeur soit sur GitHub, soit sur les discussions Steam pour qu'elle puisse être réglée",
|
||||
"ipc_unavailable": "La connexion avec le driver SteamVR de Space Calibrator n'a pas pu être établie. Merci de vérifier l'intégrité des fichiers en allant dans Propriétés -> Fichiers installés ou en ré-installant l'application.",
|
||||
"steamvr_unavailable": "La connexion avec SteamVR n'a pas pu être établie.",
|
||||
"vr_troubleshooting_hmd_not_found": "Veuillez connecter votre casque et lancer SteamVR en premier.",
|
||||
"vr_troubleshooting_connect_steamlink": "Veuillez ouvrir SteamLink sur votre casque de VR et vous connecter à SteamVR en premier.",
|
||||
"vr_troubleshooting_generic": "Veuillez connecter votre casque et lancer SteamVR en premier. ({0} {1})", /* 0 : SteamVR init error (eg 108), 1 : SteamVR init error string (eg Headset not connected) - this string is provided by Steam. */
|
||||
|
||||
"calibration_title": "Calibration",
|
||||
"calibration_count_none": "Pas de calibration trouvée, veuillez créer une nouvelle calibration pour commencer.", // Shown when there are no calibrations active
|
||||
"calibration_new": "Nouvelle calibration",
|
||||
"calibration_delete": "Supprimer la calibration",
|
||||
"calibration_next": "Prochaine calibration",
|
||||
"calibration_previous": "Ancienne calibration",
|
||||
|
||||
"calibration_status_none": "Pas de calibration active",
|
||||
"calibration_status_none_description": "Veuillez sélectionner une paire d'appareils et calibrer pour commencer",
|
||||
"calibration_status_edit": "Changer la calibration",
|
||||
"calibration_status_edit_description": "Modification de la calibration actuelle",
|
||||
"calibration_status_continuous": "Calibration continue",
|
||||
"calibration_status_continuous_description": "Vous avez une calibration active. Elle utilise un tracker attaché pour recalibrer toutes les quelques secondes automatiquement.",
|
||||
"calibration_status_standard": "Calibration Standard",
|
||||
"calibration_status_standard_description": "Vous avez une calibration active. Il se peut que vous auriez besoin de re-calibrer si un des appareils dévie.",
|
||||
|
||||
// space here refers to a tracking space / tracking system.
|
||||
"reference_device": "Appareil de référence",
|
||||
"reference_device_description": "Cet appareil est celui qui va être utilisé pour calibrer, en général un casque de VR ou une manette.",
|
||||
"target_device": "Appareil cible",
|
||||
"target_device_description": "Cet appareil va être utilisé pour aligner vos trackers ou manettes.",
|
||||
"select_reference_device": "Sélectionner l'appareil de référence",
|
||||
"select_target_device": "Sélectionner l'appareil cible",
|
||||
|
||||
"identify_selected_devices": "Identifier l'appareil sélectionné (clignotement LED ou vibrations)",
|
||||
"identify_auto_detect_devices": "Auto-détecter les appareils",
|
||||
"calibration_error_reference_hmd_missing": "Appareil cible introuvé dans le système de tracking \"{0}\". il se peut que vous alliez besoin de récaliber.", /* 0 : tracking system name, eg SteamVR Tracking*/
|
||||
"calibration_warning_stage_tracking_disabled": "l'option \"Stage tracking\" est désactivé! Pour avoir une meilleur experience, Veuillez allez dans le menu de Virtual Desktop dans votre Quest et allez dans la fenêtre \"Streaming\" et activez \"Center to play area (Stage Tracking)\".",
|
||||
"calibration_warning_stage_tracking_disabled_ignore_button": "Ne plus afficher",
|
||||
|
||||
"calibration_action_start": "Calibration Standard",
|
||||
"calibration_action_clear": "Effacer la calibration",
|
||||
"calibration_action_continuous": "Calibration continue",
|
||||
"calibration_action_edit": "Changer la calibration",
|
||||
"save_calibration_profile": "Sauvegarder le profil",
|
||||
|
||||
"calibration_progress": "Progression de la Calibration",
|
||||
"calibration_info_move_around_insufficient_samples": "Attrapez vos appareils sélectionnés dans la même main, ensuite marchez dans votre espace de jeu en les tournant doucement en forme de 8.",
|
||||
|
||||
"calibration_speed": "Vitesse de Calibration",
|
||||
"calibration_speed_description": "Combien de temps ça prend à calibrer. Les calibrations plus longues tendent à être plus précises.",
|
||||
"calibration_speed_fast": "Rapide",
|
||||
"calibration_speed_slow": "Lent",
|
||||
"calibration_speed_very_slow": "Très Lent",
|
||||
|
||||
/* Editing calibrations */
|
||||
"edit_calibration_rotation": "Rotation",
|
||||
"edit_calibration_position": "Position (m)",
|
||||
"edit_calibration_yaw": "Lacet",
|
||||
"edit_calibration_pitch": "Tangage",
|
||||
"edit_calibration_roll": "Roulis",
|
||||
"edit_calibration_x": "X",
|
||||
"edit_calibration_y": "Y",
|
||||
"edit_calibration_z": "Z",
|
||||
"edit_calibration_scale": "Échelle (m)",
|
||||
|
||||
"continuous_hide_tracker": "Cacher le tracker de référence de vos applications",
|
||||
"continuous_relative_calibration": "Activer la calibration relative",
|
||||
"continuous_relative_calibration_description": "Fait en sorte que la calibration soit relative par rapport à votre appareil (typiquement votre casque) pour qu'elle se mette à jour à chaque image sans avoir à recalibrer. Ceci a BESOIN d'être utilisé avec la calibration continue.",
|
||||
|
||||
/* HMD names for Virtual Desktop */
|
||||
/* Virtual desktop lies that it's a Quest 2/3 on most headsets, so we have to substitute the real HMD name ourselves. you generally should
|
||||
NOT have to change these! but some headsets have different names in certain regions (eg PFD MR is YVR MR in China) */
|
||||
"virtual_desktop_hmd_none": "pas de casque", /* should never appear but you never know*/
|
||||
"virtual_desktop_hmd_gearvr": "Samsung Gear VR",
|
||||
"virtual_desktop_hmd_oculus_go": "Oculus Go",
|
||||
"virtual_desktop_hmd_oculus_quest_1": "Oculus Quest",
|
||||
"virtual_desktop_hmd_oculus_quest_2": "Oculus Quest 2",
|
||||
"virtual_desktop_hmd_meta_quest_pro": "Meta Quest Pro",
|
||||
"virtual_desktop_hmd_pico_4": "Pico 4",
|
||||
"virtual_desktop_hmd_meta_quest_3": "Meta Quest 3",
|
||||
"virtual_desktop_hmd_meta_quest_3s": "Meta Quest 3S",
|
||||
"virtual_desktop_hmd_pico_4_ultra": "Pico 4 Ultra",
|
||||
"virtual_desktop_hmd_samsung_galaxy_xr": "Samsung Galaxy XR",
|
||||
"virtual_desktop_hmd_play_for_dream_mr": "Play For Dream MR",
|
||||
|
||||
/* vertical tabs on the left */
|
||||
"tab_page_calibration": "Calibration",
|
||||
"tab_page_graphs": "Graphs",
|
||||
"tab_page_base_station_management": "Stations de base",
|
||||
"tab_page_settings": "Options",
|
||||
"tab_page_debug": "Debug",
|
||||
"tab_page_learn": "Découvrir",
|
||||
"tab_page_about": "À propos",
|
||||
|
||||
/* graphs */
|
||||
"graphs_title": "Graphs",
|
||||
|
||||
/* base stations */
|
||||
"base_stations_title": "Gestion des stations de base",
|
||||
"base_stations_no_bluetooth": "Pas d'adaptateur Bluetooth trouvé. Veuillez connecter un appareil compatible avec le Bluetooth à basse consommation (BLE) pour pouvoir utiliser la gestion des stations de base",
|
||||
"base_stations_none_found": "Pas de station de base détectée. Si vous en avez, veuillez vérifier qu'elles sont branchées.",
|
||||
"base_stations_header_info": "{0}", // 0: station ID (LHB XXXXXXXX) / nickname
|
||||
"base_stations_warning_collision": "Collision de canal détectée ! Ceci va causer des problèmes de suivi. Vos stations de base doivent utiliser un canal unique.",
|
||||
"base_stations_state_sleep": "En veille",
|
||||
"base_stations_state_standby": "En attente",
|
||||
"base_stations_state_active": "Active",
|
||||
"base_stations_state_unknown": "Inconnu",
|
||||
"base_stations_state_faulty": "cassée :/",
|
||||
"base_stations_channel_select_label": "Sélectionner un canal pour votre station de base :",
|
||||
"base_stations_active_channel": "Canal {0}", // 0: channel number (1-15) ; eg Channel 12
|
||||
"base_stations_nickname": "Surnom",
|
||||
|
||||
/* actions */
|
||||
"base_stations_action_wake_all": "Réveiller toutes les stations",
|
||||
"base_stations_action_sleep_all": "Mettre toutes les stations au dodo",
|
||||
"base_stations_action_fix_collisions": "Fixer les collisions des canaux",
|
||||
"base_stations_btn_wake": "Réveiller",
|
||||
"base_stations_btn_standby": "En attente",
|
||||
"base_stations_btn_sleep": "Endormie",
|
||||
"base_stations_btn_edit": "Changer",
|
||||
"base_stations_btn_save": "Sauvegarder",
|
||||
|
||||
"base_station_power_management": "Gestion de l'alimentation des stations de base",
|
||||
"base_stations_power_mgmt_enable": "Activer la gestion de l'alimentation *",
|
||||
"base_stations_power_mgmt_enable_description_standby": "Les stations de base allumées vont en mode d'attente. Lorsque SteamVR n'est pas utilisé, elles se rallumeront quand SteamVR démarre.",
|
||||
"base_stations_power_mgmt_enable_description_sleep": "Les stations de base allumées iront en mode sommeil lorsque SteamVR n'est pas utilisé, elles se rallumeront quand SteamVR démarre.",
|
||||
"base_stations_power_mgmt_on_startup": "Allumer les stations de base lorsque SteamVR démarre",
|
||||
"base_stations_power_mgmt_on_startup_description": "Les stations de base s'allumeront lorsque SteamVR démarre.",
|
||||
"base_stations_power_mgmt_on_shutdown": "Éteindre les stations de base lorsque SteamVR se ferme",
|
||||
"base_stations_power_mgmt_on_shutdown_description": "Les stations de base s'éteindront lorsque SteamVR n'est pas utilisé.",
|
||||
"base_stations_power_mgmt_standby": "En attente",
|
||||
"base_stations_power_mgmt_standby_description": "Les stations de base éteindront uniquement leur laser pour sortir du mode endormi plus rapidement quand SteamVR démarre. Uniquement disponible pour les stations de base 2.0 ; le mode sommeil sera utilisé dans les autres cas.",
|
||||
"base_stations_power_mgmt_sleep": "Endormie",
|
||||
"base_stations_power_mgmt_sleep_description": "Les stations de base éteindront leurs lasers et leurs moteurs.",
|
||||
"base_stations_power_mgmt_warning": "*PAS RECOMMANDÉ pour les utilisations où les stations de base sont partagées avec plusieurs utilisateurs SteamVR.",
|
||||
|
||||
/* settings */
|
||||
"settings_title": "Options",
|
||||
"settings_advanced": "Options avancées",
|
||||
"settings_advanced_description": "Montre plus d'options pour affiner les réglages destinés aux utilisateurs avancés.",
|
||||
"settings_calibrate_motion_vectors": "Calibrer les vecteurs de mouvement",
|
||||
"settings_calibrate_motion_vectors_description": "Améliorer la prédiction des mouvements pour un tracking plus réactif. Il se peut que cela affecte les jeux reposant sur la physique.",
|
||||
"settings_autofix_playspace_jumps": "Auto-corriger les sauts dans l'espace de jeu",
|
||||
"settings_autofix_playspace_jumps_description": "Essaie de détecter automatiquement les sauts soudains dans le suivi de l'espace de jeu.",
|
||||
"settings_enforce_minimum_rotation_variance": "Force une variance minimale de rotation",
|
||||
"settings_enforce_minimum_rotation_variance_description": "Rejette automatiquement les échantillons avec des rotations similaires pour améliorer la qualité de la calibration.",
|
||||
"settings_locale": "Langue",
|
||||
"settings_reset": "Remettre toutes les options à zéro",
|
||||
"settings_reset_description": "Remet toutes les options à zéro. Ceci est permanent et irréversible",
|
||||
"settings_reset_confirm": "Ce changement est permanent et il n'est pas possible de revenir en arrière. Êtes-vous sûr de vouloir continuer ?",
|
||||
"settings_reset_yes": "Oui",
|
||||
"settings_reset_no": "Non",
|
||||
|
||||
/* about */
|
||||
"about_title": "À propos",
|
||||
"about_description": "Space Calibrator est un outil gratuit et open source qui permet d'utiliser plusieurs appareils de plusieurs marques ensemble avec SteamVR.",
|
||||
"about_view_source_info": "Vous pouvez voir le code source sur le dépôt GitHub.",
|
||||
"about_contributors_title": "Contributeurs",
|
||||
"about_contributors_description": "Space Calibrator est possible grâce aux personnes suivantes:",
|
||||
"about_translators_title": "Traducteurs",
|
||||
"about_translators_description": "Space Calibrator a été traduit par les personnes suivantes:",
|
||||
"about_licenses_title": "Licences",
|
||||
"about_licenses_description": "Ce programme utilise une licence MIT. D'autres dépendances utilisent d'autres licences ; merci de voir les différentes licences ci-dessous.",
|
||||
"about_link_github": "GitHub",
|
||||
"about_link_discord": "Server Discord",
|
||||
"about_link_logs_dir": "Dossier de Logs",
|
||||
|
||||
/* self-troubleshooting */
|
||||
/* found another driver loaded in SteamVR -> legacy ipc connection successful */
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_title": "Une autre instance de Space Calibrator est présente",
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_description": "Une autre version de Space Calibrator est installée. Voulez-vous la supprimer ?",
|
||||
/* found legacy overlay key registered (non steam) */
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_title": "Une autre instance de Space Calibrator est présente",
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_description": "Une autre version de Space Calibrator est installée. Voulez-vous la supprimer ?",
|
||||
"troubleshoot_action_yes": "Oui",
|
||||
"troubleshoot_action_no": "Non",
|
||||
"troubleshoot_action_quit": "Fermer",
|
||||
|
||||
/* tutorial */
|
||||
"learn_title": "Découvrir",
|
||||
"learn_card_standard_calibration": "Calibration Standard",
|
||||
"learn_card_standard_calibration_description": "Apprendre comment calibrer une paire d'appareils.",
|
||||
"learn_card_continuous_calibration": "Calibration continue",
|
||||
"learn_card_continuous_calibration_description": "Calibrer fréquemment pour contrebalancer la déviation qui arrive lors de vos sessions.",
|
||||
"learn_card_base_station_management": "Gestion des stations de base",
|
||||
"learn_card_base_station_management_description": " Contrôlez vos stations de base SteamVR sans fil.",
|
||||
"learn_card_ui_tour": "Visite de l'interface",
|
||||
"learn_card_ui_tour_description": "Une présentation de l'interface de Space Calibrator.",
|
||||
"learn_action_back": "Retour",
|
||||
|
||||
/* these are kinda like a messed up wiki because its inlined into the app like this, oh well lol */
|
||||
"learn_page_standard_desc": "La calibration standard aligne deux systèmes de tracking ensemble pour que vos appareils VR marchent ensemble dans le même espace physique.",
|
||||
"learn_page_standard_select_devices_title": "Sélectionnez votre appareil",
|
||||
"learn_page_standard_select_devices_desc": "Avant de commencer, l'application a besoin de savoir quels sont les deux appareils à aligner.",
|
||||
"learn_page_standard_ref_device": "Appareil de référence: Cet appareil est celui qui va être choisi comme référence pour l'autre appareil ; celui-ci se calibre vers lui, en général une manette.",
|
||||
"learn_page_standard_target_device": "Appareil cible: Cet appareil est celui qui va être aligné à l'appareil de référence, en général un tracker ou autre objet similaire.",
|
||||
"learn_page_standard_perform_title": "Lancer la calibration",
|
||||
"learn_page_standard_perform_step1": "Attrapez les deux appareils ensemble fermement dans une main. Essayez de les garder le plus proches l'un de l'autre et le plus fermement possible pour qu'ils ne bougent pas lors du processus de calibration.",
|
||||
"learn_page_standard_perform_step2": "Cliquez le bouton Calibration standard pour lancer la calibration.",
|
||||
"learn_page_standard_perform_step3": "Déplacez-vous dans votre pièce en bougeant votre paire d'appareils en forme de 8. Veuillez vous référer à l'illustration ci-dessous.",
|
||||
"learn_page_standard_speeds_title": "Vitesses de Calibration",
|
||||
"learn_page_standard_speeds_desc": "Vous pouvez changer la durée de la calibration pour changer la quantité de mouvements requise. Plus de mouvements tendent à améliorer la qualité de la calibration.",
|
||||
"learn_page_standard_speed_fast": "Rapide: prend moins de temps à calibrer, mais résulte en une calibration moins bonne.",
|
||||
"learn_page_standard_speed_slow": "Lent/Très lent: prend plus de temps à calibrer mais tend à donner une calibration plus fidèle.",
|
||||
"learn_page_standard_completion_note": "Une fois que la barre de progression est remplie, vos appareils devraient instantanément s'aligner en VR, si cela n'est pas le cas, essayez de calibrer de nouveau.",
|
||||
"learn_page_standard_drift_title": "Une note sur la déviation",
|
||||
"learn_page_standard_drift_desc": "Au cours du temps, vos appareils peuvent dévier, ce qui casse la calibration. Si cela arrive, vous aurez à recalibrer pour corriger cette déviation. Si vous avez à faire ça de façon fréquente, vous devriez considérer utiliser la calibration continue.",
|
||||
|
||||
"learn_page_continuous_desc1": "Si vous trouvez que vos appareils dévient lentement, tournent de façon anormale ou bougent de façon non normale lorsque vous jouez, la calibration continue est une solution à ces soucis.",
|
||||
"learn_page_continuous_desc2": "Plutôt que vous forcer à vous arrêter et calibrer de temps en temps, la calibration continue automatiquement garder le suivi aligné en tâche de fond lorsque vous jouez.",
|
||||
"learn_page_continuous_note_title": "Note",
|
||||
"learn_page_continuous_note_desc": "Une monture dédiée pour votre casque est requise pour cette fonctionnalité.",
|
||||
"learn_page_continuous_desc3": "La calibration continue tente de recalibrer vos appareils fréquemment pour éliminer tout drift. Cela tend à faire en sorte que vous puissiez plus vous soucier des calibrations une fois que la calibration continue est mise en place.",
|
||||
"learn_page_continuous_setup_instructions": "Pour mettre la calibration continue en place, sélectionner votre appareil comme expliqué dans la page de la calibration standard. Il est préférable de sélectionner votre casque comme appareil de référence et le tracker de calibration comme appareil cible. Ensuite cliquez sur le bouton Calibration continue pour lancer la calibration. Il se peut que cela prenne un peu de temps pour que la calibration initiale soit complétée, donc déplacez-vous dans votre espace pour laisser l'application apprendre de votre suivi!",
|
||||
"learn_page_continuous_should_use_title": "Devriez-vous utiliser la calibration continue?",
|
||||
"learn_page_continuous_should_use_standard": "Utilisez la calibration standard si vous n'avez pas un tracker dédié sur votre casque, si vous ne faites pas de sessions longues en VR, ou que vous n'êtes pas dérangé d'avoir à recalibrer de temps en temps lorsque de la déviation arrive.",
|
||||
"learn_page_continuous_should_use_continuous": "Utilisez la calibration continue si vous voulez ne pas avoir à penser au drift. Ceci est recommandé si vous passez beaucoup de temps en VR ou que vous observez beaucoup de déviation au fur et à mesure que vous jouez.",
|
||||
"learn_page_continuous_physical_setup_title": "Mise en place physique (attachez votre tracker sur votre casque)",
|
||||
"learn_page_continuous_physical_setup_desc1": "Pour utiliser la calibration continue vous aurez besoin d'un tracker dédié attaché sur votre casque de VR. Il y a un large panel de montures dédiées à chaque combo de casque et de tracker. vous trouverez typiquement des modèles 3D en ligne que vous pouvez imprimer et commencer à utiliser, vous pouvez également demander dans la communauté pour voir ce que les gens utilisent.",
|
||||
"learn_page_continuous_physical_setup_desc2": "Une fois monté le tracker doit être attaché de façon ferme à votre casque. Il ne doit pas vibrer, tourner ou bouger. Une monture plus stable devrait donner une calibration plus stable.",
|
||||
|
||||
"learn_page_basestation_desc": "Space Calibrator vous permet de contrôler vos stations de base SteamVR si vous avez un adaptateur Bluetooth à basse consommation (BLE) disponible",
|
||||
"learn_page_basestation_1_title": "Modèles de station de base 1.0",
|
||||
"learn_page_basestation_1_desc": "Vous pouvez allumer et éteindre ces dernières. Cependant vous ne pouvez pas changer leurs canaux sans fil sur ces dernières, vous devrez appuyer sur le bouton physique derrière la station de base pour changer de canal ",
|
||||
"learn_page_basestation_2_title": "Modèle de station de base 2.0",
|
||||
"learn_page_basestation_2_desc1": "Construites par Valve et HTC, ces stations de base ont un meilleur support pour les contrôler que les stations de base 1.0. Avec ces dernières vous pouvez les allumer et les éteindre et également changer leur canal sans fil. Les stations de base 2.0 doivent être sur des canaux uniques, sinon elles ne fonctionneront pas. Space Calibrator vous permet de changer ça si ça arrive.",
|
||||
"learn_page_basestation_2_desc2": "Pour changer les canaux des stations de base 2.0, rendez-vous dans la page Gestion des stations de base, sélectionnez le bouton Changer sur la station de base que vous souhaitez contrôler et cliquez sur le canal désiré (marqué en vert).",
|
||||
"learn_page_basestation_auto_power_title": "Gestion automatique de l'alimentation",
|
||||
"learn_page_basestation_auto_power_desc": "Vous pouvez aller dans la page Options et activer la gestion automatique de l'alimentation des stations de base, cela allumera toutes vos stations de base lorsque Space Calibrator est allumé, elles seront également automatiquement éteintes lorsque SteamVR est fermé (avec Space Calibrator qui tourne). Notez que fermer manuellement Space Calibrator n'éteindra pas vos stations de base automatiquement.",
|
||||
|
||||
"learn_page_ui_tour_desc": "Cette interface est divisée en plusieurs pages qui contiennent une liste variée.",
|
||||
"learn_page_ui_tour_calibration_heading": "page Calibration",
|
||||
"learn_page_ui_tour_cal_desc1": "Cette page calibration contient certains contrôles liés aux calibrations. Vous contrôlez vos calibrations d'ici.",
|
||||
"learn_page_ui_tour_cal_desc2": "En haut, vous verrez un rectangle vous montrant si vous avez une calibration active et si elle est active, le type de calibration.",
|
||||
"learn_page_ui_tour_cal_desc3": "En dessous de cela vous pouvez sélectionner quel appareil vous pouvez calibrer. Premièrement choisissez le système de tracking que vous voulez calibrer. Ensuite sur le panneau de gauche vous pourrez sélectionner l'appareil de référence et sur la droite vous trouverez l'appareil que vous voulez calibrer.",
|
||||
"learn_page_ui_tour_cal_desc4": "Encore en dessous vous trouverez les boutons pour lancer la calibration. Si vous ne savez pas quelle calibration vous devriez choisir, veuillez lire les pages parlant de la calibration standard et de la calibration continue pour apprendre ce qu'elles font.",
|
||||
"learn_page_ui_tour_cal_desc5": "En bas de la page calibration vous trouverez plusieurs options pour contrôler la calibration. Un grand nombre des options requièrent que les options avancées soient activées.",
|
||||
"learn_page_ui_tour_base_stations_heading": "Page de gestion des stations de base",
|
||||
"learn_page_ui_tour_bs_desc": "Ici vous pouvez contrôler chaque station de base dans votre pièce via un adaptateur Bluetooth à basse consommation (BLE). Vous ne devriez typiquement pas avoir à toucher cette option lors de la mise en place initiale.",
|
||||
"learn_page_ui_tour_settings_heading": "Page options",
|
||||
"learn_page_ui_tour_settings_desc1": "Ici vous trouverez quelques options globales pour ce programme. Celles-ci incluent les options avancées, Gestion des stations de base et la langue de l'interface.",
|
||||
"learn_page_ui_tour_settings_desc2": "Quelques fonctionnalités de cette application demandent que les options avancées soient activées. Vous devriez uniquement activer les options avancées si vous savez ce que vous faites.",
|
||||
|
||||
/* Names of the various languages one may select. Shown in settings */
|
||||
"languages_en_GB": "Anglais (Royaume-Uni)",
|
||||
"languages_en_US": "Anglais (États-Unis)",
|
||||
"languages_fr": "Français",
|
||||
"languages_it": "Italien",
|
||||
"languages_de": "Allemand",
|
||||
"languages_nl": "Néerlandais",
|
||||
"languages_es_ES": "Espagnol (Espagne)",
|
||||
"languages_es_US": "Espagnol (Amérique Latine)",
|
||||
"languages_da": "Danois",
|
||||
"languages_sv": "Suédois",
|
||||
"languages_fi": "Finlandais",
|
||||
"languages_no": "Norvégien",
|
||||
"languages_bg": "Bulgare",
|
||||
"languages_pl": "Polonais",
|
||||
"languages_cs": "Tchèque",
|
||||
"languages_el": "Grec",
|
||||
"languages_hu": "Hongrois",
|
||||
"languages_pt_PT": "Portugais (Portugal)",
|
||||
"languages_pt_BR": "Portugais (Brésil)",
|
||||
"languages_ro": "Roumain",
|
||||
"languages_ru": "Russe",
|
||||
"languages_tr": "Turc",
|
||||
"languages_uk": "Ukrainien",
|
||||
"languages_zh_HANS": "Chinois (Simplifié)",
|
||||
"languages_zh_HANT": "Chinois (Traditionnel)",
|
||||
"languages_ja": "Japonais",
|
||||
"languages_ko": "Coréen",
|
||||
"languages_th": "Thaï",
|
||||
"languages_vi": "Vietnamien",
|
||||
"languages_system": "Langue du système"
|
||||
}
|
||||
@@ -0,0 +1,294 @@
|
||||
{
|
||||
"app_title": "{0} {1}", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"app_title_vr": "{0} {1} - Az egér használatához zárja be a VR-panelt", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"tracking_system_no_systems": "Nincsenek felismert követőeszközök. A folytatáshoz kapcsoljon be egy eszközt.", /* Should never be hit but you never know */
|
||||
|
||||
"error_unknown_catastrophic": "Kritikus hiba lépett fel! Kérjük, jelentse ezt a fejlesztőknek GitHub-on vagy Steam-en keresztül, hogy orvosolhassák a problémát.",
|
||||
"ipc_unavailable": "Nem sikerült csatlakozni a Space Calibrator SteamVR illesztőprogramjához. Kérjük, ellenőrizze a fájlok épségét a Steam könyvtárban az alkalmazásra jobb gombbal kattintva a „Tulajdonságok” --> „Telepített fájlok” menüpontban, vagy telepítse újra az alkalmazást.",
|
||||
//this is it's first appearance, so i'll leave the note here:
|
||||
//the grammatically correct way to mark a quote in hungarian is using the `„` character to begin it, and `”` to close it. Also, for foreign language words the linguistic quotation mark should be used on both ends `'`. The regular quote character `"` is also very commonly used, but technically not grammatically correct. I'm opting to use it, but if it has rendering issues, then it should be fine to switch them out to the "computer quotes" character.
|
||||
|
||||
"steamvr_unavailable": "Nem sikerült csatlakozni a SteamVR-hoz.",
|
||||
"vr_troubleshooting_hmd_not_found": "Kérjük, először csatlakoztassa a VR-szemüvegét, és indítsa el a SteamVR-t.",
|
||||
"vr_troubleshooting_connect_steamlink": "Kérjük, először nyissa meg a Steam Link-et a VR-szemüvegén, és csatlakozzon a SteamVR-hoz.",
|
||||
"vr_troubleshooting_generic": "Kérjük, először csatlakoztassa a VR-szemüvegét, és indítsa el a SteamVR-t. Hibakód: „{0}: {1}”", /* 0 : SteamVR init error (eg 108), 1 : SteamVR init error string (eg Headset not connected) - this string is provided by Steam. */
|
||||
|
||||
"calibration_title": "Összehangolás",
|
||||
//-- "Calibration" can be translated as: --//
|
||||
//"Kalibráció" (A very hunglish word, less known but would otherwise be the most direct. Didn't use it, because I'm assuming the people who will use this app in hungarian are less likely to already posess a better intuitive understanting of it's meaning.),
|
||||
//"Összehangolás" (Bringing two or more things into harmony/cooperation with eachother. The word originates from the action of tuning together multiple instruments. Perhaps the closest in meaning to "Calibration".),
|
||||
//"Összeigazítás" (Adjusting/Aligning two or more things together. For example it's used when conveying the act of aligning two pictures in a word document to be level.)
|
||||
// -- "Hozzá" instead of "Össze": Use while actively referring to one of the devices/universes. Like "The target tracker {Hozzáigazítása} to the refrence base.", here "Hozzáigazítás" refers to performing the action on the target tracker, with the action being to align it with the reference base.
|
||||
//"Illesztés" (Fitting/Joining. Like the "fitting" of the two tracking universes. In this case, the Calibration/It's transformation matrix itself, not neccessarily the act of doing so, but it can also be the act of doing it ("Illeszt") depending on context.)
|
||||
//"Egyeztetés" (Coordination. The act of making two or more people/things agree in a sense. Maybe a bit less fitting in this case, but still maybe usefull. (Ie. when talking about two tracking universes "agreeing"/"being the same"/"matching"/{megegyeznek}.) )
|
||||
//"Szinkronizálás" (Synchronization. Like calibration/"Összehangolás", but implies more that it's a continuous thing (or refers to timing also). A bit hunglish too, but less technical and probably wider known.)
|
||||
//-- --//
|
||||
//Proper usage of these words, where appropriate should result in better understandability than just using the "kalibráció" loanword.
|
||||
|
||||
"calibration_count_none": "Nincs létező illesztés. Kérjük, készítsen egy újat a folytatáshoz.", // Shown when there are no calibrations active
|
||||
"calibration_new": "Új illesztés készítése",
|
||||
"calibration_delete": "Illesztés törlése",
|
||||
"calibration_next": "Következő illesztés",
|
||||
"calibration_previous": "Előző illesztés",
|
||||
|
||||
"calibration_status_none": "Nincs aktív illesztés",
|
||||
"calibration_status_none_description": "A kezdéshez válasszon ki egy eszközpárt, és kezdje meg velük az összehangolást.",
|
||||
"calibration_status_edit": "Illesztés szerkesztése",
|
||||
"calibration_status_edit_description": "A jelenlegi illesztés módosítása.",
|
||||
"calibration_status_continuous": "Folyamatos szinkronizáció",
|
||||
"calibration_status_continuous_description": "Aktív illesztéssel rendelkezik. Egy VR-szemüvegre felszerelt követőeszközt használ, melynek segítségével néhány másodpercenként automatikusan újraigazítja az aktív illesztést.",
|
||||
"calibration_status_standard": "Normál összeigazítás",
|
||||
"calibration_status_standard_description": "Rendelkezik aktív illesztéssel. Ha eltolódást/elcsúszást érzékel, szükség lehet az ismételt összehangolásra.",
|
||||
|
||||
// space here refers to a tracking space / tracking system.
|
||||
// reference can be translated as "referencia", or "viszonyítási". They mean the same thing, although "viszonyítási" carries a bit more meaning of "comparison", and is less of a loanword. When in the context of positioning stuff, they act very similarly, but in this case the latter fits more.
|
||||
// target is commonly translated as "cél", but that means "goal". I assume that here, it means "the device to be calibrated/aligned with [the reference device]", and that translates to "Illesztendő" (or "igazítandó").
|
||||
"reference_device": "Viszonyítási eszköz", // assuming that the reference_device is treated as standard base, and the target_device's universe is the one on which the basis transformation happens, and not the other way around.
|
||||
"reference_device_description": "Ez az eszköz amivel az összehangolás történik. Általában a VR-szemüveg vagy egy kontroller.",
|
||||
"target_device": "Illesztendő eszköz",
|
||||
"target_device_description": "Ezen eszköz segítségével lesz a többi követőeszköz és/vagy kontroller összehangolva a viszonyítási eszközzel.",
|
||||
"select_reference_device": "Viszonyítási eszköz kiválasztása",
|
||||
"select_target_device": "Illesztendő eszköz kiválasztása",
|
||||
|
||||
"identify_selected_devices": "Kiválasztott eszközök azonosítása (villogó LED-es jelzőfény vagy rezgés)",
|
||||
"identify_auto_detect_devices": "Eszközök automatikus észlelése",
|
||||
"calibration_error_reference_hmd_missing": "A(z) „{0}” követőrendszer illesztendő eszköze nem található. Előfordulhat, hogy újra el kell végeznie az összehangolást.", /* 0 : tracking system name, eg SteamVR Tracking*/
|
||||
"calibration_warning_stage_tracking_disabled": "A játéktér-alapú követés ('Stage Tracking') ki van kapcsolva! Az optimális működés érdekében nyissa meg a VR-szemüvegén futó Virtual Desktop menüjében a „Streaming” fület, és engedélyezze a „Center to play area (Stage Tracking)” opciót.",
|
||||
"calibration_warning_stage_tracking_disabled_ignore_button": "Ne mutassa többet",
|
||||
|
||||
"calibration_action_start": "Normál összeigazítás indítása",
|
||||
"calibration_action_clear": "Illesztés törlése",
|
||||
"calibration_action_continuous": "Folyamatos szinkronizáció",
|
||||
"calibration_action_edit": "Illesztés szerkesztése",
|
||||
"save_calibration_profile": "Illesztési profil megjegyzése",
|
||||
|
||||
"calibration_progress": "Összehangolás haladása",
|
||||
"calibration_info_move_around_insufficient_samples": "Tartsa össze a kiválasztott eszközöket, és sétáljon körbe a játéktérben miközben finoman együtt forgatja őket nyolcasokat leírva a levegőben.",
|
||||
|
||||
"calibration_speed": "Összeigazítás sebessége",
|
||||
"calibration_speed_description": "Azt állítja, hogy mennyi időbe kerül az összeigazítás végrehajtása. Általában a hosszabb összeigazítások pontosabbak.",
|
||||
"calibration_speed_fast": "Gyors",
|
||||
"calibration_speed_slow": "Lassú",
|
||||
"calibration_speed_very_slow": "Csigalassú",
|
||||
|
||||
/* Editing calibrations */
|
||||
"edit_calibration_rotation": "Forgatás",
|
||||
"edit_calibration_position": "Pozíció (m)",
|
||||
"edit_calibration_yaw": "Legyezőmozgás ('Yaw')", //The official equivalents to Yaw, Pitch, Roll, are rarely used and not instantly intuitive to everyone, they may come off as weird. So it may be advised to keep the english words in place. Also, "legyezőmozgás" could be "elfordulás" but that's also unofficial.
|
||||
"edit_calibration_pitch": "Bólintás ('Pitch')", //yes these are the actual words here. this is not a joke. The official word for yaw is basically "fan movement" ("fan" as in the handheld folding one)
|
||||
"edit_calibration_roll": "Dőlés ('Roll')", //Like this is just so goofy. Why has no one yet invented better words for these? Like come on lmao..
|
||||
"edit_calibration_x": "X",
|
||||
"edit_calibration_y": "Y",
|
||||
"edit_calibration_z": "Z",
|
||||
"edit_calibration_scale": "Átméretezés (m)",
|
||||
|
||||
"continuous_hide_tracker": "Kiválasztott illesztendő követőeszköz elrejtése más alkalmazások elől",
|
||||
"continuous_relative_calibration": "Relatív illesztés engedélyezése",
|
||||
"continuous_relative_calibration_description": "Relatívvá teszi az illesztést a viszonyítási eszközhöz (tipikusan a VR-szemüveghez), így az minden képkockánál frissül anélkül, hogy meg kéne ismételni az összehangolást. Ez csak folyamatos szinkronizáció esetében lehetséges.",
|
||||
|
||||
/* HMD names for Virtual Desktop */
|
||||
/* Virtual desktop lies that it's a Quest 2/3 on most headsets, so we have to substitute the real HMD name ourselves. you generally should
|
||||
NOT have to change these! but some headsets have different names in certain regions (eg PFD MR is YVR MR in China) */
|
||||
"virtual_desktop_hmd_none": "Ismeretlen", /* should never appear but you never know*/
|
||||
"virtual_desktop_hmd_gearvr": "Samsung Gear VR",
|
||||
"virtual_desktop_hmd_oculus_go": "Oculus Go",
|
||||
"virtual_desktop_hmd_oculus_quest_1": "Oculus Quest",
|
||||
"virtual_desktop_hmd_oculus_quest_2": "Oculus Quest 2",
|
||||
"virtual_desktop_hmd_meta_quest_pro": "Meta Quest Pro",
|
||||
"virtual_desktop_hmd_pico_4": "Pico 4",
|
||||
"virtual_desktop_hmd_meta_quest_3": "Meta Quest 3",
|
||||
"virtual_desktop_hmd_meta_quest_3s": "Meta Quest 3S",
|
||||
"virtual_desktop_hmd_pico_4_ultra": "Pico 4 Ultra",
|
||||
"virtual_desktop_hmd_samsung_galaxy_xr": "Samsung Galaxy XR",
|
||||
"virtual_desktop_hmd_play_for_dream_mr": "Play For Dream MR",
|
||||
|
||||
/* vertical tabs on the left */
|
||||
"tab_page_calibration": "Összehangolás",
|
||||
"tab_page_graphs": "Grafikonok",
|
||||
"tab_page_base_station_management": "Bázisállomások",
|
||||
"tab_page_settings": "Beállítások",
|
||||
"tab_page_debug": "Hibakeresés",
|
||||
"tab_page_learn": "Súgó",
|
||||
"tab_page_about": "Névjegy",
|
||||
|
||||
/* graphs */
|
||||
"graphs_title": "Grafikonok",
|
||||
|
||||
/* base stations */
|
||||
"base_stations_title": "Bázisállomás-kezelő",
|
||||
"base_stations_no_bluetooth": "Nem sikerült találni alkalmas Bluetooth eszközt. Csatlakoztasson egy BLE kompatibilis Bluetooth antennát, hogy kezelni tudja a bázisállomásokat.",
|
||||
"base_stations_none_found": "Nem található bázisállomás. Amennyiben ki vannak helyezve, ellenőrizze a tápellátásukat!",
|
||||
"base_stations_header_info": "{0}", // 0: station ID (LHB XXXXXXXX) / nickname
|
||||
"base_stations_warning_collision": "Csatornaütközés észlelve! Ez problémákat fog okozni a követésben. Minden bázisállomásnak egyedi csatornát kell használnia.",
|
||||
"base_stations_state_sleep": "Alvó üzemmód",
|
||||
"base_stations_state_standby": "Készenléti mód",
|
||||
"base_stations_state_active": "Aktív",
|
||||
"base_stations_state_unknown": "Ismeretlen állapot",
|
||||
"base_stations_state_faulty": "Meghibásodott",
|
||||
"base_stations_channel_select_label": "Bázisállomás csatornájának kiválasztása:",
|
||||
"base_stations_active_channel": "Csatorna {0}", // 0: channel number (1-15) ; eg Channel 12
|
||||
"base_stations_nickname": "Eszköznév", //As an alternative, "Becenév". (more like "Gúnynév" haha)
|
||||
|
||||
/* actions */
|
||||
"base_stations_action_wake_all": "Összes felébresztése",
|
||||
"base_stations_action_sleep_all": "Összes altatása",
|
||||
"base_stations_action_fix_collisions": "Csatornaütközések orvoslása",
|
||||
"base_stations_btn_wake": "Ébresztés",
|
||||
"base_stations_btn_standby": "Készenlét",
|
||||
"base_stations_btn_sleep": "Altatás",
|
||||
"base_stations_btn_edit": "Szerkesztés",
|
||||
"base_stations_btn_save": "Elmentés",
|
||||
|
||||
"base_station_power_management": "Bázisállomás-állapotkezelés",
|
||||
"base_stations_power_mgmt_enable": "Állapotkezelés engedélyezése *",
|
||||
"base_stations_power_mgmt_enable_description_standby": "A bekapcsolt bázisállomások készenléti üzemmódba váltanak amikor a SteamVR nincs használatban, és felébrednek amikor a SteamVR elindul.",
|
||||
"base_stations_power_mgmt_enable_description_sleep": "A bekapcsolt bázisállomások alvó üzemmódba váltanak amikor a SteamVR nincs használatban, és felébrednek amikor a SteamVR elindul.",
|
||||
"base_stations_power_mgmt_on_startup": "Bázisállomások bekapcsolása a SteamVR indulásakor",
|
||||
"base_stations_power_mgmt_on_startup_description": "A kikapcsolt Bázisállomások felébrednek amikor a SteamVR elindul.",
|
||||
"base_stations_power_mgmt_on_shutdown": "Bázisállomások kikapcsolása a SteamVR bezárásakor",
|
||||
"base_stations_power_mgmt_on_shutdown_description": "A bekapcsolt Bázisállomások kikapcsolnak amikor a SteamVR nincs használatban.",
|
||||
"base_stations_power_mgmt_standby": "Készenléti mód",
|
||||
"base_stations_power_mgmt_standby_description": "Csak a lézereiket kapcsolják ki a bázisállomások, ezzel lehetővé téve a gyorsabb felébredést amikor a SteamVR elindul. Mivel ez az 1.0-s (és egyes 2.0-s) bázisállomásokon nem elérhető, esetükben az alvó üzemmód lép érvénybe.",
|
||||
"base_stations_power_mgmt_sleep": "Alvó üzemmód",
|
||||
"base_stations_power_mgmt_sleep_description": "A bázisállomások a lézereiket és a motorjaikat is kikapcsolják.",
|
||||
"base_stations_power_mgmt_warning": "* NEM AJÁNLOTT közös játékterekhez, amelyeket több SteamVR-felhasználó is használhat egyszerre.",
|
||||
|
||||
/* settings */
|
||||
"settings_title": "Beállítások",
|
||||
"settings_advanced": "Haladó beállítások",
|
||||
"settings_advanced_description": "További beállítások és finomhangolási lehetőségek megjelenítése tapasztalt felhasználók számára.",
|
||||
"settings_calibrate_motion_vectors": "Mozgásvektorok igazítása",
|
||||
"settings_calibrate_motion_vectors_description": "Javítja a mozgásjóslást a közvetlenebb követés érdekében. Hatással lehet a fizika-alapú játékokra.",
|
||||
"settings_autofix_playspace_jumps": "Játéktér-ugrások automatikus korrigálása",
|
||||
"settings_autofix_playspace_jumps_description": "Megkísérli a játéktér hirtelen elmozdulásainak észlelését és kijavítását.",
|
||||
"settings_enforce_minimum_rotation_variance": "Minimális forgási eltérés megkövetelése",
|
||||
"settings_enforce_minimum_rotation_variance_description": "Automatikusan kiszűri a hasonló orientációjú mintákat az illesztés minőségének növelése érdekében.",
|
||||
"settings_locale": "Nyelv",
|
||||
"settings_reset": "Beállítások visszaállítása",
|
||||
"settings_reset_description": "Visszaállítja az összes beállítást alapértelmezettre. Ez nem visszavonható.",
|
||||
"settings_reset_confirm": "Ez egy visszavonhatatlan módosítás. Biztosan folytatja?",
|
||||
"settings_reset_yes": "Igen",
|
||||
"settings_reset_no": "Nem",
|
||||
|
||||
/* about */
|
||||
"about_title": "Névjegy",
|
||||
"about_description": "A Space Calibrator egy ingyenes és nyílt forráskódú eszköz, amely segíti különböző gyártók eszközeinek együttes működtetését SteamVR-on belül.",
|
||||
"about_view_source_info": "A forráskód megtekinthető a GitHub tárolón.",
|
||||
"about_contributors_title": "Fejlesztők",
|
||||
"about_contributors_description": "A Space Calibrator-t az alábbi emberek segítsége teszi lehetővé:",
|
||||
"about_translators_title": "Fordítók",
|
||||
"about_translators_description": "A Space Calibrator-t az alábbi emberek fordították:",
|
||||
"about_licenses_title": "Licencek",
|
||||
"about_licenses_description": "Ez a program az MIT licenc alatt áll. Más függőségek más licencek alatt állnak, további információkért tekintse meg az alábbi licenceket.",
|
||||
"about_link_github": "GitHub tároló",
|
||||
"about_link_discord": "Discord szerver",
|
||||
"about_link_logs_dir": "Naplózási mappa",
|
||||
|
||||
/* self-troubleshooting */
|
||||
/* found another driver loaded in SteamVR -> legacy ipc connection successful */
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_title": "Már jelen van a Space Calibrator egy másik példánya is.",
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_description": "A Space Calibrator egy másik verziója jelenleg is fut, ami ütközést okoz. Ezen alkalmazás használatához el kell távolítani az ütköző példányt. Kívánja ezt automatikusan elvégezni?",
|
||||
/* found legacy overlay key registered (non steam) */
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_title": "Már jelen van a Space Calibrator egy másik példánya is.",
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_description": "Telepítve van már egy más verziószámú Space Calibrator példány. Szeretné eltávolítani?",
|
||||
"troubleshoot_action_yes": "Igen",
|
||||
"troubleshoot_action_no": "Nem",
|
||||
"troubleshoot_action_quit": "Kilépés",
|
||||
|
||||
/* tutorial */
|
||||
"learn_title": "Súgó",
|
||||
"learn_card_standard_calibration": "Normál összeigazítás",
|
||||
"learn_card_standard_calibration_description": "Hogyan kell két eszközt összehangolni?",
|
||||
"learn_card_continuous_calibration": "Folyamatos szinkronizáció",
|
||||
"learn_card_continuous_calibration_description": "Az illesztés elcsúszásának elkerülése gyakori, és automatikus újraigazítással.",
|
||||
"learn_card_base_station_management": "Bázisállomás-kezelés",
|
||||
"learn_card_base_station_management_description": "Bázisállomások vezeték nélküli vezérlése.",
|
||||
"learn_card_ui_tour": "Felhasználói felület áttekintése",
|
||||
"learn_card_ui_tour_description": "A Space Calibrator alkalmazás ismertetése.",
|
||||
"learn_action_back": "Vissza",
|
||||
|
||||
/* these are kinda like a messed up wiki because its inlined into the app like this, oh well lol */
|
||||
"learn_page_standard_desc": "Normál összeigazítás során két különböző követőrendszer összehangolásra kerül, a követési tereik szinkronba kerülnek. Biztosítja a megfelelő együttes működést, és lehetővé teszi különféle VR-eszközök egyidejű használatát ugyanabban a fizikai játéktérben.",
|
||||
"learn_page_standard_select_devices_title": "Eszközök kiválasztása",
|
||||
"learn_page_standard_select_devices_desc": "Mielőtt elkezdené, ki kell választani az alkalmazásban, hogy mely két eszközt szeretné használni összeigazításhoz.",
|
||||
"learn_page_standard_ref_device": "Viszonyítási eszköz: Ez az eszköz szolgál majd támaszpontként, amelynek a követési rendszeréhez igazítva lesz a másik. Általában a VR-szemüveg, vagy egy ahhoz tartozó kontroller.",
|
||||
"learn_page_standard_target_device": "Illesztendő eszköz: Az az eszköz, amelynek a követési tere hozzá lesz igazítva a másikéhoz, mivel alapból nem illeszkedik a kettő. Általában egy egyszerű követőeszköz ('Tracker'), vagy ahhoz hasonló.",
|
||||
"learn_page_standard_perform_title": "Az összeigazítás folyamata",
|
||||
"learn_page_standard_perform_step1": "Tartsa össze mindkét eszközt határozottan, egy kézben. Szorosan fogja őket, hogy az összeigazítás során ne mozduljanak el egymáshoz képest.",
|
||||
"learn_page_standard_perform_step2": "Kattintson a „Normál összeigazítás” gombra az összehangolás megkezdéséhez.",
|
||||
"learn_page_standard_perform_step3": "Sétáljon körbe a játéktérben, miközben a két eszközt együtt mozgatja, nyolcasokat leírva a levegőben, ahogy ez az alábbi ábrán is látható.",
|
||||
"learn_page_standard_speeds_title": "Összeigazítás sebessége",
|
||||
"learn_page_standard_speeds_desc": "Lehetőség van az összeigazítás sebességének állítására. Ez arra van hatással, hogy mennyi mozgatási minta szükséges az illesztés kiszámolásához. A több begyűjtött minta általában pontosítani tudja az illesztést.",
|
||||
"learn_page_standard_speed_fast": "Gyors: Kevesebb időt vesz igénybe az összehangolás. Ronthat az illesztés minőségén.",
|
||||
"learn_page_standard_speed_slow": "Lassú / Csigalassú: Több időbe kerül az összeigazítás, viszont általában pontosabb illesztést eredményez.",
|
||||
"learn_page_standard_completion_note": "Amint a folyamatjelző sáv végigér, az eszközeinek azonnal illeszkedniük kell a fizikai térhez. Ha ez mégsem történt meg, akkor próbálja meg újra az összeigazítást.",
|
||||
"learn_page_standard_drift_title": "Megjegyzés az elcsúszódásról",
|
||||
"learn_page_standard_drift_desc": "Idővel az eszközei követése elcsúszhat, ezzel elrontva az illesztésüket. Ha ez bekövetkezik, újra el kell végeznie az összehangolásukat. Ha erre gyakran szükség van, ajánlott megfontolni a „Folyamatos Szinkronizáció” használatát.",
|
||||
|
||||
"learn_page_continuous_desc1": "Ha azt érzékeli, hogy az eszközei lassacskán elcsúsznak, pozíciójuk lassan eltolódik vagy elfordul használat közben, akkor erre megoldást nyújthat a folyamatos szinkronizáció.",
|
||||
"learn_page_continuous_desc2": "Ahelyett, hogy időnként meg kellene állnia, hogy kézileg újra összeigazítsa a követőrendszereket, folyamatos szinkronizációval az alkalmazás automatikusan szinkronban tudja tartani a követési tereket.",
|
||||
"learn_page_continuous_note_title": "Megjegyzés",
|
||||
"learn_page_continuous_note_desc": "Ezen funkció használatához szükséges egy, a VR-szemüvegre felszerelt külön követőeszköz.",
|
||||
"learn_page_continuous_desc3": "A folyamatos szinkronizáció megpróbálja a követési rendszerek összeigazítását gyakran és automatikusan megismételni, ezzel megszüntetve mindenféle elcsúszást. Megfelelő beállítás után már szinte sose kell bajlódnia az öszehangolással.",
|
||||
"learn_page_continuous_setup_instructions": "A folyamatos szinkronizáció beállításához először válassza ki a két eszközt, mint ahogy ez a normál összeigazításnál is el lett magyarázva. Általában viszonyítási eszköznek a VR-szemüveget, illesztendő eszköznek pedig a felszerelt követőeszközt kell kijelölni. Az összehangolás megkezdéséhez kattintson a „Folyamatos Szinkronizáció” gombra. Beletelhet egy kis időbe, amíg a kezdeti illesztés számolása befejeződik, közben sétáljon körbe a játéktérben, hogy az alkalmazás elegendő mintát gyűjthessen!",
|
||||
"learn_page_continuous_should_use_title": "Mikor használjunk folyamatos szinkronizációt?",
|
||||
"learn_page_continuous_should_use_standard": "Használja a „Normál összeigazítás”-t, ha nem rendelkezik külön követőeszközzel, amit rá tudna szerelni a VR-szemüvegére, nem tölt sok időt a virtuális valóságban, vagy nem bánja, hogy időnként újra el kell végeznie az összeigazítást.",
|
||||
"learn_page_continuous_should_use_continuous": "Használjon „Folyamatos Szinkronizáció”-t, ha gyakorlatilag soha sem szeretne bajlódni az összehangolással a jövőben. Ajánlott, ha sok időt tölt a virtuális valóságban, vagy ha használat közben idővel jelentős mértékű elcsúszást érzékel.",
|
||||
"learn_page_continuous_physical_setup_title": "Követőeszköz felszerelése VR-szemüvegre",
|
||||
"learn_page_continuous_physical_setup_desc1": "A folyamatos szinkronizáció használatához szükséges egy külön követőeszköz, melyet a VR-szemüvegre kell rögzíteni. Attól függően, hogy milyen VR-szemüveget és követőeszközt használ, lehet hogy léteznek már erre különböző megoldások. Gyakran található erre készített és letölthető 3D-nyomtatható modell az interneten, vagy körbe is lehet kérdezősködni a közösségben, hogy mások hogyan oldották meg.",
|
||||
"learn_page_continuous_physical_setup_desc2": "Felszerelés után a követőnek biztonságosan rögzítve kell lennie a VR-szemüvegre. Nem szabad billegnie, forognia, vagy remegnie. Minél biztosabb a rögzítés, annál biztonságosabb, és ráadásul stabilabb is lesz a szinkronizáció.",
|
||||
|
||||
"learn_page_basestation_desc": "A Space Calibrator lehetővé teszi SteamVR bázisállomások („világítótornyok”, „szenzorok”, 'Base Stations', 'Lighthouses') vezérlését, ha rendelkezésre áll egy erre alkalmas (BLE kompatibilis) Bluetooth antenna.",
|
||||
"learn_page_basestation_1_title": "1.0-s Bázisállomás modellek",
|
||||
"learn_page_basestation_1_desc": "Csak a ki- és be kapcsolást támogatják. A csatornák vezeték nélküli beállítása nem támogatott, a hátoldalukon lévő fizikai gombot kell megnyomni csatornaváltáshoz.",
|
||||
"learn_page_basestation_2_title": "2.0-s Bázisállomás modellek",
|
||||
"learn_page_basestation_2_desc1": "A Valve és HTC által egyaránt gyártott 2.0-s modellek kiterjedtebb vezeték nélküli kezelést támogatnak. Bluetooth segítségével állítani lehet a csatornát, és választani az Alvó, Készenléti, vagy Aktív üzemmódok közül. Fontos, hogy minden bázisállomás egyedi csatornát használjon, különben nem fognak működni. A Space Calibrator ezt felismeri, és felajánlja a probléma automatikus orvoslását.",
|
||||
"learn_page_basestation_2_desc2": "Egy 2.0-s bázisállomás csatornájának módosításához lépjen a Bázisállomás-kezelés fülre, válassza ki a vezérelni kívánt bázisállomás szerkesztés gombját, majd kattintson a kívánt csatornára (zölddel jelölve).",
|
||||
"learn_page_basestation_auto_power_title": "Automatikus állapotkezelés",
|
||||
"learn_page_basestation_auto_power_desc": "A „Beállítások” fülön engedélyezhető az automatikus bázisállomás állapotkezelés, amely bekapcsolja a bázisállomásokat amikor a Space Calibrator elindul, és kikapcsolja őket amikor leáll a SteamVR (és a Space Calibrator fut még). Vegye figyelembe, hogy ha Space Calibrator manuálisan bezáródik a SteamVR leállítása előtt, akkor NEM tudja automatikusan kikapcsolni a bázisállomásokat.",
|
||||
|
||||
"learn_page_ui_tour_desc": "A felhasználói felület több fülre van osztva, melyek mindegyike különbőző dolgokat tartalmaz.",
|
||||
"learn_page_ui_tour_calibration_heading": "Összehangolás fül",
|
||||
"learn_page_ui_tour_cal_desc1": "Az összehangolás fülön lehet vezérelni és szerkeszteni az összeigazítást és illesztést.",
|
||||
"learn_page_ui_tour_cal_desc2": "Legfelül található a panel, amelyről le lehet olvasni, hogy van -e aktív illesztés, és ha van, akkor milyen fajta.",
|
||||
"learn_page_ui_tour_cal_desc3": "Alatta kiválaszthatja az összehangoláshoz használni kívánt eszközöket. Felül az összehangolandó követési rendszereket adhatja meg. Ezt követően a bal oldalon válassza ki a támaszpontként szolgáló viszonyítási eszközt, a jobb oldalon pedig azt az eszközt, amelyet ehhez szeretne hozzáigazítani.",
|
||||
"learn_page_ui_tour_cal_desc4": "Alattuk találhatóak az összeigazítás elindítására szolgáló gombok. Ha nem biztos abban, hogy mely módszert használja, további információkért nézzen utána a Súgó megfelelő oldalain, ahol a „Normál összeigazítás”-ról és a „Folyamatos Szinkronizáció”-ról lehet tájékozódni.",
|
||||
"learn_page_ui_tour_cal_desc5": "Az oldal alján található számos további beállítás amelyekkel szabályozni lehet az összeigazítást. Közülük pár alapértelmezetten el van rejtve, felfedésükhöz engedélyezze a „Haladó beállítások”-at a Beállítások fülön.",
|
||||
"learn_page_ui_tour_base_stations_heading": "Bázisállomás-kezelés fül",
|
||||
"learn_page_ui_tour_bs_desc": "Itt lehetőség nyílik Bázisállomások távoli vezérlésére. Ezen funkció működéséhez szükséges egy erre alkalmas (BLE kompatibilis) Bluetooth antenna. Megfelelő beállítás esetén ritkán kell hozzányúlni ezen fülhöz.",
|
||||
"learn_page_ui_tour_settings_heading": "Beállítások fül",
|
||||
"learn_page_ui_tour_settings_desc1": "Itt be lehet állítani pár, a programra globális kihatással bíró opciót. Ide tartoznak a haladó beállítások, a bázisállomás-kezeléssel kapcsolatos beállítások, és a felhasználói felület nyelve.",
|
||||
"learn_page_ui_tour_settings_desc2": "Az alkalmazás pár funkciójának felfedéséhez engedélyeznie kell a „Haladó beállítások”-at. Ezeket csak akkor módosítsa, ha ért hozzá, és pontosan tudja, mit csinálnak.",
|
||||
|
||||
/* Names of the various languages one may select. Shown in settings */
|
||||
"languages_en_GB": "Angol (brit)",
|
||||
"languages_en_US": "Angol (amerikai)",
|
||||
"languages_fr": "Francia",
|
||||
"languages_it": "Olasz",
|
||||
"languages_de": "Német",
|
||||
"languages_nl": "Holland",
|
||||
"languages_es_ES": "Spanyol (spanyolországi)",
|
||||
"languages_es_US": "Spanyol (latin-amerikai)",
|
||||
"languages_da": "Dán",
|
||||
"languages_sv": "Svéd",
|
||||
"languages_fi": "Finn",
|
||||
"languages_no": "Norvég",
|
||||
"languages_bg": "Bolgár",
|
||||
"languages_pl": "Lengyel",
|
||||
"languages_cs": "Cseh",
|
||||
"languages_el": "Görög",
|
||||
"languages_hu": "Magyar",
|
||||
"languages_pt_PT": "Portugál (portugáliai)",
|
||||
"languages_pt_BR": "Portugál (brazil)",
|
||||
"languages_ro": "Román",
|
||||
"languages_ru": "Orosz",
|
||||
"languages_tr": "Török",
|
||||
"languages_uk": "Ukrán",
|
||||
"languages_zh_HANS": "Kínai (egyszerűsített)",
|
||||
"languages_zh_HANT": "Kínai (hagyományos)",
|
||||
"languages_ja": "Japán",
|
||||
"languages_ko": "Koreai",
|
||||
"languages_th": "Thai",
|
||||
"languages_vi": "Vietnámi",
|
||||
"languages_system": "Rendszer nyelve"
|
||||
}
|
||||
@@ -0,0 +1,278 @@
|
||||
{
|
||||
"app_title": "{0} {1}", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"app_title_vr": "{0} {1} - chiudere la sovrapposizione del VR per utilizzare il mouse", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"tracking_system_no_systems": "Nessun dispositivo di tracking presente. Per continuare per favore accendere un dispositivo.", /* Should never be hit but you never know */
|
||||
|
||||
"error_unknown_catastrophic": "Qualcosa è andato catastroficamente storto! La preghiamo di inoltrare l'errore allo sviluppatore o su GitHub o Steam Discussions così che possa venir controllato.",
|
||||
"ipc_unavailable": "Fallito a connettere il driver di Space Calibrator SteamVR. La preghiamo di verificare l'integrità dei file in Proprietà -> File Installati, o reinstallare l'applicazione.",
|
||||
"steamvr_unavailable": "Fallito a connettersi a SteamVR.",
|
||||
"vr_troubleshooting_hmd_not_found": "La preghiamo di connettere il tuo VR headset e di avviare prima SteamVR",
|
||||
"vr_troubleshooting_connect_steamlink": "La preghiamo di avviare SteamLink nel tuo VR headset e di avviare prima SteamVR.",
|
||||
"vr_troubleshooting_generic": "La preghiamo di connettere il VR headset e di avviare prima SteamVR ({0} {1})", /* 0 : SteamVR init error (eg 108), 1 : SteamVR init error string (eg Headset not connected) - this string is provided by Steam. */
|
||||
|
||||
"calibration_title": "Calibrazione",
|
||||
"calibration_count_none": "Nessuna Calibrazione. La preghiamo di creare una nuova calibrazione per iniziare.", // Shown when there are no calibrations active
|
||||
"calibration_new": "Nuova Calibrazione",
|
||||
"calibration_delete": "Cancella Calibrazione",
|
||||
"calibration_next": "Prossima Calibrazione",
|
||||
"calibration_previous": "Calibrazione Precedente",
|
||||
|
||||
"calibration_status_none": "Nessuna Calibrazione attiva",
|
||||
"calibration_status_none_description": "La preghiamo di selezionare un paio di dispositivi e di calibrare per iniziare.",
|
||||
"calibration_status_edit": "Modificando calibrazione",
|
||||
"calibration_status_edit_description": "Modificando la calibrazione attuale.",
|
||||
"calibration_status_continuous": "Calibrazione Continua",
|
||||
"calibration_status_continuous_description": "È presente una calibrazione attiva. Utilizza un tracker montato per ricalibrare automaticamente ogni paio di secondi.",
|
||||
"calibration_status_standard": "Calibrazione Standard",
|
||||
"calibration_status_standard_description": "È presente una calibrazione attiva. Potrebbe esser necessario ricalibrare all'occorrenza di drifting.",
|
||||
|
||||
// space here refers to a tracking space / tracking system.
|
||||
"reference_device": "Dispositivo di riferimento",
|
||||
"reference_device_description": "Questo è il dispositivo con cui stai calibrando, solitamente un VR headset o un controller.",
|
||||
"target_device": "Dispositivo di destinazione",
|
||||
"target_device_description": "Questo dispositivo verrà utilizzato per allineare i tuoi tracker o controller.",
|
||||
"select_reference_device": "Selezionare dispositivo di riferimento",
|
||||
"select_target_device": "Selezionare dispositivo di destinazione",
|
||||
|
||||
"identify_selected_devices": "Identificare i dispositivi selezionati (fa lampeggiare i LED o vibra)",
|
||||
"identify_auto_detect_devices": "Auto-identifica dispositivi",
|
||||
"calibration_error_reference_hmd_missing": "Ingrado di trovare il dispositivo di destinazione dal sistema di tracking \"{0}\". È possibile che sia necessario ricalibrare.", /* 0 : tracking system name, eg SteamVR Tracking*/
|
||||
"calibration_warning_stage_tracking_disabled": "Stage tracking è disabilitato! Per un'esperienza migliore, aprire il menù del Desktop Virtuale del tuo Quest, andare nella casella Streaming e abilitare \"Centrare all'area di gioco (Stage Tracking)\".",
|
||||
"calibration_warning_stage_tracking_disabled_ignore_button": "Non mostrare più questa notifica",
|
||||
|
||||
"calibration_action_start": "Calibrazione Standard",
|
||||
"calibration_action_clear": "Svuota Calibrazione",
|
||||
"calibration_action_continuous": "Calibrazione Continua",
|
||||
"calibration_action_edit": "Modifica Calibrazione",
|
||||
"save_calibration_profile": "Salva Profilo",
|
||||
|
||||
"calibration_progress": "Progresso della Calibrazione",
|
||||
"calibration_info_move_around_insufficient_samples": "Tieni insieme i tuoi dispositivi scelti, poi cammina intorno la tua area di gioco, ruotando i dispositivi in una manovra a figura otto.",
|
||||
|
||||
"calibration_speed": "Velocità di Calibrazione",
|
||||
"calibration_speed_description": "Quanto tempo impiega la calibrazione. Una calibrazione più lenta tende ad essere più precisa.",
|
||||
"calibration_speed_fast": "Veloce",
|
||||
"calibration_speed_slow": "Lenta",
|
||||
"calibration_speed_very_slow": "Molto Lenta",
|
||||
|
||||
/* Editing calibrations */
|
||||
"edit_calibration_rotation": "Rotazione",
|
||||
"edit_calibration_position": "Posizione (m)",
|
||||
"edit_calibration_yaw": "Yaw",
|
||||
"edit_calibration_pitch": "Pitch",
|
||||
"edit_calibration_roll": "Roll",
|
||||
"edit_calibration_x": "X",
|
||||
"edit_calibration_y": "Y",
|
||||
"edit_calibration_z": "Z",
|
||||
"edit_calibration_scale": "Scala (m)",
|
||||
|
||||
"continuous_hide_tracker": "Nascondi il tracker di riferimento dalle app",
|
||||
"continuous_relative_calibration": "Attiva calibrazione relativa",
|
||||
"continuous_relative_calibration_description": "Rende la calibrazione relativa al dispositivo di destinazione (tipicamente l'headset) così che venga aggiornato ad ogni frame senza bisogno di venir ricalibrato. Ciò NECESSITA la Calibrazione Continua.",
|
||||
|
||||
/* HMD names for Virtual Desktop */
|
||||
/* Virtual desktop lies that it's a Quest 2/3 on most headsets, so we have to substitute the real HMD name ourselves. you generally should
|
||||
NOT have to change these! but some headsets have different names in certain regions (eg PFD MR is YVR MR in China) */
|
||||
"virtual_desktop_hmd_none": "Nessuno", /* should never appear but you never know*/
|
||||
"virtual_desktop_hmd_gearvr": "Samsung Gear VR",
|
||||
"virtual_desktop_hmd_oculus_go": "Oculus Go",
|
||||
"virtual_desktop_hmd_oculus_quest_1": "Oculus Quest",
|
||||
"virtual_desktop_hmd_oculus_quest_2": "Oculus Quest 2",
|
||||
"virtual_desktop_hmd_meta_quest_pro": "Meta Quest Pro",
|
||||
"virtual_desktop_hmd_pico_4": "Pico 4",
|
||||
"virtual_desktop_hmd_meta_quest_3": "Meta Quest 3",
|
||||
"virtual_desktop_hmd_meta_quest_3s": "Meta Quest 3S",
|
||||
"virtual_desktop_hmd_pico_4_ultra": "Pico 4 Ultra",
|
||||
"virtual_desktop_hmd_samsung_galaxy_xr": "Samsung Galaxy XR",
|
||||
"virtual_desktop_hmd_play_for_dream_mr": "Play For Dream MR",
|
||||
|
||||
/* vertical tabs on the left */
|
||||
"tab_page_calibration": "Calibrazione",
|
||||
"tab_page_graphs": "Grafici",
|
||||
"tab_page_base_station_management": "Base Stations",
|
||||
"tab_page_settings": "Impostazioni",
|
||||
"tab_page_debug": "Debug",
|
||||
"tab_page_learn": "Impara",
|
||||
"tab_page_about": "A Riguardo",
|
||||
|
||||
/* graphs */
|
||||
"graphs_title": "Grafici",
|
||||
|
||||
/* base stations */
|
||||
"base_stations_title": "Gestione Base Stations",
|
||||
"base_stations_no_bluetooth": "Fallito a trovare un adattatore Bluetooth valido. La preghiamo di connettere un dispositivo Bluetooth compatibile con BLE per poter utilizzare la Gestione Base Stations.",
|
||||
"base_stations_none_found": "Nessuna Base Station rilevata. Se in possedimento, assicurarsi che siano collegate.",
|
||||
"base_stations_header_info": "{0}", // 0: station ID (LHB XXXXXXXX) / nickname
|
||||
"base_stations_warning_collision": "Collisione tra canali rilevata! Questo causerà problemi di tracking. Ogni Base Station dovrebbe utilizzare un canale proprio.",
|
||||
"base_stations_state_sleep": "Sospensione",
|
||||
"base_stations_state_standby": "Standby",
|
||||
"base_stations_state_active": "Attivo",
|
||||
"base_stations_state_unknown": "Sconosciuto",
|
||||
"base_stations_state_faulty": "Difettoso",
|
||||
"base_stations_channel_select_label": "Selezionare un canale Base Station:",
|
||||
"base_stations_active_channel": "Canale {0}", // 0: channel number (1-15) ; eg Channel 12
|
||||
"base_stations_nickname": "Soprannome",
|
||||
|
||||
/* actions */
|
||||
"base_stations_action_wake_all": "Attiva Tutto",
|
||||
"base_stations_action_sleep_all": "Sospendi Tutto",
|
||||
"base_stations_action_fix_collisions": "Aggiusta Collisioni tra Canali",
|
||||
"base_stations_btn_wake": "Attiva",
|
||||
"base_stations_btn_standby": "Standby",
|
||||
"base_stations_btn_sleep": "Sospendi",
|
||||
"base_stations_btn_edit": "Modifica",
|
||||
"base_stations_btn_save": "Salva",
|
||||
|
||||
"base_station_power_management": "Gestione dell'Alimentazione Base Station",
|
||||
"base_stations_power_mgmt_enable": "Abilita gestione dell'alimentazione *",
|
||||
"base_stations_power_mgmt_enable_description_standby": "Le base station alimentate vanno in modalità standby quando SteamVR non è in uso, e si riattivano quando SteamVR si accende.",
|
||||
"base_stations_power_mgmt_enable_description_sleep": "Le base station alimentate vanno in modalità sospensione quando SteamVR non è in uso, e si riattivano quando SteamVR si accende.",
|
||||
"base_stations_power_mgmt_on_startup": "Attiva le Base Station quando SteamVR viene aperto",
|
||||
"base_stations_power_mgmt_on_startup_description": "Le base station disattivate vengono attivate quando SteamVR viene aperto.",
|
||||
"base_stations_power_mgmt_on_shutdown": "Spegni le base station quando SteamVR viene chiuso",
|
||||
"base_stations_power_mgmt_on_shutdown_description": "Le base station alimentate vengono spente quando SteamVR non è in uso.",
|
||||
"base_stations_power_mgmt_standby": "Standby",
|
||||
"base_stations_power_mgmt_standby_description": "Le base station disattiveranno solamente i laser per un attivamento più veloce quando viene aperto SteamVR. Questo non è disponibile nei modelli Base Station 1.0 e alcuni modelli Base Station 2.0, e in quei casi verrà utilizzata la modalità di sospensione.",
|
||||
"base_stations_power_mgmt_sleep": "Sospensione",
|
||||
"base_stations_power_mgmt_sleep_description": "I laser e motori delle base station verranno spente.",
|
||||
"base_stations_power_mgmt_warning": "* NON CONSIGLIATO per spazi di tracking condivisi tra più utenti di SteamVR.",
|
||||
|
||||
/* settings */
|
||||
"settings_title": "Impostazioni",
|
||||
"settings_advanced": "Impostazioni avanzate",
|
||||
"settings_advanced_description": "Dimostra impostazioni extra e controlli di ritocco per utenti esperti.",
|
||||
"settings_calibrate_motion_vectors": "Calibra vettori di movimento",
|
||||
"settings_calibrate_motion_vectors_description": "Migliora le predizioni di movimento per un tracking più reattivo. Potrebbe influire giochi con fisica abbondante.",
|
||||
"settings_autofix_playspace_jumps": "Auto-correggi salti nell'area di gioco",
|
||||
"settings_autofix_playspace_jumps_description": "Prova ad individuare automaticamente e correggere salti improvvisi nel tracking dell'area di gioco.",
|
||||
"settings_enforce_minimum_rotation_variance": "Imponi minima variazione di rotazioni",
|
||||
"settings_enforce_minimum_rotation_variance_description": "Automaticamente rifiuta sample che sono rotazionalmente simili per migliorare la qualità di calibrazione.",
|
||||
"settings_locale": "Lingua",
|
||||
"settings_reset": "Ripristina tutte le impostazioni",
|
||||
"settings_reset_description": "Ripristina tutte le impostazioni a quelle predefinite. Questa modifica è permanente e non può essere annullata.",
|
||||
"settings_reset_confirm": "Questa modifica è permanente e non può essere annullata. Sicuri di voler continuare?",
|
||||
"settings_reset_yes": "Sì",
|
||||
"settings_reset_no": "No",
|
||||
|
||||
/* about */
|
||||
"about_title": "A Riguardo",
|
||||
"about_description": "Space Calibrator è un attrezzo gratis e open source che ti permette di utilizzare insieme dispositivi di più fornitori con SteamVR.",
|
||||
"about_view_source_info": "È possibile vedere il source code nel repositorio GitHub.",
|
||||
"about_contributors_title": "Contributori",
|
||||
"about_contributors_description": "Space Calibrator è reso possibile con l'aiuto delle seguenti persone:",
|
||||
"about_translators_title": "Traduttori",
|
||||
"about_translators_description": "Space Calibrator è stato tradotto dalle seguenti persone:",
|
||||
"about_licenses_title": "Licenze",
|
||||
"about_licenses_description": "Questo programma è munito di licenza tramite la MIT license. Altre dipendenze sono munite di licenze grazie ad altre licenze, per più informazioni è possibile consultare le licenze qui sotto.",
|
||||
"about_link_github": "GitHub",
|
||||
"about_link_discord": "Server Discord",
|
||||
"about_link_logs_dir": "Cartella di Registri",
|
||||
|
||||
/* self-troubleshooting */
|
||||
/* found another driver loaded in SteamVR -> legacy ipc connection successful */
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_title": "È già presente un'altra istanza di Space Calibrator",
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_description": "Una versione contrastante di Space Calibrator è attualmente in uso. Avrai bisogno di disinstallarla per poter utilizzare questa applicazione. Vorresti rimuoverla automaticamente?",
|
||||
/* found legacy overlay key registered (non steam) */
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_title": "È già presente un'altra istanza di Space Calibrator",
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_description": "Un'altra versione di Space Calibrator è già presente. Vorresti rimuoverla?",
|
||||
"troubleshoot_action_yes": "Sì",
|
||||
"troubleshoot_action_no": "No",
|
||||
"troubleshoot_action_quit": "Esci",
|
||||
|
||||
/* tutorial */
|
||||
"learn_title": "Impara",
|
||||
"learn_card_standard_calibration": "Calibrazione Standard",
|
||||
"learn_card_standard_calibration_description": "Impara come calibrare un paio di dispositivi.",
|
||||
"learn_card_continuous_calibration": "Calibrazione Continua",
|
||||
"learn_card_continuous_calibration_description": "Calibra frequente per contrastare il drift nel mezzo di una sessione.",
|
||||
"learn_card_base_station_management": "Gestione Base Stations",
|
||||
"learn_card_base_station_management_description": "Controlla le tue Base Station di SteamVR senza cavo.",
|
||||
"learn_card_ui_tour": "UI Tour",
|
||||
"learn_card_ui_tour_description": "Una paronamica dell'interfaccia di Space Calibrator.",
|
||||
"learn_action_back": "Indietro",
|
||||
|
||||
/* these are kinda like a messed up wiki because its inlined into the app like this, oh well lol */
|
||||
"learn_page_standard_desc": "Calibrazione Standard allinea due sistemi di tracking così che i tuoi dispositivi VR funzionano insieme nello stesso spazio di gioco fisico.",
|
||||
"learn_page_standard_select_devices_title": "Seleziona i tuoi dispositivi",
|
||||
"learn_page_standard_select_devices_desc": "Prima di iniziare, l'app ha bisogno di sapere quali due dispositivi vuoi che allinei.",
|
||||
"learn_page_standard_ref_device": "Dispositivo di Riferimento: Questo dispositivo è a cosa stai calibrando, solitamente un controller.",
|
||||
"learn_page_standard_target_device": "Dispositivo di Destinazione: Il dispositivo non allineato con cui stai calibrando, tipicamente un tracker o qualcosa di simile.",
|
||||
"learn_page_standard_perform_title": "Eseguire la Calibrazione",
|
||||
"learn_page_standard_perform_step1": "Tenere entrambi i dispositivi strettamente su una mano. Tienili con più forza possibile così che non si muovano durante il processo di calibrazione.",
|
||||
"learn_page_standard_perform_step2": "Clicca il pulsante Calibrazione Standard per iniziare a calibrare.",
|
||||
"learn_page_standard_perform_step3": "Spostati attorno la tua stanza mentre muovi i tuoi dispositivi in una manovra a figura otto, come qua sotto illustrato.",
|
||||
"learn_page_standard_speeds_title": "Velocità di Calibrazione",
|
||||
"learn_page_standard_speeds_desc": "Puoi opzionalmente alterare la velocità di calibrazione per influenzare quanto movimento è richiesto. Più movimento tende a migliorare la qualità di calibrazione.",
|
||||
"learn_page_standard_speed_fast": "Veloce: Impiega meno tempo, ma può risultare in calibrazioni di qualità più scarsa.",
|
||||
"learn_page_standard_speed_slow": "Lenta / Molto Lenta: Impiega di più, e tende a risultare in calibrazioni più precise.",
|
||||
"learn_page_standard_completion_note": "Una volta che la barra di progresso si riempe del tutto, i tuoi dispositivi dovrebbero istantaneamente allinearsi in VR. Se questo non accade, prova a calibrare di nuovo.",
|
||||
"learn_page_standard_drift_title": "Una Nota a Riguardo del Drift",
|
||||
"learn_page_standard_drift_desc": "Col passare del tempo, I tuoi dispositivi possono iniziare a driftare, rompendo la calibrazione. Se questo accade, dovrai ricalibrare per correggerlo. Se devi fare ciò frequentemente, dovresti considerare l'utilizzo della Calibrazione Continua.",
|
||||
|
||||
"learn_page_continuous_desc1": "Se noti che i tuoi dispositivi iniziano lentamente a muoversi, rotearsi, o a driftare a caso durante una sessione di gioco, la Calibrazione Continua è una soluzione a questi problemi.",
|
||||
"learn_page_continuous_desc2": "Invece di forzare a fermarti e di calibrare manualmente ogni po' di tempo, la Calibrazione Continua mantiene in sintonia automaticamente il tuo tracking dietro le quinte mentre giochi.",
|
||||
"learn_page_continuous_note_title": "Nota",
|
||||
"learn_page_continuous_note_desc": "Un tracker dedicato montato sul tuo headset è NECESSARIO per usare questa funzione.",
|
||||
"learn_page_continuous_desc3": "La Calibrazione Continua prova a ricalibrare i tuoi dispositivi frequentemente per eliminare al più possiible il drift. Tende a rendere la calibrazione una cosa a cui neanche pensi una volta setuppata.",
|
||||
"learn_page_continuous_setup_instructions": "Per setuppare la Calibrazione Continua, prima seleziona i tuoi dispositivi come spiegato nella pagina della Calibrazione Standard. Vorrai il tuo headset selezionato come dispositivo di riferimento, e il tracker di calibrazione come dispositivo di destinazione. Poi clicca il pulsante di Calibrazione Continua per iniziare la calibrazione. Potrebbe impiegarci un po' prima che la calibrazione iniziale venga completata, dunque muoviti attorno per far sì che l'app impari il tuo tracking!",
|
||||
"learn_page_continuous_should_use_title": "Dovresti usare la Calibrazione Continua?",
|
||||
"learn_page_continuous_should_use_standard": "Utilizza la Calibrazione Standard se non hai un tracker extra da montare sul tuo headset, se non spendi lunghe sessioni in VR, o se non ti turba dover ricalibrare ogni tanto quando c'è bisogno.",
|
||||
"learn_page_continuous_should_use_continuous": "Usa la Calibrazione Continua se non vuoi praticamente pensare più al drifting. Questo è consigliato se spendi molto tempo in VR o se noti una grande quantità di drifting col passare del tempo.",
|
||||
"learn_page_continuous_physical_setup_title": "Setup fisico (montare il tracker sul tuo headset)",
|
||||
"learn_page_continuous_physical_setup_desc1": "Per usare la Calibrazione Continua avrai bisogno di un tracker dedicato attaccato al tuo VR headset. Ci sono vari tipi di montaggio in base al tipo di VR headset e tracker che viene utilizzato. Per iniziare, puoi tipicamente trovare modelli 3D sull'internet che puoi stampare, oppure puoi chiedere attorno nella comunità per capire cos'hanno fatto gli altri.",
|
||||
"learn_page_continuous_physical_setup_desc2": "Una volta montato, il tracker dovrebbe essere attaccato fermamente all'headset. Non dovrebbe tremare, traballare o girare. Meglio montato è, meglio e più consistenti saranno le calibrazioni.",
|
||||
|
||||
"learn_page_basestation_desc": "Space Calibrator ti permette di controllare le SteamVR Base Station se hai un adattatore BLE Bluetooth disponibile.",
|
||||
"learn_page_basestation_1_title": "Modelli Base Station 1.0",
|
||||
"learn_page_basestation_1_desc": "Questi puoi solamente accenderli e spegnerli. L'utilizzo di canali senza cavo non è disponibile, e dovrai premere il bottone fisico installato nella parte retro della Base Station per alternare tra canali.",
|
||||
"learn_page_basestation_2_title": "Modelli Base Station 2.0",
|
||||
"learn_page_basestation_2_desc1": "Prodotti da entrambi Valve e HTC, questi hanno un miglior supporto per la gestione wireless rispetto a quelle 1.0. Con queste sei in grado di accenderle e spegnerle, e inoltre cambiare il loro canale. Ogni Base Station 2.0 deve essere in un canale unico e proprio, se no non funzioneranno. Space Calibrator ti offrirà ad aiutarti ad aggiustarle se ciò accade.",
|
||||
"learn_page_basestation_2_desc2": "Per cambiare il canale di una Base Station 2.0, naviga alla casella Gestione Base Stations, seleziona il pulsante modifica per la Base Station che vuoi controllare, e clicca nel canale desiderato (marcato in verde).",
|
||||
"learn_page_basestation_auto_power_title": "Gestione di Alimentazione Automatica",
|
||||
"learn_page_basestation_auto_power_desc": "Puoi andare nella casella Impostazioni per abilitare la Gestione Base Station automatica, che accenderà le tue Base Station quando Space Calibrator viene aperto, e spegnerle quando chiudi SteamVR (con Space Calibrator aperto). Nota che chiudendo Space Calibrator manualmente prima di chiudere SteamVR NON spegnerà alcuna Base Station automaticamente.",
|
||||
|
||||
"learn_page_ui_tour_desc": "Questa interfaccia è suddivisa in varie caselle ognuna contenendo varie cose.",
|
||||
"learn_page_ui_tour_calibration_heading": "Casella di Calibrazione",
|
||||
"learn_page_ui_tour_cal_desc1": "La Casella di Calibraizone contiene controlli riguardanti le calibrazioni. Controlli le tue calibrazioni qui.",
|
||||
"learn_page_ui_tour_cal_desc2": "In cima, vedrai una carta che ti mostrerà se hai una calibrazione attiva, e se sì, di che tipo.",
|
||||
"learn_page_ui_tour_cal_desc3": "Sotto quello, puoi selezionare quali dispositivi con cui calibrare. Prima dovresti scegliere il sistema di tracking che desideri calibrare- Poi, sul pannello a sinistra dovresti selezionare con cosa lo andrai a calibrare. E sul pannello a destra dovresti selezionare cosa vorrai calibrare.",
|
||||
"learn_page_ui_tour_cal_desc4": "Sotto quello ci sono i pulsanti per effettuare una calibrazione. Se non sei sicuro di quale calibrazione dovresti fare, la preghiamo di leggere le pagine a riguardo delle Calibrazioni Standard e Continua per saperne di più.",
|
||||
"learn_page_ui_tour_cal_desc5": "Alla fine della casella di Calibrazioni troverai alcune opzioni per controllare la calibrazione. Un numero di queste impostazioni richiedono che le impostazioni avanzate siano visibili.",
|
||||
"learn_page_ui_tour_base_stations_heading": "Casella Gestione Base Stations",
|
||||
"learn_page_ui_tour_bs_desc": "Qui puoi controllare qualunque Base Station nella tua stanza con un adattatore BLE Bluetooth supportato. Tipicamente, non dovresti aver bisogno di toccare questa casella oltre il setup iniziale.",
|
||||
"learn_page_ui_tour_settings_heading": "Casella Impostazioni",
|
||||
"learn_page_ui_tour_settings_desc1": "Qui puoi impostare alcune impostazioni globali per il programma. Queste includono le impostazioni avanzate, Gestione Base Stations e lingua UI.",
|
||||
"learn_page_ui_tour_settings_desc2": "Alcune feature in quest'app richiedono che le Impostazioni Avanzate siano attivate. Dovresti abilitarlo solo se sai esattamente cosa stai facendo.",
|
||||
|
||||
/* Names of the various languages one may select. Shown in settings */
|
||||
"languages_en_GB": "Inglese (UK)",
|
||||
"languages_en_US": "Inglese (US)",
|
||||
"languages_fr": "Francese",
|
||||
"languages_it": "Italiano",
|
||||
"languages_de": "Tedesco",
|
||||
"languages_nl": "Olandese",
|
||||
"languages_es_ES": "Spagnolo (Spagna)",
|
||||
"languages_es_US": "Spagnolo (America Latina)",
|
||||
"languages_da": "Danese",
|
||||
"languages_sv": "Svedese",
|
||||
"languages_fi": "Finlandese",
|
||||
"languages_no": "Norvegese",
|
||||
"languages_bg": "Bulgaro",
|
||||
"languages_pl": "Polacco",
|
||||
"languages_cs": "Ceco",
|
||||
"languages_el": "Greco",
|
||||
"languages_hu": "Ungherese",
|
||||
"languages_pt_PT": "Portoghese (Portogallo)",
|
||||
"languages_pt_BR": "Portoghese (Brasile)",
|
||||
"languages_ro": "Rumeno",
|
||||
"languages_ru": "Russo",
|
||||
"languages_tr": "Turco",
|
||||
"languages_uk": "Ucraino",
|
||||
"languages_zh_HANS": "Cinese (Semplificato)",
|
||||
"languages_zh_HANT": "Cinese (Tradizionale)",
|
||||
"languages_ja": "Giapponese",
|
||||
"languages_ko": "Coreano",
|
||||
"languages_th": "Tailandese",
|
||||
"languages_vi": "Vietnamita",
|
||||
"languages_system": "Lingua del Sistema"
|
||||
}
|
||||
@@ -0,0 +1,278 @@
|
||||
{
|
||||
"app_title": "{0} {1}", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"app_title_vr": "{0} {1} - マウスを使用するにはVRオーバーレイを閉じてください", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"tracking_system_no_systems": "トラッキングされたデバイスが存在しません。続けるにはデバイスの電源を入れてください。", /* Should never be hit but you never know */
|
||||
|
||||
"error_unknown_catastrophic": "重大なエラーが発生しました。問題の解決に向けて、GitHubまたはSteamのディスカッションでこの問題を報告してください。",
|
||||
"ipc_unavailable": "Space Calibrator SteamVRドライバーへの接続に失敗しました。[プロパティ] -> [インストール済みファイル] でファイルの整合性を確認するか、アプリを再インストールしてください。",
|
||||
"steamvr_unavailable": "SteamVRへの接続に失敗しました。",
|
||||
"vr_troubleshooting_hmd_not_found": "VRヘッドセットを接続して、SteamVRを起動してください。",
|
||||
"vr_troubleshooting_connect_steamlink": "VRヘッドセットでSteamLinkを開き、SteamVRに接続してください。",
|
||||
"vr_troubleshooting_generic": "Please connect your VR headset and launch SteamVR first. ({0} {1})", /* 0 : SteamVR init error (eg 108), 1 : SteamVR init error string (eg Headset not connected) - this string is provided by Steam. */
|
||||
|
||||
"calibration_title": "キャリブレーション",
|
||||
"calibration_count_none": "キャリブレーションが存在しません。開始するには新しいキャリブレーションを作成してください。", // Shown when there are no calibrations active
|
||||
"calibration_new": "新しいキャリブレーション",
|
||||
"calibration_delete": "キャリブレーションを削除",
|
||||
"calibration_next": "次のキャリブレーション",
|
||||
"calibration_previous": "前のキャリブレーション",
|
||||
|
||||
"calibration_status_none": "アクティブなキャリブレーションはありません",
|
||||
"calibration_status_none_description": "開始するには2台のデバイスを選択してキャリブレーションを行ってください。",
|
||||
"calibration_status_edit": "キャリブレーション編集",
|
||||
"calibration_status_edit_description": "現在のキャリブレーションを変更しています。",
|
||||
"calibration_status_continuous": "自動キャリブレーション",
|
||||
"calibration_status_continuous_description": "アクティブなキャリブレーションがあります。固定されたトラッカーを使用して、数秒ごとに自動的に再キャリブレーションを行います。",
|
||||
"calibration_status_standard": "標準キャリブレーション",
|
||||
"calibration_status_standard_description": "アクティブなキャリブレーションがあります。ドリフトが発生した場合は、再キャリブレーションが必要になることがあります。",
|
||||
|
||||
// space here refers to a tracking space / tracking system.
|
||||
"reference_device": "リファレンスデバイス",
|
||||
"reference_device_description": "キャリブレーションの基準にするデバイスです。通常はヘッドマウントディスプレイまたはコントローラーを使用します。",
|
||||
"target_device": "ターゲットデバイス",
|
||||
"target_device_description": "トラッカーやコントローラーの位置をリファレンスデバイスに合わせるために使用されるデバイスです。",
|
||||
"select_reference_device": "リファレンスデバイスを選択",
|
||||
"select_target_device": "ターゲットデバイスを選択",
|
||||
|
||||
"identify_selected_devices": "選択したデバイスを識別 (振動またはLEDを点滅)",
|
||||
"identify_auto_detect_devices": "デバイスの自動検出",
|
||||
"calibration_error_reference_hmd_missing": "トラッキングシステム「{0}」からターゲットデバイスが見つかりません。再キャリブレーションが必要な場合があります。", /* 0 : tracking system name, eg SteamVR Tracking*/
|
||||
"calibration_warning_stage_tracking_disabled": "ステージトラッキングが無効です。より快適にプレイするには、QuestのVirtual Desktopメニューを開き、[Streaming]タブに移動して「Center to play area (Stage Tracking)」を有効にしてください。",
|
||||
"calibration_warning_stage_tracking_disabled_ignore_button": "今後このメッセージを表示しない",
|
||||
|
||||
"calibration_action_start": "標準キャリブレーション",
|
||||
"calibration_action_clear": "キャリブレーションをクリア",
|
||||
"calibration_action_continuous": "自動キャリブレーション",
|
||||
"calibration_action_edit": "キャリブレーションを編集",
|
||||
"save_calibration_profile": "プロファイルを保存",
|
||||
|
||||
"calibration_progress": "キャリブレーションの進行状況",
|
||||
"calibration_info_move_around_insufficient_samples": "選択したデバイスを一緒に持ち、プレイエリア内を歩き回りながら、デバイスを8の字を描くようにゆっくり回転させてください。",
|
||||
|
||||
"calibration_speed": "キャリブレーション速度",
|
||||
"calibration_speed_description": "キャリブレーションにかかる時間です。速度が遅いほど精度が高くなる傾向があります。",
|
||||
"calibration_speed_fast": "高速",
|
||||
"calibration_speed_slow": "低速",
|
||||
"calibration_speed_very_slow": "超低速",
|
||||
|
||||
/* Editing calibrations */
|
||||
"edit_calibration_rotation": "回転",
|
||||
"edit_calibration_position": "位置 (m)",
|
||||
"edit_calibration_yaw": "ヨー (Yaw)",
|
||||
"edit_calibration_pitch": "ピッチ (Pitch)",
|
||||
"edit_calibration_roll": "ロール (Roll)",
|
||||
"edit_calibration_x": "X",
|
||||
"edit_calibration_y": "Y",
|
||||
"edit_calibration_z": "Z",
|
||||
"edit_calibration_scale": "スケール (m)",
|
||||
|
||||
"continuous_hide_tracker": "ターゲットデバイスをアプリから隠す",
|
||||
"continuous_relative_calibration": "相対キャリブレーションを有効にする",
|
||||
"continuous_relative_calibration_description": "リファレンスデバイス(通常はヘッドマウントディスプレイ)を基準にしてキャリブレーションを行うことで、再キャリブレーションを行わなくても毎フレーム更新されるようになります。この機能を使用するには、自動キャリブレーションが必須です。",
|
||||
|
||||
/* HMD names for Virtual Desktop */
|
||||
/* Virtual desktop lies that it's a Quest 2/3 on most headsets, so we have to substitute the real HMD name ourselves. you generally should
|
||||
NOT have to change these! but some headsets have different names in certain regions (eg PFD MR is YVR MR in China) */
|
||||
"virtual_desktop_hmd_none": "なし", /* should never appear but you never know*/
|
||||
"virtual_desktop_hmd_gearvr": "Samsung Gear VR",
|
||||
"virtual_desktop_hmd_oculus_go": "Oculus Go",
|
||||
"virtual_desktop_hmd_oculus_quest_1": "Oculus Quest",
|
||||
"virtual_desktop_hmd_oculus_quest_2": "Oculus Quest 2",
|
||||
"virtual_desktop_hmd_meta_quest_pro": "Meta Quest Pro",
|
||||
"virtual_desktop_hmd_pico_4": "Pico 4",
|
||||
"virtual_desktop_hmd_meta_quest_3": "Meta Quest 3",
|
||||
"virtual_desktop_hmd_meta_quest_3s": "Meta Quest 3S",
|
||||
"virtual_desktop_hmd_pico_4_ultra": "Pico 4 Ultra",
|
||||
"virtual_desktop_hmd_samsung_galaxy_xr": "Samsung Galaxy XR",
|
||||
"virtual_desktop_hmd_play_for_dream_mr": "Play For Dream MR",
|
||||
|
||||
/* vertical tabs on the left */
|
||||
"tab_page_calibration": "キャリブレーション",
|
||||
"tab_page_graphs": "グラフ",
|
||||
"tab_page_base_station_management": "ベースステーション",
|
||||
"tab_page_settings": "設定",
|
||||
"tab_page_debug": "デバッグ",
|
||||
"tab_page_learn": "使い方",
|
||||
"tab_page_about": "情報",
|
||||
|
||||
/* graphs */
|
||||
"graphs_title": "グラフ",
|
||||
|
||||
/* base stations */
|
||||
"base_stations_title": "ベースステーション管理",
|
||||
"base_stations_no_bluetooth": "有効なBluetoothアダプターが見つかりませんでした。ベースステーション管理を使用するには、BLE対応のBluetoothデバイスを接続してください。",
|
||||
"base_stations_none_found": "ベースステーションが検出されません。ベースステーションがある場合は、電源ケーブルの接続を確認してください。",
|
||||
"base_stations_header_info": "{0}", // 0: station ID (LHB XXXXXXXX) / nickname
|
||||
"base_stations_warning_collision": "チャンネルの競合が検出されました。トラッキングの問題の原因になるため、各ベースステーションには、それぞれ異なるチャンネルを設定してください。",
|
||||
"base_stations_state_sleep": "スリープ中",
|
||||
"base_stations_state_standby": "スタンバイ",
|
||||
"base_stations_state_active": "アクティブ",
|
||||
"base_stations_state_unknown": "不明",
|
||||
"base_stations_state_faulty": "エラー",
|
||||
"base_stations_channel_select_label": "ベースステーションのチャンネルを選択:",
|
||||
"base_stations_active_channel": "チャンネル {0}", // 0: channel number (1-15) ; eg Channel 12
|
||||
"base_stations_nickname": "名前",
|
||||
|
||||
/* actions */
|
||||
"base_stations_action_wake_all": "すべて起動",
|
||||
"base_stations_action_sleep_all": "すべてスリープ",
|
||||
"base_stations_action_fix_collisions": "チャンネルの競合を修正",
|
||||
"base_stations_btn_wake": "起動",
|
||||
"base_stations_btn_standby": "スタンバイ",
|
||||
"base_stations_btn_sleep": "スリープ",
|
||||
"base_stations_btn_edit": "編集",
|
||||
"base_stations_btn_save": "保存",
|
||||
|
||||
"base_station_power_management": "ベースステーション電源管理",
|
||||
"base_stations_power_mgmt_enable": "電源管理を有効にする *",
|
||||
"base_stations_power_mgmt_enable_description_standby": "SteamVRが使用されていないとき、ベースステーションはスタンバイモードになり、SteamVRが起動すると再び起動します。",
|
||||
"base_stations_power_mgmt_enable_description_sleep": "SteamVRが使用されていないとき、ベースステーションはスリープモードになり、SteamVRが起動すると再び起動します。",
|
||||
"base_stations_power_mgmt_on_startup": "SteamVRの起動時にベースステーションの電源を入れる",
|
||||
"base_stations_power_mgmt_on_startup_description": "SteamVRの起動時に、電源が入っていないベースステーションを起動します。",
|
||||
"base_stations_power_mgmt_on_shutdown": "SteamVRの終了時にベースステーションの電源を切る",
|
||||
"base_stations_power_mgmt_on_shutdown_description": "SteamVRが使用されていないとき、ベースステーションの電源がオフになります。",
|
||||
"base_stations_power_mgmt_standby": "スタンバイ",
|
||||
"base_stations_power_mgmt_standby_description": "SteamVR起動時により素早く復帰できるよう、ベースステーションのレーザーのみをオフにします。ベースステーション1.0および一部のベースステーション 2.0ではこの機能を利用できず、代わりにスリープが使用されます。",
|
||||
"base_stations_power_mgmt_sleep": "スリープ",
|
||||
"base_stations_power_mgmt_sleep_description": "ベースステーションのレーザーとモーターの両方をオフにします。",
|
||||
"base_stations_power_mgmt_warning": "※複数のSteamVRユーザーでトラッキングスペースを共有している場合は非推奨です。",
|
||||
|
||||
/* settings */
|
||||
"settings_title": "設定",
|
||||
"settings_advanced": "詳細設定",
|
||||
"settings_advanced_description": "上級者向けの追加の設定や微調整コントロールを表示します。",
|
||||
"settings_calibrate_motion_vectors": "モーションベクターのキャリブレーション",
|
||||
"settings_calibrate_motion_vectors_description": "動きの予測精度を向上させ、トラッキングのレスポンスを高めます。物理演算を多用するゲームに影響を与える場合があります。",
|
||||
"settings_autofix_playspace_jumps": "プレイエリアのジャンプを自動修正",
|
||||
"settings_autofix_playspace_jumps_description": "プレイエリアのトラッキング中に発生する、突然の座標飛び(ジャンプ)を自動的に検出して修正を試みます。",
|
||||
"settings_enforce_minimum_rotation_variance": "最小回転分散を強制",
|
||||
"settings_enforce_minimum_rotation_variance_description": "キャリブレーションの品質を向上させるため、回転角度が酷似しているサンプルを自動的に除外します。",
|
||||
"settings_locale": "言語",
|
||||
"settings_reset": "設定をすべてリセット",
|
||||
"settings_reset_description": "すべての設定を初期状態に戻します。この操作は元に戻すことはできません。",
|
||||
"settings_reset_confirm": "この変更は元に戻せません。本当に続行しますか?",
|
||||
"settings_reset_yes": "はい",
|
||||
"settings_reset_no": "いいえ",
|
||||
|
||||
/* about */
|
||||
"about_title": "Space Calibratorについて",
|
||||
"about_description": "Space Calibratorは、異なるメーカーのデバイスをSteamVRで一緒に組み合わせて使用できるようにする、無料のオープンソースツールです。",
|
||||
"about_view_source_info": "ソースコードはGitHubリポジトリで確認できます。",
|
||||
"about_contributors_title": "コントリビューター",
|
||||
"about_contributors_description": "Space Calibratorは、以下の方々の協力を得て開発されています:",
|
||||
"about_translators_title": "翻訳",
|
||||
"about_translators_description": "Space Calibratorは、以下の方々によって翻訳されました:",
|
||||
"about_licenses_title": "ライセンス",
|
||||
"about_licenses_description": "このプログラムはMITライセンスに基づいて提供されています。その他の依存関係は別のライセンスに基づいて提供されています。詳細については以下のライセンスをご確認ください。",
|
||||
"about_link_github": "GitHub",
|
||||
"about_link_discord": "Discordサーバー",
|
||||
"about_link_logs_dir": "ログフォルダー",
|
||||
|
||||
/* self-troubleshooting */
|
||||
/* found another driver loaded in SteamVR -> legacy ipc connection successful */
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_title": "別のSpace Calibratorが既に実行されています",
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_description": "競合するバージョンのSpace Calibratorが現在実行中です。このアプリケーションを使用するには、アンインストールする必要があります。自動的に削除しますか?",
|
||||
/* found legacy overlay key registered (non steam) */
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_title": "別のバージョンのSpace Calibratorが既にインストールされています",
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_description": "別のバージョンのSpace Calibratorが現在インストールされています。削除しますか?",
|
||||
"troubleshoot_action_yes": "はい",
|
||||
"troubleshoot_action_no": "いいえ",
|
||||
"troubleshoot_action_quit": "終了",
|
||||
|
||||
/* tutorial */
|
||||
"learn_title": "使い方",
|
||||
"learn_card_standard_calibration": "標準キャリブレーション",
|
||||
"learn_card_standard_calibration_description": "デバイスのペアをキャリブレーションする方法を学びます。",
|
||||
"learn_card_continuous_calibration": "自動キャリブレーション",
|
||||
"learn_card_continuous_calibration_description": "セッション中のドリフトを補正するため、定期的にキャリブレーションを行います。",
|
||||
"learn_card_base_station_management": "ベースステーション管理",
|
||||
"learn_card_base_station_management_description": "SteamVRベースステーションをワイヤレス制御します。",
|
||||
"learn_card_ui_tour": "UIガイド",
|
||||
"learn_card_ui_tour_description": "Space Calibratorのインターフェースについて説明します。",
|
||||
"learn_action_back": "戻る",
|
||||
|
||||
/* these are kinda like a messed up wiki because its inlined into the app like this, oh well lol */
|
||||
"learn_page_standard_desc": "標準キャリブレーションでは、2つのトラッキングシステムの位置関係を合わせ、VRデバイスを同じ物理空間で使用できるようにします。",
|
||||
"learn_page_standard_select_devices_title": "デバイスを選択",
|
||||
"learn_page_standard_select_devices_desc": "開始する前に、位置関係を合わせる2つのデバイスを指定する必要があります。",
|
||||
"learn_page_standard_ref_device": "リファレンスデバイス:キャリブレーションの基準となるデバイスです。通常はコントローラーを使用します。",
|
||||
"learn_page_standard_target_device": "ターゲットデバイス:位置が同期されていないデバイスで、通常はトラッカーなどを使用します。",
|
||||
"learn_page_standard_perform_title": "キャリブレーションを実行",
|
||||
"learn_page_standard_perform_step1": "両方のデバイスを片手でしっかりと持ちます。キャリブレーション中にデバイスが動かないよう、できるだけぶれないよう固定してください。",
|
||||
"learn_page_standard_perform_step2": "「標準キャリブレーション」ボタンをクリックして、キャリブレーションを開始します。",
|
||||
"learn_page_standard_perform_step3": "下図のように、デバイスを8の字に動かしながら部屋の中を移動してください。",
|
||||
"learn_page_standard_speeds_title": "キャリブレーション速度",
|
||||
"learn_page_standard_speeds_desc": "キャリブレーション速度を変更して、必要なデバイスの動きの量を調整できます。より大きく動かすほど、キャリブレーションの精度が向上する傾向があります。",
|
||||
"learn_page_standard_speed_fast": "高速:キャリブレーションにかかる時間は短くなりますが、精度が低下する場合があります。",
|
||||
"learn_page_standard_speed_slow": "低速/超低速:キャリブレーションに時間がかかりますが、より正確なキャリブレーション結果が得られる傾向があります。",
|
||||
"learn_page_standard_completion_note": "進捗バーが最後まで進むと、VR内でデバイスの位置がすぐに揃うはずです。揃わない場合は、もう一度キャリブレーションを行ってください。",
|
||||
"learn_page_standard_drift_title": "ドリフトについて",
|
||||
"learn_page_standard_drift_desc": "時間が経つとデバイスの位置がずれて、キャリブレーションが合わなくなる場合があります。その場合は、再度キャリブレーションを行って補正してください。頻繁にこの操作が必要になる場合は、「自動キャリブレーション」の使用を検討してください。",
|
||||
|
||||
"learn_page_continuous_desc1": "プレイ中にデバイスの位置や向きが少しずつずれたり、徐々に位置がずれていったりする場合は、「自動キャリブレーション」でこれらの問題を解決できます。",
|
||||
"learn_page_continuous_desc2": "定期的にプレイを中断して手動でキャリブレーションする代わりに、「自動キャリブレーション」はプレイ中もバックグラウンドでトラッキングの同期を自動的に維持します。",
|
||||
"learn_page_continuous_note_title": "注意",
|
||||
"learn_page_continuous_note_desc": "この機能を使用するには、ヘッドマウントディスプレイに同期用のトラッカーを取り付ける必要があります。",
|
||||
"learn_page_continuous_desc3": "「自動キャリブレーション」は、頻繁に再キャリブレーションを行い、ドリフトを可能な限り解消します。一度設定すれば、ドリフトをほとんど意識することなく使用できるようになります。",
|
||||
"learn_page_continuous_setup_instructions": "「自動キャリブレーション」を設定するには、まず「標準キャリブレーション」ページの説明に従ってデバイスを選択してください。ヘッドマウントディスプレイをリファレンスデバイス、キャリブレーション用のトラッカーをターゲットデバイスに設定します。次に「自動キャリブレーション」ボタンをクリックしてキャリブレーションを開始します。開始時のキャリブレーションが完了するまで少し時間がかかる場合があります。アプリがトラッキングの状態を認識できるよう、動き回ってください。",
|
||||
"learn_page_continuous_should_use_title": "自動キャリブレーションを使用するべきか?",
|
||||
"learn_page_continuous_should_use_standard": "ヘッドマウントディスプレイに取り付ける追加のトラッカーがない場合、VRを長時間使用しない場合、またはドリフトが発生したときに必要に応じて再キャリブレーションすることが気にならない場合は、標準キャリブレーションを使用してください。",
|
||||
"learn_page_continuous_should_use_continuous": "ドリフトをほとんど気にせずに使用したい場合は、自動キャリブレーションを使用してください。VRを長時間使用する場合や、時間の経過とともに大きなドリフトが発生する場合におすすめです。",
|
||||
"learn_page_continuous_physical_setup_title": "物理的なセットアップ(ヘッドマウントディスプレイへのトラッカーの取り付け)",
|
||||
"learn_page_continuous_physical_setup_desc1": "自動キャリブレーションを使用するには、ヘッドマウントディスプレイにそれ専用のトラッカーを取り付ける必要があります。使用するVRヘッドセットやトラッカーによって、さまざまな取り付け方法があります。まずは、インターネット上で公開されている3Dモデルを探して印刷するのが一般的です。また、コミュニティで他のユーザーがどのような方法で取り付けているか聞いてみるのもよいでしょう。",
|
||||
"learn_page_continuous_physical_setup_desc2": "取り付けたトラッカーは、ヘッドマウントディスプレイにしっかりと固定してください。ぐらついたり、回転したり、振動したりしないようにする必要があります。取り付けがしっかりしているほど、キャリブレーションの安定性が向上します。",
|
||||
|
||||
"learn_page_basestation_desc": "Space Calibratorでは、対応するBLE Bluetoothアダプターがあれば、SteamVRのベースステーションを制御できます。",
|
||||
"learn_page_basestation_1_title": "ベースステーション1.0",
|
||||
"learn_page_basestation_1_desc": "1.0モデルでは、電源のオン/オフのみを操作できます。ワイヤレスでのチャンネル設定には対応していないため、チャンネルを切り替えるにはベースステーション背面の物理ボタンを押す必要があります。",
|
||||
"learn_page_basestation_2_title": "ベースステーション2.0",
|
||||
"learn_page_basestation_2_desc1": "ValveとHTCの両社から製造されている2.0モデルは、1.0モデルよりもワイヤレスでの管理に対応しています。電源のオン/オフに加えて、チャンネルも設定できます。2.0モデルでは、それぞれ異なるチャンネルを設定する必要があります。同じチャンネルに設定されていると正常に動作しません。その場合、Space Calibratorは問題の解決をサポートできます。",
|
||||
"learn_page_basestation_2_desc2": "2.0モデルのチャンネルを変更するには、「ベースステーション管理」タブに移動し、操作したいベースステーションの編集ボタンを選択して、目的のチャンネル(緑色で表示)をクリックしてください。",
|
||||
"learn_page_basestation_auto_power_title": "自動電源管理",
|
||||
"learn_page_basestation_auto_power_desc": "「設定」タブから電源管理を有効にすると、Space Calibratorの起動時にベースステーションの電源をオンにし、Space Calibratorを起動したままSteamVRを終了したときに電源をオフにできます。SteamVRを終了する前にSpace Calibratorを手動で終了した場合、ベースステーションの電源は自動的にはオフになりません。",
|
||||
|
||||
"learn_page_ui_tour_desc": "このインターフェースはいくつかのタブに分かれており、それぞれにさまざまな機能があります。",
|
||||
"learn_page_ui_tour_calibration_heading": "キャリブレーションタブ",
|
||||
"learn_page_ui_tour_cal_desc1": "キャリブレーションタブでは、キャリブレーションに関する各種操作を行います。",
|
||||
"learn_page_ui_tour_cal_desc2": "上部には、現在キャリブレーションが有効になっているかどうかと、どのキャリブレーション方法が現在有効になっているのかの表示があります。",
|
||||
"learn_page_ui_tour_cal_desc3": "その下では、キャリブレーションに使用するデバイスを選択できます。まず、キャリブレーションするトラッキングシステムを選択します。次に、左側のパネルでキャリブレーションの基準にするものを、右側のパネルでキャリブレーションするものを選択します。",
|
||||
"learn_page_ui_tour_cal_desc4": "その下には、キャリブレーションを実行するためのボタンがあります。どのキャリブレーションを行えばよいかわからない場合は、「標準キャリブレーション」と「自動キャリブレーション」のページを読んで、それぞれの違いを確認してください。",
|
||||
"learn_page_ui_tour_cal_desc5": "キャリブレーションタブの下部には、キャリブレーションを調整するためのさまざまなオプションがあります。一部の設定を表示するには、詳細設定を有効にする必要があります。",
|
||||
"learn_page_ui_tour_base_stations_heading": "ベースステーション管理タブ",
|
||||
"learn_page_ui_tour_bs_desc": "対応するBLE Bluetoothアダプターを使用している場合、ここから部屋にあるベースステーションを操作できます。初期設定が完了した後は、通常ここを操作する必要はありません。",
|
||||
"learn_page_ui_tour_settings_heading": "設定タブ",
|
||||
"learn_page_ui_tour_settings_desc1": "ここでは、アプリケーション全体に適用される設定を変更できます。詳細設定、ベースステーション管理、UI言語などの設定があります。",
|
||||
"learn_page_ui_tour_settings_desc2": "このアプリの一部の機能を使用するには、詳細設定を有効にする必要があります。設定内容を理解している場合のみ有効にしてください。",
|
||||
|
||||
/* Names of the various languages one may select. Shown in settings */
|
||||
"languages_en_GB": "英語 (英国)",
|
||||
"languages_en_US": "英語 (米国)",
|
||||
"languages_fr": "フランス語",
|
||||
"languages_it": "イタリア語",
|
||||
"languages_de": "ドイツ語",
|
||||
"languages_nl": "オランダ語",
|
||||
"languages_es_ES": "スペイン語 (スペイン)",
|
||||
"languages_es_US": "スペイン語 (ラテンアメリカ)",
|
||||
"languages_da": "デンマーク語",
|
||||
"languages_sv": "スウェーデン語",
|
||||
"languages_fi": "フィンランド語",
|
||||
"languages_no": "ノルウェー語",
|
||||
"languages_bg": "ブルガリア語",
|
||||
"languages_pl": "ポーランド語",
|
||||
"languages_cs": "チェコ語",
|
||||
"languages_el": "ギリシャ語",
|
||||
"languages_hu": "ハンガリー語",
|
||||
"languages_pt_PT": "ポルトガル語 (ポルトガル)",
|
||||
"languages_pt_BR": "ポルトガル語 (ブラジル)",
|
||||
"languages_ro": "ルーマニア語",
|
||||
"languages_ru": "ロシア語",
|
||||
"languages_tr": "トルコ語",
|
||||
"languages_uk": "ウクライナ語",
|
||||
"languages_zh_HANS": "中国語 (簡体字)",
|
||||
"languages_zh_HANT": "中国語 (繁体字)",
|
||||
"languages_ja": "日本語",
|
||||
"languages_ko": "韓国語",
|
||||
"languages_th": "タイ語",
|
||||
"languages_vi": "ベトナム語",
|
||||
"languages_system": "システム言語"
|
||||
}
|
||||
@@ -0,0 +1,278 @@
|
||||
{
|
||||
"app_title": "{0} {1}", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"app_title_vr": "{0} {1} - 마우스를 이용하여 VR 오버레이를 닫습니다.", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"tracking_system_no_systems": "추적중인 장치가 없습니다. 장치의 전원을 켜 진행해주세요.", /* Should never be hit but you never know */
|
||||
|
||||
"error_unknown_catastrophic": "알 수 없는 치명적인 문제가 발생했습니다! 해당 내용을 저희가 알 수 있도록 GitHub 또는 스팀 커뮤니티 토론에 남겨주세요! .",
|
||||
"ipc_unavailable": "Space Calibrator를 SteamVR 드라이버 연결에 실패했습니다. 속성에서 설치된 파일 -> 소프트웨어 파일 무결성 검사를 진행하시거나 앱을 재설치 해주세요.",
|
||||
"steamvr_unavailable": "SteamVR에 연결하는데 실패했습니다.",
|
||||
"vr_troubleshooting_hmd_not_found": "VR헤드셋을 연결 한 후 SteamVR를 켜주세요.",
|
||||
"vr_troubleshooting_connect_steamlink": "VR헤드셋에 SteamLink를 실행한 뒤, SteamVR에 연결해주세요.",
|
||||
"vr_troubleshooting_generic": "VR헤드셋을 연결 한 후 SteamVR를 켜주세요. ({0} {1})", /* 0 : SteamVR init error (eg 108), 1 : SteamVR init error string (eg Headset not connected) - this string is provided by Steam. */
|
||||
|
||||
"calibration_title": "보정",
|
||||
"calibration_count_none": "보정된 값은 없습니다. 새로운 보정값을 만들어주세요.", // Shown when there are no calibrations active
|
||||
"calibration_new": "새로 보정하기",
|
||||
"calibration_delete": "보정값 삭제",
|
||||
"calibration_next": "다음 보정값",
|
||||
"calibration_previous": "이전 보정값",
|
||||
|
||||
"calibration_status_none": "보정된 기기가 없습니다.",
|
||||
"calibration_status_none_description": "연결할 기기를 선택하여 보정을 시작합니다.",
|
||||
"calibration_status_edit": "보정값 수정",
|
||||
"calibration_status_edit_description": "현재 보정값을 수정합니다.",
|
||||
"calibration_status_continuous": "연속 보정",
|
||||
"calibration_status_continuous_description": "보정작업이 활성화 상태입니다. 수 초 마다 고정된 트래커를 이용하여 자동으로 재보정합니다.",
|
||||
"calibration_status_standard": "일반 보정",
|
||||
"calibration_status_standard_description": "보정작업이 활성화 상태입니다. 드리프트가 일어나면 재보정해야 할 수 있습니다.",
|
||||
|
||||
// space here refers to a tracking space / tracking system.
|
||||
"reference_device": "기준 장치",
|
||||
"reference_device_description": "보정에서 기준이 될 장치를 선택합니다. 일반적으로 VR 헤드셋이나 컨트롤러가 있습니다.",
|
||||
"target_device": "타겟 장치",
|
||||
"target_device_description": "위치를 맞출 트래커나 컨트롤러 장치를 선택합니다.",
|
||||
"select_reference_device": "기준 장치 선택",
|
||||
"select_target_device": "타겟 장치 선택",
|
||||
|
||||
"identify_selected_devices": "선택한 장치 식별하기 (LED가 깜빡거리거나 진동이 울립니다.)",
|
||||
"identify_auto_detect_devices": "장치 자동 감지",
|
||||
"calibration_error_reference_hmd_missing": "\"{0}\"에서 타겟 장치를 찾을 수 없습니다. 재보정을 해야합니다.", /* 0 : tracking system name, eg SteamVR Tracking*/
|
||||
"calibration_warning_stage_tracking_disabled": "Stage tracking가 비활성화 상태입니다! 더 나은 경험을 위해 버츄얼 데스크탑 메뉴에서 Streaming 탭에 들어 간 후 \"Center to play area (Stage Tracking)\"를 활성화 해주세요.",
|
||||
"calibration_warning_stage_tracking_disabled_ignore_button": "다시 보여주지 않기",
|
||||
|
||||
"calibration_action_start": "일반 보정",
|
||||
"calibration_action_clear": "보정값 삭제",
|
||||
"calibration_action_continuous": "연속 보정",
|
||||
"calibration_action_edit": "보정값 수정",
|
||||
"save_calibration_profile": "프로파일 저장",
|
||||
|
||||
"calibration_progress": "보정 진행",
|
||||
"calibration_info_move_around_insufficient_samples": "선택한 장치들을 잡고 8자 모양으로 주변을 움직여주세요.",
|
||||
|
||||
"calibration_speed": "보정 속도",
|
||||
"calibration_speed_description": "보정 속도를 정합니다. 느리게 설정 할 수록 정확해집니다. ",
|
||||
"calibration_speed_fast": "빠르게",
|
||||
"calibration_speed_slow": "느리게",
|
||||
"calibration_speed_very_slow": "매우 느리게",
|
||||
|
||||
/* Editing calibrations */
|
||||
"edit_calibration_rotation": "각도",
|
||||
"edit_calibration_position": "위치 (m)",
|
||||
"edit_calibration_yaw": "Yaw",
|
||||
"edit_calibration_pitch": "Pitch",
|
||||
"edit_calibration_roll": "Roll",
|
||||
"edit_calibration_x": "X",
|
||||
"edit_calibration_y": "Y",
|
||||
"edit_calibration_z": "Z",
|
||||
"edit_calibration_scale": "스케일 (m)",
|
||||
|
||||
"continuous_hide_tracker": "앱에서 타겟 장치를 숨깁니다.",
|
||||
"continuous_relative_calibration": "상대 보정 활성화",
|
||||
"continuous_relative_calibration_description": "기준 장치를 상대적으로 보정합니다. (기본적으로 헤드셋) 매 프레임 마다 재보정 할 필요 없이 업데이트 됩니다. 해당 기능은 *연속 보정*을 요구합니다.",
|
||||
|
||||
/* HMD names for Virtual Desktop */
|
||||
/* Virtual desktop lies that it's a Quest 2/3 on most headsets, so we have to substitute the real HMD name ourselves. you generally should
|
||||
NOT have to change these! but some headsets have different names in certain regions (eg PFD MR is YVR MR in China) */
|
||||
"virtual_desktop_hmd_none": "없음", /* should never appear but you never know*/
|
||||
"virtual_desktop_hmd_gearvr": "삼성 기어 VR",
|
||||
"virtual_desktop_hmd_oculus_go": "오큘러스 Go",
|
||||
"virtual_desktop_hmd_oculus_quest_1": "오큘러스 퀘스트",
|
||||
"virtual_desktop_hmd_oculus_quest_2": "오큘러스 퀘스트 2",
|
||||
"virtual_desktop_hmd_meta_quest_pro": "메타 퀘스트 프로",
|
||||
"virtual_desktop_hmd_pico_4": "피코 4",
|
||||
"virtual_desktop_hmd_meta_quest_3": "메타 퀘스트 3",
|
||||
"virtual_desktop_hmd_meta_quest_3s": "메타 퀘스트 3S",
|
||||
"virtual_desktop_hmd_pico_4_ultra": "피코 4 울트라",
|
||||
"virtual_desktop_hmd_samsung_galaxy_xr": "삼성 갤럭시 XR",
|
||||
"virtual_desktop_hmd_play_for_dream_mr": "플레이 포 드림 MR",
|
||||
|
||||
/* vertical tabs on the left */
|
||||
"tab_page_calibration": "보정",
|
||||
"tab_page_graphs": "그래프",
|
||||
"tab_page_base_station_management": "베이스 스테이션",
|
||||
"tab_page_settings": "설정",
|
||||
"tab_page_debug": "디버그",
|
||||
"tab_page_learn": "더 알아보기",
|
||||
"tab_page_about": "소개",
|
||||
|
||||
/* graphs */
|
||||
"graphs_title": "그래프",
|
||||
|
||||
/* base stations */
|
||||
"base_stations_title": "베이스 스테이션 관리",
|
||||
"base_stations_no_bluetooth": "유효한 블루투스 어뎁터를 찾을 수 없습니다. BLE(Bluetooth Low Energy)가 호환되는 블루투스 어뎁터를 연결하여 베이스 스테이션을 관리 할 수 있습니다.",
|
||||
"base_stations_none_found": "베이스 스테이션을 찾을 수 없습니다. 만일 있다하면 연결해주세요.",
|
||||
"base_stations_header_info": "{0}", // 0: station ID (LHB XXXXXXXX) / nickname
|
||||
"base_stations_warning_collision": "채널 충돌이 감지되었습니다! 트래킹에 문제가 발생 할 수 있습니다. 각 베이스 스테이션 마다 개별적인 채널을 사용해야합니다.",
|
||||
"base_stations_state_sleep": "수면중",
|
||||
"base_stations_state_standby": "대기중",
|
||||
"base_stations_state_active": "활성화됨",
|
||||
"base_stations_state_unknown": "알 수 없음",
|
||||
"base_stations_state_faulty": "문제있음",
|
||||
"base_stations_channel_select_label": "베이스 스테이션 채널을 선택해주세요:",
|
||||
"base_stations_active_channel": "채널 {0}", // 0: channel number (1-15) ; eg Channel 12
|
||||
"base_stations_nickname": "별명",
|
||||
|
||||
/* actions */
|
||||
"base_stations_action_wake_all": "전부 깨우기",
|
||||
"base_stations_action_sleep_all": "전부 재우기",
|
||||
"base_stations_action_fix_collisions": "채널 충돌 고치기",
|
||||
"base_stations_btn_wake": "깨우기",
|
||||
"base_stations_btn_standby": "대기",
|
||||
"base_stations_btn_sleep": "재우기",
|
||||
"base_stations_btn_edit": "수정",
|
||||
"base_stations_btn_save": "저장",
|
||||
|
||||
"base_station_power_management": "베이스 스테이션 전원 관리",
|
||||
"base_stations_power_mgmt_enable": "전원 관리 활성화 *",
|
||||
"base_stations_power_mgmt_enable_description_standby": "SteamVR를 사용하지 않을 때 베이스 스테이션을 대기상태로 바꿉니다. 그리고 SteamVR를 사용할 때 깨웁니다.",
|
||||
"base_stations_power_mgmt_enable_description_sleep": "SteamVR를 사용하지 않을 때 베이스 스테이션을 수면상태로 바꿉니다. 그리고 SteamVR를 사용할 때 깨웁니다.",
|
||||
"base_stations_power_mgmt_on_startup": "SteamVR를 시작할 때 베이스 스테이션을 킵니다.",
|
||||
"base_stations_power_mgmt_on_startup_description": "SteamVR를 시작할 때 꺼져있는 베이스 스테이션의 전원을 킵니다.",
|
||||
"base_stations_power_mgmt_on_shutdown": "SteamVR를 종료할 때 베이스 스테이션을 끕니다.",
|
||||
"base_stations_power_mgmt_on_shutdown_description": "SteamVR를 사용하지 않을 때 베이스 스테이션의 전원을 끕니다.",
|
||||
"base_stations_power_mgmt_standby": "대기",
|
||||
"base_stations_power_mgmt_standby_description": "베이스 스테이션의 레이저만 끕니다. SteamVR이 시작할 때 빠르게 켜지지만, 베이스 스테이션 1.0에서는 작동하지 않으며 일부 베이스 스테이션 2.0에서는 작동하지 않을 수 있습니다. 이 경우 수면을 사용해주세요.",
|
||||
"base_stations_power_mgmt_sleep": "수면",
|
||||
"base_stations_power_mgmt_sleep_description": "베이스 스테이션의 모터와 레이저의 전원을 끕니다.",
|
||||
"base_stations_power_mgmt_warning": "* 여러 SteamVR 사용자가 트래킹 공간을 공유할 경우 사용하는 것을 추천하지 않습니다.",
|
||||
|
||||
/* settings */
|
||||
"settings_title": "설정",
|
||||
"settings_advanced": "고급 설정",
|
||||
"settings_advanced_description": "전문 사용자를 위한 추가적인 설정이 보입니다.",
|
||||
"settings_calibrate_motion_vectors": "모션 벡터 보정",
|
||||
"settings_calibrate_motion_vectors_description": "반응성 움직임에 대한 움직임 예측이 향상됩니다. 물리 효과가 높은 게임에 영향이 있을 수 있습니다.",
|
||||
"settings_autofix_playspace_jumps": "트래커 튀었을때 자동 연결",
|
||||
"settings_autofix_playspace_jumps_description": "트래커가 튀는것을 감지하여 자동으로 보정을 시도합니다.",
|
||||
"settings_enforce_minimum_rotation_variance": "최소 각도 변화 강제",
|
||||
"settings_enforce_minimum_rotation_variance_description": "보정 품질을 향상하기 위해 비슷한 각도값을 자동으로 거부합니다.",
|
||||
"settings_locale": "언어",
|
||||
"settings_reset": "모든 설정값 초기화",
|
||||
"settings_reset_description": "모든 설정을 기본값으로 초기화 합니다. 초기화 후 설정값을 되돌릴 수 없습니다.",
|
||||
"settings_reset_confirm": "설정값이 기본값으로 초기화되고 초기화 이후에 해당 행동을 되돌릴 수 없습니다. 진행하시겠습니까?",
|
||||
"settings_reset_yes": "네",
|
||||
"settings_reset_no": "아니요",
|
||||
|
||||
/* about */
|
||||
"about_title": "소개",
|
||||
"about_description": "Space Calibrator는 SteamVR에서 여러 제조사의 장치들을 함께 움직일 수 있도록 하는 오픈소스 무료 도구입니다.",
|
||||
"about_view_source_info": "소스코드들은 GitHub 리포지토리에서 확인 할 수 있습니다.",
|
||||
"about_contributors_title": "기여자들",
|
||||
"about_contributors_description": "Space Calibrator가 여기에 있을 수 있도록 도와주신 분들 입니다:",
|
||||
"about_translators_title": "번역가들",
|
||||
"about_translators_description": "Space Calibrator를 번역해주신 분들 입니다:",
|
||||
"about_licenses_title": "라이선스",
|
||||
"about_licenses_description": "해당 프로그램은 MIT 라이선스 내에 있습니다 . 기타 의존성에 대해서는 별도의 라이선스 내에 있습니다, 자세한 내용은 라이선스를 참고해주세요.",
|
||||
"about_link_github": "GitHub",
|
||||
"about_link_discord": "디스코드 서버",
|
||||
"about_link_logs_dir": "로그 파일",
|
||||
|
||||
/* self-troubleshooting */
|
||||
/* found another driver loaded in SteamVR -> legacy ipc connection successful */
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_title": "다른 Space Calibrator가 이미 실행중에 있습니다.",
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_description": "서로 충돌되는 Space Calibrator가 실행중에 있습니다. 삭제를 해야 실행할 수 있습니다. 자동으로 삭제를 진행할까요?",
|
||||
/* found legacy overlay key registered (non steam) */
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_title": "다른 Space Calibrator가 이미 실행중에 있습니다",
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_description": "다른 버전의 Space Calibrator가 실행중에 있습니다. 삭제를 진행할까요?",
|
||||
"troubleshoot_action_yes": "네",
|
||||
"troubleshoot_action_no": "아니요",
|
||||
"troubleshoot_action_quit": "나가기",
|
||||
|
||||
/* tutorial */
|
||||
"learn_title": "더 알아보기",
|
||||
"learn_card_standard_calibration": "일반 보정",
|
||||
"learn_card_standard_calibration_description": "서로 다른 장치를 연결하는 방법에 대해 배웁니다.",
|
||||
"learn_card_continuous_calibration": "연속 보정",
|
||||
"learn_card_continuous_calibration_description": "주기적으로 보정하여 발생하는 오차를 줄이는 방법에 대해 배웁니다.",
|
||||
"learn_card_base_station_management": "베이스 스테이션 관리",
|
||||
"learn_card_base_station_management_description": "무선으로 베이스 스테이션을 관리 하는 방법에 대해 배웁니다.",
|
||||
"learn_card_ui_tour": "UI 투어",
|
||||
"learn_card_ui_tour_description": "Space Calibrator의 인터페이스를 둘러봅니다.",
|
||||
"learn_action_back": "뒤로가기",
|
||||
|
||||
/* these are kinda like a messed up wiki because its inlined into the app like this, oh well lol */
|
||||
"learn_page_standard_desc": "일반 보정은 서로 다른 두 트래킹 시스템을 하나로 연동함으로써 VR 장치들이 같은 플레이 공간에서 작동하도록 설정합니다.",
|
||||
"learn_page_standard_select_devices_title": "장치를 선택해주세요",
|
||||
"learn_page_standard_select_devices_desc": "시작하기 전에 사용자가 앱에서 연동할 두 장치를 선택해줘야합니다.",
|
||||
"learn_page_standard_ref_device": "기준 장치: 보정에서 기준이 될 장치를 선택합니다. 일반적으로 컨트롤러가 있습니다.",
|
||||
"learn_page_standard_target_device": "타겟 장치: 연동되지 않은 기준 장치에 맞출 트래커나 컨트롤러 장치를 선택합니다.",
|
||||
"learn_page_standard_perform_title": "보정을 진행합니다",
|
||||
"learn_page_standard_perform_step1": "기준 장치와 타겟 장치를 한 손에 단단히 쥐어 줍니다. 가능한 단단히 쥐어줌으로써 보정 과정중에 움직이지 않도록 고정합니다.",
|
||||
"learn_page_standard_perform_step2": "일반 보정 버튼을 눌러 보정을 시작합니다.",
|
||||
"learn_page_standard_perform_step3": "밑에 있는 그림 처럼 방 안을 8자 모양으로 움직여주세요.",
|
||||
"learn_page_standard_speeds_title": "보정 속도",
|
||||
"learn_page_standard_speeds_desc": "필요에 따라 보정 속도를 조절하여 어느정도 움직일지 정할 수 있습니다. 움직임이 많을 수록 보정 품질이 향상됩니다.",
|
||||
"learn_page_standard_speed_fast": "빠름: 보정을 하는데 시간이 적게 소모되지만 그만큼 보정 품질이 좋지 않을 수 있습니다.",
|
||||
"learn_page_standard_speed_slow": "느림 / 매우 느림: 보정을 하는데 시간이 많이 소모되지만 그만큼 보정 품질이 좋아질 수 있습니다.",
|
||||
"learn_page_standard_completion_note": "진행바가 다 채워지면, 여러분의 장비가 연동되어 있을 것입니다. 그렇지 않는다면 다시 보정을 진행하셔야합니다.",
|
||||
"learn_page_standard_drift_title": "드리프트에 대하여",
|
||||
"learn_page_standard_drift_desc": "시간이 지날수록 장치들은 드리프트를 일으키게 되어 보정이 망가지게 됩니다. 다시 보정하여 맞추면 되지만, 자주 일어나게 되면 연속 보정을 고려해봐야할 수 있습니다.",
|
||||
|
||||
"learn_page_continuous_desc1": "만약 여러분께서 장치가 천천히 돌아가거나 튀거나 드리프팅이 일어나는걸 알게되었다면 연속 보정이 해결책이 될 수 있습니다.",
|
||||
"learn_page_continuous_desc2": "백그라운드에서 보정을 연속적으로 해줌으로써 매번 멈추고 보정하는 번거로운 작업을 할 필요가 없어집니다.",
|
||||
"learn_page_continuous_note_title": "알아야 할 내용",
|
||||
"learn_page_continuous_note_desc": "헤드셋에 고정된 트래커(뚝트)가 필수적으로 요구됩니다.",
|
||||
"learn_page_continuous_desc3": "연속 보정은 지속적으로 재보정을 함으로써 한번 설정해두면 보정 문제에 대해 더 이상 신경 쓸 필요가 없습니다.",
|
||||
"learn_page_continuous_setup_instructions": "연속 보정을 하기 위해 일반 보정에서 처음 설명했던것 처럼 장치를 선택해야합니다. 이번엔 헤드셋이 기준 장치가 되고, 헤드셋에 고정된 트래커(뚝트)가 타켓 장치가 되어야합니다. 그 다음 연속 보정 버튼을 누릅니다. 초기 보정이 될 때 까지 시간이 걸립니다. 앱이 움직임을 학습할 수 있도록 몸을 움직여주세요!",
|
||||
"learn_page_continuous_should_use_title": "연속 보정을 꼭 써야할까요?",
|
||||
"learn_page_continuous_should_use_standard": "만약 여분의 트래커가 없거나, 장시간 동안 플레이 하지 않거나, 일반 보정을 자주하는것에 있어 불편함이 없다면 일반 보정을 사용하셔도 문제 없습니다.",
|
||||
"learn_page_continuous_should_use_continuous": "만약 드리프트가 일어날 정도로 장시간을 플레이 하거나, 드리프트에 대해 생각하기도 싫다면 연속 보정을 사용하시면 됩니다.",
|
||||
"learn_page_continuous_physical_setup_title": "물리적 설정(헤드셋 위에 트래커 장착)",
|
||||
"learn_page_continuous_physical_setup_desc1": "연속 보정을 사용하기 위해서는 헤드셋 위에 트래커를 고정시켜야합니다. 헤드셋 마다 별도의 마운트가 존재하며 3D 프린터 출력물을 만들거나, 커뮤니티에서 사용하는 방법을 찾을 수 있습니다.",
|
||||
"learn_page_continuous_physical_setup_desc2": "장착했으면 트래커는 반드시 고정되어야하며. 흔들리거나 덜 고정되어선 안됩니다. 잘 고정되어있다면 그만큼 연속 보정의 결과값도 일정하고 좋아집니다.",
|
||||
|
||||
"learn_page_basestation_desc": "Space Calibrator은 BLE가 호환되는 Bluetooth 어뎁터가 있을 경우 SteamVR 베이스 스테이션을 조작할 수 있습니다.",
|
||||
"learn_page_basestation_1_title": "베이스 스테이션 1.0",
|
||||
"learn_page_basestation_1_desc": "해당 모델은 키거나 끄기만 할 수 있습니다. 무선으로 채널을 설정할 수 없습니다. 후면에 있는 물리 버튼을 이용하여 채널을 바꿀 수 있습니다.",
|
||||
"learn_page_basestation_2_title": "베이스 스테이션 2.0",
|
||||
"learn_page_basestation_2_desc1": "Valve와 HTC에서 생산되며, 1.0보다 더 나은 무선 설정을 할 수 있습니다. 무선으로 전원을 키거나 끌 수 있으며 채널까지 설정할 수 있습니다. 베이스 스테이션 2.0은 개별적인 채널을 사용해야하며, 그렇지 않을 경우 작동하지 않을 수 있습니다. Space Calibrator는 이것에 대해 고칠 수 있습니다.",
|
||||
"learn_page_basestation_2_desc2": "베이스 스테이션 2.0 채널을 변경하기 위해, 베이스 스테이션 관리 탭으로 들어갑니다. 조작할 베이스 스테이션을 설정하여 원하는 채널을 선택하면 됩니다.(녹색으로 표시됩니다.).",
|
||||
"learn_page_basestation_auto_power_title": "전원 설정",
|
||||
"learn_page_basestation_auto_power_desc": "설정 탭에서 베이스 스테이션 전원 관리를 할 수 있습니다. Space Calibrator가 실행되면 베이스 스테이션이 켜지게 됩니다. 그리고 SteamVR을 끄게 되면 베이스 스테이션이 꺼집니다. (Space Calibrator가 켜져있어야합니다.) 만일 Space Calibrator를 수동으로 먼저 끈 상태에서 SteamVR을 끄게되면 베이스 스테이션이 꺼지지 않습니다.",
|
||||
|
||||
"learn_page_ui_tour_desc": "해당 인터페이스에서 여러 탭이 나뉘어져 있으며 각기 다른 내용을 포함하고 있습니다.",
|
||||
"learn_page_ui_tour_calibration_heading": "보정 탭",
|
||||
"learn_page_ui_tour_cal_desc1": "보정 탭에는 보정에 필요한 설정들이 있습니다. 여러분들은 여기서 보정을 할 수 있습니다.",
|
||||
"learn_page_ui_tour_cal_desc2": "상단에 있는 카드는 보정이 활성화 되어있는지, 어떤 방법으로 보정되어있는지 확인 할 수 있습니다.",
|
||||
"learn_page_ui_tour_cal_desc3": "바로 아래에 있는 것은 보정에 사용할 장치를 선택할 수 있는 구간입니다. 첫번째로 어떠한 트래킹 시스템에서 보정할지 설정해야합니다. 그 뒤에 왼쪽 패널에서 기준 장치를 정하고 오른쪽 패널에서 타켓 장치를 정합니다.",
|
||||
"learn_page_ui_tour_cal_desc4": "그 뒤로 아래에 있는 버튼들은 어떤 방법으로 보정 할지 선택하는 버튼들 입니다. 어떤 보정을 사용해야하는지 모르겠다하면 일반 보정 페이지와 연속 보정 페이지를 읽어보시는걸 권장합니다.",
|
||||
"learn_page_ui_tour_cal_desc5": "그리고 그 아래로 있는 옵션들은 보정에 대한 옵션들을 설정할 수 있으며, 몇몇 옵션들은 고급 설정을 활성화해야 보이게됩니다.",
|
||||
"learn_page_ui_tour_base_stations_heading": "베이스 스테이션 관리 탭",
|
||||
"learn_page_ui_tour_bs_desc": "여기서는 BLE를 지원하는 Bluetooth 어뎁터가 있는 경우 베이스 스테이션들을 관리 할 수 있는 탭입니다. 보통은 초기 설정 이후 해당 부분을 건들일 필요는 없습니다.",
|
||||
"learn_page_ui_tour_settings_heading": "설정 탭",
|
||||
"learn_page_ui_tour_settings_desc1": "여기서는 프로그램에서 광역 설정 할 수 있는 탭입니다. 여기에는 고급 설정, 베이스 스테이션 관리, 그리고 UI언어를 설정 할 수 있습니다.",
|
||||
"learn_page_ui_tour_settings_desc2": "일부 기능들은 고급 설정을 활성화 해야 보이게됩니다. 해당 기능들이 무슨 역할을 하는지 아는 경우에만 활성화 하는것을 권장드립니다.",
|
||||
|
||||
/* Names of the various languages one may select. Shown in settings */
|
||||
"languages_en_GB": "영어 (영국)",
|
||||
"languages_en_US": "영어 (미국)",
|
||||
"languages_fr": "프랑스어",
|
||||
"languages_it": "이탈리아어",
|
||||
"languages_de": "독일어",
|
||||
"languages_nl": "네덜란드어",
|
||||
"languages_es_ES": "스페인어 (스페인)",
|
||||
"languages_es_US": "스페인어 (라틴 아메리카)",
|
||||
"languages_da": "덴마크어",
|
||||
"languages_sv": "스웨덴어",
|
||||
"languages_fi": "필란드어",
|
||||
"languages_no": "노르웨이어",
|
||||
"languages_bg": "불가리아어",
|
||||
"languages_pl": "폴란드어",
|
||||
"languages_cs": "체코어",
|
||||
"languages_el": "그리스어",
|
||||
"languages_hu": "헝가리어",
|
||||
"languages_pt_PT": "포르투갈어 (포르투갈)",
|
||||
"languages_pt_BR": "포르투갈어 (브라질)",
|
||||
"languages_ro": "로마어",
|
||||
"languages_ru": "라시아어",
|
||||
"languages_tr": "튀르키에어",
|
||||
"languages_uk": "우크라이나어",
|
||||
"languages_zh_HANS": "중국어 (간체자)",
|
||||
"languages_zh_HANT": "중국어 (번체자)",
|
||||
"languages_ja": "일본어",
|
||||
"languages_ko": "한국어",
|
||||
"languages_th": "태국어",
|
||||
"languages_vi": "베트남어",
|
||||
"languages_system": "시스템 언어"
|
||||
}
|
||||
@@ -0,0 +1,278 @@
|
||||
{
|
||||
"app_title": "{0} {1}", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"app_title_vr": "{0} {1} - lukk VR-overlayet for å bruke musen", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"tracking_system_no_systems": "Fant ingen sporingsenheter. Slå på en enhet for å fortsette.", /* Should never be hit but you never know */
|
||||
|
||||
"error_unknown_catastrophic": "En alvorlig feil har oppstått! Vennligst rapporter dette til utvikleren enten på GitHub eller Steam-diskusjoner slik at dette kan rettes opp i.",
|
||||
"ipc_unavailable": "Tilkobling til Space Calibrator SteamVR-driveren mislyktes. Velg \"Sjekk etter feil i spillfiler\" under Egenskaper ... -> Installerte filer, eller installer appen på nytt.",
|
||||
"steamvr_unavailable": "Tilkobling til SteamVR mislyktes.",
|
||||
"vr_troubleshooting_hmd_not_found": "Vennligst koble til VR-headsettet og start SteamVR først.",
|
||||
"vr_troubleshooting_connect_steamlink": "Vennligst åpne SteamLink på VR-headsettet ditt og koble til SteamVR først.",
|
||||
"vr_troubleshooting_generic": "Vennligst koble til VR-headsettet og start SteamVR først. ({0} {1})", /* 0 : SteamVR init error (eg 108), 1 : SteamVR init error string (eg Headset not connected) - this string is provided by Steam. */
|
||||
|
||||
"calibration_title": "Kalibrering",
|
||||
"calibration_count_none": "Ingen kalibrering funnet. Vennligst opprett en ny kalibrering for å komme i gang.", // Shown when there are no calibrations active
|
||||
"calibration_new": "Ny kalibrering",
|
||||
"calibration_delete": "Slett kalibrering",
|
||||
"calibration_next": "Neste kalibrering",
|
||||
"calibration_previous": "Forrige kalibrering",
|
||||
|
||||
"calibration_status_none": "Ingen aktiv kalibrering",
|
||||
"calibration_status_none_description": "Vennligst velg et par enheter og utfør kalibrering for å komme i gang.",
|
||||
"calibration_status_edit": "Redigerer kalibreringen",
|
||||
"calibration_status_edit_description": "Redigerer nåværende kalibrering.",
|
||||
"calibration_status_continuous": "Kontinuerlig kalibrering",
|
||||
"calibration_status_continuous_description": "Aktiv kalibrering pågår. En montert tracker brukes til å rekalibrere automatisk med få sekunders mellomrom.",
|
||||
"calibration_status_standard": "Standard kalibrering",
|
||||
"calibration_status_standard_description": "Du har en aktiv kalibrering. Ny kalibrering kan bli nødvendig ved eventuelle avvik (drift).",
|
||||
|
||||
// space here refers to a tracking space / tracking system.
|
||||
"reference_device": "Referanseenhet",
|
||||
"reference_device_description": "Dette er enheten som brukes til kalibrering, som regel VR-headsettet ditt eller en kontroller.",
|
||||
"target_device": "Målenhet",
|
||||
"target_device_description": "Denne enheten brukes til å rette inn trackere eller kontrollere.",
|
||||
"select_reference_device": "Velg referanseenhet",
|
||||
"select_target_device": "Velg målenhet",
|
||||
|
||||
"identify_selected_devices": "Identifiser valgte enheter (LED-blinking eller vibrasjon)",
|
||||
"identify_auto_detect_devices": "Finn enheter automatisk",
|
||||
"calibration_error_reference_hmd_missing": "Fant ikke målenheten i sporingssystemet \"{0}\". Ny kalibrering kan være nødvendig.", /* 0 : tracking system name, eg SteamVR Tracking*/
|
||||
"calibration_warning_stage_tracking_disabled": "Posisjonssporing er deaktivert! For en bedre opplevelse, åpne Virtual Desktop-menyen på din Quest, gå til Streamingfanen og aktiver \"Center to play area (Stage Tracking)\".",
|
||||
"calibration_warning_stage_tracking_disabled_ignore_button": "Vis aldri dette igjen",
|
||||
|
||||
"calibration_action_start": "Standard kalibrering",
|
||||
"calibration_action_clear": "Nullstill kalibrering",
|
||||
"calibration_action_continuous": "Kontinuerlig kalibrering",
|
||||
"calibration_action_edit": "Rediger kalibrering",
|
||||
"save_calibration_profile": "Lagre profil",
|
||||
|
||||
"calibration_progress": "Kalibreringsfremdrift",
|
||||
"calibration_info_move_around_insufficient_samples": "Hold de valgte enhetene inntil hverandre og gå rundt i spilleområdet mens du beveger dem i rolige åttetallsbevegelser.",
|
||||
|
||||
"calibration_speed": "Kalibreringshastighet",
|
||||
"calibration_speed_description": "Tidsbruk ved kalibrering. Tregere kalibreringer er ofte mer presise.",
|
||||
"calibration_speed_fast": "Rask",
|
||||
"calibration_speed_slow": "Sakte",
|
||||
"calibration_speed_very_slow": "Veldig sakte",
|
||||
|
||||
/* Editing calibrations */
|
||||
"edit_calibration_rotation": "Rotasjon",
|
||||
"edit_calibration_position": "Posisjon (m)",
|
||||
"edit_calibration_yaw": "Yaw",
|
||||
"edit_calibration_pitch": "Pitch",
|
||||
"edit_calibration_roll": "Roll",
|
||||
"edit_calibration_x": "X",
|
||||
"edit_calibration_y": "Y",
|
||||
"edit_calibration_z": "Z",
|
||||
"edit_calibration_scale": "Skala (m)",
|
||||
|
||||
"continuous_hide_tracker": "Skjul referanseenheten fra apper",
|
||||
"continuous_relative_calibration": "Slå på relativ kalibrering",
|
||||
"continuous_relative_calibration_description": "Kalibreringen gjøres relativt til målenheten (som regel VR-headsettet), slik at den oppdateres i sanntid per bilde. Dette KREVER kontinuerlig kalibrering.",
|
||||
|
||||
/* HMD names for Virtual Desktop */
|
||||
/* Virtual desktop lies that it's a Quest 2/3 on most headsets, so we have to substitute the real HMD name ourselves. you generally should
|
||||
NOT have to change these! but some headsets have different names in certain regions (eg PFD MR is YVR MR in China) */
|
||||
"virtual_desktop_hmd_none": "Ingen", /* should never appear but you never know*/
|
||||
"virtual_desktop_hmd_gearvr": "Samsung Gear VR",
|
||||
"virtual_desktop_hmd_oculus_go": "Oculus Go",
|
||||
"virtual_desktop_hmd_oculus_quest_1": "Oculus Quest",
|
||||
"virtual_desktop_hmd_oculus_quest_2": "Oculus Quest 2",
|
||||
"virtual_desktop_hmd_meta_quest_pro": "Meta Quest Pro",
|
||||
"virtual_desktop_hmd_pico_4": "Pico 4",
|
||||
"virtual_desktop_hmd_meta_quest_3": "Meta Quest 3",
|
||||
"virtual_desktop_hmd_meta_quest_3s": "Meta Quest 3S",
|
||||
"virtual_desktop_hmd_pico_4_ultra": "Pico 4 Ultra",
|
||||
"virtual_desktop_hmd_samsung_galaxy_xr": "Samsung Galaxy XR",
|
||||
"virtual_desktop_hmd_play_for_dream_mr": "Play For Dream MR",
|
||||
|
||||
/* vertical tabs on the left */
|
||||
"tab_page_calibration": "Kalibrering",
|
||||
"tab_page_graphs": "Grafer",
|
||||
"tab_page_base_station_management": "Basestasjoner",
|
||||
"tab_page_settings": "Innstillinger",
|
||||
"tab_page_debug": "Feilsøking",
|
||||
"tab_page_learn": "Lær",
|
||||
"tab_page_about": "Om",
|
||||
|
||||
/* graphs */
|
||||
"graphs_title": "Grafer",
|
||||
|
||||
/* base stations */
|
||||
"base_stations_title": "Basestasjonshåndtering",
|
||||
"base_stations_no_bluetooth": "Fant ingen gyldig Bluetooth-adapter. Koble til en BLE-kompatibel enhet for å bruke Basestasjonshåndtering.",
|
||||
"base_stations_none_found": "Ingen basestasjoner ble funnet. Sørg for at de er plugget i hvis du har noen.",
|
||||
"base_stations_header_info": "{0}", // 0: station ID (LHB XXXXXXXX) / nickname
|
||||
"base_stations_warning_collision": "Kanalkollisjon funnet! Dette skaper problemer med sporingen. Hver basestasjon må ha sin egen kanal.",
|
||||
"base_stations_state_sleep": "Hvilemodus",
|
||||
"base_stations_state_standby": "Standby",
|
||||
"base_stations_state_active": "Aktiv",
|
||||
"base_stations_state_unknown": "Ukjent",
|
||||
"base_stations_state_faulty": "Defekt",
|
||||
"base_stations_channel_select_label": "Velg en basestasjonskanal:",
|
||||
"base_stations_active_channel": "Kanal {0}", // 0: channel number (1-15) ; eg Channel 12
|
||||
"base_stations_nickname": "Kallenavn",
|
||||
|
||||
/* actions */
|
||||
"base_stations_action_wake_all": "Vekk alle",
|
||||
"base_stations_action_sleep_all": "Sett alle i hvilemodus",
|
||||
"base_stations_action_fix_collisions": "Løs kanalkollisjoner",
|
||||
"base_stations_btn_wake": "Vekk",
|
||||
"base_stations_btn_standby": "Standby",
|
||||
"base_stations_btn_sleep": "Hvilemodus",
|
||||
"base_stations_btn_edit": "Rediger",
|
||||
"base_stations_btn_save": "Lagre",
|
||||
|
||||
"base_station_power_management": "Strømstyring for basestasjoner",
|
||||
"base_stations_power_mgmt_enable": "Aktiver strømstyring *",
|
||||
"base_stations_power_mgmt_enable_description_standby": "Tilkoblede basestasjoner går i standby når SteamVR ikke er i bruk, og våkner igjen når SteamVR starter.",
|
||||
"base_stations_power_mgmt_enable_description_sleep": "Tilkoblede basestasjoner går i hvilemodus når SteamVR ikke er i bruk, og våkner igjen når SteamVR starter.",
|
||||
"base_stations_power_mgmt_on_startup": "Aktiver basestasjoner ved oppstart av SteamVR",
|
||||
"base_stations_power_mgmt_on_startup_description": "Inaktive basestasjoner vekkes når SteamVR kjøres.",
|
||||
"base_stations_power_mgmt_on_shutdown": "Slå av basestasjoner når SteamVR lukkes",
|
||||
"base_stations_power_mgmt_on_shutdown_description": "Basestasjoner slår seg av når SteamVR ikke brukes.",
|
||||
"base_stations_power_mgmt_standby": "Standby",
|
||||
"base_stations_power_mgmt_standby_description": "Basestasjonene deaktiverer kun laserne for at de skal våkne raskere når SteamVR starter. Dette støttes ikke av 1.0-modeller eller visse 2.0-modeller, og disse vil i stedet gå i hvilemodus.",
|
||||
"base_stations_power_mgmt_sleep": "Hvilemodus",
|
||||
"base_stations_power_mgmt_sleep_description": "Basestasjoner slår av lasere og motorer.",
|
||||
"base_stations_power_mgmt_warning": "* ANBEFALES IKKE for delte sporingsområder med flere SteamVR-brukere.",
|
||||
|
||||
/* settings */
|
||||
"settings_title": "Innstillinger",
|
||||
"settings_advanced": "Avanserte innstillinger",
|
||||
"settings_advanced_description": "Viser avanserte innstillinger og finjustering for erfarne brukere.",
|
||||
"settings_calibrate_motion_vectors": "Kalibrer bevegelsesvektorer",
|
||||
"settings_calibrate_motion_vectors_description": "Gir bedre bevegelsesforutsigbarhet for raskere sporing. Kan påvirke spill med mye fysikk.",
|
||||
"settings_autofix_playspace_jumps": "Autokorriger hopp i spilleområdet",
|
||||
"settings_autofix_playspace_jumps_description": "Prøver å automatisk finne og rette opp plutselige hopp i sporing av spilleområdet.",
|
||||
"settings_enforce_minimum_rotation_variance": "Tving minimum rotasjonsvarians",
|
||||
"settings_enforce_minimum_rotation_variance_description": "Avviser automatisk prøver med lignende rotasjon for å forbedre kalibreringskvaliteten.",
|
||||
"settings_locale": "Språk",
|
||||
"settings_reset": "Nullstill alle innstillinger",
|
||||
"settings_reset_description": "Tilbakestiller alle innstillinger til standardverdier. Dette er permanent og kan ikke angres.",
|
||||
"settings_reset_confirm": "Denne endringen er permanent og kan ikke angres. Er du sikker på at du vil fortsette?",
|
||||
"settings_reset_yes": "Ja",
|
||||
"settings_reset_no": "Nei",
|
||||
|
||||
/* about */
|
||||
"about_title": "Om",
|
||||
"about_description": "Space Calibrator er et gratis programvareverktøy basert på åpen kildekode som gjør det mulig å kombinere utstyr fra forskjellige leverandører i SteamVR.",
|
||||
"about_view_source_info": "Kildekoden er tilgjengelig i GitHub-repositoriet.",
|
||||
"about_contributors_title": "Bidragsytere",
|
||||
"about_contributors_description": "Space Calibrator har blitt til takket være følgende personer:",
|
||||
"about_translators_title": "Oversettere",
|
||||
"about_translators_description": "Space Calibrator har blitt oversatt av følgende personer:",
|
||||
"about_licenses_title": "Lisenser",
|
||||
"about_licenses_description": "Dette programmet er utgitt under MIT-lisensen. Andre avhengigheter har egne lisensvilkår; se oversikten nedenfor for mer informasjon.",
|
||||
"about_link_github": "GitHub",
|
||||
"about_link_discord": "Discord-server",
|
||||
"about_link_logs_dir": "Loggmappe",
|
||||
|
||||
/* self-troubleshooting */
|
||||
/* found another driver loaded in SteamVR -> legacy ipc connection successful */
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_title": "En annen instans av Space Calibrator kjører allerede",
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_description": "En annen versjon av Space Calibrator kjører allerede. Du må avinstallere denne før du kan fortsette. Vil du at denne skal fjernes automatisk?",
|
||||
/* found legacy overlay key registered (non steam) */
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_title": "En annen instans av Space Calibrator kjører allerede",
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_description": "Det finnes allerede en annen versjon av Space Calibrator på maskinen. Vil du avinstallere denne?",
|
||||
"troubleshoot_action_yes": "Ja",
|
||||
"troubleshoot_action_no": "Nei",
|
||||
"troubleshoot_action_quit": "Avslutt",
|
||||
|
||||
/* tutorial */
|
||||
"learn_title": "Lær",
|
||||
"learn_card_standard_calibration": "Standard kalibrering",
|
||||
"learn_card_standard_calibration_description": "Lær hvordan du kalibrerer et par enheter.",
|
||||
"learn_card_continuous_calibration": "Kontinuerlig kalibrering",
|
||||
"learn_card_continuous_calibration_description": "Kalibrerer ofte for å kompensere for avvik (drift) i løpet av økten.",
|
||||
"learn_card_base_station_management": "Basestasjonshåndtering",
|
||||
"learn_card_base_station_management_description": "Trådløs styring av dine SteamVR-basestasjoner.",
|
||||
"learn_card_ui_tour": "Omvisning i brukergrensesnittet",
|
||||
"learn_card_ui_tour_description": "Oversikt over brukergrensesnittet i Space Calibrator.",
|
||||
"learn_action_back": "Tilbake",
|
||||
|
||||
/* these are kinda like a messed up wiki because its inlined into the app like this, oh well lol */
|
||||
"learn_page_standard_desc": "Standardkalibrering synkroniserer to sporingssystemer slik at VR-enhetene dine fungerer sammen på samme fysiske område.",
|
||||
"learn_page_standard_select_devices_title": "Velg enhetene dine",
|
||||
"learn_page_standard_select_devices_desc": "Appen trenger å vite hvilke to enheter som skal synkroniseres før du kan starte.",
|
||||
"learn_page_standard_ref_device": "Referanseenhet: Dette er enheten du kalibrerer etter, som regel en kontroller.",
|
||||
"learn_page_standard_target_device": "Målenhet: Den ujusterte enheten som skal kalibreres, som regel en tracker eller tilsvarende.",
|
||||
"learn_page_standard_perform_title": "Utfør kalibreringen",
|
||||
"learn_page_standard_perform_step1": "Hold begge enhetene i et fast grep med én hånd. Pass på at de holdes helt i ro mens kalibreringen pågår.",
|
||||
"learn_page_standard_perform_step2": "Trykk på Standardkalibrering-knappen for å starte kalibreringen.",
|
||||
"learn_page_standard_perform_step3": "Gå rundt i rommet mens du fører enhetene i et åttetall, som vist under.",
|
||||
"learn_page_standard_speeds_title": "Kalibreringshastigheter",
|
||||
"learn_page_standard_speeds_desc": "Du kan velge å justere kalibreringshastigheten for å styre hvor mye bevegelse som trengs. Økt bevegelse gir som regel bedre kalibreringskvalitet.",
|
||||
"learn_page_standard_speed_fast": "Rask: Sparer tid ved kalibrering, men kan gi et mindre presist resultat.",
|
||||
"learn_page_standard_speed_slow": "Sakte / Veldig sakte: Kalibreringen tar lengre tid, men gir ofte mer presise resultater.",
|
||||
"learn_page_standard_completion_note": "Når fremdriftslinjen er fullført, skal enhetene dine dukke opp i VR med en gang. Prøv å kalibrere på nytt dersom dette ikke skjer.",
|
||||
"learn_page_standard_drift_title": "En merknad om avvik (drift)",
|
||||
"learn_page_standard_drift_desc": "Enhetene dine kan miste nøyaktigheten over tid slik at kalibreringen ikke lenger stemmer. Skjer dette, må du utføre en ny kalibrering. Dersom dette må gjøres ofte, bør du vurdere å aktivere kontinuerlig kalibrering.",
|
||||
|
||||
"learn_page_continuous_desc1": "Dersom du opplever at enhetene dine begynner å skli eller rotere ut av stilling mens du spiller, så vil kontinuerlig kalibrering være en mulig løsning.",
|
||||
"learn_page_continuous_desc2": "Kontinuerlig kalibrering sørger for at sporingen din alltid er synkronisert i bakgrunnen mens du spiller, slik at du slipper å avbryte spillet for manuell kalibrering.",
|
||||
"learn_page_continuous_note_title": "Merk",
|
||||
"learn_page_continuous_note_desc": "Du MÅ ha en egen tracker montert på VR-headsettet ditt for å bruke denne funksjonen.",
|
||||
"learn_page_continuous_desc3": "Kontinuerlig kalibrering prøver å rekalibrere enhetene dine med jevne mellomrom for å fjerne alt av drift. Dette gjør at du slipper å tenke på kalibrering etter at første oppsett er ferdig.",
|
||||
"learn_page_continuous_setup_instructions": "For å konfigurere kontinuerlig kalibrering må du først velge enhetene dine slik de er beskrevet under standardkalibrering. VR-headsettet skal velges som referanseenhet, mens kalibreringstrackeren skal være målenhet. Trykk så på knappen for kontinuerlig kalibrering for å sette i gang. Den første kalibreringen kan ta litt tid, så beveg deg gjerne rundt for å hjelpe appen med å forstå bevegelsene dine!",
|
||||
"learn_page_continuous_should_use_title": "Bør du bruke kontinuerlig kalibrering?",
|
||||
"learn_page_continuous_should_use_standard": "Velg standardkalibrering hvis du ikke har en ekstra tracker på VR-headsettet, sjelden har lange VR-økter, eller synes det er greit å rekalibrere litt når det oppstår avvik.",
|
||||
"learn_page_continuous_should_use_continuous": "Benytt kontinuerlig kalibrering for å slippe å bekymre deg for avvik. Dette er lurt om du bruker mye tid i VR eller opplever at posisjonen forskyver seg over tid.",
|
||||
"learn_page_continuous_physical_setup_title": "Fysisk oppsett (montering av trackeren på VR-headsettet ditt)",
|
||||
"learn_page_continuous_physical_setup_desc1": "Kontinuerlig kalibrering krever en egen tracker montert på VR-headsettet ditt. Utvalget av fester varierer basert på hvilket VR-headsett og tracker-modell du har. Som regel finner du 3D-modeller på nettet som kan 3D-printes for å komme i gang, ellers kan du spørre rundt i fellesskapet for å få tips fra andre.",
|
||||
"learn_page_continuous_physical_setup_desc2": "Etter montering må trackeren sitte stødig på VR-headsettet. Den skal ikke kunne bevege seg, rotere eller riste. En stabil montering sikrer mer nøyaktig kalibrering.",
|
||||
|
||||
"learn_page_basestation_desc": "Space Calibrator gjør det mulig å styre SteamVR-basestasjoner, forutsatt at du har en kompatibel BLE Bluetooth-adapter.",
|
||||
"learn_page_basestation_1_title": "Basestasjon 1.0-modeller",
|
||||
"learn_page_basestation_1_desc": "Disse kan kun skrus av eller på. Det er ikke mulig å endre kanaler trådløst; du må i stedet bruke den fysiske knappen bak på basestasjonen for å bytte kanal.",
|
||||
"learn_page_basestation_2_title": "Basestasjon 2.0-modeller",
|
||||
"learn_page_basestation_2_desc1": "Produsert av både Valve og HTC, disse tilbyr bedre trådløs styring enn 1.0-basestasjoner. Her kan du kontrollere av- og på-funksjonen og endre kanalinnstillinger. 2.0-basestasjoner må ha hver sin unike kanal for å fungere. Skulle det oppstå en konflikt, vil Space Calibrator hjelpe deg med å løse den.",
|
||||
"learn_page_basestation_2_desc2": "For å endre kanal på en 2.0-basestasjon, går du til Basestasjonshåndtering-tabben, trykker på redigeringsikonet for den aktuelle basestasjonen og velger ønsket kanal (markert med grønt).",
|
||||
"learn_page_basestation_auto_power_title": "Automatisk strømstyring",
|
||||
"learn_page_basestation_auto_power_desc": "Under innstillingsfanen kan du aktivere automatisk styring av basestasjoner. Dette slår på basestasjonene når Space Calibrator starter, og slår dem av igjen når SteamVR lukkes (så lenge Space Calibrator kjører). Merk at basestasjonene IKKE slås av automatisk hvis du lukker Space Calibrator manuelt før SteamVR.",
|
||||
|
||||
"learn_page_ui_tour_desc": "Dette grensesnittet er delt opp i flere faner som inneholder forskjellige ting.",
|
||||
"learn_page_ui_tour_calibration_heading": "Kalibreringsfane",
|
||||
"learn_page_ui_tour_cal_desc1": "Kalibreringsfanen inneholder innstillinger for kalibrering. Her kan du administrere kalibreringene dine.",
|
||||
"learn_page_ui_tour_cal_desc2": "Øverst ser du et kort som forteller om en kalibrering er aktiv, og hvilken type det er snakk om.",
|
||||
"learn_page_ui_tour_cal_desc3": "Under dette velger du hvilke enheter som skal brukes til kalibrering. Begynn med å velge sporingssystemene som skal kalibreres. Bruk deretter venstre rute for å velge referanseenhet, og høyre rute for å velge enheten som skal kalibreres.",
|
||||
"learn_page_ui_tour_cal_desc4": "Under dette finner du knappene for å utføre en kalibrering. Er du usikker på hvilken metode du skal bruke, finner du mer informasjon på sidene om standard og kontinuerlig kalibrering.",
|
||||
"learn_page_ui_tour_cal_desc5": "Nederst i kalibreringsfanen ligger det flere alternativer for kalibrering. Enkelte av disse valgene forutsetter at avanserte innstillinger er aktivert.",
|
||||
"learn_page_ui_tour_base_stations_heading": "Basestasjonshåndteringsfanen",
|
||||
"learn_page_ui_tour_bs_desc": "Her kan du styre alle basestasjoner i rommet ditt via en støttet BLE Bluetooth-adapter. Som regel er det ikke behov for å endre disse innstillingene etter første gangs oppsett.",
|
||||
"learn_page_ui_tour_settings_heading": "Innstillingsfane",
|
||||
"learn_page_ui_tour_settings_desc1": "Her kan du konfigurere programmets globale innstillinger, som avanserte innstillinger, basestasjonshåndtering og språk.",
|
||||
"learn_page_ui_tour_settings_desc2": "Noen funksjoner krever at du slår på avanserte innstillinger. Dette bør kun gjøres av erfarne brukere.",
|
||||
|
||||
/* Names of the various languages one may select. Shown in settings */
|
||||
"languages_en_GB": "Engelsk (UK)",
|
||||
"languages_en_US": "Engelsk (US)",
|
||||
"languages_fr": "Fransk",
|
||||
"languages_it": "Italiensk",
|
||||
"languages_de": "Tysk",
|
||||
"languages_nl": "Nederlandsk",
|
||||
"languages_es_ES": "Spansk (Spania)",
|
||||
"languages_es_US": "Spansk (Latin-Amerika)",
|
||||
"languages_da": "Dansk",
|
||||
"languages_sv": "Svensk",
|
||||
"languages_fi": "Finsk",
|
||||
"languages_no": "Norsk",
|
||||
"languages_bg": "Bulgarsk",
|
||||
"languages_pl": "Polsk",
|
||||
"languages_cs": "Tsjekkisk",
|
||||
"languages_el": "Gresk",
|
||||
"languages_hu": "Ungarsk",
|
||||
"languages_pt_PT": "Portugisisk (Portugal)",
|
||||
"languages_pt_BR": "Portugisisk (Brasil)",
|
||||
"languages_ro": "Rumensk",
|
||||
"languages_ru": "Russisk",
|
||||
"languages_tr": "Tyrkisk",
|
||||
"languages_uk": "Ukrainsk",
|
||||
"languages_zh_HANS": "Kinesisk (Forenklet)",
|
||||
"languages_zh_HANT": "Kinesisk (Tradisjonell)",
|
||||
"languages_ja": "Japansk",
|
||||
"languages_ko": "Koreansk",
|
||||
"languages_th": "Thai",
|
||||
"languages_vi": "Vietnamesisk",
|
||||
"languages_system": "Systemspråk"
|
||||
}
|
||||
@@ -0,0 +1,278 @@
|
||||
{
|
||||
"app_title": "{0} {1}", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"app_title_vr": "{0} {1} - zamknij nakładkę VR, aby użyć myszy", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"tracking_system_no_systems": "Brak śledzonych urządzeń. Włącz urządzenie, aby kontynuować.", /* Should never be hit but you never know */
|
||||
|
||||
"error_unknown_catastrophic": "Wystąpił krytyczny błąd! Zgłoś go deweloperowi na Githubie lub w Steam Discussions, aby można go było naprawić.",
|
||||
"ipc_unavailable": "Nie udało się połączyć ze sterownikiem Space Calibrator SteamVR. Sprawdź integralność plików w Właściwości -> Zainstalowane pliki, lub zainstaluj aplikację ponownie.",
|
||||
"steamvr_unavailable": "Nie udało się połączyć ze SteamVR.",
|
||||
"vr_troubleshooting_hmd_not_found": "Podłącz gogle VR i uruchom SteamVR.",
|
||||
"vr_troubleshooting_connect_steamlink": "Otwórz aplikacje SteamLink na goglach VR i połącz się ze SteamVR.",
|
||||
"vr_troubleshooting_generic": "Podłącz gogle VR i uruchom SteamVR. ({0} {1})", /* 0 : SteamVR init error (eg 108), 1 : SteamVR init error string (eg Headset not connected) - this string is provided by Steam. */
|
||||
|
||||
"calibration_title": "Kalibracja",
|
||||
"calibration_count_none": "Brak Kalibracji. Utwórz nową kalibrację, aby rozpocząć.", // Shown when there are no calibrations active
|
||||
"calibration_new": "Nowa Kalibracja",
|
||||
"calibration_delete": "Usuń Kalibrację",
|
||||
"calibration_next": "Następna Kalibracja",
|
||||
"calibration_previous": "Poprzednia Kalibracja",
|
||||
|
||||
"calibration_status_none": "Brak aktywnej Kalibracji",
|
||||
"calibration_status_none_description": "Zaznacz parę urządzeń i przeprowadź kalibrację, aby zacząć.",
|
||||
"calibration_status_edit": "Edycja Kalibracji",
|
||||
"calibration_status_edit_description": "Zmodyfikuj bieżącą kalibrację.",
|
||||
"calibration_status_continuous": "Ciągła Kalibracja",
|
||||
"calibration_status_continuous_description": "Masz aktywną kalibrację. Używa zamontowanego trackera do automatycznej rekalibracji co kilka sekund.",
|
||||
"calibration_status_standard": "Standardowa Kalibracja",
|
||||
"calibration_status_standard_description": "Masz aktywną kalibrację. W przypadku wystąpienia dryfu może być konieczna rekalibracja.",
|
||||
|
||||
// space here refers to a tracking space / tracking system.
|
||||
"reference_device": "Urządzenie referencyjne",
|
||||
"reference_device_description": "To urządzenie, według którego kalibrujesz. Zazwyczaj gogle VR lub kontrolery.",
|
||||
"target_device": "Urządzenie docelowe",
|
||||
"target_device_description": "To urządzenie zostanie użyte do dopasowania trackerów lub kontrolerów.",
|
||||
"select_reference_device": "Wybierz urządzenie referencyjne",
|
||||
"select_target_device": "Wybierz urządzenie docelowe",
|
||||
|
||||
"identify_selected_devices": "Zidentyfikuj wybrane urządzenie (miga diodą lub wibruje)",
|
||||
"identify_auto_detect_devices": "Automatyczne wykrywanie urządzeń",
|
||||
"calibration_error_reference_hmd_missing": "Nie można znaleźć urządzenia docelowego z systemu śledzenia \"{0}\". Spróbuj ponowną kalibrację.", /* 0 : tracking system name, eg SteamVR Tracking*/
|
||||
"calibration_warning_stage_tracking_disabled": "Śledzenie obszaru jest wyłączone! Dla lepszych wrażeń, otwórz menu Virtual Desktop na goglach Quest, przejdź do zakładki Streaming i włącz \"Center to play area (Stage Tracking)\".",
|
||||
"calibration_warning_stage_tracking_disabled_ignore_button": "Nie pokazuj ponownie",
|
||||
|
||||
"calibration_action_start": "Standardowa Kalibracja",
|
||||
"calibration_action_clear": "Wyczyść Kalibrację",
|
||||
"calibration_action_continuous": "Ciągła Kalibracja",
|
||||
"calibration_action_edit": "Edytuj Kalibrację",
|
||||
"save_calibration_profile": "Zapisz Profil",
|
||||
|
||||
"calibration_progress": "Postęp Kalibracji",
|
||||
"calibration_info_move_around_insufficient_samples": "Przytrzymaj wybrane urządzenia razem, i następnie przejdź po swoim obszarze gry, delikatnie obracając je w kształt ósemki.",
|
||||
|
||||
"calibration_speed": "Szybkość Kalibracji",
|
||||
"calibration_speed_description": "Czas trwania kalibracji. Wolniejsze kalibracje bywają dokładniejsze.",
|
||||
"calibration_speed_fast": "Szybka",
|
||||
"calibration_speed_slow": "Wolna",
|
||||
"calibration_speed_very_slow": "Bardzo Wolna",
|
||||
|
||||
/* Editing calibrations */
|
||||
"edit_calibration_rotation": "Rotacja",
|
||||
"edit_calibration_position": "Pozycja (m)",
|
||||
"edit_calibration_yaw": "Odchylenie",
|
||||
"edit_calibration_pitch": "Pochylenie",
|
||||
"edit_calibration_roll": "Przechylenie",
|
||||
"edit_calibration_x": "X",
|
||||
"edit_calibration_y": "Y",
|
||||
"edit_calibration_z": "Z",
|
||||
"edit_calibration_scale": "Skala (m)",
|
||||
|
||||
"continuous_hide_tracker": "Ukryj tracker referencyjny przed aplikacjami",
|
||||
"continuous_relative_calibration": "Włącz kalibrację względną",
|
||||
"continuous_relative_calibration_description": "Kalibracja będzie względna w stosunku do urządzenia docelowego (zazwyczaj gogli), dzięki czemu aktualizuje się w każdej klatce bez konieczności ponownej kalibracji. WYMAGA Ciągłej Kalibracji.",
|
||||
|
||||
/* HMD names for Virtual Desktop */
|
||||
/* Virtual desktop lies that it's a Quest 2/3 on most headsets, so we have to substitute the real HMD name ourselves. you generally should
|
||||
NOT have to change these! but some headsets have different names in certain regions (eg PFD MR is YVR MR in China) */
|
||||
"virtual_desktop_hmd_none": "None", /* should never appear but you never know*/
|
||||
"virtual_desktop_hmd_gearvr": "Samsung Gear VR",
|
||||
"virtual_desktop_hmd_oculus_go": "Oculus Go",
|
||||
"virtual_desktop_hmd_oculus_quest_1": "Oculus Quest",
|
||||
"virtual_desktop_hmd_oculus_quest_2": "Oculus Quest 2",
|
||||
"virtual_desktop_hmd_meta_quest_pro": "Meta Quest Pro",
|
||||
"virtual_desktop_hmd_pico_4": "Pico 4",
|
||||
"virtual_desktop_hmd_meta_quest_3": "Meta Quest 3",
|
||||
"virtual_desktop_hmd_meta_quest_3s": "Meta Quest 3S",
|
||||
"virtual_desktop_hmd_pico_4_ultra": "Pico 4 Ultra",
|
||||
"virtual_desktop_hmd_samsung_galaxy_xr": "Samsung Galaxy XR",
|
||||
"virtual_desktop_hmd_play_for_dream_mr": "Play For Dream MR",
|
||||
|
||||
/* vertical tabs on the left */
|
||||
"tab_page_calibration": "Kalibracja",
|
||||
"tab_page_graphs": "Wykresy",
|
||||
"tab_page_base_station_management": "Stacje Bazowe",
|
||||
"tab_page_settings": "Ustawienia",
|
||||
"tab_page_debug": "Debugowanie",
|
||||
"tab_page_learn": "Samouczek",
|
||||
"tab_page_about": "O programie",
|
||||
|
||||
/* graphs */
|
||||
"graphs_title": "Wykresy",
|
||||
|
||||
/* base stations */
|
||||
"base_stations_title": "Zarządzanie Stacjami Bazowymi",
|
||||
"base_stations_no_bluetooth": "Nie znaleziono prawidłowego adaptera Bluetooth. Podłącz adapter Bluetooth z obsługą BLE, aby móc zarządzać stacjami bazowymi.",
|
||||
"base_stations_none_found": "Nie wykryto Stacji Bazowych. Jeśli jakiekolwiek posiadasz, upewnij się, że są podłączone do zasilania.",
|
||||
"base_stations_header_info": "{0}", // 0: station ID (LHB XXXXXXXX) / nickname
|
||||
"base_stations_warning_collision": "Wykryto kolizję kanałów! To spowoduje problemy ze śledzeniem. Każda ze Stacji Bazowych powinna używać unikalnego kanału.",
|
||||
"base_stations_state_sleep": "Uśpiony",
|
||||
"base_stations_state_standby": "Czuwanie",
|
||||
"base_stations_state_active": "Aktywny",
|
||||
"base_stations_state_unknown": "Nieznany",
|
||||
"base_stations_state_faulty": "Wadliwy",
|
||||
"base_stations_channel_select_label": "Wybierz kanał Stacji Bazowej:",
|
||||
"base_stations_active_channel": "Kanał {0}", // 0: channel number (1-15) ; eg Channel 12
|
||||
"base_stations_nickname": "Nazwa własna",
|
||||
|
||||
/* actions */
|
||||
"base_stations_action_wake_all": "Obudź Wszystkie",
|
||||
"base_stations_action_sleep_all": "Uśpij Wszystkie",
|
||||
"base_stations_action_fix_collisions": "Napraw Kolizje Kanałów",
|
||||
"base_stations_btn_wake": "Wybudź",
|
||||
"base_stations_btn_standby": "Czuwanie",
|
||||
"base_stations_btn_sleep": "Uśpij",
|
||||
"base_stations_btn_edit": "Edytuj",
|
||||
"base_stations_btn_save": "Zapisz",
|
||||
|
||||
"base_station_power_management": "Zarządzanie Zasilaniem Stacji Bazowych",
|
||||
"base_stations_power_mgmt_enable": "Włącz zarządzanie zasilaniem *",
|
||||
"base_stations_power_mgmt_enable_description_standby": "Podłączone Stacje Bazowe przechodzą w tryb czuwania, gdy SteamVR nie jest używany, i wybudzają się ponownie po uruchomieniu SteamVR.",
|
||||
"base_stations_power_mgmt_enable_description_sleep": "Podłączone Stacje Bazowe przechodzą w tryb uśpienia, gdy SteamVR nie jest używany, i wybudzają się ponownie po uruchomieniu SteamVR.",
|
||||
"base_stations_power_mgmt_on_startup": "Włączaj Stacje Bazowe przy uruchomieniu SteamVR",
|
||||
"base_stations_power_mgmt_on_startup_description": "Wyłączone Stacje Bazowe wybudzają się przy uruchomieniu SteamVR.",
|
||||
"base_stations_power_mgmt_on_shutdown": "Wyłączaj Stacje Bazowe przy zamknięciu SteamVR",
|
||||
"base_stations_power_mgmt_on_shutdown_description": "Podłączone Stacje Bazowe są wyłączane, gdy SteamVR jest zamknięty.",
|
||||
"base_stations_power_mgmt_standby": "Tryb czuwania",
|
||||
"base_stations_power_mgmt_standby_description": "Stacje Bazowe wyłączą tylko swoje lasery, co pozwala na szybsze wybudzenie po uruchomieniu SteamVR. Opcja niedostępna w modelach Stacji Bazowych 1.0 oraz niektórych modelach 2.0. W takich przypadkach użyty zostanie tryb uśpienia.",
|
||||
"base_stations_power_mgmt_sleep": "Uśpienie",
|
||||
"base_stations_power_mgmt_sleep_description": "Stacje Bazowe wyłączą zarówno lasery, jak i silniki.",
|
||||
"base_stations_power_mgmt_warning": "* NIEZALECANE w przypadku współdzielonych przestrzeni śledzenia z wieloma użytkowniami SteamVR.",
|
||||
|
||||
/* settings */
|
||||
"settings_title": "Ustawienia",
|
||||
"settings_advanced": "Ustawienia zaawansoowane",
|
||||
"settings_advanced_description": "Pokazuje dodatkowe ustawienia i opcje precyzyjnej regulacji dla zaawansowanych użytkowników.",
|
||||
"settings_calibrate_motion_vectors": "Kalibruj wektory ruchu",
|
||||
"settings_calibrate_motion_vectors_description": "Poprawia przewidywanie ruchu, zapewniając bardziej responsywne śledzenie. Może wpływać na gry wymagającej dużej wydajności fizyki.",
|
||||
"settings_autofix_playspace_jumps": "Automatycznie koryguj przeskoki przestrzeni gry",
|
||||
"settings_autofix_playspace_jumps_description": "Próbuje automatycznie wykrywać i korygować nagłe przeskoki w śledzeniu przestrzeni gry.",
|
||||
"settings_enforce_minimum_rotation_variance": "Wymuszaj minimalną wariancję rotacji",
|
||||
"settings_enforce_minimum_rotation_variance_description": "Automatycznie odrzuca próbki o podobnej rotacji, aby poprawić jakość kalibracji.",
|
||||
"settings_locale": "Język",
|
||||
"settings_reset": "Zresetuj wszystkie ustawienia",
|
||||
"settings_reset_description": "Przywraca wszystkie ustawienia do domyślnych. Ta operacja jest trwała i nie można jej cofnąć.",
|
||||
"settings_reset_confirm": "Ta operacja jest trwała i nie można jej cofnąć. Czy na pewno chcesz kontynuować?",
|
||||
"settings_reset_yes": "Tak",
|
||||
"settings_reset_no": "Nie",
|
||||
|
||||
/* about */
|
||||
"about_title": "O programie",
|
||||
"about_description": "Space Calibrator to darmowe narzędzie open-source umożliwiające używanie urządzeń różnych producentów w SteamVR.",
|
||||
"about_view_source_info": "Kod źródłowych można przejrzeć w repozytorium Github.",
|
||||
"about_contributors_title": "Kontrybutorzy",
|
||||
"about_contributors_description": "Space Calibrator powstał dzięki pomocy tych osób:",
|
||||
"about_translators_title": "Tłumacze",
|
||||
"about_translators_description": "Space Calibrator został przetłumaczony przez te osoby:",
|
||||
"about_licenses_title": "Licencje",
|
||||
"about_licenses_description": "Ten program jest udostępniany na licencji MIT. Inne zależności są licencjonowane na podstawie odrębnych licencji. Szczegółowe informacje znajdziesz poniżej.",
|
||||
"about_link_github": "GitHub",
|
||||
"about_link_discord": "Serwer Discord",
|
||||
"about_link_logs_dir": "Folder Zdarzeń",
|
||||
|
||||
/* self-troubleshooting */
|
||||
/* found another driver loaded in SteamVR -> legacy ipc connection successful */
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_title": "Inny Space Calibrator jest już uruchomiony",
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_description": "Kolidująca wersja Space Calibrator już jest uruchomiona. Musisz ją odinstalować, aby móc korzystać z aplikacji. Czy chcesz usunąć ją automatycznie?",
|
||||
/* found legacy overlay key registered (non steam) */
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_title": "Inny Space Calibrator jest już uruchomiony",
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_description": "Inna wersja Space Calibrator jest obecnie zainstalowana. Czy chcesz ją usunąć?",
|
||||
"troubleshoot_action_yes": "Tak",
|
||||
"troubleshoot_action_no": "Nie",
|
||||
"troubleshoot_action_quit": "Wyjdź",
|
||||
|
||||
/* tutorial */
|
||||
"learn_title": "Samouczek",
|
||||
"learn_card_standard_calibration": "Standardowa Kalibracja",
|
||||
"learn_card_standard_calibration_description": "Dowiedz się, jak skalibrować parę urządzeń.",
|
||||
"learn_card_continuous_calibration": "Ciągła Kalibracja",
|
||||
"learn_card_continuous_calibration_description": "Kalibruj często, aby zapobieć dryfowaniu podczas sesji.",
|
||||
"learn_card_base_station_management": "Zarządzanie Stacjami Bazowymi",
|
||||
"learn_card_base_station_management_description": "Bezprzewodowo steruj Stacjami Bazowymi SteamVR.",
|
||||
"learn_card_ui_tour": "Przegląd Interfejsu",
|
||||
"learn_card_ui_tour_description": "Przegląd interfejsu programu Space Calibrator.",
|
||||
"learn_action_back": "Wstecz",
|
||||
|
||||
/* these are kinda like a messed up wiki because its inlined into the app like this, oh well lol */
|
||||
"learn_page_standard_desc": "Standardowa Kalibracja wyrównuje ze sobą dwa systemy śledzenia, dzięki czemu twoje urządzenia VR współpracuja w tej samej przestrzeni gry.",
|
||||
"learn_page_standard_select_devices_title": "Zaznacz urządzenia",
|
||||
"learn_page_standard_select_devices_desc": "Przed rozpoczęciem aplikacja musi wiedzieć, które dwa urządzenia chcesz ze sobą wyrównać.",
|
||||
"learn_page_standard_ref_device": "Urządzenie Referenycjne: Urządzenie, do którego się kalibrujesz - zazwyczaj kointroler.",
|
||||
"learn_page_standard_target_device": "Urządzenie Docelowe: Niewyrównane urządzenie, które kalibrujesz - zazwyczaj tracker lub podobne urządzenie.",
|
||||
"learn_page_standard_perform_title": "Przeprowadź Kalibrację",
|
||||
"learn_page_standard_perform_step1": "Trzymaj oba urządzenia w jednej dłoni. Upewnij się, żeby nie ruszały się podczas kalibracji.",
|
||||
"learn_page_standard_perform_step2": "Kliknij przycisk Standardowa Kalibracja, aby rozpocząć proces.",
|
||||
"learn_page_standard_perform_step3": "Poruszaj się po pokoju, poruszając urządzeniami w kształcie ósemki, jak pokazano niżej.",
|
||||
"learn_page_standard_speeds_title": "Szybkość Kalibracji",
|
||||
"learn_page_standard_speeds_desc": "Możesz opcjonalnie zmienić czas trwania kalibracji, co wpływa na wymaganą ilość ruchu. Większa ilość ruchu zazwyczaj poprawia jakość kalibracji.",
|
||||
"learn_page_standard_speed_fast": "Szybka: Trwa krócej, ale może skutkować kalibracją gorszej jakości.",
|
||||
"learn_page_standard_speed_slow": "Wolna / Bardzo Wolna: Trwa dłużej, ale pozwala uzyskać dokładniejszą kalibrację.",
|
||||
"learn_page_standard_completion_note": "Gdy pasek postępu się zapełniu, urządzenia powinny natychmiast wyrównać się w VR. Jeśli tak się nie stanie, spróbuj skalibrować urządzenia ponownie.",
|
||||
"learn_page_standard_drift_title": "Uwaga na tematu dryfu (Drift)",
|
||||
"learn_page_standard_drift_desc": "Z czasem urządzenia mogą zacząć dryfować, co niszczy kalibrację. Jeśli tak się stanie, musisz ponownie skalibrować urządzenia. Jeśli zdarza się to często, spróbuj użyć Ciągłej Kalibracji.",
|
||||
|
||||
"learn_page_continuous_desc1": "Jeśli zauważysz, że twoje urządzenia powoli się przesuwają, obracają lub tracą pozycję podczas gry, Ciągła Kalibracja powinna rozwiązać problem.",
|
||||
"learn_page_continuous_desc2": "Zamiast ciągłego rekalibrowania ręcznie, Ciągła Kalibracja automatycznie synchronizuje śledzenie w tle podczas gry.",
|
||||
"learn_page_continuous_note_title": "Uwaga",
|
||||
"learn_page_continuous_note_desc": "Do korzystania z tej funkcji WYMAGANY jest dedykowany tracker zamontowany na goglach.",
|
||||
"learn_page_continuous_desc3": "Ciągła Kalibracja próbuje często ponownie kalibrować urządzenia, aby całkowicie wyeliminować dryfowanie. Dzięki temu po skonfigurowaniu możesz zapomnieć o problemach z kalibracją.",
|
||||
"learn_page_continuous_setup_instructions": "Aby skonfigurować Ciągłą Kalibrację, najpierw wybierz urządzenia zgodnie z instrukcją ze strony Standardowej Kalibracji. Gogle powinny być wybrane jako urządzenia referencyjne, a tracker kalibracyjny jako urządzenie docelowe. Następnie kliknij przycisk Ciągła Kalibracja. Wstępna kalibracja może zająć chwile, więc poruszaj się, aby aplikacja poznawała twój system śledzenia!",
|
||||
"learn_page_continuous_should_use_title": "Czy powinieneś używać Ciągłej Kalibracji?",
|
||||
"learn_page_continuous_should_use_standard": "Używaj Standardowej Kalibracji, jeśli nie masz dodatkowego trackera do zamontowania na goglach, nie spędzasz w VR dużo czasu lub nie przeszkadza ci sporadyczna ponowna kalibracja po wystąpieniu dryfu.",
|
||||
"learn_page_continuous_should_use_continuous": "Używaj Ciągłej Kalibracji, jeśli nie chcesz mieć problemów z dryfowaniem. Jest zalecane, gdy spędzasz dużo czasu w VR lub zauważasz znaczny dryf z upływem czasu.",
|
||||
"learn_page_continuous_physical_setup_title": "Montaż fizyczny (mocowanie trackera do gogli)",
|
||||
"learn_page_continuous_physical_setup_desc1": "Aby korzystać z Ciągłej Kalibracji, potrzebujesz dedykowanego trackera do przymocowanego do gogli VR. Istnieją różne uchwyty w zależności od posiadanego modelu gogli oraz trackera. Gotowe modele 3D do druku łatwo znajdziesz w internecie lub pytając osoby na forum.",
|
||||
"learn_page_continuous_physical_setup_desc2": "Po zamontowaniu tracker powinien być stabilnie przymocowany do gogli. Nie powinien się chwiać, obracać ani trząść. Im stabilniejszy montaż, tym bardziej spójna i dokładna kalibracja.",
|
||||
|
||||
"learn_page_basestation_desc": "Space Calibrator pozwala na sterowanie stacjami bazowymi SteamVR, jeśli posiadasz kompatybilny adapter Bluetooth BLE.",
|
||||
"learn_page_basestation_1_title": "Stacje Bazowe - Modele 1.0",
|
||||
"learn_page_basestation_1_desc": "Te modele można jedynie włączać i wyłączać. Bezprzewodowa zmiana kanałów nie jest obsługiwana. Aby zmienić kanał, musisz nacisnąć fizyczny przycisk z tyłu stacji bazowej.",
|
||||
"learn_page_basestation_2_title": "Stacje Bazowe - Modele 2.0",
|
||||
"learn_page_basestation_2_desc1": "Produkowane zarówno przez Valve, jak i HTC, oferują lepszą obsługę zarządzania bezprzewodowego niż stacje 1.0. Możesz je włączać, wyłączać oraz zmieniać ich kanały. Każda stacja 2.0 musi działać na unikalnym kanale, w przeciwnym razie nie będą działać prawidłowo. Space Calibrator ma funkcję pomocy w naprawie kolizji kanałów, jeśli taka wystąpi.",
|
||||
"learn_page_basestation_2_desc2": "Aby zmienić kanał modelu 2.0, przejdź do zakładki Zarządzanie Stacjami Bazowymi, kliknij przycisk edycji przy wybranej stacji i wybierz żądany kanał (oznaczony na zielono).",
|
||||
"learn_page_basestation_auto_power_title": "Automatyczne Zarządzanie Zasilaniem",
|
||||
"learn_page_basestation_auto_power_desc": "W zakładce ustawienia możesz włączyć Automatyczne Zarządzanie Zasilaniem Stacji Bazowych, które włączy Stacje po uruchomieniu Space Calibrator i wyłączy je po zamknięciu SteamVR (gdy Space Calibrator działa w tle). Pamiętaj, że ręczne zamknięcie Space Calibrator przed zamknięciem SteamVR NIE wyłączy automatycznie Stacji Bazowych.",
|
||||
|
||||
"learn_page_ui_tour_desc": "Ten interfejs jest podzielony na kilka zakładek, z których każda zawiera różne opcje.",
|
||||
"learn_page_ui_tour_calibration_heading": "Zakładka Kalibracja",
|
||||
"learn_page_ui_tour_cal_desc1": "Zakładka Kalibracja zawiera opcje związane z procesem kalibracji. Tutaj zarządzasz swoimi Kalibracjami.",
|
||||
"learn_page_ui_tour_cal_desc2": "Na samej górze zobaczysz panel informujący o tym, czy kalibracja jest aktywna i jakiego jest typu.",
|
||||
"learn_page_ui_tour_cal_desc3": "Poniżej wybierasz urządzenia do kalibracji. Najpierw wybierz systemy śledzenia, które chcesz skalibrować. Następnie w lewym panelu wybierz urządzenia referencyjne, a w prawym panelu urządzenie, które ma zostać skalibrować (docelowe).",
|
||||
"learn_page_ui_tour_cal_desc4": "Poniżej znajdują się przyciski do uruchamiania kalibracji. Jeśli nie masz pewności, którą opcję wybrać, przeczytaj sekcje dotyczące Standardowej i Ciągłej Kalibracji.",
|
||||
"learn_page_ui_tour_cal_desc5": "Na dole zakładki Kalibracja znajdziesz dodatkowe opcje sterowania. Część z nich wymaga włączenia Ustawień zaawansowanych.",
|
||||
"learn_page_ui_tour_base_stations_heading": "Zakładka Zarządzanie Stacjami Bazowymi",
|
||||
"learn_page_ui_tour_bs_desc": "Tutaj możesz sterować Stacjami Bazowymi w swoim pokoju za pomocą obsługiwanego adaptera Bluetooth BLE. Zazwyczaj nie musisz tu nic zmieniać po wstępnej konfiguracji.",
|
||||
"learn_page_ui_tour_settings_heading": "Zakładka Ustawienia",
|
||||
"learn_page_ui_tour_settings_desc1": "Tutaj możesz dostosować ogólne ustawienia programu, w tym opcje zaawansowane, zarządzanie stacjami bazowymi oraz język interfejsu.",
|
||||
"learn_page_ui_tour_settings_desc2": "Niektóre funkcje aplikacji wymagają włączenia Ustawień zaawansowanych. Włącz je tylko wtedy, gdy wiesz, co robisz.",
|
||||
|
||||
/* Names of the various languages one may select. Shown in settings */
|
||||
"languages_en_GB": "Angielski (Brytyjski)",
|
||||
"languages_en_US": "Angielski (Amerykański)",
|
||||
"languages_fr": "Francuski",
|
||||
"languages_it": "Włoski",
|
||||
"languages_de": "Niemiecki",
|
||||
"languages_nl": "Holenderski",
|
||||
"languages_es_ES": "Hiszpański (Hiszpania)",
|
||||
"languages_es_US": "Hiszpański (Ameryka Łacińska)",
|
||||
"languages_da": "Duński",
|
||||
"languages_sv": "Szwedzki",
|
||||
"languages_fi": "Fiński",
|
||||
"languages_no": "Norweski",
|
||||
"languages_bg": "Bułgarski",
|
||||
"languages_pl": "Polski",
|
||||
"languages_cs": "Czeski",
|
||||
"languages_el": "Grecki",
|
||||
"languages_hu": "Węgierski",
|
||||
"languages_pt_PT": "Portugalski (Portugalia)",
|
||||
"languages_pt_BR": "Portugalski (Brazylia)",
|
||||
"languages_ro": "Rumuński",
|
||||
"languages_ru": "Rosyjski",
|
||||
"languages_tr": "Turecki",
|
||||
"languages_uk": "Ukraiński",
|
||||
"languages_zh_HANS": "Chiński (Uproszczony)",
|
||||
"languages_zh_HANT": "Chiński (Tradycyjny)",
|
||||
"languages_ja": "Japoński",
|
||||
"languages_ko": "Koreański",
|
||||
"languages_th": "Tajski",
|
||||
"languages_vi": "Wietnamski",
|
||||
"languages_system": "Język Systemu"
|
||||
}
|
||||
@@ -0,0 +1,278 @@
|
||||
{
|
||||
"app_title": "{0} {1}", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"app_title_vr": "{0} {1} - закройте оверлей для управления курсором", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"tracking_system_no_systems": "Не найдено ни одного отслеживаемого устройства. Включите отслеживаемое устройство, чтобы продолжить.", /* Should never be hit but you never know */
|
||||
|
||||
"error_unknown_catastrophic": "Что-то пошло совсем не так! Сообщите об этом разработчику через GitHub или на форуме Steam.",
|
||||
"ipc_unavailable": "Не удалось подключиться к SteamVR-драйверу Space Calibrator. Проверьте целостность файлов через Свойства -> Установленные файлы или переустановите приложение.",
|
||||
"steamvr_unavailable": "Не удалось подключиться к SteamVR.",
|
||||
"vr_troubleshooting_hmd_not_found": "Пожалуйста, подключите VR-гарнитуру и запустите SteamVR перед запуском программы.",
|
||||
"vr_troubleshooting_connect_steamlink": "Пожалуйста, запустите Steam Link на VR-гарнитуре и подключите её к SteamVR.",
|
||||
"vr_troubleshooting_generic": "Пожалуйста, подключите VR-гарнитуру и запустите SteamVR. ({0} {1})", /* 0 : SteamVR init error (eg 108), 1 : SteamVR init error string (eg Headset not connected) - this string is provided by Steam. */
|
||||
|
||||
"calibration_title": "Калибровка",
|
||||
"calibration_count_none": "Нет активных калибровок. Пожалуйста, создайте новую калибровку для начала работы.", // Shown when there are no calibrations active
|
||||
"calibration_new": "Новая калибровка",
|
||||
"calibration_delete": "Удалить калибровку",
|
||||
"calibration_next": "Следующая калибровка",
|
||||
"calibration_previous": "Предыдущая калибровка",
|
||||
|
||||
"calibration_status_none": "Нет активных калибровок",
|
||||
"calibration_status_none_description": "Пожалуйста, выберите пару устройств и откалибруйте их для начала работы.",
|
||||
"calibration_status_edit": "Редактирование калибровки",
|
||||
"calibration_status_edit_description": "Изменение текущей калибровки.",
|
||||
"calibration_status_continuous": "Непрерывная калибровка",
|
||||
"calibration_status_continuous_description": "Калибровка активна. Трекер на гарнитуре используется для автоматической перекалибровки каждые несколько секунд.",
|
||||
"calibration_status_standard": "Стандартная калибровка",
|
||||
"calibration_status_standard_description": "Калибровка активна. Вам придётся провести калибровку заново, если трекинг уплывёт.",
|
||||
|
||||
// space here refers to a tracking space / tracking system.
|
||||
"reference_device": "Основное устройство",
|
||||
"reference_device_description": "Это ваше основное устройство - VR-гарнитура или контроллер.",
|
||||
"target_device": "Калибруемое устройство",
|
||||
"target_device_description": "Это устройство будет использоваться для калибровки трекеров или контроллеров.",
|
||||
"select_reference_device": "Выбрать основное устройство",
|
||||
"select_target_device": "Выбрать калибруемое устройство",
|
||||
|
||||
"identify_selected_devices": "Идентифицировать устройства (миганием или вибрацией)",
|
||||
"identify_auto_detect_devices": "Автоопределение устройств",
|
||||
"calibration_error_reference_hmd_missing": "Не удалось найти устройство из системы трекинга \"{0}\". Вам нужно провести калибровку заново.", /* 0 : tracking system name, eg SteamVR Tracking*/
|
||||
"calibration_warning_stage_tracking_disabled": "Stage Tracking выключен! Для более надёжной работы откройте меню Virtual Desktop, перейдите на вкладку Streaming и выберите \"Center to play area (Stage Tracking)\".",
|
||||
"calibration_warning_stage_tracking_disabled_ignore_button": "Больше не показывать",
|
||||
|
||||
"calibration_action_start": "Стандартная калибровка",
|
||||
"calibration_action_clear": "Очистить калибровку",
|
||||
"calibration_action_continuous": "Непрерывная калибровка",
|
||||
"calibration_action_edit": "Изменить калибровку",
|
||||
"save_calibration_profile": "Сохранить профиль",
|
||||
|
||||
"calibration_progress": "Прогресс калибровки",
|
||||
"calibration_info_move_around_insufficient_samples": "Прижмите выбранные вами устройства друг к другу и походите по игровой зоне, плавно двигая оба устройства по траектории в форме восьмёрки.",
|
||||
|
||||
"calibration_speed": "Скорость калибровки",
|
||||
"calibration_speed_description": "Насколько быстро собираются данные для калибровки. Обычно чем медленнее калибровка, тем выше её точность.",
|
||||
"calibration_speed_fast": "Быстрая",
|
||||
"calibration_speed_slow": "Медленная",
|
||||
"calibration_speed_very_slow": "Очень медленная",
|
||||
|
||||
/* Editing calibrations */
|
||||
"edit_calibration_rotation": "Поворот",
|
||||
"edit_calibration_position": "Положение (м)",
|
||||
"edit_calibration_yaw": "Рыскание",
|
||||
"edit_calibration_pitch": "Тангаж",
|
||||
"edit_calibration_roll": "Крен",
|
||||
"edit_calibration_x": "X",
|
||||
"edit_calibration_y": "Y",
|
||||
"edit_calibration_z": "Z",
|
||||
"edit_calibration_scale": "Масштаб (м)",
|
||||
|
||||
"continuous_hide_tracker": "Скрывать калибруемый трекер от других приложений",
|
||||
"continuous_relative_calibration": "Включить относительную калибровку",
|
||||
"continuous_relative_calibration_description": "Калибровка применяется относительно основного устройства (обычно вашей гарнитуры), чтобы она применялась каждый кадр без перекалибровок. Для функции нужна непрерывная калибровка.",
|
||||
|
||||
/* HMD names for Virtual Desktop */
|
||||
/* Virtual desktop lies that it's a Quest 2/3 on most headsets, so we have to substitute the real HMD name ourselves. you generally should
|
||||
NOT have to change these! but some headsets have different names in certain regions (eg PFD MR is YVR MR in China) */
|
||||
"virtual_desktop_hmd_none": "Отсутствует", /* should never appear but you never know*/
|
||||
"virtual_desktop_hmd_gearvr": "Samsung Gear VR",
|
||||
"virtual_desktop_hmd_oculus_go": "Oculus Go",
|
||||
"virtual_desktop_hmd_oculus_quest_1": "Oculus Quest",
|
||||
"virtual_desktop_hmd_oculus_quest_2": "Oculus Quest 2",
|
||||
"virtual_desktop_hmd_meta_quest_pro": "Meta Quest Pro",
|
||||
"virtual_desktop_hmd_pico_4": "Pico 4",
|
||||
"virtual_desktop_hmd_meta_quest_3": "Meta Quest 3",
|
||||
"virtual_desktop_hmd_meta_quest_3s": "Meta Quest 3S",
|
||||
"virtual_desktop_hmd_pico_4_ultra": "Pico 4 Ultra",
|
||||
"virtual_desktop_hmd_samsung_galaxy_xr": "Samsung Galaxy XR",
|
||||
"virtual_desktop_hmd_play_for_dream_mr": "Play For Dream MR",
|
||||
|
||||
/* vertical tabs on the left */
|
||||
"tab_page_calibration": "Калибровка",
|
||||
"tab_page_graphs": "Графики",
|
||||
"tab_page_base_station_management": "Базовые станции",
|
||||
"tab_page_settings": "Настройки",
|
||||
"tab_page_debug": "Отладка",
|
||||
"tab_page_learn": "Инструкции",
|
||||
"tab_page_about": "О программе",
|
||||
|
||||
/* graphs */
|
||||
"graphs_title": "Графики",
|
||||
|
||||
/* base stations */
|
||||
"base_stations_title": "Управление базовыми станциями",
|
||||
"base_stations_no_bluetooth": "Не удалось найти совместимый Bluetooth-адаптер. Подключите адаптер с поддержкой BLE для управления базовыми станциями.",
|
||||
"base_stations_none_found": "Базовые станции не найдены. Проверьте, подключены ли они к сети.",
|
||||
"base_stations_header_info": "{0}", // 0: station ID (LHB XXXXXXXX) / nickname
|
||||
"base_stations_warning_collision": "Базовые станции находятся на одном канале! Из-за этого будут проблемы с отслеживанием. Базовые станции должны находиться на разных каналах.",
|
||||
"base_stations_state_sleep": "Режим сна",
|
||||
"base_stations_state_standby": "Ожидание",
|
||||
"base_stations_state_active": "Работает",
|
||||
"base_stations_state_unknown": "Неизвестный режим",
|
||||
"base_stations_state_faulty": "Неисправна",
|
||||
"base_stations_channel_select_label": "Выберите канал базовой станции:",
|
||||
"base_stations_active_channel": "Канал {0}", // 0: channel number (1-15) ; eg Channel 12
|
||||
"base_stations_nickname": "Имя",
|
||||
|
||||
/* actions */
|
||||
"base_stations_action_wake_all": "Разбудить все",
|
||||
"base_stations_action_sleep_all": "Перевести все в режим сна",
|
||||
"base_stations_action_fix_collisions": "Исправить конфликты каналов",
|
||||
"base_stations_btn_wake": "Разбудить",
|
||||
"base_stations_btn_standby": "Режим ожидания",
|
||||
"base_stations_btn_sleep": "Режим сна",
|
||||
"base_stations_btn_edit": "Изменить",
|
||||
"base_stations_btn_save": "Сохранить",
|
||||
|
||||
"base_station_power_management": "Управление питанием базовых станций",
|
||||
"base_stations_power_mgmt_enable": "Включить управление питанием *",
|
||||
"base_stations_power_mgmt_enable_description_standby": "Включенные базовые станции будут уходить в режим ожидания, когда SteamVR закрывается, и просыпаться при запуске SteamVR.",
|
||||
"base_stations_power_mgmt_enable_description_sleep": "Включенные базовые станции будут уходить в режим сна, когда SteamVR закрывается, и просыпаться при запуске SteamVR.",
|
||||
"base_stations_power_mgmt_on_startup": "Включать базовые станции при запуске SteamVR",
|
||||
"base_stations_power_mgmt_on_startup_description": "Выключенные базовые станции будут включаться при запуске SteamVR.",
|
||||
"base_stations_power_mgmt_on_shutdown": "Выключать базовые станции при закрытии SteamVR",
|
||||
"base_stations_power_mgmt_on_shutdown_description": "Включенные базовые станции будут выключаться при закрытии SteamVR.",
|
||||
"base_stations_power_mgmt_standby": "Режим ожидания",
|
||||
"base_stations_power_mgmt_standby_description": "Базовые станции будут выключать только лазеры, чтобы быстрее включаться при запуске SteamVR. Эта функция НЕ работает с базовыми станциями 1.0 и некоторыми станциями 2.0, и вместо этого для них будет использоваться режим сна.",
|
||||
"base_stations_power_mgmt_sleep": "Режим сна",
|
||||
"base_stations_power_mgmt_sleep_description": "Базовые станции будут выключать и моторы, и лазеры.",
|
||||
"base_stations_power_mgmt_warning": "* НЕ РЕКОМЕНДУЕТСЯ в игровых зонах, где базовыми станциями пользуется несколько человек.",
|
||||
|
||||
/* settings */
|
||||
"settings_title": "Настройки",
|
||||
"settings_advanced": "Расширенные настройки",
|
||||
"settings_advanced_description": "Показывает дополнительные настройки и параметры для продвинутых пользователей.",
|
||||
"settings_calibrate_motion_vectors": "Калибровать векторы движения",
|
||||
"settings_calibrate_motion_vectors_description": "Улучшает предсказание движений для более отзывчивого трекинга. Может повлиять на игры с тяжёлой физикой.",
|
||||
"settings_autofix_playspace_jumps": "Автоисправление скачков игровой зоны",
|
||||
"settings_autofix_playspace_jumps_description": "Пытается автоматически определять и исправлять резкие рывки трекинга игровой зоны.",
|
||||
"settings_enforce_minimum_rotation_variance": "Минимальное значение отклонений трекинга",
|
||||
"settings_enforce_minimum_rotation_variance_description": "Автоматически игнорирует данные, близкие друг к другу, чтобы трекинг был более точным.",
|
||||
"settings_locale": "Язык",
|
||||
"settings_reset": "Сбросить все настройки",
|
||||
"settings_reset_description": "Все настройки будут сброшены. Это действие нельзя будет отменить.",
|
||||
"settings_reset_confirm": "Результат этого действия нельзя будет отменить. Вы хотите продолжить?",
|
||||
"settings_reset_yes": "Да",
|
||||
"settings_reset_no": "Нет",
|
||||
|
||||
/* about */
|
||||
"about_title": "О программе",
|
||||
"about_description": "Space Calibrator - это бесплатная программа с открытым исходным кодом, которая позволяет использовать несколько систем трекинга вместе в SteamVR.",
|
||||
"about_view_source_info": "Исходный код доступен в репозитории на GitHub.",
|
||||
"about_contributors_title": "Разработчики",
|
||||
"about_contributors_description": "Space Calibrator создан благодаря усилиям этих людей:",
|
||||
"about_translators_title": "Переводчики",
|
||||
"about_translators_description": "Space Calibrator был переведён этими людьми:",
|
||||
"about_licenses_title": "Лицензии",
|
||||
"about_licenses_description": "Эта программа доступна по лицензии MIT. Другие зависимости доступны под другими лицензиями, указанными ниже.",
|
||||
"about_link_github": "GitHub",
|
||||
"about_link_discord": "Сервер Discord",
|
||||
"about_link_logs_dir": "Папка логов",
|
||||
|
||||
/* self-troubleshooting */
|
||||
/* found another driver loaded in SteamVR -> legacy ipc connection successful */
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_title": "Запущена другая версия Space Calibrator",
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_description": "В данный момент запущена конфликтующая версия Space Calibrator. Вам придётся удалить её, чтобы использовать это приложение. Вы хотите автоматически удалить её?",
|
||||
/* found legacy overlay key registered (non steam) */
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_title": "Найдена другая версия Space Calibrator",
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_description": "В системе установлена другая версия Space Calibrator. Вы хотите удалить её?",
|
||||
"troubleshoot_action_yes": "Да",
|
||||
"troubleshoot_action_no": "Нет",
|
||||
"troubleshoot_action_quit": "Выход",
|
||||
|
||||
/* tutorial */
|
||||
"learn_title": "Инструкции",
|
||||
"learn_card_standard_calibration": "Стандартная калибровка",
|
||||
"learn_card_standard_calibration_description": "Узнайте, как откалибровать пару устройств.",
|
||||
"learn_card_continuous_calibration": "Непрерывная калибровка",
|
||||
"learn_card_continuous_calibration_description": "Проводите калибровку автоматически, чтобы исключить уплывание трекинга.",
|
||||
"learn_card_base_station_management": "Управление базовыми станциями",
|
||||
"learn_card_base_station_management_description": "Управляйте своими базовыми станциями SteamVR с компьютера.",
|
||||
"learn_card_ui_tour": "Тур по интерфейсу",
|
||||
"learn_card_ui_tour_description": "Обзор интерфейса Space Calibrator.",
|
||||
"learn_action_back": "Назад",
|
||||
|
||||
/* these are kinda like a messed up wiki because its inlined into the app like this, oh well lol */
|
||||
"learn_page_standard_desc": "Стандартная калибровка совмещает две системы отслеживания, чтобы ваши VR-устройства работали в одной игровой зоне.",
|
||||
"learn_page_standard_select_devices_title": "Выбор устройств",
|
||||
"learn_page_standard_select_devices_desc": "Перед началом работы приложению нужно узнать, какие два устройства вы хотите использовать для калибровки.",
|
||||
"learn_page_standard_ref_device": "Основное устройство - это то, которым вы обычно пользуетесь, например, контроллер.",
|
||||
"learn_page_standard_target_device": "Калибруемое устройство - это устройство, трекинг которого будет калиброваться, например, трекер или что-либо подобное.",
|
||||
"learn_page_standard_perform_title": "Калибровка",
|
||||
"learn_page_standard_perform_step1": "Жёстко зафиксируйте оба устройства в одной руке. Держите их так плотно друг к другу, чтобы они не шевелились во время калибровочного процесса.",
|
||||
"learn_page_standard_perform_step2": "Нажмите на кнопку \"Стандартная калибровка\", чтобы начать калибровку.",
|
||||
"learn_page_standard_perform_step3": "Походите по комнате, перемещая их по траектории в форме восьмёрки, как показано ниже.",
|
||||
"learn_page_standard_speeds_title": "Скорости калибровки",
|
||||
"learn_page_standard_speeds_desc": "Вы можете изменить скорость калибровки, чтобы указать, как много вы собираетесь перемещаться во время калибровки. Обычно чем больше движений собрано, тем выше качество калибровки.",
|
||||
"learn_page_standard_speed_fast": "Быстрая: Делается быстро, но может иметь низкое качество калибровки.",
|
||||
"learn_page_standard_speed_slow": "Медленная / Очень медленная: Делается дольше, но обычно выдаёт более точный результат.",
|
||||
"learn_page_standard_completion_note": "Когда индикатор прогресса заполнится полностью, ваши устройства станут мгновенно совмещены друг с другом в VR. Если это не произойдёт, попробуйте провести калибровку ещё раз.",
|
||||
"learn_page_standard_drift_title": "Уплывание трекинга",
|
||||
"learn_page_standard_drift_desc": "Время от времени трекинг ваших устройств может начать уплывать, и калибровка будет нарушаться. Если это случится, вам придётся провести калибровку заново. Если вам приходится часто перекалибровываться, вам стоит попробовать перейти на непрерывную калибровку.",
|
||||
|
||||
"learn_page_continuous_desc1": "Если вы замечаете, что трекинг ваших устройств постоянно смещается, поворачивается или уплывает, непрерывная калибровка поможет исправить проблему.",
|
||||
"learn_page_continuous_desc2": "Вместо того, чтобы калиброваться каждый раз вручную, непрерывная калибровка автоматически совмещает два игровых пространства во время игры.",
|
||||
"learn_page_continuous_note_title": "Внимание",
|
||||
"learn_page_continuous_note_desc": "Для использования этой функции ОБЯЗАТЕЛЕН отдельный трекер, закреплённый на гарнитуре.",
|
||||
"learn_page_continuous_desc3": "Непрерывная калибровка пытается часто перекалибровывать ваши устройства, чтобы исключить уплывание трекинга. Она старается сделать так, чтобы вы могли забыть о необходимости калибровки вообще.",
|
||||
"learn_page_continuous_setup_instructions": "Чтобы настроить непрерывную калибровку, выберите устройства по аналогии с обычной калибровкой. Выберите VR-гарнитуру как основное устройство, а прикреплённый к ней трекер как калибруемое. После этого нажмите кнопку \"Непрерывная калибровка\" для начала работы. Программе нужны данные трекинга для калибровки, поэтому подвигайтесь по игровой зоне, чтобы программа смогла подстроиться под вас!",
|
||||
"learn_page_continuous_should_use_title": "Нужна ли вам непрерывная калибровка?",
|
||||
"learn_page_continuous_should_use_standard": "Если у вас нет отдельного трекера на гарнитуре, или если вы не проводите длинные VR-сессии, или если вас не волнует ручная калибровка время от времени, то непрерывная калибровка и не нужна, достаточно обычной.",
|
||||
"learn_page_continuous_should_use_continuous": "Используйте непрерывную калибровку тогда, когда вы не хотите думать об уплывании трекинга вообще. Это рекомендуется тем, кто проводит много времени в VR или замечает уплывание трекинга время от времени.",
|
||||
"learn_page_continuous_physical_setup_title": "Настройка трекера (фиксация на гарнитуре)",
|
||||
"learn_page_continuous_physical_setup_desc1": "Чтобы использовать непрерывный трекинг, вам понадобится отдельный трекер, зафиксированный на VR-гарнитуре. В зависимости от моделей гарнитуры и трекера есть разные способы фиксации. Вы можете найти в интернете модели фиксаторов трекеров для 3D-печати или узнать у друзей, как они фиксируют свои трекеры на гарнитурах.",
|
||||
"learn_page_continuous_physical_setup_desc2": "Трекер должен быть жёстко зафиксирован на гарнитуре. Он не должен как-то болтаться, качаться или дребезжать. Чем лучше крепление, тем стабильнее будет калибровка.",
|
||||
|
||||
"learn_page_basestation_desc": "Space Calibrator позволяет управлять базовыми станциями, не отходя от компьютера и не имея VR-гарнитуры Vive, если у вас есть USB BLE-адаптер.",
|
||||
"learn_page_basestation_1_title": "Базовые станции 1.0",
|
||||
"learn_page_basestation_1_desc": "Их можно только включать и выключать. Изменять режимы на них с ПК нельзя, и для переключения режима нужно нажимать кнопку сзади каждой базы.",
|
||||
"learn_page_basestation_2_title": "Базовые станции 2.0",
|
||||
"learn_page_basestation_2_desc1": "Базовые станции, производившиеся Valve и HTC, имеют больше вариантов управления без проводов в сравнении с 1.0. Вы можете не только включать/выключать их, но и изменять канал, на котором они работают. Станции 2.0 в одной игровой зоне должны использовать разные каналы, иначе они не будут работать. Space Calibrator поможет вам исправить проблему, если такое случится.",
|
||||
"learn_page_basestation_2_desc2": "Чтобы изменить канал базовой станции 2.0, перейдите на вкладку \"Управление базовыми станциями\", нажмите \"Изменить\" возле станции, которую вы хотите настроить, и нажмите на желаемый канал работы станции (выделено зелёным).",
|
||||
"learn_page_basestation_auto_power_title": "Автоматическое управление питанием базовых станций",
|
||||
"learn_page_basestation_auto_power_desc": "Вы можете перейти на вкладку \"Настройки\", чтобы включить автоматическое управление питанием базовых станций. Оно будет само включать базовые станции при запуске Space Calibrator и выключать их при закрытии SteamVR (если Space Calibrator запущен при этом). Учтите, что ручное закрытие Space Calibrator НЕ БУДЕТ ВЫКЛЮЧАТЬ базовые станции.",
|
||||
|
||||
"learn_page_ui_tour_desc": "Интерфейс программы разделён на несколько частей с разными функциями",
|
||||
"learn_page_ui_tour_calibration_heading": "Вкладка \"Калибровка\"",
|
||||
"learn_page_ui_tour_cal_desc1": "Вкладка \"Калибровка\" содержит настройки, связанные с калибровкой. Здесь вы можете менять свою калибровку.",
|
||||
"learn_page_ui_tour_cal_desc2": "В самом верху вы увидите карточку, на которой указан статус и режим калибровки.",
|
||||
"learn_page_ui_tour_cal_desc3": "Под карточкой можно выбрать устройства для калибровки. Сначала стоит выбрать систему трекинга, которая будет калиброваться. Затем в левом окне нужно выбрать устройство, для которого будет делаться калибровка. Справа же нужно выбрать устройство, которым будет проводиться калибровка.",
|
||||
"learn_page_ui_tour_cal_desc4": "Под панелью находятся кнопки калибровки. Если вы не уверены, какую из них лучше нажимать, прочитайте инструкцию по режимам стандартной и непрерывной калибровок.",
|
||||
"learn_page_ui_tour_cal_desc5": "В самом низу вкладки показываются опции управления калибровкой. Часть этих опций скрыта галочкой расширенных настроек.",
|
||||
"learn_page_ui_tour_base_stations_heading": "Вкладка \"Управление базовыми станциями\"",
|
||||
"learn_page_ui_tour_bs_desc": "Здесь вы можете управлять всеми базовыми станциями вашей комнаты, если у вас есть адаптер BLE (Bluetooth Low Energy). Обычно на неё не нужно заходить после начальной настройки.",
|
||||
"learn_page_ui_tour_settings_heading": "Вкладка \"Настройки\"",
|
||||
"learn_page_ui_tour_settings_desc1": "Здесь вы можете поменять глобальные настройки программы. В эти опции входят расширенные настройки, управление питанием базовых станций и язык программы.",
|
||||
"learn_page_ui_tour_settings_desc2": "Некоторые функции этого приложения требуют включения расширенных настроек. Включайте их только тогда, когда знаете, что делать с ними.",
|
||||
|
||||
/* Names of the various languages one may select. Shown in settings */
|
||||
"languages_en_GB": "Английский (Великобритания)",
|
||||
"languages_en_US": "Английский (США)",
|
||||
"languages_fr": "Французский",
|
||||
"languages_it": "Итальянский",
|
||||
"languages_de": "Немецкий",
|
||||
"languages_nl": "Нидерландский",
|
||||
"languages_es_ES": "Испанский (Испания)",
|
||||
"languages_es_US": "Испанский (Латинская Америка)",
|
||||
"languages_da": "Датский",
|
||||
"languages_sv": "Шведский",
|
||||
"languages_fi": "Финский",
|
||||
"languages_no": "Норвежский",
|
||||
"languages_bg": "Болгарский",
|
||||
"languages_pl": "Польский",
|
||||
"languages_cs": "Чешский",
|
||||
"languages_el": "Греческий",
|
||||
"languages_hu": "Венгерский",
|
||||
"languages_pt_PT": "Португальский (Португалия)",
|
||||
"languages_pt_BR": "Португальский (Бразилия)",
|
||||
"languages_ro": "Румынский",
|
||||
"languages_ru": "Русский",
|
||||
"languages_tr": "Турецкий",
|
||||
"languages_uk": "Украинский",
|
||||
"languages_zh_HANS": "Китайский (упрощённый)",
|
||||
"languages_zh_HANT": "Китайский (традиционный)",
|
||||
"languages_ja": "Японский",
|
||||
"languages_ko": "Корейский",
|
||||
"languages_th": "Тайский",
|
||||
"languages_vi": "Вьетнамский",
|
||||
"languages_system": "Язык системы"
|
||||
}
|
||||
@@ -0,0 +1,278 @@
|
||||
{
|
||||
"app_title": "{0} {1}", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"app_title_vr": "{0} {1} - 关闭 VR 叠加层后可使用鼠标", /* 0 : Space Calibrator ; 1 : version (eg 2.0.0) */
|
||||
"tracking_system_no_systems": "未检测到可追踪的设备。请开启设备后继续。", /* Should never be hit but you never know */
|
||||
|
||||
"error_unknown_catastrophic": "发生严重错误!请在 GitHub 或 Steam 讨论区向开发者报告,以便解决此问题。",
|
||||
"ipc_unavailable": "无法连接 Space Calibrator 的 SteamVR 驱动程序。请在“属性”>“已安装文件”中验证文件完整性,或重新安装本应用。",
|
||||
"steamvr_unavailable": "无法连接 SteamVR。",
|
||||
"vr_troubleshooting_hmd_not_found": "请先连接 VR 头显并启动 SteamVR。",
|
||||
"vr_troubleshooting_connect_steamlink": "请先在 VR 头显上打开 SteamLink 并连接到 SteamVR。",
|
||||
"vr_troubleshooting_generic": "请先连接 VR 头显并启动 SteamVR。({0} {1})", /* 0 : SteamVR init error (eg 108), 1 : SteamVR init error string (eg Headset not connected) - this string is provided by Steam. */
|
||||
|
||||
"calibration_title": "校准",
|
||||
"calibration_count_none": "暂无校准。请新建校准以开始使用。", // Shown when there are no calibrations active
|
||||
"calibration_new": "新建校准",
|
||||
"calibration_delete": "删除校准",
|
||||
"calibration_next": "下一个校准",
|
||||
"calibration_previous": "上一个校准",
|
||||
|
||||
"calibration_status_none": "当前无校准",
|
||||
"calibration_status_none_description": "请选择一组设备并进行校准。",
|
||||
"calibration_status_edit": "正在编辑校准",
|
||||
"calibration_status_edit_description": "正在调整当前校准。",
|
||||
"calibration_status_continuous": "持续校准",
|
||||
"calibration_status_continuous_description": "持续校准已启用。系统会使用固定在头显上的追踪器,每隔几秒自动重新校准。",
|
||||
"calibration_status_standard": "标准校准",
|
||||
"calibration_status_standard_description": "校准已启用。如果发生漂移,可能需要重新校准。",
|
||||
|
||||
// space here refers to a tracking space / tracking system.
|
||||
"reference_device": "参考设备",
|
||||
"reference_device_description": "用于校准的参考设备,通常是 VR 头显或控制器。",
|
||||
"target_device": "目标设备",
|
||||
"target_device_description": "需要与参考设备对齐的设备,通常是追踪器或控制器。",
|
||||
"select_reference_device": "选择参考设备",
|
||||
"select_target_device": "选择目标设备",
|
||||
|
||||
"identify_selected_devices": "识别所选设备(LED 闪烁或设备振动)",
|
||||
"identify_auto_detect_devices": "自动检测设备",
|
||||
"calibration_error_reference_hmd_missing": "找不到追踪系统“{0}”中的目标设备。可能需要重新校准。", /* 0 : tracking system name, eg SteamVR Tracking*/
|
||||
"calibration_warning_stage_tracking_disabled": "舞台追踪已关闭!为获得更好的体验,请在 Quest 上打开 Virtual Desktop 菜单,进入“串流”标签页并启用“居中至游玩区域(舞台追踪)”。",
|
||||
"calibration_warning_stage_tracking_disabled_ignore_button": "不再显示",
|
||||
|
||||
"calibration_action_start": "标准校准",
|
||||
"calibration_action_clear": "清除校准",
|
||||
"calibration_action_continuous": "持续校准",
|
||||
"calibration_action_edit": "编辑校准",
|
||||
"save_calibration_profile": "保存配置",
|
||||
|
||||
"calibration_progress": "校准进度",
|
||||
"calibration_info_move_around_insufficient_samples": "将所选设备贴在一起,然后在游玩区域内走动,同时轻轻转动设备并画 8 字。",
|
||||
|
||||
"calibration_speed": "校准速度",
|
||||
"calibration_speed_description": "校准所需的时间。校准越慢,结果通常越准确。",
|
||||
"calibration_speed_fast": "快速",
|
||||
"calibration_speed_slow": "慢速",
|
||||
"calibration_speed_very_slow": "极慢",
|
||||
|
||||
/* Editing calibrations */
|
||||
"edit_calibration_rotation": "旋转",
|
||||
"edit_calibration_position": "位置(米)",
|
||||
"edit_calibration_yaw": "偏航角",
|
||||
"edit_calibration_pitch": "俯仰角",
|
||||
"edit_calibration_roll": "滚转角",
|
||||
"edit_calibration_x": "X",
|
||||
"edit_calibration_y": "Y",
|
||||
"edit_calibration_z": "Z",
|
||||
"edit_calibration_scale": "缩放(米)",
|
||||
|
||||
"continuous_hide_tracker": "对应用隐藏参考追踪器",
|
||||
"continuous_relative_calibration": "启用相对校准",
|
||||
"continuous_relative_calibration_description": "校准将以目标设备(通常是头显)为参照,因此无需重新校准即可逐帧更新。此功能必须配合持续校准使用。",
|
||||
|
||||
/* HMD names for Virtual Desktop */
|
||||
/* Virtual desktop lies that it's a Quest 2/3 on most headsets, so we have to substitute the real HMD name ourselves. you generally should
|
||||
NOT have to change these! but some headsets have different names in certain regions (eg PFD MR is YVR MR in China) */
|
||||
"virtual_desktop_hmd_none": "无", /* should never appear but you never know*/
|
||||
"virtual_desktop_hmd_gearvr": "Samsung Gear VR",
|
||||
"virtual_desktop_hmd_oculus_go": "Oculus Go",
|
||||
"virtual_desktop_hmd_oculus_quest_1": "Oculus Quest",
|
||||
"virtual_desktop_hmd_oculus_quest_2": "Oculus Quest 2",
|
||||
"virtual_desktop_hmd_meta_quest_pro": "Meta Quest Pro",
|
||||
"virtual_desktop_hmd_pico_4": "Pico 4",
|
||||
"virtual_desktop_hmd_meta_quest_3": "Meta Quest 3",
|
||||
"virtual_desktop_hmd_meta_quest_3s": "Meta Quest 3S",
|
||||
"virtual_desktop_hmd_pico_4_ultra": "Pico 4 Ultra",
|
||||
"virtual_desktop_hmd_samsung_galaxy_xr": "Samsung Galaxy XR",
|
||||
"virtual_desktop_hmd_play_for_dream_mr": "Play For Dream MR",
|
||||
|
||||
/* vertical tabs on the left */
|
||||
"tab_page_calibration": "校准",
|
||||
"tab_page_graphs": "图表",
|
||||
"tab_page_base_station_management": "基站",
|
||||
"tab_page_settings": "设置",
|
||||
"tab_page_debug": "调试",
|
||||
"tab_page_learn": "教程",
|
||||
"tab_page_about": "关于",
|
||||
|
||||
/* graphs */
|
||||
"graphs_title": "图表",
|
||||
|
||||
/* base stations */
|
||||
"base_stations_title": "基站管理",
|
||||
"base_stations_no_bluetooth": "未找到可用的蓝牙适配器。请连接支持 BLE 的蓝牙设备,以使用基站管理功能。",
|
||||
"base_stations_none_found": "未检测到基站。如有基站,请确认已接通电源。",
|
||||
"base_stations_header_info": "{0}", // 0: station ID (LHB XXXXXXXX) / nickname
|
||||
"base_stations_warning_collision": "检测到信道冲突!这会导致追踪异常。每台基站必须使用不同的信道。",
|
||||
"base_stations_state_sleep": "休眠",
|
||||
"base_stations_state_standby": "待机",
|
||||
"base_stations_state_active": "运行中",
|
||||
"base_stations_state_unknown": "未知",
|
||||
"base_stations_state_faulty": "故障",
|
||||
"base_stations_channel_select_label": "选择基站信道:",
|
||||
"base_stations_active_channel": "信道 {0}", // 0: channel number (1-15) ; eg Channel 12
|
||||
"base_stations_nickname": "别名",
|
||||
|
||||
/* actions */
|
||||
"base_stations_action_wake_all": "全部唤醒",
|
||||
"base_stations_action_sleep_all": "全部休眠",
|
||||
"base_stations_action_fix_collisions": "修复信道冲突",
|
||||
"base_stations_btn_wake": "唤醒",
|
||||
"base_stations_btn_standby": "待机",
|
||||
"base_stations_btn_sleep": "休眠",
|
||||
"base_stations_btn_edit": "编辑",
|
||||
"base_stations_btn_save": "保存",
|
||||
|
||||
"base_station_power_management": "基站电源管理",
|
||||
"base_stations_power_mgmt_enable": "启用电源管理 *",
|
||||
"base_stations_power_mgmt_enable_description_standby": "SteamVR 未使用时,已开启的基站会进入待机模式;SteamVR 启动时会再次唤醒。",
|
||||
"base_stations_power_mgmt_enable_description_sleep": "SteamVR 未使用时,已开启的基站会进入休眠模式;SteamVR 启动时会再次唤醒。",
|
||||
"base_stations_power_mgmt_on_startup": "SteamVR 启动时开启基站",
|
||||
"base_stations_power_mgmt_on_startup_description": "SteamVR 启动时,处于关闭状态的基站会被唤醒。",
|
||||
"base_stations_power_mgmt_on_shutdown": "SteamVR 关闭时关闭基站",
|
||||
"base_stations_power_mgmt_on_shutdown_description": "SteamVR 停止使用后,已开启的基站会关闭。",
|
||||
"base_stations_power_mgmt_standby": "待机",
|
||||
"base_stations_power_mgmt_standby_description": "基站仅关闭激光器,以便在 SteamVR 启动时更快唤醒。基站 1.0 及部分基站 2.0 型号不支持此模式,届时将改用休眠模式。",
|
||||
"base_stations_power_mgmt_sleep": "休眠",
|
||||
"base_stations_power_mgmt_sleep_description": "基站会关闭激光器和电机。",
|
||||
"base_stations_power_mgmt_warning": "* 不建议在多名 SteamVR 用户共用的追踪空间中启用。",
|
||||
|
||||
/* settings */
|
||||
"settings_title": "设置",
|
||||
"settings_advanced": "高级设置",
|
||||
"settings_advanced_description": "显示面向高级用户的附加设置和微调选项。",
|
||||
"settings_calibrate_motion_vectors": "校准运动矢量",
|
||||
"settings_calibrate_motion_vectors_description": "改善移动预测,使追踪响应更及时。可能会影响物理效果较多的游戏。",
|
||||
"settings_autofix_playspace_jumps": "自动修正游玩区域跳变",
|
||||
"settings_autofix_playspace_jumps_description": "尝试自动检测并修正游玩区域追踪的突然跳变。",
|
||||
"settings_enforce_minimum_rotation_variance": "强制最小旋转变化量",
|
||||
"settings_enforce_minimum_rotation_variance_description": "自动丢弃旋转角度过于相近的采样,以提高校准质量。",
|
||||
"settings_locale": "语言",
|
||||
"settings_reset": "恢复所有设置",
|
||||
"settings_reset_description": "将所有设置恢复为默认值。此操作无法撤销。",
|
||||
"settings_reset_confirm": "此操作无法撤销。确定要继续吗?",
|
||||
"settings_reset_yes": "是",
|
||||
"settings_reset_no": "否",
|
||||
|
||||
/* about */
|
||||
"about_title": "关于",
|
||||
"about_description": "Space Calibrator 是一款免费开源工具,可让不同厂商的设备在 SteamVR 中协同使用。",
|
||||
"about_view_source_info": "可在 GitHub 仓库中查看源代码。",
|
||||
"about_contributors_title": "贡献者",
|
||||
"about_contributors_description": "感谢以下人员对 Space Calibrator 的贡献:",
|
||||
"about_translators_title": "翻译人员",
|
||||
"about_translators_description": "感谢以下人员为 Space Calibrator 提供翻译:",
|
||||
"about_licenses_title": "许可证",
|
||||
"about_licenses_description": "本程序采用 MIT 许可证。其他依赖项可能采用不同的许可证,详情请查看下方信息。",
|
||||
"about_link_github": "GitHub",
|
||||
"about_link_discord": "Discord 服务器",
|
||||
"about_link_logs_dir": "日志文件夹",
|
||||
|
||||
/* self-troubleshooting */
|
||||
/* found another driver loaded in SteamVR -> legacy ipc connection successful */
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_title": "检测到另一个 Space Calibrator 实例",
|
||||
"troubleshoot_diagnosis_legacy_ipc_found_description": "当前正在运行的 Space Calibrator 版本与本应用冲突。必须将其卸载后才能继续使用。是否自动移除?",
|
||||
/* found legacy overlay key registered (non steam) */
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_title": "检测到另一个 Space Calibrator 实例",
|
||||
"troubleshoot_diagnosis_legacy_overlay_found_description": "当前已安装另一个版本的 Space Calibrator。是否将其移除?",
|
||||
"troubleshoot_action_yes": "是",
|
||||
"troubleshoot_action_no": "否",
|
||||
"troubleshoot_action_quit": "退出",
|
||||
|
||||
/* tutorial */
|
||||
"learn_title": "教程",
|
||||
"learn_card_standard_calibration": "标准校准",
|
||||
"learn_card_standard_calibration_description": "了解如何校准一组设备。",
|
||||
"learn_card_continuous_calibration": "持续校准",
|
||||
"learn_card_continuous_calibration_description": "在使用过程中定期校准,以修正漂移。",
|
||||
"learn_card_base_station_management": "基站管理",
|
||||
"learn_card_base_station_management_description": "无线控制 SteamVR 基站。",
|
||||
"learn_card_ui_tour": "界面导览",
|
||||
"learn_card_ui_tour_description": "了解 Space Calibrator 的界面。",
|
||||
"learn_action_back": "返回",
|
||||
|
||||
/* these are kinda like a messed up wiki because its inlined into the app like this, oh well lol */
|
||||
"learn_page_standard_desc": "标准校准可对齐两个追踪系统,让不同的 VR 设备在同一物理空间中协同工作。",
|
||||
"learn_page_standard_select_devices_title": "选择设备",
|
||||
"learn_page_standard_select_devices_desc": "开始前,请先选择需要对齐的两台设备。",
|
||||
"learn_page_standard_ref_device": "参考设备:校准时用作参照的设备,通常是控制器。",
|
||||
"learn_page_standard_target_device": "目标设备:需要与参考设备对齐的设备,通常是追踪器或类似设备。",
|
||||
"learn_page_standard_perform_title": "开始校准",
|
||||
"learn_page_standard_perform_step1": "将两台设备牢牢握在同一只手中,尽量固定,避免它们在校准过程中相互移动。",
|
||||
"learn_page_standard_perform_step2": "点击“标准校准”按钮开始校准。",
|
||||
"learn_page_standard_perform_step3": "在房间内走动,同时让设备画 8 字,如下图所示。",
|
||||
"learn_page_standard_speeds_title": "校准速度",
|
||||
"learn_page_standard_speeds_desc": "可调整校准速度,以改变所需的移动量。移动量越大,校准质量通常越高。",
|
||||
"learn_page_standard_speed_fast": "快速:校准时间较短,但结果可能不够准确。",
|
||||
"learn_page_standard_speed_slow": "慢速/极慢:校准时间较长,但结果通常更准确。",
|
||||
"learn_page_standard_completion_note": "进度条填满后,设备会立即在 VR 中对齐。如果没有对齐,请重新校准。",
|
||||
"learn_page_standard_drift_title": "关于漂移",
|
||||
"learn_page_standard_drift_desc": "设备可能会随着时间推移发生漂移,导致校准失效。此时需要重新校准。如果经常发生这种情况,建议使用持续校准。",
|
||||
|
||||
"learn_page_continuous_desc1": "游玩时如发现设备缓慢位移、旋转或偏离原位,可使用持续校准解决。",
|
||||
"learn_page_continuous_desc2": "持续校准会在游玩过程中于后台自动保持追踪同步,无需定期手动校准。",
|
||||
"learn_page_continuous_note_title": "注意",
|
||||
"learn_page_continuous_note_desc": "使用此功能必须在头显上安装一个专用追踪器。",
|
||||
"learn_page_continuous_desc3": "持续校准会频繁重新校准设备,尽可能消除漂移。设置完成后,通常无需再次手动校准。",
|
||||
"learn_page_continuous_setup_instructions": "设置持续校准时,请先按照“标准校准”页面的说明选择设备。将头显设为参考设备,将校准追踪器设为目标设备,然后点击“持续校准”。首次校准可能需要一些时间,请四处移动,让应用收集追踪数据。",
|
||||
"learn_page_continuous_should_use_title": "是否需要使用持续校准?",
|
||||
"learn_page_continuous_should_use_standard": "如果没有可安装在头显上的额外追踪器、通常不会长时间使用 VR,或不介意在发生漂移时偶尔重新校准,请使用标准校准。",
|
||||
"learn_page_continuous_should_use_continuous": "如果希望尽量避免处理漂移问题,请使用持续校准。经常长时间使用 VR,或设备漂移较明显时,建议使用此模式。",
|
||||
"learn_page_continuous_physical_setup_title": "硬件安装(将追踪器固定在头显上)",
|
||||
"learn_page_continuous_physical_setup_desc1": "使用持续校准时,需要在 VR 头显上安装专用追踪器。不同的头显和追踪器需要不同的支架。通常可以在网上找到可供 3D 打印的模型,也可以在社区中参考其他用户的安装方案。",
|
||||
"learn_page_continuous_physical_setup_desc2": "安装后,追踪器必须牢牢固定在头显上,不能晃动、转动或抖动。固定得越稳,校准结果就越稳定。",
|
||||
|
||||
"learn_page_basestation_desc": "如果有兼容的 BLE 蓝牙适配器,可使用 Space Calibrator 控制 SteamVR 基站。",
|
||||
"learn_page_basestation_1_title": "基站 1.0",
|
||||
"learn_page_basestation_1_desc": "只能控制基站的开关,不支持无线设置信道。要切换信道,请按基站背面的实体按钮。",
|
||||
"learn_page_basestation_2_title": "基站 2.0",
|
||||
"learn_page_basestation_2_desc1": "基站 2.0 由 Valve 和 HTC 生产,相比基站 1.0 提供更完整的无线管理功能。除开关外,还可设置信道。每台基站 2.0 必须使用不同的信道,否则无法正常工作。发生冲突时,Space Calibrator 会提示并协助修复。",
|
||||
"learn_page_basestation_2_desc2": "要更改基站 2.0 的信道,请打开“基站管理”标签页,点击目标基站的“编辑”按钮,然后选择所需信道(绿色标记)。",
|
||||
"learn_page_basestation_auto_power_title": "自动电源管理",
|
||||
"learn_page_basestation_auto_power_desc": "在“设置”中启用基站自动管理后,启动 Space Calibrator 时会开启基站;在 Space Calibrator 仍运行的情况下,关闭 SteamVR 时会关闭基站。请注意,如果先手动关闭 Space Calibrator,再关闭 SteamVR,基站不会自动关闭。",
|
||||
|
||||
"learn_page_ui_tour_desc": "界面分为多个标签页,每个标签页提供不同的功能。",
|
||||
"learn_page_ui_tour_calibration_heading": "“校准”标签页",
|
||||
"learn_page_ui_tour_cal_desc1": "可在“校准”标签页中查看和管理校准。",
|
||||
"learn_page_ui_tour_cal_desc2": "顶部卡片会显示当前是否有已启用的校准,以及校准类型。",
|
||||
"learn_page_ui_tour_cal_desc3": "在下方选择要配对校准的设备。先选择要校准的两个追踪系统,再在左侧选择作为校准参照的设备,在右侧选择要校准的设备。",
|
||||
"learn_page_ui_tour_cal_desc4": "再往下是执行校准的按钮。如果不确定该选择哪种校准,请阅读“标准校准”和“持续校准”教程。",
|
||||
"learn_page_ui_tour_cal_desc5": "“校准”标签页底部提供多个校准选项,其中部分选项仅在启用高级设置后显示。",
|
||||
"learn_page_ui_tour_base_stations_heading": "“基站管理”标签页",
|
||||
"learn_page_ui_tour_bs_desc": "可通过兼容的 BLE 蓝牙适配器控制房间内的基站。通常只需在初次设置时使用此功能。",
|
||||
"learn_page_ui_tour_settings_heading": "“设置”标签页",
|
||||
"learn_page_ui_tour_settings_desc1": "可在此调整程序的全局设置,包括高级设置、基站管理和界面语言。",
|
||||
"learn_page_ui_tour_settings_desc2": "本应用的部分功能需要启用高级设置。请仅在了解相关功能的情况下启用。",
|
||||
|
||||
/* Names of the various languages one may select. Shown in settings */
|
||||
"languages_en_GB": "英语(英国)",
|
||||
"languages_en_US": "英语(美国)",
|
||||
"languages_fr": "法语",
|
||||
"languages_it": "意大利语",
|
||||
"languages_de": "德语",
|
||||
"languages_nl": "荷兰语",
|
||||
"languages_es_ES": "西班牙语(西班牙)",
|
||||
"languages_es_US": "西班牙语(拉丁美洲)",
|
||||
"languages_da": "丹麦语",
|
||||
"languages_sv": "瑞典语",
|
||||
"languages_fi": "芬兰语",
|
||||
"languages_no": "挪威语",
|
||||
"languages_bg": "保加利亚语",
|
||||
"languages_pl": "波兰语",
|
||||
"languages_cs": "捷克语",
|
||||
"languages_el": "希腊语",
|
||||
"languages_hu": "匈牙利语",
|
||||
"languages_pt_PT": "葡萄牙语(葡萄牙)",
|
||||
"languages_pt_BR": "葡萄牙语(巴西)",
|
||||
"languages_ro": "罗马尼亚语",
|
||||
"languages_ru": "俄语",
|
||||
"languages_tr": "土耳其语",
|
||||
"languages_uk": "乌克兰语",
|
||||
"languages_zh_HANS": "简体中文",
|
||||
"languages_zh_HANT": "繁体中文",
|
||||
"languages_ja": "日语",
|
||||
"languages_ko": "韩语",
|
||||
"languages_th": "泰语",
|
||||
"languages_vi": "越南语",
|
||||
"languages_system": "系统语言"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"alwaysActivate": true,
|
||||
"name" : "01spacecalibrator",
|
||||
"directory" : "",
|
||||
"resourceOnly" : false,
|
||||
"activateOtherDriversWhenEnabled" : true
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"jsonid" : "vrresources",
|
||||
"statusicons" : {
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"driver_01spacecalibrator": {
|
||||
"loadPriority": 9999
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,207 @@
|
||||
;--------------------------------
|
||||
;Include Modern UI
|
||||
|
||||
!include "MUI2.nsh"
|
||||
|
||||
;--------------------------------
|
||||
;General
|
||||
|
||||
!define OVERLAY_BASEDIR "..\client_overlay\bin\win64"
|
||||
!define ARTIFACTS_BASEDIR "..\bin\artifacts\Release"
|
||||
!define DRIVER_RESDIR "..\bin\driver_01spacecalibrator"
|
||||
|
||||
Name "Space Calibrator"
|
||||
OutFile "SpaceCalibrator.exe"
|
||||
InstallDir "$PROGRAMFILES64\SpaceCalibrator"
|
||||
InstallDirRegKey HKLM "Software\SpaceCalibrator\Main" ""
|
||||
RequestExecutionLevel admin
|
||||
ShowInstDetails show
|
||||
|
||||
; Define the version number
|
||||
!define VERSION "1.5.1.0"
|
||||
; Set version information
|
||||
VIProductVersion "${VERSION}"
|
||||
VIAddVersionKey /LANG=1033 "ProductName" "Space Calibrator"
|
||||
VIAddVersionKey /LANG=1033 "FileDescription" "Space Calibrator Installer"
|
||||
VIAddVersionKey /LANG=1033 "LegalCopyright" "Open source at https://github.com/hyblocker/OpenVR-SpaceCalibrator"
|
||||
VIAddVersionKey /LANG=1033 "FileVersion" "${VERSION}"
|
||||
VIAddVersionKey /LANG=1033 "ProductVersion" "${VERSION}"
|
||||
|
||||
;--------------------------------
|
||||
;Variables
|
||||
|
||||
VAR upgradeInstallation
|
||||
|
||||
;--------------------------------
|
||||
;Interface Settings
|
||||
|
||||
!define MUI_ABORTWARNING
|
||||
|
||||
;--------------------------------
|
||||
;Pages
|
||||
|
||||
!insertmacro MUI_PAGE_LICENSE "..\LICENSE"
|
||||
!define MUI_PAGE_CUSTOMFUNCTION_PRE dirPre
|
||||
!insertmacro MUI_PAGE_DIRECTORY
|
||||
!insertmacro MUI_PAGE_INSTFILES
|
||||
|
||||
!insertmacro MUI_UNPAGE_CONFIRM
|
||||
!insertmacro MUI_UNPAGE_INSTFILES
|
||||
|
||||
;--------------------------------
|
||||
;Languages
|
||||
|
||||
!insertmacro MUI_LANGUAGE "English"
|
||||
|
||||
;--------------------------------
|
||||
;Macros
|
||||
|
||||
;--------------------------------
|
||||
;Functions
|
||||
|
||||
Function dirPre
|
||||
StrCmp $upgradeInstallation "true" 0 +2
|
||||
Abort
|
||||
FunctionEnd
|
||||
|
||||
Function .onInit
|
||||
StrCpy $upgradeInstallation "false"
|
||||
|
||||
ReadRegStr $R0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenVRSpaceCalibrator" "UninstallString"
|
||||
StrCmp $R0 "" done
|
||||
|
||||
|
||||
; If SteamVR is already running, display a warning message and exit
|
||||
FindWindow $0 "Qt5QWindowIcon" "SteamVR Status"
|
||||
StrCmp $0 0 +3
|
||||
MessageBox MB_OK|MB_ICONEXCLAMATION \
|
||||
"SteamVR is still running. Cannot install this software.$\nPlease close SteamVR and try again."
|
||||
Abort
|
||||
|
||||
|
||||
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION \
|
||||
"Space Calibrator is already installed. $\n$\nClick `OK` to upgrade the \
|
||||
existing installation or `Cancel` to cancel this upgrade." \
|
||||
IDOK upgrade
|
||||
Abort
|
||||
|
||||
upgrade:
|
||||
StrCpy $upgradeInstallation "true"
|
||||
done:
|
||||
FunctionEnd
|
||||
|
||||
;--------------------------------
|
||||
;Installer Sections
|
||||
|
||||
Section "Install" SecInstall
|
||||
|
||||
StrCmp $upgradeInstallation "true" 0 noupgrade
|
||||
DetailPrint "Uninstall previous version..."
|
||||
ExecWait '"$INSTDIR\Uninstall.exe" /S _?=$INSTDIR'
|
||||
Delete $INSTDIR\Uninstall.exe
|
||||
Goto afterupgrade
|
||||
|
||||
noupgrade:
|
||||
|
||||
afterupgrade:
|
||||
|
||||
SetOutPath "$INSTDIR"
|
||||
|
||||
File "${ARTIFACTS_BASEDIR}\LICENSE"
|
||||
File "${ARTIFACTS_BASEDIR}\README"
|
||||
File "${ARTIFACTS_BASEDIR}\SpaceCalibrator.exe"
|
||||
File "${ARTIFACTS_BASEDIR}\openvr_api.dll"
|
||||
File "${ARTIFACTS_BASEDIR}\manifest.vrmanifest"
|
||||
File "${ARTIFACTS_BASEDIR}\icon.png"
|
||||
File "${ARTIFACTS_BASEDIR}\taskbar_icon.png"
|
||||
|
||||
ExecWait '"$INSTDIR\vcredist_x64.exe" /install /quiet'
|
||||
|
||||
Var /GLOBAL vrRuntimePath
|
||||
nsExec::ExecToStack '"$INSTDIR\SpaceCalibrator.exe" -openvrpath'
|
||||
Pop $0
|
||||
Pop $vrRuntimePath
|
||||
DetailPrint "VR runtime path: $vrRuntimePath"
|
||||
|
||||
; Old beta driver
|
||||
StrCmp $upgradeInstallation "true" 0 nocleanupbeta
|
||||
Delete "$vrRuntimePath\drivers\000spacecalibrator\driver.vrdrivermanifest"
|
||||
Delete "$vrRuntimePath\drivers\000spacecalibrator\resources\driver.vrresources"
|
||||
Delete "$vrRuntimePath\drivers\000spacecalibrator\resources\settings\default.vrsettings"
|
||||
Delete "$vrRuntimePath\drivers\000spacecalibrator\bin\win64\driver_000spacecalibrator.dll"
|
||||
Delete "$vrRuntimePath\drivers\000spacecalibrator\bin\win64\space_calibrator_driver.log"
|
||||
RMdir "$vrRuntimePath\drivers\000spacecalibrator\resources\settings"
|
||||
RMdir "$vrRuntimePath\drivers\000spacecalibrator\resources\"
|
||||
RMdir "$vrRuntimePath\drivers\000spacecalibrator\bin\win64\"
|
||||
RMdir "$vrRuntimePath\drivers\000spacecalibrator\bin\"
|
||||
RMdir "$vrRuntimePath\drivers\000spacecalibrator\"
|
||||
nocleanupbeta:
|
||||
|
||||
SetOutPath "$vrRuntimePath\drivers\01spacecalibrator"
|
||||
File "${DRIVER_RESDIR}\driver.vrdrivermanifest"
|
||||
SetOutPath "$vrRuntimePath\drivers\01spacecalibrator\resources"
|
||||
File "${DRIVER_RESDIR}\resources\driver.vrresources"
|
||||
SetOutPath "$vrRuntimePath\drivers\01spacecalibrator\resources\settings"
|
||||
File "${DRIVER_RESDIR}\resources\settings\default.vrsettings"
|
||||
SetOutPath "$vrRuntimePath\drivers\01spacecalibrator\bin\win64"
|
||||
File "${DRIVER_RESDIR}\bin\win64\driver_01spacecalibrator.dll"
|
||||
|
||||
WriteRegStr HKLM "Software\SpaceCalibrator\Main" "" $INSTDIR
|
||||
WriteRegStr HKLM "Software\SpaceCalibrator\Driver" "" $vrRuntimePath
|
||||
|
||||
WriteUninstaller "$INSTDIR\Uninstall.exe"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenVRSpaceCalibrator" "DisplayName" "Space Calibrator"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenVRSpaceCalibrator" "UninstallString" "$\"$INSTDIR\Uninstall.exe$\""
|
||||
|
||||
CreateShortCut "$SMPROGRAMS\Space Calibrator.lnk" "$INSTDIR\SpaceCalibrator.exe"
|
||||
|
||||
SetOutPath "$INSTDIR"
|
||||
nsExec::ExecToLog '"$INSTDIR\SpaceCalibrator.exe" -installmanifest'
|
||||
nsExec::ExecToLog '"$INSTDIR\SpaceCalibrator.exe" -activatemultipledrivers'
|
||||
|
||||
SectionEnd
|
||||
|
||||
;--------------------------------
|
||||
;Uninstaller Section
|
||||
|
||||
Section "Uninstall"
|
||||
; If SteamVR is already running, display a warning message and exit
|
||||
FindWindow $0 "Qt5QWindowIcon" "SteamVR Status"
|
||||
StrCmp $0 0 +3
|
||||
MessageBox MB_OK|MB_ICONEXCLAMATION \
|
||||
"SteamVR is still running. Cannot uninstall this software.$\nPlease close SteamVR and try again."
|
||||
Abort
|
||||
|
||||
SetOutPath "$INSTDIR"
|
||||
nsExec::ExecToLog '"$INSTDIR\SpaceCalibrator.exe" -removemanifest'
|
||||
|
||||
Var /GLOBAL vrRuntimePath2
|
||||
ReadRegStr $vrRuntimePath2 HKLM "Software\SpaceCalibrator\Driver" ""
|
||||
DetailPrint "VR runtime path: $vrRuntimePath2"
|
||||
Delete "$vrRuntimePath2\drivers\01spacecalibrator\driver.vrdrivermanifest"
|
||||
Delete "$vrRuntimePath2\drivers\01spacecalibrator\resources\driver.vrresources"
|
||||
Delete "$vrRuntimePath2\drivers\01spacecalibrator\resources\settings\default.vrsettings"
|
||||
Delete "$vrRuntimePath2\drivers\01spacecalibrator\bin\win64\driver_01spacecalibrator.dll"
|
||||
Delete "$vrRuntimePath2\drivers\01spacecalibrator\bin\win64\space_calibrator_driver.log"
|
||||
RMdir "$vrRuntimePath2\drivers\01spacecalibrator\resources\settings"
|
||||
RMdir "$vrRuntimePath2\drivers\01spacecalibrator\resources\"
|
||||
RMdir "$vrRuntimePath2\drivers\01spacecalibrator\bin\win64\"
|
||||
RMdir "$vrRuntimePath2\drivers\01spacecalibrator\bin\"
|
||||
RMdir "$vrRuntimePath2\drivers\01spacecalibrator\"
|
||||
|
||||
Delete "$INSTDIR\LICENSE"
|
||||
Delete "$INSTDIR\README"
|
||||
Delete "$INSTDIR\SpaceCalibrator.exe"
|
||||
Delete "$INSTDIR\openvr_api.dll"
|
||||
Delete "$INSTDIR\manifest.vrmanifest"
|
||||
Delete "$INSTDIR\icon.png"
|
||||
Delete "$INSTDIR\taskbar_icon.png"
|
||||
|
||||
DeleteRegKey HKLM "Software\SpaceCalibrator\Main"
|
||||
DeleteRegKey HKLM "Software\SpaceCalibrator\Driver"
|
||||
DeleteRegKey HKLM "Software\SpaceCalibrator"
|
||||
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\OpenVRSpaceCalibrator"
|
||||
|
||||
Delete "$SMPROGRAMS\Space Calibrator.lnk"
|
||||
SectionEnd
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
include(RegexUtils)
|
||||
test_escape_string_as_regex()
|
||||
|
||||
file(GLOB Eigen_directory_files "*")
|
||||
|
||||
escape_string_as_regex(ESCAPED_CMAKE_CURRENT_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||
|
||||
foreach(f ${Eigen_directory_files})
|
||||
if(NOT f MATCHES "\\.txt" AND NOT f MATCHES "${ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/[.].+" AND NOT f MATCHES "${ESCAPED_CMAKE_CURRENT_SOURCE_DIR}/src")
|
||||
list(APPEND Eigen_directory_files_to_install ${f})
|
||||
endif()
|
||||
endforeach(f ${Eigen_directory_files})
|
||||
|
||||
install(FILES
|
||||
${Eigen_directory_files_to_install}
|
||||
DESTINATION ${INCLUDE_INSTALL_DIR}/Eigen COMPONENT Devel
|
||||
)
|
||||
|
||||
install(DIRECTORY src DESTINATION ${INCLUDE_INSTALL_DIR}/Eigen COMPONENT Devel FILES_MATCHING PATTERN "*.h")
|
||||
@@ -1,48 +0,0 @@
|
||||
// This file is part of Eigen, a lightweight C++ template library
|
||||
// for linear algebra.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla
|
||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#ifndef EIGEN_CHOLMODSUPPORT_MODULE_H
|
||||
#define EIGEN_CHOLMODSUPPORT_MODULE_H
|
||||
|
||||
#include "SparseCore"
|
||||
|
||||
#include "src/Core/util/DisableStupidWarnings.h"
|
||||
|
||||
extern "C" {
|
||||
#include <cholmod.h>
|
||||
}
|
||||
|
||||
/** \ingroup Support_modules
|
||||
* \defgroup CholmodSupport_Module CholmodSupport module
|
||||
*
|
||||
* This module provides an interface to the Cholmod library which is part of the <a href="http://www.suitesparse.com">suitesparse</a> package.
|
||||
* It provides the two following main factorization classes:
|
||||
* - class CholmodSupernodalLLT: a supernodal LLT Cholesky factorization.
|
||||
* - class CholmodDecomposiiton: a general L(D)LT Cholesky factorization with automatic or explicit runtime selection of the underlying factorization method (supernodal or simplicial).
|
||||
*
|
||||
* For the sake of completeness, this module also propose the two following classes:
|
||||
* - class CholmodSimplicialLLT
|
||||
* - class CholmodSimplicialLDLT
|
||||
* Note that these classes does not bring any particular advantage compared to the built-in
|
||||
* SimplicialLLT and SimplicialLDLT factorization classes.
|
||||
*
|
||||
* \code
|
||||
* #include <Eigen/CholmodSupport>
|
||||
* \endcode
|
||||
*
|
||||
* In order to use this module, the cholmod headers must be accessible from the include paths, and your binary must be linked to the cholmod library and its dependencies.
|
||||
* The dependencies depend on how cholmod has been compiled.
|
||||
* For a cmake based project, you can use our FindCholmod.cmake module to help you in this task.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "src/CholmodSupport/CholmodSupport.h"
|
||||
|
||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
||||
|
||||
#endif // EIGEN_CHOLMODSUPPORT_MODULE_H
|
||||
|
||||
@@ -1,516 +0,0 @@
|
||||
// This file is part of Eigen, a lightweight C++ template library
|
||||
// for linear algebra.
|
||||
//
|
||||
// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
|
||||
// Copyright (C) 2007-2011 Benoit Jacob <jacob.benoit.1@gmail.com>
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla
|
||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#ifndef EIGEN_CORE_H
|
||||
#define EIGEN_CORE_H
|
||||
|
||||
// first thing Eigen does: stop the compiler from committing suicide
|
||||
#include "src/Core/util/DisableStupidWarnings.h"
|
||||
|
||||
// Handle NVCC/CUDA/SYCL
|
||||
#if defined(__CUDACC__) || defined(__SYCL_DEVICE_ONLY__)
|
||||
// Do not try asserts on CUDA and SYCL!
|
||||
#ifndef EIGEN_NO_DEBUG
|
||||
#define EIGEN_NO_DEBUG
|
||||
#endif
|
||||
|
||||
#ifdef EIGEN_INTERNAL_DEBUGGING
|
||||
#undef EIGEN_INTERNAL_DEBUGGING
|
||||
#endif
|
||||
|
||||
#ifdef EIGEN_EXCEPTIONS
|
||||
#undef EIGEN_EXCEPTIONS
|
||||
#endif
|
||||
|
||||
// All functions callable from CUDA code must be qualified with __device__
|
||||
#ifdef __CUDACC__
|
||||
// Do not try to vectorize on CUDA and SYCL!
|
||||
#ifndef EIGEN_DONT_VECTORIZE
|
||||
#define EIGEN_DONT_VECTORIZE
|
||||
#endif
|
||||
|
||||
#define EIGEN_DEVICE_FUNC __host__ __device__
|
||||
// We need math_functions.hpp to ensure that that EIGEN_USING_STD_MATH macro
|
||||
// works properly on the device side
|
||||
#include <math_functions.hpp>
|
||||
#else
|
||||
#define EIGEN_DEVICE_FUNC
|
||||
#endif
|
||||
|
||||
#else
|
||||
#define EIGEN_DEVICE_FUNC
|
||||
|
||||
#endif
|
||||
|
||||
// When compiling CUDA device code with NVCC, pull in math functions from the
|
||||
// global namespace. In host mode, and when device doee with clang, use the
|
||||
// std versions.
|
||||
#if defined(__CUDA_ARCH__) && defined(__NVCC__)
|
||||
#define EIGEN_USING_STD_MATH(FUNC) using ::FUNC;
|
||||
#else
|
||||
#define EIGEN_USING_STD_MATH(FUNC) using std::FUNC;
|
||||
#endif
|
||||
|
||||
#if (defined(_CPPUNWIND) || defined(__EXCEPTIONS)) && !defined(__CUDA_ARCH__) && !defined(EIGEN_EXCEPTIONS) && !defined(EIGEN_USE_SYCL)
|
||||
#define EIGEN_EXCEPTIONS
|
||||
#endif
|
||||
|
||||
#ifdef EIGEN_EXCEPTIONS
|
||||
#include <new>
|
||||
#endif
|
||||
|
||||
// then include this file where all our macros are defined. It's really important to do it first because
|
||||
// it's where we do all the alignment settings (platform detection and honoring the user's will if he
|
||||
// defined e.g. EIGEN_DONT_ALIGN) so it needs to be done before we do anything with vectorization.
|
||||
#include "src/Core/util/Macros.h"
|
||||
|
||||
// Disable the ipa-cp-clone optimization flag with MinGW 6.x or newer (enabled by default with -O3)
|
||||
// See http://eigen.tuxfamily.org/bz/show_bug.cgi?id=556 for details.
|
||||
#if EIGEN_COMP_MINGW && EIGEN_GNUC_AT_LEAST(4,6)
|
||||
#pragma GCC optimize ("-fno-ipa-cp-clone")
|
||||
#endif
|
||||
|
||||
#include <complex>
|
||||
|
||||
// this include file manages BLAS and MKL related macros
|
||||
// and inclusion of their respective header files
|
||||
#include "src/Core/util/MKL_support.h"
|
||||
|
||||
// if alignment is disabled, then disable vectorization. Note: EIGEN_MAX_ALIGN_BYTES is the proper check, it takes into
|
||||
// account both the user's will (EIGEN_MAX_ALIGN_BYTES,EIGEN_DONT_ALIGN) and our own platform checks
|
||||
#if EIGEN_MAX_ALIGN_BYTES==0
|
||||
#ifndef EIGEN_DONT_VECTORIZE
|
||||
#define EIGEN_DONT_VECTORIZE
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if EIGEN_COMP_MSVC
|
||||
#include <malloc.h> // for _aligned_malloc -- need it regardless of whether vectorization is enabled
|
||||
#if (EIGEN_COMP_MSVC >= 1500) // 2008 or later
|
||||
// Remember that usage of defined() in a #define is undefined by the standard.
|
||||
// a user reported that in 64-bit mode, MSVC doesn't care to define _M_IX86_FP.
|
||||
#if (defined(_M_IX86_FP) && (_M_IX86_FP >= 2)) || EIGEN_ARCH_x86_64
|
||||
#define EIGEN_SSE2_ON_MSVC_2008_OR_LATER
|
||||
#endif
|
||||
#endif
|
||||
#else
|
||||
// Remember that usage of defined() in a #define is undefined by the standard
|
||||
#if (defined __SSE2__) && ( (!EIGEN_COMP_GNUC) || EIGEN_COMP_ICC || EIGEN_GNUC_AT_LEAST(4,2) )
|
||||
#define EIGEN_SSE2_ON_NON_MSVC_BUT_NOT_OLD_GCC
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef EIGEN_DONT_VECTORIZE
|
||||
|
||||
#if defined (EIGEN_SSE2_ON_NON_MSVC_BUT_NOT_OLD_GCC) || defined(EIGEN_SSE2_ON_MSVC_2008_OR_LATER)
|
||||
|
||||
// Defines symbols for compile-time detection of which instructions are
|
||||
// used.
|
||||
// EIGEN_VECTORIZE_YY is defined if and only if the instruction set YY is used
|
||||
#define EIGEN_VECTORIZE
|
||||
#define EIGEN_VECTORIZE_SSE
|
||||
#define EIGEN_VECTORIZE_SSE2
|
||||
|
||||
// Detect sse3/ssse3/sse4:
|
||||
// gcc and icc defines __SSE3__, ...
|
||||
// there is no way to know about this on msvc. You can define EIGEN_VECTORIZE_SSE* if you
|
||||
// want to force the use of those instructions with msvc.
|
||||
#ifdef __SSE3__
|
||||
#define EIGEN_VECTORIZE_SSE3
|
||||
#endif
|
||||
#ifdef __SSSE3__
|
||||
#define EIGEN_VECTORIZE_SSSE3
|
||||
#endif
|
||||
#ifdef __SSE4_1__
|
||||
#define EIGEN_VECTORIZE_SSE4_1
|
||||
#endif
|
||||
#ifdef __SSE4_2__
|
||||
#define EIGEN_VECTORIZE_SSE4_2
|
||||
#endif
|
||||
#ifdef __AVX__
|
||||
#define EIGEN_VECTORIZE_AVX
|
||||
#define EIGEN_VECTORIZE_SSE3
|
||||
#define EIGEN_VECTORIZE_SSSE3
|
||||
#define EIGEN_VECTORIZE_SSE4_1
|
||||
#define EIGEN_VECTORIZE_SSE4_2
|
||||
#endif
|
||||
#ifdef __AVX2__
|
||||
#define EIGEN_VECTORIZE_AVX2
|
||||
#endif
|
||||
#ifdef __FMA__
|
||||
#define EIGEN_VECTORIZE_FMA
|
||||
#endif
|
||||
#if defined(__AVX512F__) && defined(EIGEN_ENABLE_AVX512)
|
||||
#define EIGEN_VECTORIZE_AVX512
|
||||
#define EIGEN_VECTORIZE_AVX2
|
||||
#define EIGEN_VECTORIZE_AVX
|
||||
#define EIGEN_VECTORIZE_FMA
|
||||
#ifdef __AVX512DQ__
|
||||
#define EIGEN_VECTORIZE_AVX512DQ
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// include files
|
||||
|
||||
// This extern "C" works around a MINGW-w64 compilation issue
|
||||
// https://sourceforge.net/tracker/index.php?func=detail&aid=3018394&group_id=202880&atid=983354
|
||||
// In essence, intrin.h is included by windows.h and also declares intrinsics (just as emmintrin.h etc. below do).
|
||||
// However, intrin.h uses an extern "C" declaration, and g++ thus complains of duplicate declarations
|
||||
// with conflicting linkage. The linkage for intrinsics doesn't matter, but at that stage the compiler doesn't know;
|
||||
// so, to avoid compile errors when windows.h is included after Eigen/Core, ensure intrinsics are extern "C" here too.
|
||||
// notice that since these are C headers, the extern "C" is theoretically needed anyways.
|
||||
extern "C" {
|
||||
// In theory we should only include immintrin.h and not the other *mmintrin.h header files directly.
|
||||
// Doing so triggers some issues with ICC. However old gcc versions seems to not have this file, thus:
|
||||
#if EIGEN_COMP_ICC >= 1110
|
||||
#include <immintrin.h>
|
||||
#else
|
||||
#include <mmintrin.h>
|
||||
#include <emmintrin.h>
|
||||
#include <xmmintrin.h>
|
||||
#ifdef EIGEN_VECTORIZE_SSE3
|
||||
#include <pmmintrin.h>
|
||||
#endif
|
||||
#ifdef EIGEN_VECTORIZE_SSSE3
|
||||
#include <tmmintrin.h>
|
||||
#endif
|
||||
#ifdef EIGEN_VECTORIZE_SSE4_1
|
||||
#include <smmintrin.h>
|
||||
#endif
|
||||
#ifdef EIGEN_VECTORIZE_SSE4_2
|
||||
#include <nmmintrin.h>
|
||||
#endif
|
||||
#if defined(EIGEN_VECTORIZE_AVX) || defined(EIGEN_VECTORIZE_AVX512)
|
||||
#include <immintrin.h>
|
||||
#endif
|
||||
#endif
|
||||
} // end extern "C"
|
||||
#elif defined __VSX__
|
||||
#define EIGEN_VECTORIZE
|
||||
#define EIGEN_VECTORIZE_VSX
|
||||
#include <altivec.h>
|
||||
// We need to #undef all these ugly tokens defined in <altivec.h>
|
||||
// => use __vector instead of vector
|
||||
#undef bool
|
||||
#undef vector
|
||||
#undef pixel
|
||||
#elif defined __ALTIVEC__
|
||||
#define EIGEN_VECTORIZE
|
||||
#define EIGEN_VECTORIZE_ALTIVEC
|
||||
#include <altivec.h>
|
||||
// We need to #undef all these ugly tokens defined in <altivec.h>
|
||||
// => use __vector instead of vector
|
||||
#undef bool
|
||||
#undef vector
|
||||
#undef pixel
|
||||
#elif (defined __ARM_NEON) || (defined __ARM_NEON__)
|
||||
#define EIGEN_VECTORIZE
|
||||
#define EIGEN_VECTORIZE_NEON
|
||||
#include <arm_neon.h>
|
||||
#elif (defined __s390x__ && defined __VEC__)
|
||||
#define EIGEN_VECTORIZE
|
||||
#define EIGEN_VECTORIZE_ZVECTOR
|
||||
#include <vecintrin.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(__F16C__) && !defined(EIGEN_COMP_CLANG)
|
||||
// We can use the optimized fp16 to float and float to fp16 conversion routines
|
||||
#define EIGEN_HAS_FP16_C
|
||||
#endif
|
||||
|
||||
#if defined __CUDACC__
|
||||
#define EIGEN_VECTORIZE_CUDA
|
||||
#include <vector_types.h>
|
||||
#if defined __CUDACC_VER__ && __CUDACC_VER__ >= 70500
|
||||
#define EIGEN_HAS_CUDA_FP16
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined EIGEN_HAS_CUDA_FP16
|
||||
#include <host_defines.h>
|
||||
#include <cuda_fp16.h>
|
||||
#endif
|
||||
|
||||
#if (defined _OPENMP) && (!defined EIGEN_DONT_PARALLELIZE)
|
||||
#define EIGEN_HAS_OPENMP
|
||||
#endif
|
||||
|
||||
#ifdef EIGEN_HAS_OPENMP
|
||||
#include <omp.h>
|
||||
#endif
|
||||
|
||||
// MSVC for windows mobile does not have the errno.h file
|
||||
#if !(EIGEN_COMP_MSVC && EIGEN_OS_WINCE) && !EIGEN_COMP_ARM
|
||||
#define EIGEN_HAS_ERRNO
|
||||
#endif
|
||||
|
||||
#ifdef EIGEN_HAS_ERRNO
|
||||
#include <cerrno>
|
||||
#endif
|
||||
#include <cstddef>
|
||||
#include <cstdlib>
|
||||
#include <cmath>
|
||||
#include <cassert>
|
||||
#include <functional>
|
||||
#include <iosfwd>
|
||||
#include <cstring>
|
||||
#include <string>
|
||||
#include <limits>
|
||||
#include <climits> // for CHAR_BIT
|
||||
// for min/max:
|
||||
#include <algorithm>
|
||||
|
||||
// for std::is_nothrow_move_assignable
|
||||
#ifdef EIGEN_INCLUDE_TYPE_TRAITS
|
||||
#include <type_traits>
|
||||
#endif
|
||||
|
||||
// for outputting debug info
|
||||
#ifdef EIGEN_DEBUG_ASSIGN
|
||||
#include <iostream>
|
||||
#endif
|
||||
|
||||
// required for __cpuid, needs to be included after cmath
|
||||
#if EIGEN_COMP_MSVC && EIGEN_ARCH_i386_OR_x86_64 && !EIGEN_OS_WINCE
|
||||
#include <intrin.h>
|
||||
#endif
|
||||
|
||||
/** \brief Namespace containing all symbols from the %Eigen library. */
|
||||
namespace Eigen {
|
||||
|
||||
inline static const char *SimdInstructionSetsInUse(void) {
|
||||
#if defined(EIGEN_VECTORIZE_AVX512)
|
||||
return "AVX512, FMA, AVX2, AVX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2";
|
||||
#elif defined(EIGEN_VECTORIZE_AVX)
|
||||
return "AVX SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2";
|
||||
#elif defined(EIGEN_VECTORIZE_SSE4_2)
|
||||
return "SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2";
|
||||
#elif defined(EIGEN_VECTORIZE_SSE4_1)
|
||||
return "SSE, SSE2, SSE3, SSSE3, SSE4.1";
|
||||
#elif defined(EIGEN_VECTORIZE_SSSE3)
|
||||
return "SSE, SSE2, SSE3, SSSE3";
|
||||
#elif defined(EIGEN_VECTORIZE_SSE3)
|
||||
return "SSE, SSE2, SSE3";
|
||||
#elif defined(EIGEN_VECTORIZE_SSE2)
|
||||
return "SSE, SSE2";
|
||||
#elif defined(EIGEN_VECTORIZE_ALTIVEC)
|
||||
return "AltiVec";
|
||||
#elif defined(EIGEN_VECTORIZE_VSX)
|
||||
return "VSX";
|
||||
#elif defined(EIGEN_VECTORIZE_NEON)
|
||||
return "ARM NEON";
|
||||
#elif defined(EIGEN_VECTORIZE_ZVECTOR)
|
||||
return "S390X ZVECTOR";
|
||||
#else
|
||||
return "None";
|
||||
#endif
|
||||
}
|
||||
|
||||
} // end namespace Eigen
|
||||
|
||||
#if defined EIGEN2_SUPPORT_STAGE40_FULL_EIGEN3_STRICTNESS || defined EIGEN2_SUPPORT_STAGE30_FULL_EIGEN3_API || defined EIGEN2_SUPPORT_STAGE20_RESOLVE_API_CONFLICTS || defined EIGEN2_SUPPORT_STAGE10_FULL_EIGEN2_API || defined EIGEN2_SUPPORT
|
||||
// This will generate an error message:
|
||||
#error Eigen2-support is only available up to version 3.2. Please go to "http://eigen.tuxfamily.org/index.php?title=Eigen2" for further information
|
||||
#endif
|
||||
|
||||
namespace Eigen {
|
||||
|
||||
// we use size_t frequently and we'll never remember to prepend it with std:: everytime just to
|
||||
// ensure QNX/QCC support
|
||||
using std::size_t;
|
||||
// gcc 4.6.0 wants std:: for ptrdiff_t
|
||||
using std::ptrdiff_t;
|
||||
|
||||
}
|
||||
|
||||
/** \defgroup Core_Module Core module
|
||||
* This is the main module of Eigen providing dense matrix and vector support
|
||||
* (both fixed and dynamic size) with all the features corresponding to a BLAS library
|
||||
* and much more...
|
||||
*
|
||||
* \code
|
||||
* #include <Eigen/Core>
|
||||
* \endcode
|
||||
*/
|
||||
|
||||
#include "src/Core/util/Constants.h"
|
||||
#include "src/Core/util/Meta.h"
|
||||
#include "src/Core/util/ForwardDeclarations.h"
|
||||
#include "src/Core/util/StaticAssert.h"
|
||||
#include "src/Core/util/XprHelper.h"
|
||||
#include "src/Core/util/Memory.h"
|
||||
|
||||
#include "src/Core/NumTraits.h"
|
||||
#include "src/Core/MathFunctions.h"
|
||||
#include "src/Core/GenericPacketMath.h"
|
||||
#include "src/Core/MathFunctionsImpl.h"
|
||||
|
||||
#if defined EIGEN_VECTORIZE_AVX512
|
||||
#include "src/Core/arch/SSE/PacketMath.h"
|
||||
#include "src/Core/arch/AVX/PacketMath.h"
|
||||
#include "src/Core/arch/AVX512/PacketMath.h"
|
||||
#include "src/Core/arch/AVX512/MathFunctions.h"
|
||||
#elif defined EIGEN_VECTORIZE_AVX
|
||||
// Use AVX for floats and doubles, SSE for integers
|
||||
#include "src/Core/arch/SSE/PacketMath.h"
|
||||
#include "src/Core/arch/SSE/Complex.h"
|
||||
#include "src/Core/arch/SSE/MathFunctions.h"
|
||||
#include "src/Core/arch/AVX/PacketMath.h"
|
||||
#include "src/Core/arch/AVX/MathFunctions.h"
|
||||
#include "src/Core/arch/AVX/Complex.h"
|
||||
#include "src/Core/arch/AVX/TypeCasting.h"
|
||||
#elif defined EIGEN_VECTORIZE_SSE
|
||||
#include "src/Core/arch/SSE/PacketMath.h"
|
||||
#include "src/Core/arch/SSE/MathFunctions.h"
|
||||
#include "src/Core/arch/SSE/Complex.h"
|
||||
#include "src/Core/arch/SSE/TypeCasting.h"
|
||||
#elif defined(EIGEN_VECTORIZE_ALTIVEC) || defined(EIGEN_VECTORIZE_VSX)
|
||||
#include "src/Core/arch/AltiVec/PacketMath.h"
|
||||
#include "src/Core/arch/AltiVec/MathFunctions.h"
|
||||
#include "src/Core/arch/AltiVec/Complex.h"
|
||||
#elif defined EIGEN_VECTORIZE_NEON
|
||||
#include "src/Core/arch/NEON/PacketMath.h"
|
||||
#include "src/Core/arch/NEON/MathFunctions.h"
|
||||
#include "src/Core/arch/NEON/Complex.h"
|
||||
#elif defined EIGEN_VECTORIZE_ZVECTOR
|
||||
#include "src/Core/arch/ZVector/PacketMath.h"
|
||||
#include "src/Core/arch/ZVector/MathFunctions.h"
|
||||
#include "src/Core/arch/ZVector/Complex.h"
|
||||
#endif
|
||||
|
||||
// Half float support
|
||||
#include "src/Core/arch/CUDA/Half.h"
|
||||
#include "src/Core/arch/CUDA/PacketMathHalf.h"
|
||||
#include "src/Core/arch/CUDA/TypeCasting.h"
|
||||
|
||||
#if defined EIGEN_VECTORIZE_CUDA
|
||||
#include "src/Core/arch/CUDA/PacketMath.h"
|
||||
#include "src/Core/arch/CUDA/MathFunctions.h"
|
||||
#endif
|
||||
|
||||
#include "src/Core/arch/Default/Settings.h"
|
||||
|
||||
#include "src/Core/functors/TernaryFunctors.h"
|
||||
#include "src/Core/functors/BinaryFunctors.h"
|
||||
#include "src/Core/functors/UnaryFunctors.h"
|
||||
#include "src/Core/functors/NullaryFunctors.h"
|
||||
#include "src/Core/functors/StlFunctors.h"
|
||||
#include "src/Core/functors/AssignmentFunctors.h"
|
||||
|
||||
// Specialized functors to enable the processing of complex numbers
|
||||
// on CUDA devices
|
||||
#include "src/Core/arch/CUDA/Complex.h"
|
||||
|
||||
#include "src/Core/IO.h"
|
||||
#include "src/Core/DenseCoeffsBase.h"
|
||||
#include "src/Core/DenseBase.h"
|
||||
#include "src/Core/MatrixBase.h"
|
||||
#include "src/Core/EigenBase.h"
|
||||
|
||||
#include "src/Core/Product.h"
|
||||
#include "src/Core/CoreEvaluators.h"
|
||||
#include "src/Core/AssignEvaluator.h"
|
||||
|
||||
#ifndef EIGEN_PARSED_BY_DOXYGEN // work around Doxygen bug triggered by Assign.h r814874
|
||||
// at least confirmed with Doxygen 1.5.5 and 1.5.6
|
||||
#include "src/Core/Assign.h"
|
||||
#endif
|
||||
|
||||
#include "src/Core/ArrayBase.h"
|
||||
#include "src/Core/util/BlasUtil.h"
|
||||
#include "src/Core/DenseStorage.h"
|
||||
#include "src/Core/NestByValue.h"
|
||||
|
||||
// #include "src/Core/ForceAlignedAccess.h"
|
||||
|
||||
#include "src/Core/ReturnByValue.h"
|
||||
#include "src/Core/NoAlias.h"
|
||||
#include "src/Core/PlainObjectBase.h"
|
||||
#include "src/Core/Matrix.h"
|
||||
#include "src/Core/Array.h"
|
||||
#include "src/Core/CwiseTernaryOp.h"
|
||||
#include "src/Core/CwiseBinaryOp.h"
|
||||
#include "src/Core/CwiseUnaryOp.h"
|
||||
#include "src/Core/CwiseNullaryOp.h"
|
||||
#include "src/Core/CwiseUnaryView.h"
|
||||
#include "src/Core/SelfCwiseBinaryOp.h"
|
||||
#include "src/Core/Dot.h"
|
||||
#include "src/Core/StableNorm.h"
|
||||
#include "src/Core/Stride.h"
|
||||
#include "src/Core/MapBase.h"
|
||||
#include "src/Core/Map.h"
|
||||
#include "src/Core/Ref.h"
|
||||
#include "src/Core/Block.h"
|
||||
#include "src/Core/VectorBlock.h"
|
||||
#include "src/Core/Transpose.h"
|
||||
#include "src/Core/DiagonalMatrix.h"
|
||||
#include "src/Core/Diagonal.h"
|
||||
#include "src/Core/DiagonalProduct.h"
|
||||
#include "src/Core/Redux.h"
|
||||
#include "src/Core/Visitor.h"
|
||||
#include "src/Core/Fuzzy.h"
|
||||
#include "src/Core/Swap.h"
|
||||
#include "src/Core/CommaInitializer.h"
|
||||
#include "src/Core/GeneralProduct.h"
|
||||
#include "src/Core/Solve.h"
|
||||
#include "src/Core/Inverse.h"
|
||||
#include "src/Core/SolverBase.h"
|
||||
#include "src/Core/PermutationMatrix.h"
|
||||
#include "src/Core/Transpositions.h"
|
||||
#include "src/Core/TriangularMatrix.h"
|
||||
#include "src/Core/SelfAdjointView.h"
|
||||
#include "src/Core/products/GeneralBlockPanelKernel.h"
|
||||
#include "src/Core/products/Parallelizer.h"
|
||||
#include "src/Core/ProductEvaluators.h"
|
||||
#include "src/Core/products/GeneralMatrixVector.h"
|
||||
#include "src/Core/products/GeneralMatrixMatrix.h"
|
||||
#include "src/Core/SolveTriangular.h"
|
||||
#include "src/Core/products/GeneralMatrixMatrixTriangular.h"
|
||||
#include "src/Core/products/SelfadjointMatrixVector.h"
|
||||
#include "src/Core/products/SelfadjointMatrixMatrix.h"
|
||||
#include "src/Core/products/SelfadjointProduct.h"
|
||||
#include "src/Core/products/SelfadjointRank2Update.h"
|
||||
#include "src/Core/products/TriangularMatrixVector.h"
|
||||
#include "src/Core/products/TriangularMatrixMatrix.h"
|
||||
#include "src/Core/products/TriangularSolverMatrix.h"
|
||||
#include "src/Core/products/TriangularSolverVector.h"
|
||||
#include "src/Core/BandMatrix.h"
|
||||
#include "src/Core/CoreIterators.h"
|
||||
#include "src/Core/ConditionEstimator.h"
|
||||
|
||||
#include "src/Core/BooleanRedux.h"
|
||||
#include "src/Core/Select.h"
|
||||
#include "src/Core/VectorwiseOp.h"
|
||||
#include "src/Core/Random.h"
|
||||
#include "src/Core/Replicate.h"
|
||||
#include "src/Core/Reverse.h"
|
||||
#include "src/Core/ArrayWrapper.h"
|
||||
|
||||
#ifdef EIGEN_USE_BLAS
|
||||
#include "src/Core/products/GeneralMatrixMatrix_BLAS.h"
|
||||
#include "src/Core/products/GeneralMatrixVector_BLAS.h"
|
||||
#include "src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h"
|
||||
#include "src/Core/products/SelfadjointMatrixMatrix_BLAS.h"
|
||||
#include "src/Core/products/SelfadjointMatrixVector_BLAS.h"
|
||||
#include "src/Core/products/TriangularMatrixMatrix_BLAS.h"
|
||||
#include "src/Core/products/TriangularMatrixVector_BLAS.h"
|
||||
#include "src/Core/products/TriangularSolverMatrix_BLAS.h"
|
||||
#endif // EIGEN_USE_BLAS
|
||||
|
||||
#ifdef EIGEN_USE_MKL_VML
|
||||
#include "src/Core/Assign_MKL.h"
|
||||
#endif
|
||||
|
||||
#include "src/Core/GlobalFunctions.h"
|
||||
|
||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
||||
|
||||
#endif // EIGEN_CORE_H
|
||||
@@ -1,73 +0,0 @@
|
||||
// This file is part of Eigen, a lightweight C++ template library
|
||||
// for linear algebra.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla
|
||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#ifndef EIGEN_ORDERINGMETHODS_MODULE_H
|
||||
#define EIGEN_ORDERINGMETHODS_MODULE_H
|
||||
|
||||
#include "SparseCore"
|
||||
|
||||
#include "src/Core/util/DisableStupidWarnings.h"
|
||||
|
||||
/**
|
||||
* \defgroup OrderingMethods_Module OrderingMethods module
|
||||
*
|
||||
* This module is currently for internal use only
|
||||
*
|
||||
* It defines various built-in and external ordering methods for sparse matrices.
|
||||
* They are typically used to reduce the number of elements during
|
||||
* the sparse matrix decomposition (LLT, LU, QR).
|
||||
* Precisely, in a preprocessing step, a permutation matrix P is computed using
|
||||
* those ordering methods and applied to the columns of the matrix.
|
||||
* Using for instance the sparse Cholesky decomposition, it is expected that
|
||||
* the nonzeros elements in LLT(A*P) will be much smaller than that in LLT(A).
|
||||
*
|
||||
*
|
||||
* Usage :
|
||||
* \code
|
||||
* #include <Eigen/OrderingMethods>
|
||||
* \endcode
|
||||
*
|
||||
* A simple usage is as a template parameter in the sparse decomposition classes :
|
||||
*
|
||||
* \code
|
||||
* SparseLU<MatrixType, COLAMDOrdering<int> > solver;
|
||||
* \endcode
|
||||
*
|
||||
* \code
|
||||
* SparseQR<MatrixType, COLAMDOrdering<int> > solver;
|
||||
* \endcode
|
||||
*
|
||||
* It is possible as well to call directly a particular ordering method for your own purpose,
|
||||
* \code
|
||||
* AMDOrdering<int> ordering;
|
||||
* PermutationMatrix<Dynamic, Dynamic, int> perm;
|
||||
* SparseMatrix<double> A;
|
||||
* //Fill the matrix ...
|
||||
*
|
||||
* ordering(A, perm); // Call AMD
|
||||
* \endcode
|
||||
*
|
||||
* \note Some of these methods (like AMD or METIS), need the sparsity pattern
|
||||
* of the input matrix to be symmetric. When the matrix is structurally unsymmetric,
|
||||
* Eigen computes internally the pattern of \f$A^T*A\f$ before calling the method.
|
||||
* If your matrix is already symmetric (at leat in structure), you can avoid that
|
||||
* by calling the method with a SelfAdjointView type.
|
||||
*
|
||||
* \code
|
||||
* // Call the ordering on the pattern of the lower triangular matrix A
|
||||
* ordering(A.selfadjointView<Lower>(), perm);
|
||||
* \endcode
|
||||
*/
|
||||
|
||||
#ifndef EIGEN_MPL2_ONLY
|
||||
#include "src/OrderingMethods/Amd.h"
|
||||
#endif
|
||||
|
||||
#include "src/OrderingMethods/Ordering.h"
|
||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
||||
|
||||
#endif // EIGEN_ORDERINGMETHODS_MODULE_H
|
||||
@@ -1,48 +0,0 @@
|
||||
// This file is part of Eigen, a lightweight C++ template library
|
||||
// for linear algebra.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla
|
||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#ifndef EIGEN_PASTIXSUPPORT_MODULE_H
|
||||
#define EIGEN_PASTIXSUPPORT_MODULE_H
|
||||
|
||||
#include "SparseCore"
|
||||
|
||||
#include "src/Core/util/DisableStupidWarnings.h"
|
||||
|
||||
extern "C" {
|
||||
#include <pastix_nompi.h>
|
||||
#include <pastix.h>
|
||||
}
|
||||
|
||||
#ifdef complex
|
||||
#undef complex
|
||||
#endif
|
||||
|
||||
/** \ingroup Support_modules
|
||||
* \defgroup PaStiXSupport_Module PaStiXSupport module
|
||||
*
|
||||
* This module provides an interface to the <a href="http://pastix.gforge.inria.fr/">PaSTiX</a> library.
|
||||
* PaSTiX is a general \b supernodal, \b parallel and \b opensource sparse solver.
|
||||
* It provides the two following main factorization classes:
|
||||
* - class PastixLLT : a supernodal, parallel LLt Cholesky factorization.
|
||||
* - class PastixLDLT: a supernodal, parallel LDLt Cholesky factorization.
|
||||
* - class PastixLU : a supernodal, parallel LU factorization (optimized for a symmetric pattern).
|
||||
*
|
||||
* \code
|
||||
* #include <Eigen/PaStiXSupport>
|
||||
* \endcode
|
||||
*
|
||||
* In order to use this module, the PaSTiX headers must be accessible from the include paths, and your binary must be linked to the PaSTiX library and its dependencies.
|
||||
* The dependencies depend on how PaSTiX has been compiled.
|
||||
* For a cmake based project, you can use our FindPaSTiX.cmake module to help you in this task.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "src/PaStiXSupport/PaStiXSupport.h"
|
||||
|
||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
||||
|
||||
#endif // EIGEN_PASTIXSUPPORT_MODULE_H
|
||||
@@ -1,34 +0,0 @@
|
||||
// This file is part of Eigen, a lightweight C++ template library
|
||||
// for linear algebra.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla
|
||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#ifndef EIGEN_SPQRSUPPORT_MODULE_H
|
||||
#define EIGEN_SPQRSUPPORT_MODULE_H
|
||||
|
||||
#include "SparseCore"
|
||||
|
||||
#include "src/Core/util/DisableStupidWarnings.h"
|
||||
|
||||
#include "SuiteSparseQR.hpp"
|
||||
|
||||
/** \ingroup Support_modules
|
||||
* \defgroup SPQRSupport_Module SuiteSparseQR module
|
||||
*
|
||||
* This module provides an interface to the SPQR library, which is part of the <a href="http://www.suitesparse.com">suitesparse</a> package.
|
||||
*
|
||||
* \code
|
||||
* #include <Eigen/SPQRSupport>
|
||||
* \endcode
|
||||
*
|
||||
* In order to use this module, the SPQR headers must be accessible from the include paths, and your binary must be linked to the SPQR library and its dependencies (Cholmod, AMD, COLAMD,...).
|
||||
* For a cmake based project, you can use our FindSPQR.cmake and FindCholmod.Cmake modules
|
||||
*
|
||||
*/
|
||||
|
||||
#include "src/CholmodSupport/CholmodSupport.h"
|
||||
#include "src/SPQRSupport/SuiteSparseQRSupport.h"
|
||||
|
||||
#endif
|
||||
@@ -1,47 +0,0 @@
|
||||
// This file is part of Eigen, a lightweight C++ template library
|
||||
// for linear algebra.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla
|
||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#ifndef EIGEN_SVD_MODULE_H
|
||||
#define EIGEN_SVD_MODULE_H
|
||||
|
||||
#include "QR"
|
||||
#include "Householder"
|
||||
#include "Jacobi"
|
||||
|
||||
#include "src/Core/util/DisableStupidWarnings.h"
|
||||
|
||||
/** \defgroup SVD_Module SVD module
|
||||
*
|
||||
*
|
||||
*
|
||||
* This module provides SVD decomposition for matrices (both real and complex).
|
||||
* Two decomposition algorithms are provided:
|
||||
* - JacobiSVD implementing two-sided Jacobi iterations is numerically very accurate, fast for small matrices, but very slow for larger ones.
|
||||
* - BDCSVD implementing a recursive divide & conquer strategy on top of an upper-bidiagonalization which remains fast for large problems.
|
||||
* These decompositions are accessible via the respective classes and following MatrixBase methods:
|
||||
* - MatrixBase::jacobiSvd()
|
||||
* - MatrixBase::bdcSvd()
|
||||
*
|
||||
* \code
|
||||
* #include <Eigen/SVD>
|
||||
* \endcode
|
||||
*/
|
||||
|
||||
#include "src/misc/RealSvd2x2.h"
|
||||
#include "src/SVD/UpperBidiagonalization.h"
|
||||
#include "src/SVD/SVDBase.h"
|
||||
#include "src/SVD/JacobiSVD.h"
|
||||
#include "src/SVD/BDCSVD.h"
|
||||
#if defined(EIGEN_USE_LAPACKE) && !defined(EIGEN_USE_LAPACKE_STRICT)
|
||||
#include "src/misc/lapacke.h"
|
||||
#include "src/SVD/JacobiSVD_LAPACKE.h"
|
||||
#endif
|
||||
|
||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
||||
|
||||
#endif // EIGEN_SVD_MODULE_H
|
||||
/* vim: set filetype=cpp et sw=2 ts=2 ai: */
|
||||
@@ -1,64 +0,0 @@
|
||||
// This file is part of Eigen, a lightweight C++ template library
|
||||
// for linear algebra.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla
|
||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#ifndef EIGEN_SUPERLUSUPPORT_MODULE_H
|
||||
#define EIGEN_SUPERLUSUPPORT_MODULE_H
|
||||
|
||||
#include "SparseCore"
|
||||
|
||||
#include "src/Core/util/DisableStupidWarnings.h"
|
||||
|
||||
#ifdef EMPTY
|
||||
#define EIGEN_EMPTY_WAS_ALREADY_DEFINED
|
||||
#endif
|
||||
|
||||
typedef int int_t;
|
||||
#include <slu_Cnames.h>
|
||||
#include <supermatrix.h>
|
||||
#include <slu_util.h>
|
||||
|
||||
// slu_util.h defines a preprocessor token named EMPTY which is really polluting,
|
||||
// so we remove it in favor of a SUPERLU_EMPTY token.
|
||||
// If EMPTY was already defined then we don't undef it.
|
||||
|
||||
#if defined(EIGEN_EMPTY_WAS_ALREADY_DEFINED)
|
||||
# undef EIGEN_EMPTY_WAS_ALREADY_DEFINED
|
||||
#elif defined(EMPTY)
|
||||
# undef EMPTY
|
||||
#endif
|
||||
|
||||
#define SUPERLU_EMPTY (-1)
|
||||
|
||||
namespace Eigen { struct SluMatrix; }
|
||||
|
||||
/** \ingroup Support_modules
|
||||
* \defgroup SuperLUSupport_Module SuperLUSupport module
|
||||
*
|
||||
* This module provides an interface to the <a href="http://crd-legacy.lbl.gov/~xiaoye/SuperLU/">SuperLU</a> library.
|
||||
* It provides the following factorization class:
|
||||
* - class SuperLU: a supernodal sequential LU factorization.
|
||||
* - class SuperILU: a supernodal sequential incomplete LU factorization (to be used as a preconditioner for iterative methods).
|
||||
*
|
||||
* \warning This wrapper requires at least versions 4.0 of SuperLU. The 3.x versions are not supported.
|
||||
*
|
||||
* \warning When including this module, you have to use SUPERLU_EMPTY instead of EMPTY which is no longer defined because it is too polluting.
|
||||
*
|
||||
* \code
|
||||
* #include <Eigen/SuperLUSupport>
|
||||
* \endcode
|
||||
*
|
||||
* In order to use this module, the superlu headers must be accessible from the include paths, and your binary must be linked to the superlu library and its dependencies.
|
||||
* The dependencies depend on how superlu has been compiled.
|
||||
* For a cmake based project, you can use our FindSuperLU.cmake module to help you in this task.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "src/SuperLUSupport/SuperLUSupport.h"
|
||||
|
||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
||||
|
||||
#endif // EIGEN_SUPERLUSUPPORT_MODULE_H
|
||||
@@ -1,40 +0,0 @@
|
||||
// This file is part of Eigen, a lightweight C++ template library
|
||||
// for linear algebra.
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla
|
||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#ifndef EIGEN_UMFPACKSUPPORT_MODULE_H
|
||||
#define EIGEN_UMFPACKSUPPORT_MODULE_H
|
||||
|
||||
#include "SparseCore"
|
||||
|
||||
#include "src/Core/util/DisableStupidWarnings.h"
|
||||
|
||||
extern "C" {
|
||||
#include <umfpack.h>
|
||||
}
|
||||
|
||||
/** \ingroup Support_modules
|
||||
* \defgroup UmfPackSupport_Module UmfPackSupport module
|
||||
*
|
||||
* This module provides an interface to the UmfPack library which is part of the <a href="http://www.suitesparse.com">suitesparse</a> package.
|
||||
* It provides the following factorization class:
|
||||
* - class UmfPackLU: a multifrontal sequential LU factorization.
|
||||
*
|
||||
* \code
|
||||
* #include <Eigen/UmfPackSupport>
|
||||
* \endcode
|
||||
*
|
||||
* In order to use this module, the umfpack headers must be accessible from the include paths, and your binary must be linked to the umfpack library and its dependencies.
|
||||
* The dependencies depend on how umfpack has been compiled.
|
||||
* For a cmake based project, you can use our FindUmfPack.cmake module to help you in this task.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "src/UmfPackSupport/UmfPackSupport.h"
|
||||
|
||||
#include "src/Core/util/ReenableStupidWarnings.h"
|
||||
|
||||
#endif // EIGEN_UMFPACKSUPPORT_MODULE_H
|
||||
@@ -1,669 +0,0 @@
|
||||
// This file is part of Eigen, a lightweight C++ template library
|
||||
// for linear algebra.
|
||||
//
|
||||
// Copyright (C) 2008-2011 Gael Guennebaud <gael.guennebaud@inria.fr>
|
||||
// Copyright (C) 2009 Keir Mierle <mierle@gmail.com>
|
||||
// Copyright (C) 2009 Benoit Jacob <jacob.benoit.1@gmail.com>
|
||||
// Copyright (C) 2011 Timothy E. Holy <tim.holy@gmail.com >
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla
|
||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#ifndef EIGEN_LDLT_H
|
||||
#define EIGEN_LDLT_H
|
||||
|
||||
namespace Eigen {
|
||||
|
||||
namespace internal {
|
||||
template<typename MatrixType, int UpLo> struct LDLT_Traits;
|
||||
|
||||
// PositiveSemiDef means positive semi-definite and non-zero; same for NegativeSemiDef
|
||||
enum SignMatrix { PositiveSemiDef, NegativeSemiDef, ZeroSign, Indefinite };
|
||||
}
|
||||
|
||||
/** \ingroup Cholesky_Module
|
||||
*
|
||||
* \class LDLT
|
||||
*
|
||||
* \brief Robust Cholesky decomposition of a matrix with pivoting
|
||||
*
|
||||
* \tparam _MatrixType the type of the matrix of which to compute the LDL^T Cholesky decomposition
|
||||
* \tparam _UpLo the triangular part that will be used for the decompositon: Lower (default) or Upper.
|
||||
* The other triangular part won't be read.
|
||||
*
|
||||
* Perform a robust Cholesky decomposition of a positive semidefinite or negative semidefinite
|
||||
* matrix \f$ A \f$ such that \f$ A = P^TLDL^*P \f$, where P is a permutation matrix, L
|
||||
* is lower triangular with a unit diagonal and D is a diagonal matrix.
|
||||
*
|
||||
* The decomposition uses pivoting to ensure stability, so that L will have
|
||||
* zeros in the bottom right rank(A) - n submatrix. Avoiding the square root
|
||||
* on D also stabilizes the computation.
|
||||
*
|
||||
* Remember that Cholesky decompositions are not rank-revealing. Also, do not use a Cholesky
|
||||
* decomposition to determine whether a system of equations has a solution.
|
||||
*
|
||||
* This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
|
||||
*
|
||||
* \sa MatrixBase::ldlt(), SelfAdjointView::ldlt(), class LLT
|
||||
*/
|
||||
template<typename _MatrixType, int _UpLo> class LDLT
|
||||
{
|
||||
public:
|
||||
typedef _MatrixType MatrixType;
|
||||
enum {
|
||||
RowsAtCompileTime = MatrixType::RowsAtCompileTime,
|
||||
ColsAtCompileTime = MatrixType::ColsAtCompileTime,
|
||||
MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
|
||||
MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime,
|
||||
UpLo = _UpLo
|
||||
};
|
||||
typedef typename MatrixType::Scalar Scalar;
|
||||
typedef typename NumTraits<typename MatrixType::Scalar>::Real RealScalar;
|
||||
typedef Eigen::Index Index; ///< \deprecated since Eigen 3.3
|
||||
typedef typename MatrixType::StorageIndex StorageIndex;
|
||||
typedef Matrix<Scalar, RowsAtCompileTime, 1, 0, MaxRowsAtCompileTime, 1> TmpMatrixType;
|
||||
|
||||
typedef Transpositions<RowsAtCompileTime, MaxRowsAtCompileTime> TranspositionType;
|
||||
typedef PermutationMatrix<RowsAtCompileTime, MaxRowsAtCompileTime> PermutationType;
|
||||
|
||||
typedef internal::LDLT_Traits<MatrixType,UpLo> Traits;
|
||||
|
||||
/** \brief Default Constructor.
|
||||
*
|
||||
* The default constructor is useful in cases in which the user intends to
|
||||
* perform decompositions via LDLT::compute(const MatrixType&).
|
||||
*/
|
||||
LDLT()
|
||||
: m_matrix(),
|
||||
m_transpositions(),
|
||||
m_sign(internal::ZeroSign),
|
||||
m_isInitialized(false)
|
||||
{}
|
||||
|
||||
/** \brief Default Constructor with memory preallocation
|
||||
*
|
||||
* Like the default constructor but with preallocation of the internal data
|
||||
* according to the specified problem \a size.
|
||||
* \sa LDLT()
|
||||
*/
|
||||
explicit LDLT(Index size)
|
||||
: m_matrix(size, size),
|
||||
m_transpositions(size),
|
||||
m_temporary(size),
|
||||
m_sign(internal::ZeroSign),
|
||||
m_isInitialized(false)
|
||||
{}
|
||||
|
||||
/** \brief Constructor with decomposition
|
||||
*
|
||||
* This calculates the decomposition for the input \a matrix.
|
||||
*
|
||||
* \sa LDLT(Index size)
|
||||
*/
|
||||
template<typename InputType>
|
||||
explicit LDLT(const EigenBase<InputType>& matrix)
|
||||
: m_matrix(matrix.rows(), matrix.cols()),
|
||||
m_transpositions(matrix.rows()),
|
||||
m_temporary(matrix.rows()),
|
||||
m_sign(internal::ZeroSign),
|
||||
m_isInitialized(false)
|
||||
{
|
||||
compute(matrix.derived());
|
||||
}
|
||||
|
||||
/** \brief Constructs a LDLT factorization from a given matrix
|
||||
*
|
||||
* This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when \c MatrixType is a Eigen::Ref.
|
||||
*
|
||||
* \sa LDLT(const EigenBase&)
|
||||
*/
|
||||
template<typename InputType>
|
||||
explicit LDLT(EigenBase<InputType>& matrix)
|
||||
: m_matrix(matrix.derived()),
|
||||
m_transpositions(matrix.rows()),
|
||||
m_temporary(matrix.rows()),
|
||||
m_sign(internal::ZeroSign),
|
||||
m_isInitialized(false)
|
||||
{
|
||||
compute(matrix.derived());
|
||||
}
|
||||
|
||||
/** Clear any existing decomposition
|
||||
* \sa rankUpdate(w,sigma)
|
||||
*/
|
||||
void setZero()
|
||||
{
|
||||
m_isInitialized = false;
|
||||
}
|
||||
|
||||
/** \returns a view of the upper triangular matrix U */
|
||||
inline typename Traits::MatrixU matrixU() const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
||||
return Traits::getU(m_matrix);
|
||||
}
|
||||
|
||||
/** \returns a view of the lower triangular matrix L */
|
||||
inline typename Traits::MatrixL matrixL() const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
||||
return Traits::getL(m_matrix);
|
||||
}
|
||||
|
||||
/** \returns the permutation matrix P as a transposition sequence.
|
||||
*/
|
||||
inline const TranspositionType& transpositionsP() const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
||||
return m_transpositions;
|
||||
}
|
||||
|
||||
/** \returns the coefficients of the diagonal matrix D */
|
||||
inline Diagonal<const MatrixType> vectorD() const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
||||
return m_matrix.diagonal();
|
||||
}
|
||||
|
||||
/** \returns true if the matrix is positive (semidefinite) */
|
||||
inline bool isPositive() const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
||||
return m_sign == internal::PositiveSemiDef || m_sign == internal::ZeroSign;
|
||||
}
|
||||
|
||||
/** \returns true if the matrix is negative (semidefinite) */
|
||||
inline bool isNegative(void) const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
||||
return m_sign == internal::NegativeSemiDef || m_sign == internal::ZeroSign;
|
||||
}
|
||||
|
||||
/** \returns a solution x of \f$ A x = b \f$ using the current decomposition of A.
|
||||
*
|
||||
* This function also supports in-place solves using the syntax <tt>x = decompositionObject.solve(x)</tt> .
|
||||
*
|
||||
* \note_about_checking_solutions
|
||||
*
|
||||
* More precisely, this method solves \f$ A x = b \f$ using the decomposition \f$ A = P^T L D L^* P \f$
|
||||
* by solving the systems \f$ P^T y_1 = b \f$, \f$ L y_2 = y_1 \f$, \f$ D y_3 = y_2 \f$,
|
||||
* \f$ L^* y_4 = y_3 \f$ and \f$ P x = y_4 \f$ in succession. If the matrix \f$ A \f$ is singular, then
|
||||
* \f$ D \f$ will also be singular (all the other matrices are invertible). In that case, the
|
||||
* least-square solution of \f$ D y_3 = y_2 \f$ is computed. This does not mean that this function
|
||||
* computes the least-square solution of \f$ A x = b \f$ is \f$ A \f$ is singular.
|
||||
*
|
||||
* \sa MatrixBase::ldlt(), SelfAdjointView::ldlt()
|
||||
*/
|
||||
template<typename Rhs>
|
||||
inline const Solve<LDLT, Rhs>
|
||||
solve(const MatrixBase<Rhs>& b) const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
||||
eigen_assert(m_matrix.rows()==b.rows()
|
||||
&& "LDLT::solve(): invalid number of rows of the right hand side matrix b");
|
||||
return Solve<LDLT, Rhs>(*this, b.derived());
|
||||
}
|
||||
|
||||
template<typename Derived>
|
||||
bool solveInPlace(MatrixBase<Derived> &bAndX) const;
|
||||
|
||||
template<typename InputType>
|
||||
LDLT& compute(const EigenBase<InputType>& matrix);
|
||||
|
||||
/** \returns an estimate of the reciprocal condition number of the matrix of
|
||||
* which \c *this is the LDLT decomposition.
|
||||
*/
|
||||
RealScalar rcond() const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
||||
return internal::rcond_estimate_helper(m_l1_norm, *this);
|
||||
}
|
||||
|
||||
template <typename Derived>
|
||||
LDLT& rankUpdate(const MatrixBase<Derived>& w, const RealScalar& alpha=1);
|
||||
|
||||
/** \returns the internal LDLT decomposition matrix
|
||||
*
|
||||
* TODO: document the storage layout
|
||||
*/
|
||||
inline const MatrixType& matrixLDLT() const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
||||
return m_matrix;
|
||||
}
|
||||
|
||||
MatrixType reconstructedMatrix() const;
|
||||
|
||||
/** \returns the adjoint of \c *this, that is, a const reference to the decomposition itself as the underlying matrix is self-adjoint.
|
||||
*
|
||||
* This method is provided for compatibility with other matrix decompositions, thus enabling generic code such as:
|
||||
* \code x = decomposition.adjoint().solve(b) \endcode
|
||||
*/
|
||||
const LDLT& adjoint() const { return *this; };
|
||||
|
||||
inline Index rows() const { return m_matrix.rows(); }
|
||||
inline Index cols() const { return m_matrix.cols(); }
|
||||
|
||||
/** \brief Reports whether previous computation was successful.
|
||||
*
|
||||
* \returns \c Success if computation was succesful,
|
||||
* \c NumericalIssue if the matrix.appears to be negative.
|
||||
*/
|
||||
ComputationInfo info() const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
||||
return m_info;
|
||||
}
|
||||
|
||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
||||
template<typename RhsType, typename DstType>
|
||||
EIGEN_DEVICE_FUNC
|
||||
void _solve_impl(const RhsType &rhs, DstType &dst) const;
|
||||
#endif
|
||||
|
||||
protected:
|
||||
|
||||
static void check_template_parameters()
|
||||
{
|
||||
EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
|
||||
}
|
||||
|
||||
/** \internal
|
||||
* Used to compute and store the Cholesky decomposition A = L D L^* = U^* D U.
|
||||
* The strict upper part is used during the decomposition, the strict lower
|
||||
* part correspond to the coefficients of L (its diagonal is equal to 1 and
|
||||
* is not stored), and the diagonal entries correspond to D.
|
||||
*/
|
||||
MatrixType m_matrix;
|
||||
RealScalar m_l1_norm;
|
||||
TranspositionType m_transpositions;
|
||||
TmpMatrixType m_temporary;
|
||||
internal::SignMatrix m_sign;
|
||||
bool m_isInitialized;
|
||||
ComputationInfo m_info;
|
||||
};
|
||||
|
||||
namespace internal {
|
||||
|
||||
template<int UpLo> struct ldlt_inplace;
|
||||
|
||||
template<> struct ldlt_inplace<Lower>
|
||||
{
|
||||
template<typename MatrixType, typename TranspositionType, typename Workspace>
|
||||
static bool unblocked(MatrixType& mat, TranspositionType& transpositions, Workspace& temp, SignMatrix& sign)
|
||||
{
|
||||
using std::abs;
|
||||
typedef typename MatrixType::Scalar Scalar;
|
||||
typedef typename MatrixType::RealScalar RealScalar;
|
||||
typedef typename TranspositionType::StorageIndex IndexType;
|
||||
eigen_assert(mat.rows()==mat.cols());
|
||||
const Index size = mat.rows();
|
||||
bool found_zero_pivot = false;
|
||||
bool ret = true;
|
||||
|
||||
if (size <= 1)
|
||||
{
|
||||
transpositions.setIdentity();
|
||||
if (numext::real(mat.coeff(0,0)) > static_cast<RealScalar>(0) ) sign = PositiveSemiDef;
|
||||
else if (numext::real(mat.coeff(0,0)) < static_cast<RealScalar>(0)) sign = NegativeSemiDef;
|
||||
else sign = ZeroSign;
|
||||
return true;
|
||||
}
|
||||
|
||||
for (Index k = 0; k < size; ++k)
|
||||
{
|
||||
// Find largest diagonal element
|
||||
Index index_of_biggest_in_corner;
|
||||
mat.diagonal().tail(size-k).cwiseAbs().maxCoeff(&index_of_biggest_in_corner);
|
||||
index_of_biggest_in_corner += k;
|
||||
|
||||
transpositions.coeffRef(k) = IndexType(index_of_biggest_in_corner);
|
||||
if(k != index_of_biggest_in_corner)
|
||||
{
|
||||
// apply the transposition while taking care to consider only
|
||||
// the lower triangular part
|
||||
Index s = size-index_of_biggest_in_corner-1; // trailing size after the biggest element
|
||||
mat.row(k).head(k).swap(mat.row(index_of_biggest_in_corner).head(k));
|
||||
mat.col(k).tail(s).swap(mat.col(index_of_biggest_in_corner).tail(s));
|
||||
std::swap(mat.coeffRef(k,k),mat.coeffRef(index_of_biggest_in_corner,index_of_biggest_in_corner));
|
||||
for(Index i=k+1;i<index_of_biggest_in_corner;++i)
|
||||
{
|
||||
Scalar tmp = mat.coeffRef(i,k);
|
||||
mat.coeffRef(i,k) = numext::conj(mat.coeffRef(index_of_biggest_in_corner,i));
|
||||
mat.coeffRef(index_of_biggest_in_corner,i) = numext::conj(tmp);
|
||||
}
|
||||
if(NumTraits<Scalar>::IsComplex)
|
||||
mat.coeffRef(index_of_biggest_in_corner,k) = numext::conj(mat.coeff(index_of_biggest_in_corner,k));
|
||||
}
|
||||
|
||||
// partition the matrix:
|
||||
// A00 | - | -
|
||||
// lu = A10 | A11 | -
|
||||
// A20 | A21 | A22
|
||||
Index rs = size - k - 1;
|
||||
Block<MatrixType,Dynamic,1> A21(mat,k+1,k,rs,1);
|
||||
Block<MatrixType,1,Dynamic> A10(mat,k,0,1,k);
|
||||
Block<MatrixType,Dynamic,Dynamic> A20(mat,k+1,0,rs,k);
|
||||
|
||||
if(k>0)
|
||||
{
|
||||
temp.head(k) = mat.diagonal().real().head(k).asDiagonal() * A10.adjoint();
|
||||
mat.coeffRef(k,k) -= (A10 * temp.head(k)).value();
|
||||
if(rs>0)
|
||||
A21.noalias() -= A20 * temp.head(k);
|
||||
}
|
||||
|
||||
// In some previous versions of Eigen (e.g., 3.2.1), the scaling was omitted if the pivot
|
||||
// was smaller than the cutoff value. However, since LDLT is not rank-revealing
|
||||
// we should only make sure that we do not introduce INF or NaN values.
|
||||
// Remark that LAPACK also uses 0 as the cutoff value.
|
||||
RealScalar realAkk = numext::real(mat.coeffRef(k,k));
|
||||
bool pivot_is_valid = (abs(realAkk) > RealScalar(0));
|
||||
|
||||
if(k==0 && !pivot_is_valid)
|
||||
{
|
||||
// The entire diagonal is zero, there is nothing more to do
|
||||
// except filling the transpositions, and checking whether the matrix is zero.
|
||||
sign = ZeroSign;
|
||||
for(Index j = 0; j<size; ++j)
|
||||
{
|
||||
transpositions.coeffRef(j) = IndexType(j);
|
||||
ret = ret && (mat.col(j).tail(size-j-1).array()==Scalar(0)).all();
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
if((rs>0) && pivot_is_valid)
|
||||
A21 /= realAkk;
|
||||
|
||||
if(found_zero_pivot && pivot_is_valid) ret = false; // factorization failed
|
||||
else if(!pivot_is_valid) found_zero_pivot = true;
|
||||
|
||||
if (sign == PositiveSemiDef) {
|
||||
if (realAkk < static_cast<RealScalar>(0)) sign = Indefinite;
|
||||
} else if (sign == NegativeSemiDef) {
|
||||
if (realAkk > static_cast<RealScalar>(0)) sign = Indefinite;
|
||||
} else if (sign == ZeroSign) {
|
||||
if (realAkk > static_cast<RealScalar>(0)) sign = PositiveSemiDef;
|
||||
else if (realAkk < static_cast<RealScalar>(0)) sign = NegativeSemiDef;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// Reference for the algorithm: Davis and Hager, "Multiple Rank
|
||||
// Modifications of a Sparse Cholesky Factorization" (Algorithm 1)
|
||||
// Trivial rearrangements of their computations (Timothy E. Holy)
|
||||
// allow their algorithm to work for rank-1 updates even if the
|
||||
// original matrix is not of full rank.
|
||||
// Here only rank-1 updates are implemented, to reduce the
|
||||
// requirement for intermediate storage and improve accuracy
|
||||
template<typename MatrixType, typename WDerived>
|
||||
static bool updateInPlace(MatrixType& mat, MatrixBase<WDerived>& w, const typename MatrixType::RealScalar& sigma=1)
|
||||
{
|
||||
using numext::isfinite;
|
||||
typedef typename MatrixType::Scalar Scalar;
|
||||
typedef typename MatrixType::RealScalar RealScalar;
|
||||
|
||||
const Index size = mat.rows();
|
||||
eigen_assert(mat.cols() == size && w.size()==size);
|
||||
|
||||
RealScalar alpha = 1;
|
||||
|
||||
// Apply the update
|
||||
for (Index j = 0; j < size; j++)
|
||||
{
|
||||
// Check for termination due to an original decomposition of low-rank
|
||||
if (!(isfinite)(alpha))
|
||||
break;
|
||||
|
||||
// Update the diagonal terms
|
||||
RealScalar dj = numext::real(mat.coeff(j,j));
|
||||
Scalar wj = w.coeff(j);
|
||||
RealScalar swj2 = sigma*numext::abs2(wj);
|
||||
RealScalar gamma = dj*alpha + swj2;
|
||||
|
||||
mat.coeffRef(j,j) += swj2/alpha;
|
||||
alpha += swj2/dj;
|
||||
|
||||
|
||||
// Update the terms of L
|
||||
Index rs = size-j-1;
|
||||
w.tail(rs) -= wj * mat.col(j).tail(rs);
|
||||
if(gamma != 0)
|
||||
mat.col(j).tail(rs) += (sigma*numext::conj(wj)/gamma)*w.tail(rs);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
template<typename MatrixType, typename TranspositionType, typename Workspace, typename WType>
|
||||
static bool update(MatrixType& mat, const TranspositionType& transpositions, Workspace& tmp, const WType& w, const typename MatrixType::RealScalar& sigma=1)
|
||||
{
|
||||
// Apply the permutation to the input w
|
||||
tmp = transpositions * w;
|
||||
|
||||
return ldlt_inplace<Lower>::updateInPlace(mat,tmp,sigma);
|
||||
}
|
||||
};
|
||||
|
||||
template<> struct ldlt_inplace<Upper>
|
||||
{
|
||||
template<typename MatrixType, typename TranspositionType, typename Workspace>
|
||||
static EIGEN_STRONG_INLINE bool unblocked(MatrixType& mat, TranspositionType& transpositions, Workspace& temp, SignMatrix& sign)
|
||||
{
|
||||
Transpose<MatrixType> matt(mat);
|
||||
return ldlt_inplace<Lower>::unblocked(matt, transpositions, temp, sign);
|
||||
}
|
||||
|
||||
template<typename MatrixType, typename TranspositionType, typename Workspace, typename WType>
|
||||
static EIGEN_STRONG_INLINE bool update(MatrixType& mat, TranspositionType& transpositions, Workspace& tmp, WType& w, const typename MatrixType::RealScalar& sigma=1)
|
||||
{
|
||||
Transpose<MatrixType> matt(mat);
|
||||
return ldlt_inplace<Lower>::update(matt, transpositions, tmp, w.conjugate(), sigma);
|
||||
}
|
||||
};
|
||||
|
||||
template<typename MatrixType> struct LDLT_Traits<MatrixType,Lower>
|
||||
{
|
||||
typedef const TriangularView<const MatrixType, UnitLower> MatrixL;
|
||||
typedef const TriangularView<const typename MatrixType::AdjointReturnType, UnitUpper> MatrixU;
|
||||
static inline MatrixL getL(const MatrixType& m) { return MatrixL(m); }
|
||||
static inline MatrixU getU(const MatrixType& m) { return MatrixU(m.adjoint()); }
|
||||
};
|
||||
|
||||
template<typename MatrixType> struct LDLT_Traits<MatrixType,Upper>
|
||||
{
|
||||
typedef const TriangularView<const typename MatrixType::AdjointReturnType, UnitLower> MatrixL;
|
||||
typedef const TriangularView<const MatrixType, UnitUpper> MatrixU;
|
||||
static inline MatrixL getL(const MatrixType& m) { return MatrixL(m.adjoint()); }
|
||||
static inline MatrixU getU(const MatrixType& m) { return MatrixU(m); }
|
||||
};
|
||||
|
||||
} // end namespace internal
|
||||
|
||||
/** Compute / recompute the LDLT decomposition A = L D L^* = U^* D U of \a matrix
|
||||
*/
|
||||
template<typename MatrixType, int _UpLo>
|
||||
template<typename InputType>
|
||||
LDLT<MatrixType,_UpLo>& LDLT<MatrixType,_UpLo>::compute(const EigenBase<InputType>& a)
|
||||
{
|
||||
check_template_parameters();
|
||||
|
||||
eigen_assert(a.rows()==a.cols());
|
||||
const Index size = a.rows();
|
||||
|
||||
m_matrix = a.derived();
|
||||
|
||||
// Compute matrix L1 norm = max abs column sum.
|
||||
m_l1_norm = RealScalar(0);
|
||||
// TODO move this code to SelfAdjointView
|
||||
for (Index col = 0; col < size; ++col) {
|
||||
RealScalar abs_col_sum;
|
||||
if (_UpLo == Lower)
|
||||
abs_col_sum = m_matrix.col(col).tail(size - col).template lpNorm<1>() + m_matrix.row(col).head(col).template lpNorm<1>();
|
||||
else
|
||||
abs_col_sum = m_matrix.col(col).head(col).template lpNorm<1>() + m_matrix.row(col).tail(size - col).template lpNorm<1>();
|
||||
if (abs_col_sum > m_l1_norm)
|
||||
m_l1_norm = abs_col_sum;
|
||||
}
|
||||
|
||||
m_transpositions.resize(size);
|
||||
m_isInitialized = false;
|
||||
m_temporary.resize(size);
|
||||
m_sign = internal::ZeroSign;
|
||||
|
||||
m_info = internal::ldlt_inplace<UpLo>::unblocked(m_matrix, m_transpositions, m_temporary, m_sign) ? Success : NumericalIssue;
|
||||
|
||||
m_isInitialized = true;
|
||||
return *this;
|
||||
}
|
||||
|
||||
/** Update the LDLT decomposition: given A = L D L^T, efficiently compute the decomposition of A + sigma w w^T.
|
||||
* \param w a vector to be incorporated into the decomposition.
|
||||
* \param sigma a scalar, +1 for updates and -1 for "downdates," which correspond to removing previously-added column vectors. Optional; default value is +1.
|
||||
* \sa setZero()
|
||||
*/
|
||||
template<typename MatrixType, int _UpLo>
|
||||
template<typename Derived>
|
||||
LDLT<MatrixType,_UpLo>& LDLT<MatrixType,_UpLo>::rankUpdate(const MatrixBase<Derived>& w, const typename LDLT<MatrixType,_UpLo>::RealScalar& sigma)
|
||||
{
|
||||
typedef typename TranspositionType::StorageIndex IndexType;
|
||||
const Index size = w.rows();
|
||||
if (m_isInitialized)
|
||||
{
|
||||
eigen_assert(m_matrix.rows()==size);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_matrix.resize(size,size);
|
||||
m_matrix.setZero();
|
||||
m_transpositions.resize(size);
|
||||
for (Index i = 0; i < size; i++)
|
||||
m_transpositions.coeffRef(i) = IndexType(i);
|
||||
m_temporary.resize(size);
|
||||
m_sign = sigma>=0 ? internal::PositiveSemiDef : internal::NegativeSemiDef;
|
||||
m_isInitialized = true;
|
||||
}
|
||||
|
||||
internal::ldlt_inplace<UpLo>::update(m_matrix, m_transpositions, m_temporary, w, sigma);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
||||
template<typename _MatrixType, int _UpLo>
|
||||
template<typename RhsType, typename DstType>
|
||||
void LDLT<_MatrixType,_UpLo>::_solve_impl(const RhsType &rhs, DstType &dst) const
|
||||
{
|
||||
eigen_assert(rhs.rows() == rows());
|
||||
// dst = P b
|
||||
dst = m_transpositions * rhs;
|
||||
|
||||
// dst = L^-1 (P b)
|
||||
matrixL().solveInPlace(dst);
|
||||
|
||||
// dst = D^-1 (L^-1 P b)
|
||||
// more precisely, use pseudo-inverse of D (see bug 241)
|
||||
using std::abs;
|
||||
const typename Diagonal<const MatrixType>::RealReturnType vecD(vectorD());
|
||||
// In some previous versions, tolerance was set to the max of 1/highest and the maximal diagonal entry * epsilon
|
||||
// as motivated by LAPACK's xGELSS:
|
||||
// RealScalar tolerance = numext::maxi(vecD.array().abs().maxCoeff() * NumTraits<RealScalar>::epsilon(),RealScalar(1) / NumTraits<RealScalar>::highest());
|
||||
// However, LDLT is not rank revealing, and so adjusting the tolerance wrt to the highest
|
||||
// diagonal element is not well justified and leads to numerical issues in some cases.
|
||||
// Moreover, Lapack's xSYTRS routines use 0 for the tolerance.
|
||||
RealScalar tolerance = RealScalar(1) / NumTraits<RealScalar>::highest();
|
||||
|
||||
for (Index i = 0; i < vecD.size(); ++i)
|
||||
{
|
||||
if(abs(vecD(i)) > tolerance)
|
||||
dst.row(i) /= vecD(i);
|
||||
else
|
||||
dst.row(i).setZero();
|
||||
}
|
||||
|
||||
// dst = L^-T (D^-1 L^-1 P b)
|
||||
matrixU().solveInPlace(dst);
|
||||
|
||||
// dst = P^-1 (L^-T D^-1 L^-1 P b) = A^-1 b
|
||||
dst = m_transpositions.transpose() * dst;
|
||||
}
|
||||
#endif
|
||||
|
||||
/** \internal use x = ldlt_object.solve(x);
|
||||
*
|
||||
* This is the \em in-place version of solve().
|
||||
*
|
||||
* \param bAndX represents both the right-hand side matrix b and result x.
|
||||
*
|
||||
* \returns true always! If you need to check for existence of solutions, use another decomposition like LU, QR, or SVD.
|
||||
*
|
||||
* This version avoids a copy when the right hand side matrix b is not
|
||||
* needed anymore.
|
||||
*
|
||||
* \sa LDLT::solve(), MatrixBase::ldlt()
|
||||
*/
|
||||
template<typename MatrixType,int _UpLo>
|
||||
template<typename Derived>
|
||||
bool LDLT<MatrixType,_UpLo>::solveInPlace(MatrixBase<Derived> &bAndX) const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
||||
eigen_assert(m_matrix.rows() == bAndX.rows());
|
||||
|
||||
bAndX = this->solve(bAndX);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/** \returns the matrix represented by the decomposition,
|
||||
* i.e., it returns the product: P^T L D L^* P.
|
||||
* This function is provided for debug purpose. */
|
||||
template<typename MatrixType, int _UpLo>
|
||||
MatrixType LDLT<MatrixType,_UpLo>::reconstructedMatrix() const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LDLT is not initialized.");
|
||||
const Index size = m_matrix.rows();
|
||||
MatrixType res(size,size);
|
||||
|
||||
// P
|
||||
res.setIdentity();
|
||||
res = transpositionsP() * res;
|
||||
// L^* P
|
||||
res = matrixU() * res;
|
||||
// D(L^*P)
|
||||
res = vectorD().real().asDiagonal() * res;
|
||||
// L(DL^*P)
|
||||
res = matrixL() * res;
|
||||
// P^T (LDL^*P)
|
||||
res = transpositionsP().transpose() * res;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/** \cholesky_module
|
||||
* \returns the Cholesky decomposition with full pivoting without square root of \c *this
|
||||
* \sa MatrixBase::ldlt()
|
||||
*/
|
||||
template<typename MatrixType, unsigned int UpLo>
|
||||
inline const LDLT<typename SelfAdjointView<MatrixType, UpLo>::PlainObject, UpLo>
|
||||
SelfAdjointView<MatrixType, UpLo>::ldlt() const
|
||||
{
|
||||
return LDLT<PlainObject,UpLo>(m_matrix);
|
||||
}
|
||||
|
||||
/** \cholesky_module
|
||||
* \returns the Cholesky decomposition with full pivoting without square root of \c *this
|
||||
* \sa SelfAdjointView::ldlt()
|
||||
*/
|
||||
template<typename Derived>
|
||||
inline const LDLT<typename MatrixBase<Derived>::PlainObject>
|
||||
MatrixBase<Derived>::ldlt() const
|
||||
{
|
||||
return LDLT<PlainObject>(derived());
|
||||
}
|
||||
|
||||
} // end namespace Eigen
|
||||
|
||||
#endif // EIGEN_LDLT_H
|
||||
@@ -1,534 +0,0 @@
|
||||
// This file is part of Eigen, a lightweight C++ template library
|
||||
// for linear algebra.
|
||||
//
|
||||
// Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla
|
||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#ifndef EIGEN_LLT_H
|
||||
#define EIGEN_LLT_H
|
||||
|
||||
namespace Eigen {
|
||||
|
||||
namespace internal{
|
||||
template<typename MatrixType, int UpLo> struct LLT_Traits;
|
||||
}
|
||||
|
||||
/** \ingroup Cholesky_Module
|
||||
*
|
||||
* \class LLT
|
||||
*
|
||||
* \brief Standard Cholesky decomposition (LL^T) of a matrix and associated features
|
||||
*
|
||||
* \tparam _MatrixType the type of the matrix of which we are computing the LL^T Cholesky decomposition
|
||||
* \tparam _UpLo the triangular part that will be used for the decompositon: Lower (default) or Upper.
|
||||
* The other triangular part won't be read.
|
||||
*
|
||||
* This class performs a LL^T Cholesky decomposition of a symmetric, positive definite
|
||||
* matrix A such that A = LL^* = U^*U, where L is lower triangular.
|
||||
*
|
||||
* While the Cholesky decomposition is particularly useful to solve selfadjoint problems like D^*D x = b,
|
||||
* for that purpose, we recommend the Cholesky decomposition without square root which is more stable
|
||||
* and even faster. Nevertheless, this standard Cholesky decomposition remains useful in many other
|
||||
* situations like generalised eigen problems with hermitian matrices.
|
||||
*
|
||||
* Remember that Cholesky decompositions are not rank-revealing. This LLT decomposition is only stable on positive definite matrices,
|
||||
* use LDLT instead for the semidefinite case. Also, do not use a Cholesky decomposition to determine whether a system of equations
|
||||
* has a solution.
|
||||
*
|
||||
* Example: \include LLT_example.cpp
|
||||
* Output: \verbinclude LLT_example.out
|
||||
*
|
||||
* This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
|
||||
*
|
||||
* \sa MatrixBase::llt(), SelfAdjointView::llt(), class LDLT
|
||||
*/
|
||||
/* HEY THIS DOX IS DISABLED BECAUSE THERE's A BUG EITHER HERE OR IN LDLT ABOUT THAT (OR BOTH)
|
||||
* Note that during the decomposition, only the upper triangular part of A is considered. Therefore,
|
||||
* the strict lower part does not have to store correct values.
|
||||
*/
|
||||
template<typename _MatrixType, int _UpLo> class LLT
|
||||
{
|
||||
public:
|
||||
typedef _MatrixType MatrixType;
|
||||
enum {
|
||||
RowsAtCompileTime = MatrixType::RowsAtCompileTime,
|
||||
ColsAtCompileTime = MatrixType::ColsAtCompileTime,
|
||||
MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
|
||||
};
|
||||
typedef typename MatrixType::Scalar Scalar;
|
||||
typedef typename NumTraits<typename MatrixType::Scalar>::Real RealScalar;
|
||||
typedef Eigen::Index Index; ///< \deprecated since Eigen 3.3
|
||||
typedef typename MatrixType::StorageIndex StorageIndex;
|
||||
|
||||
enum {
|
||||
PacketSize = internal::packet_traits<Scalar>::size,
|
||||
AlignmentMask = int(PacketSize)-1,
|
||||
UpLo = _UpLo
|
||||
};
|
||||
|
||||
typedef internal::LLT_Traits<MatrixType,UpLo> Traits;
|
||||
|
||||
/**
|
||||
* \brief Default Constructor.
|
||||
*
|
||||
* The default constructor is useful in cases in which the user intends to
|
||||
* perform decompositions via LLT::compute(const MatrixType&).
|
||||
*/
|
||||
LLT() : m_matrix(), m_isInitialized(false) {}
|
||||
|
||||
/** \brief Default Constructor with memory preallocation
|
||||
*
|
||||
* Like the default constructor but with preallocation of the internal data
|
||||
* according to the specified problem \a size.
|
||||
* \sa LLT()
|
||||
*/
|
||||
explicit LLT(Index size) : m_matrix(size, size),
|
||||
m_isInitialized(false) {}
|
||||
|
||||
template<typename InputType>
|
||||
explicit LLT(const EigenBase<InputType>& matrix)
|
||||
: m_matrix(matrix.rows(), matrix.cols()),
|
||||
m_isInitialized(false)
|
||||
{
|
||||
compute(matrix.derived());
|
||||
}
|
||||
|
||||
/** \brief Constructs a LDLT factorization from a given matrix
|
||||
*
|
||||
* This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when
|
||||
* \c MatrixType is a Eigen::Ref.
|
||||
*
|
||||
* \sa LLT(const EigenBase&)
|
||||
*/
|
||||
template<typename InputType>
|
||||
explicit LLT(EigenBase<InputType>& matrix)
|
||||
: m_matrix(matrix.derived()),
|
||||
m_isInitialized(false)
|
||||
{
|
||||
compute(matrix.derived());
|
||||
}
|
||||
|
||||
/** \returns a view of the upper triangular matrix U */
|
||||
inline typename Traits::MatrixU matrixU() const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
||||
return Traits::getU(m_matrix);
|
||||
}
|
||||
|
||||
/** \returns a view of the lower triangular matrix L */
|
||||
inline typename Traits::MatrixL matrixL() const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
||||
return Traits::getL(m_matrix);
|
||||
}
|
||||
|
||||
/** \returns the solution x of \f$ A x = b \f$ using the current decomposition of A.
|
||||
*
|
||||
* Since this LLT class assumes anyway that the matrix A is invertible, the solution
|
||||
* theoretically exists and is unique regardless of b.
|
||||
*
|
||||
* Example: \include LLT_solve.cpp
|
||||
* Output: \verbinclude LLT_solve.out
|
||||
*
|
||||
* \sa solveInPlace(), MatrixBase::llt(), SelfAdjointView::llt()
|
||||
*/
|
||||
template<typename Rhs>
|
||||
inline const Solve<LLT, Rhs>
|
||||
solve(const MatrixBase<Rhs>& b) const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
||||
eigen_assert(m_matrix.rows()==b.rows()
|
||||
&& "LLT::solve(): invalid number of rows of the right hand side matrix b");
|
||||
return Solve<LLT, Rhs>(*this, b.derived());
|
||||
}
|
||||
|
||||
template<typename Derived>
|
||||
void solveInPlace(MatrixBase<Derived> &bAndX) const;
|
||||
|
||||
template<typename InputType>
|
||||
LLT& compute(const EigenBase<InputType>& matrix);
|
||||
|
||||
/** \returns an estimate of the reciprocal condition number of the matrix of
|
||||
* which \c *this is the Cholesky decomposition.
|
||||
*/
|
||||
RealScalar rcond() const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
||||
eigen_assert(m_info == Success && "LLT failed because matrix appears to be negative");
|
||||
return internal::rcond_estimate_helper(m_l1_norm, *this);
|
||||
}
|
||||
|
||||
/** \returns the LLT decomposition matrix
|
||||
*
|
||||
* TODO: document the storage layout
|
||||
*/
|
||||
inline const MatrixType& matrixLLT() const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
||||
return m_matrix;
|
||||
}
|
||||
|
||||
MatrixType reconstructedMatrix() const;
|
||||
|
||||
|
||||
/** \brief Reports whether previous computation was successful.
|
||||
*
|
||||
* \returns \c Success if computation was succesful,
|
||||
* \c NumericalIssue if the matrix.appears to be negative.
|
||||
*/
|
||||
ComputationInfo info() const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
||||
return m_info;
|
||||
}
|
||||
|
||||
/** \returns the adjoint of \c *this, that is, a const reference to the decomposition itself as the underlying matrix is self-adjoint.
|
||||
*
|
||||
* This method is provided for compatibility with other matrix decompositions, thus enabling generic code such as:
|
||||
* \code x = decomposition.adjoint().solve(b) \endcode
|
||||
*/
|
||||
const LLT& adjoint() const { return *this; };
|
||||
|
||||
inline Index rows() const { return m_matrix.rows(); }
|
||||
inline Index cols() const { return m_matrix.cols(); }
|
||||
|
||||
template<typename VectorType>
|
||||
LLT rankUpdate(const VectorType& vec, const RealScalar& sigma = 1);
|
||||
|
||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
||||
template<typename RhsType, typename DstType>
|
||||
EIGEN_DEVICE_FUNC
|
||||
void _solve_impl(const RhsType &rhs, DstType &dst) const;
|
||||
#endif
|
||||
|
||||
protected:
|
||||
|
||||
static void check_template_parameters()
|
||||
{
|
||||
EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
|
||||
}
|
||||
|
||||
/** \internal
|
||||
* Used to compute and store L
|
||||
* The strict upper part is not used and even not initialized.
|
||||
*/
|
||||
MatrixType m_matrix;
|
||||
RealScalar m_l1_norm;
|
||||
bool m_isInitialized;
|
||||
ComputationInfo m_info;
|
||||
};
|
||||
|
||||
namespace internal {
|
||||
|
||||
template<typename Scalar, int UpLo> struct llt_inplace;
|
||||
|
||||
template<typename MatrixType, typename VectorType>
|
||||
static Index llt_rank_update_lower(MatrixType& mat, const VectorType& vec, const typename MatrixType::RealScalar& sigma)
|
||||
{
|
||||
using std::sqrt;
|
||||
typedef typename MatrixType::Scalar Scalar;
|
||||
typedef typename MatrixType::RealScalar RealScalar;
|
||||
typedef typename MatrixType::ColXpr ColXpr;
|
||||
typedef typename internal::remove_all<ColXpr>::type ColXprCleaned;
|
||||
typedef typename ColXprCleaned::SegmentReturnType ColXprSegment;
|
||||
typedef Matrix<Scalar,Dynamic,1> TempVectorType;
|
||||
typedef typename TempVectorType::SegmentReturnType TempVecSegment;
|
||||
|
||||
Index n = mat.cols();
|
||||
eigen_assert(mat.rows()==n && vec.size()==n);
|
||||
|
||||
TempVectorType temp;
|
||||
|
||||
if(sigma>0)
|
||||
{
|
||||
// This version is based on Givens rotations.
|
||||
// It is faster than the other one below, but only works for updates,
|
||||
// i.e., for sigma > 0
|
||||
temp = sqrt(sigma) * vec;
|
||||
|
||||
for(Index i=0; i<n; ++i)
|
||||
{
|
||||
JacobiRotation<Scalar> g;
|
||||
g.makeGivens(mat(i,i), -temp(i), &mat(i,i));
|
||||
|
||||
Index rs = n-i-1;
|
||||
if(rs>0)
|
||||
{
|
||||
ColXprSegment x(mat.col(i).tail(rs));
|
||||
TempVecSegment y(temp.tail(rs));
|
||||
apply_rotation_in_the_plane(x, y, g);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
temp = vec;
|
||||
RealScalar beta = 1;
|
||||
for(Index j=0; j<n; ++j)
|
||||
{
|
||||
RealScalar Ljj = numext::real(mat.coeff(j,j));
|
||||
RealScalar dj = numext::abs2(Ljj);
|
||||
Scalar wj = temp.coeff(j);
|
||||
RealScalar swj2 = sigma*numext::abs2(wj);
|
||||
RealScalar gamma = dj*beta + swj2;
|
||||
|
||||
RealScalar x = dj + swj2/beta;
|
||||
if (x<=RealScalar(0))
|
||||
return j;
|
||||
RealScalar nLjj = sqrt(x);
|
||||
mat.coeffRef(j,j) = nLjj;
|
||||
beta += swj2/dj;
|
||||
|
||||
// Update the terms of L
|
||||
Index rs = n-j-1;
|
||||
if(rs)
|
||||
{
|
||||
temp.tail(rs) -= (wj/Ljj) * mat.col(j).tail(rs);
|
||||
if(gamma != 0)
|
||||
mat.col(j).tail(rs) = (nLjj/Ljj) * mat.col(j).tail(rs) + (nLjj * sigma*numext::conj(wj)/gamma)*temp.tail(rs);
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
template<typename Scalar> struct llt_inplace<Scalar, Lower>
|
||||
{
|
||||
typedef typename NumTraits<Scalar>::Real RealScalar;
|
||||
template<typename MatrixType>
|
||||
static Index unblocked(MatrixType& mat)
|
||||
{
|
||||
using std::sqrt;
|
||||
|
||||
eigen_assert(mat.rows()==mat.cols());
|
||||
const Index size = mat.rows();
|
||||
for(Index k = 0; k < size; ++k)
|
||||
{
|
||||
Index rs = size-k-1; // remaining size
|
||||
|
||||
Block<MatrixType,Dynamic,1> A21(mat,k+1,k,rs,1);
|
||||
Block<MatrixType,1,Dynamic> A10(mat,k,0,1,k);
|
||||
Block<MatrixType,Dynamic,Dynamic> A20(mat,k+1,0,rs,k);
|
||||
|
||||
RealScalar x = numext::real(mat.coeff(k,k));
|
||||
if (k>0) x -= A10.squaredNorm();
|
||||
if (x<=RealScalar(0))
|
||||
return k;
|
||||
mat.coeffRef(k,k) = x = sqrt(x);
|
||||
if (k>0 && rs>0) A21.noalias() -= A20 * A10.adjoint();
|
||||
if (rs>0) A21 /= x;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
template<typename MatrixType>
|
||||
static Index blocked(MatrixType& m)
|
||||
{
|
||||
eigen_assert(m.rows()==m.cols());
|
||||
Index size = m.rows();
|
||||
if(size<32)
|
||||
return unblocked(m);
|
||||
|
||||
Index blockSize = size/8;
|
||||
blockSize = (blockSize/16)*16;
|
||||
blockSize = (std::min)((std::max)(blockSize,Index(8)), Index(128));
|
||||
|
||||
for (Index k=0; k<size; k+=blockSize)
|
||||
{
|
||||
// partition the matrix:
|
||||
// A00 | - | -
|
||||
// lu = A10 | A11 | -
|
||||
// A20 | A21 | A22
|
||||
Index bs = (std::min)(blockSize, size-k);
|
||||
Index rs = size - k - bs;
|
||||
Block<MatrixType,Dynamic,Dynamic> A11(m,k, k, bs,bs);
|
||||
Block<MatrixType,Dynamic,Dynamic> A21(m,k+bs,k, rs,bs);
|
||||
Block<MatrixType,Dynamic,Dynamic> A22(m,k+bs,k+bs,rs,rs);
|
||||
|
||||
Index ret;
|
||||
if((ret=unblocked(A11))>=0) return k+ret;
|
||||
if(rs>0) A11.adjoint().template triangularView<Upper>().template solveInPlace<OnTheRight>(A21);
|
||||
if(rs>0) A22.template selfadjointView<Lower>().rankUpdate(A21,typename NumTraits<RealScalar>::Literal(-1)); // bottleneck
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
template<typename MatrixType, typename VectorType>
|
||||
static Index rankUpdate(MatrixType& mat, const VectorType& vec, const RealScalar& sigma)
|
||||
{
|
||||
return Eigen::internal::llt_rank_update_lower(mat, vec, sigma);
|
||||
}
|
||||
};
|
||||
|
||||
template<typename Scalar> struct llt_inplace<Scalar, Upper>
|
||||
{
|
||||
typedef typename NumTraits<Scalar>::Real RealScalar;
|
||||
|
||||
template<typename MatrixType>
|
||||
static EIGEN_STRONG_INLINE Index unblocked(MatrixType& mat)
|
||||
{
|
||||
Transpose<MatrixType> matt(mat);
|
||||
return llt_inplace<Scalar, Lower>::unblocked(matt);
|
||||
}
|
||||
template<typename MatrixType>
|
||||
static EIGEN_STRONG_INLINE Index blocked(MatrixType& mat)
|
||||
{
|
||||
Transpose<MatrixType> matt(mat);
|
||||
return llt_inplace<Scalar, Lower>::blocked(matt);
|
||||
}
|
||||
template<typename MatrixType, typename VectorType>
|
||||
static Index rankUpdate(MatrixType& mat, const VectorType& vec, const RealScalar& sigma)
|
||||
{
|
||||
Transpose<MatrixType> matt(mat);
|
||||
return llt_inplace<Scalar, Lower>::rankUpdate(matt, vec.conjugate(), sigma);
|
||||
}
|
||||
};
|
||||
|
||||
template<typename MatrixType> struct LLT_Traits<MatrixType,Lower>
|
||||
{
|
||||
typedef const TriangularView<const MatrixType, Lower> MatrixL;
|
||||
typedef const TriangularView<const typename MatrixType::AdjointReturnType, Upper> MatrixU;
|
||||
static inline MatrixL getL(const MatrixType& m) { return MatrixL(m); }
|
||||
static inline MatrixU getU(const MatrixType& m) { return MatrixU(m.adjoint()); }
|
||||
static bool inplace_decomposition(MatrixType& m)
|
||||
{ return llt_inplace<typename MatrixType::Scalar, Lower>::blocked(m)==-1; }
|
||||
};
|
||||
|
||||
template<typename MatrixType> struct LLT_Traits<MatrixType,Upper>
|
||||
{
|
||||
typedef const TriangularView<const typename MatrixType::AdjointReturnType, Lower> MatrixL;
|
||||
typedef const TriangularView<const MatrixType, Upper> MatrixU;
|
||||
static inline MatrixL getL(const MatrixType& m) { return MatrixL(m.adjoint()); }
|
||||
static inline MatrixU getU(const MatrixType& m) { return MatrixU(m); }
|
||||
static bool inplace_decomposition(MatrixType& m)
|
||||
{ return llt_inplace<typename MatrixType::Scalar, Upper>::blocked(m)==-1; }
|
||||
};
|
||||
|
||||
} // end namespace internal
|
||||
|
||||
/** Computes / recomputes the Cholesky decomposition A = LL^* = U^*U of \a matrix
|
||||
*
|
||||
* \returns a reference to *this
|
||||
*
|
||||
* Example: \include TutorialLinAlgComputeTwice.cpp
|
||||
* Output: \verbinclude TutorialLinAlgComputeTwice.out
|
||||
*/
|
||||
template<typename MatrixType, int _UpLo>
|
||||
template<typename InputType>
|
||||
LLT<MatrixType,_UpLo>& LLT<MatrixType,_UpLo>::compute(const EigenBase<InputType>& a)
|
||||
{
|
||||
check_template_parameters();
|
||||
|
||||
eigen_assert(a.rows()==a.cols());
|
||||
const Index size = a.rows();
|
||||
m_matrix.resize(size, size);
|
||||
m_matrix = a.derived();
|
||||
|
||||
// Compute matrix L1 norm = max abs column sum.
|
||||
m_l1_norm = RealScalar(0);
|
||||
// TODO move this code to SelfAdjointView
|
||||
for (Index col = 0; col < size; ++col) {
|
||||
RealScalar abs_col_sum;
|
||||
if (_UpLo == Lower)
|
||||
abs_col_sum = m_matrix.col(col).tail(size - col).template lpNorm<1>() + m_matrix.row(col).head(col).template lpNorm<1>();
|
||||
else
|
||||
abs_col_sum = m_matrix.col(col).head(col).template lpNorm<1>() + m_matrix.row(col).tail(size - col).template lpNorm<1>();
|
||||
if (abs_col_sum > m_l1_norm)
|
||||
m_l1_norm = abs_col_sum;
|
||||
}
|
||||
|
||||
m_isInitialized = true;
|
||||
bool ok = Traits::inplace_decomposition(m_matrix);
|
||||
m_info = ok ? Success : NumericalIssue;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
/** Performs a rank one update (or dowdate) of the current decomposition.
|
||||
* If A = LL^* before the rank one update,
|
||||
* then after it we have LL^* = A + sigma * v v^* where \a v must be a vector
|
||||
* of same dimension.
|
||||
*/
|
||||
template<typename _MatrixType, int _UpLo>
|
||||
template<typename VectorType>
|
||||
LLT<_MatrixType,_UpLo> LLT<_MatrixType,_UpLo>::rankUpdate(const VectorType& v, const RealScalar& sigma)
|
||||
{
|
||||
EIGEN_STATIC_ASSERT_VECTOR_ONLY(VectorType);
|
||||
eigen_assert(v.size()==m_matrix.cols());
|
||||
eigen_assert(m_isInitialized);
|
||||
if(internal::llt_inplace<typename MatrixType::Scalar, UpLo>::rankUpdate(m_matrix,v,sigma)>=0)
|
||||
m_info = NumericalIssue;
|
||||
else
|
||||
m_info = Success;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
||||
template<typename _MatrixType,int _UpLo>
|
||||
template<typename RhsType, typename DstType>
|
||||
void LLT<_MatrixType,_UpLo>::_solve_impl(const RhsType &rhs, DstType &dst) const
|
||||
{
|
||||
dst = rhs;
|
||||
solveInPlace(dst);
|
||||
}
|
||||
#endif
|
||||
|
||||
/** \internal use x = llt_object.solve(x);
|
||||
*
|
||||
* This is the \em in-place version of solve().
|
||||
*
|
||||
* \param bAndX represents both the right-hand side matrix b and result x.
|
||||
*
|
||||
* This version avoids a copy when the right hand side matrix b is not needed anymore.
|
||||
*
|
||||
* \sa LLT::solve(), MatrixBase::llt()
|
||||
*/
|
||||
template<typename MatrixType, int _UpLo>
|
||||
template<typename Derived>
|
||||
void LLT<MatrixType,_UpLo>::solveInPlace(MatrixBase<Derived> &bAndX) const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
||||
eigen_assert(m_matrix.rows()==bAndX.rows());
|
||||
matrixL().solveInPlace(bAndX);
|
||||
matrixU().solveInPlace(bAndX);
|
||||
}
|
||||
|
||||
/** \returns the matrix represented by the decomposition,
|
||||
* i.e., it returns the product: L L^*.
|
||||
* This function is provided for debug purpose. */
|
||||
template<typename MatrixType, int _UpLo>
|
||||
MatrixType LLT<MatrixType,_UpLo>::reconstructedMatrix() const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
||||
return matrixL() * matrixL().adjoint().toDenseMatrix();
|
||||
}
|
||||
|
||||
/** \cholesky_module
|
||||
* \returns the LLT decomposition of \c *this
|
||||
* \sa SelfAdjointView::llt()
|
||||
*/
|
||||
template<typename Derived>
|
||||
inline const LLT<typename MatrixBase<Derived>::PlainObject>
|
||||
MatrixBase<Derived>::llt() const
|
||||
{
|
||||
return LLT<PlainObject>(derived());
|
||||
}
|
||||
|
||||
/** \cholesky_module
|
||||
* \returns the LLT decomposition of \c *this
|
||||
* \sa SelfAdjointView::llt()
|
||||
*/
|
||||
template<typename MatrixType, unsigned int UpLo>
|
||||
inline const LLT<typename SelfAdjointView<MatrixType, UpLo>::PlainObject, UpLo>
|
||||
SelfAdjointView<MatrixType, UpLo>::llt() const
|
||||
{
|
||||
return LLT<PlainObject,UpLo>(m_matrix);
|
||||
}
|
||||
|
||||
} // end namespace Eigen
|
||||
|
||||
#endif // EIGEN_LLT_H
|
||||
@@ -1,99 +0,0 @@
|
||||
/*
|
||||
Copyright (c) 2011, Intel Corporation. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
* Neither the name of Intel Corporation nor the names of its contributors may
|
||||
be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
********************************************************************************
|
||||
* Content : Eigen bindings to LAPACKe
|
||||
* LLt decomposition based on LAPACKE_?potrf function.
|
||||
********************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef EIGEN_LLT_LAPACKE_H
|
||||
#define EIGEN_LLT_LAPACKE_H
|
||||
|
||||
namespace Eigen {
|
||||
|
||||
namespace internal {
|
||||
|
||||
template<typename Scalar> struct lapacke_llt;
|
||||
|
||||
#define EIGEN_LAPACKE_LLT(EIGTYPE, BLASTYPE, LAPACKE_PREFIX) \
|
||||
template<> struct lapacke_llt<EIGTYPE> \
|
||||
{ \
|
||||
template<typename MatrixType> \
|
||||
static inline Index potrf(MatrixType& m, char uplo) \
|
||||
{ \
|
||||
lapack_int matrix_order; \
|
||||
lapack_int size, lda, info, StorageOrder; \
|
||||
EIGTYPE* a; \
|
||||
eigen_assert(m.rows()==m.cols()); \
|
||||
/* Set up parameters for ?potrf */ \
|
||||
size = convert_index<lapack_int>(m.rows()); \
|
||||
StorageOrder = MatrixType::Flags&RowMajorBit?RowMajor:ColMajor; \
|
||||
matrix_order = StorageOrder==RowMajor ? LAPACK_ROW_MAJOR : LAPACK_COL_MAJOR; \
|
||||
a = &(m.coeffRef(0,0)); \
|
||||
lda = convert_index<lapack_int>(m.outerStride()); \
|
||||
\
|
||||
info = LAPACKE_##LAPACKE_PREFIX##potrf( matrix_order, uplo, size, (BLASTYPE*)a, lda ); \
|
||||
info = (info==0) ? -1 : info>0 ? info-1 : size; \
|
||||
return info; \
|
||||
} \
|
||||
}; \
|
||||
template<> struct llt_inplace<EIGTYPE, Lower> \
|
||||
{ \
|
||||
template<typename MatrixType> \
|
||||
static Index blocked(MatrixType& m) \
|
||||
{ \
|
||||
return lapacke_llt<EIGTYPE>::potrf(m, 'L'); \
|
||||
} \
|
||||
template<typename MatrixType, typename VectorType> \
|
||||
static Index rankUpdate(MatrixType& mat, const VectorType& vec, const typename MatrixType::RealScalar& sigma) \
|
||||
{ return Eigen::internal::llt_rank_update_lower(mat, vec, sigma); } \
|
||||
}; \
|
||||
template<> struct llt_inplace<EIGTYPE, Upper> \
|
||||
{ \
|
||||
template<typename MatrixType> \
|
||||
static Index blocked(MatrixType& m) \
|
||||
{ \
|
||||
return lapacke_llt<EIGTYPE>::potrf(m, 'U'); \
|
||||
} \
|
||||
template<typename MatrixType, typename VectorType> \
|
||||
static Index rankUpdate(MatrixType& mat, const VectorType& vec, const typename MatrixType::RealScalar& sigma) \
|
||||
{ \
|
||||
Transpose<MatrixType> matt(mat); \
|
||||
return llt_inplace<EIGTYPE, Lower>::rankUpdate(matt, vec.conjugate(), sigma); \
|
||||
} \
|
||||
};
|
||||
|
||||
EIGEN_LAPACKE_LLT(double, double, d)
|
||||
EIGEN_LAPACKE_LLT(float, float, s)
|
||||
EIGEN_LAPACKE_LLT(dcomplex, lapack_complex_double, z)
|
||||
EIGEN_LAPACKE_LLT(scomplex, lapack_complex_float, c)
|
||||
|
||||
} // end namespace internal
|
||||
|
||||
} // end namespace Eigen
|
||||
|
||||
#endif // EIGEN_LLT_LAPACKE_H
|
||||
@@ -1,639 +0,0 @@
|
||||
// This file is part of Eigen, a lightweight C++ template library
|
||||
// for linear algebra.
|
||||
//
|
||||
// Copyright (C) 2008-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla
|
||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#ifndef EIGEN_CHOLMODSUPPORT_H
|
||||
#define EIGEN_CHOLMODSUPPORT_H
|
||||
|
||||
namespace Eigen {
|
||||
|
||||
namespace internal {
|
||||
|
||||
template<typename Scalar> struct cholmod_configure_matrix;
|
||||
|
||||
template<> struct cholmod_configure_matrix<double> {
|
||||
template<typename CholmodType>
|
||||
static void run(CholmodType& mat) {
|
||||
mat.xtype = CHOLMOD_REAL;
|
||||
mat.dtype = CHOLMOD_DOUBLE;
|
||||
}
|
||||
};
|
||||
|
||||
template<> struct cholmod_configure_matrix<std::complex<double> > {
|
||||
template<typename CholmodType>
|
||||
static void run(CholmodType& mat) {
|
||||
mat.xtype = CHOLMOD_COMPLEX;
|
||||
mat.dtype = CHOLMOD_DOUBLE;
|
||||
}
|
||||
};
|
||||
|
||||
// Other scalar types are not yet suppotred by Cholmod
|
||||
// template<> struct cholmod_configure_matrix<float> {
|
||||
// template<typename CholmodType>
|
||||
// static void run(CholmodType& mat) {
|
||||
// mat.xtype = CHOLMOD_REAL;
|
||||
// mat.dtype = CHOLMOD_SINGLE;
|
||||
// }
|
||||
// };
|
||||
//
|
||||
// template<> struct cholmod_configure_matrix<std::complex<float> > {
|
||||
// template<typename CholmodType>
|
||||
// static void run(CholmodType& mat) {
|
||||
// mat.xtype = CHOLMOD_COMPLEX;
|
||||
// mat.dtype = CHOLMOD_SINGLE;
|
||||
// }
|
||||
// };
|
||||
|
||||
} // namespace internal
|
||||
|
||||
/** Wraps the Eigen sparse matrix \a mat into a Cholmod sparse matrix object.
|
||||
* Note that the data are shared.
|
||||
*/
|
||||
template<typename _Scalar, int _Options, typename _StorageIndex>
|
||||
cholmod_sparse viewAsCholmod(Ref<SparseMatrix<_Scalar,_Options,_StorageIndex> > mat)
|
||||
{
|
||||
cholmod_sparse res;
|
||||
res.nzmax = mat.nonZeros();
|
||||
res.nrow = mat.rows();
|
||||
res.ncol = mat.cols();
|
||||
res.p = mat.outerIndexPtr();
|
||||
res.i = mat.innerIndexPtr();
|
||||
res.x = mat.valuePtr();
|
||||
res.z = 0;
|
||||
res.sorted = 1;
|
||||
if(mat.isCompressed())
|
||||
{
|
||||
res.packed = 1;
|
||||
res.nz = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
res.packed = 0;
|
||||
res.nz = mat.innerNonZeroPtr();
|
||||
}
|
||||
|
||||
res.dtype = 0;
|
||||
res.stype = -1;
|
||||
|
||||
if (internal::is_same<_StorageIndex,int>::value)
|
||||
{
|
||||
res.itype = CHOLMOD_INT;
|
||||
}
|
||||
else if (internal::is_same<_StorageIndex,long>::value)
|
||||
{
|
||||
res.itype = CHOLMOD_LONG;
|
||||
}
|
||||
else
|
||||
{
|
||||
eigen_assert(false && "Index type not supported yet");
|
||||
}
|
||||
|
||||
// setup res.xtype
|
||||
internal::cholmod_configure_matrix<_Scalar>::run(res);
|
||||
|
||||
res.stype = 0;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
template<typename _Scalar, int _Options, typename _Index>
|
||||
const cholmod_sparse viewAsCholmod(const SparseMatrix<_Scalar,_Options,_Index>& mat)
|
||||
{
|
||||
cholmod_sparse res = viewAsCholmod(Ref<SparseMatrix<_Scalar,_Options,_Index> >(mat.const_cast_derived()));
|
||||
return res;
|
||||
}
|
||||
|
||||
template<typename _Scalar, int _Options, typename _Index>
|
||||
const cholmod_sparse viewAsCholmod(const SparseVector<_Scalar,_Options,_Index>& mat)
|
||||
{
|
||||
cholmod_sparse res = viewAsCholmod(Ref<SparseMatrix<_Scalar,_Options,_Index> >(mat.const_cast_derived()));
|
||||
return res;
|
||||
}
|
||||
|
||||
/** Returns a view of the Eigen sparse matrix \a mat as Cholmod sparse matrix.
|
||||
* The data are not copied but shared. */
|
||||
template<typename _Scalar, int _Options, typename _Index, unsigned int UpLo>
|
||||
cholmod_sparse viewAsCholmod(const SparseSelfAdjointView<const SparseMatrix<_Scalar,_Options,_Index>, UpLo>& mat)
|
||||
{
|
||||
cholmod_sparse res = viewAsCholmod(Ref<SparseMatrix<_Scalar,_Options,_Index> >(mat.matrix().const_cast_derived()));
|
||||
|
||||
if(UpLo==Upper) res.stype = 1;
|
||||
if(UpLo==Lower) res.stype = -1;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/** Returns a view of the Eigen \b dense matrix \a mat as Cholmod dense matrix.
|
||||
* The data are not copied but shared. */
|
||||
template<typename Derived>
|
||||
cholmod_dense viewAsCholmod(MatrixBase<Derived>& mat)
|
||||
{
|
||||
EIGEN_STATIC_ASSERT((internal::traits<Derived>::Flags&RowMajorBit)==0,THIS_METHOD_IS_ONLY_FOR_COLUMN_MAJOR_MATRICES);
|
||||
typedef typename Derived::Scalar Scalar;
|
||||
|
||||
cholmod_dense res;
|
||||
res.nrow = mat.rows();
|
||||
res.ncol = mat.cols();
|
||||
res.nzmax = res.nrow * res.ncol;
|
||||
res.d = Derived::IsVectorAtCompileTime ? mat.derived().size() : mat.derived().outerStride();
|
||||
res.x = (void*)(mat.derived().data());
|
||||
res.z = 0;
|
||||
|
||||
internal::cholmod_configure_matrix<Scalar>::run(res);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/** Returns a view of the Cholmod sparse matrix \a cm as an Eigen sparse matrix.
|
||||
* The data are not copied but shared. */
|
||||
template<typename Scalar, int Flags, typename StorageIndex>
|
||||
MappedSparseMatrix<Scalar,Flags,StorageIndex> viewAsEigen(cholmod_sparse& cm)
|
||||
{
|
||||
return MappedSparseMatrix<Scalar,Flags,StorageIndex>
|
||||
(cm.nrow, cm.ncol, static_cast<StorageIndex*>(cm.p)[cm.ncol],
|
||||
static_cast<StorageIndex*>(cm.p), static_cast<StorageIndex*>(cm.i),static_cast<Scalar*>(cm.x) );
|
||||
}
|
||||
|
||||
enum CholmodMode {
|
||||
CholmodAuto, CholmodSimplicialLLt, CholmodSupernodalLLt, CholmodLDLt
|
||||
};
|
||||
|
||||
|
||||
/** \ingroup CholmodSupport_Module
|
||||
* \class CholmodBase
|
||||
* \brief The base class for the direct Cholesky factorization of Cholmod
|
||||
* \sa class CholmodSupernodalLLT, class CholmodSimplicialLDLT, class CholmodSimplicialLLT
|
||||
*/
|
||||
template<typename _MatrixType, int _UpLo, typename Derived>
|
||||
class CholmodBase : public SparseSolverBase<Derived>
|
||||
{
|
||||
protected:
|
||||
typedef SparseSolverBase<Derived> Base;
|
||||
using Base::derived;
|
||||
using Base::m_isInitialized;
|
||||
public:
|
||||
typedef _MatrixType MatrixType;
|
||||
enum { UpLo = _UpLo };
|
||||
typedef typename MatrixType::Scalar Scalar;
|
||||
typedef typename MatrixType::RealScalar RealScalar;
|
||||
typedef MatrixType CholMatrixType;
|
||||
typedef typename MatrixType::StorageIndex StorageIndex;
|
||||
enum {
|
||||
ColsAtCompileTime = MatrixType::ColsAtCompileTime,
|
||||
MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
CholmodBase()
|
||||
: m_cholmodFactor(0), m_info(Success), m_factorizationIsOk(false), m_analysisIsOk(false)
|
||||
{
|
||||
EIGEN_STATIC_ASSERT((internal::is_same<double,RealScalar>::value), CHOLMOD_SUPPORTS_DOUBLE_PRECISION_ONLY);
|
||||
m_shiftOffset[0] = m_shiftOffset[1] = 0.0;
|
||||
cholmod_start(&m_cholmod);
|
||||
}
|
||||
|
||||
explicit CholmodBase(const MatrixType& matrix)
|
||||
: m_cholmodFactor(0), m_info(Success), m_factorizationIsOk(false), m_analysisIsOk(false)
|
||||
{
|
||||
EIGEN_STATIC_ASSERT((internal::is_same<double,RealScalar>::value), CHOLMOD_SUPPORTS_DOUBLE_PRECISION_ONLY);
|
||||
m_shiftOffset[0] = m_shiftOffset[1] = 0.0;
|
||||
cholmod_start(&m_cholmod);
|
||||
compute(matrix);
|
||||
}
|
||||
|
||||
~CholmodBase()
|
||||
{
|
||||
if(m_cholmodFactor)
|
||||
cholmod_free_factor(&m_cholmodFactor, &m_cholmod);
|
||||
cholmod_finish(&m_cholmod);
|
||||
}
|
||||
|
||||
inline StorageIndex cols() const { return internal::convert_index<StorageIndex, Index>(m_cholmodFactor->n); }
|
||||
inline StorageIndex rows() const { return internal::convert_index<StorageIndex, Index>(m_cholmodFactor->n); }
|
||||
|
||||
/** \brief Reports whether previous computation was successful.
|
||||
*
|
||||
* \returns \c Success if computation was succesful,
|
||||
* \c NumericalIssue if the matrix.appears to be negative.
|
||||
*/
|
||||
ComputationInfo info() const
|
||||
{
|
||||
eigen_assert(m_isInitialized && "Decomposition is not initialized.");
|
||||
return m_info;
|
||||
}
|
||||
|
||||
/** Computes the sparse Cholesky decomposition of \a matrix */
|
||||
Derived& compute(const MatrixType& matrix)
|
||||
{
|
||||
analyzePattern(matrix);
|
||||
factorize(matrix);
|
||||
return derived();
|
||||
}
|
||||
|
||||
/** Performs a symbolic decomposition on the sparsity pattern of \a matrix.
|
||||
*
|
||||
* This function is particularly useful when solving for several problems having the same structure.
|
||||
*
|
||||
* \sa factorize()
|
||||
*/
|
||||
void analyzePattern(const MatrixType& matrix)
|
||||
{
|
||||
if(m_cholmodFactor)
|
||||
{
|
||||
cholmod_free_factor(&m_cholmodFactor, &m_cholmod);
|
||||
m_cholmodFactor = 0;
|
||||
}
|
||||
cholmod_sparse A = viewAsCholmod(matrix.template selfadjointView<UpLo>());
|
||||
m_cholmodFactor = cholmod_analyze(&A, &m_cholmod);
|
||||
|
||||
this->m_isInitialized = true;
|
||||
this->m_info = Success;
|
||||
m_analysisIsOk = true;
|
||||
m_factorizationIsOk = false;
|
||||
}
|
||||
|
||||
/** Performs a numeric decomposition of \a matrix
|
||||
*
|
||||
* The given matrix must have the same sparsity pattern as the matrix on which the symbolic decomposition has been performed.
|
||||
*
|
||||
* \sa analyzePattern()
|
||||
*/
|
||||
void factorize(const MatrixType& matrix)
|
||||
{
|
||||
eigen_assert(m_analysisIsOk && "You must first call analyzePattern()");
|
||||
cholmod_sparse A = viewAsCholmod(matrix.template selfadjointView<UpLo>());
|
||||
cholmod_factorize_p(&A, m_shiftOffset, 0, 0, m_cholmodFactor, &m_cholmod);
|
||||
|
||||
// If the factorization failed, minor is the column at which it did. On success minor == n.
|
||||
this->m_info = (m_cholmodFactor->minor == m_cholmodFactor->n ? Success : NumericalIssue);
|
||||
m_factorizationIsOk = true;
|
||||
}
|
||||
|
||||
/** Returns a reference to the Cholmod's configuration structure to get a full control over the performed operations.
|
||||
* See the Cholmod user guide for details. */
|
||||
cholmod_common& cholmod() { return m_cholmod; }
|
||||
|
||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
||||
/** \internal */
|
||||
template<typename Rhs,typename Dest>
|
||||
void _solve_impl(const MatrixBase<Rhs> &b, MatrixBase<Dest> &dest) const
|
||||
{
|
||||
eigen_assert(m_factorizationIsOk && "The decomposition is not in a valid state for solving, you must first call either compute() or symbolic()/numeric()");
|
||||
const Index size = m_cholmodFactor->n;
|
||||
EIGEN_UNUSED_VARIABLE(size);
|
||||
eigen_assert(size==b.rows());
|
||||
|
||||
// Cholmod needs column-major stoarge without inner-stride, which corresponds to the default behavior of Ref.
|
||||
Ref<const Matrix<typename Rhs::Scalar,Dynamic,Dynamic,ColMajor> > b_ref(b.derived());
|
||||
|
||||
cholmod_dense b_cd = viewAsCholmod(b_ref);
|
||||
cholmod_dense* x_cd = cholmod_solve(CHOLMOD_A, m_cholmodFactor, &b_cd, &m_cholmod);
|
||||
if(!x_cd)
|
||||
{
|
||||
this->m_info = NumericalIssue;
|
||||
return;
|
||||
}
|
||||
// TODO optimize this copy by swapping when possible (be careful with alignment, etc.)
|
||||
dest = Matrix<Scalar,Dest::RowsAtCompileTime,Dest::ColsAtCompileTime>::Map(reinterpret_cast<Scalar*>(x_cd->x),b.rows(),b.cols());
|
||||
cholmod_free_dense(&x_cd, &m_cholmod);
|
||||
}
|
||||
|
||||
/** \internal */
|
||||
template<typename RhsDerived, typename DestDerived>
|
||||
void _solve_impl(const SparseMatrixBase<RhsDerived> &b, SparseMatrixBase<DestDerived> &dest) const
|
||||
{
|
||||
eigen_assert(m_factorizationIsOk && "The decomposition is not in a valid state for solving, you must first call either compute() or symbolic()/numeric()");
|
||||
const Index size = m_cholmodFactor->n;
|
||||
EIGEN_UNUSED_VARIABLE(size);
|
||||
eigen_assert(size==b.rows());
|
||||
|
||||
// note: cs stands for Cholmod Sparse
|
||||
Ref<SparseMatrix<typename RhsDerived::Scalar,ColMajor,typename RhsDerived::StorageIndex> > b_ref(b.const_cast_derived());
|
||||
cholmod_sparse b_cs = viewAsCholmod(b_ref);
|
||||
cholmod_sparse* x_cs = cholmod_spsolve(CHOLMOD_A, m_cholmodFactor, &b_cs, &m_cholmod);
|
||||
if(!x_cs)
|
||||
{
|
||||
this->m_info = NumericalIssue;
|
||||
return;
|
||||
}
|
||||
// TODO optimize this copy by swapping when possible (be careful with alignment, etc.)
|
||||
dest.derived() = viewAsEigen<typename DestDerived::Scalar,ColMajor,typename DestDerived::StorageIndex>(*x_cs);
|
||||
cholmod_free_sparse(&x_cs, &m_cholmod);
|
||||
}
|
||||
#endif // EIGEN_PARSED_BY_DOXYGEN
|
||||
|
||||
|
||||
/** Sets the shift parameter that will be used to adjust the diagonal coefficients during the numerical factorization.
|
||||
*
|
||||
* During the numerical factorization, an offset term is added to the diagonal coefficients:\n
|
||||
* \c d_ii = \a offset + \c d_ii
|
||||
*
|
||||
* The default is \a offset=0.
|
||||
*
|
||||
* \returns a reference to \c *this.
|
||||
*/
|
||||
Derived& setShift(const RealScalar& offset)
|
||||
{
|
||||
m_shiftOffset[0] = double(offset);
|
||||
return derived();
|
||||
}
|
||||
|
||||
/** \returns the determinant of the underlying matrix from the current factorization */
|
||||
Scalar determinant() const
|
||||
{
|
||||
using std::exp;
|
||||
return exp(logDeterminant());
|
||||
}
|
||||
|
||||
/** \returns the log determinant of the underlying matrix from the current factorization */
|
||||
Scalar logDeterminant() const
|
||||
{
|
||||
using std::log;
|
||||
using numext::real;
|
||||
eigen_assert(m_factorizationIsOk && "The decomposition is not in a valid state for solving, you must first call either compute() or symbolic()/numeric()");
|
||||
|
||||
RealScalar logDet = 0;
|
||||
Scalar *x = static_cast<Scalar*>(m_cholmodFactor->x);
|
||||
if (m_cholmodFactor->is_super)
|
||||
{
|
||||
// Supernodal factorization stored as a packed list of dense column-major blocs,
|
||||
// as described by the following structure:
|
||||
|
||||
// super[k] == index of the first column of the j-th super node
|
||||
StorageIndex *super = static_cast<StorageIndex*>(m_cholmodFactor->super);
|
||||
// pi[k] == offset to the description of row indices
|
||||
StorageIndex *pi = static_cast<StorageIndex*>(m_cholmodFactor->pi);
|
||||
// px[k] == offset to the respective dense block
|
||||
StorageIndex *px = static_cast<StorageIndex*>(m_cholmodFactor->px);
|
||||
|
||||
Index nb_super_nodes = m_cholmodFactor->nsuper;
|
||||
for (Index k=0; k < nb_super_nodes; ++k)
|
||||
{
|
||||
StorageIndex ncols = super[k + 1] - super[k];
|
||||
StorageIndex nrows = pi[k + 1] - pi[k];
|
||||
|
||||
Map<const Array<Scalar,1,Dynamic>, 0, InnerStride<> > sk(x + px[k], ncols, InnerStride<>(nrows+1));
|
||||
logDet += sk.real().log().sum();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Simplicial factorization stored as standard CSC matrix.
|
||||
StorageIndex *p = static_cast<StorageIndex*>(m_cholmodFactor->p);
|
||||
Index size = m_cholmodFactor->n;
|
||||
for (Index k=0; k<size; ++k)
|
||||
logDet += log(real( x[p[k]] ));
|
||||
}
|
||||
if (m_cholmodFactor->is_ll)
|
||||
logDet *= 2.0;
|
||||
return logDet;
|
||||
};
|
||||
|
||||
template<typename Stream>
|
||||
void dumpMemory(Stream& /*s*/)
|
||||
{}
|
||||
|
||||
protected:
|
||||
mutable cholmod_common m_cholmod;
|
||||
cholmod_factor* m_cholmodFactor;
|
||||
double m_shiftOffset[2];
|
||||
mutable ComputationInfo m_info;
|
||||
int m_factorizationIsOk;
|
||||
int m_analysisIsOk;
|
||||
};
|
||||
|
||||
/** \ingroup CholmodSupport_Module
|
||||
* \class CholmodSimplicialLLT
|
||||
* \brief A simplicial direct Cholesky (LLT) factorization and solver based on Cholmod
|
||||
*
|
||||
* This class allows to solve for A.X = B sparse linear problems via a simplicial LL^T Cholesky factorization
|
||||
* using the Cholmod library.
|
||||
* This simplicial variant is equivalent to Eigen's built-in SimplicialLLT class. Therefore, it has little practical interest.
|
||||
* The sparse matrix A must be selfadjoint and positive definite. The vectors or matrices
|
||||
* X and B can be either dense or sparse.
|
||||
*
|
||||
* \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
|
||||
* \tparam _UpLo the triangular part that will be used for the computations. It can be Lower
|
||||
* or Upper. Default is Lower.
|
||||
*
|
||||
* \implsparsesolverconcept
|
||||
*
|
||||
* This class supports all kind of SparseMatrix<>: row or column major; upper, lower, or both; compressed or non compressed.
|
||||
*
|
||||
* \warning Only double precision real and complex scalar types are supported by Cholmod.
|
||||
*
|
||||
* \sa \ref TutorialSparseSolverConcept, class CholmodSupernodalLLT, class SimplicialLLT
|
||||
*/
|
||||
template<typename _MatrixType, int _UpLo = Lower>
|
||||
class CholmodSimplicialLLT : public CholmodBase<_MatrixType, _UpLo, CholmodSimplicialLLT<_MatrixType, _UpLo> >
|
||||
{
|
||||
typedef CholmodBase<_MatrixType, _UpLo, CholmodSimplicialLLT> Base;
|
||||
using Base::m_cholmod;
|
||||
|
||||
public:
|
||||
|
||||
typedef _MatrixType MatrixType;
|
||||
|
||||
CholmodSimplicialLLT() : Base() { init(); }
|
||||
|
||||
CholmodSimplicialLLT(const MatrixType& matrix) : Base()
|
||||
{
|
||||
init();
|
||||
this->compute(matrix);
|
||||
}
|
||||
|
||||
~CholmodSimplicialLLT() {}
|
||||
protected:
|
||||
void init()
|
||||
{
|
||||
m_cholmod.final_asis = 0;
|
||||
m_cholmod.supernodal = CHOLMOD_SIMPLICIAL;
|
||||
m_cholmod.final_ll = 1;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/** \ingroup CholmodSupport_Module
|
||||
* \class CholmodSimplicialLDLT
|
||||
* \brief A simplicial direct Cholesky (LDLT) factorization and solver based on Cholmod
|
||||
*
|
||||
* This class allows to solve for A.X = B sparse linear problems via a simplicial LDL^T Cholesky factorization
|
||||
* using the Cholmod library.
|
||||
* This simplicial variant is equivalent to Eigen's built-in SimplicialLDLT class. Therefore, it has little practical interest.
|
||||
* The sparse matrix A must be selfadjoint and positive definite. The vectors or matrices
|
||||
* X and B can be either dense or sparse.
|
||||
*
|
||||
* \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
|
||||
* \tparam _UpLo the triangular part that will be used for the computations. It can be Lower
|
||||
* or Upper. Default is Lower.
|
||||
*
|
||||
* \implsparsesolverconcept
|
||||
*
|
||||
* This class supports all kind of SparseMatrix<>: row or column major; upper, lower, or both; compressed or non compressed.
|
||||
*
|
||||
* \warning Only double precision real and complex scalar types are supported by Cholmod.
|
||||
*
|
||||
* \sa \ref TutorialSparseSolverConcept, class CholmodSupernodalLLT, class SimplicialLDLT
|
||||
*/
|
||||
template<typename _MatrixType, int _UpLo = Lower>
|
||||
class CholmodSimplicialLDLT : public CholmodBase<_MatrixType, _UpLo, CholmodSimplicialLDLT<_MatrixType, _UpLo> >
|
||||
{
|
||||
typedef CholmodBase<_MatrixType, _UpLo, CholmodSimplicialLDLT> Base;
|
||||
using Base::m_cholmod;
|
||||
|
||||
public:
|
||||
|
||||
typedef _MatrixType MatrixType;
|
||||
|
||||
CholmodSimplicialLDLT() : Base() { init(); }
|
||||
|
||||
CholmodSimplicialLDLT(const MatrixType& matrix) : Base()
|
||||
{
|
||||
init();
|
||||
this->compute(matrix);
|
||||
}
|
||||
|
||||
~CholmodSimplicialLDLT() {}
|
||||
protected:
|
||||
void init()
|
||||
{
|
||||
m_cholmod.final_asis = 1;
|
||||
m_cholmod.supernodal = CHOLMOD_SIMPLICIAL;
|
||||
}
|
||||
};
|
||||
|
||||
/** \ingroup CholmodSupport_Module
|
||||
* \class CholmodSupernodalLLT
|
||||
* \brief A supernodal Cholesky (LLT) factorization and solver based on Cholmod
|
||||
*
|
||||
* This class allows to solve for A.X = B sparse linear problems via a supernodal LL^T Cholesky factorization
|
||||
* using the Cholmod library.
|
||||
* This supernodal variant performs best on dense enough problems, e.g., 3D FEM, or very high order 2D FEM.
|
||||
* The sparse matrix A must be selfadjoint and positive definite. The vectors or matrices
|
||||
* X and B can be either dense or sparse.
|
||||
*
|
||||
* \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
|
||||
* \tparam _UpLo the triangular part that will be used for the computations. It can be Lower
|
||||
* or Upper. Default is Lower.
|
||||
*
|
||||
* \implsparsesolverconcept
|
||||
*
|
||||
* This class supports all kind of SparseMatrix<>: row or column major; upper, lower, or both; compressed or non compressed.
|
||||
*
|
||||
* \warning Only double precision real and complex scalar types are supported by Cholmod.
|
||||
*
|
||||
* \sa \ref TutorialSparseSolverConcept
|
||||
*/
|
||||
template<typename _MatrixType, int _UpLo = Lower>
|
||||
class CholmodSupernodalLLT : public CholmodBase<_MatrixType, _UpLo, CholmodSupernodalLLT<_MatrixType, _UpLo> >
|
||||
{
|
||||
typedef CholmodBase<_MatrixType, _UpLo, CholmodSupernodalLLT> Base;
|
||||
using Base::m_cholmod;
|
||||
|
||||
public:
|
||||
|
||||
typedef _MatrixType MatrixType;
|
||||
|
||||
CholmodSupernodalLLT() : Base() { init(); }
|
||||
|
||||
CholmodSupernodalLLT(const MatrixType& matrix) : Base()
|
||||
{
|
||||
init();
|
||||
this->compute(matrix);
|
||||
}
|
||||
|
||||
~CholmodSupernodalLLT() {}
|
||||
protected:
|
||||
void init()
|
||||
{
|
||||
m_cholmod.final_asis = 1;
|
||||
m_cholmod.supernodal = CHOLMOD_SUPERNODAL;
|
||||
}
|
||||
};
|
||||
|
||||
/** \ingroup CholmodSupport_Module
|
||||
* \class CholmodDecomposition
|
||||
* \brief A general Cholesky factorization and solver based on Cholmod
|
||||
*
|
||||
* This class allows to solve for A.X = B sparse linear problems via a LL^T or LDL^T Cholesky factorization
|
||||
* using the Cholmod library. The sparse matrix A must be selfadjoint and positive definite. The vectors or matrices
|
||||
* X and B can be either dense or sparse.
|
||||
*
|
||||
* This variant permits to change the underlying Cholesky method at runtime.
|
||||
* On the other hand, it does not provide access to the result of the factorization.
|
||||
* The default is to let Cholmod automatically choose between a simplicial and supernodal factorization.
|
||||
*
|
||||
* \tparam _MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
|
||||
* \tparam _UpLo the triangular part that will be used for the computations. It can be Lower
|
||||
* or Upper. Default is Lower.
|
||||
*
|
||||
* \implsparsesolverconcept
|
||||
*
|
||||
* This class supports all kind of SparseMatrix<>: row or column major; upper, lower, or both; compressed or non compressed.
|
||||
*
|
||||
* \warning Only double precision real and complex scalar types are supported by Cholmod.
|
||||
*
|
||||
* \sa \ref TutorialSparseSolverConcept
|
||||
*/
|
||||
template<typename _MatrixType, int _UpLo = Lower>
|
||||
class CholmodDecomposition : public CholmodBase<_MatrixType, _UpLo, CholmodDecomposition<_MatrixType, _UpLo> >
|
||||
{
|
||||
typedef CholmodBase<_MatrixType, _UpLo, CholmodDecomposition> Base;
|
||||
using Base::m_cholmod;
|
||||
|
||||
public:
|
||||
|
||||
typedef _MatrixType MatrixType;
|
||||
|
||||
CholmodDecomposition() : Base() { init(); }
|
||||
|
||||
CholmodDecomposition(const MatrixType& matrix) : Base()
|
||||
{
|
||||
init();
|
||||
this->compute(matrix);
|
||||
}
|
||||
|
||||
~CholmodDecomposition() {}
|
||||
|
||||
void setMode(CholmodMode mode)
|
||||
{
|
||||
switch(mode)
|
||||
{
|
||||
case CholmodAuto:
|
||||
m_cholmod.final_asis = 1;
|
||||
m_cholmod.supernodal = CHOLMOD_AUTO;
|
||||
break;
|
||||
case CholmodSimplicialLLt:
|
||||
m_cholmod.final_asis = 0;
|
||||
m_cholmod.supernodal = CHOLMOD_SIMPLICIAL;
|
||||
m_cholmod.final_ll = 1;
|
||||
break;
|
||||
case CholmodSupernodalLLt:
|
||||
m_cholmod.final_asis = 1;
|
||||
m_cholmod.supernodal = CHOLMOD_SUPERNODAL;
|
||||
break;
|
||||
case CholmodLDLt:
|
||||
m_cholmod.final_asis = 1;
|
||||
m_cholmod.supernodal = CHOLMOD_SIMPLICIAL;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
protected:
|
||||
void init()
|
||||
{
|
||||
m_cholmod.final_asis = 1;
|
||||
m_cholmod.supernodal = CHOLMOD_AUTO;
|
||||
}
|
||||
};
|
||||
|
||||
} // end namespace Eigen
|
||||
|
||||
#endif // EIGEN_CHOLMODSUPPORT_H
|
||||
@@ -1,331 +0,0 @@
|
||||
// This file is part of Eigen, a lightweight C++ template library
|
||||
// for linear algebra.
|
||||
//
|
||||
// Copyright (C) 2009 Gael Guennebaud <gael.guennebaud@inria.fr>
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla
|
||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#ifndef EIGEN_ARRAY_H
|
||||
#define EIGEN_ARRAY_H
|
||||
|
||||
namespace Eigen {
|
||||
|
||||
namespace internal {
|
||||
template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
|
||||
struct traits<Array<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> > : traits<Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
|
||||
{
|
||||
typedef ArrayXpr XprKind;
|
||||
typedef ArrayBase<Array<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> > XprBase;
|
||||
};
|
||||
}
|
||||
|
||||
/** \class Array
|
||||
* \ingroup Core_Module
|
||||
*
|
||||
* \brief General-purpose arrays with easy API for coefficient-wise operations
|
||||
*
|
||||
* The %Array class is very similar to the Matrix class. It provides
|
||||
* general-purpose one- and two-dimensional arrays. The difference between the
|
||||
* %Array and the %Matrix class is primarily in the API: the API for the
|
||||
* %Array class provides easy access to coefficient-wise operations, while the
|
||||
* API for the %Matrix class provides easy access to linear-algebra
|
||||
* operations.
|
||||
*
|
||||
* See documentation of class Matrix for detailed information on the template parameters
|
||||
* storage layout.
|
||||
*
|
||||
* This class can be extended with the help of the plugin mechanism described on the page
|
||||
* \ref TopicCustomizing_Plugins by defining the preprocessor symbol \c EIGEN_ARRAY_PLUGIN.
|
||||
*
|
||||
* \sa \blank \ref TutorialArrayClass, \ref TopicClassHierarchy
|
||||
*/
|
||||
template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
|
||||
class Array
|
||||
: public PlainObjectBase<Array<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols> >
|
||||
{
|
||||
public:
|
||||
|
||||
typedef PlainObjectBase<Array> Base;
|
||||
EIGEN_DENSE_PUBLIC_INTERFACE(Array)
|
||||
|
||||
enum { Options = _Options };
|
||||
typedef typename Base::PlainObject PlainObject;
|
||||
|
||||
protected:
|
||||
template <typename Derived, typename OtherDerived, bool IsVector>
|
||||
friend struct internal::conservative_resize_like_impl;
|
||||
|
||||
using Base::m_storage;
|
||||
|
||||
public:
|
||||
|
||||
using Base::base;
|
||||
using Base::coeff;
|
||||
using Base::coeffRef;
|
||||
|
||||
/**
|
||||
* The usage of
|
||||
* using Base::operator=;
|
||||
* fails on MSVC. Since the code below is working with GCC and MSVC, we skipped
|
||||
* the usage of 'using'. This should be done only for operator=.
|
||||
*/
|
||||
template<typename OtherDerived>
|
||||
EIGEN_DEVICE_FUNC
|
||||
EIGEN_STRONG_INLINE Array& operator=(const EigenBase<OtherDerived> &other)
|
||||
{
|
||||
return Base::operator=(other);
|
||||
}
|
||||
|
||||
/** Set all the entries to \a value.
|
||||
* \sa DenseBase::setConstant(), DenseBase::fill()
|
||||
*/
|
||||
/* This overload is needed because the usage of
|
||||
* using Base::operator=;
|
||||
* fails on MSVC. Since the code below is working with GCC and MSVC, we skipped
|
||||
* the usage of 'using'. This should be done only for operator=.
|
||||
*/
|
||||
EIGEN_DEVICE_FUNC
|
||||
EIGEN_STRONG_INLINE Array& operator=(const Scalar &value)
|
||||
{
|
||||
Base::setConstant(value);
|
||||
return *this;
|
||||
}
|
||||
|
||||
/** Copies the value of the expression \a other into \c *this with automatic resizing.
|
||||
*
|
||||
* *this might be resized to match the dimensions of \a other. If *this was a null matrix (not already initialized),
|
||||
* it will be initialized.
|
||||
*
|
||||
* Note that copying a row-vector into a vector (and conversely) is allowed.
|
||||
* The resizing, if any, is then done in the appropriate way so that row-vectors
|
||||
* remain row-vectors and vectors remain vectors.
|
||||
*/
|
||||
template<typename OtherDerived>
|
||||
EIGEN_DEVICE_FUNC
|
||||
EIGEN_STRONG_INLINE Array& operator=(const DenseBase<OtherDerived>& other)
|
||||
{
|
||||
return Base::_set(other);
|
||||
}
|
||||
|
||||
/** This is a special case of the templated operator=. Its purpose is to
|
||||
* prevent a default operator= from hiding the templated operator=.
|
||||
*/
|
||||
EIGEN_DEVICE_FUNC
|
||||
EIGEN_STRONG_INLINE Array& operator=(const Array& other)
|
||||
{
|
||||
return Base::_set(other);
|
||||
}
|
||||
|
||||
/** Default constructor.
|
||||
*
|
||||
* For fixed-size matrices, does nothing.
|
||||
*
|
||||
* For dynamic-size matrices, creates an empty matrix of size 0. Does not allocate any array. Such a matrix
|
||||
* is called a null matrix. This constructor is the unique way to create null matrices: resizing
|
||||
* a matrix to 0 is not supported.
|
||||
*
|
||||
* \sa resize(Index,Index)
|
||||
*/
|
||||
EIGEN_DEVICE_FUNC
|
||||
EIGEN_STRONG_INLINE Array() : Base()
|
||||
{
|
||||
Base::_check_template_params();
|
||||
EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
|
||||
}
|
||||
|
||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
||||
// FIXME is it still needed ??
|
||||
/** \internal */
|
||||
EIGEN_DEVICE_FUNC
|
||||
Array(internal::constructor_without_unaligned_array_assert)
|
||||
: Base(internal::constructor_without_unaligned_array_assert())
|
||||
{
|
||||
Base::_check_template_params();
|
||||
EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
|
||||
}
|
||||
#endif
|
||||
|
||||
#if EIGEN_HAS_RVALUE_REFERENCES
|
||||
EIGEN_DEVICE_FUNC
|
||||
Array(Array&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_constructible<Scalar>::value)
|
||||
: Base(std::move(other))
|
||||
{
|
||||
Base::_check_template_params();
|
||||
if (RowsAtCompileTime!=Dynamic && ColsAtCompileTime!=Dynamic)
|
||||
Base::_set_noalias(other);
|
||||
}
|
||||
EIGEN_DEVICE_FUNC
|
||||
Array& operator=(Array&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_assignable<Scalar>::value)
|
||||
{
|
||||
other.swap(*this);
|
||||
return *this;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
||||
template<typename T>
|
||||
EIGEN_DEVICE_FUNC
|
||||
EIGEN_STRONG_INLINE explicit Array(const T& x)
|
||||
{
|
||||
Base::_check_template_params();
|
||||
Base::template _init1<T>(x);
|
||||
}
|
||||
|
||||
template<typename T0, typename T1>
|
||||
EIGEN_DEVICE_FUNC
|
||||
EIGEN_STRONG_INLINE Array(const T0& val0, const T1& val1)
|
||||
{
|
||||
Base::_check_template_params();
|
||||
this->template _init2<T0,T1>(val0, val1);
|
||||
}
|
||||
#else
|
||||
/** \brief Constructs a fixed-sized array initialized with coefficients starting at \a data */
|
||||
EIGEN_DEVICE_FUNC explicit Array(const Scalar *data);
|
||||
/** Constructs a vector or row-vector with given dimension. \only_for_vectors
|
||||
*
|
||||
* Note that this is only useful for dynamic-size vectors. For fixed-size vectors,
|
||||
* it is redundant to pass the dimension here, so it makes more sense to use the default
|
||||
* constructor Array() instead.
|
||||
*/
|
||||
EIGEN_DEVICE_FUNC
|
||||
EIGEN_STRONG_INLINE explicit Array(Index dim);
|
||||
/** constructs an initialized 1x1 Array with the given coefficient */
|
||||
Array(const Scalar& value);
|
||||
/** constructs an uninitialized array with \a rows rows and \a cols columns.
|
||||
*
|
||||
* This is useful for dynamic-size arrays. For fixed-size arrays,
|
||||
* it is redundant to pass these parameters, so one should use the default constructor
|
||||
* Array() instead. */
|
||||
Array(Index rows, Index cols);
|
||||
/** constructs an initialized 2D vector with given coefficients */
|
||||
Array(const Scalar& val0, const Scalar& val1);
|
||||
#endif
|
||||
|
||||
/** constructs an initialized 3D vector with given coefficients */
|
||||
EIGEN_DEVICE_FUNC
|
||||
EIGEN_STRONG_INLINE Array(const Scalar& val0, const Scalar& val1, const Scalar& val2)
|
||||
{
|
||||
Base::_check_template_params();
|
||||
EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Array, 3)
|
||||
m_storage.data()[0] = val0;
|
||||
m_storage.data()[1] = val1;
|
||||
m_storage.data()[2] = val2;
|
||||
}
|
||||
/** constructs an initialized 4D vector with given coefficients */
|
||||
EIGEN_DEVICE_FUNC
|
||||
EIGEN_STRONG_INLINE Array(const Scalar& val0, const Scalar& val1, const Scalar& val2, const Scalar& val3)
|
||||
{
|
||||
Base::_check_template_params();
|
||||
EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(Array, 4)
|
||||
m_storage.data()[0] = val0;
|
||||
m_storage.data()[1] = val1;
|
||||
m_storage.data()[2] = val2;
|
||||
m_storage.data()[3] = val3;
|
||||
}
|
||||
|
||||
/** Copy constructor */
|
||||
EIGEN_DEVICE_FUNC
|
||||
EIGEN_STRONG_INLINE Array(const Array& other)
|
||||
: Base(other)
|
||||
{ }
|
||||
|
||||
private:
|
||||
struct PrivateType {};
|
||||
public:
|
||||
|
||||
/** \sa MatrixBase::operator=(const EigenBase<OtherDerived>&) */
|
||||
template<typename OtherDerived>
|
||||
EIGEN_DEVICE_FUNC
|
||||
EIGEN_STRONG_INLINE Array(const EigenBase<OtherDerived> &other,
|
||||
typename internal::enable_if<internal::is_convertible<typename OtherDerived::Scalar,Scalar>::value,
|
||||
PrivateType>::type = PrivateType())
|
||||
: Base(other.derived())
|
||||
{ }
|
||||
|
||||
EIGEN_DEVICE_FUNC inline Index innerStride() const { return 1; }
|
||||
EIGEN_DEVICE_FUNC inline Index outerStride() const { return this->innerSize(); }
|
||||
|
||||
#ifdef EIGEN_ARRAY_PLUGIN
|
||||
#include EIGEN_ARRAY_PLUGIN
|
||||
#endif
|
||||
|
||||
private:
|
||||
|
||||
template<typename MatrixType, typename OtherDerived, bool SwapPointers>
|
||||
friend struct internal::matrix_swap_impl;
|
||||
};
|
||||
|
||||
/** \defgroup arraytypedefs Global array typedefs
|
||||
* \ingroup Core_Module
|
||||
*
|
||||
* Eigen defines several typedef shortcuts for most common 1D and 2D array types.
|
||||
*
|
||||
* The general patterns are the following:
|
||||
*
|
||||
* \c ArrayRowsColsType where \c Rows and \c Cols can be \c 2,\c 3,\c 4 for fixed size square matrices or \c X for dynamic size,
|
||||
* and where \c Type can be \c i for integer, \c f for float, \c d for double, \c cf for complex float, \c cd
|
||||
* for complex double.
|
||||
*
|
||||
* For example, \c Array33d is a fixed-size 3x3 array type of doubles, and \c ArrayXXf is a dynamic-size matrix of floats.
|
||||
*
|
||||
* There are also \c ArraySizeType which are self-explanatory. For example, \c Array4cf is
|
||||
* a fixed-size 1D array of 4 complex floats.
|
||||
*
|
||||
* \sa class Array
|
||||
*/
|
||||
|
||||
#define EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, Size, SizeSuffix) \
|
||||
/** \ingroup arraytypedefs */ \
|
||||
typedef Array<Type, Size, Size> Array##SizeSuffix##SizeSuffix##TypeSuffix; \
|
||||
/** \ingroup arraytypedefs */ \
|
||||
typedef Array<Type, Size, 1> Array##SizeSuffix##TypeSuffix;
|
||||
|
||||
#define EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(Type, TypeSuffix, Size) \
|
||||
/** \ingroup arraytypedefs */ \
|
||||
typedef Array<Type, Size, Dynamic> Array##Size##X##TypeSuffix; \
|
||||
/** \ingroup arraytypedefs */ \
|
||||
typedef Array<Type, Dynamic, Size> Array##X##Size##TypeSuffix;
|
||||
|
||||
#define EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(Type, TypeSuffix) \
|
||||
EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, 2, 2) \
|
||||
EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, 3, 3) \
|
||||
EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, 4, 4) \
|
||||
EIGEN_MAKE_ARRAY_TYPEDEFS(Type, TypeSuffix, Dynamic, X) \
|
||||
EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(Type, TypeSuffix, 2) \
|
||||
EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(Type, TypeSuffix, 3) \
|
||||
EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(Type, TypeSuffix, 4)
|
||||
|
||||
EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(int, i)
|
||||
EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(float, f)
|
||||
EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(double, d)
|
||||
EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(std::complex<float>, cf)
|
||||
EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(std::complex<double>, cd)
|
||||
|
||||
#undef EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES
|
||||
#undef EIGEN_MAKE_ARRAY_TYPEDEFS
|
||||
|
||||
#undef EIGEN_MAKE_ARRAY_TYPEDEFS_LARGE
|
||||
|
||||
#define EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, SizeSuffix) \
|
||||
using Eigen::Matrix##SizeSuffix##TypeSuffix; \
|
||||
using Eigen::Vector##SizeSuffix##TypeSuffix; \
|
||||
using Eigen::RowVector##SizeSuffix##TypeSuffix;
|
||||
|
||||
#define EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(TypeSuffix) \
|
||||
EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, 2) \
|
||||
EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, 3) \
|
||||
EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, 4) \
|
||||
EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, X) \
|
||||
|
||||
#define EIGEN_USING_ARRAY_TYPEDEFS \
|
||||
EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(i) \
|
||||
EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(f) \
|
||||
EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(d) \
|
||||
EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(cf) \
|
||||
EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE(cd)
|
||||
|
||||
} // end namespace Eigen
|
||||
|
||||
#endif // EIGEN_ARRAY_H
|
||||
@@ -1,226 +0,0 @@
|
||||
// This file is part of Eigen, a lightweight C++ template library
|
||||
// for linear algebra.
|
||||
//
|
||||
// Copyright (C) 2009 Gael Guennebaud <gael.guennebaud@inria.fr>
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla
|
||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#ifndef EIGEN_ARRAYBASE_H
|
||||
#define EIGEN_ARRAYBASE_H
|
||||
|
||||
namespace Eigen {
|
||||
|
||||
template<typename ExpressionType> class MatrixWrapper;
|
||||
|
||||
/** \class ArrayBase
|
||||
* \ingroup Core_Module
|
||||
*
|
||||
* \brief Base class for all 1D and 2D array, and related expressions
|
||||
*
|
||||
* An array is similar to a dense vector or matrix. While matrices are mathematical
|
||||
* objects with well defined linear algebra operators, an array is just a collection
|
||||
* of scalar values arranged in a one or two dimensionnal fashion. As the main consequence,
|
||||
* all operations applied to an array are performed coefficient wise. Furthermore,
|
||||
* arrays support scalar math functions of the c++ standard library (e.g., std::sin(x)), and convenient
|
||||
* constructors allowing to easily write generic code working for both scalar values
|
||||
* and arrays.
|
||||
*
|
||||
* This class is the base that is inherited by all array expression types.
|
||||
*
|
||||
* \tparam Derived is the derived type, e.g., an array or an expression type.
|
||||
*
|
||||
* This class can be extended with the help of the plugin mechanism described on the page
|
||||
* \ref TopicCustomizing_Plugins by defining the preprocessor symbol \c EIGEN_ARRAYBASE_PLUGIN.
|
||||
*
|
||||
* \sa class MatrixBase, \ref TopicClassHierarchy
|
||||
*/
|
||||
template<typename Derived> class ArrayBase
|
||||
: public DenseBase<Derived>
|
||||
{
|
||||
public:
|
||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
||||
/** The base class for a given storage type. */
|
||||
typedef ArrayBase StorageBaseType;
|
||||
|
||||
typedef ArrayBase Eigen_BaseClassForSpecializationOfGlobalMathFuncImpl;
|
||||
|
||||
typedef typename internal::traits<Derived>::StorageKind StorageKind;
|
||||
typedef typename internal::traits<Derived>::Scalar Scalar;
|
||||
typedef typename internal::packet_traits<Scalar>::type PacketScalar;
|
||||
typedef typename NumTraits<Scalar>::Real RealScalar;
|
||||
|
||||
typedef DenseBase<Derived> Base;
|
||||
using Base::RowsAtCompileTime;
|
||||
using Base::ColsAtCompileTime;
|
||||
using Base::SizeAtCompileTime;
|
||||
using Base::MaxRowsAtCompileTime;
|
||||
using Base::MaxColsAtCompileTime;
|
||||
using Base::MaxSizeAtCompileTime;
|
||||
using Base::IsVectorAtCompileTime;
|
||||
using Base::Flags;
|
||||
|
||||
using Base::derived;
|
||||
using Base::const_cast_derived;
|
||||
using Base::rows;
|
||||
using Base::cols;
|
||||
using Base::size;
|
||||
using Base::coeff;
|
||||
using Base::coeffRef;
|
||||
using Base::lazyAssign;
|
||||
using Base::operator=;
|
||||
using Base::operator+=;
|
||||
using Base::operator-=;
|
||||
using Base::operator*=;
|
||||
using Base::operator/=;
|
||||
|
||||
typedef typename Base::CoeffReturnType CoeffReturnType;
|
||||
|
||||
#endif // not EIGEN_PARSED_BY_DOXYGEN
|
||||
|
||||
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
||||
typedef typename Base::PlainObject PlainObject;
|
||||
|
||||
/** \internal Represents a matrix with all coefficients equal to one another*/
|
||||
typedef CwiseNullaryOp<internal::scalar_constant_op<Scalar>,PlainObject> ConstantReturnType;
|
||||
#endif // not EIGEN_PARSED_BY_DOXYGEN
|
||||
|
||||
#define EIGEN_CURRENT_STORAGE_BASE_CLASS Eigen::ArrayBase
|
||||
#define EIGEN_DOC_UNARY_ADDONS(X,Y)
|
||||
# include "../plugins/CommonCwiseUnaryOps.h"
|
||||
# include "../plugins/MatrixCwiseUnaryOps.h"
|
||||
# include "../plugins/ArrayCwiseUnaryOps.h"
|
||||
# include "../plugins/CommonCwiseBinaryOps.h"
|
||||
# include "../plugins/MatrixCwiseBinaryOps.h"
|
||||
# include "../plugins/ArrayCwiseBinaryOps.h"
|
||||
# ifdef EIGEN_ARRAYBASE_PLUGIN
|
||||
# include EIGEN_ARRAYBASE_PLUGIN
|
||||
# endif
|
||||
#undef EIGEN_CURRENT_STORAGE_BASE_CLASS
|
||||
#undef EIGEN_DOC_UNARY_ADDONS
|
||||
|
||||
/** Special case of the template operator=, in order to prevent the compiler
|
||||
* from generating a default operator= (issue hit with g++ 4.1)
|
||||
*/
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||
Derived& operator=(const ArrayBase& other)
|
||||
{
|
||||
internal::call_assignment(derived(), other.derived());
|
||||
return derived();
|
||||
}
|
||||
|
||||
/** Set all the entries to \a value.
|
||||
* \sa DenseBase::setConstant(), DenseBase::fill() */
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||
Derived& operator=(const Scalar &value)
|
||||
{ Base::setConstant(value); return derived(); }
|
||||
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||
Derived& operator+=(const Scalar& scalar);
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||
Derived& operator-=(const Scalar& scalar);
|
||||
|
||||
template<typename OtherDerived>
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||
Derived& operator+=(const ArrayBase<OtherDerived>& other);
|
||||
template<typename OtherDerived>
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||
Derived& operator-=(const ArrayBase<OtherDerived>& other);
|
||||
|
||||
template<typename OtherDerived>
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||
Derived& operator*=(const ArrayBase<OtherDerived>& other);
|
||||
|
||||
template<typename OtherDerived>
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||
Derived& operator/=(const ArrayBase<OtherDerived>& other);
|
||||
|
||||
public:
|
||||
EIGEN_DEVICE_FUNC
|
||||
ArrayBase<Derived>& array() { return *this; }
|
||||
EIGEN_DEVICE_FUNC
|
||||
const ArrayBase<Derived>& array() const { return *this; }
|
||||
|
||||
/** \returns an \link Eigen::MatrixBase Matrix \endlink expression of this array
|
||||
* \sa MatrixBase::array() */
|
||||
EIGEN_DEVICE_FUNC
|
||||
MatrixWrapper<Derived> matrix() { return MatrixWrapper<Derived>(derived()); }
|
||||
EIGEN_DEVICE_FUNC
|
||||
const MatrixWrapper<const Derived> matrix() const { return MatrixWrapper<const Derived>(derived()); }
|
||||
|
||||
// template<typename Dest>
|
||||
// inline void evalTo(Dest& dst) const { dst = matrix(); }
|
||||
|
||||
protected:
|
||||
EIGEN_DEVICE_FUNC
|
||||
ArrayBase() : Base() {}
|
||||
|
||||
private:
|
||||
explicit ArrayBase(Index);
|
||||
ArrayBase(Index,Index);
|
||||
template<typename OtherDerived> explicit ArrayBase(const ArrayBase<OtherDerived>&);
|
||||
protected:
|
||||
// mixing arrays and matrices is not legal
|
||||
template<typename OtherDerived> Derived& operator+=(const MatrixBase<OtherDerived>& )
|
||||
{EIGEN_STATIC_ASSERT(std::ptrdiff_t(sizeof(typename OtherDerived::Scalar))==-1,YOU_CANNOT_MIX_ARRAYS_AND_MATRICES); return *this;}
|
||||
// mixing arrays and matrices is not legal
|
||||
template<typename OtherDerived> Derived& operator-=(const MatrixBase<OtherDerived>& )
|
||||
{EIGEN_STATIC_ASSERT(std::ptrdiff_t(sizeof(typename OtherDerived::Scalar))==-1,YOU_CANNOT_MIX_ARRAYS_AND_MATRICES); return *this;}
|
||||
};
|
||||
|
||||
/** replaces \c *this by \c *this - \a other.
|
||||
*
|
||||
* \returns a reference to \c *this
|
||||
*/
|
||||
template<typename Derived>
|
||||
template<typename OtherDerived>
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived &
|
||||
ArrayBase<Derived>::operator-=(const ArrayBase<OtherDerived> &other)
|
||||
{
|
||||
call_assignment(derived(), other.derived(), internal::sub_assign_op<Scalar,typename OtherDerived::Scalar>());
|
||||
return derived();
|
||||
}
|
||||
|
||||
/** replaces \c *this by \c *this + \a other.
|
||||
*
|
||||
* \returns a reference to \c *this
|
||||
*/
|
||||
template<typename Derived>
|
||||
template<typename OtherDerived>
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived &
|
||||
ArrayBase<Derived>::operator+=(const ArrayBase<OtherDerived>& other)
|
||||
{
|
||||
call_assignment(derived(), other.derived(), internal::add_assign_op<Scalar,typename OtherDerived::Scalar>());
|
||||
return derived();
|
||||
}
|
||||
|
||||
/** replaces \c *this by \c *this * \a other coefficient wise.
|
||||
*
|
||||
* \returns a reference to \c *this
|
||||
*/
|
||||
template<typename Derived>
|
||||
template<typename OtherDerived>
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived &
|
||||
ArrayBase<Derived>::operator*=(const ArrayBase<OtherDerived>& other)
|
||||
{
|
||||
call_assignment(derived(), other.derived(), internal::mul_assign_op<Scalar,typename OtherDerived::Scalar>());
|
||||
return derived();
|
||||
}
|
||||
|
||||
/** replaces \c *this by \c *this / \a other coefficient wise.
|
||||
*
|
||||
* \returns a reference to \c *this
|
||||
*/
|
||||
template<typename Derived>
|
||||
template<typename OtherDerived>
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived &
|
||||
ArrayBase<Derived>::operator/=(const ArrayBase<OtherDerived>& other)
|
||||
{
|
||||
call_assignment(derived(), other.derived(), internal::div_assign_op<Scalar,typename OtherDerived::Scalar>());
|
||||
return derived();
|
||||
}
|
||||
|
||||
} // end namespace Eigen
|
||||
|
||||
#endif // EIGEN_ARRAYBASE_H
|
||||
@@ -1,209 +0,0 @@
|
||||
// This file is part of Eigen, a lightweight C++ template library
|
||||
// for linear algebra.
|
||||
//
|
||||
// Copyright (C) 2009-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
|
||||
//
|
||||
// This Source Code Form is subject to the terms of the Mozilla
|
||||
// Public License v. 2.0. If a copy of the MPL was not distributed
|
||||
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
#ifndef EIGEN_ARRAYWRAPPER_H
|
||||
#define EIGEN_ARRAYWRAPPER_H
|
||||
|
||||
namespace Eigen {
|
||||
|
||||
/** \class ArrayWrapper
|
||||
* \ingroup Core_Module
|
||||
*
|
||||
* \brief Expression of a mathematical vector or matrix as an array object
|
||||
*
|
||||
* This class is the return type of MatrixBase::array(), and most of the time
|
||||
* this is the only way it is use.
|
||||
*
|
||||
* \sa MatrixBase::array(), class MatrixWrapper
|
||||
*/
|
||||
|
||||
namespace internal {
|
||||
template<typename ExpressionType>
|
||||
struct traits<ArrayWrapper<ExpressionType> >
|
||||
: public traits<typename remove_all<typename ExpressionType::Nested>::type >
|
||||
{
|
||||
typedef ArrayXpr XprKind;
|
||||
// Let's remove NestByRefBit
|
||||
enum {
|
||||
Flags0 = traits<typename remove_all<typename ExpressionType::Nested>::type >::Flags,
|
||||
LvalueBitFlag = is_lvalue<ExpressionType>::value ? LvalueBit : 0,
|
||||
Flags = (Flags0 & ~(NestByRefBit | LvalueBit)) | LvalueBitFlag
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
template<typename ExpressionType>
|
||||
class ArrayWrapper : public ArrayBase<ArrayWrapper<ExpressionType> >
|
||||
{
|
||||
public:
|
||||
typedef ArrayBase<ArrayWrapper> Base;
|
||||
EIGEN_DENSE_PUBLIC_INTERFACE(ArrayWrapper)
|
||||
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(ArrayWrapper)
|
||||
typedef typename internal::remove_all<ExpressionType>::type NestedExpression;
|
||||
|
||||
typedef typename internal::conditional<
|
||||
internal::is_lvalue<ExpressionType>::value,
|
||||
Scalar,
|
||||
const Scalar
|
||||
>::type ScalarWithConstIfNotLvalue;
|
||||
|
||||
typedef typename internal::ref_selector<ExpressionType>::non_const_type NestedExpressionType;
|
||||
|
||||
using Base::coeffRef;
|
||||
|
||||
EIGEN_DEVICE_FUNC
|
||||
explicit EIGEN_STRONG_INLINE ArrayWrapper(ExpressionType& matrix) : m_expression(matrix) {}
|
||||
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline Index rows() const { return m_expression.rows(); }
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline Index cols() const { return m_expression.cols(); }
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline Index outerStride() const { return m_expression.outerStride(); }
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline Index innerStride() const { return m_expression.innerStride(); }
|
||||
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline ScalarWithConstIfNotLvalue* data() { return m_expression.data(); }
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline const Scalar* data() const { return m_expression.data(); }
|
||||
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline const Scalar& coeffRef(Index rowId, Index colId) const
|
||||
{
|
||||
return m_expression.coeffRef(rowId, colId);
|
||||
}
|
||||
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline const Scalar& coeffRef(Index index) const
|
||||
{
|
||||
return m_expression.coeffRef(index);
|
||||
}
|
||||
|
||||
template<typename Dest>
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline void evalTo(Dest& dst) const { dst = m_expression; }
|
||||
|
||||
const typename internal::remove_all<NestedExpressionType>::type&
|
||||
EIGEN_DEVICE_FUNC
|
||||
nestedExpression() const
|
||||
{
|
||||
return m_expression;
|
||||
}
|
||||
|
||||
/** Forwards the resizing request to the nested expression
|
||||
* \sa DenseBase::resize(Index) */
|
||||
EIGEN_DEVICE_FUNC
|
||||
void resize(Index newSize) { m_expression.resize(newSize); }
|
||||
/** Forwards the resizing request to the nested expression
|
||||
* \sa DenseBase::resize(Index,Index)*/
|
||||
EIGEN_DEVICE_FUNC
|
||||
void resize(Index rows, Index cols) { m_expression.resize(rows,cols); }
|
||||
|
||||
protected:
|
||||
NestedExpressionType m_expression;
|
||||
};
|
||||
|
||||
/** \class MatrixWrapper
|
||||
* \ingroup Core_Module
|
||||
*
|
||||
* \brief Expression of an array as a mathematical vector or matrix
|
||||
*
|
||||
* This class is the return type of ArrayBase::matrix(), and most of the time
|
||||
* this is the only way it is use.
|
||||
*
|
||||
* \sa MatrixBase::matrix(), class ArrayWrapper
|
||||
*/
|
||||
|
||||
namespace internal {
|
||||
template<typename ExpressionType>
|
||||
struct traits<MatrixWrapper<ExpressionType> >
|
||||
: public traits<typename remove_all<typename ExpressionType::Nested>::type >
|
||||
{
|
||||
typedef MatrixXpr XprKind;
|
||||
// Let's remove NestByRefBit
|
||||
enum {
|
||||
Flags0 = traits<typename remove_all<typename ExpressionType::Nested>::type >::Flags,
|
||||
LvalueBitFlag = is_lvalue<ExpressionType>::value ? LvalueBit : 0,
|
||||
Flags = (Flags0 & ~(NestByRefBit | LvalueBit)) | LvalueBitFlag
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
template<typename ExpressionType>
|
||||
class MatrixWrapper : public MatrixBase<MatrixWrapper<ExpressionType> >
|
||||
{
|
||||
public:
|
||||
typedef MatrixBase<MatrixWrapper<ExpressionType> > Base;
|
||||
EIGEN_DENSE_PUBLIC_INTERFACE(MatrixWrapper)
|
||||
EIGEN_INHERIT_ASSIGNMENT_OPERATORS(MatrixWrapper)
|
||||
typedef typename internal::remove_all<ExpressionType>::type NestedExpression;
|
||||
|
||||
typedef typename internal::conditional<
|
||||
internal::is_lvalue<ExpressionType>::value,
|
||||
Scalar,
|
||||
const Scalar
|
||||
>::type ScalarWithConstIfNotLvalue;
|
||||
|
||||
typedef typename internal::ref_selector<ExpressionType>::non_const_type NestedExpressionType;
|
||||
|
||||
using Base::coeffRef;
|
||||
|
||||
EIGEN_DEVICE_FUNC
|
||||
explicit inline MatrixWrapper(ExpressionType& matrix) : m_expression(matrix) {}
|
||||
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline Index rows() const { return m_expression.rows(); }
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline Index cols() const { return m_expression.cols(); }
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline Index outerStride() const { return m_expression.outerStride(); }
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline Index innerStride() const { return m_expression.innerStride(); }
|
||||
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline ScalarWithConstIfNotLvalue* data() { return m_expression.data(); }
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline const Scalar* data() const { return m_expression.data(); }
|
||||
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline const Scalar& coeffRef(Index rowId, Index colId) const
|
||||
{
|
||||
return m_expression.derived().coeffRef(rowId, colId);
|
||||
}
|
||||
|
||||
EIGEN_DEVICE_FUNC
|
||||
inline const Scalar& coeffRef(Index index) const
|
||||
{
|
||||
return m_expression.coeffRef(index);
|
||||
}
|
||||
|
||||
EIGEN_DEVICE_FUNC
|
||||
const typename internal::remove_all<NestedExpressionType>::type&
|
||||
nestedExpression() const
|
||||
{
|
||||
return m_expression;
|
||||
}
|
||||
|
||||
/** Forwards the resizing request to the nested expression
|
||||
* \sa DenseBase::resize(Index) */
|
||||
EIGEN_DEVICE_FUNC
|
||||
void resize(Index newSize) { m_expression.resize(newSize); }
|
||||
/** Forwards the resizing request to the nested expression
|
||||
* \sa DenseBase::resize(Index,Index)*/
|
||||
EIGEN_DEVICE_FUNC
|
||||
void resize(Index rows, Index cols) { m_expression.resize(rows,cols); }
|
||||
|
||||
protected:
|
||||
NestedExpressionType m_expression;
|
||||
};
|
||||
|
||||
} // end namespace Eigen
|
||||
|
||||
#endif // EIGEN_ARRAYWRAPPER_H
|
||||