Blender V4.3
rna_modifier.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include <cfloat>
10#include <climits>
11#include <cstdlib>
12
13#include "DNA_armature_types.h"
14#include "DNA_cachefile_types.h"
16#include "DNA_lineart_types.h"
17#include "DNA_mesh_types.h"
18#include "DNA_modifier_types.h"
20#include "DNA_object_types.h"
21#include "DNA_scene_types.h"
22
23#include "MEM_guardedalloc.h"
24
25#include "BLT_translation.hh"
26
27#include "BKE_animsys.h"
28#include "BKE_attribute.hh"
30#include "BKE_curveprofile.h"
31#include "BKE_customdata.hh"
32#include "BKE_data_transfer.h"
33#include "BKE_dynamicpaint.h"
34#include "BKE_effect.h"
35#include "BKE_fluid.h" /* For BKE_fluid_modifier_free & BKE_fluid_modifier_create_type_data */
36#include "BKE_idprop.hh"
37#include "BKE_mesh_mapping.hh"
38#include "BKE_mesh_remap.hh"
39#include "BKE_multires.hh"
40#include "BKE_ocean.h"
41
42#include "RNA_access.hh"
43#include "RNA_define.hh"
44#include "RNA_enum_types.hh"
45
46#include "rna_internal.hh"
47
48#include "WM_api.hh"
49#include "WM_types.hh"
50
51#include "MOD_nodes.hh"
53
55 RNA_ENUM_ITEM_HEADING(N_("Modify"), nullptr),
57 "GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY",
58 ICON_MOD_VERTEX_WEIGHT,
59 "Vertex Weight Proximity",
60 "Generate vertex weights based on distance to object"},
61
62 RNA_ENUM_ITEM_HEADING(N_("Modify"), nullptr),
64 "DATA_TRANSFER",
65 ICON_MOD_DATA_TRANSFER,
66 "Data Transfer",
67 "Transfer several types of data (vertex groups, UV maps, vertex colors, custom normals) from "
68 "one mesh to another"},
70 "MESH_CACHE",
71 ICON_MOD_MESHDEFORM,
72 "Mesh Cache",
73 "Deform the mesh using an external frame-by-frame vertex transform cache"},
75 "MESH_SEQUENCE_CACHE",
76 ICON_MOD_MESHDEFORM,
77 "Mesh Sequence Cache",
78 "Deform the mesh or curve using an external mesh cache in Alembic format"},
80 "NORMAL_EDIT",
81 ICON_MOD_NORMALEDIT,
82 "Normal Edit",
83 "Modify the direction of the surface normals"},
85 "WEIGHTED_NORMAL",
86 ICON_MOD_NORMALEDIT,
87 "Weighted Normal",
88 "Modify the direction of the surface normals using a weighting method"},
90 "UV_PROJECT",
91 ICON_MOD_UVPROJECT,
92 "UV Project",
93 "Project the UV map coordinates from the negative Z axis of another object"},
95 "UV_WARP",
96 ICON_MOD_UVPROJECT,
97 "UV Warp",
98 "Transform the UV map using the difference between two objects"},
100 "VERTEX_WEIGHT_EDIT",
101 ICON_MOD_VERTEX_WEIGHT,
102 "Vertex Weight Edit",
103 "Modify of the weights of a vertex group"},
105 "VERTEX_WEIGHT_MIX",
106 ICON_MOD_VERTEX_WEIGHT,
107 "Vertex Weight Mix",
108 "Mix the weights of two vertex groups"},
110 "VERTEX_WEIGHT_PROXIMITY",
111 ICON_MOD_VERTEX_WEIGHT,
112 "Vertex Weight Proximity",
113 "Set the vertex group weights based on the distance to another target object"},
115 "GREASE_PENCIL_COLOR",
116 ICON_MOD_HUE_SATURATION,
117 "Hue/Saturation",
118 "Change hue/saturation/value of the strokes"},
120 "GREASE_PENCIL_TINT",
121 ICON_MOD_TINT,
122 "Tint",
123 "Tint the color of the strokes"},
125 "GREASE_PENCIL_OPACITY",
126 ICON_MOD_OPACITY,
127 "Opacity",
128 "Change the opacity of the strokes"},
130 "GREASE_PENCIL_VERTEX_WEIGHT_ANGLE",
131 ICON_MOD_VERTEX_WEIGHT,
132 "Vertex Weight Angle",
133 "Generate vertex weights based on stroke angle"},
135 "GREASE_PENCIL_TIME",
136 ICON_MOD_TIME,
137 "Time Offset",
138 "Offset keyframes"},
140 "GREASE_PENCIL_TEXTURE",
141 ICON_MOD_UVPROJECT,
142 "Texture Mapping",
143 "Change stroke UV texture values"},
144
145 RNA_ENUM_ITEM_HEADING(N_("Generate"), nullptr),
147 "ARRAY",
148 ICON_MOD_ARRAY,
149 "Array",
150 "Create copies of the shape with offsets"},
152 "BEVEL",
153 ICON_MOD_BEVEL,
154 "Bevel",
155 "Generate sloped corners by adding geometry to the mesh's edges or vertices"},
157 "BOOLEAN",
158 ICON_MOD_BOOLEAN,
159 "Boolean",
160 "Use another shape to cut, combine or perform a difference operation"},
162 "BUILD",
163 ICON_MOD_BUILD,
164 "Build",
165 "Cause the faces of the mesh object to appear or disappear one after the other over time"},
167 "DECIMATE",
168 ICON_MOD_DECIM,
169 "Decimate",
170 "Reduce the geometry density"},
172 "EDGE_SPLIT",
173 ICON_MOD_EDGESPLIT,
174 "Edge Split",
175 "Split away joined faces at the edges"},
176 {eModifierType_Nodes, "NODES", ICON_GEOMETRY_NODES, "Geometry Nodes", ""},
178 "MASK",
179 ICON_MOD_MASK,
180 "Mask",
181 "Dynamically hide vertices based on a vertex group or armature"},
183 "MIRROR",
184 ICON_MOD_MIRROR,
185 "Mirror",
186 "Mirror along the local X, Y and/or Z axes, over the object origin"},
188 "MESH_TO_VOLUME",
189 ICON_VOLUME_DATA,
190 "Mesh to Volume",
191 ""}, /* TODO: Use correct icon. */
193 "MULTIRES",
194 ICON_MOD_MULTIRES,
195 "Multiresolution",
196 "Subdivide the mesh in a way that allows editing the higher subdivision levels"},
198 "REMESH",
199 ICON_MOD_REMESH,
200 "Remesh",
201 "Generate new mesh topology based on the current shape"},
203 "SCREW",
204 ICON_MOD_SCREW,
205 "Screw",
206 "Lathe around an axis, treating the input mesh as a profile"},
208 "SKIN",
209 ICON_MOD_SKIN,
210 "Skin",
211 "Create a solid shape from vertices and edges, using the vertex radius to define the "
212 "thickness"},
213 {eModifierType_Solidify, "SOLIDIFY", ICON_MOD_SOLIDIFY, "Solidify", "Make the surface thick"},
215 "SUBSURF",
216 ICON_MOD_SUBSURF,
217 "Subdivision Surface",
218 "Split the faces into smaller parts, giving it a smoother appearance"},
220 "TRIANGULATE",
221 ICON_MOD_TRIANGULATE,
222 "Triangulate",
223 "Convert all polygons to triangles"},
225 "VOLUME_TO_MESH",
226 ICON_VOLUME_DATA,
227 "Volume to Mesh",
228 ""}, /* TODO: Use correct icon. */
230 "WELD",
231 ICON_AUTOMERGE_OFF,
232 "Weld",
233 "Find groups of vertices closer than dist and merge them together"},
235 "WIREFRAME",
236 ICON_MOD_WIREFRAME,
237 "Wireframe",
238 "Convert faces into thickened edges"},
240 "GREASE_PENCIL_ARRAY",
241 ICON_MOD_ARRAY,
242 "Array",
243 "Duplicate strokes into an array"},
245 "GREASE_PENCIL_BUILD",
246 ICON_MOD_BUILD,
247 "Build",
248 "Grease Pencil build modifier"},
250 "GREASE_PENCIL_LENGTH",
251 ICON_MOD_LENGTH,
252 "Length",
253 "Grease Pencil length modifier"},
255 "LINEART",
256 ICON_MOD_LINEART,
257 "Line Art",
258 "Generate Line Art from scene geometries"},
260 "GREASE_PENCIL_MIRROR",
261 ICON_MOD_MIRROR,
262 "Mirror",
263 "Duplicate strokes like a mirror"},
265 "GREASE_PENCIL_MULTIPLY",
266 ICON_GP_MULTIFRAME_EDITING,
267 "Multiple Strokes",
268 "Generate multiple strokes around original strokes"},
270 "GREASE_PENCIL_SIMPLIFY",
271 ICON_MOD_SIMPLIFY,
272 "Simplify",
273 "Simplify stroke reducing number of points"},
275 "GREASE_PENCIL_SUBDIV",
276 ICON_MOD_SMOOTH,
277 "Subdivide",
278 "Grease Pencil subdivide modifier"},
280 "GREASE_PENCIL_ENVELOPE",
281 ICON_MOD_ENVELOPE,
282 "Envelope",
283 "Create an envelope shape"},
285 "GREASE_PENCIL_OUTLINE",
286 ICON_MOD_OUTLINE,
287 "Outline",
288 "Convert stroke to outline"},
289
290 RNA_ENUM_ITEM_HEADING(N_("Deform"), nullptr),
292 "ARMATURE",
293 ICON_MOD_ARMATURE,
294 "Armature",
295 "Deform the shape using an armature object"},
297 "CAST",
298 ICON_MOD_CAST,
299 "Cast",
300 "Shift the shape towards a predefined primitive"},
301 {eModifierType_Curve, "CURVE", ICON_MOD_CURVE, "Curve", "Bend the mesh using a curve object"},
303 "DISPLACE",
304 ICON_MOD_DISPLACE,
305 "Displace",
306 "Offset vertices based on a texture"},
307 {eModifierType_Hook, "HOOK", ICON_HOOK, "Hook", "Deform specific points using another object"},
309 "LAPLACIANDEFORM",
310 ICON_MOD_MESHDEFORM,
311 "Laplacian Deform",
312 "Deform based a series of anchor points"},
314 "LATTICE",
315 ICON_MOD_LATTICE,
316 "Lattice",
317 "Deform using the shape of a lattice object"},
319 "MESH_DEFORM",
320 ICON_MOD_MESHDEFORM,
321 "Mesh Deform",
322 "Deform using a different mesh, which acts as a deformation cage"},
324 "SHRINKWRAP",
325 ICON_MOD_SHRINKWRAP,
326 "Shrinkwrap",
327 "Project the shape onto another object"},
329 "SIMPLE_DEFORM",
330 ICON_MOD_SIMPLEDEFORM,
331 "Simple Deform",
332 "Deform the shape by twisting, bending, tapering or stretching"},
334 "SMOOTH",
335 ICON_MOD_SMOOTH,
336 "Smooth",
337 "Smooth the mesh by flattening the angles between adjacent faces"},
339 "CORRECTIVE_SMOOTH",
340 ICON_MOD_SMOOTH,
341 "Smooth Corrective",
342 "Smooth the mesh while still preserving the volume"},
344 "LAPLACIANSMOOTH",
345 ICON_MOD_SMOOTH,
346 "Smooth Laplacian",
347 "Reduce the noise on a mesh surface with minimal changes to its shape"},
349 "SURFACE_DEFORM",
350 ICON_MOD_MESHDEFORM,
351 "Surface Deform",
352 "Transfer motion from another mesh"},
354 "WARP",
355 ICON_MOD_WARP,
356 "Warp",
357 "Warp parts of a mesh to a new location in a very flexible way thanks to 2 specified "
358 "objects"},
360 "WAVE",
361 ICON_MOD_WAVE,
362 "Wave",
363 "Adds a ripple-like motion to an object's geometry"},
365 "VOLUME_DISPLACE",
366 ICON_VOLUME_DATA,
367 "Volume Displace",
368 "Deform volume based on noise or other vector fields"}, /* TODO: Use correct icon. */
370 "GREASE_PENCIL_HOOK",
371 ICON_HOOK,
372 "Hook",
373 "Deform stroke points using objects"},
375 "GREASE_PENCIL_NOISE",
376 ICON_MOD_NOISE,
377 "Noise",
378 "Generate noise wobble in grease pencil strokes"},
380 "GREASE_PENCIL_OFFSET",
381 ICON_MOD_OFFSET,
382 "Offset",
383 "Change stroke location, rotation, or scale"},
385 "GREASE_PENCIL_SMOOTH",
386 ICON_SMOOTHCURVE,
387 "Smooth",
388 "Smooth grease pencil strokes"},
390 "GREASE_PENCIL_THICKNESS",
391 ICON_MOD_THICKNESS,
392 "Thickness",
393 "Change stroke thickness"},
395 "GREASE_PENCIL_LATTICE",
396 ICON_MOD_LATTICE,
397 "Lattice",
398 "Deform strokes using a lattice object"},
400 "GREASE_PENCIL_DASH",
401 ICON_MOD_DASH,
402 "Dot Dash",
403 "Generate dot-dash styled strokes"},
405 "GREASE_PENCIL_ARMATURE",
406 ICON_MOD_ARMATURE,
407 "Armature",
408 "Deform stroke points using armature object"},
410 "GREASE_PENCIL_SHRINKWRAP",
411 ICON_MOD_SHRINKWRAP,
412 "Shrinkwrap",
413 "Project the shape onto another object"},
414
415 RNA_ENUM_ITEM_HEADING(N_("Physics"), nullptr),
416 {eModifierType_Cloth, "CLOTH", ICON_MOD_CLOTH, "Cloth", "Physic simulation for cloth"},
418 "COLLISION",
419 ICON_MOD_PHYSICS,
420 "Collision",
421 "For colliders participating in physics simulation, control which level in the modifier "
422 "stack is used as the collision surface"},
424 "DYNAMIC_PAINT",
425 ICON_MOD_DYNAMICPAINT,
426 "Dynamic Paint",
427 "Turn objects into paint canvases and brushes, creating color attributes, image sequences, "
428 "or displacement"},
430 "EXPLODE",
431 ICON_MOD_EXPLODE,
432 "Explode",
433 "Break apart the mesh faces and let them follow particles"},
435 "FLUID",
436 ICON_MOD_FLUIDSIM,
437 "Fluid",
438 "Physics simulation for fluids, like water, oil and smoke"},
439 {eModifierType_Ocean, "OCEAN", ICON_MOD_OCEAN, "Ocean", "Generate a moving ocean surface"},
441 "PARTICLE_INSTANCE",
442 ICON_MOD_PARTICLE_INSTANCE,
443 "Particle Instance",
444 "Duplicate mesh at the location of particles"},
446 "PARTICLE_SYSTEM",
447 ICON_MOD_PARTICLES,
448 "Particle System",
449 "Spawn particles from the shape"},
451 "SOFT_BODY",
452 ICON_MOD_SOFT,
453 "Soft Body",
454 "Simulate soft deformable objects"},
455 {eModifierType_Surface, "SURFACE", ICON_MODIFIER, "Surface", ""},
456 {0, nullptr, 0, nullptr, nullptr},
457};
458
461 "BEAUTY",
462 0,
463 "Beauty",
464 "Split the quads in nice triangles, slower method"},
466 "FIXED",
467 0,
468 "Fixed",
469 "Split the quads on the first and third vertices"},
471 "FIXED_ALTERNATE",
472 0,
473 "Fixed Alternate",
474 "Split the quads on the 2nd and 4th vertices"},
476 "SHORTEST_DIAGONAL",
477 0,
478 "Shortest Diagonal",
479 "Split the quads along their shortest diagonal"},
481 "LONGEST_DIAGONAL",
482 0,
483 "Longest Diagonal",
484 "Split the quads along their longest diagonal"},
485 {0, nullptr, 0, nullptr, nullptr},
486};
487
490 "BEAUTY",
491 0,
492 "Beauty",
493 "Arrange the new triangles evenly (slow)"},
495 "CLIP",
496 0,
497 "Clip",
498 "Split the polygons with an ear clipping algorithm"},
499 {0, nullptr, 0, nullptr, nullptr},
500};
501
504 "ON_SURFACE",
505 0,
506 "On Surface",
507 "The point is constrained to the surface of the target object, "
508 "with distance offset towards the original point location"},
510 "INSIDE",
511 0,
512 "Inside",
513 "The point is constrained to be inside the target object"},
515 "OUTSIDE",
516 0,
517 "Outside",
518 "The point is constrained to be outside the target object"},
520 "OUTSIDE_SURFACE",
521 0,
522 "Outside Surface",
523 "The point is constrained to the surface of the target object, "
524 "with distance offset always to the outside, towards or away from the original location"},
526 "ABOVE_SURFACE",
527 0,
528 "Above Surface",
529 "The point is constrained to the surface of the target object, "
530 "with distance offset applied exactly along the target normal"},
531 {0, nullptr, 0, nullptr, nullptr},
532};
533
536 "NEAREST_SURFACEPOINT",
537 0,
538 "Nearest Surface Point",
539 "Shrink the mesh to the nearest target surface"},
541 "PROJECT",
542 0,
543 "Project",
544 "Shrink the mesh to the nearest target surface along a given axis"},
546 "NEAREST_VERTEX",
547 0,
548 "Nearest Vertex",
549 "Shrink the mesh to the nearest target vertex"},
551 "TARGET_PROJECT",
552 0,
553 "Target Normal Project",
554 "Shrink the mesh to the nearest target surface "
555 "along the interpolated vertex normals of the target"},
556 {0, nullptr, 0, nullptr, nullptr},
557};
558
560 {0, "OFF", 0, "Off", "No culling"},
562 "FRONT",
563 0,
564 "Front",
565 "No projection when in front of the face"},
566 {MOD_SHRINKWRAP_CULL_TARGET_BACKFACE, "BACK", 0, "Back", "No projection when behind the face"},
567 {0, nullptr, 0, nullptr, nullptr},
568};
569
571 {int(blender::nodes::geo_eval_log::NodeWarningType::Error), "ERROR", ICON_CANCEL, "Error", ""},
573 "WARNING",
574 ICON_ERROR,
575 "Warning",
576 ""},
577 {int(blender::nodes::geo_eval_log::NodeWarningType::Info), "INFO", ICON_INFO, "Info", ""},
578 {0, nullptr, 0, nullptr, nullptr},
579};
580
581#ifndef RNA_RUNTIME
582/* use eWarp_Falloff_*** & eHook_Falloff_***, they're in sync */
584 {eWarp_Falloff_None, "NONE", 0, "No Falloff", ""},
585 {eWarp_Falloff_Curve, "CURVE", 0, "Curve", ""},
586 {eWarp_Falloff_Smooth, "SMOOTH", ICON_SMOOTHCURVE, "Smooth", ""},
587 {eWarp_Falloff_Sphere, "SPHERE", ICON_SPHERECURVE, "Sphere", ""},
588 {eWarp_Falloff_Root, "ROOT", ICON_ROOTCURVE, "Root", ""},
589 {eWarp_Falloff_InvSquare, "INVERSE_SQUARE", ICON_ROOTCURVE, "Inverse Square", ""},
590 {eWarp_Falloff_Sharp, "SHARP", ICON_SHARPCURVE, "Sharp", ""},
591 {eWarp_Falloff_Linear, "LINEAR", ICON_LINCURVE, "Linear", ""},
592 {eWarp_Falloff_Const, "CONSTANT", ICON_NOCURVE, "Constant", ""},
593 {0, nullptr, 0, nullptr, nullptr},
594};
595#endif
596
597/* ***** Data Transfer ***** */
598
600 {MREMAP_MODE_TOPOLOGY, "TOPOLOGY", 0, "Topology", "Copy from identical topology meshes"},
601 {MREMAP_MODE_VERT_NEAREST, "NEAREST", 0, "Nearest Vertex", "Copy from closest vertex"},
603 "EDGE_NEAREST",
604 0,
605 "Nearest Edge Vertex",
606 "Copy from closest vertex of closest edge"},
608 "EDGEINTERP_NEAREST",
609 0,
610 "Nearest Edge Interpolated",
611 "Copy from interpolated values of vertices from closest point on closest edge"},
613 "POLY_NEAREST",
614 0,
615 "Nearest Face Vertex",
616 "Copy from closest vertex of closest face"},
618 "POLYINTERP_NEAREST",
619 0,
620 "Nearest Face Interpolated",
621 "Copy from interpolated values of vertices from closest point on closest face"},
623 "POLYINTERP_VNORPROJ",
624 0,
625 "Projected Face Interpolated",
626 "Copy from interpolated values of vertices from point on closest face hit by "
627 "normal-projection"},
628 {0, nullptr, 0, nullptr, nullptr},
629};
630
632 {MREMAP_MODE_TOPOLOGY, "TOPOLOGY", 0, "Topology", "Copy from identical topology meshes"},
634 "VERT_NEAREST",
635 0,
636 "Nearest Vertices",
637 "Copy from most similar edge (edge which vertices are the closest of destination edge's "
638 "ones)"},
640 "NEAREST",
641 0,
642 "Nearest Edge",
643 "Copy from closest edge (using midpoints)"},
645 "POLY_NEAREST",
646 0,
647 "Nearest Face Edge",
648 "Copy from closest edge of closest face (using midpoints)"},
650 "EDGEINTERP_VNORPROJ",
651 0,
652 "Projected Edge Interpolated",
653 "Interpolate all source edges hit by the projection of destination one along its own normal "
654 "(from vertices)"},
655 {0, nullptr, 0, nullptr, nullptr},
656};
657
659 {MREMAP_MODE_TOPOLOGY, "TOPOLOGY", 0, "Topology", "Copy from identical topology meshes"},
661 "NEAREST_NORMAL",
662 0,
663 "Nearest Corner and Best Matching Normal",
664 "Copy from nearest corner which has the best matching normal"},
666 "NEAREST_POLYNOR",
667 0,
668 "Nearest Corner and Best Matching Face Normal",
669 "Copy from nearest corner which has the face with the best matching normal to destination "
670 "corner's face one"},
672 "NEAREST_POLY",
673 0,
674 "Nearest Corner of Nearest Face",
675 "Copy from nearest corner of nearest face"},
677 "POLYINTERP_NEAREST",
678 0,
679 "Nearest Face Interpolated",
680 "Copy from interpolated corners of the nearest source face"},
682 "POLYINTERP_LNORPROJ",
683 0,
684 "Projected Face Interpolated",
685 "Copy from interpolated corners of the source face hit by corner normal projection"},
686 {0, nullptr, 0, nullptr, nullptr},
687};
688
690 {MREMAP_MODE_TOPOLOGY, "TOPOLOGY", 0, "Topology", "Copy from identical topology meshes"},
692 "NEAREST",
693 0,
694 "Nearest Face",
695 "Copy from nearest face (using center points)"},
697 "NORMAL",
698 0,
699 "Best Normal-Matching",
700 "Copy from source face which normal is the closest to destination one"},
702 "POLYINTERP_PNORPROJ",
703 0,
704 "Projected Face Interpolated",
705 "Interpolate all source polygons intersected by the projection of destination one along its "
706 "own normal"},
707 {0, nullptr, 0, nullptr, nullptr},
708};
709
711 {CDT_MIX_TRANSFER, "REPLACE", 0, "Replace", "Overwrite all elements' data"},
713 "ABOVE_THRESHOLD",
714 0,
715 "Above Threshold",
716 "Only replace destination elements where data is above given threshold (exact behavior "
717 "depends on data type)"},
719 "BELOW_THRESHOLD",
720 0,
721 "Below Threshold",
722 "Only replace destination elements where data is below given threshold (exact behavior "
723 "depends on data type)"},
725 "MIX",
726 0,
727 "Mix",
728 "Mix source value into destination one, using given threshold as factor"},
730 "ADD",
731 0,
732 "Add",
733 "Add source value to destination one, using given threshold as factor"},
735 "SUB",
736 0,
737 "Subtract",
738 "Subtract source value to destination one, using given threshold as factor"},
740 "MUL",
741 0,
742 "Multiply",
743 "Multiply source value to destination one, using given threshold as factor"},
744 /* Etc. */
745 {0, nullptr, 0, nullptr, nullptr},
746};
747
749 {DT_LAYERS_ACTIVE_SRC, "ACTIVE", 0, "Active Layer", "Only transfer active data layer"},
750 {DT_LAYERS_ALL_SRC, "ALL", 0, "All Layers", "Transfer all data layers"},
752 "BONE_SELECT",
753 0,
754 "Selected Pose Bones",
755 "Transfer all vertex groups used by selected pose bones"},
757 "BONE_DEFORM",
758 0,
759 "Deform Pose Bones",
760 "Transfer all vertex groups used by deform bones"},
761 {0, nullptr, 0, nullptr, nullptr},
762};
763
765 {DT_LAYERS_ACTIVE_DST, "ACTIVE", 0, "Active Layer", "Affect active data layer of all targets"},
766 {DT_LAYERS_NAME_DST, "NAME", 0, "By Name", "Match target data layers to affect by name"},
768 "INDEX",
769 0,
770 "By Order",
771 "Match target data layers to affect by order (indices)"},
772 {0, nullptr, 0, nullptr, nullptr},
773};
774
776 {0, "X", 0, "X", ""},
777 {1, "Y", 0, "Y", ""},
778 {0, nullptr, 0, nullptr, nullptr},
779};
780
782 {0, "X", 0, "X", ""},
783 {1, "Y", 0, "Y", ""},
784 {2, "Z", 0, "Z", ""},
785 {0, nullptr, 0, nullptr, nullptr},
786};
787
789 {(1 << 0), "X", 0, "X", ""},
790 {(1 << 1), "Y", 0, "Y", ""},
791 {(1 << 2), "Z", 0, "Z", ""},
792 {0, nullptr, 0, nullptr, nullptr},
793};
794
796 {SUBSURF_UV_SMOOTH_NONE, "NONE", 0, "None", "UVs are not smoothed, boundaries are kept sharp"},
798 "PRESERVE_CORNERS",
799 0,
800 "Keep Corners",
801 "UVs are smoothed, corners on discontinuous boundary are kept sharp"},
803 "PRESERVE_CORNERS_AND_JUNCTIONS",
804 0,
805 "Keep Corners, Junctions",
806 "UVs are smoothed, corners on discontinuous boundary and "
807 "junctions of 3 or more regions are kept sharp"},
809 "PRESERVE_CORNERS_JUNCTIONS_AND_CONCAVE",
810 0,
811 "Keep Corners, Junctions, Concave",
812 "UVs are smoothed, corners on discontinuous boundary, "
813 "junctions of 3 or more regions and darts and concave corners are kept sharp"},
815 "PRESERVE_BOUNDARIES",
816 0,
817 "Keep Boundaries",
818 "UVs are smoothed, boundaries are kept sharp"},
819 {SUBSURF_UV_SMOOTH_ALL, "SMOOTH_ALL", 0, "All", "UVs and boundaries are smoothed"},
820 {0, nullptr, 0, nullptr, nullptr},
821};
822
825 "PRESERVE_CORNERS",
826 0,
827 "Keep Corners",
828 "Smooth boundaries, but corners are kept sharp"},
829 {SUBSURF_BOUNDARY_SMOOTH_ALL, "ALL", 0, "All", "Smooth boundaries, including corners"},
830 {0, nullptr, 0, nullptr, nullptr},
831};
832
835 "DRAWSPEED",
836 0,
837 "Natural Drawing Speed",
838 "Use recorded speed multiplied by a factor"},
840 "FRAMES",
841 0,
842 "Number of Frames",
843 "Set a fixed number of frames for all build animations"},
845 "PERCENTAGE",
846 0,
847 "Percentage Factor",
848 "Set a manual percentage to build"},
849 {0, nullptr, 0, nullptr, nullptr},
850};
851
852#ifdef RNA_RUNTIME
853
854# include <algorithm>
855# include <fmt/format.h>
856
857# include "DNA_curve_types.h"
858# include "DNA_fluid_types.h"
859# include "DNA_material_types.h"
860# include "DNA_particle_types.h"
861
862# include "BKE_cachefile.hh"
863# include "BKE_context.hh"
864# include "BKE_deform.hh"
865# include "BKE_material.h"
866# include "BKE_mesh_runtime.hh"
867# include "BKE_modifier.hh"
868# include "BKE_object.hh"
869# include "BKE_particle.h"
870
871# include "BLI_sort_utils.h"
872# include "BLI_string_utils.hh"
873
874# include "DEG_depsgraph.hh"
875# include "DEG_depsgraph_build.hh"
876# include "DEG_depsgraph_query.hh"
877
878# include "ED_object.hh"
879
880# ifdef WITH_ALEMBIC
881# include "ABC_alembic.h"
882# endif
883
884static void rna_UVProject_projectors_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
885{
888 iter, (void *)uvp->projectors, sizeof(Object *), uvp->projectors_num, 0, nullptr);
889}
890
891static StructRNA *rna_Modifier_refine(PointerRNA *ptr)
892{
894 const ModifierTypeInfo *modifier_type = BKE_modifier_get_info(ModifierType(md->type));
895 if (modifier_type != nullptr) {
896 return modifier_type->srna;
897 }
898 return &RNA_Modifier;
899}
900
901static void rna_Modifier_name_set(PointerRNA *ptr, const char *value)
902{
903 ModifierData *md = static_cast<ModifierData *>(ptr->data);
904 char oldname[sizeof(md->name)];
905
906 /* make a copy of the old name first */
907 STRNCPY(oldname, md->name);
908
909 /* copy the new name into the name slot */
910 STRNCPY_UTF8(md->name, value);
911
912 /* make sure the name is truly unique */
913 if (ptr->owner_id) {
914 Object *ob = (Object *)ptr->owner_id;
915 BKE_modifier_unique_name(&ob->modifiers, md);
916 }
917
918 /* fix all the animation data which may link to this */
919 BKE_animdata_fix_paths_rename_all(nullptr, "modifiers", oldname, md->name);
920}
921
922static void rna_Modifier_name_update(Main *bmain, Scene * /*scene*/, PointerRNA * /*ptr*/)
923{
925}
926
927static std::optional<std::string> rna_Modifier_path(const PointerRNA *ptr)
928{
929 const ModifierData *md = static_cast<const ModifierData *>(ptr->data);
930 char name_esc[sizeof(md->name) * 2];
931
932 BLI_str_escape(name_esc, md->name, sizeof(name_esc));
933 return fmt::format("modifiers[\"{}\"]", name_esc);
934}
935
936static void rna_Modifier_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
937{
940}
941
942static void rna_Modifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
943{
944 rna_Modifier_update(bmain, scene, ptr);
946}
947
948static void rna_NodesModifier_bake_update(Main *bmain, Scene *scene, PointerRNA *ptr)
949{
950 rna_Modifier_update(bmain, scene, ptr);
952}
953
954static void rna_Modifier_is_active_set(PointerRNA *ptr, bool value)
955{
956 ModifierData *md = static_cast<ModifierData *>(ptr->data);
957
958 if (value) {
959 /* Disable the active flag of all other modifiers. */
960 for (ModifierData *prev_md = md->prev; prev_md != nullptr; prev_md = prev_md->prev) {
961 prev_md->flag &= ~eModifierFlag_Active;
962 }
963 for (ModifierData *next_md = md->next; next_md != nullptr; next_md = next_md->next) {
964 next_md->flag &= ~eModifierFlag_Active;
965 }
966
969 }
970}
971
972static void rna_Modifier_use_pin_to_last_set(PointerRNA *ptr, bool value)
973{
974 Object *object = reinterpret_cast<Object *>(ptr->owner_id);
975 ModifierData *md = static_cast<ModifierData *>(ptr->data);
977
978 int to_index = BLI_findindex(&object->modifiers, md);
979 if (value) {
980 ModifierData *md_iter = md;
981 while (md_iter->next && (md_iter->next->flag & eModifierFlag_PinLast) == 0) {
982 to_index++;
983 md_iter = md_iter->next;
984 }
985 }
986 else {
987 ModifierData *md_iter = md;
988 while (md_iter->prev && (md_iter->prev->flag & eModifierFlag_PinLast)) {
989 to_index--;
990 md_iter = md_iter->prev;
991 }
992 }
993 blender::ed::object::modifier_move_to_index(nullptr, RPT_ERROR, object, md, to_index, true);
994}
995
996/* Vertex Groups */
997
998# define RNA_MOD_VGROUP_NAME_SET(_type, _prop) \
999 static void rna_##_type##Modifier_##_prop##_set(PointerRNA *ptr, const char *value) \
1000 { \
1001 _type##ModifierData *tmd = (_type##ModifierData *)ptr->data; \
1002 rna_object_vgroup_name_set(ptr, value, tmd->_prop, sizeof(tmd->_prop)); \
1003 }
1004
1005RNA_MOD_VGROUP_NAME_SET(Armature, defgrp_name);
1006RNA_MOD_VGROUP_NAME_SET(Bevel, defgrp_name);
1007RNA_MOD_VGROUP_NAME_SET(Cast, defgrp_name);
1008RNA_MOD_VGROUP_NAME_SET(Curve, name);
1009RNA_MOD_VGROUP_NAME_SET(DataTransfer, defgrp_name);
1010RNA_MOD_VGROUP_NAME_SET(Decimate, defgrp_name);
1011RNA_MOD_VGROUP_NAME_SET(CorrectiveSmooth, defgrp_name);
1012RNA_MOD_VGROUP_NAME_SET(Displace, defgrp_name);
1013RNA_MOD_VGROUP_NAME_SET(Hook, name);
1014RNA_MOD_VGROUP_NAME_SET(LaplacianDeform, anchor_grp_name);
1015RNA_MOD_VGROUP_NAME_SET(LaplacianSmooth, defgrp_name);
1016RNA_MOD_VGROUP_NAME_SET(Lattice, name);
1017RNA_MOD_VGROUP_NAME_SET(Mask, vgroup);
1018RNA_MOD_VGROUP_NAME_SET(MeshCache, defgrp_name);
1019RNA_MOD_VGROUP_NAME_SET(MeshDeform, defgrp_name);
1020RNA_MOD_VGROUP_NAME_SET(NormalEdit, defgrp_name);
1021RNA_MOD_VGROUP_NAME_SET(Shrinkwrap, vgroup_name);
1022RNA_MOD_VGROUP_NAME_SET(SimpleDeform, vgroup_name);
1023RNA_MOD_VGROUP_NAME_SET(Smooth, defgrp_name);
1024RNA_MOD_VGROUP_NAME_SET(Solidify, defgrp_name);
1025RNA_MOD_VGROUP_NAME_SET(Solidify, shell_defgrp_name);
1026RNA_MOD_VGROUP_NAME_SET(Solidify, rim_defgrp_name);
1027RNA_MOD_VGROUP_NAME_SET(SurfaceDeform, defgrp_name);
1028RNA_MOD_VGROUP_NAME_SET(UVWarp, vgroup_name);
1029RNA_MOD_VGROUP_NAME_SET(Warp, defgrp_name);
1030RNA_MOD_VGROUP_NAME_SET(Wave, defgrp_name);
1031RNA_MOD_VGROUP_NAME_SET(WeightVGEdit, defgrp_name);
1032RNA_MOD_VGROUP_NAME_SET(WeightVGEdit, mask_defgrp_name);
1033RNA_MOD_VGROUP_NAME_SET(WeightVGMix, defgrp_name_a);
1034RNA_MOD_VGROUP_NAME_SET(WeightVGMix, defgrp_name_b);
1035RNA_MOD_VGROUP_NAME_SET(WeightVGMix, mask_defgrp_name);
1036RNA_MOD_VGROUP_NAME_SET(WeightVGProximity, defgrp_name);
1037RNA_MOD_VGROUP_NAME_SET(WeightVGProximity, mask_defgrp_name);
1038RNA_MOD_VGROUP_NAME_SET(WeightedNormal, defgrp_name);
1039RNA_MOD_VGROUP_NAME_SET(Weld, defgrp_name);
1040RNA_MOD_VGROUP_NAME_SET(Wireframe, defgrp_name);
1041RNA_MOD_VGROUP_NAME_SET(GreasePencilWeightAngle, target_vgname);
1042RNA_MOD_VGROUP_NAME_SET(GreasePencilWeightProximity, target_vgname);
1043RNA_MOD_VGROUP_NAME_SET(GreasePencilLineart, vgname);
1044RNA_MOD_VGROUP_NAME_SET(GreasePencilBuild, target_vgname);
1045
1046static void rna_ExplodeModifier_vgroup_get(PointerRNA *ptr, char *value)
1047{
1049 rna_object_vgroup_name_index_get(ptr, value, emd->vgroup);
1050}
1051
1052static int rna_ExplodeModifier_vgroup_length(PointerRNA *ptr)
1053{
1055 return rna_object_vgroup_name_index_length(ptr, emd->vgroup);
1056}
1057
1058static void rna_ExplodeModifier_vgroup_set(PointerRNA *ptr, const char *value)
1059{
1061 rna_object_vgroup_name_index_set(ptr, value, &emd->vgroup);
1062}
1063
1064# undef RNA_MOD_VGROUP_NAME_SET
1065
1066/* UV layers */
1067
1068# define RNA_MOD_UVLAYER_NAME_SET(_type, _prop) \
1069 static void rna_##_type##Modifier_##_prop##_set(PointerRNA *ptr, const char *value) \
1070 { \
1071 _type##ModifierData *tmd = (_type##ModifierData *)ptr->data; \
1072 rna_object_uvlayer_name_set(ptr, value, tmd->_prop, sizeof(tmd->_prop)); \
1073 }
1074
1075RNA_MOD_UVLAYER_NAME_SET(MappingInfo, uvlayer_name);
1076RNA_MOD_UVLAYER_NAME_SET(UVProject, uvlayer_name);
1077RNA_MOD_UVLAYER_NAME_SET(UVWarp, uvlayer_name);
1078RNA_MOD_UVLAYER_NAME_SET(WeightVGEdit, mask_tex_uvlayer_name);
1079RNA_MOD_UVLAYER_NAME_SET(WeightVGMix, mask_tex_uvlayer_name);
1080RNA_MOD_UVLAYER_NAME_SET(WeightVGProximity, mask_tex_uvlayer_name);
1081
1082# undef RNA_MOD_UVLAYER_NAME_SET
1083
1084/* Objects */
1085
1086static void modifier_object_set(Object *self, Object **ob_p, int type, PointerRNA value)
1087{
1088 Object *ob = static_cast<Object *>(value.data);
1089
1090 if (!self || ob != self) {
1091 if (!ob || type == OB_EMPTY || ob->type == type) {
1092 id_lib_extern((ID *)ob);
1093 *ob_p = ob;
1094 }
1095 }
1096}
1097
1098# define RNA_MOD_OBJECT_SET(_type, _prop, _obtype) \
1099 static void rna_##_type##Modifier_##_prop##_set( \
1100 PointerRNA *ptr, PointerRNA value, ReportList * /*reports*/) \
1101 { \
1102 _type##ModifierData *tmd = (_type##ModifierData *)ptr->data; \
1103 modifier_object_set((Object *)ptr->owner_id, &tmd->_prop, _obtype, value); \
1104 }
1105
1106RNA_MOD_OBJECT_SET(Armature, object, OB_ARMATURE);
1107RNA_MOD_OBJECT_SET(Array, start_cap, OB_MESH);
1108RNA_MOD_OBJECT_SET(Array, end_cap, OB_MESH);
1109RNA_MOD_OBJECT_SET(Array, curve_ob, OB_CURVES_LEGACY);
1110RNA_MOD_OBJECT_SET(Boolean, object, OB_MESH);
1111RNA_MOD_OBJECT_SET(Cast, object, OB_EMPTY);
1112RNA_MOD_OBJECT_SET(Curve, object, OB_CURVES_LEGACY);
1113RNA_MOD_OBJECT_SET(DataTransfer, ob_source, OB_MESH);
1114RNA_MOD_OBJECT_SET(Lattice, object, OB_LATTICE);
1115RNA_MOD_OBJECT_SET(Mask, ob_arm, OB_ARMATURE);
1116RNA_MOD_OBJECT_SET(MeshDeform, object, OB_MESH);
1117RNA_MOD_OBJECT_SET(NormalEdit, target, OB_EMPTY);
1118RNA_MOD_OBJECT_SET(Shrinkwrap, target, OB_MESH);
1119RNA_MOD_OBJECT_SET(Shrinkwrap, auxTarget, OB_MESH);
1120RNA_MOD_OBJECT_SET(SurfaceDeform, target, OB_MESH);
1121RNA_MOD_OBJECT_SET(GreasePencilMirror, object, OB_EMPTY);
1122RNA_MOD_OBJECT_SET(GreasePencilTint, object, OB_EMPTY);
1123RNA_MOD_OBJECT_SET(GreasePencilLattice, object, OB_LATTICE);
1124RNA_MOD_OBJECT_SET(GreasePencilWeightProximity, object, OB_EMPTY);
1125RNA_MOD_OBJECT_SET(GreasePencilHook, object, OB_EMPTY);
1126RNA_MOD_OBJECT_SET(GreasePencilArmature, object, OB_ARMATURE);
1127RNA_MOD_OBJECT_SET(GreasePencilOutline, object, OB_EMPTY);
1128RNA_MOD_OBJECT_SET(GreasePencilShrinkwrap, target, OB_MESH);
1129RNA_MOD_OBJECT_SET(GreasePencilShrinkwrap, aux_target, OB_MESH);
1130RNA_MOD_OBJECT_SET(GreasePencilBuild, object, OB_EMPTY);
1131
1132static void rna_HookModifier_object_set(PointerRNA *ptr,
1133 PointerRNA value,
1134 ReportList * /*reports*/)
1135{
1136 Object *owner = (Object *)ptr->owner_id;
1137 HookModifierData *hmd = static_cast<HookModifierData *>(ptr->data);
1138 Object *ob = (Object *)value.data;
1139
1140 hmd->object = ob;
1141 id_lib_extern((ID *)ob);
1143}
1144
1145static bool rna_HookModifier_object_override_apply(Main *bmain,
1146 RNAPropertyOverrideApplyContext &rnaapply_ctx)
1147{
1148 PointerRNA *ptr_dst = &rnaapply_ctx.ptr_dst;
1149 PointerRNA *ptr_src = &rnaapply_ctx.ptr_src;
1150 PointerRNA *ptr_storage = &rnaapply_ctx.ptr_storage;
1151 PropertyRNA *prop_dst = rnaapply_ctx.prop_dst;
1152 PropertyRNA *prop_src = rnaapply_ctx.prop_src;
1153 const int len_dst = rnaapply_ctx.len_src;
1154 const int len_src = rnaapply_ctx.len_src;
1155 const int len_storage = rnaapply_ctx.len_storage;
1157
1158 BLI_assert(len_dst == len_src && (!ptr_storage || len_dst == len_storage) && len_dst == 0);
1160 "Unsupported RNA override operation on Hook modifier target object pointer");
1161 UNUSED_VARS_NDEBUG(ptr_storage, len_dst, len_src, len_storage, opop);
1162
1163 /* We need a special handling here because setting hook target resets invert parent matrix,
1164 * which is evil in our case. */
1165 HookModifierData *hmd = static_cast<HookModifierData *>(ptr_dst->data);
1166 Object *owner = (Object *)ptr_dst->owner_id;
1167 Object *target_dst = static_cast<Object *>(RNA_property_pointer_get(ptr_dst, prop_dst).data);
1168 Object *target_src = static_cast<Object *>(RNA_property_pointer_get(ptr_src, prop_src).data);
1169
1170 BLI_assert(target_dst == hmd->object);
1171
1172 if (target_src == target_dst) {
1173 return false;
1174 }
1175
1176 hmd->object = target_src;
1177 if (target_src == nullptr) {
1178 /* The only case where we do want default behavior (with matrix reset). */
1180 }
1181 RNA_property_update_main(bmain, nullptr, ptr_dst, prop_dst);
1182 return true;
1183}
1184
1185static void rna_HookModifier_subtarget_set(PointerRNA *ptr, const char *value)
1186{
1187 Object *owner = (Object *)ptr->owner_id;
1188 HookModifierData *hmd = static_cast<HookModifierData *>(ptr->data);
1189
1190 STRNCPY(hmd->subtarget, value);
1192}
1193
1194static int rna_HookModifier_vertex_indices_get_length(const PointerRNA *ptr,
1195 int length[RNA_MAX_ARRAY_DIMENSION])
1196{
1197 const HookModifierData *hmd = static_cast<const HookModifierData *>(ptr->data);
1198 int indexar_num = hmd->indexar ? hmd->indexar_num : 0;
1199 return (length[0] = indexar_num);
1200}
1201
1202static void rna_HookModifier_vertex_indices_get(PointerRNA *ptr, int *values)
1203{
1204 HookModifierData *hmd = static_cast<HookModifierData *>(ptr->data);
1205 if (hmd->indexar != nullptr) {
1206 memcpy(values, hmd->indexar, sizeof(int) * hmd->indexar_num);
1207 }
1208}
1209
1210static void rna_HookModifier_vertex_indices_set(HookModifierData *hmd,
1211 ReportList *reports,
1212 const int *indices,
1213 int indices_num)
1214{
1215 if (indices_num <= 0) {
1216 MEM_SAFE_FREE(hmd->indexar);
1217 hmd->indexar_num = 0;
1218 }
1219 else {
1220 /* Reject negative indices. */
1221 for (int i = 0; i < indices_num; i++) {
1222 if (indices[i] < 0) {
1223 BKE_reportf(reports, RPT_ERROR, "Negative vertex index in vertex_indices_set");
1224 return;
1225 }
1226 }
1227
1228 /* Copy and sort the index array. */
1229 size_t size = sizeof(int) * indices_num;
1230 int *buffer = static_cast<int *>(MEM_mallocN(size, "hook indexar"));
1231 memcpy(buffer, indices, size);
1232
1233 qsort(buffer, indices_num, sizeof(int), BLI_sortutil_cmp_int);
1234
1235 /* Reject duplicate indices. */
1236 for (int i = 1; i < indices_num; i++) {
1237 if (buffer[i] == buffer[i - 1]) {
1238 BKE_reportf(reports, RPT_ERROR, "Duplicate index %d in vertex_indices_set", buffer[i]);
1239 MEM_freeN(buffer);
1240 return;
1241 }
1242 }
1243
1244 /* Success - save the new array. */
1245 MEM_SAFE_FREE(hmd->indexar);
1246 hmd->indexar = buffer;
1247 hmd->indexar_num = indices_num;
1248 }
1249}
1250
1251static PointerRNA rna_UVProjector_object_get(PointerRNA *ptr)
1252{
1253 Object **ob = (Object **)ptr->data;
1254 return rna_pointer_inherit_refine(ptr, &RNA_Object, *ob);
1255}
1256
1257static void rna_UVProjector_object_set(PointerRNA *ptr, PointerRNA value, ReportList * /*reports*/)
1258{
1259 Object **ob_p = (Object **)ptr->data;
1260 Object *ob = (Object *)value.data;
1261 id_lib_extern((ID *)ob);
1262 *ob_p = ob;
1263}
1264
1265# undef RNA_MOD_OBJECT_SET
1266
1267/* Other rna callbacks */
1268
1269static void rna_fluid_set_type(Main *bmain, Scene *scene, PointerRNA *ptr)
1270{
1272 Object *ob = (Object *)ptr->owner_id;
1273
1274 /* nothing changed */
1275 if ((fmd->type & MOD_FLUID_TYPE_DOMAIN) && fmd->domain) {
1276 return;
1277 }
1278
1279# ifdef WITH_FLUID
1280 BKE_fluid_modifier_free(fmd); /* XXX TODO: completely free all 3 pointers */
1281 BKE_fluid_modifier_create_type_data(fmd); /* create regarding of selected type */
1282# endif
1283
1284 switch (fmd->type) {
1286 ob->dt = OB_WIRE;
1287 break;
1290 case 0:
1291 default:
1292 break;
1293 }
1294
1295 /* update dependency since a domain - other type switch could have happened */
1296 rna_Modifier_dependency_update(bmain, scene, ptr);
1297}
1298
1299static void rna_MultiresModifier_level_range(
1300 PointerRNA *ptr, int *min, int *max, int * /*softmin*/, int * /*softmax*/)
1301{
1303
1304 *min = 0;
1305 *max = max_ii(0, mmd->totlvl); /* intentionally _not_ -1 */
1306}
1307
1308static bool rna_MultiresModifier_external_get(PointerRNA *ptr)
1309{
1310 Object *ob = (Object *)ptr->owner_id;
1311 Mesh *mesh = static_cast<Mesh *>(ob->data);
1312
1313 return CustomData_external_test(&mesh->corner_data, CD_MDISPS);
1314}
1315
1316static void rna_MultiresModifier_filepath_get(PointerRNA *ptr, char *value)
1317{
1318 Object *ob = (Object *)ptr->owner_id;
1319 CustomDataExternal *external = ((Mesh *)ob->data)->corner_data.external;
1320
1321 strcpy(value, (external) ? external->filepath : "");
1322}
1323
1324static void rna_MultiresModifier_filepath_set(PointerRNA *ptr, const char *value)
1325{
1326 Object *ob = (Object *)ptr->owner_id;
1327 CustomDataExternal *external = ((Mesh *)ob->data)->corner_data.external;
1328
1329 if (external && !STREQ(external->filepath, value)) {
1330 STRNCPY(external->filepath, value);
1332 }
1333}
1334
1335static int rna_MultiresModifier_filepath_length(PointerRNA *ptr)
1336{
1337 Object *ob = (Object *)ptr->owner_id;
1338 CustomDataExternal *external = ((Mesh *)ob->data)->corner_data.external;
1339
1340 return strlen((external) ? external->filepath : "");
1341}
1342
1343static int rna_ShrinkwrapModifier_face_cull_get(PointerRNA *ptr)
1344{
1346 return swm->shrinkOpts & MOD_SHRINKWRAP_CULL_TARGET_MASK;
1347}
1348
1349static void rna_ShrinkwrapModifier_face_cull_set(PointerRNA *ptr, int value)
1350{
1352 swm->shrinkOpts = (swm->shrinkOpts & ~MOD_SHRINKWRAP_CULL_TARGET_MASK) | value;
1353}
1354
1355static bool rna_MeshDeformModifier_is_bound_get(PointerRNA *ptr)
1356{
1357 return (((MeshDeformModifierData *)ptr->data)->bindcagecos != nullptr);
1358}
1359
1360static PointerRNA rna_SoftBodyModifier_settings_get(PointerRNA *ptr)
1361{
1362 Object *ob = (Object *)ptr->owner_id;
1363 return rna_pointer_inherit_refine(ptr, &RNA_SoftBodySettings, ob->soft);
1364}
1365
1366static PointerRNA rna_SoftBodyModifier_point_cache_get(PointerRNA *ptr)
1367{
1368 Object *ob = (Object *)ptr->owner_id;
1369 return rna_pointer_inherit_refine(ptr, &RNA_PointCache, ob->soft->shared->pointcache);
1370}
1371
1372static PointerRNA rna_CollisionModifier_settings_get(PointerRNA *ptr)
1373{
1374 Object *ob = (Object *)ptr->owner_id;
1375 return rna_pointer_inherit_refine(ptr, &RNA_CollisionSettings, ob->pd);
1376}
1377
1378/* Special update function for setting the number of segments of the modifier that also resamples
1379 * the segments in the custom profile. */
1380static void rna_BevelModifier_update_segments(Main *bmain, Scene *scene, PointerRNA *ptr)
1381{
1383 if (RNA_enum_get(ptr, "profile_type") == MOD_BEVEL_PROFILE_CUSTOM) {
1384 short segments = short(RNA_int_get(ptr, "segments"));
1385 BKE_curveprofile_init(bmd->custom_profile, segments);
1386 }
1387 rna_Modifier_update(bmain, scene, ptr);
1388}
1389
1390static void rna_BevelModifier_weight_attribute_visit_for_search(
1391 const bContext * /*C*/,
1392 PointerRNA *ptr,
1393 PropertyRNA * /*prop*/,
1394 const char * /*edit_text*/,
1396{
1397 Object *ob = (Object *)ptr->owner_id;
1398 PointerRNA mesh_ptr = RNA_id_pointer_create(static_cast<ID *>(ob->data));
1399 PropertyRNA *attributes_prop = RNA_struct_find_property(&mesh_ptr, "attributes");
1400 RNA_PROP_BEGIN (&mesh_ptr, itemptr, attributes_prop) {
1401 const CustomDataLayer *layer = static_cast<const CustomDataLayer *>(itemptr.data);
1403 StringPropertySearchVisitParams visit_params{};
1404 visit_params.text = layer->name;
1405 visit_fn(visit_params);
1406 }
1407 }
1409}
1410
1411static void rna_UVProjectModifier_num_projectors_set(PointerRNA *ptr, int value)
1412{
1414 int a;
1415
1416 md->projectors_num = std::clamp(value, 1, MOD_UVPROJECT_MAXPROJECTORS);
1417 for (a = md->projectors_num; a < MOD_UVPROJECT_MAXPROJECTORS; a++) {
1418 md->projectors[a] = nullptr;
1419 }
1420}
1421
1422static void rna_OceanModifier_init_update(Main *bmain, Scene *scene, PointerRNA *ptr)
1423{
1425
1427 rna_Modifier_update(bmain, scene, ptr);
1428}
1429
1430static void rna_OceanModifier_ocean_chop_set(PointerRNA *ptr, float value)
1431{
1433 float old_value = omd->chop_amount;
1434
1435 omd->chop_amount = value;
1436
1437 if ((old_value == 0.0f && value > 0.0f) || (old_value > 0.0f && value == 0.0f)) {
1439 }
1440}
1441
1442static bool rna_LaplacianDeformModifier_is_bind_get(PointerRNA *ptr)
1443{
1445 return ((lmd->flag & MOD_LAPLACIANDEFORM_BIND) && (lmd->vertexco != nullptr));
1446}
1447
1448/* NOTE: Curve and array modifiers requires curve path to be evaluated,
1449 * dependency graph will make sure that curve eval would create such a path,
1450 * but if curve was already evaluated we might miss path.
1451 *
1452 * So what we do here is: if path was not calculated for target curve we
1453 * tag it for update.
1454 */
1455
1456static void rna_CurveModifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
1457{
1459 rna_Modifier_update(bmain, scene, ptr);
1461 if (cmd->object != nullptr) {
1462 Curve *curve = static_cast<Curve *>(cmd->object->data);
1463 if ((curve->flag & CU_PATH) == 0) {
1465 }
1466 }
1467}
1468
1469static void rna_ArrayModifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
1470{
1472 rna_Modifier_update(bmain, scene, ptr);
1474 if (amd->curve_ob != nullptr) {
1475 Curve *curve = static_cast<Curve *>(amd->curve_ob->data);
1476 if ((curve->flag & CU_PATH) == 0) {
1478 }
1479 }
1480}
1481
1482static void rna_DataTransferModifier_use_data_update(Main *bmain, Scene *scene, PointerRNA *ptr)
1483{
1485
1486 if (!(dtmd->flags & MOD_DATATRANSFER_USE_VERT)) {
1487 dtmd->data_types &= ~DT_TYPE_VERT_ALL;
1488 }
1489 if (!(dtmd->flags & MOD_DATATRANSFER_USE_EDGE)) {
1490 dtmd->data_types &= ~DT_TYPE_EDGE_ALL;
1491 }
1492 if (!(dtmd->flags & MOD_DATATRANSFER_USE_LOOP)) {
1493 dtmd->data_types &= ~DT_TYPE_LOOP_ALL;
1494 }
1495 if (!(dtmd->flags & MOD_DATATRANSFER_USE_POLY)) {
1496 dtmd->data_types &= ~DT_TYPE_POLY_ALL;
1497 }
1498
1499 rna_Modifier_dependency_update(bmain, scene, ptr);
1500}
1501
1502static void rna_DataTransferModifier_data_types_update(Main *bmain, Scene *scene, PointerRNA *ptr)
1503{
1505 const int item_types = BKE_object_data_transfer_get_dttypes_item_types(dtmd->data_types);
1506
1507 if (item_types & ME_VERT) {
1508 dtmd->flags |= MOD_DATATRANSFER_USE_VERT;
1509 }
1510 if (item_types & ME_EDGE) {
1511 dtmd->flags |= MOD_DATATRANSFER_USE_EDGE;
1512 }
1513 if (item_types & ME_LOOP) {
1514 dtmd->flags |= MOD_DATATRANSFER_USE_LOOP;
1515 }
1516 if (item_types & ME_POLY) {
1517 dtmd->flags |= MOD_DATATRANSFER_USE_POLY;
1518 }
1519
1520 rna_Modifier_dependency_update(bmain, scene, ptr);
1521}
1522
1523static void rna_DataTransferModifier_verts_data_types_set(PointerRNA *ptr, int value)
1524{
1526
1527 dtmd->data_types &= ~DT_TYPE_VERT_ALL;
1528 dtmd->data_types |= value;
1529}
1530
1531static void rna_DataTransferModifier_edges_data_types_set(PointerRNA *ptr, int value)
1532{
1534
1535 dtmd->data_types &= ~DT_TYPE_EDGE_ALL;
1536 dtmd->data_types |= value;
1537}
1538
1539static void rna_DataTransferModifier_loops_data_types_set(PointerRNA *ptr, int value)
1540{
1542
1543 dtmd->data_types &= ~DT_TYPE_LOOP_ALL;
1544 dtmd->data_types |= value;
1545}
1546
1547static void rna_DataTransferModifier_polys_data_types_set(PointerRNA *ptr, int value)
1548{
1550
1551 dtmd->data_types &= ~DT_TYPE_POLY_ALL;
1552 dtmd->data_types |= value;
1553}
1554
1555static const EnumPropertyItem *rna_DataTransferModifier_layers_select_src_itemf(bContext *C,
1556 PointerRNA *ptr,
1557 PropertyRNA *prop,
1558 bool *r_free)
1559{
1560 using namespace blender;
1562 EnumPropertyItem *item = nullptr, tmp_item = {0};
1563 int totitem = 0;
1564
1565 if (!C) { /* needed for docs and i18n tools */
1567 }
1568
1569 /* No active here! */
1572
1573 if (STREQ(RNA_property_identifier(prop), "layers_vgroup_select_src")) {
1574 Object *ob_src = dtmd->ob_source;
1575
1576# if 0 /* XXX Don't think we want this in modifier version... */
1577 if (BKE_object_pose_armature_get(ob_src)) {
1582 }
1583# endif
1584
1585 if (ob_src) {
1586 const bDeformGroup *dg;
1587 int i;
1588
1589 RNA_enum_item_add_separator(&item, &totitem);
1590
1591 const ListBase *defbase = BKE_object_defgroup_list(ob_src);
1592 for (i = 0, dg = static_cast<const bDeformGroup *>(defbase->first); dg; i++, dg = dg->next) {
1593 tmp_item.value = i;
1594 tmp_item.identifier = tmp_item.name = dg->name;
1595 RNA_enum_item_add(&item, &totitem, &tmp_item);
1596 }
1597 }
1598 }
1599 else if (STREQ(RNA_property_identifier(prop), "layers_shapekey_select_src")) {
1600 /* TODO */
1601 }
1602 else if (STREQ(RNA_property_identifier(prop), "layers_uv_select_src")) {
1603 Object *ob_src = dtmd->ob_source;
1604
1605 if (ob_src) {
1606 int num_data, i;
1607
1609 const Object *ob_eval = DEG_get_evaluated_object(depsgraph, ob_src);
1610 if (!ob_eval) {
1611 RNA_enum_item_end(&item, &totitem);
1612 *r_free = true;
1613 return item;
1614 }
1615 const Mesh *mesh_eval = BKE_object_get_evaluated_mesh(ob_eval);
1616 if (!mesh_eval) {
1617 RNA_enum_item_end(&item, &totitem);
1618 *r_free = true;
1619 return item;
1620 }
1621
1623
1624 RNA_enum_item_add_separator(&item, &totitem);
1625
1626 for (i = 0; i < num_data; i++) {
1627 tmp_item.value = i;
1628 tmp_item.identifier = tmp_item.name = CustomData_get_layer_name(
1629 &mesh_eval->corner_data, CD_PROP_FLOAT2, i);
1630 RNA_enum_item_add(&item, &totitem, &tmp_item);
1631 }
1632 }
1633 }
1634 else if (STREQ(RNA_property_identifier(prop), "layers_vcol_vert_select_src") ||
1635 STREQ(RNA_property_identifier(prop), "layers_vcol_loop_select_src"))
1636 {
1637 Object *ob_src = dtmd->ob_source;
1638
1639 if (ob_src) {
1641 "layers_vcol_vert_select_src") ?
1642 bke::AttrDomain::Point :
1643 bke::AttrDomain::Corner;
1644
1646 const Object *ob_eval = DEG_get_evaluated_object(depsgraph, ob_src);
1647 if (!ob_eval) {
1648 RNA_enum_item_end(&item, &totitem);
1649 *r_free = true;
1650 return item;
1651 }
1652 const Mesh *mesh_eval = BKE_object_get_evaluated_mesh(ob_eval);
1653 if (!mesh_eval) {
1654 RNA_enum_item_end(&item, &totitem);
1655 *r_free = true;
1656 return item;
1657 }
1658
1659 const CustomData *cdata;
1660 if (domain == bke::AttrDomain::Point) {
1661 cdata = &mesh_eval->vert_data;
1662 }
1663 else {
1664 cdata = &mesh_eval->corner_data;
1665 }
1666
1668
1669 int idx = 0;
1670 for (int i = 0; i < 2; i++) {
1671 int num_data = CustomData_number_of_layers(cdata, types[i]);
1672
1673 RNA_enum_item_add_separator(&item, &totitem);
1674
1675 for (int j = 0; j < num_data; j++) {
1676 tmp_item.value = idx++;
1677 tmp_item.identifier = tmp_item.name = CustomData_get_layer_name(cdata, types[i], j);
1678 RNA_enum_item_add(&item, &totitem, &tmp_item);
1679 }
1680 }
1681 }
1682 }
1683
1684 RNA_enum_item_end(&item, &totitem);
1685 *r_free = true;
1686
1687 return item;
1688}
1689
1690static const EnumPropertyItem *rna_DataTransferModifier_layers_select_dst_itemf(bContext *C,
1691 PointerRNA *ptr,
1692 PropertyRNA *prop,
1693 bool *r_free)
1694{
1696 EnumPropertyItem *item = nullptr, tmp_item = {0};
1697 int totitem = 0;
1698
1699 if (!C) { /* needed for docs and i18n tools */
1701 }
1702
1703 /* No active here! */
1708
1709 if (STREQ(RNA_property_identifier(prop), "layers_vgroup_select_dst")) {
1710 /* Only list destination layers if we have a single source! */
1711 if (dtmd->layers_select_src[DT_MULTILAYER_INDEX_MDEFORMVERT] >= 0) {
1712 Object *ob_dst = CTX_data_active_object(C); /* XXX Is this OK? */
1713
1714 if (ob_dst) {
1715 const bDeformGroup *dg;
1716 int i;
1717
1718 RNA_enum_item_add_separator(&item, &totitem);
1719
1720 const ListBase *defbase = BKE_object_defgroup_list(ob_dst);
1721 for (i = 0, dg = static_cast<const bDeformGroup *>(defbase->first); dg; i++, dg = dg->next)
1722 {
1723 tmp_item.value = i;
1724 tmp_item.identifier = tmp_item.name = dg->name;
1725 RNA_enum_item_add(&item, &totitem, &tmp_item);
1726 }
1727 }
1728 }
1729 }
1730 else if (STREQ(RNA_property_identifier(prop), "layers_shapekey_select_dst")) {
1731 /* TODO */
1732 }
1733 else if (STREQ(RNA_property_identifier(prop), "layers_uv_select_dst")) {
1734 /* Only list destination layers if we have a single source! */
1735 if (dtmd->layers_select_src[DT_MULTILAYER_INDEX_UV] >= 0) {
1736 Object *ob_dst = CTX_data_active_object(C); /* XXX Is this OK? */
1737
1738 if (ob_dst && ob_dst->data) {
1739 Mesh *me_dst;
1740 CustomData *corner_data;
1741 int num_data, i;
1742
1743 me_dst = static_cast<Mesh *>(ob_dst->data);
1744 corner_data = &me_dst->corner_data;
1745 num_data = CustomData_number_of_layers(corner_data, CD_PROP_FLOAT2);
1746
1747 RNA_enum_item_add_separator(&item, &totitem);
1748
1749 for (i = 0; i < num_data; i++) {
1750 tmp_item.value = i;
1751 tmp_item.identifier = tmp_item.name = CustomData_get_layer_name(
1752 corner_data, CD_PROP_FLOAT2, i);
1753 RNA_enum_item_add(&item, &totitem, &tmp_item);
1754 }
1755 }
1756 }
1757 }
1758 else if (STREQ(RNA_property_identifier(prop), "layers_vcol_vert_select_dst") ||
1759 STREQ(RNA_property_identifier(prop), "layers_vcol_loop_select_dst"))
1760 {
1761 int multilayer_index = STREQ(RNA_property_identifier(prop), "layers_vcol_vert_select_dst") ?
1764
1765 /* Only list destination layers if we have a single source! */
1766 if (dtmd->layers_select_src[multilayer_index] >= 0) {
1767 Object *ob_dst = CTX_data_active_object(C); /* XXX Is this OK? */
1768
1769 if (ob_dst && ob_dst->data) {
1771
1772 Mesh *me_dst = static_cast<Mesh *>(ob_dst->data);
1773 CustomData *cdata = STREQ(RNA_property_identifier(prop), "layers_vcol_vert_select_dst") ?
1774 &me_dst->vert_data :
1775 &me_dst->corner_data;
1776
1777 int idx = 0;
1778 for (int i = 0; i < 2; i++) {
1779 int num_data = CustomData_number_of_layers(cdata, types[i]);
1780
1781 RNA_enum_item_add_separator(&item, &totitem);
1782
1783 for (int j = 0; j < num_data; j++) {
1784 tmp_item.value = idx++;
1785 tmp_item.identifier = tmp_item.name = CustomData_get_layer_name(cdata, types[i], j);
1786 RNA_enum_item_add(&item, &totitem, &tmp_item);
1787 }
1788 }
1789 }
1790 }
1791 }
1792
1793 RNA_enum_item_end(&item, &totitem);
1794 *r_free = true;
1795
1796 return item;
1797}
1798
1799static const EnumPropertyItem *rna_DataTransferModifier_mix_mode_itemf(bContext *C,
1800 PointerRNA *ptr,
1801 PropertyRNA * /*prop*/,
1802 bool *r_free)
1803{
1805 EnumPropertyItem *item = nullptr;
1806 int totitem = 0;
1807
1808 bool support_advanced_mixing, support_threshold;
1809
1810 if (!C) { /* needed for docs and i18n tools */
1812 }
1813
1815
1817 dtmd->data_types, &support_advanced_mixing, &support_threshold);
1818
1819 if (support_threshold) {
1824 }
1825
1826 if (support_advanced_mixing) {
1827 RNA_enum_item_add_separator(&item, &totitem);
1832 }
1833
1834 RNA_enum_item_end(&item, &totitem);
1835 *r_free = true;
1836
1837 return item;
1838}
1839
1840static void rna_CorrectiveSmoothModifier_update(Main *bmain, Scene *scene, PointerRNA *ptr)
1841{
1843
1844 MEM_SAFE_FREE(csmd->delta_cache.deltas);
1845
1846 rna_Modifier_update(bmain, scene, ptr);
1847}
1848
1849static void rna_CorrectiveSmoothModifier_rest_source_update(Main *bmain,
1850 Scene *scene,
1851 PointerRNA *ptr)
1852{
1854
1855 if (csmd->rest_source != MOD_CORRECTIVESMOOTH_RESTSOURCE_BIND) {
1856 MEM_SAFE_FREE(csmd->bind_coords);
1857 csmd->bind_coords_num = 0;
1858 }
1859
1860 rna_CorrectiveSmoothModifier_update(bmain, scene, ptr);
1861}
1862
1863static bool rna_CorrectiveSmoothModifier_is_bind_get(PointerRNA *ptr)
1864{
1866 return (csmd->bind_coords != nullptr);
1867}
1868
1869static bool rna_SurfaceDeformModifier_is_bound_get(PointerRNA *ptr)
1870{
1871 return (((SurfaceDeformModifierData *)ptr->data)->verts != nullptr);
1872}
1873
1874static bool rna_ParticleInstanceModifier_particle_system_poll(PointerRNA *ptr,
1875 const PointerRNA value)
1876{
1878 ParticleSystem *psys = static_cast<ParticleSystem *>(value.data);
1879
1880 if (!psmd->ob) {
1881 return false;
1882 }
1883
1884 /* make sure psys is in the object */
1885 return BLI_findindex(&psmd->ob->particlesystem, psys) != -1;
1886}
1887
1888static PointerRNA rna_ParticleInstanceModifier_particle_system_get(PointerRNA *ptr)
1889{
1891 ParticleSystem *psys;
1892
1893 if (!psmd->ob) {
1894 return PointerRNA_NULL;
1895 }
1896
1897 psys = static_cast<ParticleSystem *>(BLI_findlink(&psmd->ob->particlesystem, psmd->psys - 1));
1898 PointerRNA rptr = RNA_pointer_create((ID *)psmd->ob, &RNA_ParticleSystem, psys);
1899 return rptr;
1900}
1901
1902static void rna_ParticleInstanceModifier_particle_system_set(PointerRNA *ptr,
1903 const PointerRNA value,
1904 ReportList * /*reports*/)
1905{
1907
1908 if (!psmd->ob) {
1909 return;
1910 }
1911
1912 psmd->psys = BLI_findindex(&psmd->ob->particlesystem, value.data) + 1;
1913 CLAMP_MIN(psmd->psys, 1);
1914}
1915
1920static void rna_Modifier_show_expanded_set(PointerRNA *ptr, bool value)
1921{
1922 ModifierData *md = static_cast<ModifierData *>(ptr->data);
1924}
1925
1931static bool rna_Modifier_show_expanded_get(PointerRNA *ptr)
1932{
1933 ModifierData *md = static_cast<ModifierData *>(ptr->data);
1935}
1936
1937static bool rna_NodesModifier_node_group_poll(PointerRNA * /*ptr*/, PointerRNA value)
1938{
1939 bNodeTree *ntree = static_cast<bNodeTree *>(value.data);
1940 if (ntree->type != NTREE_GEOMETRY) {
1941 return false;
1942 }
1943 if (!ntree->geometry_node_asset_traits) {
1944 return false;
1945 }
1947 return false;
1948 }
1949 return true;
1950}
1951
1952static void rna_NodesModifier_node_group_update(Main *bmain, Scene *scene, PointerRNA *ptr)
1953{
1954 Object *object = (Object *)ptr->owner_id;
1955 NodesModifierData *nmd = static_cast<NodesModifierData *>(ptr->data);
1956 rna_Modifier_dependency_update(bmain, scene, ptr);
1957 MOD_nodes_update_interface(object, nmd);
1958}
1959
1960static blender::nodes::geo_eval_log::GeoTreeLog *get_nodes_modifier_log(NodesModifierData &nmd)
1961{
1962 if (!nmd.runtime->eval_log) {
1963 return nullptr;
1964 }
1965 blender::bke::ModifierComputeContext compute_context{nullptr, nmd.modifier.name};
1966 return &nmd.runtime->eval_log->get_tree_log(compute_context.hash());
1967}
1968
1969static blender::Span<blender::nodes::geo_eval_log::NodeWarning> get_node_modifier_warnings(
1970 NodesModifierData &nmd)
1971{
1972 if (auto *log = get_nodes_modifier_log(nmd)) {
1973 log->ensure_node_warnings(nmd.node_group);
1974 return log->all_warnings;
1975 }
1976 return {};
1977}
1978
1979static void rna_NodesModifier_node_warnings_iterator_begin(CollectionPropertyIterator *iter,
1980 PointerRNA *ptr)
1981{
1982 NodesModifierData *nmd = static_cast<NodesModifierData *>(ptr->data);
1983 iter->internal.count.item = 0;
1984 iter->valid = !get_node_modifier_warnings(*nmd).is_empty();
1985}
1986
1987static void rna_NodesModifier_node_warnings_iterator_next(CollectionPropertyIterator *iter)
1988{
1989 NodesModifierData *nmd = static_cast<NodesModifierData *>(iter->parent.data);
1990 iter->internal.count.item++;
1991 iter->valid = get_node_modifier_warnings(*nmd).size() > iter->internal.count.item;
1992}
1993
1994static PointerRNA rna_NodesModifier_node_warnings_iterator_get(CollectionPropertyIterator *iter)
1995{
1996 NodesModifierData *nmd = static_cast<NodesModifierData *>(iter->parent.data);
1997 blender::Span warnings = get_node_modifier_warnings(*nmd);
1998 return RNA_pointer_create(iter->parent.owner_id,
1999 &RNA_NodesModifierWarning,
2000 (void *)&warnings[iter->internal.count.item]);
2001}
2002
2003static int rna_NodesModifier_node_warnings_length(PointerRNA *ptr)
2004{
2005 NodesModifierData *nmd = static_cast<NodesModifierData *>(ptr->data);
2006 return get_node_modifier_warnings(*nmd).size();
2007}
2008
2009static void rna_NodesModifierWarning_message_get(PointerRNA *ptr, char *r_value)
2010{
2011 const auto *warning = static_cast<const blender::nodes::geo_eval_log::NodeWarning *>(ptr->data);
2012 strcpy(r_value, warning->message.c_str());
2013}
2014
2015static int rna_NodesModifierWarning_message_length(PointerRNA *ptr)
2016{
2017 const auto *warning = static_cast<const blender::nodes::geo_eval_log::NodeWarning *>(ptr->data);
2018 return warning->message.size();
2019}
2020
2021static int rna_NodesModifierWarning_type_get(PointerRNA *ptr)
2022{
2023 const auto *warning = static_cast<const blender::nodes::geo_eval_log::NodeWarning *>(ptr->data);
2024 return int(warning->type);
2025}
2026
2027static IDProperty **rna_NodesModifier_properties(PointerRNA *ptr)
2028{
2029 NodesModifierData *nmd = static_cast<NodesModifierData *>(ptr->data);
2030 NodesModifierSettings *settings = &nmd->settings;
2031 return &settings->properties;
2032}
2033
2034static void rna_Lineart_start_level_set(PointerRNA *ptr, int value)
2035{
2037
2038 value = std::clamp(value, 0, 128);
2039 lmd->level_start = value;
2040 lmd->level_end = std::max(value, int(lmd->level_end));
2041}
2042
2043static void rna_Lineart_end_level_set(PointerRNA *ptr, int value)
2044{
2046
2047 value = std::clamp(value, 0, 128);
2048 lmd->level_end = value;
2049 lmd->level_start = std::min(value, int(lmd->level_start));
2050}
2051
2052static const NodesModifierData *find_nodes_modifier_by_bake(const Object &object,
2053 const NodesModifierBake &bake)
2054{
2055 LISTBASE_FOREACH (const ModifierData *, md, &object.modifiers) {
2056 if (md->type != eModifierType_Nodes) {
2057 continue;
2058 }
2059 const NodesModifierData *nmd = reinterpret_cast<const NodesModifierData *>(md);
2060 const blender::Span<NodesModifierBake> bakes{nmd->bakes, nmd->bakes_num};
2061 if (bakes.contains_ptr(&bake)) {
2062 return nmd;
2063 }
2064 }
2065 return nullptr;
2066}
2067
2068static PointerRNA rna_NodesModifierBake_node_get(PointerRNA *ptr)
2069{
2070 const Object *ob = reinterpret_cast<Object *>(ptr->owner_id);
2071 const NodesModifierBake *bake = static_cast<NodesModifierBake *>(ptr->data);
2072 const NodesModifierData *nmd = find_nodes_modifier_by_bake(*ob, *bake);
2073 if (!nmd->node_group) {
2074 return PointerRNA_NULL;
2075 }
2076 const bNodeTree *tree;
2077 const bNode *node = nmd->node_group->find_nested_node(bake->id, &tree);
2078 if (!node) {
2079 return PointerRNA_NULL;
2080 }
2081 BLI_assert(tree != nullptr);
2082 return RNA_pointer_create(const_cast<ID *>(&tree->id), &RNA_Node, const_cast<bNode *>(node));
2083}
2084
2085static StructRNA *rna_NodesModifierBake_data_block_typef(PointerRNA *ptr)
2086{
2087 NodesModifierDataBlock *data_block = static_cast<NodesModifierDataBlock *>(ptr->data);
2088 return ID_code_to_RNA_type(data_block->id_type);
2089}
2090
2091bool rna_GreasePencilModifier_material_poll(PointerRNA *ptr, PointerRNA value)
2092{
2093 Object *ob = reinterpret_cast<Object *>(ptr->owner_id);
2094 Material *ma = reinterpret_cast<Material *>(value.owner_id);
2095
2096 return BKE_object_material_index_get(ob, ma) != -1;
2097}
2098
2099/* Write material to a generic target pointer without the final modifier struct. */
2100static void rna_GreasePencilModifier_material_set(PointerRNA *ptr,
2101 PointerRNA value,
2102 ReportList *reports,
2103 Material **ma_target)
2104{
2105 Object *ob = reinterpret_cast<Object *>(ptr->owner_id);
2106 Material *ma = reinterpret_cast<Material *>(value.data);
2107
2108 if (ma == nullptr || BKE_object_material_index_get(ob, ma) != -1) {
2109 id_lib_extern(reinterpret_cast<ID *>(ob));
2110 *ma_target = ma;
2111 }
2112 else {
2114 reports,
2115 RPT_ERROR,
2116 "Cannot assign material '%s', it has to be used by the grease pencil object already",
2117 ma->id.name);
2118 }
2119}
2120
2121# define RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(_type) \
2122 static void rna_##_type##Modifier_material_filter_set( \
2123 PointerRNA *ptr, PointerRNA value, ReportList *reports) \
2124 { \
2125 _type##ModifierData *tmd = static_cast<_type##ModifierData *>(ptr->data); \
2126 rna_GreasePencilModifier_material_set(ptr, value, reports, &tmd->influence.material); \
2127 }
2128
2129# define RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(_type) \
2130 static void rna_##_type##Modifier_vertex_group_name_set(PointerRNA *ptr, const char *value) \
2131 { \
2132 _type##ModifierData *tmd = static_cast<_type##ModifierData *>(ptr->data); \
2133 rna_object_vgroup_name_set(ptr, \
2134 value, \
2135 tmd->influence.vertex_group_name, \
2136 sizeof(tmd->influence.vertex_group_name)); \
2137 }
2138
2139RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilColor);
2140RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilMirror);
2141RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilOffset);
2142RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilOpacity);
2143RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilSubdiv);
2144RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilTint);
2145RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilSmooth);
2146RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilNoise);
2147RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilThick);
2148RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilLattice);
2149RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilDash);
2150RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilMulti);
2151RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilLength);
2152RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilWeightAngle);
2153RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilArray);
2154RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilWeightProximity);
2155RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilHook);
2156RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilSimplify);
2157RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilEnvelope);
2158RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilOutline);
2159RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilShrinkwrap);
2160RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilBuild);
2161RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilTexture);
2162
2163RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilOffset);
2164RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilOpacity);
2165RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilTint);
2166RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilSmooth);
2167RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilNoise);
2168RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilThick);
2169RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilLattice);
2170RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilWeightAngle);
2171RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilWeightProximity);
2172RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilHook);
2173RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilArmature);
2174RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilSimplify);
2175RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilEnvelope);
2176RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilShrinkwrap);
2177RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilTexture);
2178
2179static void rna_GreasePencilLineartModifier_material_set(PointerRNA *ptr,
2180 PointerRNA value,
2181 ReportList *reports)
2182{
2184 ptr->data);
2185 Material **ma_target = &lmd->target_material;
2186
2187 rna_GreasePencilModifier_material_set(ptr, value, reports, ma_target);
2188}
2189
2190static void rna_GreasePencilOpacityModifier_opacity_factor_range(
2191 PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
2192{
2194
2195 *min = 0.0f;
2196 *softmin = 0.0f;
2197 *softmax = (omd->flag & MOD_GREASE_PENCIL_OPACITY_USE_UNIFORM_OPACITY) ? 1.0f : 2.0f;
2198 *max = *softmax;
2199}
2200
2201static void rna_GreasePencilOpacityModifier_opacity_factor_max_set(PointerRNA *ptr, float value)
2202{
2204
2206 std::min(value, 1.0f) :
2207 value;
2208}
2209
2210static const GreasePencilDashModifierData *find_grease_pencil_dash_modifier_of_segment(
2211 const Object &ob, const GreasePencilDashModifierSegment &dash_segment)
2212{
2213 LISTBASE_FOREACH (const ModifierData *, md, &ob.modifiers) {
2215 const auto *dmd = reinterpret_cast<const GreasePencilDashModifierData *>(md);
2216 if (dmd->segments().contains_ptr(&dash_segment)) {
2217 return dmd;
2218 }
2219 }
2220 }
2221 return nullptr;
2222}
2223
2224static std::optional<std::string> rna_GreasePencilDashModifierSegment_path(const PointerRNA *ptr)
2225
2226{
2227 const Object *ob = reinterpret_cast<Object *>(ptr->owner_id);
2228 const auto *dash_segment = static_cast<GreasePencilDashModifierSegment *>(ptr->data);
2229 const GreasePencilDashModifierData *dmd = find_grease_pencil_dash_modifier_of_segment(
2230 *ob, *dash_segment);
2231 BLI_assert(dmd != nullptr);
2232
2233 char name_esc[sizeof(dmd->modifier.name) * 2];
2234 BLI_str_escape(name_esc, dmd->modifier.name, sizeof(name_esc));
2235
2236 char ds_name_esc[sizeof(dash_segment->name) * 2];
2237 BLI_str_escape(ds_name_esc, dash_segment->name, sizeof(ds_name_esc));
2238
2239 return fmt::format("modifiers[\"{}\"].segments[\"{}\"]", name_esc, ds_name_esc);
2240}
2241
2242static void rna_GreasePencilDashModifierSegment_name_set(PointerRNA *ptr, const char *value)
2243{
2244 const Object *ob = reinterpret_cast<Object *>(ptr->owner_id);
2245 auto *dash_segment = static_cast<GreasePencilDashModifierSegment *>(ptr->data);
2246 const GreasePencilDashModifierData *dmd = find_grease_pencil_dash_modifier_of_segment(
2247 *ob, *dash_segment);
2248 BLI_assert(dmd != nullptr);
2249
2250 const std::string oldname = dash_segment->name;
2251 STRNCPY_UTF8(dash_segment->name, value);
2253 [dmd, dash_segment](const blender::StringRef name) {
2254 for (const GreasePencilDashModifierSegment &ds : dmd->segments()) {
2255 if (&ds != dash_segment && ds.name == name) {
2256 return true;
2257 }
2258 }
2259 return false;
2260 },
2261 '.',
2262 dash_segment->name);
2263
2264 /* Fix all the animation data which may link to this. */
2265 char name_esc[sizeof(dmd->modifier.name) * 2];
2266 BLI_str_escape(name_esc, dmd->modifier.name, sizeof(name_esc));
2267 char rna_path_prefix[36 + sizeof(name_esc) + 1];
2268 SNPRINTF(rna_path_prefix, "modifiers[\"%s\"].segments", name_esc);
2269 BKE_animdata_fix_paths_rename_all(nullptr, rna_path_prefix, oldname.c_str(), dash_segment->name);
2270}
2271
2272static void rna_GreasePencilDashModifier_segments_begin(CollectionPropertyIterator *iter,
2273 PointerRNA *ptr)
2274{
2275 auto *dmd = static_cast<GreasePencilDashModifierData *>(ptr->data);
2277 dmd->segments_array,
2279 dmd->segments_num,
2280 false,
2281 nullptr);
2282}
2283
2284const EnumPropertyItem *grease_pencil_build_time_mode_filter(bContext * /*C*/,
2285 PointerRNA *ptr,
2286 PropertyRNA * /*prop*/,
2287 bool *r_free)
2288{
2289
2290 auto *md = static_cast<ModifierData *>(ptr->data);
2291 auto *mmd = reinterpret_cast<BuildGpencilModifierData *>(md);
2292 const bool is_concurrent = (mmd->mode == MOD_GREASE_PENCIL_BUILD_MODE_CONCURRENT);
2293
2294 EnumPropertyItem *item_list = nullptr;
2295 int totitem = 0;
2296
2298 item->identifier != nullptr;
2299 item++)
2300 {
2301 if (is_concurrent && (item->value == MOD_GREASE_PENCIL_BUILD_TIMEMODE_DRAWSPEED)) {
2302 continue;
2303 }
2304 RNA_enum_item_add(&item_list, &totitem, item);
2305 }
2306
2307 RNA_enum_item_end(&item_list, &totitem);
2308 *r_free = true;
2309
2310 return item_list;
2311}
2312
2313static const GreasePencilTimeModifierData *find_grease_pencil_time_modifier_of_segment(
2314 const Object &ob, const GreasePencilTimeModifierSegment &time_segment)
2315{
2316 LISTBASE_FOREACH (const ModifierData *, md, &ob.modifiers) {
2318 const auto *tmd = reinterpret_cast<const GreasePencilTimeModifierData *>(md);
2319 if (tmd->segments().contains_ptr(&time_segment)) {
2320 return tmd;
2321 }
2322 }
2323 }
2324 return nullptr;
2325}
2326
2327static std::optional<std::string> rna_GreasePencilTimeModifierSegment_path(const PointerRNA *ptr)
2328
2329{
2330 const Object *ob = reinterpret_cast<Object *>(ptr->owner_id);
2331 const auto *segment = static_cast<GreasePencilTimeModifierSegment *>(ptr->data);
2332 const GreasePencilTimeModifierData *tmd = find_grease_pencil_time_modifier_of_segment(*ob,
2333 *segment);
2334 BLI_assert(tmd != nullptr);
2335
2336 char name_esc[sizeof(tmd->modifier.name) * 2];
2337 BLI_str_escape(name_esc, tmd->modifier.name, sizeof(name_esc));
2338
2339 char ds_name_esc[sizeof(segment->name) * 2];
2340 BLI_str_escape(ds_name_esc, segment->name, sizeof(ds_name_esc));
2341
2342 return fmt::format("modifiers[\"{}\"].segments[\"{}\"]", name_esc, ds_name_esc);
2343}
2344
2345static void rna_GreasePencilTimeModifierSegment_name_set(PointerRNA *ptr, const char *value)
2346{
2347 const Object *ob = reinterpret_cast<Object *>(ptr->owner_id);
2348 auto *segment = static_cast<GreasePencilTimeModifierSegment *>(ptr->data);
2349 const GreasePencilTimeModifierData *tmd = find_grease_pencil_time_modifier_of_segment(*ob,
2350 *segment);
2351 BLI_assert(tmd != nullptr);
2352
2353 const std::string oldname = segment->name;
2354 STRNCPY_UTF8(segment->name, value);
2356 [tmd, segment](const blender::StringRef name) {
2357 for (const GreasePencilTimeModifierSegment &ds : tmd->segments()) {
2358 if (&ds != segment && ds.name == name) {
2359 return true;
2360 }
2361 }
2362 return false;
2363 },
2364 '.',
2365 segment->name);
2366
2367 /* Fix all the animation data which may link to this. */
2368 char name_esc[sizeof(tmd->modifier.name) * 2];
2369 BLI_str_escape(name_esc, tmd->modifier.name, sizeof(name_esc));
2370 char rna_path_prefix[36 + sizeof(name_esc) + 1];
2371 SNPRINTF(rna_path_prefix, "modifiers[\"%s\"].segments", name_esc);
2372 BKE_animdata_fix_paths_rename_all(nullptr, rna_path_prefix, oldname.c_str(), segment->name);
2373}
2374
2375static void rna_GreasePencilTimeModifier_segments_begin(CollectionPropertyIterator *iter,
2376 PointerRNA *ptr)
2377{
2378 auto *tmd = static_cast<GreasePencilTimeModifierData *>(ptr->data);
2380 tmd->segments_array,
2382 tmd->segments_num,
2383 false,
2384 nullptr);
2385}
2386
2387static void rna_GreasePencilTimeModifier_start_frame_set(PointerRNA *ptr, int value)
2388{
2389 auto *tmd = static_cast<GreasePencilTimeModifierData *>(ptr->data);
2390 CLAMP(value, MINFRAME, MAXFRAME);
2391 tmd->sfra = value;
2392
2393 if (tmd->sfra >= tmd->efra) {
2394 tmd->efra = std::min(tmd->sfra, MAXFRAME);
2395 }
2396}
2397
2398static void rna_GreasePencilTimeModifier_end_frame_set(PointerRNA *ptr, int value)
2399{
2400 auto *tmd = static_cast<GreasePencilTimeModifierData *>(ptr->data);
2401 CLAMP(value, MINFRAME, MAXFRAME);
2402 tmd->efra = value;
2403
2404 if (tmd->sfra >= tmd->efra) {
2405 tmd->sfra = std::max(tmd->efra, MINFRAME);
2406 }
2407}
2408
2409static void rna_GreasePencilOutlineModifier_outline_material_set(PointerRNA *ptr,
2410 PointerRNA value,
2411 ReportList *reports)
2412{
2414 rna_GreasePencilModifier_material_set(ptr, value, reports, &omd->outline_material);
2415}
2416
2417static int rna_GreasePencilShrinkwrapModifier_face_cull_get(PointerRNA *ptr)
2418{
2422}
2423
2424static void rna_GreasePencilShrinkwrapModifier_face_cull_set(PointerRNA *ptr, int value)
2425{
2427 ptr->data);
2428 smd->shrink_opts = (smd->shrink_opts & ~MOD_SHRINKWRAP_CULL_TARGET_MASK) | value;
2429}
2430
2431#else
2432
2433static void rna_def_modifier_panel_open_prop(StructRNA *srna, const char *identifier, const int id)
2434{
2435 BLI_assert(id >= 0);
2437
2438 PropertyRNA *prop;
2439 prop = RNA_def_property(srna, identifier, PROP_BOOLEAN, PROP_NONE);
2442 prop, nullptr, "modifier.layout_panel_open_flag", (int64_t(1) << id));
2444}
2445
2447{
2448 PropertyRNA *prop;
2450
2451 prop = RNA_def_property(srna, "uv_smooth", PROP_ENUM, PROP_NONE);
2452 RNA_def_property_enum_sdna(prop, nullptr, "uv_smooth");
2454 RNA_def_property_ui_text(prop, "UV Smooth", "Controls how smoothing is applied to UVs");
2455 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2456
2457 prop = RNA_def_property(srna, "quality", PROP_INT, PROP_UNSIGNED);
2458 RNA_def_property_int_sdna(prop, nullptr, "quality");
2459 RNA_def_property_range(prop, 1, 10);
2460 RNA_def_property_ui_range(prop, 1, 6, 1, -1);
2462 prop, "Quality", "Accuracy of vertex positions, lower value is faster but less precise");
2463 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2464
2465 prop = RNA_def_property(srna, "boundary_smooth", PROP_ENUM, PROP_NONE);
2466 RNA_def_property_enum_sdna(prop, nullptr, "boundary_smooth");
2468 RNA_def_property_ui_text(prop, "Boundary Smooth", "Controls how open boundaries are smoothed");
2469 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2470
2472}
2473
2475{
2476 static const EnumPropertyItem prop_subdivision_type_items[] = {
2478 "CATMULL_CLARK",
2479 0,
2480 "Catmull-Clark",
2481 "Create a smooth curved surface using the Catmull-Clark subdivision scheme"},
2482 {SUBSURF_TYPE_SIMPLE, "SIMPLE", 0, "Simple", "Subdivide faces without changing shape"},
2483 {0, nullptr, 0, nullptr, nullptr},
2484 };
2485
2486 StructRNA *srna;
2487 PropertyRNA *prop;
2488
2489 srna = RNA_def_struct(brna, "SubsurfModifier", "Modifier");
2490 RNA_def_struct_ui_text(srna, "Subdivision Surface Modifier", "Subdivision surface modifier");
2491 RNA_def_struct_sdna(srna, "SubsurfModifierData");
2492 RNA_def_struct_ui_icon(srna, ICON_MOD_SUBSURF);
2493
2495
2497
2498 prop = RNA_def_property(srna, "subdivision_type", PROP_ENUM, PROP_NONE);
2499 RNA_def_property_enum_sdna(prop, nullptr, "subdivType");
2500 RNA_def_property_enum_items(prop, prop_subdivision_type_items);
2501 RNA_def_property_ui_text(prop, "Subdivision Type", "Select type of subdivision algorithm");
2502 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2503
2504 /* see CCGSUBSURF_LEVEL_MAX for max limit */
2505 prop = RNA_def_property(srna, "levels", PROP_INT, PROP_UNSIGNED);
2506 RNA_def_property_int_sdna(prop, nullptr, "levels");
2507 RNA_def_property_range(prop, 0, 11);
2508 RNA_def_property_ui_range(prop, 0, 6, 1, -1);
2509 RNA_def_property_ui_text(prop, "Levels", "Number of subdivisions to perform in the 3D viewport");
2510 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2511
2512 prop = RNA_def_property(srna, "render_levels", PROP_INT, PROP_UNSIGNED);
2513 RNA_def_property_int_sdna(prop, nullptr, "renderLevels");
2514 RNA_def_property_range(prop, 0, 11);
2515 RNA_def_property_ui_range(prop, 0, 6, 1, -1);
2517 prop, "Render Levels", "Number of subdivisions to perform when rendering");
2518
2519 prop = RNA_def_property(srna, "show_only_control_edges", PROP_BOOLEAN, PROP_NONE);
2521 RNA_def_property_ui_text(prop, "Optimal Display", "Skip displaying interior subdivided edges");
2522 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2523
2524 prop = RNA_def_property(srna, "use_creases", PROP_BOOLEAN, PROP_NONE);
2527 prop, "Use Creases", "Use mesh crease information to sharpen edges or corners");
2528 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2529
2530 prop = RNA_def_property(srna, "use_custom_normals", PROP_BOOLEAN, PROP_NONE);
2533 prop, "Use Custom Normals", "Interpolates existing custom normals to resulting mesh");
2534 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2535
2536 prop = RNA_def_property(srna, "use_limit_surface", PROP_BOOLEAN, PROP_NONE);
2538 prop, nullptr, "flags", eSubsurfModifierFlag_UseRecursiveSubdivision);
2540 "Use Limit Surface",
2541 "Place vertices at the surface that would be produced with infinite "
2542 "levels of subdivision (smoothest possible shape)");
2543 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2544
2546}
2547
2549{
2550 static const EnumPropertyItem prop_texture_coordinates_items[] = {
2552 "LOCAL",
2553 0,
2554 "Local",
2555 "Use the local coordinate system for the texture coordinates"},
2557 "GLOBAL",
2558 0,
2559 "Global",
2560 "Use the global coordinate system for the texture coordinates"},
2562 "OBJECT",
2563 0,
2564 "Object",
2565 "Use the linked object's local coordinate system for the texture coordinates"},
2566 {MOD_DISP_MAP_UV, "UV", 0, "UV", "Use UV coordinates for the texture coordinates"},
2567 {0, nullptr, 0, nullptr, nullptr},
2568 };
2569
2570 PropertyRNA *prop;
2571
2573
2574 prop = RNA_def_property(srna, "texture", PROP_POINTER, PROP_NONE);
2575 RNA_def_property_ui_text(prop, "Texture", "");
2577 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
2578
2579 prop = RNA_def_property(srna, "texture_coords", PROP_ENUM, PROP_NONE);
2580 RNA_def_property_enum_sdna(prop, nullptr, "texmapping");
2581 RNA_def_property_enum_items(prop, prop_texture_coordinates_items);
2582 RNA_def_property_ui_text(prop, "Texture Coordinates", "");
2583 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
2584
2585 prop = RNA_def_property(srna, "uv_layer", PROP_STRING, PROP_NONE);
2586 RNA_def_property_string_sdna(prop, nullptr, "uvlayer_name");
2587 RNA_def_property_ui_text(prop, "UV Map", "UV map name");
2589 prop, nullptr, nullptr, "rna_MappingInfoModifier_uvlayer_name_set");
2590 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2591
2592 prop = RNA_def_property(srna, "texture_coords_object", PROP_POINTER, PROP_NONE);
2593 RNA_def_property_pointer_sdna(prop, nullptr, "map_object");
2595 prop, "Texture Coordinate Object", "Object to set the texture coordinates");
2597 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
2598
2599 prop = RNA_def_property(srna, "texture_coords_bone", PROP_STRING, PROP_NONE);
2600 RNA_def_property_string_sdna(prop, nullptr, "map_bone");
2601 RNA_def_property_ui_text(prop, "Texture Coordinate Bone", "Bone to set the texture coordinates");
2602 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
2603
2605}
2606
2608{
2609 StructRNA *srna;
2610 PropertyRNA *prop;
2611
2612 srna = RNA_def_struct(brna, "WarpModifier", "Modifier");
2613 RNA_def_struct_ui_text(srna, "Warp Modifier", "Warp modifier");
2614 RNA_def_struct_sdna(srna, "WarpModifierData");
2615 RNA_def_struct_ui_icon(srna, ICON_MOD_WARP);
2616
2618
2619 prop = RNA_def_property(srna, "object_from", PROP_POINTER, PROP_NONE);
2620 RNA_def_property_pointer_sdna(prop, nullptr, "object_from");
2621 RNA_def_property_ui_text(prop, "Object From", "Object to transform from");
2623 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
2624
2625 prop = RNA_def_property(srna, "bone_from", PROP_STRING, PROP_NONE);
2626 RNA_def_property_string_sdna(prop, nullptr, "bone_from");
2627 RNA_def_property_ui_text(prop, "Bone From", "Bone to transform from");
2628 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
2629
2630 prop = RNA_def_property(srna, "object_to", PROP_POINTER, PROP_NONE);
2631 RNA_def_property_pointer_sdna(prop, nullptr, "object_to");
2632 RNA_def_property_ui_text(prop, "Object To", "Object to transform to");
2634 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
2635
2636 prop = RNA_def_property(srna, "bone_to", PROP_STRING, PROP_NONE);
2637 RNA_def_property_string_sdna(prop, nullptr, "bone_to");
2638 RNA_def_property_ui_text(prop, "Bone To", "Bone defining offset");
2639 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
2640
2641 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
2643 RNA_def_property_ui_range(prop, -100, 100, 10, 2);
2644 RNA_def_property_ui_text(prop, "Strength", "");
2645 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2646
2647 prop = RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);
2649 RNA_def_property_ui_text(prop, "Falloff Type", "");
2651 BLT_I18NCONTEXT_ID_CURVE_LEGACY); /* Abusing id_curve :/ */
2652 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2653
2654 prop = RNA_def_property(srna, "falloff_radius", PROP_FLOAT, PROP_DISTANCE);
2655 RNA_def_property_ui_text(prop, "Radius", "Radius to apply");
2656 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2657
2658 prop = RNA_def_property(srna, "falloff_curve", PROP_POINTER, PROP_NONE);
2659 RNA_def_property_pointer_sdna(prop, nullptr, "curfalloff");
2660 RNA_def_property_ui_text(prop, "Falloff Curve", "Custom falloff curve");
2661 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2662
2663 prop = RNA_def_property(srna, "use_volume_preserve", PROP_BOOLEAN, PROP_NONE);
2665 RNA_def_property_ui_text(prop, "Preserve Volume", "Preserve volume when rotations are used");
2666 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2667
2668 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
2669 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
2670 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
2671 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_WarpModifier_defgrp_name_set");
2672 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2673
2674 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
2676 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
2677 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2678
2680
2682}
2683
2685{
2686 StructRNA *srna;
2687 PropertyRNA *prop;
2688
2689 srna = RNA_def_struct(brna, "MultiresModifier", "Modifier");
2690 RNA_def_struct_ui_text(srna, "Multires Modifier", "Multiresolution mesh modifier");
2691 RNA_def_struct_sdna(srna, "MultiresModifierData");
2692 RNA_def_struct_ui_icon(srna, ICON_MOD_MULTIRES);
2693
2695
2697
2698 prop = RNA_def_property(srna, "levels", PROP_INT, PROP_UNSIGNED);
2699 RNA_def_property_int_sdna(prop, nullptr, "lvl");
2700 RNA_def_property_ui_text(prop, "Levels", "Number of subdivisions to use in the viewport");
2701 RNA_def_property_int_funcs(prop, nullptr, nullptr, "rna_MultiresModifier_level_range");
2702 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2703
2704 prop = RNA_def_property(srna, "sculpt_levels", PROP_INT, PROP_UNSIGNED);
2705 RNA_def_property_int_sdna(prop, nullptr, "sculptlvl");
2706 RNA_def_property_ui_text(prop, "Sculpt Levels", "Number of subdivisions to use in sculpt mode");
2707 RNA_def_property_int_funcs(prop, nullptr, nullptr, "rna_MultiresModifier_level_range");
2708 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2709
2710 prop = RNA_def_property(srna, "render_levels", PROP_INT, PROP_UNSIGNED);
2711 RNA_def_property_int_sdna(prop, nullptr, "renderlvl");
2712 RNA_def_property_ui_text(prop, "Render Levels", "The subdivision level visible at render time");
2713 RNA_def_property_int_funcs(prop, nullptr, nullptr, "rna_MultiresModifier_level_range");
2714
2715 prop = RNA_def_property(srna, "total_levels", PROP_INT, PROP_UNSIGNED);
2716 RNA_def_property_int_sdna(prop, nullptr, "totlvl");
2719 prop, "Total Levels", "Number of subdivisions for which displacements are stored");
2720
2721 prop = RNA_def_property(srna, "is_external", PROP_BOOLEAN, PROP_NONE);
2723 RNA_def_property_boolean_funcs(prop, "rna_MultiresModifier_external_get", nullptr);
2725 prop, "External", "Store multires displacements outside the .blend file, to save memory");
2726
2727 prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH);
2729 "rna_MultiresModifier_filepath_get",
2730 "rna_MultiresModifier_filepath_length",
2731 "rna_MultiresModifier_filepath_set");
2732 RNA_def_property_ui_text(prop, "File Path", "Path to external displacements file");
2733 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2734
2735 prop = RNA_def_property(srna, "show_only_control_edges", PROP_BOOLEAN, PROP_NONE);
2738 prop, "Optimal Display", "Skip drawing/rendering of interior subdivided edges");
2739 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2740
2741 prop = RNA_def_property(srna, "use_creases", PROP_BOOLEAN, PROP_NONE);
2744 prop, "Use Creases", "Use mesh crease information to sharpen edges or corners");
2745 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2746
2747 prop = RNA_def_property(srna, "use_custom_normals", PROP_BOOLEAN, PROP_NONE);
2750 prop, "Use Custom Normals", "Interpolates existing custom normals to resulting mesh");
2751 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2752
2753 prop = RNA_def_property(srna, "use_sculpt_base_mesh", PROP_BOOLEAN, PROP_NONE);
2756 "Sculpt Base Mesh",
2757 "Make Sculpt Mode tools deform the base mesh while previewing the "
2758 "displacement of higher subdivision levels");
2759 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2760
2762}
2763
2765{
2766 StructRNA *srna;
2767 PropertyRNA *prop;
2768
2769 srna = RNA_def_struct(brna, "LatticeModifier", "Modifier");
2770 RNA_def_struct_ui_text(srna, "Lattice Modifier", "Lattice deformation modifier");
2771 RNA_def_struct_sdna(srna, "LatticeModifierData");
2772 RNA_def_struct_ui_icon(srna, ICON_MOD_LATTICE);
2773
2775
2776 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
2777 RNA_def_property_ui_text(prop, "Object", "Lattice object to deform with");
2779 prop, nullptr, "rna_LatticeModifier_object_set", nullptr, "rna_Lattice_object_poll");
2781 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
2782
2783 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
2784 RNA_def_property_string_sdna(prop, nullptr, "name");
2786 prop,
2787 "Vertex Group",
2788 "Name of Vertex Group which determines influence of modifier per point");
2789 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_LatticeModifier_name_set");
2790 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2791
2792 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
2794 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
2795 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2796
2797 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
2799 RNA_def_property_ui_range(prop, 0, 1, 10, 2);
2800 RNA_def_property_ui_text(prop, "Strength", "Strength of modifier effect");
2801 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2802
2804}
2805
2807{
2808 StructRNA *srna;
2809 PropertyRNA *prop;
2810
2811 static const EnumPropertyItem prop_deform_axis_items[] = {
2812 {MOD_CURVE_POSX, "POS_X", 0, "X", ""},
2813 {MOD_CURVE_POSY, "POS_Y", 0, "Y", ""},
2814 {MOD_CURVE_POSZ, "POS_Z", 0, "Z", ""},
2815 {MOD_CURVE_NEGX, "NEG_X", 0, "-X", ""},
2816 {MOD_CURVE_NEGY, "NEG_Y", 0, "-Y", ""},
2817 {MOD_CURVE_NEGZ, "NEG_Z", 0, "-Z", ""},
2818 {0, nullptr, 0, nullptr, nullptr},
2819 };
2820
2821 srna = RNA_def_struct(brna, "CurveModifier", "Modifier");
2822 RNA_def_struct_ui_text(srna, "Curve Modifier", "Curve deformation modifier");
2823 RNA_def_struct_sdna(srna, "CurveModifierData");
2824 RNA_def_struct_ui_icon(srna, ICON_MOD_CURVE);
2825
2827
2828 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
2829 RNA_def_property_ui_text(prop, "Object", "Curve object to deform with");
2831 prop, nullptr, "rna_CurveModifier_object_set", nullptr, "rna_Curve_object_poll");
2833 RNA_def_property_update(prop, 0, "rna_CurveModifier_dependency_update");
2834
2835 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
2836 RNA_def_property_string_sdna(prop, nullptr, "name");
2838 prop,
2839 "Vertex Group",
2840 "Name of Vertex Group which determines influence of modifier per point");
2841 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_CurveModifier_name_set");
2842 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2843
2844 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
2846 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
2847 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2848
2849 prop = RNA_def_property(srna, "deform_axis", PROP_ENUM, PROP_NONE);
2850 RNA_def_property_enum_sdna(prop, nullptr, "defaxis");
2851 RNA_def_property_enum_items(prop, prop_deform_axis_items);
2852 RNA_def_property_ui_text(prop, "Deform Axis", "The axis that the curve deforms along");
2853 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2854
2856}
2857
2859{
2860 StructRNA *srna;
2861 PropertyRNA *prop;
2862
2863 srna = RNA_def_struct(brna, "BuildModifier", "Modifier");
2864 RNA_def_struct_ui_text(srna, "Build Modifier", "Build effect modifier");
2865 RNA_def_struct_sdna(srna, "BuildModifierData");
2866 RNA_def_struct_ui_icon(srna, ICON_MOD_BUILD);
2867
2869
2870 prop = RNA_def_property(srna, "frame_start", PROP_FLOAT, PROP_TIME);
2871 RNA_def_property_float_sdna(prop, nullptr, "start");
2873 RNA_def_property_ui_text(prop, "Start Frame", "Start frame of the effect");
2874 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2875
2876 prop = RNA_def_property(srna, "frame_duration", PROP_FLOAT, PROP_TIME);
2877 RNA_def_property_float_sdna(prop, nullptr, "length");
2879 RNA_def_property_ui_text(prop, "Length", "Total time the build effect requires");
2880 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2881
2882 prop = RNA_def_property(srna, "use_reverse", PROP_BOOLEAN, PROP_NONE);
2884 RNA_def_property_ui_text(prop, "Reversed", "Deconstruct the mesh instead of building it");
2885 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2886
2887 prop = RNA_def_property(srna, "use_random_order", PROP_BOOLEAN, PROP_NONE);
2889 RNA_def_property_ui_text(prop, "Randomize", "Randomize the faces or edges during build");
2890 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2891
2892 prop = RNA_def_property(srna, "seed", PROP_INT, PROP_NONE);
2894 RNA_def_property_ui_text(prop, "Seed", "Seed for random if used");
2895 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2896
2898}
2899
2901{
2902 StructRNA *srna;
2903 PropertyRNA *prop;
2904
2905 srna = RNA_def_struct(brna, "MirrorModifier", "Modifier");
2906 RNA_def_struct_ui_text(srna, "Mirror Modifier", "Mirroring modifier");
2907 RNA_def_struct_sdna(srna, "MirrorModifierData");
2908 RNA_def_struct_ui_icon(srna, ICON_MOD_MIRROR);
2909
2911
2912 prop = RNA_def_property(srna, "use_axis", PROP_BOOLEAN, PROP_NONE);
2913 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_MIR_AXIS_X);
2914 RNA_def_property_array(prop, 3);
2915 RNA_def_property_ui_text(prop, "Mirror Axis", "Enable axis mirror");
2916 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2917
2918 prop = RNA_def_property(srna, "use_bisect_axis", PROP_BOOLEAN, PROP_NONE);
2920 RNA_def_property_array(prop, 3);
2921 RNA_def_property_ui_text(prop, "Bisect Axis", "Cuts the mesh across the mirror plane");
2922 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2923
2924 prop = RNA_def_property(srna, "use_bisect_flip_axis", PROP_BOOLEAN, PROP_NONE);
2926 RNA_def_property_array(prop, 3);
2927 RNA_def_property_ui_text(prop, "Bisect Flip Axis", "Flips the direction of the slice");
2928 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2929
2930 prop = RNA_def_property(srna, "use_clip", PROP_BOOLEAN, PROP_NONE);
2931 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_MIR_CLIPPING);
2933 prop, "Clip", "Prevent vertices from going through the mirror during transform");
2934 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2935
2936 prop = RNA_def_property(srna, "use_mirror_vertex_groups", PROP_BOOLEAN, PROP_NONE);
2937 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_MIR_VGROUP);
2938 RNA_def_property_ui_text(prop, "Mirror Vertex Groups", "Mirror vertex groups (e.g. .R->.L)");
2939 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2940
2941 prop = RNA_def_property(srna, "use_mirror_merge", PROP_BOOLEAN, PROP_NONE);
2943 RNA_def_property_ui_text(prop, "Merge Vertices", "Merge vertices within the merge threshold");
2944 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2945
2946 prop = RNA_def_property(srna, "use_mirror_u", PROP_BOOLEAN, PROP_NONE);
2947 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_MIR_MIRROR_U);
2949 prop, "Mirror U", "Mirror the U texture coordinate around the flip offset point");
2950 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2951
2952 prop = RNA_def_property(srna, "use_mirror_v", PROP_BOOLEAN, PROP_NONE);
2953 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_MIR_MIRROR_V);
2955 prop, "Mirror V", "Mirror the V texture coordinate around the flip offset point");
2956 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2957
2958 prop = RNA_def_property(srna, "use_mirror_udim", PROP_BOOLEAN, PROP_NONE);
2959 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_MIR_MIRROR_UDIM);
2961 prop, "Mirror UDIM", "Mirror the texture coordinate around each tile center");
2962 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2963
2964 prop = RNA_def_property(srna, "mirror_offset_u", PROP_FLOAT, PROP_FACTOR);
2965 RNA_def_property_float_sdna(prop, nullptr, "uv_offset[0]");
2966 RNA_def_property_range(prop, -1, 1);
2967 RNA_def_property_ui_range(prop, -1, 1, 2, 4);
2969 prop,
2970 "Flip U Offset",
2971 "Amount to offset mirrored UVs flipping point from the 0.5 on the U axis");
2972 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2973
2974 prop = RNA_def_property(srna, "mirror_offset_v", PROP_FLOAT, PROP_FACTOR);
2975 RNA_def_property_float_sdna(prop, nullptr, "uv_offset[1]");
2976 RNA_def_property_range(prop, -1, 1);
2977 RNA_def_property_ui_range(prop, -1, 1, 2, 4);
2979 prop,
2980 "Flip V Offset",
2981 "Amount to offset mirrored UVs flipping point from the 0.5 point on the V axis");
2982 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2983
2984 prop = RNA_def_property(srna, "offset_u", PROP_FLOAT, PROP_FACTOR);
2985 RNA_def_property_float_sdna(prop, nullptr, "uv_offset_copy[0]");
2986 RNA_def_property_range(prop, -10000.0f, 10000.0f);
2987 RNA_def_property_ui_range(prop, -1, 1, 2, 4);
2988 RNA_def_property_ui_text(prop, "U Offset", "Mirrored UV offset on the U axis");
2989 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2990
2991 prop = RNA_def_property(srna, "offset_v", PROP_FLOAT, PROP_FACTOR);
2992 RNA_def_property_float_sdna(prop, nullptr, "uv_offset_copy[1]");
2993 RNA_def_property_range(prop, -10000.0f, 10000.0f);
2994 RNA_def_property_ui_range(prop, -1, 1, 2, 4);
2995 RNA_def_property_ui_text(prop, "V Offset", "Mirrored UV offset on the V axis");
2996 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2997
2998 prop = RNA_def_property(srna, "merge_threshold", PROP_FLOAT, PROP_DISTANCE);
2999 RNA_def_property_float_sdna(prop, nullptr, "tolerance");
3001 RNA_def_property_ui_range(prop, 0, 1, 0.01, 6);
3003 prop, "Merge Distance", "Distance within which mirrored vertices are merged");
3004 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3005
3006 prop = RNA_def_property(srna, "bisect_threshold", PROP_FLOAT, PROP_DISTANCE);
3007 RNA_def_property_float_sdna(prop, nullptr, "bisect_threshold");
3009 RNA_def_property_ui_range(prop, 0, 1, 0.01, 6);
3011 prop, "Bisect Distance", "Distance from the bisect plane within which vertices are removed");
3012 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3013
3014 prop = RNA_def_property(srna, "mirror_object", PROP_POINTER, PROP_NONE);
3015 RNA_def_property_pointer_sdna(prop, nullptr, "mirror_ob");
3016 RNA_def_property_ui_text(prop, "Mirror Object", "Object to use as mirror");
3018 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3019
3021}
3022
3024{
3025 static const EnumPropertyItem modifier_decim_mode_items[] = {
3026 {MOD_DECIM_MODE_COLLAPSE, "COLLAPSE", 0, "Collapse", "Use edge collapsing"},
3027 {MOD_DECIM_MODE_UNSUBDIV, "UNSUBDIV", 0, "Un-Subdivide", "Use un-subdivide face reduction"},
3029 "DISSOLVE",
3030 0,
3031 "Planar",
3032 "Dissolve geometry to form planar polygons"},
3033 {0, nullptr, 0, nullptr, nullptr},
3034 };
3035
3036 /* NOTE: keep in sync with operator 'MESH_OT_decimate'. */
3037
3038 StructRNA *srna;
3039 PropertyRNA *prop;
3040
3041 srna = RNA_def_struct(brna, "DecimateModifier", "Modifier");
3042 RNA_def_struct_ui_text(srna, "Decimate Modifier", "Decimation modifier");
3043 RNA_def_struct_sdna(srna, "DecimateModifierData");
3044 RNA_def_struct_ui_icon(srna, ICON_MOD_DECIM);
3045
3047
3048 prop = RNA_def_property(srna, "decimate_type", PROP_ENUM, PROP_NONE);
3049 RNA_def_property_enum_sdna(prop, nullptr, "mode");
3050 RNA_def_property_enum_items(prop, modifier_decim_mode_items);
3051 RNA_def_property_ui_text(prop, "Mode", "");
3053 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3054
3055 /* (mode == MOD_DECIM_MODE_COLLAPSE) */
3056 prop = RNA_def_property(srna, "ratio", PROP_FLOAT, PROP_FACTOR);
3057 RNA_def_property_float_sdna(prop, nullptr, "percent");
3058 RNA_def_property_range(prop, 0, 1);
3059 RNA_def_property_ui_range(prop, 0, 1, 1, 4);
3060 RNA_def_property_ui_text(prop, "Ratio", "Ratio of triangles to reduce to (collapse only)");
3061 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3062
3063 /* (mode == MOD_DECIM_MODE_UNSUBDIV) */
3064 prop = RNA_def_property(srna, "iterations", PROP_INT, PROP_UNSIGNED);
3065 RNA_def_property_int_sdna(prop, nullptr, "iter");
3066 RNA_def_property_range(prop, 0, SHRT_MAX);
3067 RNA_def_property_ui_range(prop, 0, 100, 1, -1);
3069 prop, "Iterations", "Number of times reduce the geometry (unsubdivide only)");
3070 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3071
3072 /* (mode == MOD_DECIM_MODE_DISSOLVE) */
3073 prop = RNA_def_property(srna, "angle_limit", PROP_FLOAT, PROP_ANGLE);
3074 RNA_def_property_float_sdna(prop, nullptr, "angle");
3075 RNA_def_property_range(prop, 0, DEG2RAD(180));
3076 RNA_def_property_ui_range(prop, 0, DEG2RAD(180), 10, 4);
3077 RNA_def_property_ui_text(prop, "Angle Limit", "Only dissolve angles below this (planar only)");
3078 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3079
3080 /* (mode == MOD_DECIM_MODE_COLLAPSE) */
3081 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
3082 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
3083 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name (collapse only)");
3084 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_DecimateModifier_defgrp_name_set");
3085 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3086
3087 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
3089 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence (collapse only)");
3090 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3091
3092 prop = RNA_def_property(srna, "use_collapse_triangulate", PROP_BOOLEAN, PROP_NONE);
3095 prop, "Triangulate", "Keep triangulated faces resulting from decimation (collapse only)");
3096 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3097
3098 prop = RNA_def_property(srna, "use_symmetry", PROP_BOOLEAN, PROP_NONE);
3100 RNA_def_property_ui_text(prop, "Symmetry", "Maintain symmetry on an axis");
3101 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3102
3103 prop = RNA_def_property(srna, "symmetry_axis", PROP_ENUM, PROP_NONE);
3104 RNA_def_property_enum_sdna(prop, nullptr, "symmetry_axis");
3106 RNA_def_property_ui_text(prop, "Axis", "Axis of symmetry");
3107 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3108
3109 prop = RNA_def_property(srna, "vertex_group_factor", PROP_FLOAT, PROP_FACTOR);
3110 RNA_def_property_float_sdna(prop, nullptr, "defgrp_factor");
3111 RNA_def_property_range(prop, 0, 1000);
3112 RNA_def_property_ui_range(prop, 0, 10, 1, 4);
3113 RNA_def_property_ui_text(prop, "Factor", "Vertex group strength");
3114 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3115 /* end collapse-only option */
3116
3117 /* (mode == MOD_DECIM_MODE_DISSOLVE) */
3118 prop = RNA_def_property(srna, "use_dissolve_boundaries", PROP_BOOLEAN, PROP_NONE);
3121 prop, "All Boundaries", "Dissolve all vertices in between face boundaries (planar only)");
3122 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3123
3124 prop = RNA_def_property(srna, "delimit", PROP_ENUM, PROP_NONE);
3125 RNA_def_property_flag(prop, PROP_ENUM_FLAG); /* important to run before default set */
3127 RNA_def_property_ui_text(prop, "Delimit", "Limit merging geometry");
3128 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3129
3130 /* end dissolve-only option */
3131
3132 /* all modes use this */
3133 prop = RNA_def_property(srna, "face_count", PROP_INT, PROP_NONE);
3136 prop, "Face Count", "The current number of faces in the decimated mesh");
3137
3139}
3140
3142{
3143 StructRNA *srna;
3144 PropertyRNA *prop;
3145
3146 srna = RNA_def_struct(brna, "WaveModifier", "Modifier");
3147 RNA_def_struct_ui_text(srna, "Wave Modifier", "Wave effect modifier");
3148 RNA_def_struct_sdna(srna, "WaveModifierData");
3149 RNA_def_struct_ui_icon(srna, ICON_MOD_WAVE);
3150
3152
3153 prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
3154 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_WAVE_X);
3155 RNA_def_property_ui_text(prop, "X", "X axis motion");
3156 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3157
3158 prop = RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
3159 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_WAVE_Y);
3160 RNA_def_property_ui_text(prop, "Y", "Y axis motion");
3161 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3162
3163 prop = RNA_def_property(srna, "use_cyclic", PROP_BOOLEAN, PROP_NONE);
3164 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_WAVE_CYCL);
3165 RNA_def_property_ui_text(prop, "Cyclic", "Cyclic wave effect");
3166 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3167
3168 prop = RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE);
3169 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_WAVE_NORM);
3170 RNA_def_property_ui_text(prop, "Normals", "Displace along normals");
3171 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3172
3173 prop = RNA_def_property(srna, "use_normal_x", PROP_BOOLEAN, PROP_NONE);
3174 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_WAVE_NORM_X);
3175 RNA_def_property_ui_text(prop, "X Normal", "Enable displacement along the X normal");
3176 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3177
3178 prop = RNA_def_property(srna, "use_normal_y", PROP_BOOLEAN, PROP_NONE);
3179 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_WAVE_NORM_Y);
3180 RNA_def_property_ui_text(prop, "Y Normal", "Enable displacement along the Y normal");
3181 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3182
3183 prop = RNA_def_property(srna, "use_normal_z", PROP_BOOLEAN, PROP_NONE);
3184 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_WAVE_NORM_Z);
3185 RNA_def_property_ui_text(prop, "Z Normal", "Enable displacement along the Z normal");
3186 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3187
3188 prop = RNA_def_property(srna, "time_offset", PROP_FLOAT, PROP_TIME);
3189 RNA_def_property_float_sdna(prop, nullptr, "timeoffs");
3192 prop,
3193 "Time Offset",
3194 "Either the starting frame (for positive speed) or ending frame (for negative speed)");
3195 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3196
3197 prop = RNA_def_property(srna, "lifetime", PROP_FLOAT, PROP_TIME);
3198 RNA_def_property_float_sdna(prop, nullptr, "lifetime");
3201 prop, "Lifetime", "Lifetime of the wave in frames, zero means infinite");
3202 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3203
3204 prop = RNA_def_property(srna, "damping_time", PROP_FLOAT, PROP_TIME);
3205 RNA_def_property_float_sdna(prop, nullptr, "damp");
3208 prop, "Damping Time", "Number of frames in which the wave damps out after it dies");
3209 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3210
3211 prop = RNA_def_property(srna, "falloff_radius", PROP_FLOAT, PROP_DISTANCE);
3212 RNA_def_property_float_sdna(prop, nullptr, "falloff");
3214 RNA_def_property_ui_range(prop, 0, 100, 100, 2);
3215 RNA_def_property_ui_text(prop, "Falloff Radius", "Distance after which it fades out");
3216 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3217
3218 prop = RNA_def_property(srna, "start_position_x", PROP_FLOAT, PROP_DISTANCE);
3219 RNA_def_property_float_sdna(prop, nullptr, "startx");
3221 RNA_def_property_ui_range(prop, -100, 100, 100, 2);
3222 RNA_def_property_ui_text(prop, "Start Position X", "X coordinate of the start position");
3223 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3224
3225 prop = RNA_def_property(srna, "start_position_y", PROP_FLOAT, PROP_DISTANCE);
3226 RNA_def_property_float_sdna(prop, nullptr, "starty");
3228 RNA_def_property_ui_range(prop, -100, 100, 100, 2);
3229 RNA_def_property_ui_text(prop, "Start Position Y", "Y coordinate of the start position");
3230 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3231
3232 prop = RNA_def_property(srna, "start_position_object", PROP_POINTER, PROP_NONE);
3233 RNA_def_property_pointer_sdna(prop, nullptr, "objectcenter");
3234 RNA_def_property_ui_text(prop, "Start Position Object", "Object which defines the wave center");
3236 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3237
3238 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
3239 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
3240 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the wave");
3241 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_WaveModifier_defgrp_name_set");
3242 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3243
3244 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
3246 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
3247 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3248
3249 prop = RNA_def_property(srna, "speed", PROP_FLOAT, PROP_NONE);
3251 RNA_def_property_ui_range(prop, -1, 1, 10, 2);
3253 prop, "Speed", "Speed of the wave, towards the starting point when negative");
3254 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3255
3256 prop = RNA_def_property(srna, "height", PROP_FLOAT, PROP_DISTANCE);
3258 RNA_def_property_ui_range(prop, -2, 2, 10, 2);
3259 RNA_def_property_ui_text(prop, "Height", "Height of the wave");
3260 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3261
3262 prop = RNA_def_property(srna, "width", PROP_FLOAT, PROP_DISTANCE);
3264 RNA_def_property_ui_range(prop, 0, 5, 10, 2);
3265 RNA_def_property_ui_text(prop, "Width", "Distance between the waves");
3266 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3267
3268 prop = RNA_def_property(srna, "narrowness", PROP_FLOAT, PROP_DISTANCE);
3269 RNA_def_property_float_sdna(prop, nullptr, "narrow");
3271 RNA_def_property_ui_range(prop, 0, 10, 10, 2);
3273 prop,
3274 "Narrowness",
3275 "Distance between the top and the base of a wave, the higher the value, "
3276 "the more narrow the wave");
3277 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3278
3280
3282}
3283
3285{
3286 StructRNA *srna;
3287 PropertyRNA *prop;
3288
3289 srna = RNA_def_struct(brna, "ArmatureModifier", "Modifier");
3290 RNA_def_struct_ui_text(srna, "Armature Modifier", "Armature deformation modifier");
3291 RNA_def_struct_sdna(srna, "ArmatureModifierData");
3292 RNA_def_struct_ui_icon(srna, ICON_MOD_ARMATURE);
3293
3295
3296 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
3297 RNA_def_property_ui_text(prop, "Object", "Armature object to deform with");
3299 prop, nullptr, "rna_ArmatureModifier_object_set", nullptr, "rna_Armature_object_poll");
3301 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3302
3303 prop = RNA_def_property(srna, "use_bone_envelopes", PROP_BOOLEAN, PROP_NONE);
3304 RNA_def_property_boolean_sdna(prop, nullptr, "deformflag", ARM_DEF_ENVELOPE);
3306 RNA_def_property_ui_text(prop, "Use Bone Envelopes", "Bind Bone envelopes to armature modifier");
3307 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3308
3309 prop = RNA_def_property(srna, "use_vertex_groups", PROP_BOOLEAN, PROP_NONE);
3310 RNA_def_property_boolean_sdna(prop, nullptr, "deformflag", ARM_DEF_VGROUP);
3312 RNA_def_property_ui_text(prop, "Use Vertex Groups", "Bind vertex groups to armature modifier");
3313 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3314
3315 prop = RNA_def_property(srna, "use_deform_preserve_volume", PROP_BOOLEAN, PROP_NONE);
3316 RNA_def_property_boolean_sdna(prop, nullptr, "deformflag", ARM_DEF_QUATERNION);
3318 prop, "Preserve Volume", "Deform rotation interpolation with quaternions");
3319 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3320
3321 prop = RNA_def_property(srna, "use_multi_modifier", PROP_BOOLEAN, PROP_NONE);
3322 RNA_def_property_boolean_sdna(prop, nullptr, "multi", 0);
3324 prop,
3325 "Multi Modifier",
3326 "Use same input as previous modifier, and mix results using overall vgroup");
3327 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3328
3329 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
3330 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
3332 prop,
3333 "Vertex Group",
3334 "Name of Vertex Group which determines influence of modifier per point");
3335 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_ArmatureModifier_defgrp_name_set");
3336 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3337
3338 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
3339 RNA_def_property_boolean_sdna(prop, nullptr, "deformflag", ARM_DEF_INVERT_VGROUP);
3340 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
3341 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3342
3344}
3345
3347{
3348 StructRNA *srna;
3349 PropertyRNA *prop;
3350 FunctionRNA *func;
3351 PropertyRNA *parm;
3352
3353 srna = RNA_def_struct(brna, "HookModifier", "Modifier");
3355 srna, "Hook Modifier", "Hook modifier to modify the location of vertices");
3356 RNA_def_struct_sdna(srna, "HookModifierData");
3357 RNA_def_struct_ui_icon(srna, ICON_HOOK);
3358
3360
3361 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_FACTOR);
3362 RNA_def_property_float_sdna(prop, nullptr, "force");
3363 RNA_def_property_range(prop, 0, 1);
3364 RNA_def_property_ui_text(prop, "Strength", "Relative force of the hook");
3365 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3366
3367 prop = RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);
3368 RNA_def_property_enum_items(prop, modifier_warp_falloff_items); /* share the enum */
3369 RNA_def_property_ui_text(prop, "Falloff Type", "");
3371 BLT_I18NCONTEXT_ID_CURVE_LEGACY); /* Abusing id_curve :/ */
3372 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3373
3374 prop = RNA_def_property(srna, "falloff_radius", PROP_FLOAT, PROP_DISTANCE);
3375 RNA_def_property_float_sdna(prop, nullptr, "falloff");
3377 RNA_def_property_ui_range(prop, 0, 100, 100, 2);
3379 prop, "Radius", "If not zero, the distance from the hook where influence ends");
3380 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3381
3382 prop = RNA_def_property(srna, "falloff_curve", PROP_POINTER, PROP_NONE);
3383 RNA_def_property_pointer_sdna(prop, nullptr, "curfalloff");
3384 RNA_def_property_ui_text(prop, "Falloff Curve", "Custom falloff curve");
3385 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3386
3387 prop = RNA_def_property(srna, "center", PROP_FLOAT, PROP_TRANSLATION);
3388 RNA_def_property_float_sdna(prop, nullptr, "cent");
3390 prop, "Hook Center", "Center of the hook, used for falloff and display");
3391 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3392
3393 prop = RNA_def_property(srna, "matrix_inverse", PROP_FLOAT, PROP_MATRIX);
3394 RNA_def_property_float_sdna(prop, nullptr, "parentinv");
3397 prop, "Matrix", "Reverse the transformation between this object and its target");
3398 RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Modifier_update");
3399
3400 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
3402 prop, "Object", "Parent Object for hook, also recalculates and clears offset");
3405 prop, nullptr, nullptr, "rna_HookModifier_object_override_apply");
3406 RNA_def_property_pointer_funcs(prop, nullptr, "rna_HookModifier_object_set", nullptr, nullptr);
3407 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3408
3409 prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
3410 RNA_def_property_string_sdna(prop, nullptr, "subtarget");
3412 prop,
3413 "Sub-Target",
3414 "Name of Parent Bone for hook (if applicable), also recalculates and clears offset");
3415 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_HookModifier_subtarget_set");
3416 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3417
3418 prop = RNA_def_property(srna, "use_falloff_uniform", PROP_BOOLEAN, PROP_NONE);
3420 RNA_def_property_ui_text(prop, "Uniform Falloff", "Compensate for non-uniform object scale");
3421 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3422
3423 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
3424 RNA_def_property_string_sdna(prop, nullptr, "name");
3426 prop,
3427 "Vertex Group",
3428 "Name of Vertex Group which determines influence of modifier per point");
3429 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_HookModifier_name_set");
3430 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3431
3432 prop = RNA_def_property(srna, "vertex_indices", PROP_INT, PROP_UNSIGNED);
3436 RNA_def_property_dynamic_array_funcs(prop, "rna_HookModifier_vertex_indices_get_length");
3437 RNA_def_property_int_funcs(prop, "rna_HookModifier_vertex_indices_get", nullptr, nullptr);
3439 "Vertex Indices",
3440 "Indices of vertices bound to the modifier. For Bézier curves, "
3441 "handles count as additional vertices.");
3442
3443 func = RNA_def_function(srna, "vertex_indices_set", "rna_HookModifier_vertex_indices_set");
3445 func, "Validates and assigns the array of vertex indices bound to the modifier");
3447 parm = RNA_def_int_array(
3448 func, "indices", 1, nullptr, INT_MIN, INT_MAX, "", "Vertex Indices", 0, INT_MAX);
3451
3452 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
3454 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
3455 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3456
3458}
3459
3461{
3462 StructRNA *srna;
3463 PropertyRNA *prop;
3464
3465 srna = RNA_def_struct(brna, "SoftBodyModifier", "Modifier");
3466 RNA_def_struct_ui_text(srna, "Soft Body Modifier", "Soft body simulation modifier");
3467 RNA_def_struct_sdna(srna, "SoftbodyModifierData");
3468 RNA_def_struct_ui_icon(srna, ICON_MOD_SOFT);
3469
3470 prop = RNA_def_property(srna, "settings", PROP_POINTER, PROP_NONE);
3472 RNA_def_property_struct_type(prop, "SoftBodySettings");
3474 prop, "rna_SoftBodyModifier_settings_get", nullptr, nullptr, nullptr);
3475 RNA_def_property_ui_text(prop, "Soft Body Settings", "");
3476
3477 prop = RNA_def_property(srna, "point_cache", PROP_POINTER, PROP_NONE);
3479 RNA_def_property_struct_type(prop, "PointCache");
3481 prop, "rna_SoftBodyModifier_point_cache_get", nullptr, nullptr, nullptr);
3482 RNA_def_property_ui_text(prop, "Soft Body Point Cache", "");
3483}
3484
3486{
3487 StructRNA *srna;
3488 PropertyRNA *prop;
3489
3490 static const EnumPropertyItem prop_operand_items[] = {
3492 "OBJECT",
3493 0,
3494 "Object",
3495 "Use a mesh object as the operand for the Boolean operation"},
3497 "COLLECTION",
3498 0,
3499 "Collection",
3500 "Use a collection of mesh objects as the operand for the Boolean operation"},
3501 {0, nullptr, 0, nullptr, nullptr},
3502 };
3503
3504 static const EnumPropertyItem prop_operation_items[] = {
3506 "INTERSECT",
3507 0,
3508 "Intersect",
3509 "Keep the part of the mesh that is common between all operands"},
3510 {eBooleanModifierOp_Union, "UNION", 0, "Union", "Combine meshes in an additive way"},
3512 "DIFFERENCE",
3513 0,
3514 "Difference",
3515 "Combine meshes in a subtractive way"},
3516 {0, nullptr, 0, nullptr, nullptr},
3517 };
3518
3519 static const EnumPropertyItem prop_solver_items[] = {
3521 "FAST",
3522 0,
3523 "Fast",
3524 "Simple solver for the best performance, without support for overlapping geometry"},
3526 "EXACT",
3527 0,
3528 "Exact",
3529 "Advanced solver for the best result"},
3530 {0, nullptr, 0, nullptr, nullptr},
3531 };
3532
3533 static const EnumPropertyItem material_mode_items[] = {
3535 "INDEX",
3536 0,
3537 "Index Based",
3538 "Set the material on new faces based on the order of the material slot lists. If a "
3539 "material doesn't exist on the modifier object, the face will use the same material slot "
3540 "or the first if the object doesn't have enough slots."},
3542 "TRANSFER",
3543 0,
3544 "Transfer",
3545 "Transfer materials from non-empty slots to the result mesh, adding new materials as "
3546 "necessary. For empty slots, fall back to using the same material index as the operand "
3547 "mesh."},
3548 {0, nullptr, 0, nullptr, nullptr},
3549 };
3550
3551 srna = RNA_def_struct(brna, "BooleanModifier", "Modifier");
3552 RNA_def_struct_ui_text(srna, "Boolean Modifier", "Boolean operations modifier");
3553 RNA_def_struct_sdna(srna, "BooleanModifierData");
3554 RNA_def_struct_ui_icon(srna, ICON_MOD_BOOLEAN);
3555
3557
3558 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
3559 RNA_def_property_ui_text(prop, "Object", "Mesh object to use for Boolean operation");
3561 prop, nullptr, "rna_BooleanModifier_object_set", nullptr, "rna_Mesh_object_poll");
3563 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3564
3565 prop = RNA_def_property(srna, "collection", PROP_POINTER, PROP_NONE);
3566 RNA_def_property_pointer_sdna(prop, nullptr, "collection");
3567 RNA_def_property_struct_type(prop, "Collection");
3570 prop, "Collection", "Use mesh objects in this collection for Boolean operation");
3571 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3572
3573 prop = RNA_def_property(srna, "operation", PROP_ENUM, PROP_NONE);
3574 RNA_def_property_enum_items(prop, prop_operation_items);
3576 RNA_def_property_ui_text(prop, "Operation", "");
3577 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3578
3579 prop = RNA_def_property(srna, "operand_type", PROP_ENUM, PROP_NONE);
3580 RNA_def_property_enum_bitflag_sdna(prop, nullptr, "flag");
3581 RNA_def_property_enum_items(prop, prop_operand_items);
3582 RNA_def_property_ui_text(prop, "Operand Type", "");
3583 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3584
3585 prop = RNA_def_property(srna, "double_threshold", PROP_FLOAT, PROP_DISTANCE);
3586 RNA_def_property_float_sdna(prop, nullptr, "double_threshold");
3587 RNA_def_property_range(prop, 0, 1.0f);
3588 RNA_def_property_ui_range(prop, 0, 1, 1.0, 6);
3591 prop, "Overlap Threshold", "Threshold for checking overlapping geometry");
3592 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3593
3594 prop = RNA_def_property(srna, "solver", PROP_ENUM, PROP_NONE);
3597 RNA_def_property_ui_text(prop, "Solver", "Method for calculating booleans");
3598 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3599
3600 prop = RNA_def_property(srna, "use_self", PROP_BOOLEAN, PROP_NONE);
3602 RNA_def_property_ui_text(prop, "Self Intersection", "Allow self-intersection in operands");
3603 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3604
3605 prop = RNA_def_property(srna, "use_hole_tolerant", PROP_BOOLEAN, PROP_NONE);
3607 RNA_def_property_ui_text(prop, "Hole Tolerant", "Better results when there are holes (slower)");
3608 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3609
3610 prop = RNA_def_property(srna, "material_mode", PROP_ENUM, PROP_NONE);
3611 RNA_def_property_enum_items(prop, material_mode_items);
3613 RNA_def_property_ui_text(prop, "Material Mode", "Method for setting materials on the new faces");
3614 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3615
3616 /* BMesh debugging options, only used when G_DEBUG is set */
3617
3618 /* BMesh intersection options */
3619 static const EnumPropertyItem debug_items[] = {
3620 {eBooleanModifierBMeshFlag_BMesh_Separate, "SEPARATE", 0, "Separate", ""},
3621 {eBooleanModifierBMeshFlag_BMesh_NoDissolve, "NO_DISSOLVE", 0, "No Dissolve", ""},
3623 "NO_CONNECT_REGIONS",
3624 0,
3625 "No Connect Regions",
3626 ""},
3627 {0, nullptr, 0, nullptr, nullptr},
3628 };
3629
3630 prop = RNA_def_property(srna, "debug_options", PROP_ENUM, PROP_NONE);
3631 RNA_def_property_enum_items(prop, debug_items);
3632 RNA_def_property_enum_sdna(prop, nullptr, "bm_flag");
3634 RNA_def_property_ui_text(prop, "Debug", "Debugging options, only when started with '-d'");
3635 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3636
3638}
3639
3641{
3642 StructRNA *srna;
3643 PropertyRNA *prop;
3644
3645 static const EnumPropertyItem prop_fit_type_items[] = {
3647 "FIXED_COUNT",
3648 0,
3649 "Fixed Count",
3650 "Duplicate the object a certain number of times"},
3652 "FIT_LENGTH",
3653 0,
3654 "Fit Length",
3655 "Duplicate the object as many times as fits in a certain length"},
3656 {MOD_ARR_FITCURVE, "FIT_CURVE", 0, "Fit Curve", "Fit the duplicated objects to a curve"},
3657 {0, nullptr, 0, nullptr, nullptr},
3658 };
3659
3660 srna = RNA_def_struct(brna, "ArrayModifier", "Modifier");
3661 RNA_def_struct_ui_text(srna, "Array Modifier", "Array duplication modifier");
3662 RNA_def_struct_sdna(srna, "ArrayModifierData");
3663 RNA_def_struct_ui_icon(srna, ICON_MOD_ARRAY);
3664
3666
3667 /* Length parameters */
3668 prop = RNA_def_property(srna, "fit_type", PROP_ENUM, PROP_NONE);
3669 RNA_def_property_enum_items(prop, prop_fit_type_items);
3670 RNA_def_property_ui_text(prop, "Fit Type", "Array length calculation method");
3671 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3672
3673 prop = RNA_def_property(srna, "count", PROP_INT, PROP_NONE);
3674 RNA_def_property_range(prop, 1, INT_MAX);
3675 RNA_def_property_ui_range(prop, 1, 1000, 1, -1);
3676 RNA_def_property_ui_text(prop, "Count", "Number of duplicates to make");
3677 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3678
3679 prop = RNA_def_property(srna, "fit_length", PROP_FLOAT, PROP_DISTANCE);
3680 RNA_def_property_float_sdna(prop, nullptr, "length");
3681 RNA_def_property_range(prop, 0, INT_MAX);
3682 RNA_def_property_ui_range(prop, 0, 10000, 10, 2);
3683 RNA_def_property_ui_text(prop, "Length", "Length to fit array within");
3684 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3685
3686 prop = RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE);
3687 RNA_def_property_pointer_sdna(prop, nullptr, "curve_ob");
3688 RNA_def_property_ui_text(prop, "Curve", "Curve object to fit array length to");
3690 prop, nullptr, "rna_ArrayModifier_curve_ob_set", nullptr, "rna_Curve_object_poll");
3692 RNA_def_property_update(prop, 0, "rna_ArrayModifier_dependency_update");
3693
3694 /* Offset parameters */
3695 prop = RNA_def_property(srna, "use_constant_offset", PROP_BOOLEAN, PROP_NONE);
3696 RNA_def_property_boolean_sdna(prop, nullptr, "offset_type", MOD_ARR_OFF_CONST);
3697 RNA_def_property_ui_text(prop, "Constant Offset", "Add a constant offset");
3698 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3699
3700 prop = RNA_def_property(srna, "constant_offset_displace", PROP_FLOAT, PROP_TRANSLATION);
3701 RNA_def_property_float_sdna(prop, nullptr, "offset");
3703 prop, "Constant Offset Displacement", "Value for the distance between arrayed items");
3705 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3706
3707 prop = RNA_def_property(srna, "use_relative_offset", PROP_BOOLEAN, PROP_NONE);
3708 RNA_def_property_boolean_sdna(prop, nullptr, "offset_type", MOD_ARR_OFF_RELATIVE);
3710 prop, "Relative Offset", "Add an offset relative to the object's bounding box");
3711 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3712
3713 /* PROP_TRANSLATION causes units to be used which we don't want */
3714 prop = RNA_def_property(srna, "relative_offset_displace", PROP_FLOAT, PROP_XYZ);
3715 RNA_def_property_float_sdna(prop, nullptr, "scale");
3717 prop,
3718 "Relative Offset Displacement",
3719 "The size of the geometry will determine the distance between arrayed items");
3720 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3721
3722 /* Vertex merging parameters */
3723 prop = RNA_def_property(srna, "use_merge_vertices", PROP_BOOLEAN, PROP_NONE);
3724 RNA_def_property_boolean_sdna(prop, nullptr, "flags", MOD_ARR_MERGE);
3725 RNA_def_property_ui_text(prop, "Merge Vertices", "Merge vertices in adjacent duplicates");
3726 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3727
3728 prop = RNA_def_property(srna, "use_merge_vertices_cap", PROP_BOOLEAN, PROP_NONE);
3729 RNA_def_property_boolean_sdna(prop, nullptr, "flags", MOD_ARR_MERGEFINAL);
3731 prop, "Merge End Vertices", "Merge vertices in first and last duplicates");
3732 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3733
3734 prop = RNA_def_property(srna, "merge_threshold", PROP_FLOAT, PROP_DISTANCE);
3735 RNA_def_property_float_sdna(prop, nullptr, "merge_dist");
3737 RNA_def_property_ui_range(prop, 0, 1, 1, 4);
3738 RNA_def_property_ui_text(prop, "Merge Distance", "Limit below which to merge vertices");
3739 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3740
3741 /* Offset object */
3742 prop = RNA_def_property(srna, "use_object_offset", PROP_BOOLEAN, PROP_NONE);
3743 RNA_def_property_boolean_sdna(prop, nullptr, "offset_type", MOD_ARR_OFF_OBJ);
3745 prop, "Object Offset", "Add another object's transformation to the total offset");
3746 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3747
3748 prop = RNA_def_property(srna, "offset_object", PROP_POINTER, PROP_NONE);
3749 RNA_def_property_pointer_sdna(prop, nullptr, "offset_ob");
3751 prop,
3752 "Object Offset",
3753 "Use the location and rotation of another object to determine the distance and "
3754 "rotational change between arrayed items");
3756 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3757
3758 /* Caps */
3759 prop = RNA_def_property(srna, "start_cap", PROP_POINTER, PROP_NONE);
3760 RNA_def_property_ui_text(prop, "Start Cap", "Mesh object to use as a start cap");
3762 prop, nullptr, "rna_ArrayModifier_start_cap_set", nullptr, "rna_Mesh_object_poll");
3764 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3765
3766 prop = RNA_def_property(srna, "end_cap", PROP_POINTER, PROP_NONE);
3767 RNA_def_property_ui_text(prop, "End Cap", "Mesh object to use as an end cap");
3769 prop, nullptr, "rna_ArrayModifier_end_cap_set", nullptr, "rna_Mesh_object_poll");
3771 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3772
3773 prop = RNA_def_property(srna, "offset_u", PROP_FLOAT, PROP_FACTOR);
3774 RNA_def_property_float_sdna(prop, nullptr, "uv_offset[0]");
3775 RNA_def_property_range(prop, -1, 1);
3776 RNA_def_property_ui_range(prop, -1, 1, 2, 4);
3777 RNA_def_property_ui_text(prop, "U Offset", "Amount to offset array UVs on the U axis");
3778 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3779
3780 prop = RNA_def_property(srna, "offset_v", PROP_FLOAT, PROP_FACTOR);
3781 RNA_def_property_float_sdna(prop, nullptr, "uv_offset[1]");
3782 RNA_def_property_range(prop, -1, 1);
3783 RNA_def_property_ui_range(prop, -1, 1, 2, 4);
3784 RNA_def_property_ui_text(prop, "V Offset", "Amount to offset array UVs on the V axis");
3785 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3786
3788}
3789
3791{
3792 StructRNA *srna;
3793 PropertyRNA *prop;
3794
3795 srna = RNA_def_struct(brna, "EdgeSplitModifier", "Modifier");
3797 srna, "EdgeSplit Modifier", "Edge splitting modifier to create sharp edges");
3798 RNA_def_struct_sdna(srna, "EdgeSplitModifierData");
3799 RNA_def_struct_ui_icon(srna, ICON_MOD_EDGESPLIT);
3800
3802
3803 prop = RNA_def_property(srna, "split_angle", PROP_FLOAT, PROP_ANGLE);
3804 RNA_def_property_range(prop, 0.0f, DEG2RADF(180.0f));
3805 RNA_def_property_ui_range(prop, 0.0f, DEG2RADF(180.0f), 10, 2);
3806 RNA_def_property_ui_text(prop, "Split Angle", "Angle above which to split edges");
3807 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3808
3809 prop = RNA_def_property(srna, "use_edge_angle", PROP_BOOLEAN, PROP_NONE);
3811 RNA_def_property_ui_text(prop, "Use Edge Angle", "Split edges with high angle between faces");
3812 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3813
3814 prop = RNA_def_property(srna, "use_edge_sharp", PROP_BOOLEAN, PROP_NONE);
3816 RNA_def_property_ui_text(prop, "Use Sharp Edges", "Split edges that are marked as sharp");
3817 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3818
3820}
3821
3823{
3824 StructRNA *srna;
3825 PropertyRNA *prop;
3826
3827 static const EnumPropertyItem prop_direction_items[] = {
3829 "X",
3830 0,
3831 "X",
3832 "Use the texture's intensity value to displace in the X direction"},
3834 "Y",
3835 0,
3836 "Y",
3837 "Use the texture's intensity value to displace in the Y direction"},
3839 "Z",
3840 0,
3841 "Z",
3842 "Use the texture's intensity value to displace in the Z direction"},
3844 "NORMAL",
3845 0,
3846 "Normal",
3847 "Use the texture's intensity value to displace along the vertex normal"},
3849 "CUSTOM_NORMAL",
3850 0,
3851 "Custom Normal",
3852 "Use the texture's intensity value to displace along the (averaged) custom normal (falls "
3853 "back to vertex)"},
3855 "RGB_TO_XYZ",
3856 0,
3857 "RGB to XYZ",
3858 "Use the texture's RGB values to displace the mesh in the XYZ direction"},
3859 {0, nullptr, 0, nullptr, nullptr},
3860 };
3861
3862 static const EnumPropertyItem prop_space_items[] = {
3863 {MOD_DISP_SPACE_LOCAL, "LOCAL", 0, "Local", "Direction is defined in local coordinates"},
3864 {MOD_DISP_SPACE_GLOBAL, "GLOBAL", 0, "Global", "Direction is defined in global coordinates"},
3865 {0, nullptr, 0, nullptr, nullptr},
3866 };
3867
3868 srna = RNA_def_struct(brna, "DisplaceModifier", "Modifier");
3869 RNA_def_struct_ui_text(srna, "Displace Modifier", "Displacement modifier");
3870 RNA_def_struct_sdna(srna, "DisplaceModifierData");
3871 RNA_def_struct_ui_icon(srna, ICON_MOD_DISPLACE);
3872
3874
3875 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
3876 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
3878 prop,
3879 "Vertex Group",
3880 "Name of Vertex Group which determines influence of modifier per point");
3881 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_DisplaceModifier_defgrp_name_set");
3882 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3883
3884 prop = RNA_def_property(srna, "mid_level", PROP_FLOAT, PROP_FACTOR);
3885 RNA_def_property_float_sdna(prop, nullptr, "midlevel");
3887 RNA_def_property_ui_range(prop, 0, 1, 10, 3);
3888 RNA_def_property_ui_text(prop, "Midlevel", "Material value that gives no displacement");
3889 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3890
3891 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
3893 RNA_def_property_ui_range(prop, -100, 100, 10, 3);
3894 RNA_def_property_ui_text(prop, "Strength", "Amount to displace geometry");
3895 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3896
3897 prop = RNA_def_property(srna, "direction", PROP_ENUM, PROP_NONE);
3899 RNA_def_property_ui_text(prop, "Direction", "");
3900 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3901
3902 prop = RNA_def_property(srna, "space", PROP_ENUM, PROP_NONE);
3903 RNA_def_property_enum_items(prop, prop_space_items);
3904 RNA_def_property_ui_text(prop, "Space", "");
3905 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3906
3907 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
3909 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
3910 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3911
3913
3915}
3916
3918{
3919 StructRNA *srna;
3920 PropertyRNA *prop;
3921
3922 srna = RNA_def_struct(brna, "UVProjectModifier", "Modifier");
3924 srna, "UV Project Modifier", "UV projection modifier to set UVs from a projector");
3925 RNA_def_struct_sdna(srna, "UVProjectModifierData");
3926 RNA_def_struct_ui_icon(srna, ICON_MOD_UVPROJECT);
3927
3929
3930 prop = RNA_def_property(srna, "uv_layer", PROP_STRING, PROP_NONE);
3931 RNA_def_property_string_sdna(prop, nullptr, "uvlayer_name");
3932 RNA_def_property_ui_text(prop, "UV Map", "UV map name");
3933 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_UVProjectModifier_uvlayer_name_set");
3934 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3935
3936 prop = RNA_def_property(srna, "projector_count", PROP_INT, PROP_NONE);
3937 RNA_def_property_int_sdna(prop, nullptr, "projectors_num");
3938 RNA_def_property_ui_text(prop, "Number of Projectors", "Number of projectors to use");
3939 RNA_def_property_int_funcs(prop, nullptr, "rna_UVProjectModifier_num_projectors_set", nullptr);
3941 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3942
3943 prop = RNA_def_property(srna, "projectors", PROP_COLLECTION, PROP_NONE);
3944 RNA_def_property_struct_type(prop, "UVProjector");
3946 "rna_UVProject_projectors_begin",
3947 "rna_iterator_array_next",
3948 "rna_iterator_array_end",
3949 "rna_iterator_array_get",
3950 nullptr,
3951 nullptr,
3952 nullptr,
3953 nullptr);
3954 RNA_def_property_ui_text(prop, "Projectors", "");
3955
3956 prop = RNA_def_property(srna, "aspect_x", PROP_FLOAT, PROP_NONE);
3957 RNA_def_property_float_sdna(prop, nullptr, "aspectx");
3960 RNA_def_property_ui_range(prop, 1, 1000, 1, 3);
3962 prop, "Aspect X", "Horizontal aspect ratio (only used for camera projectors)");
3963 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3964
3965 prop = RNA_def_property(srna, "aspect_y", PROP_FLOAT, PROP_NONE);
3966 RNA_def_property_float_sdna(prop, nullptr, "aspecty");
3969 RNA_def_property_ui_range(prop, 1, 1000, 1, 3);
3971 prop, "Aspect Y", "Vertical aspect ratio (only used for camera projectors)");
3972 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3973
3974 prop = RNA_def_property(srna, "scale_x", PROP_FLOAT, PROP_NONE);
3975 RNA_def_property_float_sdna(prop, nullptr, "scalex");
3978 RNA_def_property_ui_range(prop, 0, 1000, 1, 3);
3979 RNA_def_property_ui_text(prop, "Scale X", "Horizontal scale (only used for camera projectors)");
3980 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3981
3982 prop = RNA_def_property(srna, "scale_y", PROP_FLOAT, PROP_NONE);
3983 RNA_def_property_float_sdna(prop, nullptr, "scaley");
3986 RNA_def_property_ui_range(prop, 0, 1000, 1, 3);
3987 RNA_def_property_ui_text(prop, "Scale Y", "Vertical scale (only used for camera projectors)");
3988 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3989
3990 srna = RNA_def_struct(brna, "UVProjector", nullptr);
3991 RNA_def_struct_ui_text(srna, "UVProjector", "UV projector used by the UV project modifier");
3992
3993 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
3994 RNA_def_property_struct_type(prop, "Object");
3996 prop, "rna_UVProjector_object_get", "rna_UVProjector_object_set", nullptr, nullptr);
3998 RNA_def_property_ui_text(prop, "Object", "Object to use as projector transform");
3999 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
4000
4002}
4003
4005{
4006 StructRNA *srna;
4007 PropertyRNA *prop;
4008
4009 srna = RNA_def_struct(brna, "SmoothModifier", "Modifier");
4010 RNA_def_struct_ui_text(srna, "Smooth Modifier", "Smoothing effect modifier");
4011 RNA_def_struct_sdna(srna, "SmoothModifierData");
4012 RNA_def_struct_ui_icon(srna, ICON_MOD_SMOOTH);
4013
4015
4016 prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
4017 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_SMOOTH_X);
4018 RNA_def_property_ui_text(prop, "X", "Smooth object along X axis");
4019 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4020
4021 prop = RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
4022 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_SMOOTH_Y);
4023 RNA_def_property_ui_text(prop, "Y", "Smooth object along Y axis");
4024 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4025
4026 prop = RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
4027 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_SMOOTH_Z);
4028 RNA_def_property_ui_text(prop, "Z", "Smooth object along Z axis");
4029 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4030
4031 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR);
4032 RNA_def_property_float_sdna(prop, nullptr, "fac");
4034 RNA_def_property_ui_range(prop, -10, 10, 1, 3);
4035 RNA_def_property_ui_text(prop, "Factor", "Strength of modifier effect");
4036 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4037
4038 prop = RNA_def_property(srna, "iterations", PROP_INT, PROP_NONE);
4039 RNA_def_property_int_sdna(prop, nullptr, "repeat");
4040 RNA_def_property_ui_range(prop, 0, 30, 1, -1);
4041 RNA_def_property_ui_text(prop, "Repeat", "");
4042 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4043
4044 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
4045 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
4047 prop,
4048 "Vertex Group",
4049 "Name of Vertex Group which determines influence of modifier per point");
4050 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_SmoothModifier_defgrp_name_set");
4051 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4052
4053 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
4055 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
4056 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4057
4059}
4060
4062{
4063 StructRNA *srna;
4064 PropertyRNA *prop;
4065
4066 static const EnumPropertyItem modifier_smooth_type_items[] = {
4068 "SIMPLE",
4069 0,
4070 "Simple",
4071 "Use the average of adjacent edge-vertices"},
4073 "LENGTH_WEIGHTED",
4074 0,
4075 "Length Weight",
4076 "Use the average of adjacent edge-vertices weighted by their length"},
4077 {0, nullptr, 0, nullptr, nullptr},
4078 };
4079
4080 static const EnumPropertyItem modifier_rest_source_items[] = {
4082 "ORCO",
4083 0,
4084 "Original Coords",
4085 "Use base mesh vertex coordinates as the rest position"},
4087 "BIND",
4088 0,
4089 "Bind Coords",
4090 "Use bind vertex coordinates for rest position"},
4091 {0, nullptr, 0, nullptr, nullptr},
4092 };
4093
4094 srna = RNA_def_struct(brna, "CorrectiveSmoothModifier", "Modifier");
4096 srna, "Corrective Smooth Modifier", "Correct distortion caused by deformation");
4097 RNA_def_struct_sdna(srna, "CorrectiveSmoothModifierData");
4098 RNA_def_struct_ui_icon(srna, ICON_MOD_SMOOTH);
4099
4101
4102 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR);
4103 RNA_def_property_float_sdna(prop, nullptr, "lambda");
4105 RNA_def_property_ui_range(prop, 0.0, 1.0, 5, 3);
4106 RNA_def_property_ui_text(prop, "Lambda Factor", "Smooth effect factor");
4107 RNA_def_property_update(prop, 0, "rna_CorrectiveSmoothModifier_update");
4108
4109 prop = RNA_def_property(srna, "iterations", PROP_INT, PROP_NONE);
4110 RNA_def_property_int_sdna(prop, nullptr, "repeat");
4111 RNA_def_property_ui_range(prop, 0, 200, 1, -1);
4112 RNA_def_property_ui_text(prop, "Repeat", "");
4113 RNA_def_property_update(prop, 0, "rna_CorrectiveSmoothModifier_update");
4114
4115 prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_FACTOR);
4116 RNA_def_property_float_sdna(prop, nullptr, "scale");
4118 RNA_def_property_ui_range(prop, 0.0, 10.0, 5, 3);
4119 RNA_def_property_ui_text(prop, "Scale", "Compensate for scale applied by other modifiers");
4120 RNA_def_property_update(prop, 0, "rna_CorrectiveSmoothModifier_update");
4121
4122 prop = RNA_def_property(srna, "rest_source", PROP_ENUM, PROP_NONE);
4123 RNA_def_property_enum_sdna(prop, nullptr, "rest_source");
4124 RNA_def_property_enum_items(prop, modifier_rest_source_items);
4125 RNA_def_property_ui_text(prop, "Rest Source", "Select the source of rest positions");
4126 RNA_def_property_update(prop, 0, "rna_CorrectiveSmoothModifier_rest_source_update");
4127
4128 prop = RNA_def_property(srna, "smooth_type", PROP_ENUM, PROP_NONE);
4129 RNA_def_property_enum_sdna(prop, nullptr, "smooth_type");
4130 RNA_def_property_enum_items(prop, modifier_smooth_type_items);
4131 RNA_def_property_ui_text(prop, "Smooth Type", "Method used for smoothing");
4132 RNA_def_property_update(prop, 0, "rna_CorrectiveSmoothModifier_update");
4133
4134 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
4136 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
4137 RNA_def_property_update(prop, 0, "rna_CorrectiveSmoothModifier_update");
4138
4139 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
4140 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
4142 prop,
4143 "Vertex Group",
4144 "Name of Vertex Group which determines influence of modifier per point");
4146 prop, nullptr, nullptr, "rna_CorrectiveSmoothModifier_defgrp_name_set");
4147 RNA_def_property_update(prop, 0, "rna_CorrectiveSmoothModifier_update");
4148
4149 prop = RNA_def_property(srna, "is_bind", PROP_BOOLEAN, PROP_NONE);
4150 RNA_def_property_ui_text(prop, "Bind current shape", "");
4151 RNA_def_property_boolean_funcs(prop, "rna_CorrectiveSmoothModifier_is_bind_get", nullptr);
4153 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4154
4155 prop = RNA_def_property(srna, "use_only_smooth", PROP_BOOLEAN, PROP_NONE);
4158 prop, "Only Smooth", "Apply smoothing without reconstructing the surface");
4159 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4160
4161 prop = RNA_def_property(srna, "use_pin_boundary", PROP_BOOLEAN, PROP_NONE);
4164 prop, "Pin Boundaries", "Excludes boundary vertices from being smoothed");
4165 RNA_def_property_update(prop, 0, "rna_CorrectiveSmoothModifier_update");
4166
4168}
4169
4171{
4172 StructRNA *srna;
4173 PropertyRNA *prop;
4174
4175 srna = RNA_def_struct(brna, "LaplacianSmoothModifier", "Modifier");
4176 RNA_def_struct_ui_text(srna, "Laplacian Smooth Modifier", "Smoothing effect modifier");
4177 RNA_def_struct_sdna(srna, "LaplacianSmoothModifierData");
4178 RNA_def_struct_ui_icon(srna, ICON_MOD_SMOOTH);
4179
4181
4182 prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
4184 RNA_def_property_ui_text(prop, "X", "Smooth object along X axis");
4185 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4186
4187 prop = RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
4189 RNA_def_property_ui_text(prop, "Y", "Smooth object along Y axis");
4190 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4191
4192 prop = RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
4194 RNA_def_property_ui_text(prop, "Z", "Smooth object along Z axis");
4195 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4196
4197 prop = RNA_def_property(srna, "use_volume_preserve", PROP_BOOLEAN, PROP_NONE);
4199 RNA_def_property_ui_text(prop, "Preserve Volume", "Apply volume preservation after smooth");
4200 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4201
4202 prop = RNA_def_property(srna, "use_normalized", PROP_BOOLEAN, PROP_NONE);
4204 RNA_def_property_ui_text(prop, "Normalized", "Improve and stabilize the enhanced shape");
4205 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4206
4207 prop = RNA_def_property(srna, "lambda_factor", PROP_FLOAT, PROP_NONE);
4208 RNA_def_property_float_sdna(prop, nullptr, "lambda");
4210 RNA_def_property_ui_range(prop, -1000.0, 1000.0, 5, 3);
4211 RNA_def_property_ui_text(prop, "Lambda Factor", "Smooth effect factor");
4212 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4213
4214 prop = RNA_def_property(srna, "lambda_border", PROP_FLOAT, PROP_NONE);
4215 RNA_def_property_float_sdna(prop, nullptr, "lambda_border");
4217 RNA_def_property_ui_range(prop, -1000.0, 1000.0, 5, 3);
4218 RNA_def_property_ui_text(prop, "Lambda Border", "Lambda factor in border");
4219 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4220
4221 prop = RNA_def_property(srna, "iterations", PROP_INT, PROP_NONE);
4222 RNA_def_property_int_sdna(prop, nullptr, "repeat");
4223 RNA_def_property_ui_range(prop, 0, 200, 1, -1);
4224 RNA_def_property_ui_text(prop, "Repeat", "");
4225 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4226
4227 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
4228 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
4230 prop,
4231 "Vertex Group",
4232 "Name of Vertex Group which determines influence of modifier per point");
4234 prop, nullptr, nullptr, "rna_LaplacianSmoothModifier_defgrp_name_set");
4235 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4236
4237 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
4239 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
4240 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4241
4243}
4244
4246{
4247 StructRNA *srna;
4248 PropertyRNA *prop;
4249
4250 static const EnumPropertyItem prop_cast_type_items[] = {
4251 {MOD_CAST_TYPE_SPHERE, "SPHERE", 0, "Sphere", ""},
4252 {MOD_CAST_TYPE_CYLINDER, "CYLINDER", 0, "Cylinder", ""},
4253 {MOD_CAST_TYPE_CUBOID, "CUBOID", 0, "Cuboid", ""},
4254 {0, nullptr, 0, nullptr, nullptr},
4255 };
4256
4257 srna = RNA_def_struct(brna, "CastModifier", "Modifier");
4258 RNA_def_struct_ui_text(srna, "Cast Modifier", "Modifier to cast to other shapes");
4259 RNA_def_struct_sdna(srna, "CastModifierData");
4260 RNA_def_struct_ui_icon(srna, ICON_MOD_CAST);
4261
4263
4264 prop = RNA_def_property(srna, "cast_type", PROP_ENUM, PROP_NONE);
4265 RNA_def_property_enum_sdna(prop, nullptr, "type");
4266 RNA_def_property_enum_items(prop, prop_cast_type_items);
4267 RNA_def_property_ui_text(prop, "Shape", "Target object shape");
4268 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4269
4270 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
4272 prop,
4273 "Object",
4274 "Control object: if available, its location determines the center of the effect");
4275 RNA_def_property_pointer_funcs(prop, nullptr, "rna_CastModifier_object_set", nullptr, nullptr);
4277 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
4278
4279 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
4281 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
4282 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4283
4284 prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
4285 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_CAST_X);
4286 RNA_def_property_ui_text(prop, "X", "");
4287 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4288
4289 prop = RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
4290 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_CAST_Y);
4291 RNA_def_property_ui_text(prop, "Y", "");
4292 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4293
4294 prop = RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
4295 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_CAST_Z);
4296 RNA_def_property_ui_text(prop, "Z", "");
4297 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4298
4299 prop = RNA_def_property(srna, "use_radius_as_size", PROP_BOOLEAN, PROP_NONE);
4302 prop, "Size from Radius", "Use radius as size of projection shape (0 = auto)");
4303 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4304
4305 prop = RNA_def_property(srna, "use_transform", PROP_BOOLEAN, PROP_NONE);
4308 prop, "Use Transform", "Use object transform to control projection shape");
4309 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4310
4311 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR);
4312 RNA_def_property_float_sdna(prop, nullptr, "fac");
4314 RNA_def_property_ui_range(prop, -10, 10, 5, 2);
4315 RNA_def_property_ui_text(prop, "Factor", "");
4316 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4317
4318 prop = RNA_def_property(srna, "radius", PROP_FLOAT, PROP_DISTANCE);
4320 RNA_def_property_ui_range(prop, 0, 100, 5, 2);
4322 prop,
4323 "Radius",
4324 "Only deform vertices within this distance from the center of the effect "
4325 "(leave as 0 for infinite.)");
4326 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4327
4328 prop = RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE);
4330 RNA_def_property_ui_range(prop, 0, 100, 5, 2);
4331 RNA_def_property_ui_text(prop, "Size", "Size of projection shape (leave as 0 for auto)");
4332 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4333
4334 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
4335 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
4336 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
4337 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_CastModifier_defgrp_name_set");
4338 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4339
4341}
4342
4344{
4345 StructRNA *srna;
4346 PropertyRNA *prop;
4347# if 0
4348 static const EnumPropertyItem prop_mode_items[] = {
4349 {0, "VOLUME", 0, "Volume", "Bind to volume inside cage mesh"},
4350 {1, "SURFACE", 0, "Surface", "Bind to surface of cage mesh"},
4351 {0, nullptr, 0, nullptr, nullptr},
4352 };
4353# endif
4354
4355 srna = RNA_def_struct(brna, "MeshDeformModifier", "Modifier");
4357 srna, "MeshDeform Modifier", "Mesh deformation modifier to deform with other meshes");
4358 RNA_def_struct_sdna(srna, "MeshDeformModifierData");
4359 RNA_def_struct_ui_icon(srna, ICON_MOD_MESHDEFORM);
4360
4362
4363 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
4364 RNA_def_property_ui_text(prop, "Object", "Mesh object to deform with");
4366 prop, nullptr, "rna_MeshDeformModifier_object_set", nullptr, "rna_Mesh_object_poll");
4368 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
4369
4370 prop = RNA_def_property(srna, "is_bound", PROP_BOOLEAN, PROP_NONE);
4371 RNA_def_property_boolean_funcs(prop, "rna_MeshDeformModifier_is_bound_get", nullptr);
4372 RNA_def_property_ui_text(prop, "Bound", "Whether geometry has been bound to control cage");
4374
4375 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
4377 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
4378 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4379
4380 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
4381 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
4382 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
4383 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_MeshDeformModifier_defgrp_name_set");
4384 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4385
4386 prop = RNA_def_property(srna, "precision", PROP_INT, PROP_NONE);
4387 RNA_def_property_int_sdna(prop, nullptr, "gridsize");
4388 RNA_def_property_range(prop, 2, 10);
4389 RNA_def_property_ui_text(prop, "Precision", "The grid size for binding");
4390 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4391
4392 prop = RNA_def_property(srna, "use_dynamic_bind", PROP_BOOLEAN, PROP_NONE);
4395 "Dynamic",
4396 "Recompute binding dynamically on top of other deformers "
4397 "(slower and more memory consuming)");
4398 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4399
4400# if 0
4401 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
4402 RNA_def_property_enum_items(prop, prop_mode_items);
4403 RNA_def_property_ui_text(prop, "Mode", "Method of binding vertices are bound to cage mesh");
4404 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4405# endif
4406
4408}
4409
4411{
4412 StructRNA *srna;
4413 PropertyRNA *prop;
4414
4415 srna = RNA_def_struct(brna, "ParticleSystemModifier", "Modifier");
4416 RNA_def_struct_ui_text(srna, "ParticleSystem Modifier", "Particle system simulation modifier");
4417 RNA_def_struct_sdna(srna, "ParticleSystemModifierData");
4418 RNA_def_struct_ui_icon(srna, ICON_MOD_PARTICLES);
4419
4421
4422 prop = RNA_def_property(srna, "particle_system", PROP_POINTER, PROP_NONE);
4424 RNA_def_property_pointer_sdna(prop, nullptr, "psys");
4425 RNA_def_property_ui_text(prop, "Particle System", "Particle System that this modifier controls");
4426
4428}
4429
4431{
4432 StructRNA *srna;
4433 PropertyRNA *prop;
4434
4435 static EnumPropertyItem particleinstance_space[] = {
4437 "LOCAL",
4438 0,
4439 "Local",
4440 "Use offset from the particle object in the instance object"},
4442 "WORLD",
4443 0,
4444 "World",
4445 "Use world space offset in the instance object"},
4446 {0, nullptr, 0, nullptr, nullptr},
4447 };
4448
4449 srna = RNA_def_struct(brna, "ParticleInstanceModifier", "Modifier");
4450 RNA_def_struct_ui_text(srna, "ParticleInstance Modifier", "Particle system instancing modifier");
4451 RNA_def_struct_sdna(srna, "ParticleInstanceModifierData");
4452 RNA_def_struct_ui_icon(srna, ICON_MOD_PARTICLES);
4453
4455
4456 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
4457 RNA_def_property_pointer_sdna(prop, nullptr, "ob");
4458 RNA_def_property_pointer_funcs(prop, nullptr, nullptr, nullptr, "rna_Mesh_object_poll");
4459 RNA_def_property_ui_text(prop, "Object", "Object that has the particle system");
4461 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
4462
4463 prop = RNA_def_property(srna, "particle_system_index", PROP_INT, PROP_NONE);
4464 RNA_def_property_int_sdna(prop, nullptr, "psys");
4465 RNA_def_property_range(prop, 1, SHRT_MAX);
4466 RNA_def_property_ui_text(prop, "Particle System Number", "");
4467 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4468
4469 prop = RNA_def_property(srna, "particle_system", PROP_POINTER, PROP_NONE);
4470 RNA_def_property_struct_type(prop, "ParticleSystem");
4472 "rna_ParticleInstanceModifier_particle_system_get",
4473 "rna_ParticleInstanceModifier_particle_system_set",
4474 nullptr,
4475 "rna_ParticleInstanceModifier_particle_system_poll");
4477 RNA_def_property_ui_text(prop, "Particle System", "");
4478 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4479
4480 prop = RNA_def_property(srna, "axis", PROP_ENUM, PROP_NONE);
4481 RNA_def_property_enum_sdna(prop, nullptr, "axis");
4483 RNA_def_property_ui_text(prop, "Axis", "Pole axis for rotation");
4484 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4485
4486 prop = RNA_def_property(srna, "space", PROP_ENUM, PROP_NONE);
4487 RNA_def_property_enum_sdna(prop, nullptr, "space");
4488 RNA_def_property_enum_items(prop, particleinstance_space);
4489 RNA_def_property_ui_text(prop, "Space", "Space to use for copying mesh data");
4490 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4491
4492 prop = RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE);
4494 RNA_def_property_ui_text(prop, "Regular", "Create instances from normal particles");
4495 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4496
4497 prop = RNA_def_property(srna, "use_children", PROP_BOOLEAN, PROP_NONE);
4499 RNA_def_property_ui_text(prop, "Children", "Create instances from child particles");
4501 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4502
4503 prop = RNA_def_property(srna, "use_path", PROP_BOOLEAN, PROP_NONE);
4505 RNA_def_property_ui_text(prop, "Path", "Create instances along particle paths");
4506 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4507
4508 prop = RNA_def_property(srna, "show_unborn", PROP_BOOLEAN, PROP_NONE);
4510 RNA_def_property_ui_text(prop, "Unborn", "Show instances when particles are unborn");
4511 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4512
4513 prop = RNA_def_property(srna, "show_alive", PROP_BOOLEAN, PROP_NONE);
4515 RNA_def_property_ui_text(prop, "Alive", "Show instances when particles are alive");
4516 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4517
4518 prop = RNA_def_property(srna, "show_dead", PROP_BOOLEAN, PROP_NONE);
4520 RNA_def_property_ui_text(prop, "Dead", "Show instances when particles are dead");
4521 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4522
4523 prop = RNA_def_property(srna, "use_preserve_shape", PROP_BOOLEAN, PROP_NONE);
4525 RNA_def_property_ui_text(prop, "Keep Shape", "Don't stretch the object");
4526 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4527
4528 prop = RNA_def_property(srna, "use_size", PROP_BOOLEAN, PROP_NONE);
4530 RNA_def_property_ui_text(prop, "Size", "Use particle size to scale the instances");
4531 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4532
4533 prop = RNA_def_property(srna, "position", PROP_FLOAT, PROP_NONE);
4534 RNA_def_property_float_sdna(prop, nullptr, "position");
4535 RNA_def_property_range(prop, 0.0, 1.0);
4536 RNA_def_property_ui_text(prop, "Position", "Position along path");
4537 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4538
4539 prop = RNA_def_property(srna, "random_position", PROP_FLOAT, PROP_NONE);
4540 RNA_def_property_float_sdna(prop, nullptr, "random_position");
4541 RNA_def_property_range(prop, 0.0, 1.0);
4542 RNA_def_property_ui_text(prop, "Random Position", "Randomize position along path");
4543 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4544
4545 prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_FACTOR);
4546 RNA_def_property_float_sdna(prop, nullptr, "rotation");
4547 RNA_def_property_range(prop, 0.0, 1.0);
4548 RNA_def_property_ui_text(prop, "Rotation", "Rotation around path");
4549 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4550
4551 prop = RNA_def_property(srna, "random_rotation", PROP_FLOAT, PROP_FACTOR);
4552 RNA_def_property_float_sdna(prop, nullptr, "random_rotation");
4553 RNA_def_property_range(prop, 0.0, 1.0);
4554 RNA_def_property_ui_text(prop, "Random Rotation", "Randomize rotation around path");
4555 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4556
4557 prop = RNA_def_property(srna, "particle_amount", PROP_FLOAT, PROP_FACTOR);
4558 RNA_def_property_range(prop, 0.0, 1.0);
4559 RNA_def_property_ui_text(prop, "Particle Amount", "Amount of particles to use for instancing");
4560 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4561
4562 prop = RNA_def_property(srna, "particle_offset", PROP_FLOAT, PROP_FACTOR);
4563 RNA_def_property_range(prop, 0.0, 1.0);
4565 "Particle Offset",
4566 "Relative offset of particles to use for instancing, to avoid overlap "
4567 "of multiple instances");
4568 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4569
4570 prop = RNA_def_property(srna, "index_layer_name", PROP_STRING, PROP_NONE);
4571 RNA_def_property_string_sdna(prop, nullptr, "index_layer_name");
4572 RNA_def_property_ui_text(prop, "Index Layer Name", "Custom data layer name for the index");
4573 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4574
4575 prop = RNA_def_property(srna, "value_layer_name", PROP_STRING, PROP_NONE);
4576 RNA_def_property_string_sdna(prop, nullptr, "value_layer_name");
4578 prop, "Value Layer Name", "Custom data layer name for the randomized value");
4579 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4580
4582}
4583
4585{
4586 StructRNA *srna;
4587 PropertyRNA *prop;
4588
4589 srna = RNA_def_struct(brna, "ExplodeModifier", "Modifier");
4591 srna, "Explode Modifier", "Explosion effect modifier based on a particle system");
4592 RNA_def_struct_sdna(srna, "ExplodeModifierData");
4593 RNA_def_struct_ui_icon(srna, ICON_MOD_EXPLODE);
4594
4596
4597 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
4599 "rna_ExplodeModifier_vgroup_get",
4600 "rna_ExplodeModifier_vgroup_length",
4601 "rna_ExplodeModifier_vgroup_set");
4602 RNA_def_property_ui_text(prop, "Vertex Group", "");
4603
4604 prop = RNA_def_property(srna, "protect", PROP_FLOAT, PROP_NONE);
4605 RNA_def_property_range(prop, 0, 1);
4606 RNA_def_property_ui_text(prop, "Protect", "Clean vertex group edges");
4607 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4608
4609 prop = RNA_def_property(srna, "use_edge_cut", PROP_BOOLEAN, PROP_NONE);
4611 RNA_def_property_ui_text(prop, "Cut Edges", "Cut face edges for nicer shrapnel");
4612 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4613
4614 prop = RNA_def_property(srna, "show_unborn", PROP_BOOLEAN, PROP_NONE);
4615 RNA_def_property_boolean_sdna(prop, nullptr, "flag", eExplodeFlag_Unborn);
4616 RNA_def_property_ui_text(prop, "Unborn", "Show mesh when particles are unborn");
4617 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4618
4619 prop = RNA_def_property(srna, "show_alive", PROP_BOOLEAN, PROP_NONE);
4620 RNA_def_property_boolean_sdna(prop, nullptr, "flag", eExplodeFlag_Alive);
4621 RNA_def_property_ui_text(prop, "Alive", "Show mesh when particles are alive");
4622 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4623
4624 prop = RNA_def_property(srna, "show_dead", PROP_BOOLEAN, PROP_NONE);
4625 RNA_def_property_boolean_sdna(prop, nullptr, "flag", eExplodeFlag_Dead);
4626 RNA_def_property_ui_text(prop, "Dead", "Show mesh when particles are dead");
4627 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4628
4629 prop = RNA_def_property(srna, "use_size", PROP_BOOLEAN, PROP_NONE);
4630 RNA_def_property_boolean_sdna(prop, nullptr, "flag", eExplodeFlag_PaSize);
4631 RNA_def_property_ui_text(prop, "Size", "Use particle size for the shrapnel");
4632 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4633
4634 prop = RNA_def_property(srna, "particle_uv", PROP_STRING, PROP_NONE);
4635 RNA_def_property_string_sdna(prop, nullptr, "uvname");
4637 RNA_def_property_ui_text(prop, "Particle UV", "UV map to change with particle age");
4638 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4639
4640 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
4642 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
4643 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4644
4646}
4647
4649{
4650 StructRNA *srna;
4651 PropertyRNA *prop;
4652
4653 srna = RNA_def_struct(brna, "ClothModifier", "Modifier");
4654 RNA_def_struct_ui_text(srna, "Cloth Modifier", "Cloth simulation modifier");
4655 RNA_def_struct_sdna(srna, "ClothModifierData");
4656 RNA_def_struct_ui_icon(srna, ICON_MOD_CLOTH);
4657
4659
4660 prop = RNA_def_property(srna, "settings", PROP_POINTER, PROP_NONE);
4662 RNA_def_property_pointer_sdna(prop, nullptr, "sim_parms");
4663 RNA_def_property_ui_text(prop, "Cloth Settings", "");
4664
4665 prop = RNA_def_property(srna, "collision_settings", PROP_POINTER, PROP_NONE);
4667 RNA_def_property_pointer_sdna(prop, nullptr, "coll_parms");
4668 RNA_def_property_ui_text(prop, "Cloth Collision Settings", "");
4669
4670 prop = RNA_def_property(srna, "solver_result", PROP_POINTER, PROP_NONE);
4671 RNA_def_property_struct_type(prop, "ClothSolverResult");
4672 RNA_def_property_pointer_sdna(prop, nullptr, "solver_result");
4673 RNA_def_property_ui_text(prop, "Solver Result", "");
4674
4675 prop = RNA_def_property(srna, "point_cache", PROP_POINTER, PROP_NONE);
4677 RNA_def_property_ui_text(prop, "Point Cache", "");
4678
4679 prop = RNA_def_property(srna, "hair_grid_min", PROP_FLOAT, PROP_NONE);
4680 RNA_def_property_float_sdna(prop, nullptr, "hair_grid_min");
4682 RNA_def_property_ui_text(prop, "Hair Grid Minimum", "");
4683
4684 prop = RNA_def_property(srna, "hair_grid_max", PROP_FLOAT, PROP_NONE);
4685 RNA_def_property_float_sdna(prop, nullptr, "hair_grid_max");
4687 RNA_def_property_ui_text(prop, "Hair Grid Maximum", "");
4688
4689 prop = RNA_def_property(srna, "hair_grid_resolution", PROP_INT, PROP_NONE);
4690 RNA_def_property_int_sdna(prop, nullptr, "hair_grid_res");
4692 RNA_def_property_ui_text(prop, "Hair Grid Resolution", "");
4693
4695}
4696
4698{
4699 StructRNA *srna;
4700 PropertyRNA *prop;
4701
4702 static const EnumPropertyItem prop_fluid_type_items[] = {
4703 {0, "NONE", 0, "None", ""},
4704 {MOD_FLUID_TYPE_DOMAIN, "DOMAIN", 0, "Domain", "Container of the fluid simulation"},
4705 {MOD_FLUID_TYPE_FLOW, "FLOW", 0, "Flow", "Add or remove fluid to a domain object"},
4707 "EFFECTOR",
4708 0,
4709 "Effector",
4710 "Deflect fluids and influence the fluid flow"},
4711 {0, nullptr, 0, nullptr, nullptr},
4712 };
4713
4714 srna = RNA_def_struct(brna, "FluidModifier", "Modifier");
4715 RNA_def_struct_ui_text(srna, "Fluid Modifier", "Fluid simulation modifier");
4716 RNA_def_struct_sdna(srna, "FluidModifierData");
4717 RNA_def_struct_ui_icon(srna, ICON_MOD_FLUIDSIM);
4718
4720
4721 prop = RNA_def_property(srna, "domain_settings", PROP_POINTER, PROP_NONE);
4722 RNA_def_property_pointer_sdna(prop, nullptr, "domain");
4723 RNA_def_property_ui_text(prop, "Domain Settings", "");
4724
4725 prop = RNA_def_property(srna, "flow_settings", PROP_POINTER, PROP_NONE);
4726 RNA_def_property_pointer_sdna(prop, nullptr, "flow");
4727 RNA_def_property_ui_text(prop, "Flow Settings", "");
4728
4729 prop = RNA_def_property(srna, "effector_settings", PROP_POINTER, PROP_NONE);
4730 RNA_def_property_pointer_sdna(prop, nullptr, "effector");
4731 RNA_def_property_ui_text(prop, "Effector Settings", "");
4732
4733 prop = RNA_def_property(srna, "fluid_type", PROP_ENUM, PROP_NONE);
4734 RNA_def_property_enum_sdna(prop, nullptr, "type");
4735 RNA_def_property_enum_items(prop, prop_fluid_type_items);
4736 RNA_def_property_ui_text(prop, "Type", "");
4738 RNA_def_property_update(prop, 0, "rna_fluid_set_type");
4739
4741}
4742
4744{
4745 StructRNA *srna;
4746 PropertyRNA *prop;
4747
4748 srna = RNA_def_struct(brna, "DynamicPaintModifier", "Modifier");
4749 RNA_def_struct_ui_text(srna, "Dynamic Paint Modifier", "Dynamic Paint modifier");
4750 RNA_def_struct_sdna(srna, "DynamicPaintModifierData");
4751 RNA_def_struct_ui_icon(srna, ICON_MOD_DYNAMICPAINT);
4752
4754
4755 prop = RNA_def_property(srna, "canvas_settings", PROP_POINTER, PROP_NONE);
4756 RNA_def_property_pointer_sdna(prop, nullptr, "canvas");
4757 RNA_def_property_ui_text(prop, "Canvas Settings", "");
4758
4759 prop = RNA_def_property(srna, "brush_settings", PROP_POINTER, PROP_NONE);
4760 RNA_def_property_pointer_sdna(prop, nullptr, "brush");
4761 RNA_def_property_ui_text(prop, "Brush Settings", "");
4762
4763 prop = RNA_def_property(srna, "ui_type", PROP_ENUM, PROP_NONE);
4765 RNA_def_property_enum_sdna(prop, nullptr, "type");
4768 RNA_def_property_ui_text(prop, "Type", "");
4769
4771}
4772
4774{
4775 StructRNA *srna;
4776 PropertyRNA *prop;
4777
4778 srna = RNA_def_struct(brna, "CollisionModifier", "Modifier");
4780 "Collision Modifier",
4781 "Collision modifier defining modifier stack position used for collision");
4782 RNA_def_struct_sdna(srna, "CollisionModifierData");
4783 RNA_def_struct_ui_icon(srna, ICON_MOD_PHYSICS);
4784
4786
4787 prop = RNA_def_property(srna, "settings", PROP_POINTER, PROP_NONE);
4789 RNA_def_property_struct_type(prop, "CollisionSettings");
4791 prop, "rna_CollisionModifier_settings_get", nullptr, nullptr, nullptr);
4792 RNA_def_property_ui_text(prop, "Settings", "");
4793
4795}
4796
4798{
4799 StructRNA *srna;
4800 PropertyRNA *prop;
4801
4802 static const EnumPropertyItem prop_limit_method_items[] = {
4803 {0, "NONE", 0, "None", "Bevel the entire mesh by a constant amount"},
4805 "ANGLE",
4806 0,
4807 "Angle",
4808 "Only bevel edges with sharp enough angles between faces"},
4810 "WEIGHT",
4811 0,
4812 "Weight",
4813 "Use bevel weights to determine how much bevel is applied in edge mode"},
4815 "VGROUP",
4816 0,
4817 "Vertex Group",
4818 "Use vertex group weights to select whether vertex or edge is beveled"},
4819 {0, nullptr, 0, nullptr, nullptr},
4820 };
4821
4822 static const EnumPropertyItem prop_val_type_items[] = {
4823 {MOD_BEVEL_AMT_OFFSET, "OFFSET", 0, "Offset", "Amount is offset of new edges from original"},
4824 {MOD_BEVEL_AMT_WIDTH, "WIDTH", 0, "Width", "Amount is width of new face"},
4826 "DEPTH",
4827 0,
4828 "Depth",
4829 "Amount is perpendicular distance from original edge to bevel face"},
4831 "PERCENT",
4832 0,
4833 "Percent",
4834 "Amount is percent of adjacent edge length"},
4836 "ABSOLUTE",
4837 0,
4838 "Absolute",
4839 "Amount is absolute distance along adjacent edge"},
4840 {0, nullptr, 0, nullptr, nullptr},
4841 };
4842
4843 static const EnumPropertyItem prop_profile_type_items[] = {
4845 "SUPERELLIPSE",
4846 0,
4847 "Superellipse",
4848 "The profile can be a concave or convex curve"},
4850 "CUSTOM",
4851 0,
4852 "Custom",
4853 "The profile can be any arbitrary path between its endpoints"},
4854 {0, nullptr, 0, nullptr, nullptr},
4855 };
4856
4857 static EnumPropertyItem prop_harden_normals_items[] = {
4858 {MOD_BEVEL_FACE_STRENGTH_NONE, "FSTR_NONE", 0, "None", "Do not set face strength"},
4859 {MOD_BEVEL_FACE_STRENGTH_NEW, "FSTR_NEW", 0, "New", "Set face strength on new faces only"},
4861 "FSTR_AFFECTED",
4862 0,
4863 "Affected",
4864 "Set face strength on new and affected faces only"},
4865 {MOD_BEVEL_FACE_STRENGTH_ALL, "FSTR_ALL", 0, "All", "Set face strength on all faces"},
4866 {0, nullptr, 0, nullptr, nullptr},
4867 };
4868
4869 static const EnumPropertyItem prop_miter_outer_items[] = {
4870 {MOD_BEVEL_MITER_SHARP, "MITER_SHARP", 0, "Sharp", "Outside of miter is sharp"},
4871 {MOD_BEVEL_MITER_PATCH, "MITER_PATCH", 0, "Patch", "Outside of miter is squared-off patch"},
4872 {MOD_BEVEL_MITER_ARC, "MITER_ARC", 0, "Arc", "Outside of miter is arc"},
4873 {0, nullptr, 0, nullptr, nullptr},
4874 };
4875
4876 static const EnumPropertyItem prop_miter_inner_items[] = {
4877 {MOD_BEVEL_MITER_SHARP, "MITER_SHARP", 0, "Sharp", "Inside of miter is sharp"},
4878 {MOD_BEVEL_MITER_ARC, "MITER_ARC", 0, "Arc", "Inside of miter is arc"},
4879 {0, nullptr, 0, nullptr, nullptr},
4880 };
4881
4882 static EnumPropertyItem prop_vmesh_method_items[] = {
4883 {MOD_BEVEL_VMESH_ADJ, "ADJ", 0, "Grid Fill", "Default patterned fill"},
4885 "CUTOFF",
4886 0,
4887 "Cutoff",
4888 "A cut-off at the end of each profile before the intersection"},
4889 {0, nullptr, 0, nullptr, nullptr},
4890 };
4891
4892 static const EnumPropertyItem prop_affect_items[] = {
4893 {MOD_BEVEL_AFFECT_VERTICES, "VERTICES", 0, "Vertices", "Affect only vertices"},
4894 {MOD_BEVEL_AFFECT_EDGES, "EDGES", 0, "Edges", "Affect only edges"},
4895 {0, nullptr, 0, nullptr, nullptr},
4896 };
4897
4898 srna = RNA_def_struct(brna, "BevelModifier", "Modifier");
4900 srna, "Bevel Modifier", "Bevel modifier to make edges and vertices more rounded");
4901 RNA_def_struct_sdna(srna, "BevelModifierData");
4902 RNA_def_struct_ui_icon(srna, ICON_MOD_BEVEL);
4903
4905
4906 prop = RNA_def_property(srna, "width", PROP_FLOAT, PROP_DISTANCE);
4907 RNA_def_property_float_sdna(prop, nullptr, "value");
4909 RNA_def_property_ui_range(prop, 0.0f, 100.0f, 0.1, 4);
4910 RNA_def_property_ui_text(prop, "Width", "Bevel amount");
4911 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4912
4913 prop = RNA_def_property(srna, "width_pct", PROP_FLOAT, PROP_PERCENTAGE);
4914 RNA_def_property_float_sdna(prop, nullptr, "value");
4916 RNA_def_property_ui_range(prop, 0.0f, 100.0f, 5.0, 2);
4917 RNA_def_property_ui_text(prop, "Width Percent", "Bevel amount for percentage method");
4918 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4919
4920 prop = RNA_def_property(srna, "segments", PROP_INT, PROP_NONE);
4921 RNA_def_property_int_sdna(prop, nullptr, "res");
4922 RNA_def_property_range(prop, 1, 1000);
4923 RNA_def_property_ui_range(prop, 1, 100, 1, -1);
4924 RNA_def_property_ui_text(prop, "Segments", "Number of segments for round edges/verts");
4925 RNA_def_property_update(prop, 0, "rna_BevelModifier_update_segments");
4926
4927 prop = RNA_def_property(srna, "affect", PROP_ENUM, PROP_NONE); /* as an enum */
4928 RNA_def_property_enum_sdna(prop, nullptr, "affect_type");
4929 RNA_def_property_enum_items(prop, prop_affect_items);
4930 RNA_def_property_ui_text(prop, "Affect", "Affect edges or vertices");
4931 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4932
4933 prop = RNA_def_property(srna, "limit_method", PROP_ENUM, PROP_NONE);
4934 RNA_def_property_enum_sdna(prop, nullptr, "lim_flags");
4935 RNA_def_property_enum_items(prop, prop_limit_method_items);
4936 RNA_def_property_ui_text(prop, "Limit Method", "");
4937 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4938
4939 prop = RNA_def_property(srna, "edge_weight", PROP_STRING, PROP_NONE);
4940 RNA_def_property_string_sdna(prop, nullptr, "edge_weight_name");
4941 RNA_def_property_ui_text(prop, "Edge Weight", "Attribute name for edge weight");
4943 prop, "rna_BevelModifier_weight_attribute_visit_for_search", PROP_STRING_SEARCH_SUGGESTION);
4944 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4945
4946 prop = RNA_def_property(srna, "vertex_weight", PROP_STRING, PROP_NONE);
4947 RNA_def_property_string_sdna(prop, nullptr, "vertex_weight_name");
4948 RNA_def_property_ui_text(prop, "Vertex Weight", "Attribute name for vertex weight");
4950 prop, "rna_BevelModifier_weight_attribute_visit_for_search", PROP_STRING_SEARCH_SUGGESTION);
4951 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4952
4953 prop = RNA_def_property(srna, "angle_limit", PROP_FLOAT, PROP_ANGLE);
4954 RNA_def_property_float_sdna(prop, nullptr, "bevel_angle");
4955 RNA_def_property_range(prop, 0.0f, DEG2RADF(180.0f));
4956 RNA_def_property_ui_range(prop, 0.0f, DEG2RADF(180.0f), 10, 4);
4957 RNA_def_property_ui_text(prop, "Angle", "Angle above which to bevel edges");
4958 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4959
4960 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
4961 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
4962 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
4963 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_BevelModifier_defgrp_name_set");
4964 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4965
4966 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
4968 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
4969 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4970
4971 prop = RNA_def_property(srna, "use_clamp_overlap", PROP_BOOLEAN, PROP_NONE);
4973 RNA_def_property_ui_text(prop, "Clamp Overlap", "Clamp the width to avoid overlap");
4974 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4975
4976 prop = RNA_def_property(srna, "offset_type", PROP_ENUM, PROP_NONE);
4977 RNA_def_property_enum_sdna(prop, nullptr, "val_flags");
4978 RNA_def_property_enum_items(prop, prop_val_type_items);
4979 RNA_def_property_ui_text(prop, "Width Type", "What distance Width measures");
4980 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4981
4982 prop = RNA_def_property(srna, "profile_type", PROP_ENUM, PROP_NONE);
4983 RNA_def_property_enum_sdna(prop, nullptr, "profile_type");
4984 RNA_def_property_enum_items(prop, prop_profile_type_items);
4986 prop, "Profile Type", "The type of shape used to rebuild a beveled section");
4987 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4988
4989 prop = RNA_def_property(srna, "profile", PROP_FLOAT, PROP_FACTOR);
4990 RNA_def_property_range(prop, 0.0f, 1.0f);
4991 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.05, 2);
4992 RNA_def_property_ui_text(prop, "Profile", "The profile shape (0.5 = round)");
4993 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4994
4995 prop = RNA_def_property(srna, "material", PROP_INT, PROP_NONE);
4996 RNA_def_property_int_sdna(prop, nullptr, "mat");
4997 RNA_def_property_range(prop, -1, SHRT_MAX);
4999 prop, "Material Index", "Material index of generated faces, -1 for automatic");
5000 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5001
5002 prop = RNA_def_property(srna, "loop_slide", PROP_BOOLEAN, PROP_NONE);
5004 RNA_def_property_ui_text(prop, "Loop Slide", "Prefer sliding along edges to having even widths");
5005 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5006
5007 prop = RNA_def_property(srna, "mark_seam", PROP_BOOLEAN, PROP_NONE);
5008 RNA_def_property_boolean_sdna(prop, nullptr, "edge_flags", MOD_BEVEL_MARK_SEAM);
5009 RNA_def_property_ui_text(prop, "Mark Seams", "Mark Seams along beveled edges");
5010 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5011
5012 prop = RNA_def_property(srna, "mark_sharp", PROP_BOOLEAN, PROP_NONE);
5013 RNA_def_property_boolean_sdna(prop, nullptr, "edge_flags", MOD_BEVEL_MARK_SHARP);
5014 RNA_def_property_ui_text(prop, "Mark Sharp", "Mark beveled edges as sharp");
5015 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5016
5017 prop = RNA_def_property(srna, "harden_normals", PROP_BOOLEAN, PROP_NONE);
5019 RNA_def_property_ui_text(prop, "Harden Normals", "Match normals of new faces to adjacent faces");
5020 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5021
5022 prop = RNA_def_property(srna, "face_strength_mode", PROP_ENUM, PROP_NONE);
5023 RNA_def_property_enum_sdna(prop, nullptr, "face_str_mode");
5024 RNA_def_property_enum_items(prop, prop_harden_normals_items);
5026 prop, "Face Strength", "Whether to set face strength, and which faces to set it on");
5027 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5028
5029 prop = RNA_def_property(srna, "miter_outer", PROP_ENUM, PROP_NONE);
5030 RNA_def_property_enum_sdna(prop, nullptr, "miter_outer");
5031 RNA_def_property_enum_items(prop, prop_miter_outer_items);
5032 RNA_def_property_ui_text(prop, "Outer Miter", "Pattern to use for outside of miters");
5033 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5034
5035 prop = RNA_def_property(srna, "miter_inner", PROP_ENUM, PROP_NONE);
5036 RNA_def_property_enum_sdna(prop, nullptr, "miter_inner");
5037 RNA_def_property_enum_items(prop, prop_miter_inner_items);
5038 RNA_def_property_ui_text(prop, "Inner Miter", "Pattern to use for inside of miters");
5039 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5040
5041 prop = RNA_def_property(srna, "spread", PROP_FLOAT, PROP_DISTANCE);
5042 RNA_def_property_float_sdna(prop, nullptr, "spread");
5044 RNA_def_property_ui_range(prop, 0.0f, 100.0f, 0.1, 4);
5045 RNA_def_property_ui_text(prop, "Spread", "Spread distance for inner miter arcs");
5046 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5047
5048 prop = RNA_def_property(srna, "custom_profile", PROP_POINTER, PROP_NONE);
5049 RNA_def_property_struct_type(prop, "CurveProfile");
5050 RNA_def_property_pointer_sdna(prop, nullptr, "custom_profile");
5051 RNA_def_property_ui_text(prop, "Custom Profile Path", "The path for the custom profile");
5052 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5053
5054 prop = RNA_def_property(srna, "vmesh_method", PROP_ENUM, PROP_NONE);
5055 RNA_def_property_enum_sdna(prop, nullptr, "vmesh_method");
5056 RNA_def_property_enum_items(prop, prop_vmesh_method_items);
5058 prop, "Vertex Mesh Method", "The method to use to create the mesh at intersections");
5059 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5060
5062}
5063
5065{
5066 StructRNA *srna;
5067 PropertyRNA *prop;
5068
5069 srna = RNA_def_struct(brna, "ShrinkwrapModifier", "Modifier");
5071 "Shrinkwrap Modifier",
5072 "Shrink wrapping modifier to shrink wrap and object to a target");
5073 RNA_def_struct_sdna(srna, "ShrinkwrapModifierData");
5074 RNA_def_struct_ui_icon(srna, ICON_MOD_SHRINKWRAP);
5075
5077
5078 prop = RNA_def_property(srna, "wrap_method", PROP_ENUM, PROP_NONE);
5079 RNA_def_property_enum_sdna(prop, nullptr, "shrinkType");
5081 RNA_def_property_ui_text(prop, "Wrap Method", "");
5082 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5083
5084 prop = RNA_def_property(srna, "wrap_mode", PROP_ENUM, PROP_NONE);
5085 RNA_def_property_enum_sdna(prop, nullptr, "shrinkMode");
5088 prop, "Snap Mode", "Select how vertices are constrained to the target surface");
5089 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5090
5091 prop = RNA_def_property(srna, "cull_face", PROP_ENUM, PROP_NONE);
5092 RNA_def_property_enum_sdna(prop, nullptr, "shrinkOpts");
5095 "rna_ShrinkwrapModifier_face_cull_get",
5096 "rna_ShrinkwrapModifier_face_cull_set",
5097 nullptr);
5099 prop,
5100 "Face Cull",
5101 "Stop vertices from projecting to a face on the target when facing towards/away");
5102 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5103
5104 prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
5105 RNA_def_property_ui_text(prop, "Target", "Mesh target to shrink to");
5107 prop, nullptr, "rna_ShrinkwrapModifier_target_set", nullptr, "rna_Mesh_object_poll");
5109 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5110
5111 prop = RNA_def_property(srna, "auxiliary_target", PROP_POINTER, PROP_NONE);
5112 RNA_def_property_pointer_sdna(prop, nullptr, "auxTarget");
5113 RNA_def_property_ui_text(prop, "Auxiliary Target", "Additional mesh target to shrink to");
5115 prop, nullptr, "rna_ShrinkwrapModifier_auxTarget_set", nullptr, "rna_Mesh_object_poll");
5117 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5118
5119 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
5120 RNA_def_property_string_sdna(prop, nullptr, "vgroup_name");
5121 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
5122 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_ShrinkwrapModifier_vgroup_name_set");
5123 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5124
5125 prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_DISTANCE);
5126 RNA_def_property_float_sdna(prop, nullptr, "keepDist");
5128 RNA_def_property_ui_range(prop, -100, 100, 1, 2);
5129 RNA_def_property_ui_text(prop, "Offset", "Distance to keep from the target");
5130 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5131
5132 prop = RNA_def_property(srna, "project_limit", PROP_FLOAT, PROP_DISTANCE);
5133 RNA_def_property_float_sdna(prop, nullptr, "projLimit");
5134 RNA_def_property_range(prop, 0.0, FLT_MAX);
5135 RNA_def_property_ui_range(prop, 0, 100, 1, 2);
5137 prop, "Project Limit", "Limit the distance used for projection (zero disables)");
5138 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5139
5140 prop = RNA_def_property(srna, "use_project_x", PROP_BOOLEAN, PROP_NONE);
5142 RNA_def_property_ui_text(prop, "X", "");
5143 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5144
5145 prop = RNA_def_property(srna, "use_project_y", PROP_BOOLEAN, PROP_NONE);
5147 RNA_def_property_ui_text(prop, "Y", "");
5148 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5149
5150 prop = RNA_def_property(srna, "use_project_z", PROP_BOOLEAN, PROP_NONE);
5152 RNA_def_property_ui_text(prop, "Z", "");
5153 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5154
5155 prop = RNA_def_property(srna, "subsurf_levels", PROP_INT, PROP_NONE);
5156 RNA_def_property_int_sdna(prop, nullptr, "subsurfLevels");
5157 RNA_def_property_range(prop, 0, 6);
5158 RNA_def_property_ui_range(prop, 0, 6, 1, -1);
5160 prop,
5161 "Subdivision Levels",
5162 "Number of subdivisions that must be performed before extracting vertices' "
5163 "positions and normals");
5164 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5165
5166 prop = RNA_def_property(srna, "use_negative_direction", PROP_BOOLEAN, PROP_NONE);
5169 prop, "Negative", "Allow vertices to move in the negative direction of axis");
5170 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5171
5172 prop = RNA_def_property(srna, "use_positive_direction", PROP_BOOLEAN, PROP_NONE);
5175 prop, "Positive", "Allow vertices to move in the positive direction of axis");
5176 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5177
5178 prop = RNA_def_property(srna, "use_invert_cull", PROP_BOOLEAN, PROP_NONE);
5181 prop, "Invert Cull", "When projecting in the negative direction invert the face cull mode");
5182 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5183
5184 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
5185 RNA_def_property_boolean_sdna(prop, nullptr, "shrinkOpts", MOD_SHRINKWRAP_INVERT_VGROUP);
5186 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
5187 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5188
5190}
5191
5193{
5194 StructRNA *srna;
5195 PropertyRNA *prop;
5196
5197 static const EnumPropertyItem modifier_mask_mode_items[] = {
5198 {MOD_MASK_MODE_VGROUP, "VERTEX_GROUP", 0, "Vertex Group", ""},
5199 {MOD_MASK_MODE_ARM, "ARMATURE", 0, "Armature", ""},
5200 {0, nullptr, 0, nullptr, nullptr},
5201 };
5202
5203 srna = RNA_def_struct(brna, "MaskModifier", "Modifier");
5204 RNA_def_struct_ui_text(srna, "Mask Modifier", "Mask modifier to hide parts of the mesh");
5205 RNA_def_struct_sdna(srna, "MaskModifierData");
5206 RNA_def_struct_ui_icon(srna, ICON_MOD_MASK);
5207
5209
5210 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
5211 RNA_def_property_enum_items(prop, modifier_mask_mode_items);
5212 RNA_def_property_ui_text(prop, "Mode", "");
5213 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5214
5215 prop = RNA_def_property(srna, "armature", PROP_POINTER, PROP_NONE);
5216 RNA_def_property_pointer_sdna(prop, nullptr, "ob_arm");
5217 RNA_def_property_ui_text(prop, "Armature", "Armature to use as source of bones to mask");
5219 prop, nullptr, "rna_MaskModifier_ob_arm_set", nullptr, "rna_Armature_object_poll");
5221 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5222
5223 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
5224 RNA_def_property_string_sdna(prop, nullptr, "vgroup");
5225 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
5226 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_MaskModifier_vgroup_set");
5227 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5228
5229 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
5230 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_MASK_INV);
5231 RNA_def_property_ui_text(prop, "Invert", "Use vertices that are not part of region defined");
5232 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5233
5234 prop = RNA_def_property(srna, "use_smooth", PROP_BOOLEAN, PROP_NONE);
5235 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_MASK_SMOOTH);
5237 prop, "Smooth", "Use vertex group weights to cut faces at the weight contour");
5238 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5239
5240 prop = RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_FACTOR);
5241 RNA_def_property_float_sdna(prop, nullptr, "threshold");
5242 RNA_def_property_range(prop, 0.0, 1.0);
5243 RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
5244 RNA_def_property_ui_text(prop, "Threshold", "Weights over this threshold remain");
5245 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5246
5248}
5249
5251{
5252 StructRNA *srna;
5253 PropertyRNA *prop;
5254
5255 static const EnumPropertyItem simple_deform_mode_items[] = {
5257 "TWIST",
5258 0,
5259 "Twist",
5260 "Rotate around the Z axis of the modifier space"},
5262 "BEND",
5263 0,
5264 "Bend",
5265 "Bend the mesh over the Z axis of the modifier space"},
5267 "TAPER",
5268 0,
5269 "Taper",
5270 "Linearly scale along Z axis of the modifier space"},
5272 "STRETCH",
5273 0,
5274 "Stretch",
5275 "Stretch the object along the Z axis of the modifier space"},
5276 {0, nullptr, 0, nullptr, nullptr},
5277 };
5278
5279 srna = RNA_def_struct(brna, "SimpleDeformModifier", "Modifier");
5281 srna,
5282 "SimpleDeform Modifier",
5283 "Simple deformation modifier to apply effects such as twisting and bending");
5284 RNA_def_struct_sdna(srna, "SimpleDeformModifierData");
5285 RNA_def_struct_ui_icon(srna, ICON_MOD_SIMPLEDEFORM);
5286
5288
5289 prop = RNA_def_property(srna, "deform_method", PROP_ENUM, PROP_NONE);
5290 RNA_def_property_enum_sdna(prop, nullptr, "mode");
5291 RNA_def_property_enum_items(prop, simple_deform_mode_items);
5292 RNA_def_property_ui_text(prop, "Mode", "");
5294 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5295
5296 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
5297 RNA_def_property_string_sdna(prop, nullptr, "vgroup_name");
5298 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
5300 prop, nullptr, nullptr, "rna_SimpleDeformModifier_vgroup_name_set");
5301 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5302
5303 prop = RNA_def_property(srna, "deform_axis", PROP_ENUM, PROP_NONE);
5305 RNA_def_property_ui_text(prop, "Axis", "Deform around local axis");
5306 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5307
5308 prop = RNA_def_property(srna, "origin", PROP_POINTER, PROP_NONE);
5309 RNA_def_property_ui_text(prop, "Origin", "Offset the origin and orientation of the deformation");
5311 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5312
5313 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
5315 RNA_def_property_ui_range(prop, -10.0, 10.0, 1.0, 3);
5316 RNA_def_property_ui_text(prop, "Factor", "Amount to deform object");
5317 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5318
5319 prop = RNA_def_property(srna, "angle", PROP_FLOAT, PROP_ANGLE);
5320 RNA_def_property_float_sdna(prop, nullptr, "factor");
5322 RNA_def_property_ui_range(prop, DEG2RAD(-360.0), DEG2RAD(360.0), 10.0, 3);
5323 RNA_def_property_ui_text(prop, "Angle", "Angle of deformation");
5324 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5325
5326 prop = RNA_def_property(srna, "limits", PROP_FLOAT, PROP_NONE);
5327 RNA_def_property_float_sdna(prop, nullptr, "limit");
5328 RNA_def_property_array(prop, 2);
5329 RNA_def_property_range(prop, 0, 1);
5330 RNA_def_property_ui_range(prop, 0, 1, 5, 2);
5331 RNA_def_property_ui_text(prop, "Limits", "Lower/Upper limits for deform");
5332 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5333
5334 prop = RNA_def_property(srna, "lock_x", PROP_BOOLEAN, PROP_NONE);
5336 RNA_def_property_ui_text(prop, "X", "Do not allow deformation along the X axis");
5337 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5338
5339 prop = RNA_def_property(srna, "lock_y", PROP_BOOLEAN, PROP_NONE);
5341 RNA_def_property_ui_text(prop, "Y", "Do not allow deformation along the Y axis");
5342 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5343
5344 prop = RNA_def_property(srna, "lock_z", PROP_BOOLEAN, PROP_NONE);
5346 RNA_def_property_ui_text(prop, "Z", "Do not allow deformation along the Z axis");
5347 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5348
5349 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
5351 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
5352 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5353
5355}
5356
5358{
5359 StructRNA *srna;
5360
5361 srna = RNA_def_struct(brna, "SurfaceModifier", "Modifier");
5363 srna,
5364 "Surface Modifier",
5365 "Surface modifier defining modifier stack position used for surface fields");
5366 RNA_def_struct_sdna(srna, "SurfaceModifierData");
5367 RNA_def_struct_ui_icon(srna, ICON_MOD_PHYSICS);
5368}
5369
5371{
5372 static const EnumPropertyItem mode_items[] = {
5374 "EXTRUDE",
5375 0,
5376 "Simple",
5377 "Output a solidified version of a mesh by simple extrusion"},
5379 "NON_MANIFOLD",
5380 0,
5381 "Complex",
5382 "Output a manifold mesh even if the base mesh is non-manifold, "
5383 "where edges have 3 or more connecting faces. "
5384 "This method is slower."},
5385 {0, nullptr, 0, nullptr, nullptr},
5386 };
5387
5388 static const EnumPropertyItem nonmanifold_thickness_mode_items[] = {
5390 "FIXED",
5391 0,
5392 "Fixed",
5393 "Most basic thickness calculation"},
5395 "EVEN",
5396 0,
5397 "Even",
5398 "Even thickness calculation which takes the angle between faces into account"},
5400 "CONSTRAINTS",
5401 0,
5402 "Constraints",
5403 "Thickness calculation using constraints, most advanced"},
5404 {0, nullptr, 0, nullptr, nullptr},
5405 };
5406
5407 static const EnumPropertyItem nonmanifold_boundary_mode_items[] = {
5408 {MOD_SOLIDIFY_NONMANIFOLD_BOUNDARY_MODE_NONE, "NONE", 0, "None", "No shape correction"},
5410 "ROUND",
5411 0,
5412 "Round",
5413 "Round open perimeter shape"},
5415 "FLAT",
5416 0,
5417 "Flat",
5418 "Flat open perimeter shape"},
5419 {0, nullptr, 0, nullptr, nullptr},
5420 };
5421
5422 StructRNA *srna;
5423 PropertyRNA *prop;
5424
5425 srna = RNA_def_struct(brna, "SolidifyModifier", "Modifier");
5427 srna, "Solidify Modifier", "Create a solid skin, compensating for sharp angles");
5428 RNA_def_struct_sdna(srna, "SolidifyModifierData");
5429 RNA_def_struct_ui_icon(srna, ICON_MOD_SOLIDIFY);
5430
5432
5433 prop = RNA_def_property(srna, "solidify_mode", PROP_ENUM, PROP_NONE);
5434 RNA_def_property_enum_sdna(prop, nullptr, "mode");
5435 RNA_def_property_enum_items(prop, mode_items);
5436 RNA_def_property_ui_text(prop, "Mode", "Selects the used algorithm");
5437 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5438
5439 prop = RNA_def_property(srna, "thickness", PROP_FLOAT, PROP_DISTANCE);
5440 RNA_def_property_float_sdna(prop, nullptr, "offset");
5442 RNA_def_property_ui_range(prop, -10, 10, 0.1, 4);
5443 RNA_def_property_ui_text(prop, "Thickness", "Thickness of the shell");
5444 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5445
5446 prop = RNA_def_property(srna, "thickness_clamp", PROP_FLOAT, PROP_FACTOR);
5447 RNA_def_property_float_sdna(prop, nullptr, "offset_clamp");
5448 RNA_def_property_range(prop, 0, 100.0);
5449 RNA_def_property_ui_range(prop, 0, 2.0, 0.1, 4);
5450 RNA_def_property_ui_text(prop, "Clamp", "Offset clamp based on geometry scale");
5451 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5452
5453 prop = RNA_def_property(srna, "use_thickness_angle_clamp", PROP_BOOLEAN, PROP_NONE);
5455 RNA_def_property_ui_text(prop, "Angle Clamp", "Clamp thickness based on angles");
5456 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5457
5458 prop = RNA_def_property(srna, "thickness_vertex_group", PROP_FLOAT, PROP_FACTOR);
5459 RNA_def_property_float_sdna(prop, nullptr, "offset_fac_vg");
5460 RNA_def_property_range(prop, 0.0, 1.0);
5461 RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
5463 prop, "Vertex Group Factor", "Thickness factor to use for zero vertex group influence");
5464 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5465
5466 prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_FACTOR);
5467 RNA_def_property_float_sdna(prop, nullptr, "offset_fac");
5469 RNA_def_property_ui_range(prop, -1, 1, 0.1, 4);
5470 RNA_def_property_ui_text(prop, "Offset", "Offset the thickness from the center");
5471 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5472
5473 prop = RNA_def_property(srna, "edge_crease_inner", PROP_FLOAT, PROP_FACTOR);
5474 RNA_def_property_float_sdna(prop, nullptr, "crease_inner");
5475 RNA_def_property_range(prop, 0, 1);
5476 RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
5477 RNA_def_property_ui_text(prop, "Inner Crease", "Assign a crease to inner edges");
5478 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5479
5480 prop = RNA_def_property(srna, "edge_crease_outer", PROP_FLOAT, PROP_FACTOR);
5481 RNA_def_property_float_sdna(prop, nullptr, "crease_outer");
5482 RNA_def_property_range(prop, 0, 1);
5483 RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
5484 RNA_def_property_ui_text(prop, "Outer Crease", "Assign a crease to outer edges");
5485 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5486
5487 prop = RNA_def_property(srna, "edge_crease_rim", PROP_FLOAT, PROP_FACTOR);
5488 RNA_def_property_float_sdna(prop, nullptr, "crease_rim");
5489 RNA_def_property_range(prop, 0, 1);
5490 RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
5491 RNA_def_property_ui_text(prop, "Rim Crease", "Assign a crease to the edges making up the rim");
5492 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5493
5494 prop = RNA_def_property(srna, "material_offset", PROP_INT, PROP_NONE);
5495 RNA_def_property_int_sdna(prop, nullptr, "mat_ofs");
5496 RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
5497 RNA_def_property_ui_text(prop, "Material Offset", "Offset material index of generated faces");
5498 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5499
5500 prop = RNA_def_property(srna, "material_offset_rim", PROP_INT, PROP_NONE);
5501 RNA_def_property_int_sdna(prop, nullptr, "mat_ofs_rim");
5502 RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
5504 prop, "Rim Material Offset", "Offset material index of generated rim faces");
5505 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5506
5507 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
5508 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
5509 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
5510 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_SolidifyModifier_defgrp_name_set");
5511 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5512
5513 prop = RNA_def_property(srna, "shell_vertex_group", PROP_STRING, PROP_NONE);
5514 RNA_def_property_string_sdna(prop, nullptr, "shell_defgrp_name");
5516 "Shell Vertex Group",
5517 "Vertex group that the generated shell geometry will be weighted to");
5519 prop, nullptr, nullptr, "rna_SolidifyModifier_shell_defgrp_name_set");
5520 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5521
5522 prop = RNA_def_property(srna, "rim_vertex_group", PROP_STRING, PROP_NONE);
5523 RNA_def_property_string_sdna(prop, nullptr, "rim_defgrp_name");
5525 "Rim Vertex Group",
5526 "Vertex group that the generated rim geometry will be weighted to");
5528 prop, nullptr, nullptr, "rna_SolidifyModifier_rim_defgrp_name_set");
5529 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5530
5531 prop = RNA_def_property(srna, "use_rim", PROP_BOOLEAN, PROP_NONE);
5532 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_SOLIDIFY_RIM);
5534 "Fill Rim",
5535 "Create edge loops between the inner and outer surfaces on face edges "
5536 "(slow, disable when not needed)");
5537 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5538
5539 prop = RNA_def_property(srna, "use_even_offset", PROP_BOOLEAN, PROP_NONE);
5540 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_SOLIDIFY_EVEN);
5542 prop,
5543 "Even Thickness",
5544 "Maintain thickness by adjusting for sharp corners (slow, disable when not needed)");
5545 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5546
5547 prop = RNA_def_property(srna, "use_quality_normals", PROP_BOOLEAN, PROP_NONE);
5550 prop,
5551 "High Quality Normals",
5552 "Calculate normals which result in more even thickness (slow, disable when not needed)");
5553 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5554
5555 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
5557 RNA_def_property_ui_text(prop, "Vertex Group Invert", "Invert the vertex group influence");
5558 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5559
5560 prop = RNA_def_property(srna, "use_flat_faces", PROP_BOOLEAN, PROP_NONE);
5563 "Flat Faces",
5564 "Make faces use the minimal vertex weight assigned to their vertices "
5565 "(ensures new faces remain parallel to their original ones, slow, "
5566 "disable when not needed)");
5567 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5568
5569 prop = RNA_def_property(srna, "use_flip_normals", PROP_BOOLEAN, PROP_NONE);
5570 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_SOLIDIFY_FLIP);
5571 RNA_def_property_ui_text(prop, "Flip Normals", "Invert the face direction");
5572 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5573
5574 prop = RNA_def_property(srna, "use_rim_only", PROP_BOOLEAN, PROP_NONE);
5576 RNA_def_property_ui_text(prop, "Only Rim", "Only add the rim to the original data");
5577 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5578
5579 /* Settings for #MOD_SOLIDIFY_MODE_NONMANIFOLD */
5580 prop = RNA_def_property(srna, "nonmanifold_thickness_mode", PROP_ENUM, PROP_NONE);
5581 RNA_def_property_enum_sdna(prop, nullptr, "nonmanifold_offset_mode");
5582 RNA_def_property_enum_items(prop, nonmanifold_thickness_mode_items);
5583 RNA_def_property_ui_text(prop, "Thickness Mode", "Selects the used thickness algorithm");
5584 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5585
5586 prop = RNA_def_property(srna, "nonmanifold_boundary_mode", PROP_ENUM, PROP_NONE);
5587 RNA_def_property_enum_items(prop, nonmanifold_boundary_mode_items);
5588 RNA_def_property_ui_text(prop, "Boundary Shape", "Selects the boundary adjustment algorithm");
5590 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5591
5592 prop = RNA_def_property(srna, "nonmanifold_merge_threshold", PROP_FLOAT, PROP_DISTANCE);
5593 RNA_def_property_float_sdna(prop, nullptr, "merge_tolerance");
5594 RNA_def_property_range(prop, 0.0, 1.0);
5595 RNA_def_property_ui_range(prop, 0.0, 1.0, 0.01, 4);
5597 prop, "Merge Threshold", "Distance within which degenerated geometry is merged");
5598 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5599
5600 prop = RNA_def_property(srna, "bevel_convex", PROP_FLOAT, PROP_NONE);
5601 RNA_def_property_float_sdna(prop, nullptr, "bevel_convex");
5602 RNA_def_property_range(prop, -1.0, 1.0);
5603 RNA_def_property_ui_range(prop, -1.0, 1.0, 0.1, 3);
5604 RNA_def_property_ui_text(prop, "Bevel Convex", "Edge bevel weight to be added to outside edges");
5605 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5606
5608}
5609
5611{
5612 StructRNA *srna;
5613 PropertyRNA *prop;
5614
5615 srna = RNA_def_struct(brna, "ScrewModifier", "Modifier");
5616 RNA_def_struct_ui_text(srna, "Screw Modifier", "Revolve edges");
5617 RNA_def_struct_sdna(srna, "ScrewModifierData");
5618 RNA_def_struct_ui_icon(srna, ICON_MOD_SCREW);
5619
5621
5622 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
5623 RNA_def_property_pointer_sdna(prop, nullptr, "ob_axis");
5624 RNA_def_property_ui_text(prop, "Object", "Object to define the screw axis");
5626 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5627
5628 prop = RNA_def_property(srna, "steps", PROP_INT, PROP_UNSIGNED);
5629 RNA_def_property_range(prop, 1, 10000);
5630 RNA_def_property_ui_range(prop, 1, 512, 1, -1);
5631 RNA_def_property_ui_text(prop, "Steps", "Number of steps in the revolution");
5632 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5633
5634 prop = RNA_def_property(srna, "render_steps", PROP_INT, PROP_UNSIGNED);
5635 RNA_def_property_range(prop, 1, 10000);
5636 RNA_def_property_ui_range(prop, 1, 512, 1, -1);
5637 RNA_def_property_ui_text(prop, "Render Steps", "Number of steps in the revolution");
5638 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5639
5640 prop = RNA_def_property(srna, "iterations", PROP_INT, PROP_UNSIGNED);
5641 RNA_def_property_int_sdna(prop, nullptr, "iter");
5642 RNA_def_property_range(prop, 1, 10000);
5643 RNA_def_property_ui_range(prop, 1, 100, 1, -1);
5644 RNA_def_property_ui_text(prop, "Iterations", "Number of times to apply the screw operation");
5645 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5646
5647 prop = RNA_def_property(srna, "axis", PROP_ENUM, PROP_NONE);
5649 RNA_def_property_ui_text(prop, "Axis", "Screw axis");
5650 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5651
5652 prop = RNA_def_property(srna, "angle", PROP_FLOAT, PROP_ANGLE);
5653 RNA_def_property_ui_range(prop, -M_PI * 2, M_PI * 2, 10, -1);
5655 RNA_def_property_ui_text(prop, "Angle", "Angle of revolution");
5656 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5657
5658 prop = RNA_def_property(srna, "screw_offset", PROP_FLOAT, PROP_DISTANCE);
5659 RNA_def_property_float_sdna(prop, nullptr, "screw_ofs");
5660 RNA_def_property_ui_text(prop, "Screw", "Offset the revolution along its axis");
5661 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5662
5663 prop = RNA_def_property(srna, "merge_threshold", PROP_FLOAT, PROP_DISTANCE);
5664 RNA_def_property_float_sdna(prop, nullptr, "merge_dist");
5666 RNA_def_property_ui_range(prop, 0, 1, 1, 4);
5667 RNA_def_property_ui_text(prop, "Merge Distance", "Limit below which to merge vertices");
5668 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5669
5670 prop = RNA_def_property(srna, "use_normal_flip", PROP_BOOLEAN, PROP_NONE);
5672 RNA_def_property_ui_text(prop, "Flip", "Flip normals of lathed faces");
5673 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5674
5675 prop = RNA_def_property(srna, "use_normal_calculate", PROP_BOOLEAN, PROP_NONE);
5678 prop, "Calculate Order", "Calculate the order of edges (needed for meshes, but not curves)");
5679 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5680
5681 prop = RNA_def_property(srna, "use_object_screw_offset", PROP_BOOLEAN, PROP_NONE);
5684 prop, "Object Screw", "Use the distance between the objects to make a screw");
5685 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5686
5687 /* Vertex merging parameters */
5688 prop = RNA_def_property(srna, "use_merge_vertices", PROP_BOOLEAN, PROP_NONE);
5689 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_SCREW_MERGE);
5691 prop, "Merge Vertices", "Merge adjacent vertices (screw offset must be zero)");
5692 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5693
5694 prop = RNA_def_property(srna, "use_smooth_shade", PROP_BOOLEAN, PROP_NONE);
5697 prop, "Smooth Shading", "Output faces with smooth shading rather than flat shaded");
5698 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5699
5700 prop = RNA_def_property(srna, "use_stretch_u", PROP_BOOLEAN, PROP_NONE);
5703 prop, "Stretch U", "Stretch the U coordinates between 0 and 1 when UVs are present");
5704 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5705
5706 prop = RNA_def_property(srna, "use_stretch_v", PROP_BOOLEAN, PROP_NONE);
5709 prop, "Stretch V", "Stretch the V coordinates between 0 and 1 when UVs are present");
5710 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5711
5712# if 0
5713 prop = RNA_def_property(srna, "use_angle_object", PROP_BOOLEAN, PROP_NONE);
5714 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_SCREW_OBJECT_ANGLE);
5716 prop, "Object Angle", "Use the angle between the objects rather than the fixed angle");
5717 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5718# endif
5719
5721}
5722
5724{
5725 StructRNA *srna;
5726 PropertyRNA *prop;
5727
5728 srna = RNA_def_struct(brna, "UVWarpModifier", "Modifier");
5729 RNA_def_struct_ui_text(srna, "UVWarp Modifier", "Add target position to UV coordinates");
5730 RNA_def_struct_sdna(srna, "UVWarpModifierData");
5731 RNA_def_struct_ui_icon(srna, ICON_MOD_UVPROJECT);
5732
5734
5735 prop = RNA_def_property(srna, "axis_u", PROP_ENUM, PROP_NONE);
5736 RNA_def_property_enum_sdna(prop, nullptr, "axis_u");
5738 RNA_def_property_ui_text(prop, "U-Axis", "Pole axis for rotation");
5739 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5740
5741 prop = RNA_def_property(srna, "axis_v", PROP_ENUM, PROP_NONE);
5742 RNA_def_property_enum_sdna(prop, nullptr, "axis_v");
5744 RNA_def_property_ui_text(prop, "V-Axis", "Pole axis for rotation");
5745 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5746
5747 prop = RNA_def_property(srna, "center", PROP_FLOAT, PROP_NONE);
5748 RNA_def_property_float_sdna(prop, nullptr, "center");
5749 RNA_def_property_ui_text(prop, "UV Center", "Center point for rotate/scale");
5750 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5751
5752 prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
5753 RNA_def_property_float_sdna(prop, nullptr, "offset");
5754 RNA_def_property_ui_text(prop, "Offset", "2D Offset for the warp");
5755 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5756
5757 prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_NONE);
5758 RNA_def_property_float_sdna(prop, nullptr, "scale");
5759 RNA_def_property_ui_text(prop, "Scale", "2D Scale for the warp");
5760 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5761
5762 prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ANGLE);
5763 RNA_def_property_float_sdna(prop, nullptr, "rotation");
5764 RNA_def_property_ui_text(prop, "Rotation", "2D Rotation for the warp");
5765 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5766
5767 prop = RNA_def_property(srna, "object_from", PROP_POINTER, PROP_NONE);
5768 RNA_def_property_pointer_sdna(prop, nullptr, "object_src");
5769 RNA_def_property_ui_text(prop, "Object From", "Object defining offset");
5771 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5772
5773 prop = RNA_def_property(srna, "bone_from", PROP_STRING, PROP_NONE);
5774 RNA_def_property_string_sdna(prop, nullptr, "bone_src");
5775 RNA_def_property_ui_text(prop, "Bone From", "Bone defining offset");
5776 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5777
5778 prop = RNA_def_property(srna, "object_to", PROP_POINTER, PROP_NONE);
5779 RNA_def_property_pointer_sdna(prop, nullptr, "object_dst");
5780 RNA_def_property_ui_text(prop, "Object To", "Object defining offset");
5782 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5783
5784 prop = RNA_def_property(srna, "bone_to", PROP_STRING, PROP_NONE);
5785 RNA_def_property_string_sdna(prop, nullptr, "bone_dst");
5786 RNA_def_property_ui_text(prop, "Bone To", "Bone defining offset");
5787 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5788
5789 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
5790 RNA_def_property_string_sdna(prop, nullptr, "vgroup_name");
5791 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
5792 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_UVWarpModifier_vgroup_name_set");
5793 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5794
5795 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
5797 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
5798 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5799
5800 prop = RNA_def_property(srna, "uv_layer", PROP_STRING, PROP_NONE);
5801 RNA_def_property_string_sdna(prop, nullptr, "uvlayer_name");
5802 RNA_def_property_ui_text(prop, "UV Map", "UV map name");
5803 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_UVWarpModifier_uvlayer_name_set");
5804 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5805
5807}
5808
5810 StructRNA *srna,
5811 const char *mask_flags,
5812 const int invert_vgroup_mask_flag,
5813 const char *mask_vgroup_setter,
5814 const char *mask_uvlayer_setter)
5815{
5816 static const EnumPropertyItem weightvg_mask_tex_map_items[] = {
5817 {MOD_DISP_MAP_LOCAL, "LOCAL", 0, "Local", "Use local generated coordinates"},
5818 {MOD_DISP_MAP_GLOBAL, "GLOBAL", 0, "Global", "Use global coordinates"},
5820 "OBJECT",
5821 0,
5822 "Object",
5823 "Use local generated coordinates of another object"},
5824 {MOD_DISP_MAP_UV, "UV", 0, "UV", "Use coordinates from a UV layer"},
5825 {0, nullptr, 0, nullptr, nullptr},
5826 };
5827
5828 static const EnumPropertyItem weightvg_mask_tex_used_items[] = {
5829 {MOD_WVG_MASK_TEX_USE_INT, "INT", 0, "Intensity", ""},
5830 {MOD_WVG_MASK_TEX_USE_RED, "RED", 0, "Red", ""},
5831 {MOD_WVG_MASK_TEX_USE_GREEN, "GREEN", 0, "Green", ""},
5832 {MOD_WVG_MASK_TEX_USE_BLUE, "BLUE", 0, "Blue", ""},
5833 {MOD_WVG_MASK_TEX_USE_HUE, "HUE", 0, "Hue", ""},
5834 {MOD_WVG_MASK_TEX_USE_SAT, "SAT", 0, "Saturation", ""},
5835 {MOD_WVG_MASK_TEX_USE_VAL, "VAL", 0, "Value", ""},
5836 {MOD_WVG_MASK_TEX_USE_ALPHA, "ALPHA", 0, "Alpha", ""},
5837 {0, nullptr, 0, nullptr, nullptr},
5838 };
5839
5840 PropertyRNA *prop;
5841
5843
5844 prop = RNA_def_property(srna, "mask_constant", PROP_FLOAT, PROP_FACTOR);
5846 RNA_def_property_ui_range(prop, 0.0, 1.0, 1, -1);
5848 prop, "Influence", "Global influence of current modifications on vgroup");
5849 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5850
5851 prop = RNA_def_property(srna, "mask_vertex_group", PROP_STRING, PROP_NONE);
5852 RNA_def_property_string_sdna(prop, nullptr, "mask_defgrp_name");
5853 RNA_def_property_ui_text(prop, "Mask Vertex Group", "Masking vertex group name");
5854 RNA_def_property_string_funcs(prop, nullptr, nullptr, mask_vgroup_setter);
5855 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5856
5857 prop = RNA_def_property(srna, "invert_mask_vertex_group", PROP_BOOLEAN, PROP_NONE);
5858 RNA_def_property_boolean_sdna(prop, nullptr, mask_flags, invert_vgroup_mask_flag);
5859 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group mask influence");
5860 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5861
5862 prop = RNA_def_property(srna, "mask_texture", PROP_POINTER, PROP_NONE);
5863 RNA_def_property_ui_text(prop, "Masking Tex", "Masking texture");
5865 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5866
5867 prop = RNA_def_property(srna, "mask_tex_use_channel", PROP_ENUM, PROP_NONE);
5868 RNA_def_property_enum_items(prop, weightvg_mask_tex_used_items);
5869 RNA_def_property_ui_text(prop, "Use Channel", "Which texture channel to use for masking");
5870 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5871
5872 prop = RNA_def_property(srna, "mask_tex_mapping", PROP_ENUM, PROP_NONE);
5873 RNA_def_property_enum_items(prop, weightvg_mask_tex_map_items);
5875 "Texture Coordinates",
5876 "Which texture coordinates "
5877 "to use for mapping");
5878 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5879
5880 prop = RNA_def_property(srna, "mask_tex_uv_layer", PROP_STRING, PROP_NONE);
5881 RNA_def_property_string_sdna(prop, nullptr, "mask_tex_uvlayer_name");
5882 RNA_def_property_ui_text(prop, "UV Map", "UV map name");
5883 RNA_def_property_string_funcs(prop, nullptr, nullptr, mask_uvlayer_setter);
5884 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5885
5886 prop = RNA_def_property(srna, "mask_tex_map_object", PROP_POINTER, PROP_NONE);
5887 RNA_def_property_pointer_sdna(prop, nullptr, "mask_tex_map_obj");
5889 "Texture Coordinate Object",
5890 "Which object to take texture "
5891 "coordinates from");
5893 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5894
5895 prop = RNA_def_property(srna, "mask_tex_map_bone", PROP_STRING, PROP_NONE);
5896 RNA_def_property_string_sdna(prop, nullptr, "mask_tex_map_bone");
5898 prop, "Texture Coordinate Bone", "Which bone to take texture coordinates from");
5899 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5900
5902}
5903
5905{
5906 static const EnumPropertyItem weightvg_edit_falloff_type_items[] = {
5907 {MOD_WVG_MAPPING_NONE, "LINEAR", ICON_LINCURVE, "Linear", "Null action"},
5908 {MOD_WVG_MAPPING_CURVE, "CURVE", ICON_RNDCURVE, "Custom Curve", ""},
5909 {MOD_WVG_MAPPING_SHARP, "SHARP", ICON_SHARPCURVE, "Sharp", ""},
5910 {MOD_WVG_MAPPING_SMOOTH, "SMOOTH", ICON_SMOOTHCURVE, "Smooth", ""},
5911 {MOD_WVG_MAPPING_ROOT, "ROOT", ICON_ROOTCURVE, "Root", ""},
5912 {MOD_WVG_MAPPING_SPHERE, "ICON_SPHERECURVE", ICON_SPHERECURVE, "Sphere", ""},
5913 {MOD_WVG_MAPPING_RANDOM, "RANDOM", ICON_RNDCURVE, "Random", ""},
5915 "STEP",
5916 ICON_IPO_CONSTANT,
5917 "Median Step",
5918 "Map all values below 0.5 to 0.0, and all others to 1.0"},
5919 {0, nullptr, 0, nullptr, nullptr},
5920 };
5921
5922 StructRNA *srna;
5923 PropertyRNA *prop;
5924
5925 srna = RNA_def_struct(brna, "VertexWeightEditModifier", "Modifier");
5927 srna, "WeightVG Edit Modifier", "Edit the weights of vertices in a group");
5928 RNA_def_struct_sdna(srna, "WeightVGEditModifierData");
5929 RNA_def_struct_ui_icon(srna, ICON_MOD_VERTEX_WEIGHT);
5930
5932
5933 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
5934 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
5935 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
5937 prop, nullptr, nullptr, "rna_WeightVGEditModifier_defgrp_name_set");
5938 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5939
5940 prop = RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);
5941 RNA_def_property_enum_items(prop, weightvg_edit_falloff_type_items);
5942 RNA_def_property_ui_text(prop, "Falloff Type", "How weights are mapped to their new values");
5944 BLT_I18NCONTEXT_ID_CURVE_LEGACY); /* Abusing id_curve :/ */
5945 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5946
5947 prop = RNA_def_property(srna, "invert_falloff", PROP_BOOLEAN, PROP_NONE);
5948 RNA_def_property_boolean_sdna(prop, nullptr, "edit_flags", MOD_WVG_INVERT_FALLOFF);
5949 RNA_def_property_ui_text(prop, "Invert Falloff", "Invert the resulting falloff weight");
5950 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5951
5952 prop = RNA_def_property(srna, "normalize", PROP_BOOLEAN, PROP_NONE);
5955 prop,
5956 "Normalize Weights",
5957 "Normalize the resulting weights (otherwise they are only clamped within 0.0 to 1.0 range)");
5958 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5959
5960 prop = RNA_def_property(srna, "map_curve", PROP_POINTER, PROP_NONE);
5961 RNA_def_property_pointer_sdna(prop, nullptr, "cmap_curve");
5962 RNA_def_property_ui_text(prop, "Mapping Curve", "Custom mapping curve");
5963 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5964
5965 prop = RNA_def_property(srna, "use_add", PROP_BOOLEAN, PROP_NONE);
5966 RNA_def_property_boolean_sdna(prop, nullptr, "edit_flags", MOD_WVG_EDIT_ADD2VG);
5968 "Group Add",
5969 "Add vertices with weight over threshold "
5970 "to vgroup");
5971 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5972
5973 prop = RNA_def_property(srna, "use_remove", PROP_BOOLEAN, PROP_NONE);
5974 RNA_def_property_boolean_sdna(prop, nullptr, "edit_flags", MOD_WVG_EDIT_REMFVG);
5976 "Group Remove",
5977 "Remove vertices with weight below threshold "
5978 "from vgroup");
5979 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5980
5981 prop = RNA_def_property(srna, "default_weight", PROP_FLOAT, PROP_FACTOR);
5982 RNA_def_property_range(prop, 0.0, 1.0f);
5983 RNA_def_property_ui_range(prop, 0.0, 1.0, 1, -1);
5985 "Default Weight",
5986 "Default weight a vertex will have if "
5987 "it is not in the vgroup");
5988 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5989
5990 prop = RNA_def_property(srna, "add_threshold", PROP_FLOAT, PROP_NONE);
5991 RNA_def_property_float_sdna(prop, nullptr, "add_threshold");
5992 RNA_def_property_range(prop, -1000.0, 1000.0);
5993 RNA_def_property_ui_range(prop, 0.0, 1.0, 1, -1);
5995 "Add Threshold",
5996 "Lower (inclusive) bound for a vertex's weight "
5997 "to be added to the vgroup");
5998 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5999
6000 prop = RNA_def_property(srna, "remove_threshold", PROP_FLOAT, PROP_NONE);
6001 RNA_def_property_float_sdna(prop, nullptr, "rem_threshold");
6002 RNA_def_property_range(prop, -1000.0, 1000.0);
6003 RNA_def_property_ui_range(prop, 0.0, 1.0, 1, -1);
6005 "Remove Threshold",
6006 "Upper (inclusive) bound for a vertex's weight "
6007 "to be removed from the vgroup");
6008 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6009
6011
6012 /* Common masking properties. */
6014 srna,
6015 "edit_flags",
6017 "rna_WeightVGEditModifier_mask_defgrp_name_set",
6018 "rna_WeightVGEditModifier_mask_tex_uvlayer_name_set");
6019}
6020
6022{
6023 static const EnumPropertyItem weightvg_mix_modes_items[] = {
6024 {MOD_WVG_MIX_SET, "SET", 0, "Replace", "Replace VGroup A's weights by VGroup B's ones"},
6025 {MOD_WVG_MIX_ADD, "ADD", 0, "Add", "Add VGroup B's weights to VGroup A's ones"},
6026 {MOD_WVG_MIX_SUB, "SUB", 0, "Subtract", "Subtract VGroup B's weights from VGroup A's ones"},
6027 {MOD_WVG_MIX_MUL, "MUL", 0, "Multiply", "Multiply VGroup A's weights by VGroup B's ones"},
6028 {MOD_WVG_MIX_DIV, "DIV", 0, "Divide", "Divide VGroup A's weights by VGroup B's ones"},
6030 "DIF",
6031 0,
6032 "Difference",
6033 "Difference between VGroup A's and VGroup B's weights"},
6034 {MOD_WVG_MIX_AVG, "AVG", 0, "Average", "Average value of VGroup A's and VGroup B's weights"},
6035 {MOD_WVG_MIX_MIN, "MIN", 0, "Minimum", "Minimum of VGroup A's and VGroup B's weights"},
6036 {MOD_WVG_MIX_MAX, "MAX", 0, "Maximum", "Maximum of VGroup A's and VGroup B's weights"},
6037 {0, nullptr, 0, nullptr, nullptr},
6038 };
6039
6040 static const EnumPropertyItem weightvg_mix_set_items[] = {
6041 {MOD_WVG_SET_ALL, "ALL", 0, "All", "Affect all vertices (might add some to VGroup A)"},
6042 {MOD_WVG_SET_A, "A", 0, "VGroup A", "Affect vertices in VGroup A"},
6044 "B",
6045 0,
6046 "VGroup B",
6047 "Affect vertices in VGroup B (might add some to VGroup A)"},
6049 "OR",
6050 0,
6051 "VGroup A or B",
6052 "Affect vertices in at least one of both VGroups (might add some to VGroup A)"},
6053 {MOD_WVG_SET_AND, "AND", 0, "VGroup A and B", "Affect vertices in both groups"},
6054 {0, nullptr, 0, nullptr, nullptr},
6055 };
6056
6057 StructRNA *srna;
6058 PropertyRNA *prop;
6059
6060 srna = RNA_def_struct(brna, "VertexWeightMixModifier", "Modifier");
6061 RNA_def_struct_ui_text(srna, "WeightVG Mix Modifier", "Mix the weights of two vertex groups");
6062 RNA_def_struct_sdna(srna, "WeightVGMixModifierData");
6063 RNA_def_struct_ui_icon(srna, ICON_MOD_VERTEX_WEIGHT);
6064
6066
6067 prop = RNA_def_property(srna, "vertex_group_a", PROP_STRING, PROP_NONE);
6068 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name_a");
6069 RNA_def_property_ui_text(prop, "Vertex Group A", "First vertex group name");
6071 prop, nullptr, nullptr, "rna_WeightVGMixModifier_defgrp_name_a_set");
6072 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6073
6074 prop = RNA_def_property(srna, "vertex_group_b", PROP_STRING, PROP_NONE);
6075 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name_b");
6076 RNA_def_property_ui_text(prop, "Vertex Group B", "Second vertex group name");
6078 prop, nullptr, nullptr, "rna_WeightVGMixModifier_defgrp_name_b_set");
6079 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6080
6081 prop = RNA_def_property(srna, "invert_vertex_group_a", PROP_BOOLEAN, PROP_NONE);
6083 RNA_def_property_ui_text(prop, "Invert Weights A", "Invert the influence of vertex group A");
6084 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6085
6086 prop = RNA_def_property(srna, "invert_vertex_group_b", PROP_BOOLEAN, PROP_NONE);
6088 RNA_def_property_ui_text(prop, "Invert Weights B", "Invert the influence of vertex group B");
6089 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6090
6091 prop = RNA_def_property(srna, "default_weight_a", PROP_FLOAT, PROP_FACTOR);
6092 RNA_def_property_range(prop, 0.0, 1.0f);
6093 RNA_def_property_ui_range(prop, 0.0, 1.0, 1, -1);
6095 "Default Weight A",
6096 "Default weight a vertex will have if "
6097 "it is not in the first A vgroup");
6098 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6099
6100 prop = RNA_def_property(srna, "default_weight_b", PROP_FLOAT, PROP_FACTOR);
6101 RNA_def_property_range(prop, 0.0, 1.0f);
6102 RNA_def_property_ui_range(prop, 0.0, 1.0, 1, -1);
6104 "Default Weight B",
6105 "Default weight a vertex will have if "
6106 "it is not in the second B vgroup");
6107 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6108
6109 prop = RNA_def_property(srna, "mix_mode", PROP_ENUM, PROP_NONE);
6110 RNA_def_property_enum_items(prop, weightvg_mix_modes_items);
6112 "Mix Mode",
6113 "How weights from vgroup B affect weights "
6114 "of vgroup A");
6115 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6116
6117 prop = RNA_def_property(srna, "mix_set", PROP_ENUM, PROP_NONE);
6118 RNA_def_property_enum_items(prop, weightvg_mix_set_items);
6119 RNA_def_property_ui_text(prop, "Vertex Set", "Which vertices should be affected");
6120 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6121
6122 prop = RNA_def_property(srna, "normalize", PROP_BOOLEAN, PROP_NONE);
6125 prop,
6126 "Normalize Weights",
6127 "Normalize the resulting weights (otherwise they are only clamped within 0.0 to 1.0 range)");
6128 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6129
6131
6132 /* Common masking properties. */
6134 srna,
6135 "flag",
6137 "rna_WeightVGMixModifier_mask_defgrp_name_set",
6138 "rna_WeightVGMixModifier_mask_tex_uvlayer_name_set");
6139}
6140
6142{
6143 static const EnumPropertyItem weightvg_proximity_modes_items[] = {
6145 "OBJECT",
6146 0,
6147 "Object",
6148 "Use distance between affected and target objects"},
6150 "GEOMETRY",
6151 0,
6152 "Geometry",
6153 "Use distance between affected object's vertices and target "
6154 "object, or target object's geometry"},
6155 {0, nullptr, 0, nullptr, nullptr},
6156 };
6157
6158 static const EnumPropertyItem proximity_geometry_items[] = {
6159 {MOD_WVG_PROXIMITY_GEOM_VERTS, "VERTEX", 0, "Vertex", "Compute distance to nearest vertex"},
6160 {MOD_WVG_PROXIMITY_GEOM_EDGES, "EDGE", 0, "Edge", "Compute distance to nearest edge"},
6161 {MOD_WVG_PROXIMITY_GEOM_FACES, "FACE", 0, "Face", "Compute distance to nearest face"},
6162 {0, nullptr, 0, nullptr, nullptr},
6163 };
6164
6165 static const EnumPropertyItem weightvg_proximity_falloff_type_items[] = {
6166 {MOD_WVG_MAPPING_NONE, "LINEAR", ICON_LINCURVE, "Linear", "Null action"},
6167 {MOD_WVG_MAPPING_CURVE, "CURVE", ICON_RNDCURVE, "Custom Curve", ""},
6168 {MOD_WVG_MAPPING_SHARP, "SHARP", ICON_SHARPCURVE, "Sharp", ""},
6169 {MOD_WVG_MAPPING_SMOOTH, "SMOOTH", ICON_SMOOTHCURVE, "Smooth", ""},
6170 {MOD_WVG_MAPPING_ROOT, "ROOT", ICON_ROOTCURVE, "Root", ""},
6171 {MOD_WVG_MAPPING_SPHERE, "ICON_SPHERECURVE", ICON_SPHERECURVE, "Sphere", ""},
6172 {MOD_WVG_MAPPING_RANDOM, "RANDOM", ICON_RNDCURVE, "Random", ""},
6174 "STEP",
6175 ICON_IPO_CONSTANT,
6176 "Median Step",
6177 "Map all values below 0.5 to 0.0, and all others to 1.0"},
6178 {0, nullptr, 0, nullptr, nullptr},
6179 };
6180
6181 StructRNA *srna;
6182 PropertyRNA *prop;
6183
6184 srna = RNA_def_struct(brna, "VertexWeightProximityModifier", "Modifier");
6186 "WeightVG Proximity Modifier",
6187 "Set the weights of vertices in a group from a target object's "
6188 "distance");
6189 RNA_def_struct_sdna(srna, "WeightVGProximityModifierData");
6190 RNA_def_struct_ui_icon(srna, ICON_MOD_VERTEX_WEIGHT);
6191
6193
6194 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
6195 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
6196 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
6198 prop, nullptr, nullptr, "rna_WeightVGProximityModifier_defgrp_name_set");
6199 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6200
6201 prop = RNA_def_property(srna, "proximity_mode", PROP_ENUM, PROP_NONE);
6202 RNA_def_property_enum_items(prop, weightvg_proximity_modes_items);
6204 RNA_def_property_ui_text(prop, "Proximity Mode", "Which distances to target object to use");
6205 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6206
6207 prop = RNA_def_property(srna, "proximity_geometry", PROP_ENUM, PROP_NONE);
6208 RNA_def_property_enum_sdna(prop, nullptr, "proximity_flags");
6209 RNA_def_property_enum_items(prop, proximity_geometry_items);
6210 RNA_def_property_flag(prop, PROP_ENUM_FLAG); /* important to run before default set */
6213 "Proximity Geometry",
6214 "Use the shortest computed distance to target object's geometry "
6215 "as weight");
6216 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6217
6218 prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
6219 RNA_def_property_pointer_sdna(prop, nullptr, "proximity_ob_target");
6220 RNA_def_property_ui_text(prop, "Target Object", "Object to calculate vertices distances from");
6222 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
6223
6224 prop = RNA_def_property(srna, "min_dist", PROP_FLOAT, PROP_DISTANCE);
6225 RNA_def_property_range(prop, 0.0, FLT_MAX);
6226 RNA_def_property_ui_range(prop, 0.0, 1000.0, 10, -1);
6227 RNA_def_property_ui_text(prop, "Lowest", "Distance mapping to weight 0.0");
6228 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6229
6230 prop = RNA_def_property(srna, "max_dist", PROP_FLOAT, PROP_DISTANCE);
6231 RNA_def_property_range(prop, 0.0, FLT_MAX);
6232 RNA_def_property_ui_range(prop, 0.0, 1000.0, 10, -1);
6233 RNA_def_property_ui_text(prop, "Highest", "Distance mapping to weight 1.0");
6234 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6235
6236 prop = RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);
6237 RNA_def_property_enum_items(prop, weightvg_proximity_falloff_type_items);
6238 RNA_def_property_ui_text(prop, "Falloff Type", "How weights are mapped to their new values");
6240 BLT_I18NCONTEXT_ID_CURVE_LEGACY); /* Abusing id_curve :/ */
6241 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6242
6243 prop = RNA_def_property(srna, "invert_falloff", PROP_BOOLEAN, PROP_NONE);
6245 prop, nullptr, "proximity_flags", MOD_WVG_PROXIMITY_INVERT_FALLOFF);
6246 RNA_def_property_ui_text(prop, "Invert Falloff", "Invert the resulting falloff weight");
6247 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6248
6249 prop = RNA_def_property(srna, "normalize", PROP_BOOLEAN, PROP_NONE);
6251 prop, nullptr, "proximity_flags", MOD_WVG_PROXIMITY_WEIGHTS_NORMALIZE);
6253 prop,
6254 "Normalize Weights",
6255 "Normalize the resulting weights (otherwise they are only clamped within 0.0 to 1.0 range)");
6256 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6257
6258 prop = RNA_def_property(srna, "map_curve", PROP_POINTER, PROP_NONE);
6259 RNA_def_property_pointer_sdna(prop, nullptr, "cmap_curve");
6260 RNA_def_property_ui_text(prop, "Mapping Curve", "Custom mapping curve");
6261 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6262
6264
6265 /* Common masking properties. */
6267 srna,
6268 "proximity_flags",
6270 "rna_WeightVGProximityModifier_mask_defgrp_name_set",
6271 "rna_WeightVGProximityModifier_mask_tex_uvlayer_name_set");
6272}
6273
6275{
6276 static const EnumPropertyItem mode_items[] = {
6277 {MOD_REMESH_CENTROID, "BLOCKS", 0, "Blocks", "Output a blocky surface with no smoothing"},
6279 "SMOOTH",
6280 0,
6281 "Smooth",
6282 "Output a smooth surface with no sharp-features detection"},
6284 "SHARP",
6285 0,
6286 "Sharp",
6287 "Output a surface that reproduces sharp edges and corners from the input mesh"},
6289 "VOXEL",
6290 0,
6291 "Voxel",
6292 "Output a mesh corresponding to the volume of the original mesh"},
6293 {0, nullptr, 0, nullptr, nullptr},
6294 };
6295
6296 StructRNA *srna;
6297 PropertyRNA *prop;
6298
6299 srna = RNA_def_struct(brna, "RemeshModifier", "Modifier");
6301 srna,
6302 "Remesh Modifier",
6303 "Generate a new surface with regular topology that follows the shape of the input mesh");
6304 RNA_def_struct_sdna(srna, "RemeshModifierData");
6305 RNA_def_struct_ui_icon(srna, ICON_MOD_REMESH);
6306
6308
6309 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
6310 RNA_def_property_enum_items(prop, mode_items);
6311 RNA_def_property_ui_text(prop, "Mode", "");
6312 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6313
6314 prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_NONE);
6315 RNA_def_property_ui_range(prop, 0, 0.99, 0.01, 3);
6316 RNA_def_property_range(prop, 0, 0.99);
6318 prop, "Scale", "The ratio of the largest dimension of the model over the size of the grid");
6319 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6320
6321 prop = RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE);
6322 RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
6323 RNA_def_property_range(prop, 0, 1);
6325 prop,
6326 "Threshold",
6327 "If removing disconnected pieces, minimum size of components to preserve as a ratio "
6328 "of the number of polygons in the largest component");
6329 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6330
6331 prop = RNA_def_property(srna, "octree_depth", PROP_INT, PROP_NONE);
6332 RNA_def_property_int_sdna(prop, nullptr, "depth");
6333 RNA_def_property_range(prop, 1, 24);
6334 RNA_def_property_ui_range(prop, 1, 12, 1, 3);
6336 prop, "Octree Depth", "Resolution of the octree; higher values give finer details");
6337 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6338
6339 prop = RNA_def_property(srna, "sharpness", PROP_FLOAT, PROP_NONE);
6340 RNA_def_property_float_sdna(prop, nullptr, "hermite_num");
6341 RNA_def_property_ui_range(prop, 0, 2, 0.1, 3);
6343 prop,
6344 "Sharpness",
6345 "Tolerance for outliers; lower values filter noise while higher values will reproduce "
6346 "edges closer to the input");
6347 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6348
6349 prop = RNA_def_property(srna, "voxel_size", PROP_FLOAT, PROP_DISTANCE);
6350 RNA_def_property_float_sdna(prop, nullptr, "voxel_size");
6351 RNA_def_property_range(prop, 0.0001f, FLT_MAX);
6352 RNA_def_property_ui_range(prop, 0.0001, 2, 0.1, 3);
6355 "Voxel Size",
6356 "Size of the voxel in object space used for volume evaluation. Lower "
6357 "values preserve finer details.");
6358 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6359
6360 prop = RNA_def_property(srna, "adaptivity", PROP_FLOAT, PROP_DISTANCE);
6361 RNA_def_property_float_sdna(prop, nullptr, "adaptivity");
6362 RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
6364 prop,
6365 "Adaptivity",
6366 "Reduces the final face count by simplifying geometry where detail is not needed, "
6367 "generating triangles. A value greater than 0 disables Fix Poles.");
6368 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6369
6370 prop = RNA_def_property(srna, "use_remove_disconnected", PROP_BOOLEAN, PROP_NONE);
6372 RNA_def_property_ui_text(prop, "Remove Disconnected", "");
6373 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6374
6375 prop = RNA_def_property(srna, "use_smooth_shade", PROP_BOOLEAN, PROP_NONE);
6378 prop, "Smooth Shading", "Output faces with smooth shading rather than flat shaded");
6379 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6380
6382}
6383
6385{
6386 StructRNA *srna;
6387 PropertyRNA *prop;
6388
6389 static const EnumPropertyItem geometry_items[] = {
6391 "GENERATE",
6392 0,
6393 "Generate",
6394 "Generate ocean surface geometry at the specified resolution"},
6396 "DISPLACE",
6397 0,
6398 "Displace",
6399 "Displace existing geometry according to simulation"},
6400# if 0
6402 "SIM_ONLY",
6403 0,
6404 "Sim Only",
6405 "Leaves geometry unchanged, but still runs simulation (to be used from texture)"},
6406# endif
6407 {0, nullptr, 0, nullptr, nullptr},
6408 };
6409
6410 static const EnumPropertyItem spectrum_items[] = {
6412 "PHILLIPS",
6413 0,
6414 "Turbulent Ocean",
6415 "Use for turbulent seas with foam"},
6417 "PIERSON_MOSKOWITZ",
6418 0,
6419 "Established Ocean",
6420 "Use for a large area, established ocean (Pierson-Moskowitz method)"},
6422 "JONSWAP",
6423 0,
6424 "Established Ocean (Sharp Peaks)",
6425 "Use for established oceans ('JONSWAP', Pierson-Moskowitz method) with peak sharpening"},
6427 "TEXEL_MARSEN_ARSLOE",
6428 0,
6429 "Shallow Water",
6430 "Use for shallow water ('JONSWAP', 'TMA' - Texel-Marsen-Arsloe method)"},
6431 {0, nullptr, 0, nullptr, nullptr},
6432 };
6433
6434 srna = RNA_def_struct(brna, "OceanModifier", "Modifier");
6435 RNA_def_struct_ui_text(srna, "Ocean Modifier", "Simulate an ocean surface");
6436 RNA_def_struct_sdna(srna, "OceanModifierData");
6437 RNA_def_struct_ui_icon(srna, ICON_MOD_OCEAN);
6438
6440
6441 prop = RNA_def_property(srna, "geometry_mode", PROP_ENUM, PROP_NONE);
6442 RNA_def_property_enum_sdna(prop, nullptr, "geometry_mode");
6443 RNA_def_property_enum_items(prop, geometry_items);
6444 RNA_def_property_ui_text(prop, "Geometry", "Method of modifying geometry");
6445 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6446
6447 prop = RNA_def_property(srna, "size", PROP_FLOAT, PROP_UNSIGNED);
6448 RNA_def_property_float_sdna(prop, nullptr, "size");
6450 prop, "Size", "Surface scale factor (does not affect the height of the waves)");
6452 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6453
6454 prop = RNA_def_property(srna, "repeat_x", PROP_INT, PROP_UNSIGNED);
6455 RNA_def_property_int_sdna(prop, nullptr, "repeat_x");
6457 RNA_def_property_range(prop, 1, 1024);
6458 RNA_def_property_ui_range(prop, 1, 100, 1, -1);
6459 RNA_def_property_ui_text(prop, "Repeat X", "Repetitions of the generated surface in X");
6460 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6461
6462 prop = RNA_def_property(srna, "repeat_y", PROP_INT, PROP_UNSIGNED);
6463 RNA_def_property_int_sdna(prop, nullptr, "repeat_y");
6465 RNA_def_property_range(prop, 1, 1024);
6466 RNA_def_property_ui_range(prop, 1, 100, 1, -1);
6467 RNA_def_property_ui_text(prop, "Repeat Y", "Repetitions of the generated surface in Y");
6468 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6469
6470 prop = RNA_def_property(srna, "use_normals", PROP_BOOLEAN, PROP_NONE);
6474 prop,
6475 "Generate Normals",
6476 "Output normals for bump mapping - disabling can speed up performance if it's not needed");
6477 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6478
6479 prop = RNA_def_property(srna, "use_foam", PROP_BOOLEAN, PROP_NONE);
6482 RNA_def_property_ui_text(prop, "Generate Foam", "Generate foam mask as a vertex color channel");
6483 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6484
6485 prop = RNA_def_property(srna, "use_spray", PROP_BOOLEAN, PROP_NONE);
6489 prop, "Generate Spray Map", "Generate map of spray direction as a vertex color channel");
6490 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6491
6492 prop = RNA_def_property(srna, "invert_spray", PROP_BOOLEAN, PROP_NONE);
6495 RNA_def_property_ui_text(prop, "Invert Spray", "Invert the spray direction map");
6496 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6497
6498 prop = RNA_def_property(srna, "spray_layer_name", PROP_STRING, PROP_NONE);
6499 RNA_def_property_string_sdna(prop, nullptr, "spraylayername");
6502 prop, "Spray Map", "Name of the vertex color layer used for the spray direction map");
6503 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6504
6505 prop = RNA_def_property(srna, "resolution", PROP_INT, PROP_UNSIGNED);
6506 RNA_def_property_int_sdna(prop, nullptr, "resolution");
6508 RNA_def_property_range(prop, 1, 1024);
6509 RNA_def_property_ui_range(prop, 1, 32, 1, -1);
6511 prop, "Render Resolution", "Resolution of the generated surface for rendering and baking");
6512 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6513
6514 prop = RNA_def_property(srna, "viewport_resolution", PROP_INT, PROP_UNSIGNED);
6515 RNA_def_property_int_sdna(prop, nullptr, "viewport_resolution");
6517 RNA_def_property_range(prop, 1, 1024);
6518 RNA_def_property_ui_range(prop, 1, 32, 1, -1);
6520 prop, "Viewport Resolution", "Viewport resolution of the generated surface");
6521 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6522
6523 prop = RNA_def_property(srna, "spatial_size", PROP_INT, PROP_NONE);
6524 RNA_def_property_int_sdna(prop, nullptr, "spatial_size");
6525 RNA_def_property_ui_range(prop, 1, 512, 2, -1);
6528 prop,
6529 "Spatial Size",
6530 "Size of the simulation domain (in meters), and of the generated geometry (in BU)");
6531 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6532
6533 prop = RNA_def_property(srna, "wind_velocity", PROP_FLOAT, PROP_VELOCITY);
6534 RNA_def_property_float_sdna(prop, nullptr, "wind_velocity");
6536 RNA_def_property_ui_text(prop, "Wind Velocity", "Wind speed");
6537 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6538
6539 prop = RNA_def_property(srna, "damping", PROP_FLOAT, PROP_FACTOR);
6540 RNA_def_property_float_sdna(prop, nullptr, "damp");
6543 prop, "Damping", "Damp reflected waves going in opposite direction to the wind");
6544 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6545
6546 prop = RNA_def_property(srna, "wave_scale_min", PROP_FLOAT, PROP_DISTANCE);
6547 RNA_def_property_float_sdna(prop, nullptr, "smallest_wave");
6549 RNA_def_property_range(prop, 0.0, FLT_MAX);
6550 RNA_def_property_ui_text(prop, "Smallest Wave", "Shortest allowed wavelength");
6551 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6552
6553 prop = RNA_def_property(srna, "wave_alignment", PROP_FLOAT, PROP_UNSIGNED);
6554 RNA_def_property_float_sdna(prop, nullptr, "wave_alignment");
6556 RNA_def_property_range(prop, 0.0, 1.0);
6557 RNA_def_property_ui_text(prop, "Wave Alignment", "How much the waves are aligned to each other");
6558 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6559
6560 prop = RNA_def_property(srna, "wave_direction", PROP_FLOAT, PROP_ANGLE);
6561 RNA_def_property_float_sdna(prop, nullptr, "wave_direction");
6564 prop, "Wave Direction", "Main direction of the waves when they are (partially) aligned");
6565 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6566
6567 prop = RNA_def_property(srna, "wave_scale", PROP_FLOAT, PROP_UNSIGNED);
6568 RNA_def_property_float_sdna(prop, nullptr, "wave_scale");
6569 RNA_def_property_ui_text(prop, "Wave Scale", "Scale of the displacement effect");
6570 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6571
6572 prop = RNA_def_property(srna, "depth", PROP_FLOAT, PROP_DISTANCE);
6573 RNA_def_property_float_sdna(prop, nullptr, "depth");
6575 RNA_def_property_ui_text(prop, "Depth", "Depth of the solid ground below the water surface");
6576 RNA_def_property_ui_range(prop, 0, 250, 1, -1);
6577 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6578
6579 prop = RNA_def_property(srna, "foam_coverage", PROP_FLOAT, PROP_NONE);
6580 RNA_def_property_float_sdna(prop, nullptr, "foam_coverage");
6581 RNA_def_property_ui_text(prop, "Foam Coverage", "Amount of generated foam");
6582 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6583
6584 prop = RNA_def_property(srna, "bake_foam_fade", PROP_FLOAT, PROP_UNSIGNED);
6585 RNA_def_property_float_sdna(prop, nullptr, "foam_fade");
6588 prop, "Foam Fade", "How much foam accumulates over time (baked ocean only)");
6589 RNA_def_property_ui_range(prop, 0.0, 10.0, 1, -1);
6590 RNA_def_property_update(prop, 0, nullptr);
6591
6592 prop = RNA_def_property(srna, "foam_layer_name", PROP_STRING, PROP_NONE);
6593 RNA_def_property_string_sdna(prop, nullptr, "foamlayername");
6595 prop, "Foam Layer Name", "Name of the vertex color layer used for foam");
6596 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6597
6598 prop = RNA_def_property(srna, "choppiness", PROP_FLOAT, PROP_UNSIGNED);
6599 RNA_def_property_float_sdna(prop, nullptr, "chop_amount");
6601 prop,
6602 "Choppiness",
6603 "Choppiness of the wave's crest (adds some horizontal component to the displacement)");
6604 RNA_def_property_ui_range(prop, 0.0, 4.0, 3, -1);
6605 RNA_def_property_float_funcs(prop, nullptr, "rna_OceanModifier_ocean_chop_set", nullptr);
6606 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6607
6608 prop = RNA_def_property(srna, "time", PROP_FLOAT, PROP_UNSIGNED);
6609 RNA_def_property_float_sdna(prop, nullptr, "time");
6610 RNA_def_property_ui_text(prop, "Time", "Current time of the simulation");
6612 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6613
6614 prop = RNA_def_property(srna, "spectrum", PROP_ENUM, PROP_NONE);
6615 RNA_def_property_enum_sdna(prop, nullptr, "spectrum");
6617 RNA_def_property_enum_items(prop, spectrum_items);
6618 RNA_def_property_ui_text(prop, "Spectrum", "Spectrum to use");
6619 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6620
6621 prop = RNA_def_property(srna, "fetch_jonswap", PROP_FLOAT, PROP_UNSIGNED);
6622 RNA_def_property_float_sdna(prop, nullptr, "fetch_jonswap");
6624 RNA_def_property_range(prop, 0.0, FLT_MAX);
6626 prop,
6627 "Fetch",
6628 "This is the distance from a lee shore, "
6629 "called the fetch, or the distance over which the wind blows with constant velocity. "
6630 "Used by 'JONSWAP' and 'TMA' models.");
6631 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6632
6633 prop = RNA_def_property(srna, "sharpen_peak_jonswap", PROP_FLOAT, PROP_UNSIGNED);
6634 RNA_def_property_float_sdna(prop, nullptr, "sharpen_peak_jonswap");
6636 RNA_def_property_range(prop, 0.0, 1.0);
6637 RNA_def_property_ui_text(prop, "Sharpen peak", "Peak sharpening for 'JONSWAP' and 'TMA' models");
6638 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6639
6640 prop = RNA_def_property(srna, "random_seed", PROP_INT, PROP_UNSIGNED);
6641 RNA_def_property_int_sdna(prop, nullptr, "seed");
6643 RNA_def_property_ui_text(prop, "Random Seed", "Seed of the random generator");
6644 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6645
6646 prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_TIME);
6647 RNA_def_property_int_sdna(prop, nullptr, "bakestart");
6649 RNA_def_property_ui_text(prop, "Bake Start", "Start frame of the ocean baking");
6650 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6651
6652 prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_TIME);
6653 RNA_def_property_int_sdna(prop, nullptr, "bakeend");
6655 RNA_def_property_ui_text(prop, "Bake End", "End frame of the ocean baking");
6656 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6657
6658 prop = RNA_def_property(srna, "is_cached", PROP_BOOLEAN, PROP_NONE);
6659 RNA_def_property_boolean_sdna(prop, nullptr, "cached", 1);
6662 prop, "Ocean is Cached", "Whether the ocean is using cached data or simulating");
6663
6664 prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_DIRPATH);
6665 RNA_def_property_string_sdna(prop, nullptr, "cachepath");
6666 RNA_def_property_ui_text(prop, "Cache Path", "Path to a folder to store external baked images");
6667 // RNA_def_property_update(prop, 0, "rna_Modifier_update");
6668 /* XXX how to update? */
6669
6671}
6672
6674{
6675 StructRNA *srna;
6676 PropertyRNA *prop;
6677
6678 srna = RNA_def_struct(brna, "SkinModifier", "Modifier");
6679 RNA_def_struct_ui_text(srna, "Skin Modifier", "Generate Skin");
6680 RNA_def_struct_sdna(srna, "SkinModifierData");
6681 RNA_def_struct_ui_icon(srna, ICON_MOD_SKIN);
6682
6684
6685 prop = RNA_def_property(srna, "branch_smoothing", PROP_FLOAT, PROP_FACTOR);
6686 RNA_def_property_ui_text(prop, "Branch Smoothing", "Smooth complex geometry around branches");
6687 RNA_def_property_ui_range(prop, 0, 1, 1, -1);
6688 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6689
6690 prop = RNA_def_property(srna, "use_smooth_shade", PROP_BOOLEAN, PROP_NONE);
6693 prop, "Smooth Shading", "Output faces with smooth shading rather than flat shaded");
6694 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6695
6696 prop = RNA_def_property(srna, "use_x_symmetry", PROP_BOOLEAN, PROP_NONE);
6697 RNA_def_property_boolean_sdna(prop, nullptr, "symmetry_axes", MOD_SKIN_SYMM_X);
6698 RNA_def_property_ui_text(prop, "X", "Avoid making unsymmetrical quads across the X axis");
6699 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6700
6701 prop = RNA_def_property(srna, "use_y_symmetry", PROP_BOOLEAN, PROP_NONE);
6702 RNA_def_property_boolean_sdna(prop, nullptr, "symmetry_axes", MOD_SKIN_SYMM_Y);
6703 RNA_def_property_ui_text(prop, "Y", "Avoid making unsymmetrical quads across the Y axis");
6704 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6705
6706 prop = RNA_def_property(srna, "use_z_symmetry", PROP_BOOLEAN, PROP_NONE);
6707 RNA_def_property_boolean_sdna(prop, nullptr, "symmetry_axes", MOD_SKIN_SYMM_Z);
6708 RNA_def_property_ui_text(prop, "Z", "Avoid making unsymmetrical quads across the Z axis");
6709 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6710
6712}
6713
6715{
6716 StructRNA *srna;
6717 PropertyRNA *prop;
6718
6719 srna = RNA_def_struct(brna, "TriangulateModifier", "Modifier");
6720 RNA_def_struct_ui_text(srna, "Triangulate Modifier", "Triangulate Mesh");
6721 RNA_def_struct_sdna(srna, "TriangulateModifierData");
6722 RNA_def_struct_ui_icon(srna, ICON_MOD_TRIANGULATE);
6723
6725
6726 prop = RNA_def_property(srna, "quad_method", PROP_ENUM, PROP_NONE);
6727 RNA_def_property_enum_sdna(prop, nullptr, "quad_method");
6729 RNA_def_property_ui_text(prop, "Quad Method", "Method for splitting the quads into triangles");
6730 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6731
6732 prop = RNA_def_property(srna, "ngon_method", PROP_ENUM, PROP_NONE);
6733 RNA_def_property_enum_sdna(prop, nullptr, "ngon_method");
6735 RNA_def_property_ui_text(prop, "N-gon Method", "Method for splitting the n-gons into triangles");
6736 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6737
6738 prop = RNA_def_property(srna, "min_vertices", PROP_INT, PROP_UNSIGNED);
6739 RNA_def_property_int_sdna(prop, nullptr, "min_vertices");
6740 RNA_def_property_range(prop, 4, INT_MAX);
6742 prop,
6743 "Minimum Vertices",
6744 "Triangulate only polygons with vertex count greater than or equal to this number");
6745 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6746
6747 prop = RNA_def_property(srna, "keep_custom_normals", PROP_BOOLEAN, PROP_NONE);
6750 prop,
6751 "Keep Normals",
6752 "Try to preserve custom normals.\n"
6753 "Warning: Depending on chosen triangulation method, "
6754 "shading may not be fully preserved, \"Fixed\" method usually gives the best result here");
6755 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6756
6758}
6759
6761{
6762 static const EnumPropertyItem prop_format_type_items[] = {
6763 {MOD_MESHCACHE_TYPE_MDD, "MDD", 0, "MDD", ""},
6764 {MOD_MESHCACHE_TYPE_PC2, "PC2", 0, "PC2", ""},
6765 {0, nullptr, 0, nullptr, nullptr},
6766 };
6767
6768 static const EnumPropertyItem prop_deform_mode_items[] = {
6770 "OVERWRITE",
6771 0,
6772 "Overwrite",
6773 "Replace vertex coordinates with cached values"},
6775 "INTEGRATE",
6776 0,
6777 "Integrate",
6778 "Integrate deformation from this modifier's input with the mesh-cache coordinates "
6779 "(useful for shape keys)"},
6780 {0, nullptr, 0, nullptr, nullptr},
6781 };
6782
6783 static const EnumPropertyItem prop_interpolation_type_items[] = {
6784 {MOD_MESHCACHE_INTERP_NONE, "NONE", 0, "None", ""},
6785 {MOD_MESHCACHE_INTERP_LINEAR, "LINEAR", 0, "Linear", ""},
6786 /* for cardinal we'd need to read 4x cache's */
6787 // {MOD_MESHCACHE_INTERP_CARDINAL, "CARDINAL", 0, "Cardinal", ""},
6788 {0, nullptr, 0, nullptr, nullptr},
6789 };
6790
6791 static const EnumPropertyItem prop_time_type_items[] = {
6792 /* use 'eval_frame' */
6794 "FRAME",
6795 0,
6796 "Frame",
6797 "Control playback using a frame-number "
6798 "(ignoring time FPS and start frame from the file)"},
6799 /* use 'eval_time' */
6800 {MOD_MESHCACHE_TIME_SECONDS, "TIME", 0, "Time", "Control playback using time in seconds"},
6801 /* use 'eval_factor' */
6803 "FACTOR",
6804 0,
6805 "Factor",
6806 "Control playback using a value between 0 and 1"},
6807 {0, nullptr, 0, nullptr, nullptr},
6808 };
6809
6810 static const EnumPropertyItem prop_time_play_items[] = {
6811 {MOD_MESHCACHE_PLAY_CFEA, "SCENE", 0, "Scene", "Use the time from the scene"},
6812 {MOD_MESHCACHE_PLAY_EVAL, "CUSTOM", 0, "Custom", "Use the modifier's own time evaluation"},
6813 {0, nullptr, 0, nullptr, nullptr},
6814 };
6815
6816 StructRNA *srna;
6817 PropertyRNA *prop;
6818
6819 srna = RNA_def_struct(brna, "MeshCacheModifier", "Modifier");
6820 RNA_def_struct_ui_text(srna, "Cache Modifier", "Cache Mesh");
6821 RNA_def_struct_sdna(srna, "MeshCacheModifierData");
6822 RNA_def_struct_ui_icon(srna, ICON_MOD_MESHDEFORM); /* XXX, needs own icon */
6823
6825
6826 prop = RNA_def_property(srna, "cache_format", PROP_ENUM, PROP_NONE);
6827 RNA_def_property_enum_sdna(prop, nullptr, "type");
6828 RNA_def_property_enum_items(prop, prop_format_type_items);
6829 RNA_def_property_ui_text(prop, "Format", "");
6830 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6831
6832 prop = RNA_def_property(srna, "interpolation", PROP_ENUM, PROP_NONE);
6833 RNA_def_property_enum_sdna(prop, nullptr, "interp");
6834 RNA_def_property_enum_items(prop, prop_interpolation_type_items);
6835 RNA_def_property_ui_text(prop, "Interpolation", "");
6836 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6837
6838 prop = RNA_def_property(srna, "time_mode", PROP_ENUM, PROP_NONE);
6839 RNA_def_property_enum_sdna(prop, nullptr, "time_mode");
6840 RNA_def_property_enum_items(prop, prop_time_type_items);
6841 RNA_def_property_ui_text(prop, "Time Mode", "Method to control playback time");
6842 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6843
6844 prop = RNA_def_property(srna, "play_mode", PROP_ENUM, PROP_NONE);
6845 RNA_def_property_enum_sdna(prop, nullptr, "play_mode");
6846 RNA_def_property_enum_items(prop, prop_time_play_items);
6847 RNA_def_property_ui_text(prop, "Play Mode", "");
6848 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6849
6850 prop = RNA_def_property(srna, "deform_mode", PROP_ENUM, PROP_NONE);
6851 RNA_def_property_enum_sdna(prop, nullptr, "deform_mode");
6852 RNA_def_property_enum_items(prop, prop_deform_mode_items);
6853 RNA_def_property_ui_text(prop, "Deform Mode", "");
6854 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6855
6856 prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH);
6857 RNA_def_property_ui_text(prop, "File Path", "Path to external displacements file");
6858 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6859
6860 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
6861 RNA_def_property_float_sdna(prop, nullptr, "factor");
6862 RNA_def_property_range(prop, 0.0f, 1.0f);
6863 RNA_def_property_ui_text(prop, "Influence", "Influence of the deformation");
6864 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6865
6866 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
6867 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
6869 prop,
6870 "Vertex Group",
6871 "Name of the Vertex Group which determines the influence of the modifier per point");
6872 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_MeshCacheModifier_defgrp_name_set");
6873 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6874
6875 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
6877 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
6878 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6879
6880 /* -------------------------------------------------------------------- */
6881 /* Axis Conversion */
6882 prop = RNA_def_property(srna, "forward_axis", PROP_ENUM, PROP_NONE);
6883 RNA_def_property_enum_sdna(prop, nullptr, "forward_axis");
6885 RNA_def_property_ui_text(prop, "Forward", "");
6886 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6887
6888 prop = RNA_def_property(srna, "up_axis", PROP_ENUM, PROP_NONE);
6889 RNA_def_property_enum_sdna(prop, nullptr, "up_axis");
6891 RNA_def_property_ui_text(prop, "Up", "");
6892 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6893
6894 prop = RNA_def_property(srna, "flip_axis", PROP_ENUM, PROP_NONE);
6895 RNA_def_property_enum_sdna(prop, nullptr, "flip_axis");
6898 RNA_def_property_ui_text(prop, "Flip Axis", "");
6899 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6900
6901 /* -------------------------------------------------------------------- */
6902 /* For Scene time */
6903 prop = RNA_def_property(srna, "frame_start", PROP_FLOAT, PROP_TIME);
6904 RNA_def_property_float_sdna(prop, nullptr, "frame_start");
6906 RNA_def_property_ui_text(prop, "Frame Start", "Add this to the start frame");
6907 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6908
6909 prop = RNA_def_property(srna, "frame_scale", PROP_FLOAT, PROP_NONE);
6910 RNA_def_property_float_sdna(prop, nullptr, "frame_scale");
6911 RNA_def_property_range(prop, 0.0f, 100.0f);
6912 RNA_def_property_ui_text(prop, "Frame Scale", "Evaluation time in seconds");
6913 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6914
6915 /* -------------------------------------------------------------------- */
6916 /* eval values depend on 'time_mode' */
6917 prop = RNA_def_property(srna, "eval_frame", PROP_FLOAT, PROP_NONE);
6918 RNA_def_property_float_sdna(prop, nullptr, "eval_frame");
6920 RNA_def_property_ui_text(prop, "Evaluation Frame", "The frame to evaluate (starting at 0)");
6921 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6922
6923 prop = RNA_def_property(srna, "eval_time", PROP_FLOAT, PROP_NONE);
6924 RNA_def_property_float_sdna(prop, nullptr, "eval_time");
6925 RNA_def_property_range(prop, 0.0f, FLT_MAX);
6926 RNA_def_property_ui_text(prop, "Evaluation Time", "Evaluation time in seconds");
6927 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6928
6929 prop = RNA_def_property(srna, "eval_factor", PROP_FLOAT, PROP_FACTOR);
6930 RNA_def_property_float_sdna(prop, nullptr, "eval_factor");
6931 RNA_def_property_range(prop, 0.0f, 1.0f);
6932 RNA_def_property_ui_text(prop, "Evaluation Factor", "Evaluation time in seconds");
6933 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6934
6936}
6937
6939{
6940 StructRNA *srna;
6941 PropertyRNA *prop;
6942
6943 srna = RNA_def_struct(brna, "MeshSequenceCacheModifier", "Modifier");
6944 RNA_def_struct_ui_text(srna, "Cache Modifier", "Cache Mesh");
6945 RNA_def_struct_sdna(srna, "MeshSeqCacheModifierData");
6946 RNA_def_struct_ui_icon(srna, ICON_MOD_MESHDEFORM); /* XXX, needs own icon */
6947
6949
6950 prop = RNA_def_property(srna, "cache_file", PROP_POINTER, PROP_NONE);
6951 RNA_def_property_pointer_sdna(prop, nullptr, "cache_file");
6952 RNA_def_property_struct_type(prop, "CacheFile");
6953 RNA_def_property_ui_text(prop, "Cache File", "");
6955 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
6956
6957 prop = RNA_def_property(srna, "object_path", PROP_STRING, PROP_NONE);
6959 prop,
6960 "Object Path",
6961 "Path to the object in the Alembic archive used to lookup geometric data");
6962 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6963
6964 static const EnumPropertyItem read_flag_items[] = {
6965 {MOD_MESHSEQ_READ_VERT, "VERT", 0, "Vertex", ""},
6966 {MOD_MESHSEQ_READ_POLY, "POLY", 0, "Faces", ""},
6967 {MOD_MESHSEQ_READ_UV, "UV", 0, "UV", ""},
6968 {MOD_MESHSEQ_READ_COLOR, "COLOR", 0, "Color", ""},
6969 {0, nullptr, 0, nullptr, nullptr},
6970 };
6971
6972 prop = RNA_def_property(srna, "read_data", PROP_ENUM, PROP_NONE);
6974 RNA_def_property_enum_sdna(prop, nullptr, "read_flag");
6975 RNA_def_property_enum_items(prop, read_flag_items);
6976 RNA_def_property_ui_text(prop, "Read Data", "Data to read from the cache");
6977 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6978
6979 prop = RNA_def_property(srna, "use_vertex_interpolation", PROP_BOOLEAN, PROP_NONE);
6982 prop, "Vertex Interpolation", "Allow interpolation of vertex positions");
6983 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6984
6985 prop = RNA_def_property(srna, "velocity_scale", PROP_FLOAT, PROP_NONE);
6986 RNA_def_property_float_sdna(prop, nullptr, "velocity_scale");
6987 RNA_def_property_range(prop, 0.0f, FLT_MAX);
6989 prop,
6990 "Velocity Scale",
6991 "Multiplier used to control the magnitude of the velocity vectors for time effects");
6992 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6993
6995}
6996
6998{
6999 StructRNA *srna;
7000 PropertyRNA *prop;
7001
7002 srna = RNA_def_struct(brna, "LaplacianDeformModifier", "Modifier");
7003 RNA_def_struct_ui_text(srna, "Laplacian Deform Modifier", "Mesh deform modifier");
7004 RNA_def_struct_sdna(srna, "LaplacianDeformModifierData");
7005 RNA_def_struct_ui_icon(srna, ICON_MOD_MESHDEFORM);
7006
7008
7009 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
7010 RNA_def_property_string_sdna(prop, nullptr, "anchor_grp_name");
7012 prop, "Anchor Weights", "Name of Vertex Group which determines Anchors");
7014 prop, nullptr, nullptr, "rna_LaplacianDeformModifier_anchor_grp_name_set");
7015
7016 prop = RNA_def_property(srna, "iterations", PROP_INT, PROP_NONE);
7017 RNA_def_property_int_sdna(prop, nullptr, "repeat");
7018 RNA_def_property_ui_range(prop, 1, 50, 1, -1);
7019 RNA_def_property_ui_text(prop, "Repeat", "");
7020 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7021
7022 prop = RNA_def_property(srna, "is_bind", PROP_BOOLEAN, PROP_NONE);
7023 RNA_def_property_boolean_funcs(prop, "rna_LaplacianDeformModifier_is_bind_get", nullptr);
7024 RNA_def_property_ui_text(prop, "Bound", "Whether geometry has been bound to anchors");
7026
7027 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
7029 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
7030 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7031
7033
7034 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7035}
7036
7038{
7039 StructRNA *srna;
7040 PropertyRNA *prop;
7041
7042 static const EnumPropertyItem mode_items[] = {
7043 {MOD_WELD_MODE_ALL, "ALL", 0, "All", "Full merge by distance"},
7044 {MOD_WELD_MODE_CONNECTED, "CONNECTED", 0, "Connected", "Only merge along the edges"},
7045 {0, nullptr, 0, nullptr, nullptr},
7046 };
7047
7048 srna = RNA_def_struct(brna, "WeldModifier", "Modifier");
7049 RNA_def_struct_ui_text(srna, "Weld Modifier", "Weld modifier");
7050 RNA_def_struct_sdna(srna, "WeldModifierData");
7051 RNA_def_struct_ui_icon(srna, ICON_AUTOMERGE_OFF);
7052
7054
7055 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
7056 RNA_def_property_enum_items(prop, mode_items);
7057 RNA_def_property_ui_text(prop, "Mode", "Mode defines the merge rule");
7058 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7059
7060 prop = RNA_def_property(srna, "merge_threshold", PROP_FLOAT, PROP_DISTANCE);
7061 RNA_def_property_float_sdna(prop, nullptr, "merge_dist");
7063 RNA_def_property_ui_range(prop, 0, 1, 0.001, 6);
7064 RNA_def_property_ui_text(prop, "Merge Distance", "Limit below which to merge vertices");
7065 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7066
7067 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
7068 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
7070 prop, "Vertex Group", "Vertex group name for selecting the affected areas");
7071 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_WeldModifier_defgrp_name_set");
7072 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7073
7074 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
7076 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
7077 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7078
7079 prop = RNA_def_property(srna, "loose_edges", PROP_BOOLEAN, PROP_NONE);
7082 prop, "Only Loose Edges", "Collapse edges without faces, cloth sewing edges");
7083 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7084
7086}
7087
7089{
7090 StructRNA *srna;
7091 PropertyRNA *prop;
7092
7093 srna = RNA_def_struct(brna, "WireframeModifier", "Modifier");
7094 RNA_def_struct_ui_text(srna, "Wireframe Modifier", "Wireframe effect modifier");
7095 RNA_def_struct_sdna(srna, "WireframeModifierData");
7096 RNA_def_struct_ui_icon(srna, ICON_MOD_WIREFRAME);
7097
7099
7100 prop = RNA_def_property(srna, "thickness", PROP_FLOAT, PROP_DISTANCE);
7101 RNA_def_property_float_sdna(prop, nullptr, "offset");
7103 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.01, 4);
7104 RNA_def_property_ui_text(prop, "Thickness", "Thickness factor");
7105 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7106
7107 prop = RNA_def_property(srna, "thickness_vertex_group", PROP_FLOAT, PROP_FACTOR);
7108 RNA_def_property_float_sdna(prop, nullptr, "offset_fac_vg");
7109 RNA_def_property_range(prop, 0.0, 1.0);
7110 RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
7112 prop, "Vertex Group Factor", "Thickness factor to use for zero vertex group influence");
7113 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7114
7115 prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_FACTOR);
7116 RNA_def_property_float_sdna(prop, nullptr, "offset_fac");
7118 RNA_def_property_ui_range(prop, -1, 1, 0.1, 4);
7119 RNA_def_property_ui_text(prop, "Offset", "Offset the thickness from the center");
7120 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7121
7122 prop = RNA_def_property(srna, "use_replace", PROP_BOOLEAN, PROP_NONE);
7124 RNA_def_property_ui_text(prop, "Replace", "Remove original geometry");
7125 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7126
7127 prop = RNA_def_property(srna, "use_boundary", PROP_BOOLEAN, PROP_NONE);
7129 RNA_def_property_ui_text(prop, "Boundary", "Support face boundaries");
7130 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7131
7132 prop = RNA_def_property(srna, "use_even_offset", PROP_BOOLEAN, PROP_NONE);
7134 RNA_def_property_ui_text(prop, "Offset Even", "Scale the offset to give more even thickness");
7135 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7136
7137 prop = RNA_def_property(srna, "use_relative_offset", PROP_BOOLEAN, PROP_NONE);
7139 RNA_def_property_ui_text(prop, "Offset Relative", "Scale the offset by surrounding geometry");
7140 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7141
7142 prop = RNA_def_property(srna, "use_crease", PROP_BOOLEAN, PROP_NONE);
7145 prop, "Offset Relative", "Crease hub edges for improved subdivision surface");
7146 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7147
7148 prop = RNA_def_property(srna, "crease_weight", PROP_FLOAT, PROP_NONE);
7149 RNA_def_property_float_sdna(prop, nullptr, "crease_weight");
7151 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 1);
7152 RNA_def_property_ui_text(prop, "Weight", "Crease weight (if active)");
7153 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7154
7155 prop = RNA_def_property(srna, "material_offset", PROP_INT, PROP_NONE);
7156 RNA_def_property_int_sdna(prop, nullptr, "mat_ofs");
7157 RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
7158 RNA_def_property_ui_text(prop, "Material Offset", "Offset material index of generated faces");
7159 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7160
7161 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
7162 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
7164 prop, "Vertex Group", "Vertex group name for selecting the affected areas");
7165 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_WireframeModifier_defgrp_name_set");
7166 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7167
7168 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
7170 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
7171 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7172
7174}
7175
7177{
7178 StructRNA *srna;
7179 PropertyRNA *prop;
7180
7181 static const EnumPropertyItem DT_layer_vert_items[] = {
7183 "VGROUP_WEIGHTS",
7184 0,
7185 "Vertex Groups",
7186 "Transfer active or all vertex groups"},
7187# if 0 /* TODO */
7188 {DT_TYPE_SHAPEKEY, "SHAPEKEYS", 0, "Shapekey(s)", "Transfer active or all shape keys"},
7189# endif
7190 /* XXX When SkinModifier is enabled,
7191 * it seems to erase its own CD_MVERT_SKIN layer from final DM :( */
7192# if 0
7193 {DT_TYPE_SKIN, "SKIN", 0, "Skin Weight", "Transfer skin weights"},
7194# endif
7195 {DT_TYPE_BWEIGHT_VERT, "BEVEL_WEIGHT_VERT", 0, "Bevel Weight", "Transfer bevel weights"},
7197 "COLOR_VERTEX",
7198 0,
7199 "Colors",
7200 "Transfer color attributes"},
7201 {0, nullptr, 0, nullptr, nullptr},
7202 };
7203
7204 static const EnumPropertyItem DT_layer_edge_items[] = {
7205 {DT_TYPE_SHARP_EDGE, "SHARP_EDGE", 0, "Sharp", "Transfer sharp mark"},
7206 {DT_TYPE_SEAM, "SEAM", 0, "UV Seam", "Transfer UV seam mark"},
7207 {DT_TYPE_CREASE, "CREASE", 0, "Crease", "Transfer subdivision crease values"},
7208 {DT_TYPE_BWEIGHT_EDGE, "BEVEL_WEIGHT_EDGE", 0, "Bevel Weight", "Transfer bevel weights"},
7209 {DT_TYPE_FREESTYLE_EDGE, "FREESTYLE_EDGE", 0, "Freestyle", "Transfer Freestyle edge mark"},
7210 {0, nullptr, 0, nullptr, nullptr},
7211 };
7212
7213 static const EnumPropertyItem DT_layer_loop_items[] = {
7214 {DT_TYPE_LNOR, "CUSTOM_NORMAL", 0, "Custom Normals", "Transfer custom normals"},
7216 "COLOR_CORNER",
7217 0,
7218 "Colors",
7219 "Transfer color attributes"},
7220 {DT_TYPE_UV, "UV", 0, "UVs", "Transfer UV layers"},
7221 {0, nullptr, 0, nullptr, nullptr},
7222 };
7223
7224 static const EnumPropertyItem DT_layer_poly_items[] = {
7225 {DT_TYPE_SHARP_FACE, "SMOOTH", 0, "Smooth", "Transfer flat/smooth mark"},
7227 "FREESTYLE_FACE",
7228 0,
7229 "Freestyle Mark",
7230 "Transfer Freestyle face mark"},
7231 {0, nullptr, 0, nullptr, nullptr},
7232 };
7233
7234 srna = RNA_def_struct(brna, "DataTransferModifier", "Modifier");
7236 srna, "Data Transfer Modifier", "Modifier transferring some data from a source mesh");
7237 RNA_def_struct_sdna(srna, "DataTransferModifierData");
7238 RNA_def_struct_ui_icon(srna, ICON_MOD_DATA_TRANSFER);
7239
7241
7242 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
7243 RNA_def_property_pointer_sdna(prop, nullptr, "ob_source");
7244 RNA_def_property_ui_text(prop, "Source Object", "Object to transfer data from");
7247 prop, nullptr, "rna_DataTransferModifier_ob_source_set", nullptr, "rna_Mesh_object_poll");
7248 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
7249
7250 prop = RNA_def_boolean(srna,
7251 "use_object_transform",
7252 true,
7253 "Object Transform",
7254 "Evaluate source and destination meshes in global space");
7256 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7257
7258 /* Generic, UI-only data types toggles. */
7259 prop = RNA_def_boolean(
7260 srna, "use_vert_data", false, "Vertex Data", "Enable vertex data transfer");
7262 RNA_def_property_update(prop, 0, "rna_DataTransferModifier_use_data_update");
7263
7264 prop = RNA_def_boolean(srna, "use_edge_data", false, "Edge Data", "Enable edge data transfer");
7266 RNA_def_property_update(prop, 0, "rna_DataTransferModifier_use_data_update");
7267
7268 prop = RNA_def_boolean(
7269 srna, "use_loop_data", false, "Face Corner Data", "Enable face corner data transfer");
7271 RNA_def_property_update(prop, 0, "rna_DataTransferModifier_use_data_update");
7272
7273 prop = RNA_def_boolean(srna, "use_poly_data", false, "Face Data", "Enable face data transfer");
7275 RNA_def_property_update(prop, 0, "rna_DataTransferModifier_use_data_update");
7276
7277 /* Actual data types selection. */
7278 prop = RNA_def_enum(srna,
7279 "data_types_verts",
7280 DT_layer_vert_items,
7281 0,
7282 "Vertex Data Types",
7283 "Which vertex data layers to transfer");
7285 RNA_def_property_enum_sdna(prop, nullptr, "data_types");
7287 prop, nullptr, "rna_DataTransferModifier_verts_data_types_set", nullptr);
7288 RNA_def_property_update(prop, 0, "rna_DataTransferModifier_data_types_update");
7289
7290 prop = RNA_def_enum(srna,
7291 "data_types_edges",
7292 DT_layer_edge_items,
7293 0,
7294 "Edge Data Types",
7295 "Which edge data layers to transfer");
7297 RNA_def_property_enum_sdna(prop, nullptr, "data_types");
7299 prop, nullptr, "rna_DataTransferModifier_edges_data_types_set", nullptr);
7300 RNA_def_property_update(prop, 0, "rna_DataTransferModifier_data_types_update");
7301
7302 prop = RNA_def_enum(srna,
7303 "data_types_loops",
7304 DT_layer_loop_items,
7305 0,
7306 "Face Corner Data Types",
7307 "Which face corner data layers to transfer");
7309 RNA_def_property_enum_sdna(prop, nullptr, "data_types");
7311 prop, nullptr, "rna_DataTransferModifier_loops_data_types_set", nullptr);
7312 RNA_def_property_update(prop, 0, "rna_DataTransferModifier_data_types_update");
7313
7314 prop = RNA_def_enum(srna,
7315 "data_types_polys",
7316 DT_layer_poly_items,
7317 0,
7318 "Poly Data Types",
7319 "Which face data layers to transfer");
7321 RNA_def_property_enum_sdna(prop, nullptr, "data_types");
7323 prop, nullptr, "rna_DataTransferModifier_polys_data_types_set", nullptr);
7324 RNA_def_property_update(prop, 0, "rna_DataTransferModifier_data_types_update");
7325
7326 /* Mapping methods. */
7327 prop = RNA_def_enum(srna,
7328 "vert_mapping",
7331 "Vertex Mapping",
7332 "Method used to map source vertices to destination ones");
7333 RNA_def_property_enum_sdna(prop, nullptr, "vmap_mode");
7334 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7335
7336 prop = RNA_def_enum(srna,
7337 "edge_mapping",
7340 "Edge Mapping",
7341 "Method used to map source edges to destination ones");
7342 RNA_def_property_enum_sdna(prop, nullptr, "emap_mode");
7343 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7344
7345 prop = RNA_def_enum(srna,
7346 "loop_mapping",
7349 "Face Corner Mapping",
7350 "Method used to map source faces' corners to destination ones");
7351 RNA_def_property_enum_sdna(prop, nullptr, "lmap_mode");
7352 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7353
7354 prop = RNA_def_enum(srna,
7355 "poly_mapping",
7358 "Face Mapping",
7359 "Method used to map source faces to destination ones");
7360 RNA_def_property_enum_sdna(prop, nullptr, "pmap_mode");
7361 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7362
7363 /* Mapping options and filtering. */
7364 prop = RNA_def_boolean(
7365 srna,
7366 "use_max_distance",
7367 false,
7368 "Only Neighbor Geometry",
7369 "Source elements must be closer than given distance from destination one");
7371 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7372
7373 prop = RNA_def_float(
7374 srna,
7375 "max_distance",
7376 1.0f,
7377 0.0f,
7378 FLT_MAX,
7379 "Max Distance",
7380 "Maximum allowed distance between source and destination element, for non-topology mappings",
7381 0.0f,
7382 100.0f);
7383 RNA_def_property_float_sdna(prop, nullptr, "map_max_distance");
7385 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7386
7387 prop = RNA_def_float(
7388 srna,
7389 "ray_radius",
7390 0.0f,
7391 0.0f,
7392 FLT_MAX,
7393 "Ray Radius",
7394 "'Width' of rays (especially useful when raycasting against vertices or edges)",
7395 0.0f,
7396 10.0f);
7397 RNA_def_property_float_sdna(prop, nullptr, "map_ray_radius");
7399 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7400
7401 prop = RNA_def_float(
7402 srna,
7403 "islands_precision",
7404 0.0f,
7405 0.0f,
7406 1.0f,
7407 "Islands Precision",
7408 "Factor controlling precision of islands handling "
7409 "(typically, 0.1 should be enough, higher values can make things really slow)",
7410 0.0f,
7411 1.0f);
7413 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7414
7415 /* How to handle multi-layers types of data. */
7416 prop = RNA_def_enum(srna,
7417 "layers_vgroup_select_src",
7420 "Source Layers Selection",
7421 "Which layers to transfer, in case of multi-layers types");
7422 RNA_def_property_enum_sdna(prop, nullptr, "layers_select_src[DT_MULTILAYER_INDEX_MDEFORMVERT]");
7424 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_src_itemf");
7425 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7426
7427# if 0
7428 prop = RNA_def_enum(srna,
7429 "layers_shapekey_select_src",
7432 "Source Layers Selection",
7433 "Which layers to transfer, in case of multi-layers types");
7434 RNA_def_property_enum_sdna(prop, nullptr, "layers_select_src[DT_MULTILAYER_INDEX_SHAPEKEY]");
7436 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_src_itemf");
7437 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7438# endif
7439
7440 prop = RNA_def_enum(srna,
7441 "layers_vcol_vert_select_src",
7444 "Source Layers Selection",
7445 "Which layers to transfer, in case of multi-layers types");
7446 RNA_def_property_enum_sdna(prop, nullptr, "layers_select_src[DT_MULTILAYER_INDEX_VCOL_VERT]");
7448 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_src_itemf");
7449 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7450
7451 prop = RNA_def_enum(srna,
7452 "layers_vcol_loop_select_src",
7455 "Source Layers Selection",
7456 "Which layers to transfer, in case of multi-layers types");
7457 RNA_def_property_enum_sdna(prop, nullptr, "layers_select_src[DT_MULTILAYER_INDEX_VCOL_LOOP]");
7459 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_src_itemf");
7460 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7461
7462 prop = RNA_def_enum(srna,
7463 "layers_uv_select_src",
7466 "Source Layers Selection",
7467 "Which layers to transfer, in case of multi-layers types");
7468 RNA_def_property_enum_sdna(prop, nullptr, "layers_select_src[DT_MULTILAYER_INDEX_UV]");
7470 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_src_itemf");
7471 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7472
7473 prop = RNA_def_enum(srna,
7474 "layers_vgroup_select_dst",
7477 "Destination Layers Matching",
7478 "How to match source and destination layers");
7479 RNA_def_property_enum_sdna(prop, nullptr, "layers_select_dst[DT_MULTILAYER_INDEX_MDEFORMVERT]");
7481 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_dst_itemf");
7482 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7483
7484# if 0
7485 prop = RNA_def_enum(srna,
7486 "layers_shapekey_select_dst",
7489 "Destination Layers Matching",
7490 "How to match source and destination layers");
7491 RNA_def_property_enum_sdna(prop, nullptr, "layers_select_dst[DT_MULTILAYER_INDEX_SHAPEKEY]");
7493 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_dst_itemf");
7494 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7495# endif
7496
7497 prop = RNA_def_enum(srna,
7498 "layers_vcol_vert_select_dst",
7501 "Destination Layers Matching",
7502 "How to match source and destination layers");
7503 RNA_def_property_enum_sdna(prop, nullptr, "layers_select_dst[DT_MULTILAYER_INDEX_VCOL_VERT]");
7505 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_dst_itemf");
7506 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7507
7508 prop = RNA_def_enum(srna,
7509 "layers_vcol_loop_select_dst",
7512 "Destination Layers Matching",
7513 "How to match source and destination layers");
7514 RNA_def_property_enum_sdna(prop, nullptr, "layers_select_dst[DT_MULTILAYER_INDEX_VCOL_LOOP]");
7516 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_dst_itemf");
7517 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7518
7519 prop = RNA_def_enum(srna,
7520 "layers_uv_select_dst",
7523 "Destination Layers Matching",
7524 "How to match source and destination layers");
7525 RNA_def_property_enum_sdna(prop, nullptr, "layers_select_dst[DT_MULTILAYER_INDEX_UV]");
7527 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_dst_itemf");
7528 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7529
7530 /* Mix stuff */
7531 prop = RNA_def_enum(srna,
7532 "mix_mode",
7535 "Mix Mode",
7536 "How to affect destination elements with source values");
7537 RNA_def_property_enum_funcs(prop, nullptr, nullptr, "rna_DataTransferModifier_mix_mode_itemf");
7538 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7539
7540 prop = RNA_def_float_factor(
7541 srna,
7542 "mix_factor",
7543 0.0f,
7544 0.0f,
7545 1.0f,
7546 "Mix Factor",
7547 "Factor to use when applying data to destination (exact behavior depends on mix mode, "
7548 "multiplied with weights from vertex group when defined)",
7549 0.0f,
7550 1.0f);
7551 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7552
7553 prop = RNA_def_string(srna,
7554 "vertex_group",
7555 nullptr,
7557 "Vertex Group",
7558 "Vertex group name for selecting the affected areas");
7559 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
7561 prop, nullptr, nullptr, "rna_DataTransferModifier_defgrp_name_set");
7562 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7563
7564 prop = RNA_def_boolean(
7565 srna, "invert_vertex_group", false, "Invert", "Invert vertex group influence");
7567 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7568
7570}
7571
7573{
7574 StructRNA *srna;
7575 PropertyRNA *prop;
7576
7577 static const EnumPropertyItem prop_mode_items[] = {
7579 "RADIAL",
7580 0,
7581 "Radial",
7582 "From an ellipsoid (shape defined by the boundbox's dimensions, target is optional)"},
7584 "DIRECTIONAL",
7585 0,
7586 "Directional",
7587 "Normals 'track' (point to) the target object"},
7588 {0, nullptr, 0, nullptr, nullptr},
7589 };
7590
7591 static const EnumPropertyItem prop_mix_mode_items[] = {
7592 {MOD_NORMALEDIT_MIX_COPY, "COPY", 0, "Copy", "Copy new normals (overwrite existing)"},
7593 {MOD_NORMALEDIT_MIX_ADD, "ADD", 0, "Add", "Copy sum of new and old normals"},
7594 {MOD_NORMALEDIT_MIX_SUB, "SUB", 0, "Subtract", "Copy new normals minus old normals"},
7596 "MUL",
7597 0,
7598 "Multiply",
7599 "Copy product of old and new normals (not cross product)"},
7600 {0, nullptr, 0, nullptr, nullptr},
7601 };
7602
7603 srna = RNA_def_struct(brna, "NormalEditModifier", "Modifier");
7605 srna, "Normal Edit Modifier", "Modifier affecting/generating custom normals");
7606 RNA_def_struct_sdna(srna, "NormalEditModifierData");
7607 RNA_def_struct_ui_icon(srna, ICON_MOD_NORMALEDIT);
7608
7610
7611 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
7612 RNA_def_property_enum_items(prop, prop_mode_items);
7613 RNA_def_property_ui_text(prop, "Mode", "How to affect (generate) normals");
7614 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7615
7616 prop = RNA_def_float_array(srna,
7617 "offset",
7618 3,
7619 nullptr,
7620 -FLT_MAX,
7621 FLT_MAX,
7622 "Offset",
7623 "Offset from object's center",
7624 -100.0f,
7625 100.0f);
7627 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7628
7629 prop = RNA_def_property(srna, "mix_mode", PROP_ENUM, PROP_NONE);
7630 RNA_def_property_enum_items(prop, prop_mix_mode_items);
7631 RNA_def_property_ui_text(prop, "Mix Mode", "How to mix generated normals with existing ones");
7632 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7633
7634 prop = RNA_def_property(srna, "mix_factor", PROP_FLOAT, PROP_FACTOR);
7635 RNA_def_property_range(prop, 0.0, 1.0);
7637 prop, "Mix Factor", "How much of generated normals to mix with existing ones");
7638 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7639
7640 prop = RNA_def_property(srna, "mix_limit", PROP_FLOAT, PROP_ANGLE);
7641 RNA_def_property_range(prop, 0.0, DEG2RADF(180.0f));
7642 RNA_def_property_ui_text(prop, "Max Angle", "Maximum angle between old and new normals");
7643 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7644
7645 prop = RNA_def_property(srna, "no_polynors_fix", PROP_BOOLEAN, PROP_NONE);
7649 "Lock Polygon Normals",
7650 "Do not flip polygons when their normals are not consistent "
7651 "with their newly computed custom vertex normals");
7652 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7653
7654 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
7655 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
7657 prop, "Vertex Group", "Vertex group name for selecting/weighting the affected areas");
7658 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_NormalEditModifier_defgrp_name_set");
7659 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7660
7661 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
7663 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
7664 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7665
7666 prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
7667 RNA_def_property_ui_text(prop, "Target", "Target object used to affect normals");
7669 prop, nullptr, "rna_NormalEditModifier_target_set", nullptr, nullptr);
7671 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
7672
7673 prop = RNA_def_property(srna, "use_direction_parallel", PROP_BOOLEAN, PROP_NONE);
7677 "Parallel Normals",
7678 "Use same direction for all normals, from origin to target's center "
7679 "(Directional mode only)");
7680 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7681
7683}
7684
7686{
7687 StructRNA *srna;
7688 PropertyRNA *prop;
7689
7690 srna = RNA_def_struct(brna, "SurfaceDeformModifier", "Modifier");
7691 RNA_def_struct_ui_text(srna, "SurfaceDeform Modifier", "");
7692 RNA_def_struct_sdna(srna, "SurfaceDeformModifierData");
7693 RNA_def_struct_ui_icon(srna, ICON_MOD_MESHDEFORM);
7694
7696
7697 prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
7698 RNA_def_property_ui_text(prop, "Target", "Mesh object to deform with");
7700 prop, nullptr, "rna_SurfaceDeformModifier_target_set", nullptr, "rna_Mesh_object_poll");
7702 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
7703
7704 prop = RNA_def_property(srna, "falloff", PROP_FLOAT, PROP_NONE);
7705 RNA_def_property_range(prop, 2.0f, 16.0f);
7707 prop, "Interpolation Falloff", "Controls how much nearby polygons influence deformation");
7708 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7709
7710 prop = RNA_def_property(srna, "is_bound", PROP_BOOLEAN, PROP_NONE);
7711 RNA_def_property_boolean_funcs(prop, "rna_SurfaceDeformModifier_is_bound_get", nullptr);
7712 RNA_def_property_ui_text(prop, "Bound", "Whether geometry has been bound to target mesh");
7714
7715 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
7716 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
7718 prop, "Vertex Group", "Vertex group name for selecting/weighting the affected areas");
7720 prop, nullptr, nullptr, "rna_SurfaceDeformModifier_defgrp_name_set");
7721 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7722
7723 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
7725 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
7726 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7727
7728 prop = RNA_def_property(srna, "use_sparse_bind", PROP_BOOLEAN, PROP_NONE);
7729 RNA_def_property_boolean_sdna(prop, nullptr, "flags", MOD_SDEF_SPARSE_BIND);
7732 prop,
7733 "Sparse Bind",
7734 "Only record binding data for vertices matching the vertex group at the time of bind");
7735 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7736
7737 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
7738 RNA_def_property_range(prop, -100, 100);
7739 RNA_def_property_ui_range(prop, -100, 100, 10, 2);
7740 RNA_def_property_ui_text(prop, "Strength", "Strength of modifier deformations");
7741 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7742
7744}
7745
7747{
7748 StructRNA *srna;
7749 PropertyRNA *prop;
7750
7751 static EnumPropertyItem prop_weighting_mode_items[] = {
7753 "FACE_AREA",
7754 0,
7755 "Face Area",
7756 "Generate face area weighted normals"},
7758 "CORNER_ANGLE",
7759 0,
7760 "Corner Angle",
7761 "Generate corner angle weighted normals"},
7763 "FACE_AREA_WITH_ANGLE",
7764 0,
7765 "Face Area & Angle",
7766 "Generated normals weighted by both face area and angle"},
7767 {0, nullptr, 0, nullptr, nullptr},
7768 };
7769
7770 srna = RNA_def_struct(brna, "WeightedNormalModifier", "Modifier");
7771 RNA_def_struct_ui_text(srna, "WeightedNormal Modifier", "");
7772 RNA_def_struct_sdna(srna, "WeightedNormalModifierData");
7773 RNA_def_struct_ui_icon(srna, ICON_MOD_NORMALEDIT);
7774
7776
7777 prop = RNA_def_property(srna, "weight", PROP_INT, PROP_NONE);
7778 RNA_def_property_range(prop, 1, 100);
7779 RNA_def_property_ui_range(prop, 1, 100, 1, -1);
7781 "Weight",
7782 "Corrective factor applied to faces' weights, 50 is neutral, "
7783 "lower values increase weight of weak faces, "
7784 "higher values increase weight of strong faces");
7785 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7786
7787 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
7788 RNA_def_property_enum_items(prop, prop_weighting_mode_items);
7789 RNA_def_property_ui_text(prop, "Weighting Mode", "Weighted vertex normal mode to use");
7790 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7791
7792 prop = RNA_def_property(srna, "thresh", PROP_FLOAT, PROP_NONE);
7793 RNA_def_property_range(prop, 0, 10);
7794 RNA_def_property_ui_range(prop, 0, 10, 1, 2);
7796 prop, "Threshold", "Threshold value for different weights to be considered equal");
7797 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7798
7799 prop = RNA_def_property(srna, "keep_sharp", PROP_BOOLEAN, PROP_NONE);
7802 "Keep Sharp",
7803 "Keep sharp edges as computed for default split normals, "
7804 "instead of setting a single weighted normal for each vertex");
7805 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7806
7807 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
7808 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
7810 prop, "Vertex Group", "Vertex group name for modifying the selected areas");
7812 prop, nullptr, nullptr, "rna_WeightedNormalModifier_defgrp_name_set");
7813 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7814
7815 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
7817 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
7818 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7819
7820 prop = RNA_def_property(srna, "use_face_influence", PROP_BOOLEAN, PROP_NONE);
7822 RNA_def_property_ui_text(prop, "Face Influence", "Use influence of face for weighting");
7823 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7824
7826}
7827
7829{
7830 StructRNA *srna;
7831 PropertyRNA *prop;
7832
7833 srna = RNA_def_struct(brna, "NodesModifierDataBlock", nullptr);
7834 RNA_def_struct_sdna(srna, "NodesModifierDataBlock");
7835
7837
7838 prop = RNA_def_property(srna, "id_name", PROP_STRING, PROP_NONE);
7841 prop, "Data-Block Name", "Name that is mapped to the referenced data-block");
7842 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7843
7844 prop = RNA_def_property(srna, "lib_name", PROP_STRING, PROP_NONE);
7847 "Library Name",
7848 "Used when the data block is not local to the current .blend file but "
7849 "is linked from some library");
7850 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7851
7852 prop = RNA_def_property(srna, "id", PROP_POINTER, PROP_NONE);
7853 RNA_def_property_struct_type(prop, "ID");
7856 prop, nullptr, nullptr, "rna_NodesModifierBake_data_block_typef", nullptr);
7857 RNA_def_property_ui_text(prop, "Data-Block", "");
7858 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
7859
7860 prop = RNA_def_property(srna, "id_type", PROP_ENUM, PROP_NONE);
7863
7865}
7866
7868{
7869 StructRNA *srna;
7870 PropertyRNA *prop;
7871
7872 srna = RNA_def_struct(brna, "NodesModifierBakeDataBlocks", nullptr);
7873 RNA_def_struct_sdna(srna, "NodesModifierBake");
7875 srna, "Data-Blocks", "Collection of data-blocks that can be referenced by baked data");
7876
7877 prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_NONE);
7878 RNA_def_property_int_sdna(prop, nullptr, "active_data_block");
7879}
7880
7883 "INHERIT",
7884 0,
7885 "Inherit from Modifier",
7886 "Use setting from the modifier"},
7888 "PACKED",
7889 0,
7890 "Packed",
7891 "Pack the baked data into the .blend file"},
7893 "DISK",
7894 0,
7895 "Disk",
7896 "Store the baked data in a directory on disk"},
7897 {0, nullptr, 0, nullptr, nullptr},
7898};
7899
7902 "PACKED",
7903 0,
7904 "Packed",
7905 "Pack the baked data into the .blend file"},
7907 "DISK",
7908 0,
7909 "Disk",
7910 "Store the baked data in a directory on disk"},
7911 {0, nullptr, 0, nullptr, nullptr},
7912};
7913
7915{
7917
7918 static EnumPropertyItem bake_mode_items[] = {
7919 {NODES_MODIFIER_BAKE_MODE_ANIMATION, "ANIMATION", 0, "Animation", "Bake a frame range"},
7920 {NODES_MODIFIER_BAKE_MODE_STILL, "STILL", 0, "Still", "Bake a single frame"},
7921 {0, nullptr, 0, nullptr, nullptr},
7922 };
7923
7924 StructRNA *srna;
7925 PropertyRNA *prop;
7926
7928
7929 srna = RNA_def_struct(brna, "NodesModifierBake", nullptr);
7930 RNA_def_struct_ui_text(srna, "Nodes Modifier Bake", "");
7931
7932 prop = RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH);
7933 RNA_def_property_ui_text(prop, "Directory", "Location on disk where the bake data is stored");
7934 RNA_def_property_update(prop, 0, "rna_NodesModifier_bake_update");
7935
7936 prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_TIME);
7937 RNA_def_property_ui_text(prop, "Start Frame", "Frame where the baking starts");
7938 RNA_def_property_update(prop, 0, "rna_NodesModifier_bake_update");
7939
7940 prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_TIME);
7941 RNA_def_property_ui_text(prop, "End Frame", "Frame where the baking ends");
7942 RNA_def_property_update(prop, 0, "rna_NodesModifier_bake_update");
7943
7944 prop = RNA_def_property(srna, "use_custom_simulation_frame_range", PROP_BOOLEAN, PROP_NONE);
7948 prop, "Custom Simulation Frame Range", "Override the simulation frame range from the scene");
7949 RNA_def_property_update(prop, 0, "rna_NodesModifier_bake_update");
7950
7951 prop = RNA_def_property(srna, "use_custom_path", PROP_BOOLEAN, PROP_NONE);
7954 prop, "Custom Path", "Specify a path where the baked data should be stored manually");
7955 RNA_def_property_update(prop, 0, "rna_NodesModifier_bake_update");
7956
7957 prop = RNA_def_property(srna, "bake_target", PROP_ENUM, PROP_NONE);
7959 RNA_def_property_ui_text(prop, "Bake Target", "Where to store the baked data");
7960 RNA_def_property_update(prop, 0, "rna_NodesModifier_bake_update");
7961
7962 prop = RNA_def_property(srna, "bake_mode", PROP_ENUM, PROP_NONE);
7963 RNA_def_property_enum_items(prop, bake_mode_items);
7964 RNA_def_property_ui_text(prop, "Bake Mode", "");
7965 RNA_def_property_update(prop, 0, "rna_NodesModifier_bake_update");
7966
7967 prop = RNA_def_property(srna, "bake_id", PROP_INT, PROP_NONE);
7969 "Bake ID",
7970 "Identifier for this bake which remains unchanged even when the bake "
7971 "node is renamed, grouped or ungrouped");
7972 RNA_def_property_int_sdna(prop, nullptr, "id");
7974
7975 prop = RNA_def_property(srna, "node", PROP_POINTER, PROP_NONE);
7976 RNA_def_property_struct_type(prop, "Node");
7978 "Node",
7979 "Bake node or simulation output node that corresponds to this bake. "
7980 "This node may be deeply nested in the modifier node group. It can be "
7981 "none in some cases like missing linked data blocks.");
7983 prop, "rna_NodesModifierBake_node_get", nullptr, nullptr, nullptr);
7984
7985 prop = RNA_def_property(srna, "data_blocks", PROP_COLLECTION, PROP_NONE);
7986 RNA_def_property_struct_type(prop, "NodesModifierDataBlock");
7987 RNA_def_property_collection_sdna(prop, nullptr, "data_blocks", "data_blocks_num");
7988 RNA_def_property_srna(prop, "NodesModifierBakeDataBlocks");
7990
7992}
7993
7995{
7996 StructRNA *srna;
7997
7998 srna = RNA_def_struct(brna, "NodesModifierBakes", nullptr);
7999 RNA_def_struct_sdna(srna, "NodesModifierData");
8000 RNA_def_struct_ui_text(srna, "Bakes", "Bake data for every bake node");
8001}
8002
8004{
8005 StructRNA *srna;
8006 PropertyRNA *prop;
8007
8008 srna = RNA_def_struct(brna, "NodesModifierPanel", nullptr);
8009 RNA_def_struct_ui_text(srna, "Nodes Modifier Panel", "");
8010
8011 prop = RNA_def_property(srna, "is_open", PROP_BOOLEAN, PROP_NONE);
8013 RNA_def_property_ui_text(prop, "Is Open", "Whether the panel is expanded or closed");
8016}
8017
8019{
8020 StructRNA *srna;
8021
8022 srna = RNA_def_struct(brna, "NodesModifierPanels", nullptr);
8023 RNA_def_struct_sdna(srna, "NodesModifierData");
8024 RNA_def_struct_ui_text(srna, "Panels", "State of all panels defined by the node group");
8025}
8026
8028{
8029 StructRNA *srna;
8030 PropertyRNA *prop;
8031
8032 srna = RNA_def_struct(brna, "NodesModifierWarning", nullptr);
8034 "Nodes Modifier Warning",
8035 "Warning created during evaluation of a geometry nodes modifier");
8036
8037 prop = RNA_def_property(srna, "message", PROP_STRING, PROP_NONE);
8038 RNA_def_property_ui_text(prop, "Message", nullptr);
8041 "rna_NodesModifierWarning_message_get",
8042 "rna_NodesModifierWarning_message_length",
8043 nullptr);
8044
8045 prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
8046 RNA_def_property_ui_text(prop, "Type", nullptr);
8049 RNA_def_property_enum_funcs(prop, "rna_NodesModifierWarning_type_get", nullptr, nullptr);
8050}
8051
8053{
8054 StructRNA *srna;
8055 PropertyRNA *prop;
8056
8058
8061
8064
8066
8067 srna = RNA_def_struct(brna, "NodesModifier", "Modifier");
8068 RNA_def_struct_ui_text(srna, "Nodes Modifier", "");
8069 RNA_def_struct_sdna(srna, "NodesModifierData");
8070 RNA_def_struct_idprops_func(srna, "rna_NodesModifier_properties");
8071 RNA_def_struct_ui_icon(srna, ICON_GEOMETRY_NODES);
8072
8074
8075 prop = RNA_def_property(srna, "node_group", PROP_POINTER, PROP_NONE);
8076 RNA_def_property_ui_text(prop, "Node Group", "Node group that controls what this modifier does");
8078 prop, nullptr, nullptr, nullptr, "rna_NodesModifier_node_group_poll");
8080 RNA_def_property_update(prop, 0, "rna_NodesModifier_node_group_update");
8081
8082 prop = RNA_def_property(srna, "bake_directory", PROP_STRING, PROP_DIRPATH);
8084 prop, "Simulation Bake Directory", "Location on disk where the bake data is stored");
8085 RNA_def_property_update(prop, 0, "rna_NodesModifier_bake_update");
8086
8087 prop = RNA_def_property(srna, "bake_target", PROP_ENUM, PROP_NONE);
8089 RNA_def_property_ui_text(prop, "Bake Target", "Where to store the baked data");
8090 RNA_def_property_update(prop, 0, "rna_NodesModifier_bake_update");
8091
8092 prop = RNA_def_property(srna, "bakes", PROP_COLLECTION, PROP_NONE);
8093 RNA_def_property_struct_type(prop, "NodesModifierBake");
8094 RNA_def_property_collection_sdna(prop, nullptr, "bakes", "bakes_num");
8095 RNA_def_property_srna(prop, "NodesModifierBakes");
8096
8097 prop = RNA_def_property(srna, "panels", PROP_COLLECTION, PROP_NONE);
8098 RNA_def_property_struct_type(prop, "NodesModifierPanel");
8099 RNA_def_property_collection_sdna(prop, nullptr, "panels", "panels_num");
8100 RNA_def_property_srna(prop, "NodesModifierPanels");
8101
8102 prop = RNA_def_property(srna, "show_group_selector", PROP_BOOLEAN, PROP_NONE);
8104 prop, nullptr, "flag", NODES_MODIFIER_HIDE_DATABLOCK_SELECTOR);
8105 RNA_def_property_ui_text(prop, "Show Node Group", "");
8108
8109 prop = RNA_def_property(srna, "node_warnings", PROP_COLLECTION, PROP_NONE);
8111 "rna_NodesModifier_node_warnings_iterator_begin",
8112 "rna_NodesModifier_node_warnings_iterator_next",
8113 nullptr,
8114 "rna_NodesModifier_node_warnings_iterator_get",
8115 "rna_NodesModifier_node_warnings_length",
8116 nullptr,
8117 nullptr,
8118 nullptr);
8119 RNA_def_property_struct_type(prop, "NodesModifierWarning");
8120
8122 srna, "open_output_attributes_panel", NODES_MODIFIER_PANEL_OUTPUT_ATTRIBUTES);
8126 srna, "open_named_attributes_panel", NODES_MODIFIER_PANEL_NAMED_ATTRIBUTES);
8128 srna, "open_bake_data_blocks_panel", NODES_MODIFIER_PANEL_BAKE_DATA_BLOCKS);
8130
8132}
8133
8135{
8136 StructRNA *srna;
8137 PropertyRNA *prop;
8138
8139 static EnumPropertyItem resolution_mode_items[] = {
8141 "VOXEL_AMOUNT",
8142 0,
8143 "Voxel Amount",
8144 "Desired number of voxels along one axis"},
8146 "VOXEL_SIZE",
8147 0,
8148 "Voxel Size",
8149 "Desired voxel side length"},
8150 {0, nullptr, 0, nullptr, nullptr},
8151 };
8152
8153 srna = RNA_def_struct(brna, "MeshToVolumeModifier", "Modifier");
8154 RNA_def_struct_ui_text(srna, "Mesh to Volume Modifier", "");
8155 RNA_def_struct_sdna(srna, "MeshToVolumeModifierData");
8156 RNA_def_struct_ui_icon(srna, ICON_VOLUME_DATA); /* TODO: Use correct icon. */
8157
8159
8160 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
8161 RNA_def_property_ui_text(prop, "Object", "Object");
8163 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8164
8165 prop = RNA_def_property(srna, "resolution_mode", PROP_ENUM, PROP_NONE);
8166 RNA_def_property_enum_items(prop, resolution_mode_items);
8168 prop, "Resolution Mode", "Mode for how the desired voxel size is specified");
8169 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8170
8171 prop = RNA_def_property(srna, "voxel_size", PROP_FLOAT, PROP_NONE);
8173 prop, "Voxel Size", "Smaller values result in a higher resolution output");
8174 RNA_def_property_range(prop, 0.0, FLT_MAX);
8175 RNA_def_property_ui_range(prop, 0.0, FLT_MAX, 0.01, 4);
8176 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8177
8178 prop = RNA_def_property(srna, "voxel_amount", PROP_INT, PROP_NONE);
8179 RNA_def_property_ui_text(prop, "Voxel Amount", "Approximate number of voxels along one axis");
8180 RNA_def_property_range(prop, 0, INT_MAX);
8181 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8182
8183 prop = RNA_def_property(srna, "interior_band_width", PROP_FLOAT, PROP_NONE);
8185 prop, "Interior Band Width", "Width of the gradient inside of the mesh");
8186 RNA_def_property_range(prop, 0.0, FLT_MAX);
8187 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8188
8189 prop = RNA_def_property(srna, "density", PROP_FLOAT, PROP_NONE);
8190 RNA_def_property_ui_text(prop, "Density", "Density of the new volume");
8191 RNA_def_property_range(prop, 0.0, FLT_MAX);
8192 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8193
8195}
8196
8198{
8199 static const EnumPropertyItem prop_texture_map_mode_items[] = {
8201 "LOCAL",
8202 0,
8203 "Local",
8204 "Use the local coordinate system for the texture coordinates"},
8206 "GLOBAL",
8207 0,
8208 "Global",
8209 "Use the global coordinate system for the texture coordinates"},
8211 "OBJECT",
8212 0,
8213 "Object",
8214 "Use the linked object's local coordinate system for the texture coordinates"},
8215 {0, nullptr, 0, nullptr, nullptr},
8216 };
8217
8218 StructRNA *srna;
8219 PropertyRNA *prop;
8220
8221 srna = RNA_def_struct(brna, "VolumeDisplaceModifier", "Modifier");
8222 RNA_def_struct_ui_text(srna, "Volume Displace Modifier", "");
8223 RNA_def_struct_sdna(srna, "VolumeDisplaceModifierData");
8224 RNA_def_struct_ui_icon(srna, ICON_VOLUME_DATA); /* TODO: Use correct icon. */
8225
8227
8228 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
8229 RNA_def_property_ui_text(prop, "Strength", "Strength of the displacement");
8230 RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 0.1, 4);
8231 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8232
8233 prop = RNA_def_property(srna, "texture", PROP_POINTER, PROP_NONE);
8234 RNA_def_property_ui_text(prop, "Texture", "");
8236 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8237
8238 prop = RNA_def_property(srna, "texture_map_mode", PROP_ENUM, PROP_NONE);
8239 RNA_def_property_enum_items(prop, prop_texture_map_mode_items);
8240 RNA_def_property_ui_text(prop, "Texture Mapping Mode", "");
8241 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8242
8243 prop = RNA_def_property(srna, "texture_map_object", PROP_POINTER, PROP_NONE);
8244 RNA_def_property_ui_text(prop, "Object", "Object to use for texture mapping");
8246 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8247
8248 prop = RNA_def_property(srna, "texture_mid_level", PROP_FLOAT, PROP_XYZ);
8250 prop, "Texture Mid Level", "Subtracted from the texture color to get a displacement vector");
8252 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1f, 5);
8253 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8254
8255 prop = RNA_def_property(srna, "texture_sample_radius", PROP_FLOAT, PROP_FACTOR);
8257 prop,
8258 "Texture Sample Radius",
8259 "Smaller values result in better performance but might cut off the volume");
8260 RNA_def_property_range(prop, 0.0f, FLT_MAX);
8261 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1f, 5);
8262 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8263
8265}
8266
8268{
8269 StructRNA *srna;
8270 PropertyRNA *prop;
8271
8272 static EnumPropertyItem resolution_mode_items[] = {
8274 "GRID",
8275 0,
8276 "Grid",
8277 "Use resolution of the volume grid"},
8279 "VOXEL_AMOUNT",
8280 0,
8281 "Voxel Amount",
8282 "Desired number of voxels along one axis"},
8284 "VOXEL_SIZE",
8285 0,
8286 "Voxel Size",
8287 "Desired voxel side length"},
8288 {0, nullptr, 0, nullptr, nullptr},
8289 };
8290
8291 srna = RNA_def_struct(brna, "VolumeToMeshModifier", "Modifier");
8292 RNA_def_struct_ui_text(srna, "Volume to Mesh Modifier", "");
8293 RNA_def_struct_sdna(srna, "VolumeToMeshModifierData");
8294 RNA_def_struct_ui_icon(srna, ICON_VOLUME_DATA); /* TODO: Use correct icon. */
8295
8297
8298 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
8299 RNA_def_property_ui_text(prop, "Object", "Object");
8301 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8302
8303 prop = RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE);
8305 prop, "Threshold", "Voxels with a larger value are inside the generated mesh");
8306 RNA_def_property_range(prop, 0.0f, FLT_MAX);
8307 RNA_def_property_ui_range(prop, 0.001f, 1.0f, 0.1f, 5);
8308 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8309
8310 prop = RNA_def_property(srna, "adaptivity", PROP_FLOAT, PROP_NONE);
8312 prop,
8313 "Adaptivity",
8314 "Reduces the final face count by simplifying geometry where detail is not needed");
8315 RNA_def_property_range(prop, 0.0f, 1.0f);
8316 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8317
8318 prop = RNA_def_property(srna, "use_smooth_shade", PROP_BOOLEAN, PROP_NONE);
8321 prop, "Smooth Shading", "Output faces with smooth shading rather than flat shaded");
8322 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8323
8324 prop = RNA_def_property(srna, "grid_name", PROP_STRING, PROP_NONE);
8326 prop, "Grid Name", "Grid in the volume object that is converted to a mesh");
8327 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8328
8329 prop = RNA_def_property(srna, "resolution_mode", PROP_ENUM, PROP_NONE);
8330 RNA_def_property_enum_items(prop, resolution_mode_items);
8332 prop, "Resolution Mode", "Mode for how the desired voxel size is specified");
8333 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8334
8335 prop = RNA_def_property(srna, "voxel_size", PROP_FLOAT, PROP_NONE);
8337 prop, "Voxel Size", "Smaller values result in a higher resolution output");
8338 RNA_def_property_range(prop, 0.0, FLT_MAX);
8339 RNA_def_property_ui_range(prop, 0.0, FLT_MAX, 0.01, 4);
8340 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8341
8342 prop = RNA_def_property(srna, "voxel_amount", PROP_INT, PROP_NONE);
8343 RNA_def_property_ui_text(prop, "Voxel Amount", "Approximate number of voxels along one axis");
8344 RNA_def_property_range(prop, 0, INT_MAX);
8345 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8346
8348}
8349
8351{
8352 PropertyRNA *prop;
8353
8354 prop = RNA_def_property(srna, "layer_filter", PROP_STRING, PROP_NONE);
8355 RNA_def_property_string_sdna(prop, nullptr, "influence.layer_name");
8356 RNA_def_property_ui_text(prop, "Layer", "Layer name");
8357 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8358
8359 prop = RNA_def_property(srna, "use_layer_pass_filter", PROP_BOOLEAN, PROP_NONE);
8361 prop, nullptr, "influence.flag", GREASE_PENCIL_INFLUENCE_USE_LAYER_PASS_FILTER);
8362 RNA_def_property_ui_text(prop, "Use Layer Pass", "Use layer pass filter");
8363 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8364
8365 prop = RNA_def_property(srna, "layer_pass_filter", PROP_INT, PROP_NONE);
8366 RNA_def_property_int_sdna(prop, nullptr, "influence.layer_pass");
8367 RNA_def_property_range(prop, 0, 100);
8368 RNA_def_property_ui_text(prop, "Layer Pass", "Layer pass filter");
8369 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8370
8371 prop = RNA_def_property(srna, "invert_layer_filter", PROP_BOOLEAN, PROP_NONE);
8373 prop, nullptr, "influence.flag", GREASE_PENCIL_INFLUENCE_INVERT_LAYER_FILTER);
8374 RNA_def_property_ui_text(prop, "Invert Layer", "Invert layer filter");
8375 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8376
8377 prop = RNA_def_property(srna, "invert_layer_pass_filter", PROP_BOOLEAN, PROP_NONE);
8379 prop, nullptr, "influence.flag", GREASE_PENCIL_INFLUENCE_INVERT_LAYER_PASS_FILTER);
8380 RNA_def_property_ui_text(prop, "Invert Layer Pass", "Invert layer pass filter");
8381 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8382}
8383
8385 const char *material_set_fn)
8386{
8387 PropertyRNA *prop;
8388
8389 prop = RNA_def_property(srna, "material_filter", PROP_POINTER, PROP_NONE);
8390 RNA_def_property_pointer_sdna(prop, nullptr, "influence.material");
8393 prop, nullptr, material_set_fn, nullptr, "rna_GreasePencilModifier_material_poll");
8394 RNA_def_property_ui_text(prop, "Material", "Material used for filtering");
8395 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8396
8397 prop = RNA_def_property(srna, "use_material_pass_filter", PROP_BOOLEAN, PROP_NONE);
8399 prop, nullptr, "influence.flag", GREASE_PENCIL_INFLUENCE_USE_MATERIAL_PASS_FILTER);
8400 RNA_def_property_ui_text(prop, "Use Material Pass", "Use material pass filter");
8401 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8402
8403 prop = RNA_def_property(srna, "material_pass_filter", PROP_INT, PROP_NONE);
8404 RNA_def_property_int_sdna(prop, nullptr, "influence.material_pass");
8405 RNA_def_property_range(prop, 0, 100);
8406 RNA_def_property_ui_text(prop, "Material Pass", "Material pass");
8407 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8408
8409 prop = RNA_def_property(srna, "invert_material_filter", PROP_BOOLEAN, PROP_NONE);
8411 prop, nullptr, "influence.flag", GREASE_PENCIL_INFLUENCE_INVERT_MATERIAL_FILTER);
8412 RNA_def_property_ui_text(prop, "Invert Material", "Invert material filter");
8413 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8414
8415 prop = RNA_def_property(srna, "invert_material_pass_filter", PROP_BOOLEAN, PROP_NONE);
8417 prop, nullptr, "influence.flag", GREASE_PENCIL_INFLUENCE_INVERT_MATERIAL_PASS_FILTER);
8418 RNA_def_property_ui_text(prop, "Invert Material Pass", "Invert material pass filter");
8419 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8420}
8421
8423 const char *vertex_group_name_set_fn)
8424{
8425 PropertyRNA *prop;
8426
8427 prop = RNA_def_property(srna, "vertex_group_name", PROP_STRING, PROP_NONE);
8428 RNA_def_property_string_sdna(prop, nullptr, "influence.vertex_group_name");
8429 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
8430 RNA_def_property_string_funcs(prop, nullptr, nullptr, vertex_group_name_set_fn);
8431 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8432
8433 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
8435 prop, nullptr, "influence.flag", GREASE_PENCIL_INFLUENCE_INVERT_VERTEX_GROUP);
8436 RNA_def_property_ui_text(prop, "Invert Vertex Group", "Invert vertex group weights");
8437 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8438}
8439
8441{
8442 PropertyRNA *prop;
8443
8444 prop = RNA_def_property(srna, "use_custom_curve", PROP_BOOLEAN, PROP_NONE);
8446 prop, nullptr, "influence.flag", GREASE_PENCIL_INFLUENCE_USE_CUSTOM_CURVE);
8448 prop, "Use Custom Curve", "Use a custom curve to define a factor along the strokes");
8449 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8450
8451 prop = RNA_def_property(srna, "custom_curve", PROP_POINTER, PROP_NONE);
8452 RNA_def_property_pointer_sdna(prop, nullptr, "influence.custom_curve");
8453 RNA_def_property_ui_text(prop, "Curve", "Custom curve to apply effect");
8454 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8455}
8456
8458{
8459 StructRNA *srna;
8460 PropertyRNA *prop;
8461 static const EnumPropertyItem color_mode_items[] = {
8462 {MOD_GREASE_PENCIL_COLOR_BOTH, "BOTH", 0, "Stroke & Fill", "Modify fill and stroke colors"},
8463 {MOD_GREASE_PENCIL_COLOR_STROKE, "STROKE", 0, "Stroke", "Modify stroke color only"},
8464 {MOD_GREASE_PENCIL_COLOR_FILL, "FILL", 0, "Fill", "Modify fill color only"},
8465 {MOD_GREASE_PENCIL_COLOR_HARDNESS, "HARDNESS", 0, "Hardness", "Modify stroke hardness"},
8466 {0, nullptr, 0, nullptr, nullptr},
8467 };
8468
8469 srna = RNA_def_struct(brna, "GreasePencilOpacityModifier", "Modifier");
8470 RNA_def_struct_ui_text(srna, "Grease Pencil Opacity Modifier", "");
8471 RNA_def_struct_sdna(srna, "GreasePencilOpacityModifierData");
8472 RNA_def_struct_ui_icon(srna, ICON_MOD_OPACITY);
8473
8476 srna, "rna_GreasePencilOpacityModifier_material_filter_set");
8478 srna, "rna_GreasePencilOpacityModifier_vertex_group_name_set");
8480
8481 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
8482
8484
8485 prop = RNA_def_property(srna, "color_mode", PROP_ENUM, PROP_NONE);
8486 RNA_def_property_enum_items(prop, color_mode_items);
8487 RNA_def_property_ui_text(prop, "Mode", "Attributes to modify");
8488 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8489
8490 prop = RNA_def_property(srna, "color_factor", PROP_FLOAT, PROP_NONE);
8491 RNA_def_property_float_sdna(prop, nullptr, "color_factor");
8492 RNA_def_property_ui_range(prop, 0, 2.0, 0.1, 2);
8494 nullptr,
8495 "rna_GreasePencilOpacityModifier_opacity_factor_max_set",
8496 "rna_GreasePencilOpacityModifier_opacity_factor_range");
8497 RNA_def_property_ui_text(prop, "Opacity Factor", "Factor of opacity");
8498 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8499
8500 prop = RNA_def_property(srna, "hardness_factor", PROP_FLOAT, PROP_NONE);
8501 RNA_def_property_float_sdna(prop, nullptr, "hardness_factor");
8502 RNA_def_property_range(prop, 0.0, FLT_MAX);
8503 RNA_def_property_ui_range(prop, 0.0, FLT_MAX, 0.1, 2);
8504 RNA_def_property_ui_text(prop, "Hardness Factor", "Factor of stroke hardness");
8505 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8506
8507 prop = RNA_def_property(srna, "use_weight_as_factor", PROP_BOOLEAN, PROP_NONE);
8509 prop, nullptr, "flag", MOD_GREASE_PENCIL_OPACITY_USE_WEIGHT_AS_FACTOR);
8511 prop, "Use Weight as Factor", "Use vertex group weight as factor instead of influence");
8512 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8513
8514 prop = RNA_def_property(srna, "use_uniform_opacity", PROP_BOOLEAN, PROP_NONE);
8516 prop, nullptr, "flag", MOD_GREASE_PENCIL_OPACITY_USE_UNIFORM_OPACITY);
8518 prop, "Uniform Opacity", "Replace the stroke opacity instead of modulating each point");
8519
8520 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8521
8523}
8524
8526{
8527 StructRNA *srna;
8528 PropertyRNA *prop;
8529
8530 static const EnumPropertyItem subdivision_type_items[] = {
8531 {MOD_GREASE_PENCIL_SUBDIV_CATMULL, "CATMULL_CLARK", 0, "Catmull-Clark", ""},
8532 {MOD_GREASE_PENCIL_SUBDIV_SIMPLE, "SIMPLE", 0, "Simple", ""},
8533 {0, nullptr, 0, nullptr, nullptr},
8534 };
8535
8536 srna = RNA_def_struct(brna, "GreasePencilSubdivModifier", "Modifier");
8537 RNA_def_struct_ui_text(srna, "Subdivision Modifier", "Subdivide Stroke modifier");
8538 RNA_def_struct_sdna(srna, "GreasePencilSubdivModifierData");
8539 RNA_def_struct_ui_icon(srna, ICON_MOD_SUBSURF);
8540
8543 srna, "rna_GreasePencilSubdivModifier_material_filter_set");
8544
8545 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
8546
8548
8549 prop = RNA_def_property(srna, "level", PROP_INT, PROP_NONE);
8550 RNA_def_property_int_sdna(prop, nullptr, "level");
8551 RNA_def_property_range(prop, 0, 16);
8552 RNA_def_property_ui_range(prop, 0, 6, 1, 0);
8553 RNA_def_property_ui_text(prop, "Level", "Level of subdivision");
8554
8555 prop = RNA_def_property(srna, "subdivision_type", PROP_ENUM, PROP_NONE);
8556 RNA_def_property_enum_sdna(prop, nullptr, "type");
8557 RNA_def_property_enum_items(prop, subdivision_type_items);
8558 RNA_def_property_ui_text(prop, "Subdivision Type", "Select type of subdivision algorithm");
8559 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8560
8561 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8562
8564}
8565
8567{
8568 StructRNA *srna;
8569 PropertyRNA *prop;
8570
8571 static const EnumPropertyItem color_mode_items[] = {
8572 {MOD_GREASE_PENCIL_COLOR_BOTH, "BOTH", 0, "Stroke & Fill", "Modify fill and stroke colors"},
8573 {MOD_GREASE_PENCIL_COLOR_STROKE, "STROKE", 0, "Stroke", "Modify stroke color only"},
8574 {MOD_GREASE_PENCIL_COLOR_FILL, "FILL", 0, "Fill", "Modify fill color only"},
8575 {0, nullptr, 0, nullptr, nullptr},
8576 };
8577
8578 srna = RNA_def_struct(brna, "GreasePencilColorModifier", "Modifier");
8579 RNA_def_struct_ui_text(srna, "Grease Pencil Color Modifier", "");
8580 RNA_def_struct_sdna(srna, "GreasePencilColorModifierData");
8581 RNA_def_struct_ui_icon(srna, ICON_MOD_HUE_SATURATION);
8582
8585 srna, "rna_GreasePencilColorModifier_material_filter_set");
8587
8588 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
8589
8591
8592 prop = RNA_def_property(srna, "color_mode", PROP_ENUM, PROP_NONE);
8593 RNA_def_property_enum_items(prop, color_mode_items);
8594 RNA_def_property_ui_text(prop, "Mode", "Attributes to modify");
8595 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8596
8597 prop = RNA_def_property(srna, "hue", PROP_FLOAT, PROP_NONE);
8598 RNA_def_property_range(prop, 0.0, 1.0);
8599 RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 3);
8600 RNA_def_property_float_sdna(prop, nullptr, "hsv[0]");
8601 RNA_def_property_ui_text(prop, "Hue", "Color hue offset");
8602 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8603
8604 prop = RNA_def_property(srna, "saturation", PROP_FLOAT, PROP_NONE);
8605 RNA_def_property_range(prop, 0.0, FLT_MAX);
8606 RNA_def_property_ui_range(prop, 0.0, 2.0, 0.1, 3);
8607 RNA_def_property_float_sdna(prop, nullptr, "hsv[1]");
8608 RNA_def_property_ui_text(prop, "Saturation", "Color saturation factor");
8609 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8610
8611 prop = RNA_def_property(srna, "value", PROP_FLOAT, PROP_NONE);
8612 RNA_def_property_range(prop, 0.0, FLT_MAX);
8613 RNA_def_property_ui_range(prop, 0.0, 2.0, 0.1, 3);
8614 RNA_def_property_float_sdna(prop, nullptr, "hsv[2]");
8615 RNA_def_property_ui_text(prop, "Value", "Color value factor");
8616 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8617
8619}
8620
8622{
8623 StructRNA *srna;
8624 PropertyRNA *prop;
8625
8626 static const EnumPropertyItem color_mode_items[] = {
8627 {MOD_GREASE_PENCIL_COLOR_BOTH, "BOTH", 0, "Stroke & Fill", "Modify fill and stroke colors"},
8628 {MOD_GREASE_PENCIL_COLOR_STROKE, "STROKE", 0, "Stroke", "Modify stroke color only"},
8629 {MOD_GREASE_PENCIL_COLOR_FILL, "FILL", 0, "Fill", "Modify fill color only"},
8630 {0, nullptr, 0, nullptr, nullptr},
8631 };
8632
8633 static const EnumPropertyItem tint_mode_items[] = {
8634 {MOD_GREASE_PENCIL_TINT_UNIFORM, "UNIFORM", 0, "Uniform", ""},
8635 {MOD_GREASE_PENCIL_TINT_GRADIENT, "GRADIENT", 0, "Gradient", ""},
8636 {0, nullptr, 0, nullptr, nullptr},
8637 };
8638
8639 srna = RNA_def_struct(brna, "GreasePencilTintModifier", "Modifier");
8640 RNA_def_struct_ui_text(srna, "Grease Pencil Tint Modifier", "");
8641 RNA_def_struct_sdna(srna, "GreasePencilTintModifierData");
8642 RNA_def_struct_ui_icon(srna, ICON_MOD_TINT);
8643
8646 srna, "rna_GreasePencilTintModifier_material_filter_set");
8648 srna, "rna_GreasePencilTintModifier_vertex_group_name_set");
8650
8651 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
8652
8654
8655 prop = RNA_def_property(srna, "color_mode", PROP_ENUM, PROP_NONE);
8656 RNA_def_property_enum_items(prop, color_mode_items);
8657 RNA_def_property_ui_text(prop, "Mode", "Attributes to modify");
8658 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8659
8660 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
8661 RNA_def_property_range(prop, 0, 2.0);
8662 RNA_def_property_ui_range(prop, 0, 2.0, 0.1, 2);
8663 RNA_def_property_ui_text(prop, "Factor", "Factor for tinting");
8664 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8665
8666 /* Type of Tint. */
8667 prop = RNA_def_property(srna, "tint_mode", PROP_ENUM, PROP_NONE);
8668 RNA_def_property_enum_items(prop, tint_mode_items);
8669 RNA_def_property_ui_text(prop, "Tint Mode", "");
8670 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8671
8672 /* Simple Color. */
8673 prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
8674 RNA_def_property_range(prop, 0.0, 1.0);
8675 RNA_def_property_array(prop, 3);
8676 RNA_def_property_ui_text(prop, "Color", "Color used for tinting");
8677 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8678
8679 /* Color band. */
8680 prop = RNA_def_property(srna, "color_ramp", PROP_POINTER, PROP_NONE);
8681 RNA_def_property_struct_type(prop, "ColorRamp");
8682 RNA_def_property_ui_text(prop, "Color Ramp", "Gradient tinting colors");
8683 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8684
8685 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
8686 RNA_def_property_ui_text(prop, "Object", "Object used for the gradient direction");
8689 prop, nullptr, "rna_GreasePencilTintModifier_object_set", nullptr, nullptr);
8690 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8691
8692 prop = RNA_def_property(srna, "radius", PROP_FLOAT, PROP_DISTANCE);
8693 RNA_def_property_range(prop, 1e-6f, FLT_MAX);
8694 RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 1, 3);
8695 RNA_def_property_ui_text(prop, "Radius", "Influence distance from the object");
8696 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8697
8699
8700 prop = RNA_def_property(srna, "use_weight_as_factor", PROP_BOOLEAN, PROP_NONE);
8702 prop, nullptr, "flag", MOD_GREASE_PENCIL_TINT_USE_WEIGHT_AS_FACTOR);
8704 prop, "Use Weight as Factor", "Use vertex group weight as factor instead of influence");
8705 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8706}
8707
8709{
8710 StructRNA *srna;
8711 PropertyRNA *prop;
8712
8713 static const EnumPropertyItem modifier_lineart_source_type[] = {
8714 {LINEART_SOURCE_COLLECTION, "COLLECTION", 0, "Collection", ""},
8715 {LINEART_SOURCE_OBJECT, "OBJECT", 0, "Object", ""},
8716 {LINEART_SOURCE_SCENE, "SCENE", 0, "Scene", ""},
8717 {0, nullptr, 0, nullptr, nullptr},
8718 };
8719
8720 static const EnumPropertyItem modifier_lineart_shadow_region_filtering[] = {
8722 "NONE",
8723 0,
8724 "None",
8725 "Not filtering any lines based on illumination region"},
8727 "ILLUMINATED",
8728 0,
8729 "Illuminated",
8730 "Only selecting lines from illuminated regions"},
8732 "SHADED",
8733 0,
8734 "Shaded",
8735 "Only selecting lines from shaded regions"},
8737 "ILLUMINATED_ENCLOSED",
8738 0,
8739 "Illuminated (Enclosed Shapes)",
8740 "Selecting lines from lit regions, and make the combination of contour, light contour and "
8741 "shadow lines into enclosed shapes"},
8742 {0, nullptr, 0, nullptr, nullptr},
8743 };
8744
8745 static const EnumPropertyItem modifier_lineart_silhouette_filtering[] = {
8746 {LINEART_SILHOUETTE_FILTER_NONE, "NONE", 0, "Contour", ""},
8747 {LINEART_SILHOUETTE_FILTER_GROUP, "GROUP", 0, "Silhouette", ""},
8748 {LINEART_SILHOUETTE_FILTER_INDIVIDUAL, "INDIVIDUAL", 0, "Individual Silhouette", ""},
8749 {0, nullptr, 0, nullptr, nullptr},
8750 };
8751
8752 srna = RNA_def_struct(brna, "GreasePencilLineartModifier", "Modifier");
8754 srna, "Line Art Modifier", "Generate Line Art strokes from selected source");
8755 RNA_def_struct_sdna(srna, "GreasePencilLineartModifierData");
8756 RNA_def_struct_ui_icon(srna, ICON_MOD_LINEART);
8757
8759
8760 prop = RNA_def_property(srna, "use_custom_camera", PROP_BOOLEAN, PROP_NONE);
8761 RNA_def_property_boolean_sdna(prop, nullptr, "calculation_flags", MOD_LINEART_USE_CUSTOM_CAMERA);
8763 prop, "Use Custom Camera", "Use custom camera instead of the active camera");
8764 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8765
8766 prop = RNA_def_property(srna, "use_fuzzy_intersections", PROP_BOOLEAN, PROP_NONE);
8768 prop, nullptr, "calculation_flags", MOD_LINEART_INTERSECTION_AS_CONTOUR);
8770 "Intersection With Contour",
8771 "Treat intersection and contour lines as if they were the same type so "
8772 "they can be chained together");
8773 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8774
8775 prop = RNA_def_property(srna, "use_fuzzy_all", PROP_BOOLEAN, PROP_NONE);
8777 prop, nullptr, "calculation_flags", MOD_LINEART_EVERYTHING_AS_CONTOUR);
8779 prop, "All Lines", "Treat all lines as the same line type so they can be chained together");
8780 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8781
8782 prop = RNA_def_property(srna, "use_object_instances", PROP_BOOLEAN, PROP_NONE);
8784 prop, nullptr, "calculation_flags", MOD_LINEART_ALLOW_DUPLI_OBJECTS);
8786 "Instanced Objects",
8787 "Allow particle objects and face/vertex instances to show in Line Art");
8788 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8789
8790 prop = RNA_def_property(srna, "use_edge_overlap", PROP_BOOLEAN, PROP_NONE);
8792 prop, nullptr, "calculation_flags", MOD_LINEART_ALLOW_OVERLAPPING_EDGES);
8794 prop,
8795 "Handle Overlapping Edges",
8796 "Allow edges in the same location (i.e. from edge split) to show properly. May run slower.");
8797 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8798
8799 prop = RNA_def_property(srna, "use_clip_plane_boundaries", PROP_BOOLEAN, PROP_NONE);
8801 prop, nullptr, "calculation_flags", MOD_LINEART_ALLOW_CLIPPING_BOUNDARIES);
8803 "Clipping Boundaries",
8804 "Allow lines generated by the near/far clipping plane to be shown");
8805 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8806
8807 prop = RNA_def_property(srna, "crease_threshold", PROP_FLOAT, PROP_ANGLE);
8808 RNA_def_property_range(prop, 0, DEG2RAD(180.0f));
8809 RNA_def_property_ui_range(prop, 0.0f, DEG2RAD(180.0f), 0.01f, 1);
8811 "Crease Threshold",
8812 "Angles smaller than this will be treated as creases. Crease angle "
8813 "priority: object Line Art crease override > mesh auto smooth angle > "
8814 "Line Art default crease.");
8815 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8816
8817 prop = RNA_def_property(srna, "split_angle", PROP_FLOAT, PROP_ANGLE);
8818 RNA_def_property_float_sdna(prop, nullptr, "angle_splitting_threshold");
8820 prop, "Angle Splitting", "Angle in screen space below which a stroke is split in two");
8821 /* Don't allow value very close to PI, or we get a lot of small segments. */
8822 RNA_def_property_ui_range(prop, 0.0f, DEG2RAD(179.5f), 0.01f, 1);
8823 RNA_def_property_range(prop, 0.0f, DEG2RAD(180.0f));
8824 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8825
8826 prop = RNA_def_property(srna, "smooth_tolerance", PROP_FLOAT, PROP_NONE);
8827 RNA_def_property_float_sdna(prop, nullptr, "chain_smooth_tolerance");
8829 prop, "Smooth Tolerance", "Strength of smoothing applied on jagged chains");
8830 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.05f, 4);
8831 RNA_def_property_range(prop, 0.0f, 30.0f);
8832 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8833
8834 prop = RNA_def_property(srna, "use_loose_as_contour", PROP_BOOLEAN, PROP_NONE);
8835 RNA_def_property_boolean_sdna(prop, nullptr, "calculation_flags", MOD_LINEART_LOOSE_AS_CONTOUR);
8836 RNA_def_property_ui_text(prop, "Loose As Contour", "Loose edges will have contour type");
8837 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8838
8839 prop = RNA_def_property(srna, "invert_source_vertex_group", PROP_BOOLEAN, PROP_NONE);
8841 prop, nullptr, "calculation_flags", MOD_LINEART_INVERT_SOURCE_VGROUP);
8842 RNA_def_property_ui_text(prop, "Invert Vertex Group", "Invert source vertex group values");
8843 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8844
8845 prop = RNA_def_property(srna, "use_output_vertex_group_match_by_name", PROP_BOOLEAN, PROP_NONE);
8847 prop, nullptr, "calculation_flags", MOD_LINEART_MATCH_OUTPUT_VGROUP);
8848 RNA_def_property_ui_text(prop, "Match Output", "Match output vertex group based on name");
8849 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8850
8851 prop = RNA_def_property(srna, "use_face_mark", PROP_BOOLEAN, PROP_NONE);
8852 RNA_def_property_boolean_sdna(prop, nullptr, "calculation_flags", MOD_LINEART_FILTER_FACE_MARK);
8854 prop, "Filter Face Marks", "Filter feature lines using freestyle face marks");
8855 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8856
8857 prop = RNA_def_property(srna, "use_face_mark_invert", PROP_BOOLEAN, PROP_NONE);
8859 prop, nullptr, "calculation_flags", MOD_LINEART_FILTER_FACE_MARK_INVERT);
8860 RNA_def_property_ui_text(prop, "Invert", "Invert face mark filtering");
8861 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8862
8863 prop = RNA_def_property(srna, "use_face_mark_boundaries", PROP_BOOLEAN, PROP_NONE);
8865 prop, nullptr, "calculation_flags", MOD_LINEART_FILTER_FACE_MARK_BOUNDARIES);
8867 prop, "Boundaries", "Filter feature lines based on face mark boundaries");
8868 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8869
8870 prop = RNA_def_property(srna, "use_face_mark_keep_contour", PROP_BOOLEAN, PROP_NONE);
8872 prop, nullptr, "calculation_flags", MOD_LINEART_FILTER_FACE_MARK_KEEP_CONTOUR);
8873 RNA_def_property_ui_text(prop, "Keep Contour", "Preserve contour lines while filtering");
8874 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8875
8876 prop = RNA_def_property(srna, "chaining_image_threshold", PROP_FLOAT, PROP_DISTANCE);
8878 prop,
8879 "Image Threshold",
8880 "Segments with an image distance smaller than this will be chained together");
8881 RNA_def_property_ui_range(prop, 0.0f, 0.3f, 0.001f, 4);
8882 RNA_def_property_range(prop, 0.0f, 0.3f);
8883 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8884
8885 prop = RNA_def_property(srna, "use_loose_edge_chain", PROP_BOOLEAN, PROP_NONE);
8886 RNA_def_property_boolean_sdna(prop, nullptr, "calculation_flags", MOD_LINEART_CHAIN_LOOSE_EDGES);
8887 RNA_def_property_ui_text(prop, "Chain Loose Edges", "Allow loose edges to be chained together");
8888 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8889
8890 prop = RNA_def_property(srna, "use_geometry_space_chain", PROP_BOOLEAN, PROP_NONE);
8892 prop, nullptr, "calculation_flags", MOD_LINEART_CHAIN_GEOMETRY_SPACE);
8894 prop, "Use Geometry Space", "Use geometry distance for chaining instead of image space");
8895 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8896
8897 prop = RNA_def_property(srna, "use_detail_preserve", PROP_BOOLEAN, PROP_NONE);
8899 prop, nullptr, "calculation_flags", MOD_LINEART_CHAIN_PRESERVE_DETAILS);
8901 prop, "Preserve Details", "Keep the zig-zag \"noise\" in initial chaining");
8902 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8903
8904 prop = RNA_def_property(srna, "use_overlap_edge_type_support", PROP_BOOLEAN, PROP_NONE);
8906 prop, nullptr, "calculation_flags", MOD_LINEART_ALLOW_OVERLAP_EDGE_TYPES);
8908 "Overlapping Edge Types",
8909 "Allow an edge to have multiple overlapping types. This will create a "
8910 "separate stroke for each overlapping type.");
8911 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8912
8913 prop = RNA_def_property(srna, "stroke_depth_offset", PROP_FLOAT, PROP_DISTANCE);
8915 "Stroke Depth Offset",
8916 "Move strokes slightly towards the camera to avoid clipping while "
8917 "preserve depth for the viewport");
8918 RNA_def_property_ui_range(prop, 0.0, 0.5, 0.001, 4);
8919 RNA_def_property_range(prop, -0.1, FLT_MAX);
8920 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8921
8922 prop = RNA_def_property(srna, "use_offset_towards_custom_camera", PROP_BOOLEAN, PROP_NONE);
8924 prop, nullptr, "flags", LINEART_GPENCIL_OFFSET_TOWARDS_CUSTOM_CAMERA);
8926 "Offset Towards Custom Camera",
8927 "Offset strokes towards selected camera instead of the active camera");
8928 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8929
8930 prop = RNA_def_property(srna, "source_camera", PROP_POINTER, PROP_NONE);
8932 RNA_def_property_struct_type(prop, "Object");
8935 prop, "Camera Object", "Use specified camera object for generating Line Art strokes");
8936 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8937
8938 prop = RNA_def_property(srna, "light_contour_object", PROP_POINTER, PROP_NONE);
8940 RNA_def_property_struct_type(prop, "Object");
8943 prop, "Light Object", "Use this light object to generate light contour");
8944 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8945
8946 prop = RNA_def_property(srna, "source_type", PROP_ENUM, PROP_NONE);
8947 RNA_def_property_enum_items(prop, modifier_lineart_source_type);
8948 RNA_def_property_ui_text(prop, "Source Type", "Line Art stroke source type");
8949 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8950
8951 prop = RNA_def_property(srna, "source_object", PROP_POINTER, PROP_NONE);
8953 RNA_def_property_struct_type(prop, "Object");
8954 RNA_def_property_ui_text(prop, "Object", "Generate strokes from this object");
8955 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8956
8957 prop = RNA_def_property(srna, "source_collection", PROP_POINTER, PROP_NONE);
8959 RNA_def_property_struct_type(prop, "Collection");
8961 prop, "Collection", "Generate strokes from the objects in this collection");
8962 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8963
8964 /* types */
8965 prop = RNA_def_property(srna, "use_contour", PROP_BOOLEAN, PROP_NONE);
8967 RNA_def_property_ui_text(prop, "Use Contour", "Generate strokes from contours lines");
8968 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8969
8970 prop = RNA_def_property(srna, "use_loose", PROP_BOOLEAN, PROP_NONE);
8971 RNA_def_property_boolean_sdna(prop, nullptr, "edge_types", MOD_LINEART_EDGE_FLAG_LOOSE);
8972 RNA_def_property_ui_text(prop, "Use Loose", "Generate strokes from loose edges");
8973 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8974
8975 prop = RNA_def_property(srna, "use_crease", PROP_BOOLEAN, PROP_NONE);
8976 RNA_def_property_boolean_sdna(prop, nullptr, "edge_types", MOD_LINEART_EDGE_FLAG_CREASE);
8977 RNA_def_property_ui_text(prop, "Use Crease", "Generate strokes from creased edges");
8978 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8979
8980 prop = RNA_def_property(srna, "use_material", PROP_BOOLEAN, PROP_NONE);
8983 prop, "Use Material", "Generate strokes from borders between materials");
8984 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8985
8986 prop = RNA_def_property(srna, "use_edge_mark", PROP_BOOLEAN, PROP_NONE);
8988 RNA_def_property_ui_text(prop, "Use Edge Mark", "Generate strokes from freestyle marked edges");
8989 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8990
8991 prop = RNA_def_property(srna, "use_intersection", PROP_BOOLEAN, PROP_NONE);
8993 RNA_def_property_ui_text(prop, "Use Intersection", "Generate strokes from intersections");
8994 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8995
8996 prop = RNA_def_property(srna, "use_light_contour", PROP_BOOLEAN, PROP_NONE);
8999 "Use Light Contour",
9000 "Generate light/shadow separation lines from a reference light object");
9001 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9002
9003 prop = RNA_def_property(srna, "use_shadow", PROP_BOOLEAN, PROP_NONE);
9005 prop, nullptr, "edge_types", MOD_LINEART_EDGE_FLAG_PROJECTED_SHADOW);
9007 prop, "Use Shadow", "Project contour lines using a light source object");
9008 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9009
9010 prop = RNA_def_property(srna, "shadow_region_filtering", PROP_ENUM, PROP_NONE);
9011 RNA_def_property_enum_sdna(prop, nullptr, "shadow_selection");
9012 RNA_def_property_enum_items(prop, modifier_lineart_shadow_region_filtering);
9014 "Shadow Region Filtering",
9015 "Select feature lines that comes from lit or shaded regions. Will not "
9016 "affect cast shadow and light contour since they are at the border.");
9017 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
9018
9019 prop = RNA_def_property(srna, "silhouette_filtering", PROP_ENUM, PROP_NONE);
9020 RNA_def_property_enum_sdna(prop, nullptr, "silhouette_selection");
9021 RNA_def_property_enum_items(prop, modifier_lineart_silhouette_filtering);
9022 RNA_def_property_ui_text(prop, "Silhouette Filtering", "Select contour or silhouette");
9023 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
9024
9025 prop = RNA_def_property(srna, "use_multiple_levels", PROP_BOOLEAN, PROP_NONE);
9026 RNA_def_property_boolean_sdna(prop, nullptr, "use_multiple_levels", 0);
9028 prop, "Use Occlusion Range", "Generate strokes from a range of occlusion levels");
9029 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9030
9031 prop = RNA_def_property(srna, "level_start", PROP_INT, PROP_NONE);
9033 prop, "Level Start", "Minimum number of occlusions for the generated strokes");
9034 RNA_def_property_range(prop, 0, 128);
9035 RNA_def_property_int_funcs(prop, nullptr, "rna_Lineart_start_level_set", nullptr);
9036 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9037
9038 prop = RNA_def_property(srna, "level_end", PROP_INT, PROP_NONE);
9040 prop, "Level End", "Maximum number of occlusions for the generated strokes");
9041 RNA_def_property_range(prop, 0, 128);
9042 RNA_def_property_int_funcs(prop, nullptr, "rna_Lineart_end_level_set", nullptr);
9043 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9044
9045 prop = RNA_def_property(srna, "target_layer", PROP_STRING, PROP_NONE);
9047 prop, "Layer", "Grease Pencil layer to which assign the generated strokes");
9048 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9049
9050 prop = RNA_def_property(srna, "target_material", PROP_POINTER, PROP_NONE);
9052 RNA_def_property_struct_type(prop, "Material");
9054 nullptr,
9055 "rna_GreasePencilLineartModifier_material_set",
9056 nullptr,
9057 "rna_GreasePencilModifier_material_poll");
9059 prop, "Material", "Grease Pencil material assigned to the generated strokes");
9060 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9061
9062 prop = RNA_def_property(srna, "source_vertex_group", PROP_STRING, PROP_NONE);
9064 prop,
9065 "Source Vertex Group",
9066 "Match the beginning of vertex group names from mesh objects, match all when left empty");
9067 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9068
9069 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
9070 RNA_def_property_string_sdna(prop, nullptr, "vgname");
9072 prop, nullptr, nullptr, "rna_GreasePencilLineartModifier_vgname_set");
9073 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for selected strokes");
9074 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9075
9076 prop = RNA_def_property(srna, "is_baked", PROP_BOOLEAN, PROP_NONE);
9078 RNA_def_property_ui_text(prop, "Is Baked", "This modifier has baked data");
9079 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9080
9081 prop = RNA_def_property(srna, "use_cache", PROP_BOOLEAN, PROP_NONE);
9084 "Use Cache",
9085 "Use cached scene data from the first Line Art modifier in the stack. "
9086 "Certain settings will be unavailable.");
9087 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9088
9089 prop = RNA_def_property(srna, "overscan", PROP_FLOAT, PROP_NONE);
9091 prop,
9092 "Overscan",
9093 "A margin to prevent strokes from ending abruptly at the edge of the image");
9094 RNA_def_property_ui_range(prop, 0.0f, 0.5f, 0.01f, 3);
9095 RNA_def_property_range(prop, 0.0f, 0.5f);
9096 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
9097
9098 prop = RNA_def_property(srna, "thickness", PROP_INT, PROP_NONE);
9099 RNA_def_property_ui_text(prop, "Thickness", "The thickness for the generated strokes");
9100 RNA_def_property_ui_range(prop, 1, 100, 1, 1);
9101 RNA_def_property_range(prop, 1, 200);
9102 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9103
9104 prop = RNA_def_property(srna, "opacity", PROP_FLOAT, PROP_FACTOR);
9105 RNA_def_property_ui_text(prop, "Opacity", "The strength value for the generate strokes");
9106 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.01f, 2);
9107 RNA_def_property_range(prop, 0.0f, 1.0f);
9108 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9109
9110 prop = RNA_def_property(srna, "use_material_mask", PROP_BOOLEAN, PROP_NONE);
9112 prop, nullptr, "mask_switches", LINEART_GPENCIL_MATERIAL_MASK_ENABLE);
9114 prop, "Use Material Mask", "Use material masks to filter out occluded strokes");
9115 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9116
9117 prop = RNA_def_property(srna, "use_material_mask_match", PROP_BOOLEAN, PROP_NONE);
9119 prop, nullptr, "mask_switches", LINEART_GPENCIL_MATERIAL_MASK_MATCH);
9121 prop, "Match Masks", "Require matching all material masks instead of just one");
9122 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9123
9124 prop = RNA_def_property(srna, "use_material_mask_bits", PROP_BOOLEAN, PROP_NONE);
9125 RNA_def_property_boolean_sdna(prop, nullptr, "material_mask_bits", 1);
9126 RNA_def_property_array(prop, 8);
9127 RNA_def_property_ui_text(prop, "Masks", "Mask bits to match from Material Line Art settings");
9128 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9129
9130 prop = RNA_def_property(srna, "use_intersection_match", PROP_BOOLEAN, PROP_NONE);
9132 prop, nullptr, "mask_switches", LINEART_GPENCIL_INTERSECTION_MATCH);
9134 prop, "Match Intersection", "Require matching all intersection masks instead of just one");
9135 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9136
9137 prop = RNA_def_property(srna, "use_intersection_mask", PROP_BOOLEAN, PROP_NONE);
9138 RNA_def_property_boolean_sdna(prop, nullptr, "intersection_mask", 1);
9139 RNA_def_property_array(prop, 8);
9140 RNA_def_property_ui_text(prop, "Masks", "Mask bits to match from Collection Line Art settings");
9141 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9142
9143 prop = RNA_def_property(srna, "use_crease_on_smooth", PROP_BOOLEAN, PROP_NONE);
9145 prop, nullptr, "calculation_flags", MOD_LINEART_USE_CREASE_ON_SMOOTH_SURFACES);
9147 prop, "Crease On Smooth Surfaces", "Allow crease edges to show inside smooth surfaces");
9148 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9149
9150 prop = RNA_def_property(srna, "use_crease_on_sharp", PROP_BOOLEAN, PROP_NONE);
9152 prop, nullptr, "calculation_flags", MOD_LINEART_USE_CREASE_ON_SHARP_EDGES);
9153 RNA_def_property_ui_text(prop, "Crease On Sharp Edges", "Allow crease to show on sharp edges");
9154 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9155
9156 prop = RNA_def_property(srna, "use_image_boundary_trimming", PROP_BOOLEAN, PROP_NONE);
9158 prop, nullptr, "calculation_flags", MOD_LINEART_USE_IMAGE_BOUNDARY_TRIMMING);
9160 prop,
9161 "Image Boundary Trimming",
9162 "Trim all edges right at the boundary of image (including overscan region)");
9163
9164 prop = RNA_def_property(srna, "use_back_face_culling", PROP_BOOLEAN, PROP_NONE);
9166 prop, nullptr, "calculation_flags", MOD_LINEART_USE_BACK_FACE_CULLING);
9168 prop,
9169 "Back Face Culling",
9170 "Remove all back faces to speed up calculation, this will create edges in "
9171 "different occlusion levels than when disabled");
9172 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9173
9174 prop = RNA_def_property(srna, "shadow_camera_near", PROP_FLOAT, PROP_NONE);
9175 RNA_def_property_ui_text(prop, "Shadow Camera Near", "Near clipping distance of shadow camera");
9176 RNA_def_property_ui_range(prop, 0.0f, 500.0f, 0.1f, 2);
9177 RNA_def_property_range(prop, 0.0f, 10000.0f);
9178 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9179
9180 prop = RNA_def_property(srna, "shadow_camera_far", PROP_FLOAT, PROP_NONE);
9181 RNA_def_property_ui_text(prop, "Shadow Camera Far", "Far clipping distance of shadow camera");
9182 RNA_def_property_ui_range(prop, 0.0f, 500.0f, 0.1f, 2);
9183 RNA_def_property_range(prop, 0.0f, 10000.0f);
9184 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9185
9186 prop = RNA_def_property(srna, "shadow_camera_size", PROP_FLOAT, PROP_NONE);
9188 prop,
9189 "Shadow Camera Size",
9190 "Represents the \"Orthographic Scale\" of an orthographic camera. "
9191 "If the camera is positioned at the light's location with this scale, it will "
9192 "represent the coverage of the shadow \"camera\".");
9193 RNA_def_property_ui_range(prop, 0.0f, 500.0f, 0.1f, 2);
9194 RNA_def_property_range(prop, 0.0f, 10000.0f);
9195
9196 prop = RNA_def_property(srna, "use_invert_collection", PROP_BOOLEAN, PROP_NONE);
9199 "Invert Collection Filtering",
9200 "Select everything except lines from specified collection");
9201 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9202
9203 prop = RNA_def_property(srna, "use_invert_silhouette", PROP_BOOLEAN, PROP_NONE);
9205 RNA_def_property_ui_text(prop, "Invert Silhouette Filtering", "Select anti-silhouette lines");
9206 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9207
9209}
9210
9212{
9213 StructRNA *srna;
9214 PropertyRNA *prop;
9215
9216 srna = RNA_def_struct(brna, "GreasePencilSmoothModifier", "Modifier");
9217 RNA_def_struct_ui_text(srna, "Smooth Modifier", "Smooth effect modifier");
9218 RNA_def_struct_sdna(srna, "GreasePencilSmoothModifierData");
9219 RNA_def_struct_ui_icon(srna, ICON_MOD_SMOOTH);
9220
9223 srna, "rna_GreasePencilSmoothModifier_material_filter_set");
9225 srna, "rna_GreasePencilSmoothModifier_vertex_group_name_set");
9227
9228 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
9229
9231
9232 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR);
9233 RNA_def_property_float_sdna(prop, nullptr, "factor");
9234 RNA_def_property_range(prop, 0, 1);
9235 RNA_def_property_ui_text(prop, "Factor", "Amount of smooth to apply");
9236 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9237
9238 prop = RNA_def_property(srna, "use_edit_position", PROP_BOOLEAN, PROP_NONE);
9241 prop, "Affect Position", "The modifier affects the position of the point");
9242 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9243
9244 prop = RNA_def_property(srna, "use_edit_strength", PROP_BOOLEAN, PROP_NONE);
9247 prop, "Affect Strength", "The modifier affects the color strength of the point");
9248 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9249
9250 prop = RNA_def_property(srna, "use_edit_thickness", PROP_BOOLEAN, PROP_NONE);
9253 prop, "Affect Thickness", "The modifier affects the thickness of the point");
9254 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9255
9256 prop = RNA_def_property(srna, "use_edit_uv", PROP_BOOLEAN, PROP_NONE);
9259 prop, "Affect UV", "The modifier affects the UV rotation factor of the point");
9260 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9261
9262 prop = RNA_def_property(srna, "step", PROP_INT, PROP_NONE);
9263 RNA_def_property_int_sdna(prop, nullptr, "step");
9264 RNA_def_property_range(prop, 1, 1000);
9266 prop, "Steps", "Number of times to apply smooth (high numbers can reduce fps)");
9267 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9268
9269 prop = RNA_def_property(srna, "use_keep_shape", PROP_BOOLEAN, PROP_NONE);
9271 RNA_def_property_ui_text(prop, "Keep Shape", "Smooth the details, but keep the overall shape");
9272 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9273
9274 prop = RNA_def_property(srna, "use_smooth_ends", PROP_BOOLEAN, PROP_NONE);
9276 RNA_def_property_ui_text(prop, "Smooth Ends", "Smooth ends of strokes");
9277 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9278
9280}
9281
9283{
9284 StructRNA *srna;
9285 PropertyRNA *prop;
9286
9288 static EnumPropertyItem offset_mode_items[] = {
9289 {MOD_GREASE_PENCIL_OFFSET_RANDOM, "RANDOM", 0, "Random", "Randomize stroke offset"},
9290 {MOD_GREASE_PENCIL_OFFSET_LAYER, "LAYER", 0, "Layer", "Offset layers by the same factor"},
9292 "STROKE",
9293 0,
9294 "Stroke",
9295 "Offset strokes by the same factor based on stroke draw order"},
9297 "MATERIAL",
9298 0,
9299 "Material",
9300 "Offset materials by the same factor"},
9301 {0, nullptr, 0, nullptr, nullptr},
9302 };
9303
9304 srna = RNA_def_struct(brna, "GreasePencilOffsetModifier", "Modifier");
9305 RNA_def_struct_ui_text(srna, "Grease Pencil Offset Modifier", "");
9306 RNA_def_struct_sdna(srna, "GreasePencilOffsetModifierData");
9307 RNA_def_struct_ui_icon(srna, ICON_MOD_OFFSET);
9308
9311 srna, "rna_GreasePencilOffsetModifier_material_filter_set");
9313 srna, "rna_GreasePencilOffsetModifier_vertex_group_name_set");
9314
9315 rna_def_modifier_panel_open_prop(srna, "open_general_panel", 0);
9316 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 1);
9317
9318 prop = RNA_def_property(srna, "offset_mode", PROP_ENUM, PROP_NONE);
9319 RNA_def_property_enum_items(prop, offset_mode_items);
9320 RNA_def_property_ui_text(prop, "Mode", "");
9321 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9322
9324
9325 prop = RNA_def_property(srna, "location", PROP_FLOAT, PROP_TRANSLATION);
9326 RNA_def_property_float_sdna(prop, nullptr, "loc");
9327 RNA_def_property_ui_text(prop, "Location", "Values for change location");
9329 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9330
9331 prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_EULER);
9332 RNA_def_property_float_sdna(prop, nullptr, "rot");
9333 RNA_def_property_ui_text(prop, "Rotation", "Values for changes in rotation");
9335 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9336
9337 prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ);
9338 RNA_def_property_float_sdna(prop, nullptr, "scale");
9339 RNA_def_property_ui_text(prop, "Scale", "Values for changes in scale");
9341 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9342
9343 prop = RNA_def_property(srna, "stroke_location", PROP_FLOAT, PROP_XYZ);
9344 RNA_def_property_float_sdna(prop, nullptr, "stroke_loc");
9345 RNA_def_property_ui_text(prop, "Random Offset", "Value for changes in location");
9347 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9348
9349 prop = RNA_def_property(srna, "stroke_rotation", PROP_FLOAT, PROP_EULER);
9350 RNA_def_property_float_sdna(prop, nullptr, "stroke_rot");
9351 RNA_def_property_ui_text(prop, "Random Rotation", "Value for changes in rotation");
9353 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9354
9355 prop = RNA_def_property(srna, "stroke_scale", PROP_FLOAT, PROP_XYZ);
9356 RNA_def_property_float_sdna(prop, nullptr, "stroke_scale");
9357 RNA_def_property_ui_text(prop, "Scale", "Value for changes in scale");
9359 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9360
9361 prop = RNA_def_property(srna, "seed", PROP_INT, PROP_UNSIGNED);
9362 RNA_def_property_ui_text(prop, "Seed", "Random seed");
9363 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9364
9365 prop = RNA_def_property(srna, "stroke_step", PROP_INT, PROP_UNSIGNED);
9366 RNA_def_property_ui_text(prop, "Step", "Number of elements that will be grouped");
9367 RNA_def_property_range(prop, 1, 500);
9368 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9369
9370 prop = RNA_def_property(srna, "stroke_start_offset", PROP_INT, PROP_UNSIGNED);
9371 RNA_def_property_ui_text(prop, "Start Offset", "Offset starting point");
9372 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9373
9374 prop = RNA_def_property(srna, "use_uniform_random_scale", PROP_BOOLEAN, PROP_NONE);
9376 prop, nullptr, "flag", MOD_GREASE_PENCIL_OFFSET_UNIFORM_RANDOM_SCALE);
9378 prop, "Uniform Scale", "Use the same random seed for each scale axis for a uniform scale");
9379 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9380
9382}
9383
9385{
9386 StructRNA *srna;
9387 PropertyRNA *prop;
9388
9389 static const EnumPropertyItem modifier_noise_random_mode_items[] = {
9390 {GP_NOISE_RANDOM_STEP, "STEP", 0, "Steps", "Randomize every number of frames"},
9391 {GP_NOISE_RANDOM_KEYFRAME, "KEYFRAME", 0, "Keyframes", "Randomize on keyframes only"},
9392 {0, nullptr, 0, nullptr, nullptr},
9393 };
9394
9395 srna = RNA_def_struct(brna, "GreasePencilNoiseModifier", "Modifier");
9396 RNA_def_struct_ui_text(srna, "Grease Pencil Noise Modifier", "Noise effect modifier");
9397 RNA_def_struct_sdna(srna, "GreasePencilNoiseModifierData");
9398 RNA_def_struct_ui_icon(srna, ICON_MOD_NOISE);
9399
9402 srna, "rna_GreasePencilNoiseModifier_material_filter_set");
9404 srna, "rna_GreasePencilNoiseModifier_vertex_group_name_set");
9406
9407 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
9408 rna_def_modifier_panel_open_prop(srna, "open_random_panel", 1);
9409
9411
9412 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR);
9413 RNA_def_property_float_sdna(prop, nullptr, "factor");
9414 RNA_def_property_range(prop, 0.0, FLT_MAX);
9415 RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 2);
9416 RNA_def_property_ui_text(prop, "Position Factor", "Amount of noise to apply");
9417 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9418
9419 prop = RNA_def_property(srna, "factor_strength", PROP_FLOAT, PROP_FACTOR);
9420 RNA_def_property_float_sdna(prop, nullptr, "factor_strength");
9421 RNA_def_property_range(prop, 0.0, FLT_MAX);
9422 RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 2);
9423 RNA_def_property_ui_text(prop, "Strength Factor", "Amount of noise to apply to opacity");
9424 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9425
9426 prop = RNA_def_property(srna, "factor_thickness", PROP_FLOAT, PROP_FACTOR);
9427 RNA_def_property_float_sdna(prop, nullptr, "factor_thickness");
9428 RNA_def_property_range(prop, 0.0, FLT_MAX);
9429 RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 2);
9430 RNA_def_property_ui_text(prop, "Thickness Factor", "Amount of noise to apply to thickness");
9431 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9432
9433 prop = RNA_def_property(srna, "factor_uvs", PROP_FLOAT, PROP_FACTOR);
9434 RNA_def_property_float_sdna(prop, nullptr, "factor_uvs");
9435 RNA_def_property_range(prop, 0.0, FLT_MAX);
9436 RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 2);
9437 RNA_def_property_ui_text(prop, "UV Factor", "Amount of noise to apply to UV rotation");
9438 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9439
9440 prop = RNA_def_property(srna, "use_random", PROP_BOOLEAN, PROP_NONE);
9441 RNA_def_property_boolean_sdna(prop, nullptr, "flag", GP_NOISE_USE_RANDOM);
9442 RNA_def_property_ui_text(prop, "Random", "Use random values over time");
9443 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9444
9445 prop = RNA_def_property(srna, "seed", PROP_INT, PROP_UNSIGNED);
9446 RNA_def_property_ui_text(prop, "Noise Seed", "Random seed");
9447 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9448
9449 prop = RNA_def_property(srna, "noise_scale", PROP_FLOAT, PROP_FACTOR);
9450 RNA_def_property_float_sdna(prop, nullptr, "noise_scale");
9451 RNA_def_property_range(prop, 0.0, 1.0);
9452 RNA_def_property_ui_text(prop, "Noise Scale", "Scale the noise frequency");
9453 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9454
9455 prop = RNA_def_property(srna, "noise_offset", PROP_FLOAT, PROP_FACTOR);
9456 RNA_def_property_float_sdna(prop, nullptr, "noise_offset");
9457 RNA_def_property_range(prop, 0.0, FLT_MAX);
9458 RNA_def_property_ui_range(prop, 0.0, 100.0, 0.1, 3);
9459 RNA_def_property_ui_text(prop, "Noise Offset", "Offset the noise along the strokes");
9460 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9461
9462 prop = RNA_def_property(srna, "step", PROP_INT, PROP_NONE);
9463 RNA_def_property_int_sdna(prop, nullptr, "step");
9464 RNA_def_property_range(prop, 1, 100);
9465 RNA_def_property_ui_text(prop, "Step", "Number of frames between randomization steps");
9466 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9467
9468 prop = RNA_def_property(srna, "random_mode", PROP_ENUM, PROP_NONE);
9469 RNA_def_property_enum_sdna(prop, nullptr, "noise_mode");
9470 RNA_def_property_enum_items(prop, modifier_noise_random_mode_items);
9471 RNA_def_property_ui_text(prop, "Mode", "Where to perform randomization");
9472
9474}
9475
9477{
9478 StructRNA *srna;
9479 PropertyRNA *prop;
9480 static const EnumPropertyItem gpencil_length_mode_items[] = {
9481 {GP_LENGTH_RELATIVE, "RELATIVE", 0, "Relative", "Length in ratio to the stroke's length"},
9482 {GP_LENGTH_ABSOLUTE, "ABSOLUTE", 0, "Absolute", "Length in geometry space"},
9483 {0, nullptr, 0, nullptr, nullptr},
9484 };
9485
9486 srna = RNA_def_struct(brna, "GreasePencilLengthModifier", "Modifier");
9487 RNA_def_struct_ui_text(srna, "Length Modifier", "Stretch or shrink strokes");
9488 RNA_def_struct_sdna(srna, "GreasePencilLengthModifierData");
9489 RNA_def_struct_ui_icon(srna, ICON_MOD_LENGTH);
9490
9493 srna, "rna_GreasePencilLengthModifier_material_filter_set");
9494
9495 rna_def_modifier_panel_open_prop(srna, "open_random_panel", 0);
9496 rna_def_modifier_panel_open_prop(srna, "open_curvature_panel", 1);
9497 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 2);
9498
9500
9501 prop = RNA_def_property(srna, "start_factor", PROP_FLOAT, PROP_NONE);
9502 RNA_def_property_float_sdna(prop, nullptr, "start_fac");
9503 RNA_def_property_ui_range(prop, -10.0f, 10.0f, 0.1, 2);
9505 prop, "Start Factor", "Added length to the start of each stroke relative to its length");
9506 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9507
9508 prop = RNA_def_property(srna, "end_factor", PROP_FLOAT, PROP_NONE);
9509 RNA_def_property_float_sdna(prop, nullptr, "end_fac");
9510 RNA_def_property_ui_range(prop, -10.0f, 10.0f, 0.1, 2);
9512 prop, "End Factor", "Added length to the end of each stroke relative to its length");
9513 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9514
9515 prop = RNA_def_property(srna, "start_length", PROP_FLOAT, PROP_DISTANCE);
9516 RNA_def_property_float_sdna(prop, nullptr, "start_fac");
9517 RNA_def_property_ui_range(prop, -100.0f, 100.0f, 0.1f, 3);
9519 prop, "Start Factor", "Absolute added length to the start of each stroke");
9520 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9521
9522 prop = RNA_def_property(srna, "end_length", PROP_FLOAT, PROP_DISTANCE);
9523 RNA_def_property_float_sdna(prop, nullptr, "end_fac");
9524 RNA_def_property_ui_range(prop, -100.0f, 100.0f, 0.1f, 3);
9525 RNA_def_property_ui_text(prop, "End Factor", "Absolute added length to the end of each stroke");
9526 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9527
9528 prop = RNA_def_property(srna, "random_start_factor", PROP_FLOAT, PROP_NONE);
9529 RNA_def_property_float_sdna(prop, nullptr, "rand_start_fac");
9530 RNA_def_property_ui_range(prop, -10.0f, 10.0f, 0.1, 1);
9532 prop, "Random Start Factor", "Size of random length added to the start of each stroke");
9533 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9534
9535 prop = RNA_def_property(srna, "random_end_factor", PROP_FLOAT, PROP_NONE);
9536 RNA_def_property_float_sdna(prop, nullptr, "rand_end_fac");
9537 RNA_def_property_ui_range(prop, -10.0f, 10.0f, 0.1, 1);
9539 prop, "Random End Factor", "Size of random length added to the end of each stroke");
9540 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9541
9542 prop = RNA_def_property(srna, "random_offset", PROP_FLOAT, PROP_NONE);
9543 RNA_def_property_float_sdna(prop, nullptr, "rand_offset");
9544 RNA_def_property_ui_range(prop, 0.0f, 100.0f, 0.1, 3);
9546 prop, "Random Noise Offset", "Smoothly offset each stroke's random value");
9547 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9548
9549 prop = RNA_def_property(srna, "use_random", PROP_BOOLEAN, PROP_NONE);
9551 RNA_def_property_ui_text(prop, "Random", "Use random values over time");
9552 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9553
9554 prop = RNA_def_property(srna, "seed", PROP_INT, PROP_UNSIGNED);
9555 RNA_def_property_ui_text(prop, "Seed", "Random seed");
9556 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9557
9558 prop = RNA_def_property(srna, "step", PROP_INT, PROP_NONE);
9559 RNA_def_property_int_sdna(prop, nullptr, "step");
9560 RNA_def_property_range(prop, 1, 100);
9561 RNA_def_property_ui_text(prop, "Step", "Number of frames between randomization steps");
9562 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9563
9564 prop = RNA_def_property(srna, "overshoot_factor", PROP_FLOAT, PROP_FACTOR);
9565 RNA_def_property_float_sdna(prop, nullptr, "overshoot_fac");
9566 RNA_def_property_range(prop, 0.0f, 1.0f);
9568 prop,
9569 "Used Length",
9570 "Defines what portion of the stroke is used for the calculation of the extension");
9571 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9572
9573 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
9574 RNA_def_property_enum_sdna(prop, nullptr, "mode");
9575 RNA_def_property_enum_items(prop, gpencil_length_mode_items);
9576 RNA_def_property_ui_text(prop, "Mode", "Mode to define length");
9577 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9578
9579 prop = RNA_def_property(srna, "use_curvature", PROP_BOOLEAN, PROP_NONE);
9581 RNA_def_property_ui_text(prop, "Use Curvature", "Follow the curvature of the stroke");
9582 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9583
9584 prop = RNA_def_property(srna, "invert_curvature", PROP_BOOLEAN, PROP_NONE);
9587 prop, "Invert Curvature", "Invert the curvature of the stroke's extension");
9588 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9589
9590 prop = RNA_def_property(srna, "point_density", PROP_FLOAT, PROP_NONE);
9591 RNA_def_property_range(prop, 0.1f, 1000.0f);
9592 RNA_def_property_ui_range(prop, 0.1f, 1000.0f, 1.0f, 1);
9595 prop, "Point Density", "Multiplied by Start/End for the total added point count");
9596 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9597
9598 prop = RNA_def_property(srna, "segment_influence", PROP_FLOAT, PROP_FACTOR);
9599 RNA_def_property_range(prop, -2.0f, 3.0f);
9600 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1f, 2);
9602 "Segment Influence",
9603 "Factor to determine how much the length of the individual segments "
9604 "should influence the final computed curvature. Higher factors makes "
9605 "small segments influence the overall curvature less.");
9606 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9607
9608 prop = RNA_def_property(srna, "max_angle", PROP_FLOAT, PROP_ANGLE);
9610 "Filter Angle",
9611 "Ignore points on the stroke that deviate from their neighbors by more "
9612 "than this angle when determining the extrapolation shape");
9613 RNA_def_property_range(prop, 0.0f, DEG2RAD(180.0f));
9614 RNA_def_property_ui_range(prop, 0.0f, DEG2RAD(179.5f), 10.0f, 1);
9615 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
9616
9618}
9619
9621{
9622 StructRNA *srna;
9623 PropertyRNA *prop;
9624
9625 srna = RNA_def_struct(brna, "GreasePencilMirrorModifier", "Modifier");
9626 RNA_def_struct_ui_text(srna, "Grease Pencil Mirror Modifier", "");
9627 RNA_def_struct_sdna(srna, "GreasePencilMirrorModifierData");
9628 RNA_def_struct_ui_icon(srna, ICON_MOD_MIRROR);
9629
9632 srna, "rna_GreasePencilMirrorModifier_material_filter_set");
9633
9634 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
9635
9637
9638 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
9639 RNA_def_property_ui_text(prop, "Object", "Object used as center");
9641 prop, nullptr, "rna_GreasePencilMirrorModifier_object_set", nullptr, nullptr);
9643 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
9644
9645 prop = RNA_def_property(srna, "use_axis_x", PROP_BOOLEAN, PROP_NONE);
9647 RNA_def_property_ui_text(prop, "X", "Mirror the X axis");
9648 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9649
9650 prop = RNA_def_property(srna, "use_axis_y", PROP_BOOLEAN, PROP_NONE);
9652 RNA_def_property_ui_text(prop, "Y", "Mirror the Y axis");
9653 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9654
9655 prop = RNA_def_property(srna, "use_axis_z", PROP_BOOLEAN, PROP_NONE);
9657 RNA_def_property_ui_text(prop, "Z", "Mirror the Z axis");
9658 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9659
9661}
9662
9664{
9665 StructRNA *srna;
9666 PropertyRNA *prop;
9667
9668 srna = RNA_def_struct(brna, "GreasePencilThickModifierData", "Modifier");
9669 RNA_def_struct_ui_text(srna, "Grease Pencil Thickness Modifier", "Adjust stroke thickness");
9670 RNA_def_struct_sdna(srna, "GreasePencilThickModifierData");
9671 RNA_def_struct_ui_icon(srna, ICON_MOD_THICKNESS);
9672
9675 srna, "rna_GreasePencilThickModifier_material_filter_set");
9677 srna, "rna_GreasePencilThickModifier_vertex_group_name_set");
9679
9680 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
9681
9683
9684 prop = RNA_def_property(srna, "thickness", PROP_FLOAT, PROP_NONE);
9685 RNA_def_property_float_sdna(prop, nullptr, "thickness");
9686 RNA_def_property_range(prop, -10.0f, 100.0f);
9687 RNA_def_property_ui_range(prop, -1.0f, 1.0f, 0.005, 3);
9688 RNA_def_property_ui_text(prop, "Thickness", "Absolute thickness to apply everywhere");
9689 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9690
9691 prop = RNA_def_property(srna, "thickness_factor", PROP_FLOAT, PROP_NONE);
9692 RNA_def_property_float_sdna(prop, nullptr, "thickness_fac");
9693 RNA_def_property_range(prop, 0.0, FLT_MAX);
9694 RNA_def_property_ui_range(prop, 0.0, 10.0, 0.1, 3);
9695 RNA_def_property_ui_text(prop, "Thickness Factor", "Factor to multiply the thickness with");
9696 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9697
9698 prop = RNA_def_property(srna, "use_weight_factor", PROP_BOOLEAN, PROP_NONE);
9700 RNA_def_property_ui_text(prop, "Weighted", "Use weight to modulate effect");
9701 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9702
9703 prop = RNA_def_property(srna, "use_uniform_thickness", PROP_BOOLEAN, PROP_NONE);
9705 RNA_def_property_ui_text(prop, "Uniform Thickness", "Replace the stroke thickness");
9706 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9707
9709}
9710
9712{
9713 StructRNA *srna;
9714 PropertyRNA *prop;
9715
9716 srna = RNA_def_struct(brna, "GreasePencilArrayModifier", "Modifier");
9717 RNA_def_struct_ui_text(srna, "Instance Modifier", "Create grid of duplicate instances");
9718 RNA_def_struct_sdna(srna, "GreasePencilArrayModifierData");
9719 RNA_def_struct_ui_icon(srna, ICON_MOD_ARRAY);
9720
9723 srna, "rna_GreasePencilArrayModifier_material_filter_set");
9724
9725 rna_def_modifier_panel_open_prop(srna, "open_constant_offset_panel", 0);
9726 rna_def_modifier_panel_open_prop(srna, "open_relative_offset_panel", 1);
9727 rna_def_modifier_panel_open_prop(srna, "open_object_offset_panel", 2);
9728 rna_def_modifier_panel_open_prop(srna, "open_randomize_panel", 3);
9729 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 4);
9730
9732
9733 prop = RNA_def_property(srna, "count", PROP_INT, PROP_NONE);
9734 RNA_def_property_range(prop, 1, SHRT_MAX);
9735 RNA_def_property_ui_range(prop, 1, 50, 1, -1);
9736 RNA_def_property_ui_text(prop, "Count", "Number of items");
9737 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9738
9739 /* Offset parameters */
9740 prop = RNA_def_property(srna, "offset_object", PROP_POINTER, PROP_NONE);
9741 RNA_def_property_pointer_sdna(prop, nullptr, "object");
9743 prop,
9744 "Offset Object",
9745 "Use the location and rotation of another object to determine the distance and "
9746 "rotational change between arrayed items");
9748 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
9749
9750 prop = RNA_def_property(srna, "constant_offset", PROP_FLOAT, PROP_TRANSLATION);
9751 RNA_def_property_float_sdna(prop, nullptr, "offset");
9752 RNA_def_property_ui_text(prop, "Constant Offset", "Value for the distance between items");
9754 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9755
9756 prop = RNA_def_property(srna, "relative_offset", PROP_FLOAT, PROP_XYZ);
9757 RNA_def_property_float_sdna(prop, nullptr, "shift");
9759 prop,
9760 "Relative Offset",
9761 "The size of the geometry will determine the distance between arrayed items");
9763 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9764
9765 prop = RNA_def_property(srna, "random_offset", PROP_FLOAT, PROP_XYZ);
9766 RNA_def_property_float_sdna(prop, nullptr, "rnd_offset");
9767 RNA_def_property_ui_text(prop, "Random Offset", "Value for changes in location");
9769 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9770
9771 prop = RNA_def_property(srna, "random_rotation", PROP_FLOAT, PROP_EULER);
9772 RNA_def_property_float_sdna(prop, nullptr, "rnd_rot");
9773 RNA_def_property_ui_text(prop, "Random Rotation", "Value for changes in rotation");
9775 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9776
9777 prop = RNA_def_property(srna, "random_scale", PROP_FLOAT, PROP_XYZ);
9778 RNA_def_property_float_sdna(prop, nullptr, "rnd_scale");
9779 RNA_def_property_ui_text(prop, "Scale", "Value for changes in scale");
9781 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9782
9783 prop = RNA_def_property(srna, "seed", PROP_INT, PROP_UNSIGNED);
9784 RNA_def_property_ui_text(prop, "Seed", "Random seed");
9785 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9786
9787 prop = RNA_def_property(srna, "replace_material", PROP_INT, PROP_NONE);
9788 RNA_def_property_int_sdna(prop, nullptr, "mat_rpl");
9789 RNA_def_property_range(prop, 0, SHRT_MAX);
9791 prop,
9792 "Material",
9793 "Index of the material used for generated strokes (0 keep original material)");
9794 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9795
9796 prop = RNA_def_property(srna, "use_constant_offset", PROP_BOOLEAN, PROP_NONE);
9798 RNA_def_property_ui_text(prop, "Offset", "Enable offset");
9799 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9800
9801 prop = RNA_def_property(srna, "use_object_offset", PROP_BOOLEAN, PROP_NONE);
9804 prop, "Use Object Offset", "Add another object's transformation to the total offset");
9805 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9806
9807 prop = RNA_def_property(srna, "use_relative_offset", PROP_BOOLEAN, PROP_NONE);
9809 RNA_def_property_ui_text(prop, "Shift", "Add an offset relative to the object's bounding box");
9810 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9811
9812 prop = RNA_def_property(srna, "use_uniform_random_scale", PROP_BOOLEAN, PROP_NONE);
9814 prop, nullptr, "flag", MOD_GREASE_PENCIL_ARRAY_UNIFORM_RANDOM_SCALE);
9816 prop, "Uniform Scale", "Use the same random seed for each scale axis for a uniform scale");
9817 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9818
9820}
9821
9823{
9824 StructRNA *srna;
9825 PropertyRNA *prop;
9826
9827 srna = RNA_def_struct(brna, "GreasePencilLatticeModifier", "Modifier");
9829 srna, "Grease Pencil Lattice Modifier", "Deform strokes using a lattice object");
9830 RNA_def_struct_sdna(srna, "GreasePencilLatticeModifierData");
9831 RNA_def_struct_ui_icon(srna, ICON_MOD_LATTICE);
9832
9835 srna, "rna_GreasePencilLatticeModifier_material_filter_set");
9837 srna, "rna_GreasePencilLatticeModifier_vertex_group_name_set");
9838
9839 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
9840
9842
9843 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
9844 RNA_def_property_ui_text(prop, "Object", "Lattice object to deform with");
9846 nullptr,
9847 "rna_GreasePencilLatticeModifier_object_set",
9848 nullptr,
9849 "rna_Lattice_object_poll");
9851 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
9852
9853 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
9855 RNA_def_property_ui_range(prop, 0, 1, 10, 2);
9856 RNA_def_property_ui_text(prop, "Strength", "Strength of modifier effect");
9857 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9858
9860}
9861
9863{
9864 StructRNA *srna;
9865 PropertyRNA *prop;
9866
9867 srna = RNA_def_struct(brna, "GreasePencilDashModifierSegment", nullptr);
9868 RNA_def_struct_ui_text(srna, "Dash Modifier Segment", "Configuration for a single dash segment");
9869 RNA_def_struct_sdna(srna, "GreasePencilDashModifierSegment");
9870 RNA_def_struct_path_func(srna, "rna_GreasePencilDashModifierSegment_path");
9871
9872 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
9873 RNA_def_property_ui_text(prop, "Name", "Name of the dash segment");
9875 prop, nullptr, nullptr, "rna_GreasePencilDashModifierSegment_name_set");
9876 RNA_def_struct_name_property(srna, prop);
9878
9879 prop = RNA_def_property(srna, "dash", PROP_INT, PROP_NONE);
9882 prop,
9883 "Dash",
9884 "The number of consecutive points from the original stroke to include in this segment");
9885 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9886
9887 prop = RNA_def_property(srna, "gap", PROP_INT, PROP_NONE);
9889 RNA_def_property_ui_text(prop, "Gap", "The number of points skipped after this segment");
9890 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9891
9892 prop = RNA_def_property(srna, "radius", PROP_FLOAT, PROP_FACTOR | PROP_UNSIGNED);
9893 RNA_def_property_ui_range(prop, 0, 1, 0.1, 2);
9895 prop, "Radius", "The factor to apply to the original point's radius for the new points");
9896 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9897
9898 prop = RNA_def_property(srna, "opacity", PROP_FLOAT, PROP_FACTOR);
9899 RNA_def_property_ui_range(prop, 0, 1, 0.1, 2);
9901 prop, "Opacity", "The factor to apply to the original point's opacity for the new points");
9902 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9903
9904 prop = RNA_def_property(srna, "material_index", PROP_INT, PROP_NONE);
9905 RNA_def_property_int_sdna(prop, nullptr, "mat_nr");
9908 prop,
9909 "Material Index",
9910 "Use this index on generated segment. -1 means using the existing material.");
9911 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9912
9913 prop = RNA_def_property(srna, "use_cyclic", PROP_BOOLEAN, PROP_NONE);
9915 RNA_def_property_ui_text(prop, "Cyclic", "Enable cyclic on individual stroke dashes");
9916 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9917}
9918
9920{
9921 StructRNA *srna;
9922 PropertyRNA *prop;
9923
9924 srna = RNA_def_struct(brna, "GreasePencilDashModifierData", "Modifier");
9926 srna, "Grease Pencil Dash Modifier", "Create dot-dash effect for strokes");
9927 RNA_def_struct_sdna(srna, "GreasePencilDashModifierData");
9928 RNA_def_struct_ui_icon(srna, ICON_MOD_DASH);
9929
9932 srna, "rna_GreasePencilDashModifier_material_filter_set");
9933
9934 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
9935
9937
9938 prop = RNA_def_property(srna, "segments", PROP_COLLECTION, PROP_NONE);
9939 RNA_def_property_struct_type(prop, "GreasePencilDashModifierSegment");
9940 RNA_def_property_collection_sdna(prop, nullptr, "segments_array", nullptr);
9942 "rna_GreasePencilDashModifier_segments_begin",
9943 "rna_iterator_array_next",
9944 "rna_iterator_array_end",
9945 "rna_iterator_array_get",
9946 nullptr,
9947 nullptr,
9948 nullptr,
9949 nullptr);
9950 RNA_def_property_ui_text(prop, "Segments", "");
9951
9952 prop = RNA_def_property(srna, "segment_active_index", PROP_INT, PROP_UNSIGNED);
9954 RNA_def_property_ui_text(prop, "Active Dash Segment Index", "Active index in the segment list");
9955
9956 prop = RNA_def_property(srna, "dash_offset", PROP_INT, PROP_NONE);
9958 prop,
9959 "Offset",
9960 "Offset into each stroke before the beginning of the dashed segment generation");
9961 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9962
9964}
9965
9967{
9968 StructRNA *srna;
9969 PropertyRNA *prop;
9970
9971 static const EnumPropertyItem axis_items[] = {
9972 {0, "X", 0, "X", ""},
9973 {1, "Y", 0, "Y", ""},
9974 {2, "Z", 0, "Z", ""},
9975 {0, nullptr, 0, nullptr, nullptr},
9976 };
9977
9978 static const EnumPropertyItem space_items[] = {
9979 {MOD_GREASE_PENCIL_WEIGHT_ANGLE_SPACE_LOCAL, "LOCAL", 0, "Local Space", ""},
9980 {MOD_GREASE_PENCIL_WEIGHT_ANGLE_SPACE_WORLD, "WORLD", 0, "World Space", ""},
9981 {0, nullptr, 0, nullptr, nullptr},
9982 };
9983
9984 srna = RNA_def_struct(brna, "GreasePencilWeightAngleModifier", "Modifier");
9985 RNA_def_struct_ui_text(srna, "Weight Modifier Angle", "Calculate Vertex Weight dynamically");
9986 RNA_def_struct_sdna(srna, "GreasePencilWeightAngleModifierData");
9987 RNA_def_struct_ui_icon(srna, ICON_MOD_VERTEX_WEIGHT);
9988
9991 srna, "rna_GreasePencilWeightAngleModifier_material_filter_set");
9993 srna, "rna_GreasePencilWeightAngleModifier_vertex_group_name_set");
9994
9995 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
9996
9998
9999 prop = RNA_def_property(srna, "target_vertex_group", PROP_STRING, PROP_NONE);
10000 RNA_def_property_string_sdna(prop, nullptr, "target_vgname");
10001 RNA_def_property_ui_text(prop, "Vertex Group", "Output Vertex group");
10003 prop, nullptr, nullptr, "rna_GreasePencilWeightAngleModifier_target_vgname_set");
10004 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10005
10006 prop = RNA_def_property(srna, "use_multiply", PROP_BOOLEAN, PROP_NONE);
10009 prop,
10010 "Multiply Weights",
10011 "Multiply the calculated weights with the existing values in the vertex group");
10012 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10013
10014 prop = RNA_def_property(srna, "use_invert_output", PROP_BOOLEAN, PROP_NONE);
10016 RNA_def_property_ui_text(prop, "Invert", "Invert output weight values");
10017 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10018
10019 prop = RNA_def_property(srna, "angle", PROP_FLOAT, PROP_ANGLE);
10020 RNA_def_property_float_sdna(prop, nullptr, "angle");
10021 RNA_def_property_ui_text(prop, "Angle", "Angle");
10022 RNA_def_property_range(prop, 0.0f, DEG2RAD(180.0f));
10023 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
10024
10025 prop = RNA_def_property(srna, "axis", PROP_ENUM, PROP_NONE);
10026 RNA_def_property_enum_sdna(prop, nullptr, "axis");
10027 RNA_def_property_enum_items(prop, axis_items);
10028 RNA_def_property_ui_text(prop, "Axis", "");
10029 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10030
10031 prop = RNA_def_property(srna, "space", PROP_ENUM, PROP_NONE);
10032 RNA_def_property_enum_sdna(prop, nullptr, "space");
10034 RNA_def_property_ui_text(prop, "Space", "Coordinates space");
10035 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10036
10037 prop = RNA_def_property(srna, "minimum_weight", PROP_FLOAT, PROP_FACTOR);
10038 RNA_def_property_float_sdna(prop, nullptr, "min_weight");
10039 RNA_def_property_ui_text(prop, "Minimum", "Minimum value for vertex weight");
10040 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10041
10043}
10044
10046{
10047 StructRNA *srna;
10048 PropertyRNA *prop;
10049
10050 srna = RNA_def_struct(brna, "GreasePencilMultiplyModifier", "Modifier");
10051 RNA_def_struct_ui_text(srna, "Multiply Modifier", "Generate multiple strokes from one stroke");
10052 RNA_def_struct_sdna(srna, "GreasePencilMultiModifierData");
10053 RNA_def_struct_ui_icon(srna, ICON_GP_MULTIFRAME_EDITING);
10054
10057 srna, "rna_GreasePencilMultiModifier_material_filter_set");
10058
10059 rna_def_modifier_panel_open_prop(srna, "open_fading_panel", 1);
10060 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10061
10063
10064 prop = RNA_def_property(srna, "use_fade", PROP_BOOLEAN, PROP_NONE);
10066 RNA_def_property_ui_text(prop, "Fade", "Fade the stroke thickness for each generated stroke");
10067 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10068
10069 prop = RNA_def_property(srna, "duplicates", PROP_INT, PROP_NONE);
10070 RNA_def_property_int_sdna(prop, nullptr, "duplications");
10071 RNA_def_property_range(prop, 0, 999);
10072 RNA_def_property_ui_range(prop, 1, 10, 1, 1);
10073 RNA_def_property_ui_text(prop, "Duplicates", "How many copies of strokes be displayed");
10074 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10075
10076 prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE);
10078 RNA_def_property_ui_range(prop, 0.0, 1.0, 0.01, 3);
10079 RNA_def_property_ui_text(prop, "Distance", "Distance of duplications");
10080 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10081
10082 prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
10083 RNA_def_property_ui_range(prop, -1, 1, 0.01, 3);
10084 RNA_def_property_ui_text(prop, "Offset", "Offset of duplicates, -1 to 1 (inner to outer)");
10085 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10086
10087 prop = RNA_def_property(srna, "fading_thickness", PROP_FLOAT, PROP_NONE);
10088 RNA_def_property_range(prop, 0, 1);
10089 RNA_def_property_ui_text(prop, "Thickness", "Fade influence of stroke's thickness");
10090 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10091
10092 prop = RNA_def_property(srna, "fading_opacity", PROP_FLOAT, PROP_NONE);
10093 RNA_def_property_range(prop, 0, 1);
10094 RNA_def_property_ui_text(prop, "Opacity", "Fade influence of stroke's opacity");
10095 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10096
10097 prop = RNA_def_property(srna, "fading_center", PROP_FLOAT, PROP_FACTOR);
10098 RNA_def_property_range(prop, 0, 1);
10099 RNA_def_property_ui_text(prop, "Center", "Fade center");
10100 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10101
10103}
10104
10106{
10107 StructRNA *srna;
10108 PropertyRNA *prop;
10109
10110 static const EnumPropertyItem hook_falloff_items[] = {
10111 {MOD_GREASE_PENCIL_HOOK_Falloff_None, "NONE", 0, "No Falloff", ""},
10112 {MOD_GREASE_PENCIL_HOOK_Falloff_Curve, "CURVE", 0, "Curve", ""},
10113 {MOD_GREASE_PENCIL_HOOK_Falloff_Smooth, "SMOOTH", ICON_SMOOTHCURVE, "Smooth", ""},
10114 {MOD_GREASE_PENCIL_HOOK_Falloff_Sphere, "SPHERE", ICON_SPHERECURVE, "Sphere", ""},
10115 {MOD_GREASE_PENCIL_HOOK_Falloff_Root, "ROOT", ICON_ROOTCURVE, "Root", ""},
10117 "INVERSE_SQUARE",
10118 ICON_ROOTCURVE,
10119 "Inverse Square",
10120 ""},
10121 {MOD_GREASE_PENCIL_HOOK_Falloff_Sharp, "SHARP", ICON_SHARPCURVE, "Sharp", ""},
10122 {MOD_GREASE_PENCIL_HOOK_Falloff_Linear, "LINEAR", ICON_LINCURVE, "Linear", ""},
10123 {MOD_GREASE_PENCIL_HOOK_Falloff_Const, "CONSTANT", ICON_NOCURVE, "Constant", ""},
10124 {0, nullptr, 0, nullptr, nullptr},
10125 };
10126
10127 srna = RNA_def_struct(brna, "GreasePencilHookModifier", "Modifier");
10129 srna, "Hook Modifier", "Hook modifier to modify the location of stroke points");
10130 RNA_def_struct_sdna(srna, "GreasePencilHookModifierData");
10131 RNA_def_struct_ui_icon(srna, ICON_HOOK);
10132
10135 srna, "rna_GreasePencilHookModifier_material_filter_set");
10137 srna, "rna_GreasePencilHookModifier_vertex_group_name_set");
10139
10140 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10141 rna_def_modifier_panel_open_prop(srna, "open_falloff_panel", 1);
10142
10144
10145 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
10147 prop, "Object", "Parent Object for hook, also recalculates and clears offset");
10150 prop, nullptr, "rna_GreasePencilHookModifier_object_set", nullptr, nullptr);
10151 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
10152
10153 prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
10154 RNA_def_property_string_sdna(prop, nullptr, "subtarget");
10156 prop,
10157 "Sub-Target",
10158 "Name of Parent Bone for hook (if applicable), also recalculates and clears offset");
10159 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
10160
10161 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
10162 RNA_def_property_float_sdna(prop, nullptr, "force");
10163 RNA_def_property_range(prop, 0, 1);
10164 RNA_def_property_ui_text(prop, "Strength", "Relative force of the hook");
10165 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10166
10167 prop = RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);
10168 RNA_def_property_enum_items(prop, hook_falloff_items); /* share the enum */
10169 RNA_def_property_ui_text(prop, "Falloff Type", "");
10171 BLT_I18NCONTEXT_ID_CURVE_LEGACY); /* Abusing id_curve :/ */
10172 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10173
10174 prop = RNA_def_property(srna, "falloff_radius", PROP_FLOAT, PROP_DISTANCE);
10175 RNA_def_property_float_sdna(prop, nullptr, "falloff");
10177 RNA_def_property_ui_range(prop, 0, 100, 100, 2);
10179 prop, "Radius", "If not zero, the distance from the hook where influence ends");
10180 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10181
10182 prop = RNA_def_property(srna, "center", PROP_FLOAT, PROP_NONE);
10183 RNA_def_property_float_sdna(prop, nullptr, "cent");
10184 RNA_def_property_ui_text(prop, "Hook Center", "");
10185 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10186
10187 prop = RNA_def_property(srna, "matrix_inverse", PROP_FLOAT, PROP_MATRIX);
10188 RNA_def_property_float_sdna(prop, nullptr, "parentinv");
10191 prop, "Matrix", "Reverse the transformation between this object and its target");
10192 RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Modifier_update");
10193
10194 prop = RNA_def_property(srna, "use_falloff_uniform", PROP_BOOLEAN, PROP_NONE);
10196 RNA_def_property_ui_text(prop, "Uniform Falloff", "Compensate for non-uniform object scale");
10197 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10198
10200}
10201
10203{
10204 StructRNA *srna;
10205 PropertyRNA *prop;
10206
10207 srna = RNA_def_struct(brna, "GreasePencilWeightProximityModifier", "Modifier");
10208 RNA_def_struct_ui_text(srna, "Weight Modifier Proximity", "Calculate Vertex Weight dynamically");
10209 RNA_def_struct_sdna(srna, "GreasePencilWeightProximityModifierData");
10210 RNA_def_struct_ui_icon(srna, ICON_MOD_VERTEX_WEIGHT);
10211
10214 srna, "rna_GreasePencilWeightProximityModifier_material_filter_set");
10216 srna, "rna_GreasePencilWeightProximityModifier_vertex_group_name_set");
10217
10218 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10219
10221
10222 prop = RNA_def_property(srna, "use_multiply", PROP_BOOLEAN, PROP_NONE);
10226 prop,
10227 "Multiply Weights",
10228 "Multiply the calculated weights with the existing values in the vertex group");
10229 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10230
10231 prop = RNA_def_property(srna, "use_invert_output", PROP_BOOLEAN, PROP_NONE);
10234 RNA_def_property_ui_text(prop, "Invert", "Invert output weight values");
10235 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10236
10237 prop = RNA_def_property(srna, "target_vertex_group", PROP_STRING, PROP_NONE);
10238 RNA_def_property_string_sdna(prop, nullptr, "target_vgname");
10239 RNA_def_property_ui_text(prop, "Vertex Group", "Output Vertex group");
10241 prop, nullptr, nullptr, "rna_GreasePencilWeightProximityModifier_target_vgname_set");
10242 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10243
10244 /* Distance reference object */
10245 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
10246 RNA_def_property_ui_text(prop, "Target Object", "Object used as distance reference");
10248 prop, nullptr, "rna_GreasePencilWeightProximityModifier_object_set", nullptr, nullptr);
10250 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
10251
10252 prop = RNA_def_property(srna, "distance_start", PROP_FLOAT, PROP_DISTANCE);
10253 RNA_def_property_float_sdna(prop, nullptr, "dist_start");
10254 RNA_def_property_range(prop, 0.0, FLT_MAX);
10255 RNA_def_property_ui_range(prop, 0.0, 1000.0, 1.0, 2);
10256 RNA_def_property_ui_text(prop, "Lowest", "Distance mapping to 0.0 weight");
10257 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10258
10259 prop = RNA_def_property(srna, "minimum_weight", PROP_FLOAT, PROP_FACTOR);
10260 RNA_def_property_float_sdna(prop, nullptr, "min_weight");
10261 RNA_def_property_ui_text(prop, "Minimum", "Minimum value for vertex weight");
10262 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10263
10264 prop = RNA_def_property(srna, "distance_end", PROP_FLOAT, PROP_DISTANCE);
10265 RNA_def_property_float_sdna(prop, nullptr, "dist_end");
10266 RNA_def_property_range(prop, 0.0, FLT_MAX);
10267 RNA_def_property_ui_range(prop, 0.0, 1000.0, 1.0, 2);
10268 RNA_def_property_ui_text(prop, "Highest", "Distance mapping to 1.0 weight");
10269 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10270
10272}
10273
10275{
10276 StructRNA *srna;
10277 PropertyRNA *prop;
10278
10279 static EnumPropertyItem prop_gpencil_simplify_mode_items[] = {
10281 "FIXED",
10282 ICON_IPO_CONSTANT,
10283 "Fixed",
10284 "Delete alternating vertices in the stroke, except extremes"},
10286 "ADAPTIVE",
10287 ICON_IPO_EASE_IN_OUT,
10288 "Adaptive",
10289 "Use a Ramer-Douglas-Peucker algorithm to simplify the stroke preserving main shape"},
10291 "SAMPLE",
10292 ICON_IPO_EASE_IN_OUT,
10293 "Sample",
10294 "Re-sample the stroke with segments of the specified length"},
10296 "MERGE",
10297 ICON_IPO_EASE_IN_OUT,
10298 "Merge",
10299 "Simplify the stroke by merging vertices closer than a given distance"},
10300 {0, nullptr, 0, nullptr, nullptr},
10301 };
10302
10303 srna = RNA_def_struct(brna, "GreasePencilSimplifyModifier", "Modifier");
10304 RNA_def_struct_ui_text(srna, "Simplify Modifier", "Simplify Stroke modifier");
10305 RNA_def_struct_sdna(srna, "GreasePencilSimplifyModifierData");
10306 RNA_def_struct_ui_icon(srna, ICON_MOD_SIMPLIFY);
10307
10310 srna, "rna_GreasePencilSimplifyModifier_material_filter_set");
10312 srna, "rna_GreasePencilSimplifyModifier_vertex_group_name_set");
10313
10314 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10315
10316 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR);
10317 RNA_def_property_float_sdna(prop, nullptr, "factor");
10318 RNA_def_property_range(prop, 0, 100.0);
10319 RNA_def_property_ui_range(prop, 0, 5.0f, 1.0f, 3);
10320 RNA_def_property_ui_text(prop, "Factor", "Factor of Simplify");
10321 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10322
10323 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
10324 RNA_def_property_enum_items(prop, prop_gpencil_simplify_mode_items);
10325 RNA_def_property_ui_text(prop, "Mode", "How to simplify the stroke");
10326 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10327
10328 prop = RNA_def_property(srna, "step", PROP_INT, PROP_NONE);
10329 RNA_def_property_int_sdna(prop, nullptr, "step");
10330 RNA_def_property_range(prop, 1, 50);
10331 RNA_def_property_ui_text(prop, "Iterations", "Number of times to apply simplify");
10332 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10333
10334 prop = RNA_def_property(srna, "length", PROP_FLOAT, PROP_DISTANCE);
10335 RNA_def_property_float_sdna(prop, nullptr, "length");
10337 RNA_def_property_ui_range(prop, 0.005, 1.0, 0.05, 3);
10338 RNA_def_property_ui_text(prop, "Length", "Length of each segment");
10339 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10340
10341 prop = RNA_def_property(srna, "sharp_threshold", PROP_FLOAT, PROP_ANGLE);
10342 RNA_def_property_float_sdna(prop, nullptr, "sharp_threshold");
10343 RNA_def_property_range(prop, 0, M_PI);
10344 RNA_def_property_ui_range(prop, 0, M_PI, 1.0, 1);
10346 prop, "Sharp Threshold", "Preserve corners that have sharper angle than this threshold");
10347 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10348
10349 prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE);
10350 RNA_def_property_float_sdna(prop, nullptr, "distance");
10352 RNA_def_property_ui_range(prop, 0, 1.0, 0.01, 3);
10353 RNA_def_property_ui_text(prop, "Distance", "Distance between points");
10354 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10355
10357}
10358
10360{
10361 StructRNA *srna;
10362 PropertyRNA *prop;
10363
10364 srna = RNA_def_struct(brna, "GreasePencilArmatureModifier", "Modifier");
10365 RNA_def_struct_ui_text(srna, "Armature Modifier", "Deform stroke points using armature object");
10366 RNA_def_struct_sdna(srna, "GreasePencilArmatureModifierData");
10367 RNA_def_struct_ui_icon(srna, ICON_MOD_ARMATURE);
10368
10370 srna, "rna_GreasePencilArmatureModifier_vertex_group_name_set");
10371
10372 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10373
10375
10376 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
10377 RNA_def_property_ui_text(prop, "Object", "Armature object to deform with");
10379 nullptr,
10380 "rna_GreasePencilArmatureModifier_object_set",
10381 nullptr,
10382 "rna_Armature_object_poll");
10384 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
10385
10386 prop = RNA_def_property(srna, "use_bone_envelopes", PROP_BOOLEAN, PROP_NONE);
10387 RNA_def_property_boolean_sdna(prop, nullptr, "deformflag", ARM_DEF_ENVELOPE);
10388 RNA_def_property_ui_text(prop, "Use Bone Envelopes", "Bind Bone envelopes to armature modifier");
10389 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10390
10391 prop = RNA_def_property(srna, "use_vertex_groups", PROP_BOOLEAN, PROP_NONE);
10392 RNA_def_property_boolean_sdna(prop, nullptr, "deformflag", ARM_DEF_VGROUP);
10393 RNA_def_property_ui_text(prop, "Use Vertex Groups", "Bind vertex groups to armature modifier");
10394 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10395
10396 prop = RNA_def_property(srna, "use_deform_preserve_volume", PROP_BOOLEAN, PROP_NONE);
10397 RNA_def_property_boolean_sdna(prop, nullptr, "deformflag", ARM_DEF_QUATERNION);
10399 prop, "Preserve Volume", "Deform rotation interpolation with quaternions");
10400 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10401
10403}
10404
10406{
10407 StructRNA *srna;
10408 PropertyRNA *prop;
10409
10410 static const EnumPropertyItem segment_mode_items[] = {
10412 "NORMAL",
10413 0,
10414 "Regular",
10415 "Apply offset in usual animation direction"},
10417 "REVERSE",
10418 0,
10419 "Reverse",
10420 "Apply offset in reverse animation direction"},
10422 "PINGPONG",
10423 0,
10424 "Ping Pong",
10425 "Loop back and forth"},
10426 {0, nullptr, 0, nullptr, nullptr},
10427 };
10428
10429 srna = RNA_def_struct(brna, "GreasePencilTimeModifierSegment", nullptr);
10430 RNA_def_struct_ui_text(srna, "Time Modifier Segment", "Configuration for a single dash segment");
10431 RNA_def_struct_sdna(srna, "GreasePencilTimeModifierSegment");
10432 RNA_def_struct_path_func(srna, "rna_GreasePencilTimeModifierSegment_path");
10433
10434 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
10435 RNA_def_property_ui_text(prop, "Name", "Name of the dash segment");
10437 prop, nullptr, nullptr, "rna_GreasePencilTimeModifierSegment_name_set");
10438 RNA_def_struct_name_property(srna, prop);
10440
10441 prop = RNA_def_property(srna, "segment_start", PROP_INT, PROP_NONE);
10443 RNA_def_property_ui_text(prop, "Frame Start", "First frame of the segment");
10444 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10445
10446 prop = RNA_def_property(srna, "segment_end", PROP_INT, PROP_NONE);
10448 RNA_def_property_ui_text(prop, "End", "Last frame of the segment");
10449 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10450
10451 prop = RNA_def_property(srna, "segment_repeat", PROP_INT, PROP_NONE);
10453 RNA_def_property_ui_text(prop, "Repeat", "Number of cycle repeats");
10454 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10455
10456 prop = RNA_def_property(srna, "segment_mode", PROP_ENUM, PROP_NONE);
10457 RNA_def_property_enum_sdna(prop, nullptr, "segment_mode");
10458 RNA_def_property_enum_items(prop, segment_mode_items);
10459 RNA_def_property_ui_text(prop, "Mode", "");
10460 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10461}
10462
10464{
10465 StructRNA *srna;
10466 PropertyRNA *prop;
10467
10468 static const EnumPropertyItem time_mode_items[] = {
10470 "NORMAL",
10471 0,
10472 "Regular",
10473 "Apply offset in usual animation direction"},
10475 "REVERSE",
10476 0,
10477 "Reverse",
10478 "Apply offset in reverse animation direction"},
10480 "FIX",
10481 0,
10482 "Fixed Frame",
10483 "Keep frame and do not change with time"},
10485 "PINGPONG",
10486 0,
10487 "Ping Pong",
10488 "Loop back and forth starting in reverse"},
10490 "CHAIN",
10491 0,
10492 "Chain",
10493 "List of chained animation segments"},
10494 {0, nullptr, 0, nullptr, nullptr},
10495 };
10496
10497 srna = RNA_def_struct(brna, "GreasePencilTimeModifier", "Modifier");
10498 RNA_def_struct_ui_text(srna, "Grease Pencil Time Modifier", "Offset keyframes");
10499 RNA_def_struct_sdna(srna, "GreasePencilTimeModifierData");
10500 RNA_def_struct_ui_icon(srna, ICON_MOD_TIME);
10501
10503
10504 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10505 rna_def_modifier_panel_open_prop(srna, "open_custom_range_panel", 1);
10506
10508
10509 prop = RNA_def_property(srna, "segments", PROP_COLLECTION, PROP_NONE);
10510 RNA_def_property_struct_type(prop, "GreasePencilTimeModifierSegment");
10511 RNA_def_property_collection_sdna(prop, nullptr, "segments_array", nullptr);
10513 "rna_GreasePencilTimeModifier_segments_begin",
10514 "rna_iterator_array_next",
10515 "rna_iterator_array_end",
10516 "rna_iterator_array_get",
10517 nullptr,
10518 nullptr,
10519 nullptr,
10520 nullptr);
10521 RNA_def_property_ui_text(prop, "Segments", "");
10522
10523 prop = RNA_def_property(srna, "segment_active_index", PROP_INT, PROP_UNSIGNED);
10525 RNA_def_property_ui_text(prop, "Active Time Segment Index", "Active index in the segment list");
10526
10527 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
10528 RNA_def_property_enum_sdna(prop, nullptr, "mode");
10529 RNA_def_property_enum_items(prop, time_mode_items);
10530 RNA_def_property_ui_text(prop, "Mode", "");
10531 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10532
10533 prop = RNA_def_property(srna, "offset", PROP_INT, PROP_NONE);
10534 RNA_def_property_int_sdna(prop, nullptr, "offset");
10535 RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
10537 prop, "Frame Offset", "Number of frames to offset original keyframe number or frame to fix");
10538 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10539
10540 prop = RNA_def_property(srna, "frame_scale", PROP_FLOAT, PROP_NONE);
10541 RNA_def_property_float_sdna(prop, nullptr, "frame_scale");
10542 RNA_def_property_range(prop, 0.001f, 100.0f);
10543 RNA_def_property_ui_text(prop, "Frame Scale", "Evaluation time in seconds");
10544 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10545
10546 prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_TIME);
10548 RNA_def_property_int_sdna(prop, nullptr, "sfra");
10550 prop, nullptr, "rna_GreasePencilTimeModifier_start_frame_set", nullptr);
10552 RNA_def_property_ui_text(prop, "Start Frame", "First frame of the range");
10553 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10554
10555 prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_TIME);
10557 RNA_def_property_int_sdna(prop, nullptr, "efra");
10558 RNA_def_property_int_funcs(prop, nullptr, "rna_GreasePencilTimeModifier_end_frame_set", nullptr);
10560 RNA_def_property_ui_text(prop, "End Frame", "Final frame of the range");
10561 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10562
10563 prop = RNA_def_property(srna, "use_keep_loop", PROP_BOOLEAN, PROP_NONE);
10566 prop, "Keep Loop", "Retiming end frames and move to start of animation to keep loop");
10567 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10568
10569 prop = RNA_def_property(srna, "use_custom_frame_range", PROP_BOOLEAN, PROP_NONE);
10572 prop, "Custom Range", "Define a custom range of frames to use in modifier");
10573 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10574
10576}
10577
10579{
10580 StructRNA *srna;
10581 PropertyRNA *prop;
10582
10583 static const EnumPropertyItem envelope_mode_items[] = {
10585 "DEFORM",
10586 0,
10587 "Deform",
10588 "Deform the stroke to best match the envelope shape"},
10590 "SEGMENTS",
10591 0,
10592 "Segments",
10593 "Add segments to create the envelope. Keep the original stroke."},
10595 "FILLS",
10596 0,
10597 "Fills",
10598 "Add fill segments to create the envelope. Don't keep the original stroke."},
10599 {0, nullptr, 0, nullptr, nullptr},
10600 };
10601
10602 srna = RNA_def_struct(brna, "GreasePencilEnvelopeModifier", "Modifier");
10604 srna, "Grease Pencil Envelope Modifier", "Envelope stroke effect modifier");
10605 RNA_def_struct_sdna(srna, "GreasePencilEnvelopeModifierData");
10606 RNA_def_struct_ui_icon(srna, ICON_MOD_ENVELOPE);
10607
10610 srna, "rna_GreasePencilEnvelopeModifier_material_filter_set");
10612 srna, "rna_GreasePencilEnvelopeModifier_vertex_group_name_set");
10613
10614 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10615
10617
10618 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
10619 RNA_def_property_enum_sdna(prop, nullptr, "mode");
10620 RNA_def_property_enum_items(prop, envelope_mode_items);
10621 RNA_def_property_ui_text(prop, "Mode", "Algorithm to use for generating the envelope");
10622 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10623
10624 prop = RNA_def_property(srna, "spread", PROP_INT, PROP_NONE);
10625 RNA_def_property_int_sdna(prop, nullptr, "spread");
10626 RNA_def_property_range(prop, 1, INT_MAX);
10628 prop, "Spread Length", "The number of points to skip to create straight segments");
10629 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10630
10631 prop = RNA_def_property(srna, "mat_nr", PROP_INT, PROP_NONE);
10632 RNA_def_property_int_sdna(prop, nullptr, "mat_nr");
10634 RNA_def_property_ui_text(prop, "Material Index", "The material to use for the new strokes");
10635 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10636
10637 prop = RNA_def_property(srna, "thickness", PROP_FLOAT, PROP_FACTOR);
10638 RNA_def_property_float_sdna(prop, nullptr, "thickness");
10640 RNA_def_property_ui_range(prop, 0, 1, 10, 3);
10641 RNA_def_property_ui_text(prop, "Thickness", "Multiplier for the thickness of the new strokes");
10642 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10643
10644 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_FACTOR);
10645 RNA_def_property_float_sdna(prop, nullptr, "strength");
10647 RNA_def_property_ui_range(prop, 0, 1, 10, 3);
10648 RNA_def_property_ui_text(prop, "Strength", "Multiplier for the strength of the new strokes");
10649 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10650
10651 prop = RNA_def_property(srna, "skip", PROP_INT, PROP_NONE);
10652 RNA_def_property_int_sdna(prop, nullptr, "skip");
10653 RNA_def_property_range(prop, 0, INT_MAX);
10655 prop, "Skip Segments", "The number of generated segments to skip to reduce complexity");
10656 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10657
10659}
10660
10662{
10663 StructRNA *srna;
10664 PropertyRNA *prop;
10665
10666 srna = RNA_def_struct(brna, "GreasePencilOutlineModifier", "Modifier");
10667 RNA_def_struct_ui_text(srna, "Outline Modifier", "Outline of Strokes modifier from camera view");
10668 RNA_def_struct_sdna(srna, "GreasePencilOutlineModifierData");
10669 RNA_def_struct_ui_icon(srna, ICON_MOD_OUTLINE);
10670
10673 srna, "rna_GreasePencilOutlineModifier_material_filter_set");
10674
10675 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10676
10678
10679 prop = RNA_def_property(srna, "thickness", PROP_INT, PROP_NONE);
10680 RNA_def_property_int_sdna(prop, nullptr, "thickness");
10681 RNA_def_property_range(prop, 1, 1000);
10682 RNA_def_property_ui_text(prop, "Thickness", "Thickness of the perimeter stroke");
10683 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10684
10685 prop = RNA_def_property(srna, "sample_length", PROP_FLOAT, PROP_NONE);
10686 RNA_def_property_float_sdna(prop, nullptr, "sample_length");
10687 RNA_def_property_ui_range(prop, 0.0f, 100.0f, 0.1f, 2);
10688 RNA_def_property_ui_text(prop, "Sample Length", "");
10689 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10690
10691 prop = RNA_def_property(srna, "subdivision", PROP_INT, PROP_NONE);
10692 RNA_def_property_int_sdna(prop, nullptr, "subdiv");
10693 RNA_def_property_range(prop, 0, 10);
10694 RNA_def_property_ui_text(prop, "Subdivisions", "Number of subdivisions");
10695 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10696
10697 prop = RNA_def_property(srna, "use_keep_shape", PROP_BOOLEAN, PROP_NONE);
10699 RNA_def_property_ui_text(prop, "Keep Shape", "Try to keep global shape");
10700 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10701
10702 prop = RNA_def_property(srna, "outline_material", PROP_POINTER, PROP_NONE);
10705 nullptr,
10706 "rna_GreasePencilOutlineModifier_outline_material_set",
10707 nullptr,
10708 "rna_GreasePencilModifier_material_poll");
10709 RNA_def_property_ui_text(prop, "Outline Material", "Material used for outline strokes");
10710 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10711
10712 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
10713 RNA_def_property_ui_text(prop, "Target Object", "Target object to define stroke start");
10716 prop, nullptr, "rna_GreasePencilOutlineModifier_object_set", nullptr, nullptr);
10717 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
10718
10720}
10721
10723{
10724 StructRNA *srna;
10725 PropertyRNA *prop;
10726
10727 srna = RNA_def_struct(brna, "GreasePencilShrinkwrapModifier", "Modifier");
10729 "Shrinkwrap Modifier",
10730 "Shrink wrapping modifier to shrink wrap an object to a target");
10731 RNA_def_struct_sdna(srna, "GreasePencilShrinkwrapModifierData");
10732 RNA_def_struct_ui_icon(srna, ICON_MOD_SHRINKWRAP);
10733
10736 srna, "rna_GreasePencilShrinkwrapModifier_material_filter_set");
10738 srna, "rna_GreasePencilShrinkwrapModifier_vertex_group_name_set");
10739
10740 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10741
10743
10744 prop = RNA_def_property(srna, "wrap_method", PROP_ENUM, PROP_NONE);
10745 RNA_def_property_enum_sdna(prop, nullptr, "shrink_type");
10747 RNA_def_property_ui_text(prop, "Wrap Method", "");
10748 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
10749
10750 prop = RNA_def_property(srna, "wrap_mode", PROP_ENUM, PROP_NONE);
10751 RNA_def_property_enum_sdna(prop, nullptr, "shrink_mode");
10754 prop, "Snap Mode", "Select how vertices are constrained to the target surface");
10755 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
10756
10757 prop = RNA_def_property(srna, "cull_face", PROP_ENUM, PROP_NONE);
10758 RNA_def_property_enum_sdna(prop, nullptr, "shrink_opts");
10761 "rna_GreasePencilShrinkwrapModifier_face_cull_get",
10762 "rna_GreasePencilShrinkwrapModifier_face_cull_set",
10763 nullptr);
10765 prop,
10766 "Face Cull",
10767 "Stop vertices from projecting to a face on the target when facing towards/away");
10768 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10769
10770 prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
10771 RNA_def_property_ui_text(prop, "Target", "Mesh target to shrink to");
10773 nullptr,
10774 "rna_GreasePencilShrinkwrapModifier_target_set",
10775 nullptr,
10776 "rna_Mesh_object_poll");
10778 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
10779
10780 prop = RNA_def_property(srna, "auxiliary_target", PROP_POINTER, PROP_NONE);
10781 RNA_def_property_pointer_sdna(prop, nullptr, "aux_target");
10782 RNA_def_property_ui_text(prop, "Auxiliary Target", "Additional mesh target to shrink to");
10784 nullptr,
10785 "rna_GreasePencilShrinkwrapModifier_aux_target_set",
10786 nullptr,
10787 "rna_Mesh_object_poll");
10789 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
10790
10791 prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_DISTANCE);
10792 RNA_def_property_float_sdna(prop, nullptr, "keep_dist");
10794 RNA_def_property_ui_range(prop, -100, 100, 1, 2);
10795 RNA_def_property_ui_text(prop, "Offset", "Distance to keep from the target");
10796 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10797
10798 prop = RNA_def_property(srna, "project_limit", PROP_FLOAT, PROP_DISTANCE);
10799 RNA_def_property_float_sdna(prop, nullptr, "proj_limit");
10800 RNA_def_property_range(prop, 0.0, FLT_MAX);
10801 RNA_def_property_ui_range(prop, 0, 100, 1, 2);
10803 prop, "Project Limit", "Limit the distance used for projection (zero disables)");
10804 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10805
10806 prop = RNA_def_property(srna, "use_project_x", PROP_BOOLEAN, PROP_NONE);
10808 RNA_def_property_ui_text(prop, "X", "");
10809 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10810
10811 prop = RNA_def_property(srna, "use_project_y", PROP_BOOLEAN, PROP_NONE);
10813 RNA_def_property_ui_text(prop, "Y", "");
10814 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10815
10816 prop = RNA_def_property(srna, "use_project_z", PROP_BOOLEAN, PROP_NONE);
10818 RNA_def_property_ui_text(prop, "Z", "");
10819 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10820
10821 prop = RNA_def_property(srna, "subsurf_levels", PROP_INT, PROP_NONE);
10822 RNA_def_property_int_sdna(prop, nullptr, "subsurf_levels");
10823 RNA_def_property_range(prop, 0, 6);
10824 RNA_def_property_ui_range(prop, 0, 6, 1, -1);
10826 prop,
10827 "Subdivision Levels",
10828 "Number of subdivisions that must be performed before extracting vertices' "
10829 "positions and normals");
10830 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10831
10832 prop = RNA_def_property(srna, "use_negative_direction", PROP_BOOLEAN, PROP_NONE);
10834 prop, nullptr, "shrink_opts", MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR);
10836 prop, "Negative", "Allow vertices to move in the negative direction of axis");
10837 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10838
10839 prop = RNA_def_property(srna, "use_positive_direction", PROP_BOOLEAN, PROP_NONE);
10841 prop, nullptr, "shrink_opts", MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR);
10843 prop, "Positive", "Allow vertices to move in the positive direction of axis");
10844 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10845
10846 prop = RNA_def_property(srna, "use_invert_cull", PROP_BOOLEAN, PROP_NONE);
10849 prop, "Invert Cull", "When projecting in the negative direction invert the face cull mode");
10850 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10851
10852 prop = RNA_def_property(srna, "smooth_factor", PROP_FLOAT, PROP_FACTOR);
10853 RNA_def_property_float_sdna(prop, nullptr, "smooth_factor");
10854 RNA_def_property_range(prop, 0, 1);
10855 RNA_def_property_ui_text(prop, "Smooth Factor", "Amount of smoothing to apply");
10856 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10857
10858 prop = RNA_def_property(srna, "smooth_step", PROP_INT, PROP_NONE);
10859 RNA_def_property_int_sdna(prop, nullptr, "smooth_step");
10860 RNA_def_property_range(prop, 1, 10);
10862 prop, "Steps", "Number of times to apply smooth (high numbers can reduce FPS)");
10863 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10864
10866}
10867
10869{
10870 static EnumPropertyItem prop_gpencil_build_mode_items[] = {
10872 "SEQUENTIAL",
10873 0,
10874 "Sequential",
10875 "Strokes appear/disappear one after the other, but only a single one changes at a time"},
10877 "CONCURRENT",
10878 0,
10879 "Concurrent",
10880 "Multiple strokes appear/disappear at once"},
10882 "ADDITIVE",
10883 0,
10884 "Additive",
10885 "Builds only new strokes (assuming 'additive' drawing)"},
10886 {0, nullptr, 0, nullptr, nullptr},
10887 };
10888
10889 static EnumPropertyItem prop_gpencil_build_transition_items[] = {
10891 "GROW",
10892 0,
10893 "Grow",
10894 "Show points in the order they occur in each stroke "
10895 "(e.g. for animating lines being drawn)"},
10897 "SHRINK",
10898 0,
10899 "Shrink",
10900 "Hide points from the end of each stroke to the start "
10901 "(e.g. for animating lines being erased)"},
10903 "FADE", /* "Fade" is the original id string kept for compatibility purpose. */
10904 0,
10905 "Vanish",
10906 "Hide points in the order they occur in each stroke "
10907 "(e.g. for animating ink fading or vanishing after getting drawn)"},
10908 {0, nullptr, 0, nullptr, nullptr},
10909 };
10910
10911 static EnumPropertyItem prop_gpencil_build_time_align_items[] = {
10913 "START",
10914 0,
10915 "Align Start",
10916 "All strokes start at same time (i.e. short strokes finish earlier)"},
10918 "END",
10919 0,
10920 "Align End",
10921 "All strokes end at same time (i.e. short strokes start later)"},
10922 {0, nullptr, 0, nullptr, nullptr},
10923 };
10924
10925 StructRNA *srna;
10926 PropertyRNA *prop;
10927
10928 srna = RNA_def_struct(brna, "GreasePencilBuildModifier", "Modifier");
10929 RNA_def_struct_ui_text(srna, "Build Modifier", "Animate strokes appearing and disappearing");
10930 RNA_def_struct_sdna(srna, "GreasePencilBuildModifierData");
10931 RNA_def_struct_ui_icon(srna, ICON_MOD_BUILD);
10932
10935 srna, "rna_GreasePencilBuildModifier_material_filter_set");
10936
10937 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10938 rna_def_modifier_panel_open_prop(srna, "open_frame_range_panel", 1);
10939 rna_def_modifier_panel_open_prop(srna, "open_fading_panel", 2);
10940
10942
10943 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
10944 RNA_def_property_enum_items(prop, prop_gpencil_build_mode_items);
10945 RNA_def_property_ui_text(prop, "Mode", "How strokes are being built");
10946 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10947
10948 prop = RNA_def_property(srna, "transition", PROP_ENUM, PROP_NONE);
10949 RNA_def_property_enum_items(prop, prop_gpencil_build_transition_items);
10951 prop, "Transition", "How are strokes animated (i.e. are they appearing or disappearing)");
10952 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10953
10954 prop = RNA_def_property(srna, "start_delay", PROP_FLOAT, PROP_NONE);
10955 RNA_def_property_float_sdna(prop, nullptr, "start_delay");
10957 prop, "Delay", "Number of frames after each GP keyframe before the modifier has any effect");
10959 RNA_def_property_ui_range(prop, 0, 200, 1, -1);
10960 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10961
10962 prop = RNA_def_property(srna, "length", PROP_FLOAT, PROP_NONE);
10963 RNA_def_property_float_sdna(prop, nullptr, "length");
10965 "Length",
10966 "Maximum number of frames that the build effect can run for "
10967 "(unless another GP keyframe occurs before this time has elapsed)");
10969 RNA_def_property_ui_range(prop, 1, 1000, 1, -1);
10970 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10971
10972 prop = RNA_def_property(srna, "concurrent_time_alignment", PROP_ENUM, PROP_NONE);
10973 RNA_def_property_enum_sdna(prop, nullptr, "time_alignment");
10974 RNA_def_property_enum_items(prop, prop_gpencil_build_time_align_items);
10975 RNA_def_property_ui_text(prop, "Time Alignment", "How should strokes start to appear/disappear");
10976 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10977
10978 prop = RNA_def_property(srna, "time_mode", PROP_ENUM, PROP_NONE);
10979 RNA_def_property_enum_sdna(prop, nullptr, "time_mode");
10981 RNA_def_property_enum_funcs(prop, nullptr, nullptr, "grease_pencil_build_time_mode_filter");
10983 prop,
10984 "Timing",
10985 "Use drawing speed, a number of frames, or a manual factor to build strokes");
10986 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10987
10988 /* Speed factor for MOD_GREASE_PENCIL_BUILD_TIMEMODE_DRAWSPEED. */
10989 /* TODO: Does it work? */
10990 prop = RNA_def_property(srna, "speed_factor", PROP_FLOAT, PROP_FACTOR);
10991 RNA_def_property_float_sdna(prop, nullptr, "speed_fac");
10992 RNA_def_property_ui_text(prop, "Speed Factor", "Multiply recorded drawing speed by a factor");
10993 RNA_def_property_range(prop, 0.0f, 100.0f);
10994 RNA_def_property_ui_range(prop, 0, 5, 0.001, -1);
10995 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10996
10997 /* Max gap in seconds between strokes for MOD_GREASE_PENCIL_BUILD_TIMEMODE_DRAWSPEED. */
10998 prop = RNA_def_property(srna, "speed_maxgap", PROP_FLOAT, PROP_NONE);
10999 RNA_def_property_float_sdna(prop, nullptr, "speed_maxgap");
11000 RNA_def_property_ui_text(prop, "Maximum Gap", "The maximum gap between strokes in seconds");
11001 RNA_def_property_range(prop, 0.0f, 100.0f);
11002 RNA_def_property_ui_range(prop, 0, 4, 0.01, -1);
11003 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11004
11005 prop = RNA_def_property(srna, "use_restrict_frame_range", PROP_BOOLEAN, PROP_NONE);
11008 prop, "Restrict Frame Range", "Only modify strokes during the specified frame range");
11009 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11010
11011 /* Use percentage bool (used by sequential & concurrent modes) */
11012 prop = RNA_def_property(srna, "use_percentage", PROP_BOOLEAN, PROP_NONE);
11014 prop, nullptr, "time_mode", MOD_GREASE_PENCIL_BUILD_TIMEMODE_PERCENTAGE);
11016 prop, "Restrict Visible Points", "Use a percentage factor to determine the visible points");
11017 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11018 prop = RNA_def_property(srna, "percentage_factor", PROP_FLOAT, PROP_FACTOR);
11019 RNA_def_property_float_sdna(prop, nullptr, "percentage_fac");
11020 RNA_def_property_ui_text(prop, "Factor", "Defines how much of the stroke is visible");
11021 RNA_def_property_range(prop, 0.0f, 1.0f);
11022 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11023
11024 prop = RNA_def_property(srna, "frame_start", PROP_FLOAT, PROP_NONE);
11025 RNA_def_property_float_sdna(prop, nullptr, "start_frame");
11027 prop, "Start Frame", "Start Frame (when Restrict Frame Range is enabled)");
11029 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11030
11031 prop = RNA_def_property(srna, "frame_end", PROP_FLOAT, PROP_NONE);
11032 RNA_def_property_float_sdna(prop, nullptr, "end_frame");
11033 RNA_def_property_ui_text(prop, "End Frame", "End Frame (when Restrict Frame Range is enabled)");
11035 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11036
11037 prop = RNA_def_property(srna, "use_fading", PROP_BOOLEAN, PROP_NONE);
11039 RNA_def_property_ui_text(prop, "Use Fading", "Fade out strokes instead of directly cutting off");
11040 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11041
11042 prop = RNA_def_property(srna, "fade_factor", PROP_FLOAT, PROP_FACTOR);
11043 RNA_def_property_float_sdna(prop, nullptr, "fade_fac");
11044 RNA_def_property_ui_text(prop, "Fade Factor", "Defines how much of the stroke is fading in/out");
11045 RNA_def_property_range(prop, 0.0f, 1.0f);
11046 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11047
11048 prop = RNA_def_property(srna, "target_vertex_group", PROP_STRING, PROP_NONE);
11049 RNA_def_property_string_sdna(prop, nullptr, "target_vgname");
11050 RNA_def_property_ui_text(prop, "Vertex Group", "Output Vertex group");
11052 prop, nullptr, nullptr, "rna_GreasePencilBuildModifier_target_vgname_set");
11053 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11054
11055 prop = RNA_def_property(srna, "fade_opacity_strength", PROP_FLOAT, PROP_FACTOR);
11056 RNA_def_property_float_sdna(prop, nullptr, "fade_opacity_strength");
11058 prop, "Opacity Strength", "How much strength fading applies on top of stroke opacity");
11059 RNA_def_property_range(prop, 0.0f, 1.0f);
11060 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11061
11062 prop = RNA_def_property(srna, "fade_thickness_strength", PROP_FLOAT, PROP_FACTOR);
11063 RNA_def_property_float_sdna(prop, nullptr, "fade_thickness_strength");
11065 prop, "Thickness Strength", "How much strength fading applies on top of stroke thickness");
11066 RNA_def_property_range(prop, 0.0f, 1.0f);
11067 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11068
11069 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
11070 RNA_def_property_ui_text(prop, "Object", "Object used as build starting position");
11072 prop, nullptr, "rna_GreasePencilBuildModifier_object_set", nullptr, nullptr);
11074 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
11075
11077}
11078
11080{
11081 StructRNA *srna;
11082 PropertyRNA *prop;
11083
11084 static const EnumPropertyItem fit_type_items[] = {
11086 "CONSTANT_LENGTH",
11087 0,
11088 "Constant Length",
11089 "Keep the texture at a constant length regardless of the length of each stroke"},
11091 "FIT_STROKE",
11092 0,
11093 "Stroke Length",
11094 "Scale the texture to fit the length of each stroke"},
11095 {0, nullptr, 0, nullptr, nullptr},
11096 };
11097
11098 static const EnumPropertyItem mode_items[] = {
11100 "STROKE",
11101 0,
11102 "Stroke",
11103 "Manipulate only stroke texture coordinates"},
11105 "FILL",
11106 0,
11107 "Fill",
11108 "Manipulate only fill texture coordinates"},
11110 "STROKE_AND_FILL",
11111 0,
11112 "Stroke & Fill",
11113 "Manipulate both stroke and fill texture coordinates"},
11114 {0, nullptr, 0, nullptr, nullptr},
11115 };
11116
11117 srna = RNA_def_struct(brna, "GreasePencilTextureModifier", "Modifier");
11119 srna, "Grease Pencil Texture Modifier", "Transform stroke texture coordinates Modifier");
11120 RNA_def_struct_sdna(srna, "GreasePencilTextureModifierData");
11121 RNA_def_struct_ui_icon(srna, ICON_MOD_UVPROJECT);
11122
11125 srna, "rna_GreasePencilTextureModifier_material_filter_set");
11127 srna, "rna_GreasePencilTextureModifier_vertex_group_name_set");
11128
11129 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
11130
11132
11133 prop = RNA_def_property(srna, "uv_offset", PROP_FLOAT, PROP_NONE);
11134 RNA_def_property_float_sdna(prop, nullptr, "uv_offset");
11136 RNA_def_property_ui_range(prop, -100.0, 100.0, 0.1, 3);
11137 RNA_def_property_ui_text(prop, "UV Offset", "Offset value to add to stroke UVs");
11138 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11139
11140 prop = RNA_def_property(srna, "uv_scale", PROP_FLOAT, PROP_NONE);
11141 RNA_def_property_float_sdna(prop, nullptr, "uv_scale");
11142 RNA_def_property_range(prop, 0.0, FLT_MAX);
11143 RNA_def_property_ui_range(prop, 0.0, 100.0, 0.1, 3);
11144 RNA_def_property_ui_text(prop, "UV Scale", "Factor to scale the UVs");
11145 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11146
11147 /* Rotation of Dot Texture. */
11148 prop = RNA_def_property(srna, "alignment_rotation", PROP_FLOAT, PROP_ANGLE);
11149 RNA_def_property_float_sdna(prop, nullptr, "alignment_rotation");
11151 RNA_def_property_range(prop, -DEG2RADF(90.0f), DEG2RADF(90.0f));
11152 RNA_def_property_ui_range(prop, -DEG2RADF(90.0f), DEG2RADF(90.0f), 10, 3);
11154 prop, "Rotation", "Additional rotation applied to dots and square strokes");
11155 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11156
11157 prop = RNA_def_property(srna, "fill_rotation", PROP_FLOAT, PROP_ANGLE);
11158 RNA_def_property_float_sdna(prop, nullptr, "fill_rotation");
11159 RNA_def_property_ui_text(prop, "Fill Rotation", "Additional rotation of the fill UV");
11160 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11161
11162 prop = RNA_def_property(srna, "fill_offset", PROP_FLOAT, PROP_COORDS);
11163 RNA_def_property_float_sdna(prop, nullptr, "fill_offset");
11164 RNA_def_property_array(prop, 2);
11165 RNA_def_property_ui_text(prop, "Fill Offset", "Additional offset of the fill UV");
11166 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11167
11168 prop = RNA_def_property(srna, "fill_scale", PROP_FLOAT, PROP_COORDS);
11169 RNA_def_property_float_sdna(prop, nullptr, "fill_scale");
11170 RNA_def_property_range(prop, 0.01f, 100.0f);
11171 RNA_def_property_ui_text(prop, "Fill Scale", "Additional scale of the fill UV");
11172 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11173
11174 prop = RNA_def_property(srna, "fit_method", PROP_ENUM, PROP_NONE);
11175 RNA_def_property_enum_sdna(prop, nullptr, "fit_method");
11176 RNA_def_property_enum_items(prop, fit_type_items);
11177 RNA_def_property_ui_text(prop, "Fit Method", "");
11178 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
11179
11180 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
11181 RNA_def_property_enum_sdna(prop, nullptr, "mode");
11182 RNA_def_property_enum_items(prop, mode_items);
11183 RNA_def_property_ui_text(prop, "Mode", "");
11184 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
11185
11187}
11188
11190{
11191 StructRNA *srna;
11192 PropertyRNA *prop;
11193
11194 /* data */
11195 srna = RNA_def_struct(brna, "Modifier", nullptr);
11196 RNA_def_struct_ui_text(srna, "Modifier", "Modifier affecting the geometry data of an object");
11197 RNA_def_struct_refine_func(srna, "rna_Modifier_refine");
11198 RNA_def_struct_path_func(srna, "rna_Modifier_path");
11199 RNA_def_struct_sdna(srna, "ModifierData");
11200 RNA_def_struct_ui_icon(srna, ICON_MODIFIER);
11201
11202 /* strings */
11203 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
11204 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_Modifier_name_set");
11205 RNA_def_property_ui_text(prop, "Name", "Modifier name");
11206 RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER | NA_RENAME, "rna_Modifier_name_update");
11207 RNA_def_struct_name_property(srna, prop);
11208
11209 /* enums */
11210 prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
11212 RNA_def_property_enum_sdna(prop, nullptr, "type");
11214 RNA_def_property_ui_text(prop, "Type", "");
11215
11216 /* flags */
11217 prop = RNA_def_property(srna, "show_viewport", PROP_BOOLEAN, PROP_NONE);
11219 RNA_def_property_ui_text(prop, "Realtime", "Display modifier in viewport");
11222 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11223 RNA_def_property_ui_icon(prop, ICON_RESTRICT_VIEW_ON, 1);
11224
11225 prop = RNA_def_property(srna, "show_render", PROP_BOOLEAN, PROP_NONE);
11228 RNA_def_property_ui_text(prop, "Render", "Use modifier during render");
11229 RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_ON, 1);
11231
11232 prop = RNA_def_property(srna, "show_in_editmode", PROP_BOOLEAN, PROP_NONE);
11234 RNA_def_property_ui_text(prop, "Edit Mode", "Display modifier in Edit mode");
11235 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11236 RNA_def_property_ui_icon(prop, ICON_EDITMODE_HLT, 0);
11237
11238 prop = RNA_def_property(srna, "show_on_cage", PROP_BOOLEAN, PROP_NONE);
11240 RNA_def_property_ui_text(prop, "On Cage", "Adjust edit cage to modifier result");
11241 RNA_def_property_ui_icon(prop, ICON_MESH_DATA, 0);
11242 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11243
11244 prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
11246 prop, "rna_Modifier_show_expanded_get", "rna_Modifier_show_expanded_set");
11248 RNA_def_property_boolean_sdna(prop, nullptr, "ui_expand_flag", 0);
11250 RNA_def_property_ui_text(prop, "Expanded", "Set modifier expanded in the user interface");
11251 RNA_def_property_ui_icon(prop, ICON_RIGHTARROW, 1);
11253
11254 prop = RNA_def_property(srna, "is_active", PROP_BOOLEAN, PROP_NONE);
11256 RNA_def_property_boolean_funcs(prop, nullptr, "rna_Modifier_is_active_set");
11260 RNA_def_property_ui_text(prop, "Active", "The active modifier in the list");
11262
11263 prop = RNA_def_property(srna, "use_pin_to_last", PROP_BOOLEAN, PROP_NONE);
11265 RNA_def_property_boolean_funcs(prop, nullptr, "rna_Modifier_use_pin_to_last_set");
11268 RNA_def_property_ui_text(prop, "Pin to Last", "Keep the modifier at the end of the list");
11270
11271 prop = RNA_def_boolean(srna,
11272 "is_override_data",
11273 false,
11274 "Override Modifier",
11275 "In a local override object, whether this modifier comes from the linked "
11276 "reference object, or is local to the override");
11279 prop, nullptr, "flag", eModifierFlag_OverrideLibrary_Local);
11280
11281 prop = RNA_def_property(srna, "use_apply_on_spline", PROP_BOOLEAN, PROP_NONE);
11284 prop,
11285 "Apply on Spline",
11286 "Apply this and all preceding deformation modifiers on splines' points rather than "
11287 "on filled curve/surface");
11288 RNA_def_property_ui_icon(prop, ICON_SURFACE_DATA, 0);
11289 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11290
11291 prop = RNA_def_property(srna, "execution_time", PROP_FLOAT, PROP_TIME_ABSOLUTE);
11294 prop,
11295 "Execution Time",
11296 "Time in seconds that the modifier took to evaluate. This is only set on evaluated objects. "
11297 "If multiple modifiers run in parallel, execution time is not a reliable metric.");
11298
11299 prop = RNA_def_property(srna, "persistent_uid", PROP_INT, PROP_NONE);
11302 prop,
11303 "Persistent UID",
11304 "Uniquely identifies the modifier within the modifier stack that it is part of");
11305
11306 /* types */
11392}
11393
11394#endif
void BKE_animdata_fix_paths_rename_all(struct ID *ref_id, const char *prefix, const char *oldName, const char *newName)
Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
Object * CTX_data_active_object(const bContext *C)
void BKE_curveprofile_init(struct CurveProfile *profile, short segments_len)
CustomData interface, see also DNA_customdata_types.h.
@ ME_VERT
@ ME_POLY
@ ME_LOOP
@ ME_EDGE
@ CDT_MIX_SUB
@ CDT_MIX_REPLACE_BELOW_THRESHOLD
@ CDT_MIX_REPLACE_ABOVE_THRESHOLD
@ CDT_MIX_ADD
@ CDT_MIX_MUL
@ CDT_MIX_TRANSFER
@ CDT_MIX_MIX
const char * CustomData_get_layer_name(const CustomData *data, eCustomDataType type, int n)
int CustomData_number_of_layers(const CustomData *data, eCustomDataType type)
bool CustomData_external_test(CustomData *data, eCustomDataType type)
@ DT_LAYERS_ACTIVE_DST
@ DT_LAYERS_INDEX_DST
@ DT_LAYERS_NAME_DST
@ DT_LAYERS_VGROUP_SRC_BONE_SELECT
@ DT_LAYERS_VGROUP_SRC_BONE_DEFORM
@ DT_LAYERS_ALL_SRC
@ DT_LAYERS_ACTIVE_SRC
int BKE_object_data_transfer_get_dttypes_item_types(int dtdata_types)
bool BKE_object_data_transfer_get_dttypes_capacity(int dtdata_types, bool *r_advanced_mixing, bool *r_threshold)
@ DT_MULTILAYER_INDEX_MDEFORMVERT
@ DT_MULTILAYER_INDEX_UV
@ DT_MULTILAYER_INDEX_VCOL_VERT
@ DT_MULTILAYER_INDEX_VCOL_LOOP
@ DT_TYPE_MLOOPCOL_LOOP
@ DT_TYPE_SKIN
@ DT_TYPE_UV
@ DT_TYPE_MPROPCOL_VERT
@ DT_TYPE_BWEIGHT_VERT
@ DT_TYPE_FREESTYLE_FACE
@ DT_TYPE_SHAPEKEY
@ DT_TYPE_CREASE
@ DT_TYPE_SEAM
@ DT_TYPE_MLOOPCOL_VERT
@ DT_TYPE_LNOR
@ DT_TYPE_MPROPCOL_LOOP
@ DT_TYPE_SHARP_FACE
@ DT_TYPE_MDEFORMVERT
@ DT_TYPE_BWEIGHT_EDGE
@ DT_TYPE_FREESTYLE_EDGE
@ DT_TYPE_SHARP_EDGE
support for deformation groups and hooks.
const ListBase * BKE_object_defgroup_list(const Object *ob)
Definition deform.cc:579
void BKE_fluid_modifier_create_type_data(struct FluidModifierData *fmd)
Definition fluid.cc:4806
void BKE_fluid_modifier_free(struct FluidModifierData *fmd)
Definition fluid.cc:4795
void id_lib_extern(ID *id)
Definition lib_id.cc:283
General operations, lookup, etc. for materials.
int BKE_object_material_index_get(Object *ob, const Material *ma)
@ MREMAP_MODE_VERT_EDGE_NEAREST
@ MREMAP_MODE_LOOP_POLYINTERP_NEAREST
@ MREMAP_MODE_VERT_POLYINTERP_VNORPROJ
@ MREMAP_MODE_VERT_FACE_NEAREST
@ MREMAP_MODE_EDGE_POLY_NEAREST
@ MREMAP_MODE_VERT_EDGEINTERP_NEAREST
@ MREMAP_MODE_VERT_NEAREST
@ MREMAP_MODE_LOOP_NEAREST_POLYNOR
@ MREMAP_MODE_EDGE_VERT_NEAREST
@ MREMAP_MODE_TOPOLOGY
@ MREMAP_MODE_EDGE_NEAREST
@ MREMAP_MODE_POLY_NOR
@ MREMAP_MODE_LOOP_POLYINTERP_LNORPROJ
@ MREMAP_MODE_LOOP_NEAREST_LOOPNOR
@ MREMAP_MODE_LOOP_POLY_NEAREST
@ MREMAP_MODE_EDGE_EDGEINTERP_VNORPROJ
@ MREMAP_MODE_POLY_POLYINTERP_PNORPROJ
@ MREMAP_MODE_POLY_NEAREST
@ MREMAP_MODE_VERT_POLYINTERP_NEAREST
const ModifierTypeInfo * BKE_modifier_get_info(ModifierType type)
void BKE_modifier_unique_name(ListBase *modifiers, ModifierData *md)
void multires_force_external_reload(Object *object)
Definition multires.cc:463
General operations, lookup, etc. for blender objects.
Mesh * BKE_object_get_evaluated_mesh(const Object *object_eval)
Object * BKE_object_pose_armature_get(Object *ob)
void BKE_object_modifier_hook_reset(Object *ob, HookModifierData *hmd)
void BKE_ocean_free_modifier_cache(struct OceanModifierData *omd)
Definition ocean.cc:1676
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
#define BLI_assert(a)
Definition BLI_assert.h:50
#define LISTBASE_FOREACH(type, var, list)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int BLI_findindex(const struct ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE int max_ii(int a, int b)
#define M_PI
#define DEG2RAD(_deg)
#define DEG2RADF(_deg)
int BLI_sortutil_cmp_int(const void *a_, const void *b_)
Definition sort_utils.c:53
#define STRNCPY(dst, src)
Definition BLI_string.h:593
#define SNPRINTF(dst, format,...)
Definition BLI_string.h:597
size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
#define STRNCPY_UTF8(dst, src)
size_t void BLI_uniquename_cb(UniquenameCheckCallback unique_check, void *arg, const char *defname, char delim, char *name, size_t name_maxncpy) ATTR_NONNULL(1
#define CLAMP(a, b, c)
#define UNUSED_VARS_NDEBUG(...)
#define SET_FLAG_FROM_TEST(value, test, flag)
#define STREQ(a, b)
#define CLAMP_MIN(a, b)
#define BLT_I18NCONTEXT_ID_SIMULATION
#define BLT_I18NCONTEXT_ID_CURVE_LEGACY
#define BLT_I18NCONTEXT_ID_PARTICLESETTINGS
#define BLT_I18NCONTEXT_OPERATOR_DEFAULT
#define BLT_I18NCONTEXT_ID_MESH
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_relations_tag_update(Main *bmain)
Object * DEG_get_evaluated_object(const Depsgraph *depsgraph, Object *object)
@ ID_RECALC_GEOMETRY
Definition DNA_ID.h:1041
@ LIBOVERRIDE_OP_REPLACE
Definition DNA_ID.h:229
@ ARM_DEF_VGROUP
@ ARM_DEF_QUATERNION
@ ARM_DEF_INVERT_VGROUP
@ ARM_DEF_ENVELOPE
@ CU_PATH
@ CD_PROP_BYTE_COLOR
@ CD_PROP_COLOR
@ CD_PROP_FLOAT2
#define MAX_CUSTOMDATA_LAYER_NAME_NO_PREFIX
@ GP_LENGTH_INVERT_CURVATURE
@ MOD_LINEART_EDGE_FLAG_PROJECTED_SHADOW
@ MOD_LINEART_EDGE_FLAG_CONTOUR
@ MOD_LINEART_EDGE_FLAG_LIGHT_CONTOUR
@ MOD_LINEART_EDGE_FLAG_INTERSECTION
@ MOD_LINEART_EDGE_FLAG_CREASE
@ MOD_LINEART_EDGE_FLAG_MATERIAL
@ MOD_LINEART_EDGE_FLAG_EDGE_MARK
@ MOD_LINEART_EDGE_FLAG_LOOSE
@ MOD_LINEART_FILTER_FACE_MARK
@ MOD_LINEART_FILTER_FACE_MARK_BOUNDARIES
@ MOD_LINEART_USE_CREASE_ON_SMOOTH_SURFACES
@ MOD_LINEART_USE_IMAGE_BOUNDARY_TRIMMING
@ MOD_LINEART_LOOSE_AS_CONTOUR
@ MOD_LINEART_CHAIN_PRESERVE_DETAILS
@ MOD_LINEART_USE_BACK_FACE_CULLING
@ MOD_LINEART_CHAIN_LOOSE_EDGES
@ MOD_LINEART_USE_CUSTOM_CAMERA
@ MOD_LINEART_USE_CREASE_ON_SHARP_EDGES
@ MOD_LINEART_INVERT_SOURCE_VGROUP
@ MOD_LINEART_EVERYTHING_AS_CONTOUR
@ MOD_LINEART_ALLOW_DUPLI_OBJECTS
@ MOD_LINEART_MATCH_OUTPUT_VGROUP
@ MOD_LINEART_CHAIN_GEOMETRY_SPACE
@ MOD_LINEART_FILTER_FACE_MARK_KEEP_CONTOUR
@ MOD_LINEART_INTERSECTION_AS_CONTOUR
@ MOD_LINEART_ALLOW_OVERLAP_EDGE_TYPES
@ MOD_LINEART_ALLOW_OVERLAPPING_EDGES
@ MOD_LINEART_ALLOW_CLIPPING_BOUNDARIES
@ MOD_LINEART_FILTER_FACE_MARK_INVERT
@ MOD_MESHCACHE_INTERP_LINEAR
@ MOD_MESHCACHE_INTERP_NONE
@ eModifierFlag_PinLast
@ eModifierFlag_OverrideLibrary_Local
@ eModifierFlag_Active
@ NODES_MODIFIER_BAKE_TARGET_PACKED
@ NODES_MODIFIER_BAKE_TARGET_INHERIT
@ NODES_MODIFIER_BAKE_TARGET_DISK
@ MOD_GREASE_PENCIL_MULTIPLY_ENABLE_FADING
@ MOD_REMESH_FLOOD_FILL
@ MOD_REMESH_SMOOTH_SHADING
@ MOD_MESHSEQ_READ_COLOR
@ MOD_MESHSEQ_READ_VERT
@ MOD_MESHSEQ_INTERPOLATE_VERTICES
@ MOD_MESHSEQ_READ_UV
@ MOD_MESHSEQ_READ_POLY
@ MOD_BEVEL_HARDEN_NORMALS
@ MOD_BEVEL_INVERT_VGROUP
@ MOD_BEVEL_WEIGHT
@ MOD_BEVEL_OVERLAP_OK
@ MOD_BEVEL_VGROUP
@ MOD_BEVEL_EVEN_WIDTHS
@ MOD_BEVEL_ANGLE
@ MOD_SIMPLEDEFORM_LOCK_AXIS_Z
@ MOD_SIMPLEDEFORM_LOCK_AXIS_X
@ MOD_SIMPLEDEFORM_LOCK_AXIS_Y
@ MOD_SHRINKWRAP_TARGET_PROJECT
@ MOD_SHRINKWRAP_NEAREST_VERTEX
@ MOD_SHRINKWRAP_PROJECT
@ MOD_SHRINKWRAP_NEAREST_SURFACE
@ eWarp_Falloff_Linear
@ eWarp_Falloff_Curve
@ eWarp_Falloff_Sharp
@ eWarp_Falloff_Const
@ eWarp_Falloff_InvSquare
@ eWarp_Falloff_Smooth
@ eWarp_Falloff_None
@ eWarp_Falloff_Sphere
@ eWarp_Falloff_Root
@ MOD_LATTICE_INVERT_VGROUP
@ LINEART_SHADOW_FILTER_ILLUMINATED_ENCLOSED_SHAPES
@ LINEART_SHADOW_FILTER_NONE
@ LINEART_SHADOW_FILTER_SHADED
@ LINEART_SHADOW_FILTER_ILLUMINATED
@ MOD_CURVE_INVERT_VGROUP
@ MOD_GREASE_PENCIL_SMOOTH_MOD_LOCATION
@ MOD_GREASE_PENCIL_SMOOTH_MOD_STRENGTH
@ MOD_GREASE_PENCIL_SMOOTH_KEEP_SHAPE
@ MOD_GREASE_PENCIL_SMOOTH_MOD_UV
@ MOD_GREASE_PENCIL_SMOOTH_SMOOTH_ENDS
@ MOD_GREASE_PENCIL_SMOOTH_MOD_THICKNESS
@ eMultiresModifierFlag_UseSculptBaseMesh
@ eMultiresModifierFlag_UseCrease
@ eMultiresModifierFlag_UseCustomNormals
@ eMultiresModifierFlag_ControlEdges
@ LINEART_GPENCIL_INTERSECTION_MATCH
@ LINEART_GPENCIL_MATERIAL_MASK_MATCH
@ LINEART_GPENCIL_MATERIAL_MASK_ENABLE
@ eModifierMode_Render
@ eModifierMode_ApplyOnSpline
@ eModifierMode_Editmode
@ eModifierMode_Realtime
@ eModifierMode_OnCage
@ GREASE_PENCIL_INFLUENCE_INVERT_VERTEX_GROUP
@ GREASE_PENCIL_INFLUENCE_USE_MATERIAL_PASS_FILTER
@ GREASE_PENCIL_INFLUENCE_USE_LAYER_PASS_FILTER
@ GREASE_PENCIL_INFLUENCE_INVERT_LAYER_FILTER
@ GREASE_PENCIL_INFLUENCE_USE_CUSTOM_CURVE
@ GREASE_PENCIL_INFLUENCE_INVERT_MATERIAL_PASS_FILTER
@ GREASE_PENCIL_INFLUENCE_INVERT_MATERIAL_FILTER
@ GREASE_PENCIL_INFLUENCE_INVERT_LAYER_PASS_FILTER
@ MOD_TRIANGULATE_QUAD_SHORTEDGE
@ MOD_TRIANGULATE_QUAD_FIXED
@ MOD_TRIANGULATE_QUAD_LONGEDGE
@ MOD_TRIANGULATE_QUAD_BEAUTY
@ MOD_TRIANGULATE_QUAD_ALTERNATE
@ MOD_SOLIDIFY_RIM
@ MOD_SOLIDIFY_FLIP
@ MOD_SOLIDIFY_NORMAL_CALC
@ MOD_SOLIDIFY_EVEN
@ MOD_SOLIDIFY_OFFSET_ANGLE_CLAMP
@ MOD_SOLIDIFY_NONMANIFOLD_FLAT_FACES
@ MOD_SOLIDIFY_VGROUP_INV
@ MOD_SOLIDIFY_NOSHELL
@ MOD_SIMPLEDEFORM_FLAG_INVERT_VGROUP
@ MOD_HOOK_UNIFORM_SPACE
@ MOD_HOOK_INVERT_VGROUP
@ eBooleanModifierSolver_Float
@ eBooleanModifierSolver_Mesh_Arr
@ MOD_SCREW_NORMAL_CALC
@ MOD_SCREW_SMOOTH_SHADING
@ MOD_SCREW_UV_STRETCH_V
@ MOD_SCREW_MERGE
@ MOD_SCREW_UV_STRETCH_U
@ MOD_SCREW_NORMAL_FLIP
@ MOD_SCREW_OBJECT_OFFSET
@ MOD_GREASE_PENCIL_WEIGHT_ANGLE_SPACE_WORLD
@ MOD_GREASE_PENCIL_WEIGHT_ANGLE_SPACE_LOCAL
@ LINEART_SILHOUETTE_FILTER_NONE
@ LINEART_SILHOUETTE_FILTER_INDIVIDUAL
@ LINEART_SILHOUETTE_FILTER_GROUP
@ eBooleanModifierBMeshFlag_BMesh_NoDissolve
@ eBooleanModifierBMeshFlag_BMesh_Separate
@ eBooleanModifierBMeshFlag_BMesh_NoConnectRegions
@ MOD_WVG_PROXIMITY_OBJECT
@ MOD_WVG_PROXIMITY_GEOMETRY
@ eParticleInstanceFlag_Parents
@ eParticleInstanceFlag_Alive
@ eParticleInstanceFlag_Dead
@ eParticleInstanceFlag_Children
@ eParticleInstanceFlag_Unborn
@ eParticleInstanceFlag_Path
@ eParticleInstanceFlag_UseSize
@ eParticleInstanceFlag_KeepShape
@ MOD_GREASE_PENCIL_HOOK_UNIFORM_SPACE
@ MOD_GREASE_PENCIL_OFFSET_UNIFORM_RANDOM_SCALE
@ MOD_GREASE_PENCIL_MIRROR_AXIS_Z
@ MOD_GREASE_PENCIL_MIRROR_AXIS_X
@ MOD_GREASE_PENCIL_MIRROR_AXIS_Y
@ MOD_FLUID_TYPE_EFFEC
@ MOD_FLUID_TYPE_DOMAIN
@ MOD_FLUID_TYPE_FLOW
@ SUBSURF_TYPE_SIMPLE
@ SUBSURF_TYPE_CATMULL_CLARK
@ MOD_REMESH_VOXEL
@ MOD_REMESH_MASS_POINT
@ MOD_REMESH_SHARP_FEATURES
@ MOD_REMESH_CENTROID
@ MOD_WIREFRAME_OFS_EVEN
@ MOD_WIREFRAME_OFS_RELATIVE
@ MOD_WIREFRAME_INVERT_VGROUP
@ MOD_WIREFRAME_CREASE
@ MOD_WIREFRAME_BOUNDARY
@ MOD_WIREFRAME_REPLACE
@ MOD_WVG_SET_AND
@ MOD_WVG_SET_B
@ MOD_WVG_SET_ALL
@ MOD_WVG_SET_OR
@ MOD_WVG_SET_A
@ MOD_WVG_EDIT_INVERT_VGROUP_MASK
@ MOD_WVG_EDIT_WEIGHTS_NORMALIZE
@ MOD_WVG_INVERT_FALLOFF
@ MOD_WVG_EDIT_REMFVG
@ MOD_WVG_EDIT_ADD2VG
@ eBooleanModifierMaterialMode_Index
@ eBooleanModifierMaterialMode_Transfer
@ MOD_GREASE_PENCIL_OPACITY_USE_WEIGHT_AS_FACTOR
@ MOD_GREASE_PENCIL_OPACITY_USE_UNIFORM_OPACITY
@ MOD_GREASE_PENCIL_ARRAY_USE_OFFSET
@ MOD_GREASE_PENCIL_ARRAY_USE_RELATIVE
@ MOD_GREASE_PENCIL_ARRAY_USE_OB_OFFSET
@ MOD_GREASE_PENCIL_ARRAY_UNIFORM_RANDOM_SCALE
@ MOD_BEVEL_AMT_DEPTH
@ MOD_BEVEL_AMT_PERCENT
@ MOD_BEVEL_AMT_OFFSET
@ MOD_BEVEL_AMT_ABSOLUTE
@ MOD_BEVEL_AMT_WIDTH
@ MOD_WELD_LOOSE_EDGES
@ MOD_WELD_INVERT_VGROUP
#define MOD_SHRINKWRAP_CULL_TARGET_MASK
@ MOD_SHRINKWRAP_ON_SURFACE
@ MOD_SHRINKWRAP_OUTSIDE
@ MOD_SHRINKWRAP_INSIDE
@ MOD_SHRINKWRAP_ABOVE_SURFACE
@ MOD_SHRINKWRAP_OUTSIDE_SURFACE
@ MOD_DECIM_FLAG_INVERT_VGROUP
@ MOD_DECIM_FLAG_SYMMETRY
@ MOD_DECIM_FLAG_TRIANGULATE
@ MOD_DECIM_FLAG_ALL_BOUNDARY_VERTS
@ SUBSURF_BOUNDARY_SMOOTH_ALL
@ SUBSURF_BOUNDARY_SMOOTH_PRESERVE_CORNERS
@ MOD_CURVE_NEGZ
@ MOD_CURVE_POSX
@ MOD_CURVE_NEGX
@ MOD_CURVE_POSZ
@ MOD_CURVE_NEGY
@ MOD_CURVE_POSY
@ MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR
@ MOD_SHRINKWRAP_CULL_TARGET_FRONTFACE
@ MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR
@ MOD_SHRINKWRAP_CULL_TARGET_BACKFACE
@ MOD_SHRINKWRAP_INVERT_VGROUP
@ MOD_SHRINKWRAP_INVERT_CULL_TARGET
@ MOD_WVG_MIX_INVERT_VGROUP_MASK
@ MOD_WVG_MIX_INVERT_VGROUP_B
@ MOD_WVG_MIX_WEIGHTS_NORMALIZE
@ MOD_WVG_MIX_INVERT_VGROUP_A
@ MOD_CORRECTIVESMOOTH_ONLY_SMOOTH
@ MOD_CORRECTIVESMOOTH_PIN_BOUNDARY
@ MOD_CORRECTIVESMOOTH_INVERT_VGROUP
@ MOD_GREASE_PENCIL_BUILD_TIMEMODE_PERCENTAGE
@ MOD_GREASE_PENCIL_BUILD_TIMEMODE_DRAWSPEED
@ MOD_GREASE_PENCIL_BUILD_TIMEMODE_FRAMES
@ MOD_BEVEL_MITER_PATCH
@ MOD_BEVEL_MITER_SHARP
@ MOD_BEVEL_MITER_ARC
@ MOD_SKIN_SYMM_X
@ MOD_SKIN_SYMM_Z
@ MOD_SKIN_SYMM_Y
@ MOD_GREASE_PENCIL_BUILD_TIMEALIGN_START
@ MOD_GREASE_PENCIL_BUILD_TIMEALIGN_END
@ MOD_GREASE_PENCIL_THICK_WEIGHT_FACTOR
@ MOD_GREASE_PENCIL_THICK_NORMALIZE
@ MOD_GREASE_PENCIL_SIMPLIFY_FIXED
@ MOD_GREASE_PENCIL_SIMPLIFY_MERGE
@ MOD_GREASE_PENCIL_SIMPLIFY_ADAPTIVE
@ MOD_GREASE_PENCIL_SIMPLIFY_SAMPLE
@ NODES_MODIFIER_PANEL_MANAGE
@ NODES_MODIFIER_PANEL_WARNINGS
@ NODES_MODIFIER_PANEL_OUTPUT_ATTRIBUTES
@ NODES_MODIFIER_PANEL_NAMED_ATTRIBUTES
@ NODES_MODIFIER_PANEL_BAKE
@ NODES_MODIFIER_PANEL_BAKE_DATA_BLOCKS
@ MOD_BEVEL_FACE_STRENGTH_NONE
@ MOD_BEVEL_FACE_STRENGTH_AFFECTED
@ MOD_BEVEL_FACE_STRENGTH_NEW
@ MOD_BEVEL_FACE_STRENGTH_ALL
@ MOD_GREASE_PENCIL_TIME_MODE_FIX
@ MOD_GREASE_PENCIL_TIME_MODE_CHAIN
@ MOD_GREASE_PENCIL_TIME_MODE_PINGPONG
@ MOD_GREASE_PENCIL_TIME_MODE_NORMAL
@ MOD_GREASE_PENCIL_TIME_MODE_REVERSE
@ MOD_WVG_PROXIMITY_WEIGHTS_NORMALIZE
@ MOD_WVG_PROXIMITY_INVERT_VGROUP_MASK
@ MOD_WVG_PROXIMITY_GEOM_VERTS
@ MOD_WVG_PROXIMITY_INVERT_FALLOFF
@ MOD_WVG_PROXIMITY_GEOM_EDGES
@ MOD_WVG_PROXIMITY_GEOM_FACES
@ MOD_BEVEL_MARK_SHARP
@ MOD_BEVEL_MARK_SEAM
@ NODES_MODIFIER_BAKE_CUSTOM_PATH
@ NODES_MODIFIER_BAKE_CUSTOM_SIMULATION_FRAME_RANGE
@ MOD_GREASE_PENCIL_SUBDIV_CATMULL
@ MOD_GREASE_PENCIL_SUBDIV_SIMPLE
@ MOD_BEVEL_VMESH_ADJ
@ MOD_BEVEL_VMESH_CUTOFF
@ MOD_GREASE_PENCIL_COLOR_FILL
@ MOD_GREASE_PENCIL_COLOR_STROKE
@ MOD_GREASE_PENCIL_COLOR_BOTH
@ MOD_GREASE_PENCIL_COLOR_HARDNESS
@ MOD_GREASE_PENCIL_BUILD_MODE_SEQUENTIAL
@ MOD_GREASE_PENCIL_BUILD_MODE_ADDITIVE
@ MOD_GREASE_PENCIL_BUILD_MODE_CONCURRENT
@ MOD_SOLIDIFY_MODE_NONMANIFOLD
@ MOD_SOLIDIFY_MODE_EXTRUDE
@ MOD_GREASE_PENCIL_TIME_KEEP_LOOP
@ MOD_GREASE_PENCIL_TIME_CUSTOM_RANGE
@ MOD_GREASE_PENCIL_BUILD_RESTRICT_TIME
@ MOD_GREASE_PENCIL_BUILD_USE_FADING
@ MOD_OCEAN_GEOM_GENERATE
@ MOD_OCEAN_GEOM_SIM_ONLY
@ MOD_OCEAN_GEOM_DISPLACE
@ MOD_GREASE_PENCIL_DASH_USE_CYCLIC
@ MOD_MESHCACHE_INVERT_VERTEX_GROUP
@ NODES_MODIFIER_PANEL_OPEN
@ MOD_DISP_MAP_OBJECT
@ MOD_DISP_MAP_GLOBAL
@ MOD_DISP_MAP_LOCAL
@ MOD_DISP_MAP_UV
@ MOD_MDEF_DYNAMIC_BIND
@ MOD_MDEF_INVERT_VGROUP
@ MOD_CAST_USE_OB_TRANSFORM
@ MOD_CAST_INVERT_VGROUP
@ MOD_CAST_Y
@ MOD_CAST_X
@ MOD_CAST_Z
@ MOD_CAST_SIZE_FROM_RADIUS
@ MOD_DISP_SPACE_GLOBAL
@ MOD_DISP_SPACE_LOCAL
@ MOD_GREASE_PENCIL_TINT_UNIFORM
@ MOD_GREASE_PENCIL_TINT_GRADIENT
@ MOD_GREASE_PENCIL_OUTLINE_KEEP_SHAPE
@ MOD_WARP_VOLUME_PRESERVE
@ MOD_WARP_INVERT_VGROUP
@ NODES_MODIFIER_HIDE_DATABLOCK_SELECTOR
@ MOD_MESHCACHE_TYPE_PC2
@ MOD_MESHCACHE_TYPE_MDD
@ MOD_BEVEL_AFFECT_EDGES
@ MOD_BEVEL_AFFECT_VERTICES
@ LINEART_SOURCE_SCENE
@ LINEART_SOURCE_OBJECT
@ LINEART_SOURCE_COLLECTION
@ MOD_OCEAN_GENERATE_NORMALS
@ MOD_OCEAN_GENERATE_FOAM
@ MOD_OCEAN_INVERT_SPRAY
@ MOD_OCEAN_GENERATE_SPRAY
@ MOD_GREASE_PENCIL_TINT_USE_WEIGHT_AS_FACTOR
@ eModifierType_MeshToVolume
@ eModifierType_GreasePencilSmooth
@ eModifierType_Weld
@ eModifierType_ParticleSystem
@ eModifierType_Mask
@ eModifierType_GreasePencilWeightProximity
@ eModifierType_MeshDeform
@ eModifierType_Solidify
@ eModifierType_Explode
@ eModifierType_Subsurf
@ eModifierType_LaplacianSmooth
@ eModifierType_Mirror
@ eModifierType_GreasePencilMirror
@ eModifierType_WeightVGProximity
@ eModifierType_Boolean
@ eModifierType_GreasePencilOffset
@ eModifierType_SimpleDeform
@ eModifierType_Curve
@ eModifierType_GreasePencilThickness
@ eModifierType_GreasePencilEnvelope
@ eModifierType_Lattice
@ eModifierType_Surface
@ eModifierType_NormalEdit
@ eModifierType_Skin
@ eModifierType_GreasePencilArmature
@ eModifierType_Wave
@ eModifierType_Cloth
@ eModifierType_Fluid
@ eModifierType_GreasePencilSubdiv
@ eModifierType_GreasePencilTint
@ eModifierType_GreasePencilNoise
@ eModifierType_VolumeToMesh
@ eModifierType_Shrinkwrap
@ eModifierType_MeshSequenceCache
@ eModifierType_EdgeSplit
@ eModifierType_Hook
@ eModifierType_GreasePencilMultiply
@ eModifierType_Wireframe
@ eModifierType_WeightVGMix
@ eModifierType_GreasePencilBuild
@ eModifierType_Screw
@ eModifierType_GreasePencilTime
@ eModifierType_VolumeDisplace
@ eModifierType_GreasePencilTexture
@ eModifierType_GreasePencilSimplify
@ eModifierType_Ocean
@ eModifierType_LaplacianDeform
@ eModifierType_GreasePencilColor
@ eModifierType_DataTransfer
@ eModifierType_UVProject
@ eModifierType_GreasePencilDash
@ eModifierType_Armature
@ eModifierType_UVWarp
@ eModifierType_SurfaceDeform
@ eModifierType_GreasePencilLineart
@ eModifierType_Warp
@ eModifierType_CorrectiveSmooth
@ eModifierType_ParticleInstance
@ eModifierType_Nodes
@ eModifierType_Collision
@ eModifierType_Smooth
@ eModifierType_Bevel
@ eModifierType_DynamicPaint
@ eModifierType_Remesh
@ eModifierType_MeshCache
@ eModifierType_WeightVGEdit
@ eModifierType_GreasePencilOutline
@ eModifierType_GreasePencilWeightAngle
@ eModifierType_Displace
@ eModifierType_GreasePencilOpacity
@ eModifierType_GreasePencilLength
@ eModifierType_Array
@ eModifierType_GreasePencilShrinkwrap
@ eModifierType_Softbody
@ eModifierType_Multires
@ eModifierType_GreasePencilLattice
@ eModifierType_Cast
@ eModifierType_WeightedNormal
@ eModifierType_GreasePencilHook
@ eModifierType_GreasePencilArray
@ eModifierType_Decimate
@ eModifierType_Build
@ eModifierType_Triangulate
@ MOD_EDGESPLIT_FROMANGLE
@ MOD_EDGESPLIT_FROMFLAG
@ MOD_DECIM_MODE_UNSUBDIV
@ MOD_DECIM_MODE_COLLAPSE
@ MOD_DECIM_MODE_DISSOLVE
@ MOD_NORMALEDIT_NO_POLYNORS_FIX
@ MOD_NORMALEDIT_INVERT_VGROUP
@ MOD_NORMALEDIT_USE_DIRECTION_PARALLEL
@ MOD_WVG_MASK_TEX_USE_SAT
@ MOD_WVG_MASK_TEX_USE_BLUE
@ MOD_WVG_MASK_TEX_USE_INT
@ MOD_WVG_MASK_TEX_USE_ALPHA
@ MOD_WVG_MASK_TEX_USE_RED
@ MOD_WVG_MASK_TEX_USE_HUE
@ MOD_WVG_MASK_TEX_USE_VAL
@ MOD_WVG_MASK_TEX_USE_GREEN
@ MOD_SKIN_SMOOTH_SHADING
@ MOD_SDEF_INVERT_VGROUP
@ MOD_SDEF_SPARSE_BIND
@ MOD_DISP_DIR_RGB_XYZ
@ MOD_DISP_DIR_Z
@ MOD_DISP_DIR_Y
@ MOD_DISP_DIR_NOR
@ MOD_DISP_DIR_X
@ MOD_DISP_DIR_CLNOR
@ MOD_SMOOTH_Y
@ MOD_SMOOTH_INVERT_VGROUP
@ MOD_SMOOTH_X
@ MOD_SMOOTH_Z
@ MOD_TRIANGULATE_KEEP_CUSTOMLOOP_NORMALS
@ MOD_LAPLACIANSMOOTH_X
@ MOD_LAPLACIANSMOOTH_Y
@ MOD_LAPLACIANSMOOTH_PRESERVE_VOLUME
@ MOD_LAPLACIANSMOOTH_NORMALIZED
@ MOD_LAPLACIANSMOOTH_Z
@ MOD_LAPLACIANSMOOTH_INVERT_VGROUP
@ MOD_CAST_TYPE_CYLINDER
@ MOD_CAST_TYPE_SPHERE
@ MOD_CAST_TYPE_CUBOID
@ MOD_VOLUME_DISPLACE_MAP_GLOBAL
@ MOD_VOLUME_DISPLACE_MAP_LOCAL
@ MOD_VOLUME_DISPLACE_MAP_OBJECT
@ MOD_WVG_MAPPING_SHARP
@ MOD_WVG_MAPPING_SPHERE
@ MOD_WVG_MAPPING_STEP
@ MOD_WVG_MAPPING_NONE
@ MOD_WVG_MAPPING_ROOT
@ MOD_WVG_MAPPING_CURVE
@ MOD_WVG_MAPPING_RANDOM
@ MOD_WVG_MAPPING_SMOOTH
@ LINEART_GPENCIL_INVERT_COLLECTION
@ LINEART_GPENCIL_OFFSET_TOWARDS_CUSTOM_CAMERA
@ LINEART_GPENCIL_INVERT_SILHOUETTE_FILTER
@ LINEART_GPENCIL_IS_BAKED
@ LINEART_GPENCIL_USE_CACHE
@ MOD_SOLIDIFY_NONMANIFOLD_BOUNDARY_MODE_FLAT
@ MOD_SOLIDIFY_NONMANIFOLD_BOUNDARY_MODE_ROUND
@ MOD_SOLIDIFY_NONMANIFOLD_BOUNDARY_MODE_NONE
@ MOD_WAVE_NORM_Y
@ MOD_WAVE_NORM_X
@ MOD_WAVE_CYCL
@ MOD_WAVE_INVERT_VGROUP
@ MOD_WAVE_Y
@ MOD_WAVE_NORM
@ MOD_WAVE_X
@ MOD_WAVE_NORM_Z
@ MOD_CORRECTIVESMOOTH_RESTSOURCE_ORCO
@ MOD_CORRECTIVESMOOTH_RESTSOURCE_BIND
@ MOD_MESHCACHE_DEFORM_INTEGRATE
@ MOD_MESHCACHE_DEFORM_OVERWRITE
@ MOD_BUILD_FLAG_REVERSE
@ MOD_BUILD_FLAG_RANDOMIZE
@ MOD_OCEAN_SPECTRUM_TEXEL_MARSEN_ARSLOE
@ MOD_OCEAN_SPECTRUM_JONSWAP
@ MOD_OCEAN_SPECTRUM_PHILLIPS
@ MOD_OCEAN_SPECTRUM_PIERSON_MOSKOWITZ
@ MOD_WEIGHTEDNORMAL_MODE_FACE
@ MOD_WEIGHTEDNORMAL_MODE_FACE_ANGLE
@ MOD_WEIGHTEDNORMAL_MODE_ANGLE
@ MOD_GREASE_PENCIL_HOOK_Falloff_None
@ MOD_GREASE_PENCIL_HOOK_Falloff_Root
@ MOD_GREASE_PENCIL_HOOK_Falloff_InvSquare
@ MOD_GREASE_PENCIL_HOOK_Falloff_Const
@ MOD_GREASE_PENCIL_HOOK_Falloff_Linear
@ MOD_GREASE_PENCIL_HOOK_Falloff_Sphere
@ MOD_GREASE_PENCIL_HOOK_Falloff_Smooth
@ MOD_GREASE_PENCIL_HOOK_Falloff_Curve
@ MOD_GREASE_PENCIL_HOOK_Falloff_Sharp
@ VOLUME_TO_MESH_USE_SMOOTH_SHADE
@ eExplodeFlag_Alive
@ eExplodeFlag_Dead
@ eExplodeFlag_EdgeCut
@ eExplodeFlag_INVERT_VGROUP
@ eExplodeFlag_PaSize
@ eExplodeFlag_Unborn
@ eSubsurfModifierFlag_UseRecursiveSubdivision
@ eSubsurfModifierFlag_UseCrease
@ eSubsurfModifierFlag_ControlEdges
@ eSubsurfModifierFlag_UseCustomNormals
@ MOD_LAPLACIANDEFORM_BIND
@ MOD_LAPLACIANDEFORM_INVERT_VGROUP
@ MOD_SOLIDIFY_NONMANIFOLD_OFFSET_MODE_EVEN
@ MOD_SOLIDIFY_NONMANIFOLD_OFFSET_MODE_FIXED
@ MOD_SOLIDIFY_NONMANIFOLD_OFFSET_MODE_CONSTRAINTS
@ MOD_GREASE_PENCIL_TEXTURE_STROKE_AND_FILL
@ MOD_GREASE_PENCIL_TEXTURE_FILL
@ MOD_GREASE_PENCIL_TEXTURE_STROKE
@ MOD_ARR_MERGE
@ MOD_ARR_MERGEFINAL
@ MOD_UVWARP_INVERT_VGROUP
@ MESH_TO_VOLUME_RESOLUTION_MODE_VOXEL_SIZE
@ MESH_TO_VOLUME_RESOLUTION_MODE_VOXEL_AMOUNT
@ VOLUME_TO_MESH_RESOLUTION_MODE_VOXEL_SIZE
@ VOLUME_TO_MESH_RESOLUTION_MODE_GRID
@ VOLUME_TO_MESH_RESOLUTION_MODE_VOXEL_AMOUNT
@ MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS
@ MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS
@ MOD_SHRINKWRAP_PROJECT_OVER_Z_AXIS
@ MOD_ARR_OFF_RELATIVE
@ MOD_ARR_OFF_CONST
@ MOD_ARR_OFF_OBJ
@ MOD_TRIANGULATE_NGON_BEAUTY
@ MOD_TRIANGULATE_NGON_EARCLIP
@ MOD_GREASE_PENCIL_WEIGHT_PROXIMITY_INVERT_OUTPUT
@ MOD_GREASE_PENCIL_WEIGHT_PROXIMITY_MULTIPLY_DATA
@ MOD_GREASE_PENCIL_ENVELOPE_SEGMENTS
@ MOD_GREASE_PENCIL_ENVELOPE_FILLS
@ MOD_GREASE_PENCIL_ENVELOPE_DEFORM
@ MOD_GREASE_PENCIL_BUILD_TRANSITION_VANISH
@ MOD_GREASE_PENCIL_BUILD_TRANSITION_SHRINK
@ MOD_GREASE_PENCIL_BUILD_TRANSITION_GROW
@ MOD_BEVEL_PROFILE_CUSTOM
@ MOD_BEVEL_PROFILE_SUPERELLIPSE
@ MOD_NORMALEDIT_MODE_RADIAL
@ MOD_NORMALEDIT_MODE_DIRECTIONAL
#define MOD_UVPROJECT_MAXPROJECTORS
@ MOD_GREASE_PENCIL_TEXTURE_FIT_STROKE
@ MOD_GREASE_PENCIL_TEXTURE_CONSTANT_LENGTH
@ eBooleanModifierOp_Intersect
@ eBooleanModifierOp_Union
@ eBooleanModifierOp_Difference
@ MOD_CORRECTIVESMOOTH_SMOOTH_LENGTH_WEIGHT
@ MOD_CORRECTIVESMOOTH_SMOOTH_SIMPLE
@ MOD_WVG_MIX_ADD
@ MOD_WVG_MIX_SUB
@ MOD_WVG_MIX_MIN
@ MOD_WVG_MIX_DIF
@ MOD_WVG_MIX_SET
@ MOD_WVG_MIX_MAX
@ MOD_WVG_MIX_DIV
@ MOD_WVG_MIX_AVG
@ MOD_WVG_MIX_MUL
@ eParticleInstanceSpace_World
@ eParticleInstanceSpace_Local
@ MOD_ARR_FITCURVE
@ MOD_ARR_FIXEDCOUNT
@ MOD_ARR_FITLENGTH
@ eBooleanModifierFlag_Collection
@ eBooleanModifierFlag_Self
@ eBooleanModifierFlag_HoleTolerant
@ eBooleanModifierFlag_Object
@ MOD_WEIGHTEDNORMAL_KEEP_SHARP
@ MOD_WEIGHTEDNORMAL_FACE_INFLUENCE
@ MOD_WEIGHTEDNORMAL_INVERT_VGROUP
@ MOD_GREASE_PENCIL_OFFSET_STROKE
@ MOD_GREASE_PENCIL_OFFSET_MATERIAL
@ MOD_GREASE_PENCIL_OFFSET_LAYER
@ MOD_GREASE_PENCIL_OFFSET_RANDOM
@ MOD_MASK_MODE_ARM
@ MOD_MASK_MODE_VGROUP
@ MOD_MASK_SMOOTH
@ MOD_MASK_INV
@ MOD_MESHCACHE_PLAY_CFEA
@ MOD_MESHCACHE_PLAY_EVAL
@ MOD_NORMALEDIT_MIX_COPY
@ MOD_NORMALEDIT_MIX_ADD
@ MOD_NORMALEDIT_MIX_SUB
@ MOD_NORMALEDIT_MIX_MUL
@ MOD_DISP_INVERT_VGROUP
@ MOD_WELD_MODE_CONNECTED
@ MOD_WELD_MODE_ALL
@ MOD_MESHCACHE_TIME_FRAME
@ MOD_MESHCACHE_TIME_FACTOR
@ MOD_MESHCACHE_TIME_SECONDS
@ MOD_GREASE_PENCIL_TIME_SEG_MODE_NORMAL
@ MOD_GREASE_PENCIL_TIME_SEG_MODE_REVERSE
@ MOD_GREASE_PENCIL_TIME_SEG_MODE_PINGPONG
@ NODES_MODIFIER_BAKE_MODE_STILL
@ NODES_MODIFIER_BAKE_MODE_ANIMATION
@ SUBSURF_UV_SMOOTH_PRESERVE_CORNERS_AND_JUNCTIONS
@ SUBSURF_UV_SMOOTH_ALL
@ SUBSURF_UV_SMOOTH_PRESERVE_CORNERS
@ SUBSURF_UV_SMOOTH_NONE
@ SUBSURF_UV_SMOOTH_PRESERVE_BOUNDARIES
@ SUBSURF_UV_SMOOTH_PRESERVE_CORNERS_JUNCTIONS_AND_CONCAVE
@ MOD_SIMPLEDEFORM_MODE_TAPER
@ MOD_SIMPLEDEFORM_MODE_STRETCH
@ MOD_SIMPLEDEFORM_MODE_BEND
@ MOD_SIMPLEDEFORM_MODE_TWIST
@ MOD_MIR_MIRROR_U
@ MOD_MIR_BISECT_AXIS_X
@ MOD_MIR_CLIPPING
@ MOD_MIR_MIRROR_V
@ MOD_MIR_AXIS_X
@ MOD_MIR_BISECT_FLIP_AXIS_X
@ MOD_MIR_VGROUP
@ MOD_MIR_NO_MERGE
@ MOD_MIR_MIRROR_UDIM
@ MOD_DATATRANSFER_USE_VERT
@ MOD_DATATRANSFER_USE_EDGE
@ MOD_DATATRANSFER_OBSRC_TRANSFORM
@ MOD_DATATRANSFER_MAP_MAXDIST
@ MOD_DATATRANSFER_INVERT_VGROUP
@ MOD_DATATRANSFER_USE_LOOP
@ MOD_DATATRANSFER_USE_POLY
@ NTREE_GEOMETRY
@ GEO_NODE_ASSET_MODIFIER
@ OB_WIRE
Object is a sort of wrapper for general info.
@ OB_LATTICE
@ OB_EMPTY
@ OB_ARMATURE
@ OB_MESH
@ OB_CURVES_LEGACY
#define MAX_VGROUP_NAME
#define MINFRAME
#define MAXFRAMEF
#define MINAFRAMEF
#define MAXFRAME
@ UI_PANEL_DATA_EXPAND_ROOT
Read Guarded memory(de)allocation.
#define MEM_SAFE_FREE(v)
void MOD_nodes_update_interface(Object *object, NodesModifierData *nmd)
Definition MOD_nodes.cc:453
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Retrieve the edges of an object as it appears to Cycles topology will always appear triangulated Convert a blackbody temperature to an RGB value Normal Generate a perturbed normal from an RGB normal map image Typically used for faking highly detailed surfaces Generate an OSL shader from a file or text data block Image Sample an image file as a texture Gabor Generate Gabor noise Gradient Generate interpolated color and intensity values based on the input vector Magic Generate a psychedelic color texture Voronoi Generate Worley noise based on the distance to random points Typically used to generate textures such as or biological cells Brick Generate a procedural texture producing bricks Texture Retrieve multiple types of texture coordinates nTypically used as inputs for texture nodes Vector Convert a or normal between and object coordinate space Combine Create a color from its and value channels Color Retrieve a color or the default fallback if none is specified Separate Split a vector into its and Z components Bevel
in reality light always falls off quadratically Particle Retrieve the data of the particle that spawned the object for example to give variation to multiple instances of an object Point Retrieve information about points in a point cloud Wireframe
#define RNA_PROP_END
#define RNA_PROP_BEGIN(sptr, itemptr, prop)
StructRNA * ID_code_to_RNA_type(short idcode)
#define RNA_MAX_ARRAY_LENGTH
Definition RNA_define.hh:23
#define RNA_MAX_ARRAY_DIMENSION
Definition RNA_define.hh:26
@ PARM_REQUIRED
Definition RNA_types.hh:397
@ PROP_SCALE_LOG
Definition RNA_types.hh:113
@ PROP_SCALE_CUBIC
Definition RNA_types.hh:118
@ FUNC_USE_REPORTS
Definition RNA_types.hh:680
@ PROP_STRING_SEARCH_SUGGESTION
Definition RNA_types.hh:584
@ PROP_FLOAT
Definition RNA_types.hh:67
@ PROP_BOOLEAN
Definition RNA_types.hh:65
@ PROP_ENUM
Definition RNA_types.hh:69
@ PROP_INT
Definition RNA_types.hh:66
@ PROP_STRING
Definition RNA_types.hh:68
@ PROP_POINTER
Definition RNA_types.hh:70
@ PROP_COLLECTION
Definition RNA_types.hh:71
#define RNA_TRANSLATION_PREC_DEFAULT
Definition RNA_types.hh:127
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
Definition RNA_types.hh:355
@ PROP_DYNAMIC
Definition RNA_types.hh:317
@ PROP_ANIMATABLE
Definition RNA_types.hh:220
@ PROP_PROPORTIONAL
Definition RNA_types.hh:250
@ PROP_EDITABLE
Definition RNA_types.hh:207
@ PROP_ENUM_FLAG
Definition RNA_types.hh:293
@ PROP_LIB_EXCEPTION
Definition RNA_types.hh:213
@ PROP_NEVER_NULL
Definition RNA_types.hh:266
@ PROP_NO_DEG_UPDATE
Definition RNA_types.hh:328
@ PROP_ID_SELF_CHECK
Definition RNA_types.hh:259
@ PROP_ID_REFCOUNT
Definition RNA_types.hh:253
#define RNA_ENUM_ITEM_HEADING(name, description)
Definition RNA_types.hh:522
@ PROP_TIME
Definition RNA_types.hh:156
@ PROP_MATRIX
Definition RNA_types.hh:168
@ PROP_XYZ
Definition RNA_types.hh:172
@ PROP_DISTANCE
Definition RNA_types.hh:159
@ PROP_COLOR
Definition RNA_types.hh:163
@ PROP_ANGLE
Definition RNA_types.hh:155
@ PROP_TIME_ABSOLUTE
Definition RNA_types.hh:157
@ PROP_EULER
Definition RNA_types.hh:169
@ PROP_COORDS
Definition RNA_types.hh:177
@ PROP_NONE
Definition RNA_types.hh:136
@ PROP_DIRPATH
Definition RNA_types.hh:140
@ PROP_PERCENTAGE
Definition RNA_types.hh:153
@ PROP_FACTOR
Definition RNA_types.hh:154
@ PROP_TRANSLATION
Definition RNA_types.hh:164
@ PROP_UNSIGNED
Definition RNA_types.hh:152
@ PROP_FILEPATH
Definition RNA_types.hh:139
@ PROP_VELOCITY
Definition RNA_types.hh:166
constexpr PointerRNA PointerRNA_NULL
Definition RNA_types.hh:45
#define NC_NODE
Definition WM_types.hh:361
#define NC_SCENE
Definition WM_types.hh:345
#define ND_MODIFIER
Definition WM_types.hh:429
#define NA_EDITED
Definition WM_types.hh:550
#define ND_TRANSFORM
Definition WM_types.hh:423
#define NA_RENAME
Definition WM_types.hh:554
#define NC_OBJECT
Definition WM_types.hh:346
PyObject * self
const Depsgraph * depsgraph
KDTree_3d * tree
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
void *(* MEM_mallocN)(size_t len, const char *str)
Definition mallocn.cc:44
void MEM_freeN(void *vmemh)
Definition mallocn.cc:105
ccl_device_inline float3 log(float3 v)
bool allow_procedural_attribute_access(StringRef attribute_name)
bool modifier_move_to_index(ReportList *reports, eReportType error_type, Object *ob, ModifierData *md, int index, bool allow_partial)
const EnumPropertyItem rna_enum_id_type_items[]
Definition rna_ID.cc:35
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
PointerRNA RNA_property_pointer_get(PointerRNA *ptr, PropertyRNA *prop)
void rna_iterator_array_begin(CollectionPropertyIterator *iter, void *ptr, int itemsize, int length, bool free_ptr, IteratorSkipFunc skip)
int RNA_int_get(PointerRNA *ptr, const char *name)
void RNA_property_update_main(Main *bmain, Scene *scene, PointerRNA *ptr, PropertyRNA *prop)
PointerRNA rna_pointer_inherit_refine(const PointerRNA *ptr, StructRNA *type, void *data)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
int RNA_enum_get(PointerRNA *ptr, const char *name)
const char * RNA_property_identifier(const PropertyRNA *prop)
PointerRNA RNA_id_pointer_create(ID *id)
PropertyRNA * RNA_def_float_factor(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
void RNA_def_struct_name_property(StructRNA *srna, PropertyRNA *prop)
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
void RNA_def_struct_refine_func(StructRNA *srna, const char *refine)
PropertyRNA * RNA_def_int_array(StructOrFunctionRNA *cont_, const char *identifier, const int len, const int *default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_define_lib_overridable(const bool make_overridable)
void RNA_def_struct_path_func(StructRNA *srna, const char *path)
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t bit)
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
void RNA_def_property_float_default(PropertyRNA *prop, float value)
void RNA_def_property_enum_default(PropertyRNA *prop, int value)
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_property_string_search_func(PropertyRNA *prop, const char *search, const eStringPropertySearchFlag search_flag)
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
void RNA_def_property_string_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_ui_icon(PropertyRNA *prop, int icon, int consecutive)
void RNA_def_property_srna(PropertyRNA *prop, const char *type)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, const char *next, const char *end, const char *get, const char *length, const char *lookupint, const char *lookupstring, const char *assignint)
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
void RNA_def_property_boolean_default(PropertyRNA *prop, bool value)
void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const char *set)
void RNA_def_property_dynamic_array_funcs(PropertyRNA *prop, const char *getlength)
void RNA_def_property_multi_array(PropertyRNA *prop, int dimension, const int length[])
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
FunctionRNA * RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
void RNA_def_property_array(PropertyRNA *prop, int length)
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
void RNA_def_property_string_maxlength(PropertyRNA *prop, int maxlength)
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, const char *propname, const char *lengthpropname)
void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
const int rna_matrix_dimsize_4x4[]
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
void RNA_def_property_enum_funcs(PropertyRNA *prop, const char *get, const char *set, const char *item)
void RNA_def_property_enum_bitflag_sdna(PropertyRNA *prop, const char *structname, const char *propname)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
void RNA_def_function_flag(FunctionRNA *func, int flag)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
PropertyRNA * RNA_def_float_array(StructOrFunctionRNA *cont_, const char *identifier, const int len, const float *default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_struct_ui_icon(StructRNA *srna, int icon)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_def_struct_idprops_func(StructRNA *srna, const char *idproperties)
void RNA_def_property_override_funcs(PropertyRNA *prop, const char *diff, const char *store, const char *apply)
void RNA_def_property_translation_context(PropertyRNA *prop, const char *context)
void RNA_def_property_ui_scale_type(PropertyRNA *prop, PropertyScaleType ui_scale_type)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_override_clear_flag(PropertyRNA *prop, PropertyOverrideFlag flag)
void RNA_enum_item_add_separator(EnumPropertyItem **items, int *totitem)
void RNA_def_property_subtype(PropertyRNA *prop, PropertySubType subtype)
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_enum_items_add_value(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item, int value)
void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision)
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_def_property_override_flag(PropertyRNA *prop, PropertyOverrideFlag flag)
void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
const EnumPropertyItem rna_enum_prop_dynamicpaint_type_items[]
int rna_object_vgroup_name_index_length(PointerRNA *ptr, int index)
void rna_object_vgroup_name_index_set(PointerRNA *ptr, const char *value, short *index)
void rna_object_vgroup_name_index_get(PointerRNA *ptr, char *value, int index)
const EnumPropertyItem rna_enum_mesh_delimit_mode_items[]
Definition rna_mesh.cc:37
const EnumPropertyItem rna_enum_axis_xy_items[]
static void rna_def_modifier_nodes(BlenderRNA *brna)
static void rna_def_modifier_fluid(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_hook(BlenderRNA *brna)
static void rna_def_modifier_smooth(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_weight_angle(BlenderRNA *brna)
const EnumPropertyItem rna_enum_subdivision_uv_smooth_items[]
const EnumPropertyItem rna_enum_dt_method_loop_items[]
static void rna_def_modifier_nodes_warning(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_vertex_group(StructRNA *srna, const char *vertex_group_name_set_fn)
static void rna_def_modifier_screw(BlenderRNA *brna)
static void rna_def_modifier_uvproject(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_lattice(BlenderRNA *brna)
static void rna_def_modifier_particleinstance(BlenderRNA *brna)
static void rna_def_modifier_nodes_panels(BlenderRNA *brna)
static void rna_def_modifier_edgesplit(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_dash(BlenderRNA *brna)
static void rna_def_modifier_bevel(BlenderRNA *brna)
const EnumPropertyItem rna_enum_dt_method_edge_items[]
static void rna_def_modifier_cloth(BlenderRNA *brna)
static void rna_def_modifier_shrinkwrap(BlenderRNA *brna)
static void rna_def_modifier_uvwarp(BlenderRNA *brna)
static void rna_def_modifier_meshseqcache(BlenderRNA *brna)
static void rna_def_modifier_simpledeform(BlenderRNA *brna)
static void rna_def_modifier_datatransfer(BlenderRNA *brna)
static void rna_def_modifier_weightvgmix(BlenderRNA *brna)
static void rna_def_modifier_meshdeform(BlenderRNA *brna)
static void rna_def_modifier_laplaciandeform(BlenderRNA *brna)
const EnumPropertyItem rna_enum_dt_method_poly_items[]
static void rna_def_modifier_grease_pencil_dash_segment(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_weight_proximity(BlenderRNA *brna)
static void rna_def_modifier_nodes_bakes(BlenderRNA *brna)
static void rna_def_modifier_explode(BlenderRNA *brna)
const EnumPropertyItem rna_enum_axis_flag_xyz_items[]
static void rna_def_modifier_grease_pencil_multiply(BlenderRNA *brna)
static const EnumPropertyItem modifier_warp_falloff_items[]
static void rna_def_modifier_particlesystem(BlenderRNA *brna)
static void rna_def_modifier_dynamic_paint(BlenderRNA *brna)
static void rna_def_modifier_generic_map_info(StructRNA *srna)
static void rna_def_modifier_grease_pencil_armature(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_layer_filter(StructRNA *srna)
const EnumPropertyItem rna_enum_modifier_triangulate_ngon_method_items[]
static void rna_def_modifier_nodes_panel(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_lineart(BlenderRNA *brna)
static void rna_def_modifier_mirror(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_custom_curve(StructRNA *srna)
static void rna_def_modifier_normaledit(BlenderRNA *brna)
static void rna_def_modifier_displace(BlenderRNA *brna)
const EnumPropertyItem rna_enum_shrinkwrap_face_cull_items[]
static void rna_def_modifier_meshcache(BlenderRNA *brna)
static void rna_def_modifier_skin(BlenderRNA *brna)
const EnumPropertyItem rna_enum_object_modifier_type_items[]
static void rna_def_modifier_weightvgedit(BlenderRNA *brna)
const EnumPropertyItem rna_enum_dt_mix_mode_items[]
static void rna_def_modifier_weld(BlenderRNA *brna)
static void rna_def_modifier_cast(BlenderRNA *brna)
static void rna_def_modifier_surface(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_simplify(BlenderRNA *brna)
static void rna_def_modifier_nodes_data_block(BlenderRNA *brna)
static void rna_def_modifier_panel_open_prop(StructRNA *srna, const char *identifier, const int id)
static void rna_def_modifier_curve(BlenderRNA *brna)
static void rna_def_modifier_wireframe(BlenderRNA *brna)
static void rna_def_modifier_softbody(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_shrinkwrap(BlenderRNA *brna)
const EnumPropertyItem rna_enum_dt_layers_select_src_items[]
static void rna_def_modifier_nodes_bake_data_blocks(BlenderRNA *brna)
static void rna_def_modifier_subsurf(BlenderRNA *brna)
static void rna_def_modifier_volume_displace(BlenderRNA *brna)
const EnumPropertyItem rna_enum_shrinkwrap_type_items[]
const EnumPropertyItem rna_enum_node_warning_type_items[]
static void rna_def_modifier_wave(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_time_segment(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_opacity(BlenderRNA *brna)
static EnumPropertyItem bake_target_in_node_items[]
static void rna_def_modifier_surfacedeform(BlenderRNA *brna)
const EnumPropertyItem rna_enum_axis_xyz_items[]
static void rna_def_modifier_lattice(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_thickness(BlenderRNA *brna)
static void rna_def_property_subdivision_common(StructRNA *srna)
static void rna_def_modifier_grease_pencil_material_filter(StructRNA *srna, const char *material_set_fn)
const EnumPropertyItem rna_enum_dt_method_vertex_items[]
const EnumPropertyItem rna_enum_modifier_triangulate_quad_method_items[]
void RNA_def_modifier(BlenderRNA *brna)
static void rna_def_modifier_multires(BlenderRNA *brna)
static void rna_def_modifier_triangulate(BlenderRNA *brna)
static void rna_def_modifier_mask(BlenderRNA *brna)
static void rna_def_modifier_warp(BlenderRNA *brna)
static void rna_def_modifier_weightvgproximity(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_mirror(BlenderRNA *brna)
static const EnumPropertyItem grease_pencil_build_time_mode_items[]
static void rna_def_modifier_grease_pencil_subdiv(BlenderRNA *brna)
static void rna_def_modifier_laplaciansmooth(BlenderRNA *brna)
static void rna_def_modifier_hook(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_envelope(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_array(BlenderRNA *brna)
static void rna_def_modifier_solidify(BlenderRNA *brna)
static void rna_def_modifier_nodes_bake(BlenderRNA *brna)
static void rna_def_modifier_ocean(BlenderRNA *brna)
static void rna_def_modifier_array(BlenderRNA *brna)
static void rna_def_modifier_collision(BlenderRNA *brna)
static void rna_def_modifier_armature(BlenderRNA *brna)
static void rna_def_modifier_weightednormal(BlenderRNA *brna)
static void rna_def_modifier_decimate(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_texture(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_color(BlenderRNA *brna)
static EnumPropertyItem bake_target_in_modifier_items[]
static void rna_def_modifier_grease_pencil_outline(BlenderRNA *brna)
static void rna_def_modifier_mesh_to_volume(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_offset(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_tint(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_length(BlenderRNA *brna)
const EnumPropertyItem rna_enum_dt_layers_select_dst_items[]
static void rna_def_modifier_grease_pencil_time(BlenderRNA *brna)
static void rna_def_modifier_boolean(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_smooth(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_build(BlenderRNA *brna)
const EnumPropertyItem rna_enum_subdivision_boundary_smooth_items[]
static void rna_def_modifier_remesh(BlenderRNA *brna)
static void rna_def_modifier_build(BlenderRNA *brna)
static void rna_def_modifier_grease_pencil_noise(BlenderRNA *brna)
static void rna_def_modifier_weightvg_mask(BlenderRNA *, StructRNA *srna, const char *mask_flags, const int invert_vgroup_mask_flag, const char *mask_vgroup_setter, const char *mask_uvlayer_setter)
const EnumPropertyItem rna_enum_modifier_shrinkwrap_mode_items[]
static void rna_def_modifier_correctivesmooth(BlenderRNA *brna)
static void rna_def_modifier_volume_to_mesh(BlenderRNA *brna)
const EnumPropertyItem rna_enum_object_axis_items[]
static const EnumPropertyItem space_items[]
static const EnumPropertyItem prop_solver_items[]
Definition rna_pose.cc:700
static const EnumPropertyItem prop_direction_items[]
#define min(a, b)
Definition sort.c:32
#define FLT_MAX
Definition stdcycles.h:14
__int64 int64_t
Definition stdint.h:89
#define INT16_MAX
Definition stdint.h:135
union CollectionPropertyIterator::@1329 internal
const char * identifier
Definition RNA_types.hh:506
GreasePencilDashModifierSegment * segments_array
GreasePencilTimeModifierSegment * segments_array
Definition DNA_ID.h:413
char name[66]
Definition DNA_ID.h:425
void * first
CustomData corner_data
CustomData vert_data
struct ModifierData * next
struct ModifierData * prev
uint16_t layout_panel_open_flag
struct bNodeTree * node_group
NodesModifierRuntimeHandle * runtime
struct NodesModifierSettings settings
NodesModifierBake * bakes
struct IDProperty * properties
ListBase particlesystem
ListBase modifiers
struct PartDeflect * pd
struct SoftBody * soft
ID * owner_id
Definition RNA_types.hh:40
void * data
Definition RNA_types.hh:42
IDOverrideLibraryPropertyOperation * liboverride_operation
struct PointCache * pointcache
struct SoftBody_Shared * shared
struct bDeformGroup * next
struct GeometryNodeAssetTraits * geometry_node_asset_traits
#define N_(msgid)
void WM_main_add_notifier(uint type, void *reference)
PointerRNA * ptr
Definition wm_files.cc:4126