pyjallib 0.1.6__tar.gz → 0.1.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyjallib-0.1.6 → pyjallib-0.1.7}/PKG-INFO +1 -1
- {pyjallib-0.1.6 → pyjallib-0.1.7}/pyproject.toml +1 -1
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/__init__.py +1 -1
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/autoClavicle.py +47 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/header.py +2 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/name.py +5 -29
- {pyjallib-0.1.6 → pyjallib-0.1.7}/.gitignore +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/.python-version +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/README.md +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/docs/.nojekyll +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/docs/index.html +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/docs/max.html +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/docs/namePart.html +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/docs/nameToPath.html +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/docs/naming.html +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/docs/namingConfig.html +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/docs/perforce.html +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/docs/pymxs.html +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/docs/reloadModules.html +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/ConfigFiles/namingConfig.json +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/ConfigFiles/3DSMaxNamingConfig.json +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/__init__.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/align.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/anim.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/bip.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/bone.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/constraint.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/groinBone.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/helper.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/layer.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/link.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/macro/jal_macro_align.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/macro/jal_macro_bone.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/macro/jal_macro_constraint.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/macro/jal_macro_helper.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/macro/jal_macro_link.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/macro/jal_macro_select.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/mirror.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/select.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/skin.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/max/twistBone.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/namePart.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/nameToPath.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/naming.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/namingConfig.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/perforce.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/py.typed +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/src/pyjallib/reloadModules.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/tests/autoclavicle.ms +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/tests/autoclavicleTest.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/tests/globalVarTest.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/tests/moduleImportTest.py +0 -0
- {pyjallib-0.1.6 → pyjallib-0.1.7}/uv.lock +0 -0
@@ -120,3 +120,50 @@ class AutoClavicle:
|
|
120
120
|
ikGoal.parent = autoClavicleRotHelper
|
121
121
|
|
122
122
|
return autoClavicleBones
|
123
|
+
|
124
|
+
def get_bones(self, inClavicle, inUpperArm):
|
125
|
+
"""
|
126
|
+
자동 쇄골 뼈를 가져옵니다.
|
127
|
+
|
128
|
+
Args:
|
129
|
+
inClavicle: 쇄골 뼈 객체
|
130
|
+
inUpperArm: 상완 뼈 객체
|
131
|
+
|
132
|
+
Returns:
|
133
|
+
자동 쇄골 뼈대 배열
|
134
|
+
"""
|
135
|
+
clavicleChildren = [item for item in self.bone.get_every_children(inClavicle) if rt.classOf(item) == rt.BoneGeometry]
|
136
|
+
upperArmChildren = [item for item in self.bone.get_every_children(inUpperArm) if rt.classOf(item) == rt.BoneGeometry]
|
137
|
+
returnVal = []
|
138
|
+
for item in clavicleChildren:
|
139
|
+
if item not in returnVal:
|
140
|
+
returnVal.append(item)
|
141
|
+
for item in upperArmChildren:
|
142
|
+
if item not in returnVal:
|
143
|
+
returnVal.append(item)
|
144
|
+
|
145
|
+
return returnVal
|
146
|
+
|
147
|
+
def get_helpers(self, inClavicle, inUpperArm):
|
148
|
+
"""
|
149
|
+
자동 쇄골 헬퍼를 가져옵니다.
|
150
|
+
|
151
|
+
Args:
|
152
|
+
inClavicle: 쇄골 뼈 객체
|
153
|
+
inUpperArm: 상완 뼈 객체
|
154
|
+
|
155
|
+
Returns:
|
156
|
+
자동 쇄골 헬퍼 배열
|
157
|
+
"""
|
158
|
+
clavicleChildren = [item for item in self.bone.get_every_children(inClavicle) if rt.classOf(item) == rt.Point]
|
159
|
+
upperArmChildren = [item for item in self.bone.get_every_children(inUpperArm) if rt.classOf(item) == rt.Point]
|
160
|
+
returnVal = []
|
161
|
+
for item in clavicleChildren:
|
162
|
+
if item not in returnVal:
|
163
|
+
returnVal.append(item)
|
164
|
+
for item in upperArmChildren:
|
165
|
+
if item not in returnVal:
|
166
|
+
returnVal.append(item)
|
167
|
+
|
168
|
+
return returnVal
|
169
|
+
|
@@ -68,6 +68,8 @@ class Header:
|
|
68
68
|
self.twistBone = TwistBone(nameService=self.name, animService=self.anim, constService=self.constraint, bipService=self.bip, boneService=self.bone)
|
69
69
|
self.groinBone = GroinBone(nameService=self.name, animService=self.anim, helperService=self.helper, constService=self.constraint, bipService=self.bip, boneService=self.bone, twistBoneService=self.twistBone)
|
70
70
|
self.autoClavicle = AutoClavicle(nameService=self.name, animService=self.anim, helperService=self.helper, boneService=self.bone, constraintService=self.constraint, bipService=self.bip)
|
71
|
+
|
72
|
+
self.tools = []
|
71
73
|
|
72
74
|
# 모듈 레벨에서 전역 인스턴스 생성
|
73
75
|
jal = Header.get_instance()
|
@@ -6,6 +6,8 @@
|
|
6
6
|
3ds Max에 특화된 네이밍 기능 (pymxs 의존)
|
7
7
|
"""
|
8
8
|
|
9
|
+
import os
|
10
|
+
|
9
11
|
from pymxs import runtime as rt
|
10
12
|
from pyjallib.naming import Naming
|
11
13
|
from pyjallib.namePart import NamePart, NamePartType
|
@@ -35,35 +37,9 @@ class Name(Naming):
|
|
35
37
|
# 사용자가 지정한 설정 파일 사용
|
36
38
|
self.load_from_config_file(configPath=configPath)
|
37
39
|
else:
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
["b", "Bip001"],
|
42
|
-
["SkinBone", "Biped"])
|
43
|
-
# Type 부분 (PREFIX 타입)
|
44
|
-
typePart = NamePart("Type", NamePartType.PREFIX,
|
45
|
-
["P", "Dum", "Exp", "IK", "T"],
|
46
|
-
["Parent", "Dummy", "ExposeTM", "IK", "Target"])
|
47
|
-
# Side 부분 (PREFIX 타입)
|
48
|
-
sidePart = NamePart("Side", NamePartType.PREFIX,
|
49
|
-
["L", "R"],
|
50
|
-
["Left", "Right"],
|
51
|
-
True)
|
52
|
-
# FrontBack 부분 (PREFIX 타입)
|
53
|
-
frontBackPart = NamePart("FrontBack", NamePartType.PREFIX,
|
54
|
-
["F", "B"],
|
55
|
-
["Front", "Back"],
|
56
|
-
True)
|
57
|
-
# RealName 부분 (REALNAME 타입)
|
58
|
-
realNamePart = NamePart("RealName", NamePartType.REALNAME, [], [])
|
59
|
-
# Index 부분 (INDEX 타입)
|
60
|
-
indexPart = NamePart("Index", NamePartType.INDEX, [], [])
|
61
|
-
# Nub 부분 (SUFFIX 타입)
|
62
|
-
nubPart = NamePart("Nub", NamePartType.SUFFIX,
|
63
|
-
["Nub"],
|
64
|
-
["Nub"])
|
65
|
-
# 기본 순서대로 설정
|
66
|
-
self._nameParts = [basePart, typePart, sidePart, frontBackPart, realNamePart, indexPart, nubPart]
|
40
|
+
configDir = os.path.join(os.path.dirname(__file__), "ConfigFiles")
|
41
|
+
nameConfigDir = os.path.join(configDir, "3DSMaxNamingConfig.json")
|
42
|
+
self.load_from_config_file(configPath=nameConfigDir)
|
67
43
|
|
68
44
|
# NamePart 직접 액세스 메소드들
|
69
45
|
# get_<NamePart 이름>_values 메소드들
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|