@volter/editor-blender 0.1.0
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.
- package/LICENSE +1409 -0
- package/README.md +17 -0
- package/contributions/blender-header-menus.tsx +483 -0
- package/contributions/blender-icon-trace.mjs +403 -0
- package/contributions/blender-icons.source.mjs +2925 -0
- package/contributions/blender-node-editor.document.tsx +1402 -0
- package/contributions/blender-node-geometry.ts +1138 -0
- package/contributions/blender-node-panels.source.mjs +485 -0
- package/contributions/blender-outliner-authoring.ts +1729 -0
- package/contributions/blender-outliner-model.ts +389 -0
- package/contributions/blender-palette.source.mjs +319 -0
- package/contributions/blender-properties-model.ts +351 -0
- package/contributions/blender-properties-tab.tsx +100 -0
- package/contributions/blender-properties-view.tsx +1191 -0
- package/contributions/blender-runtime-skin.ts +619 -0
- package/contributions/blender-runtime.document.tsx +232 -0
- package/contributions/blender-timeline-geometry.ts +323 -0
- package/contributions/blender-timeline.document.tsx +1056 -0
- package/contributions/blender-uv-editor.document.tsx +483 -0
- package/contributions/blender-uv-geometry.ts +305 -0
- package/contributions/blender-version.status.tsx +93 -0
- package/contributions/blender.command.ts +102 -0
- package/contributions/blender.icons.json +1247 -0
- package/contributions/blender.icons.traced.json +1561 -0
- package/contributions/blender.keymap.ts +39 -0
- package/contributions/blender.node-panels.json +2436 -0
- package/contributions/blender.palette.json +93 -0
- package/contributions/blender.status.tsx +263 -0
- package/contributions/blender.style.ts +271 -0
- package/contributions/model.layout.ts +53 -0
- package/contributions/models.finder.ts +59 -0
- package/contributions/properties-bone-constraints.inspector.tsx +50 -0
- package/contributions/properties-bone.inspector.tsx +184 -0
- package/contributions/properties-collection.inspector.tsx +96 -0
- package/contributions/properties-constraints.inspector.tsx +69 -0
- package/contributions/properties-data.inspector.tsx +229 -0
- package/contributions/properties-material.inspector.tsx +121 -0
- package/contributions/properties-modifiers.inspector.tsx +74 -0
- package/contributions/properties-object.inspector.tsx +215 -0
- package/contributions/properties-output.inspector.tsx +210 -0
- package/contributions/properties-particles.inspector.tsx +494 -0
- package/contributions/properties-physics.inspector.tsx +614 -0
- package/contributions/properties-render.inspector.tsx +446 -0
- package/contributions/properties-scene.inspector.tsx +174 -0
- package/contributions/properties-texture.inspector.tsx +300 -0
- package/contributions/properties-view-layer.inspector.tsx +145 -0
- package/contributions/properties-world.inspector.tsx +130 -0
- package/contributions/sculpt.layout.ts +25 -0
- package/contributions/shading.layout.ts +99 -0
- package/contributions/texture.layout.ts +16 -0
- package/contributions/uv-editing.layout.ts +93 -0
- package/host/blender-runtime-host.ts +1256 -0
- package/package.json +77 -0
- package/src/layouts.tsx +48 -0
- package/src/looks.ts +14 -0
- package/src/node-view-state.ts +125 -0
- package/src/timeline-view-state.ts +154 -0
- package/src/uv-view-state.ts +125 -0
|
@@ -0,0 +1,614 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BLENDER'S PHYSICS TAB, as a Properties section (WORK.md §Blender in the tab
|
|
3
|
+
* is Blender, "Inspection parity", I2). Blender's own panels over the RNA
|
|
4
|
+
* door, with the generic view beneath under "All properties".
|
|
5
|
+
*
|
|
6
|
+
* THE SPECIFICATION IS SEVEN FILES, not one: `properties_physics_common.py`
|
|
7
|
+
* carries the tab's own header block, and `properties_physics_rigidbody.py`,
|
|
8
|
+
* `_rigidbody_constraint.py`, `_cloth.py`, `_softbody.py`, `_field.py`
|
|
9
|
+
* (Force Fields AND Collision), `_fluid.py` and `_dynamicpaint.py` each carry
|
|
10
|
+
* one simulation. Each panel below cites its file and line. Blender's UI
|
|
11
|
+
* layer is never run, ported or recorded.
|
|
12
|
+
*
|
|
13
|
+
* THE "ENABLE BUTTONS" ROW IS NOT DRAWN, AND WHAT IT SAYS STILL IS.
|
|
14
|
+
* `PHYSICS_PT_add` (`properties_physics_common.py:55`) is a grid of
|
|
15
|
+
* `object.modifier_add` / `rigidbody.object_add` OPERATORS — editing, not
|
|
16
|
+
* inspection (ARCHITECTURE-CORE §Blender north star), and this view draws
|
|
17
|
+
* properties. What that row COMMUNICATES is which simulations the object has,
|
|
18
|
+
* and that is exactly which panels stand here: the context door resolves a
|
|
19
|
+
* path per simulation the way `physics_add`/`physics_add_special` test for
|
|
20
|
+
* one — the data for `obj.rigid_body`, `obj.rigid_body_constraint`,
|
|
21
|
+
* `obj.soft_body`, `obj.collision` and `obj.field`, and a MODIFIER of the
|
|
22
|
+
* right type for cloth, fluid and dynamic paint (Blender's `context.cloth` is
|
|
23
|
+
* the ClothModifier, and the panels read its `settings` structs). An absent
|
|
24
|
+
* simulation is an absent path and its panels do not draw.
|
|
25
|
+
*
|
|
26
|
+
* FLUID AND DYNAMIC PAINT STOP AT THEIR TYPE. Both are a modifier whose whole
|
|
27
|
+
* panel set is per-`fluid_type` / per-`ui_type` — domain, flow and effector
|
|
28
|
+
* are three different property surfaces, and dynamic paint's canvas splits
|
|
29
|
+
* again per surface. What stands here is the modifier's type row and the
|
|
30
|
+
* pointer to the settings struct the type selects, which drills into the
|
|
31
|
+
* generic view; transcribing three or four alternative panel sets each is the
|
|
32
|
+
* machinery the generic view exists to make unnecessary. Stated, not
|
|
33
|
+
* silently partial.
|
|
34
|
+
*
|
|
35
|
+
* It stands when: `buttons_context_path_object` — Physics shares Object's
|
|
36
|
+
* path, so the engine grants it whenever it grants Object. It is
|
|
37
|
+
* context-gated rather than standing because the Properties editor follows
|
|
38
|
+
* the ACTIVE OBJECT, not the row that was clicked.
|
|
39
|
+
*/
|
|
40
|
+
import { blenderPropertiesTabMatch, blenderPropertiesTabSection } from './blender-properties-tab';
|
|
41
|
+
import type { BlenderCuratedPanel } from './blender-properties-view';
|
|
42
|
+
|
|
43
|
+
const CURATED: readonly BlenderCuratedPanel[] = [
|
|
44
|
+
{
|
|
45
|
+
// PHYSICS_PT_rigid_body, properties_physics_rigidbody.py:22.
|
|
46
|
+
title: 'Rigid Body',
|
|
47
|
+
from: 'Rigid Body',
|
|
48
|
+
properties: ['type'],
|
|
49
|
+
sub: [
|
|
50
|
+
// PHYSICS_PT_rigid_body_settings, :60.
|
|
51
|
+
{ title: 'Settings', from: 'Rigid Body', properties: ['mass', 'kinematic', 'enabled'] },
|
|
52
|
+
{
|
|
53
|
+
// PHYSICS_PT_rigid_body_collisions, :96.
|
|
54
|
+
title: 'Collisions',
|
|
55
|
+
from: 'Rigid Body',
|
|
56
|
+
properties: ['collision_shape', 'mesh_source', 'use_deform'],
|
|
57
|
+
sub: [
|
|
58
|
+
// PHYSICS_PT_rigid_body_collisions_surface, :149.
|
|
59
|
+
{
|
|
60
|
+
title: 'Surface Response',
|
|
61
|
+
closed: true,
|
|
62
|
+
from: 'Rigid Body',
|
|
63
|
+
properties: ['friction', 'restitution'],
|
|
64
|
+
},
|
|
65
|
+
// PHYSICS_PT_rigid_body_collisions_sensitivity, :181.
|
|
66
|
+
{
|
|
67
|
+
title: 'Sensitivity',
|
|
68
|
+
closed: true,
|
|
69
|
+
from: 'Rigid Body',
|
|
70
|
+
properties: ['use_margin', 'collision_margin'],
|
|
71
|
+
},
|
|
72
|
+
// PHYSICS_PT_rigid_body_collisions_collections, :222.
|
|
73
|
+
{
|
|
74
|
+
title: 'Collections',
|
|
75
|
+
closed: true,
|
|
76
|
+
from: 'Rigid Body',
|
|
77
|
+
properties: ['collision_collections'],
|
|
78
|
+
},
|
|
79
|
+
],
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
// PHYSICS_PT_rigid_body_dynamics, :248 — `obj.rigid_body.type ==
|
|
83
|
+
// 'ACTIVE'` is in its poll (:277).
|
|
84
|
+
title: 'Dynamics',
|
|
85
|
+
closed: true,
|
|
86
|
+
from: 'Rigid Body',
|
|
87
|
+
when: [{ from: 'Rigid Body', property: 'type', is: ['ACTIVE'] }],
|
|
88
|
+
properties: ['linear_damping', 'angular_damping'],
|
|
89
|
+
sub: [
|
|
90
|
+
// PHYSICS_PT_rigid_body_dynamics_deactivation, :287.
|
|
91
|
+
{
|
|
92
|
+
title: 'Deactivation',
|
|
93
|
+
closed: true,
|
|
94
|
+
from: 'Rigid Body',
|
|
95
|
+
properties: [
|
|
96
|
+
'use_deactivation',
|
|
97
|
+
'use_start_deactivated',
|
|
98
|
+
'deactivate_linear_velocity',
|
|
99
|
+
'deactivate_angular_velocity',
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
// PHYSICS_PT_rigid_body_constraint,
|
|
108
|
+
// properties_physics_rigidbody_constraint.py:16.
|
|
109
|
+
title: 'Rigid Body Constraint',
|
|
110
|
+
from: 'Rigid Body Constraint',
|
|
111
|
+
properties: ['type'],
|
|
112
|
+
sub: [
|
|
113
|
+
// _settings, :39.
|
|
114
|
+
{
|
|
115
|
+
title: 'Settings',
|
|
116
|
+
from: 'Rigid Body Constraint',
|
|
117
|
+
properties: ['enabled', 'disable_collisions', 'use_breaking', 'breaking_threshold'],
|
|
118
|
+
},
|
|
119
|
+
// _objects, :74.
|
|
120
|
+
{
|
|
121
|
+
title: 'Objects',
|
|
122
|
+
from: 'Rigid Body Constraint',
|
|
123
|
+
properties: ['object1', 'object2'],
|
|
124
|
+
},
|
|
125
|
+
// _override_iterations, :99.
|
|
126
|
+
{
|
|
127
|
+
title: 'Override Iterations',
|
|
128
|
+
closed: true,
|
|
129
|
+
from: 'Rigid Body Constraint',
|
|
130
|
+
properties: ['use_override_solver_iterations', 'solver_iterations'],
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
// _limits, :129 — an empty body with a Linear (:152) and an Angular
|
|
134
|
+
// (:215) child.
|
|
135
|
+
title: 'Limits',
|
|
136
|
+
closed: true,
|
|
137
|
+
from: 'Rigid Body Constraint',
|
|
138
|
+
properties: [],
|
|
139
|
+
sub: [
|
|
140
|
+
{
|
|
141
|
+
title: 'Linear',
|
|
142
|
+
from: 'Rigid Body Constraint',
|
|
143
|
+
properties: [
|
|
144
|
+
'use_limit_lin_x',
|
|
145
|
+
'limit_lin_x_lower',
|
|
146
|
+
'limit_lin_x_upper',
|
|
147
|
+
'use_limit_lin_y',
|
|
148
|
+
'limit_lin_y_lower',
|
|
149
|
+
'limit_lin_y_upper',
|
|
150
|
+
'use_limit_lin_z',
|
|
151
|
+
'limit_lin_z_lower',
|
|
152
|
+
'limit_lin_z_upper',
|
|
153
|
+
],
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
title: 'Angular',
|
|
157
|
+
from: 'Rigid Body Constraint',
|
|
158
|
+
properties: [
|
|
159
|
+
'use_limit_ang_x',
|
|
160
|
+
'limit_ang_x_lower',
|
|
161
|
+
'limit_ang_x_upper',
|
|
162
|
+
'use_limit_ang_y',
|
|
163
|
+
'limit_ang_y_lower',
|
|
164
|
+
'limit_ang_y_upper',
|
|
165
|
+
'use_limit_ang_z',
|
|
166
|
+
'limit_ang_z_lower',
|
|
167
|
+
'limit_ang_z_upper',
|
|
168
|
+
],
|
|
169
|
+
},
|
|
170
|
+
],
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
// _motor, :287, with its Linear (:354) and Angular (:310) children.
|
|
174
|
+
title: 'Motor',
|
|
175
|
+
closed: true,
|
|
176
|
+
from: 'Rigid Body Constraint',
|
|
177
|
+
properties: [],
|
|
178
|
+
sub: [
|
|
179
|
+
{
|
|
180
|
+
title: 'Linear',
|
|
181
|
+
from: 'Rigid Body Constraint',
|
|
182
|
+
properties: ['use_motor_lin', 'motor_lin_target_velocity', 'motor_lin_max_impulse'],
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
title: 'Angular',
|
|
186
|
+
from: 'Rigid Body Constraint',
|
|
187
|
+
properties: ['use_motor_ang', 'motor_ang_target_velocity', 'motor_ang_max_impulse'],
|
|
188
|
+
},
|
|
189
|
+
],
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
// _springs, :396 — the per-axis stiffness/damping rows are its two
|
|
193
|
+
// children and stay in the generic view beneath.
|
|
194
|
+
title: 'Springs',
|
|
195
|
+
closed: true,
|
|
196
|
+
from: 'Rigid Body Constraint',
|
|
197
|
+
properties: ['spring_type'],
|
|
198
|
+
},
|
|
199
|
+
],
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
// PHYSICS_PT_cloth, properties_physics_cloth.py:38 — `cloth =
|
|
203
|
+
// md.settings` (:58), which the door names as this path.
|
|
204
|
+
title: 'Cloth',
|
|
205
|
+
from: 'Cloth',
|
|
206
|
+
properties: ['quality', 'time_scale'],
|
|
207
|
+
sub: [
|
|
208
|
+
{
|
|
209
|
+
// _physical_properties, :66.
|
|
210
|
+
title: 'Physical Properties',
|
|
211
|
+
from: 'Cloth',
|
|
212
|
+
properties: ['mass', 'air_damping', 'bending_model'],
|
|
213
|
+
sub: [
|
|
214
|
+
// _stiffness, :94.
|
|
215
|
+
{
|
|
216
|
+
title: 'Stiffness',
|
|
217
|
+
from: 'Cloth',
|
|
218
|
+
properties: [
|
|
219
|
+
'tension_stiffness',
|
|
220
|
+
'compression_stiffness',
|
|
221
|
+
'shear_stiffness',
|
|
222
|
+
'bending_stiffness',
|
|
223
|
+
],
|
|
224
|
+
},
|
|
225
|
+
// _damping, :129.
|
|
226
|
+
{
|
|
227
|
+
title: 'Damping',
|
|
228
|
+
from: 'Cloth',
|
|
229
|
+
properties: [
|
|
230
|
+
'tension_damping',
|
|
231
|
+
'compression_damping',
|
|
232
|
+
'shear_damping',
|
|
233
|
+
'bending_damping',
|
|
234
|
+
],
|
|
235
|
+
},
|
|
236
|
+
// _internal_springs, :164 — `use_internal_springs` is the header.
|
|
237
|
+
{
|
|
238
|
+
title: 'Internal Springs',
|
|
239
|
+
closed: true,
|
|
240
|
+
from: 'Cloth',
|
|
241
|
+
properties: [
|
|
242
|
+
'use_internal_springs',
|
|
243
|
+
'internal_spring_max_length',
|
|
244
|
+
'internal_spring_max_diversion',
|
|
245
|
+
'internal_spring_normal_check',
|
|
246
|
+
'internal_tension_stiffness',
|
|
247
|
+
'internal_compression_stiffness',
|
|
248
|
+
'internal_tension_stiffness_max',
|
|
249
|
+
'internal_compression_stiffness_max',
|
|
250
|
+
'vertex_group_intern',
|
|
251
|
+
],
|
|
252
|
+
},
|
|
253
|
+
// _pressure, :210 — `use_pressure` is the header.
|
|
254
|
+
{
|
|
255
|
+
title: 'Pressure',
|
|
256
|
+
closed: true,
|
|
257
|
+
from: 'Cloth',
|
|
258
|
+
properties: [
|
|
259
|
+
'use_pressure',
|
|
260
|
+
'uniform_pressure_force',
|
|
261
|
+
'use_pressure_volume',
|
|
262
|
+
'target_volume',
|
|
263
|
+
'pressure_factor',
|
|
264
|
+
'fluid_density',
|
|
265
|
+
'vertex_group_pressure',
|
|
266
|
+
],
|
|
267
|
+
},
|
|
268
|
+
],
|
|
269
|
+
},
|
|
270
|
+
// _cache, :257 — `point_cache_ui(self, md.point_cache, …)`, and the
|
|
271
|
+
// point cache is the MODIFIER's, not the settings'.
|
|
272
|
+
{ title: 'Cache', closed: true, from: 'Cloth Modifier', properties: ['point_cache'] },
|
|
273
|
+
// _shape, :272.
|
|
274
|
+
{
|
|
275
|
+
title: 'Shape',
|
|
276
|
+
closed: true,
|
|
277
|
+
from: 'Cloth',
|
|
278
|
+
properties: [
|
|
279
|
+
'vertex_group_mass',
|
|
280
|
+
'pin_stiffness',
|
|
281
|
+
'use_sewing_springs',
|
|
282
|
+
'sewing_force_max',
|
|
283
|
+
'shrink_min',
|
|
284
|
+
'use_dynamic_mesh',
|
|
285
|
+
'rest_shape_key',
|
|
286
|
+
],
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
// _collision, :326 — `collision_quality` is the cloth SETTINGS', the
|
|
290
|
+
// two children read `md.collision_settings`.
|
|
291
|
+
title: 'Collisions',
|
|
292
|
+
closed: true,
|
|
293
|
+
from: 'Cloth',
|
|
294
|
+
properties: ['collision_quality'],
|
|
295
|
+
sub: [
|
|
296
|
+
// _object_collision, :351.
|
|
297
|
+
{
|
|
298
|
+
title: 'Object Collisions',
|
|
299
|
+
from: 'Cloth Collisions',
|
|
300
|
+
properties: [
|
|
301
|
+
'use_collision',
|
|
302
|
+
'distance_min',
|
|
303
|
+
'impulse_clamp',
|
|
304
|
+
'vertex_group_object_collisions',
|
|
305
|
+
'collection',
|
|
306
|
+
],
|
|
307
|
+
},
|
|
308
|
+
// _self_collision, :391.
|
|
309
|
+
{
|
|
310
|
+
title: 'Self Collisions',
|
|
311
|
+
from: 'Cloth Collisions',
|
|
312
|
+
properties: [
|
|
313
|
+
'use_self_collision',
|
|
314
|
+
'self_friction',
|
|
315
|
+
'self_distance_min',
|
|
316
|
+
'self_impulse_clamp',
|
|
317
|
+
],
|
|
318
|
+
},
|
|
319
|
+
],
|
|
320
|
+
},
|
|
321
|
+
// _field_weights, :489 — `effector_weights_ui` over the settings' own.
|
|
322
|
+
{
|
|
323
|
+
title: 'Field Weights',
|
|
324
|
+
closed: true,
|
|
325
|
+
from: 'Cloth',
|
|
326
|
+
properties: ['effector_weights'],
|
|
327
|
+
},
|
|
328
|
+
],
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
// PHYSICS_PT_softbody, properties_physics_softbody.py:31 — `softbody =
|
|
332
|
+
// md.settings`, which is `obj.soft_body`.
|
|
333
|
+
title: 'Soft Body',
|
|
334
|
+
from: 'Soft Body',
|
|
335
|
+
properties: ['collision_collection'],
|
|
336
|
+
sub: [
|
|
337
|
+
// _object, :49.
|
|
338
|
+
{
|
|
339
|
+
title: 'Object',
|
|
340
|
+
closed: true,
|
|
341
|
+
from: 'Soft Body',
|
|
342
|
+
properties: ['friction', 'mass', 'vertex_group_mass'],
|
|
343
|
+
},
|
|
344
|
+
// _simulation, :81.
|
|
345
|
+
{ title: 'Simulation', closed: true, from: 'Soft Body', properties: ['speed'] },
|
|
346
|
+
// _goal, :118 — `use_goal` is the header checkbox.
|
|
347
|
+
{
|
|
348
|
+
title: 'Goal',
|
|
349
|
+
closed: true,
|
|
350
|
+
from: 'Soft Body',
|
|
351
|
+
properties: ['use_goal', 'vertex_group_goal'],
|
|
352
|
+
sub: [
|
|
353
|
+
// _goal_strengths, :147.
|
|
354
|
+
{
|
|
355
|
+
title: 'Strengths',
|
|
356
|
+
closed: true,
|
|
357
|
+
from: 'Soft Body',
|
|
358
|
+
properties: ['goal_default', 'goal_min', 'goal_max'],
|
|
359
|
+
},
|
|
360
|
+
// _goal_settings, :177.
|
|
361
|
+
{
|
|
362
|
+
title: 'Settings',
|
|
363
|
+
closed: true,
|
|
364
|
+
from: 'Soft Body',
|
|
365
|
+
properties: ['goal_spring', 'goal_friction'],
|
|
366
|
+
},
|
|
367
|
+
],
|
|
368
|
+
},
|
|
369
|
+
// _edge, :204 — `use_edges` is the header checkbox.
|
|
370
|
+
{
|
|
371
|
+
title: 'Edges',
|
|
372
|
+
closed: true,
|
|
373
|
+
from: 'Soft Body',
|
|
374
|
+
properties: [
|
|
375
|
+
'use_edges',
|
|
376
|
+
'vertex_group_spring',
|
|
377
|
+
'pull',
|
|
378
|
+
'push',
|
|
379
|
+
'damping',
|
|
380
|
+
'plastic',
|
|
381
|
+
'bend',
|
|
382
|
+
'spring_length',
|
|
383
|
+
'use_edge_collision',
|
|
384
|
+
'use_face_collision',
|
|
385
|
+
],
|
|
386
|
+
sub: [
|
|
387
|
+
// _edge_aerodynamics, :259.
|
|
388
|
+
{
|
|
389
|
+
title: 'Aerodynamics',
|
|
390
|
+
closed: true,
|
|
391
|
+
from: 'Soft Body',
|
|
392
|
+
properties: ['aerodynamics_type', 'aero'],
|
|
393
|
+
},
|
|
394
|
+
// _edge_stiffness, :286.
|
|
395
|
+
{
|
|
396
|
+
title: 'Stiffness',
|
|
397
|
+
closed: true,
|
|
398
|
+
from: 'Soft Body',
|
|
399
|
+
properties: ['use_stiff_quads', 'shear'],
|
|
400
|
+
},
|
|
401
|
+
],
|
|
402
|
+
},
|
|
403
|
+
// _collision, :314 — `use_self_collision` is the header checkbox.
|
|
404
|
+
{
|
|
405
|
+
title: 'Self Collision',
|
|
406
|
+
closed: true,
|
|
407
|
+
from: 'Soft Body',
|
|
408
|
+
properties: [
|
|
409
|
+
'use_self_collision',
|
|
410
|
+
'collision_type',
|
|
411
|
+
'ball_size',
|
|
412
|
+
'ball_stiff',
|
|
413
|
+
'ball_damp',
|
|
414
|
+
],
|
|
415
|
+
},
|
|
416
|
+
{
|
|
417
|
+
// _solver, :353.
|
|
418
|
+
title: 'Solver',
|
|
419
|
+
closed: true,
|
|
420
|
+
from: 'Soft Body',
|
|
421
|
+
properties: ['step_min', 'step_max', 'use_auto_step', 'error_threshold'],
|
|
422
|
+
sub: [
|
|
423
|
+
// _solver_diagnostics, :382.
|
|
424
|
+
{
|
|
425
|
+
title: 'Diagnostics',
|
|
426
|
+
closed: true,
|
|
427
|
+
from: 'Soft Body',
|
|
428
|
+
properties: ['use_diagnose', 'use_estimate_matrix'],
|
|
429
|
+
},
|
|
430
|
+
// _solver_helpers, :405.
|
|
431
|
+
{
|
|
432
|
+
title: 'Helpers',
|
|
433
|
+
closed: true,
|
|
434
|
+
from: 'Soft Body',
|
|
435
|
+
properties: ['choke', 'fuzzy'],
|
|
436
|
+
},
|
|
437
|
+
],
|
|
438
|
+
},
|
|
439
|
+
// _field_weights, :432.
|
|
440
|
+
{
|
|
441
|
+
title: 'Field Weights',
|
|
442
|
+
closed: true,
|
|
443
|
+
from: 'Soft Body',
|
|
444
|
+
properties: ['effector_weights'],
|
|
445
|
+
},
|
|
446
|
+
// _cache, :103 — the modifier's, as Cloth's is.
|
|
447
|
+
{ title: 'Cache', closed: true, from: 'Soft Body Modifier', properties: ['point_cache'] },
|
|
448
|
+
],
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
// PHYSICS_PT_field, properties_physics_field.py:33.
|
|
452
|
+
title: 'Force Fields',
|
|
453
|
+
from: 'Force Field',
|
|
454
|
+
properties: ['type'],
|
|
455
|
+
sub: [
|
|
456
|
+
{
|
|
457
|
+
// _field_settings, :58 — one draw function for every field type; the
|
|
458
|
+
// rows a type does not carry are simply not on its RNA.
|
|
459
|
+
title: 'Settings',
|
|
460
|
+
from: 'Force Field',
|
|
461
|
+
properties: [
|
|
462
|
+
'shape',
|
|
463
|
+
'strength',
|
|
464
|
+
'flow',
|
|
465
|
+
'apply_to_location',
|
|
466
|
+
'apply_to_rotation',
|
|
467
|
+
'source_object',
|
|
468
|
+
'use_smoke_density',
|
|
469
|
+
'falloff_power',
|
|
470
|
+
'use_max_distance',
|
|
471
|
+
'distance_max',
|
|
472
|
+
'texture_mode',
|
|
473
|
+
'texture_nabla',
|
|
474
|
+
'use_object_coords',
|
|
475
|
+
'use_2d_force',
|
|
476
|
+
'guide_free',
|
|
477
|
+
'use_guide_path_add',
|
|
478
|
+
'use_guide_path_weight',
|
|
479
|
+
'guide_clump_amount',
|
|
480
|
+
'guide_clump_shape',
|
|
481
|
+
'guide_minimum',
|
|
482
|
+
],
|
|
483
|
+
sub: [
|
|
484
|
+
{
|
|
485
|
+
// _field_settings_kink, :149 — `ob.field.type == 'GUIDE'` (:157).
|
|
486
|
+
title: 'Kink',
|
|
487
|
+
from: 'Force Field',
|
|
488
|
+
when: [{ from: 'Force Field', property: 'type', is: ['GUIDE'] }],
|
|
489
|
+
properties: [
|
|
490
|
+
'guide_kink_type',
|
|
491
|
+
'guide_kink_axis',
|
|
492
|
+
'guide_kink_frequency',
|
|
493
|
+
'guide_kink_shape',
|
|
494
|
+
'guide_kink_amplitude',
|
|
495
|
+
],
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
// _field_settings_texture_select, :187 — `type == 'TEXTURE'`.
|
|
499
|
+
title: 'Texture',
|
|
500
|
+
from: 'Force Field',
|
|
501
|
+
when: [{ from: 'Force Field', property: 'type', is: ['TEXTURE'] }],
|
|
502
|
+
properties: ['texture'],
|
|
503
|
+
},
|
|
504
|
+
],
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
// _field_falloff, :213 — `type not in {'NONE', 'GUIDE'}` (:221).
|
|
508
|
+
title: 'Falloff',
|
|
509
|
+
from: 'Force Field',
|
|
510
|
+
when: [{ from: 'Force Field', property: 'type', isNot: ['NONE', 'GUIDE'] }],
|
|
511
|
+
properties: ['falloff_type'],
|
|
512
|
+
sub: [
|
|
513
|
+
{
|
|
514
|
+
// _field_falloff_angular, :242 — `falloff_type == 'CONE'`.
|
|
515
|
+
title: 'Angular',
|
|
516
|
+
from: 'Force Field',
|
|
517
|
+
when: [{ from: 'Force Field', property: 'falloff_type', is: ['CONE'] }],
|
|
518
|
+
properties: [
|
|
519
|
+
'radial_falloff',
|
|
520
|
+
'use_radial_min',
|
|
521
|
+
'radial_min',
|
|
522
|
+
'use_radial_max',
|
|
523
|
+
'radial_max',
|
|
524
|
+
],
|
|
525
|
+
},
|
|
526
|
+
{
|
|
527
|
+
// _field_falloff_radial, :285 — `falloff_type == 'TUBE'`.
|
|
528
|
+
title: 'Radial',
|
|
529
|
+
from: 'Force Field',
|
|
530
|
+
when: [{ from: 'Force Field', property: 'falloff_type', is: ['TUBE'] }],
|
|
531
|
+
properties: [
|
|
532
|
+
'radial_falloff',
|
|
533
|
+
'use_radial_min',
|
|
534
|
+
'radial_min',
|
|
535
|
+
'use_radial_max',
|
|
536
|
+
'radial_max',
|
|
537
|
+
],
|
|
538
|
+
},
|
|
539
|
+
],
|
|
540
|
+
},
|
|
541
|
+
],
|
|
542
|
+
},
|
|
543
|
+
{
|
|
544
|
+
// PHYSICS_PT_collision, properties_physics_field.py:334 — `settings =
|
|
545
|
+
// md.settings`, which is `obj.collision`. `use` is the header checkbox
|
|
546
|
+
// drawn by `PHYSICS_PT_add` (`properties_physics_common.py:81`).
|
|
547
|
+
title: 'Collision',
|
|
548
|
+
from: 'Collision',
|
|
549
|
+
properties: ['use', 'absorption'],
|
|
550
|
+
sub: [
|
|
551
|
+
// _collision_particle, :368.
|
|
552
|
+
{
|
|
553
|
+
title: 'Particle',
|
|
554
|
+
from: 'Collision',
|
|
555
|
+
properties: [
|
|
556
|
+
'permeability',
|
|
557
|
+
'stickiness',
|
|
558
|
+
'use_particle_kill',
|
|
559
|
+
'damping_factor',
|
|
560
|
+
'damping_random',
|
|
561
|
+
'friction_factor',
|
|
562
|
+
'friction_random',
|
|
563
|
+
],
|
|
564
|
+
},
|
|
565
|
+
// _collision_softbody, :418.
|
|
566
|
+
{
|
|
567
|
+
title: 'Softbody & Cloth',
|
|
568
|
+
from: 'Collision',
|
|
569
|
+
properties: [
|
|
570
|
+
'damping',
|
|
571
|
+
'thickness_outer',
|
|
572
|
+
'thickness_inner',
|
|
573
|
+
'cloth_friction',
|
|
574
|
+
'use_culling',
|
|
575
|
+
'use_normal',
|
|
576
|
+
],
|
|
577
|
+
},
|
|
578
|
+
],
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
// properties_physics_fluid.py — see the header for why this stops at the
|
|
582
|
+
// type and the settings pointer.
|
|
583
|
+
title: 'Fluid',
|
|
584
|
+
from: 'Fluid',
|
|
585
|
+
properties: ['fluid_type', 'domain_settings', 'flow_settings', 'effector_settings'],
|
|
586
|
+
},
|
|
587
|
+
{
|
|
588
|
+
// properties_physics_dynamicpaint.py, same reading.
|
|
589
|
+
title: 'Dynamic Paint',
|
|
590
|
+
from: 'Dynamic Paint',
|
|
591
|
+
properties: ['ui_type', 'canvas_settings', 'brush_settings'],
|
|
592
|
+
},
|
|
593
|
+
];
|
|
594
|
+
|
|
595
|
+
const TAB = { id: 'physics', curated: CURATED } as const;
|
|
596
|
+
|
|
597
|
+
export const point = 'selection.inspector';
|
|
598
|
+
export const title = 'Physics';
|
|
599
|
+
/** `blender.icons.json` — Blender's own mark, TRACED from
|
|
600
|
+
* `release/datafiles/icons_svg/` at the engine's pin (the icon this tab draws
|
|
601
|
+
* is named in `buttons_context_items`, `makesrna/intern/rna_space.cc:579`),
|
|
602
|
+
* and tinted by the group `UI_icons.hh` declares it in. */
|
|
603
|
+
export const icon = 'properties-physics';
|
|
604
|
+
/** `ED_buttons_tabs_list` (`space_buttons.cc:218-252`) is the rail's order;
|
|
605
|
+
* these are that order, spaced so a tab can be inserted between two. */
|
|
606
|
+
export const order = 100;
|
|
607
|
+
/** THE RAIL'S GROUPS, from `ED_buttons_tabs_list`'s own `add_spacer()` calls
|
|
608
|
+
* (`space_buttons/space_buttons.cc:201-255`): the tool tab, then the scene
|
|
609
|
+
* group (Render, Output, View Layer, Scene, World), then Collection, then the
|
|
610
|
+
* object group (Object … Material), then Texture. The presentation draws a
|
|
611
|
+
* separator wherever this changes. */
|
|
612
|
+
export const railGroup = 'object';
|
|
613
|
+
export const match = blenderPropertiesTabMatch(TAB);
|
|
614
|
+
export default blenderPropertiesTabSection(TAB);
|