Blender V4.5
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
8
9#include <cfloat>
10#include <climits>
11#include <cstdlib>
12
13#include "DNA_armature_types.h"
15#include "DNA_lineart_types.h"
16#include "DNA_modifier_types.h"
17#include "DNA_object_types.h"
18#include "DNA_scene_types.h"
19
20#include "BLI_math_rotation.h"
21
22#include "BLT_translation.hh"
23
24#include "BKE_animsys.h"
25#include "BKE_customdata.hh"
26#include "BKE_data_transfer.h"
27#include "BKE_grease_pencil.hh"
28#include "BKE_mesh_remap.hh"
29
30#include "RNA_define.hh"
31#include "RNA_enum_types.hh"
32
33#include "rna_internal.hh"
34
35#include "WM_api.hh"
36#include "WM_types.hh"
37
39
41 RNA_ENUM_ITEM_HEADING(N_("Modify"), nullptr),
43 "GREASE_PENCIL_VERTEX_WEIGHT_PROXIMITY",
44 ICON_MOD_VERTEX_WEIGHT,
45 "Vertex Weight Proximity",
46 "Generate vertex weights based on distance to object"},
47
48 RNA_ENUM_ITEM_HEADING(N_("Modify"), nullptr),
50 "DATA_TRANSFER",
51 ICON_MOD_DATA_TRANSFER,
52 "Data Transfer",
53 "Transfer several types of data (vertex groups, UV maps, vertex colors, custom normals) from "
54 "one mesh to another"},
56 "MESH_CACHE",
57 ICON_MOD_MESHDEFORM,
58 "Mesh Cache",
59 "Deform the mesh using an external frame-by-frame vertex transform cache"},
61 "MESH_SEQUENCE_CACHE",
62 ICON_MOD_MESHDEFORM,
63 "Mesh Sequence Cache",
64 "Deform the mesh or curve using an external mesh cache in Alembic format"},
66 "NORMAL_EDIT",
67 ICON_MOD_NORMALEDIT,
68 "Normal Edit",
69 "Modify the direction of the surface normals"},
71 "WEIGHTED_NORMAL",
72 ICON_MOD_NORMALEDIT,
73 "Weighted Normal",
74 "Modify the direction of the surface normals using a weighting method"},
76 "UV_PROJECT",
77 ICON_MOD_UVPROJECT,
78 "UV Project",
79 "Project the UV map coordinates from the negative Z axis of another object"},
81 "UV_WARP",
82 ICON_MOD_UVPROJECT,
83 "UV Warp",
84 "Transform the UV map using the difference between two objects"},
86 "VERTEX_WEIGHT_EDIT",
87 ICON_MOD_VERTEX_WEIGHT,
88 "Vertex Weight Edit",
89 "Modify of the weights of a vertex group"},
91 "VERTEX_WEIGHT_MIX",
92 ICON_MOD_VERTEX_WEIGHT,
93 "Vertex Weight Mix",
94 "Mix the weights of two vertex groups"},
96 "VERTEX_WEIGHT_PROXIMITY",
97 ICON_MOD_VERTEX_WEIGHT,
98 "Vertex Weight Proximity",
99 "Set the vertex group weights based on the distance to another target object"},
101 "GREASE_PENCIL_COLOR",
102 ICON_MOD_HUE_SATURATION,
103 "Hue/Saturation",
104 "Change hue/saturation/value of the strokes"},
106 "GREASE_PENCIL_TINT",
107 ICON_MOD_TINT,
108 "Tint",
109 "Tint the color of the strokes"},
111 "GREASE_PENCIL_OPACITY",
112 ICON_MOD_OPACITY,
113 "Opacity",
114 "Change the opacity of the strokes"},
116 "GREASE_PENCIL_VERTEX_WEIGHT_ANGLE",
117 ICON_MOD_VERTEX_WEIGHT,
118 "Vertex Weight Angle",
119 "Generate vertex weights based on stroke angle"},
121 "GREASE_PENCIL_TIME",
122 ICON_MOD_TIME,
123 "Time Offset",
124 "Offset keyframes"},
126 "GREASE_PENCIL_TEXTURE",
127 ICON_MOD_UVPROJECT,
128 "Texture Mapping",
129 "Change stroke UV texture values"},
130
131 RNA_ENUM_ITEM_HEADING(N_("Generate"), nullptr),
133 "ARRAY",
134 ICON_MOD_ARRAY,
135 "Array",
136 "Create copies of the shape with offsets"},
138 "BEVEL",
139 ICON_MOD_BEVEL,
140 "Bevel",
141 "Generate sloped corners by adding geometry to the mesh's edges or vertices"},
143 "BOOLEAN",
144 ICON_MOD_BOOLEAN,
145 "Boolean",
146 "Use another shape to cut, combine or perform a difference operation"},
148 "BUILD",
149 ICON_MOD_BUILD,
150 "Build",
151 "Cause the faces of the mesh object to appear or disappear one after the other over time"},
153 "DECIMATE",
154 ICON_MOD_DECIM,
155 "Decimate",
156 "Reduce the geometry density"},
158 "EDGE_SPLIT",
159 ICON_MOD_EDGESPLIT,
160 "Edge Split",
161 "Split away joined faces at the edges"},
162 {eModifierType_Nodes, "NODES", ICON_GEOMETRY_NODES, "Geometry Nodes", ""},
164 "MASK",
165 ICON_MOD_MASK,
166 "Mask",
167 "Dynamically hide vertices based on a vertex group or armature"},
169 "MIRROR",
170 ICON_MOD_MIRROR,
171 "Mirror",
172 "Mirror along the local X, Y and/or Z axes, over the object origin"},
174 "MESH_TO_VOLUME",
175 ICON_VOLUME_DATA,
176 "Mesh to Volume",
177 ""}, /* TODO: Use correct icon. */
179 "MULTIRES",
180 ICON_MOD_MULTIRES,
181 "Multiresolution",
182 "Subdivide the mesh in a way that allows editing the higher subdivision levels"},
184 "REMESH",
185 ICON_MOD_REMESH,
186 "Remesh",
187 "Generate new mesh topology based on the current shape"},
189 "SCREW",
190 ICON_MOD_SCREW,
191 "Screw",
192 "Lathe around an axis, treating the input mesh as a profile"},
194 "SKIN",
195 ICON_MOD_SKIN,
196 "Skin",
197 "Create a solid shape from vertices and edges, using the vertex radius to define the "
198 "thickness"},
199 {eModifierType_Solidify, "SOLIDIFY", ICON_MOD_SOLIDIFY, "Solidify", "Make the surface thick"},
201 "SUBSURF",
202 ICON_MOD_SUBSURF,
203 "Subdivision Surface",
204 "Split the faces into smaller parts, giving it a smoother appearance"},
206 "TRIANGULATE",
207 ICON_MOD_TRIANGULATE,
208 "Triangulate",
209 "Convert all polygons to triangles"},
211 "VOLUME_TO_MESH",
212 ICON_VOLUME_DATA,
213 "Volume to Mesh",
214 ""}, /* TODO: Use correct icon. */
216 "WELD",
217 ICON_AUTOMERGE_OFF,
218 "Weld",
219 "Find groups of vertices closer than dist and merge them together"},
221 "WIREFRAME",
222 ICON_MOD_WIREFRAME,
223 "Wireframe",
224 "Convert faces into thickened edges"},
226 "GREASE_PENCIL_ARRAY",
227 ICON_MOD_ARRAY,
228 "Array",
229 "Duplicate strokes into an array"},
231 "GREASE_PENCIL_BUILD",
232 ICON_MOD_BUILD,
233 "Build",
234 "Grease Pencil build modifier"},
236 "GREASE_PENCIL_LENGTH",
237 ICON_MOD_LENGTH,
238 "Length",
239 "Grease Pencil length modifier"},
241 "LINEART",
242 ICON_MOD_LINEART,
243 "Line Art",
244 "Generate Line Art from scene geometries"},
246 "GREASE_PENCIL_MIRROR",
247 ICON_MOD_MIRROR,
248 "Mirror",
249 "Duplicate strokes like a mirror"},
251 "GREASE_PENCIL_MULTIPLY",
252 ICON_GP_MULTIFRAME_EDITING,
253 "Multiple Strokes",
254 "Generate multiple strokes around original strokes"},
256 "GREASE_PENCIL_SIMPLIFY",
257 ICON_MOD_SIMPLIFY,
258 "Simplify",
259 "Simplify stroke reducing number of points"},
261 "GREASE_PENCIL_SUBDIV",
262 ICON_MOD_SUBSURF,
263 "Subdivide",
264 "Grease Pencil subdivide modifier"},
266 "GREASE_PENCIL_ENVELOPE",
267 ICON_MOD_ENVELOPE,
268 "Envelope",
269 "Create an envelope shape"},
271 "GREASE_PENCIL_OUTLINE",
272 ICON_MOD_OUTLINE,
273 "Outline",
274 "Convert stroke to outline"},
275
276 RNA_ENUM_ITEM_HEADING(N_("Deform"), nullptr),
278 "ARMATURE",
279 ICON_MOD_ARMATURE,
280 "Armature",
281 "Deform the shape using an armature object"},
283 "CAST",
284 ICON_MOD_CAST,
285 "Cast",
286 "Shift the shape towards a predefined primitive"},
287 {eModifierType_Curve, "CURVE", ICON_MOD_CURVE, "Curve", "Bend the mesh using a curve object"},
289 "DISPLACE",
290 ICON_MOD_DISPLACE,
291 "Displace",
292 "Offset vertices based on a texture"},
293 {eModifierType_Hook, "HOOK", ICON_HOOK, "Hook", "Deform specific points using another object"},
295 "LAPLACIANDEFORM",
296 ICON_MOD_MESHDEFORM,
297 "Laplacian Deform",
298 "Deform based a series of anchor points"},
300 "LATTICE",
301 ICON_MOD_LATTICE,
302 "Lattice",
303 "Deform using the shape of a lattice object"},
305 "MESH_DEFORM",
306 ICON_MOD_MESHDEFORM,
307 "Mesh Deform",
308 "Deform using a different mesh, which acts as a deformation cage"},
310 "SHRINKWRAP",
311 ICON_MOD_SHRINKWRAP,
312 "Shrinkwrap",
313 "Project the shape onto another object"},
315 "SIMPLE_DEFORM",
316 ICON_MOD_SIMPLEDEFORM,
317 "Simple Deform",
318 "Deform the shape by twisting, bending, tapering or stretching"},
320 "SMOOTH",
321 ICON_MOD_SMOOTH,
322 "Smooth",
323 "Smooth the mesh by flattening the angles between adjacent faces"},
325 "CORRECTIVE_SMOOTH",
326 ICON_MOD_SMOOTH,
327 "Smooth Corrective",
328 "Smooth the mesh while still preserving the volume"},
330 "LAPLACIANSMOOTH",
331 ICON_MOD_SMOOTH,
332 "Smooth Laplacian",
333 "Reduce the noise on a mesh surface with minimal changes to its shape"},
335 "SURFACE_DEFORM",
336 ICON_MOD_MESHDEFORM,
337 "Surface Deform",
338 "Transfer motion from another mesh"},
340 "WARP",
341 ICON_MOD_WARP,
342 "Warp",
343 "Warp parts of a mesh to a new location in a very flexible way thanks to 2 specified "
344 "objects"},
346 "WAVE",
347 ICON_MOD_WAVE,
348 "Wave",
349 "Adds a ripple-like motion to an object's geometry"},
351 "VOLUME_DISPLACE",
352 ICON_VOLUME_DATA,
353 "Volume Displace",
354 "Deform volume based on noise or other vector fields"}, /* TODO: Use correct icon. */
356 "GREASE_PENCIL_HOOK",
357 ICON_HOOK,
358 "Hook",
359 "Deform stroke points using objects"},
361 "GREASE_PENCIL_NOISE",
362 ICON_MOD_NOISE,
363 "Noise",
364 "Generate noise wobble in Grease Pencil strokes"},
366 "GREASE_PENCIL_OFFSET",
367 ICON_MOD_OFFSET,
368 "Offset",
369 "Change stroke location, rotation, or scale"},
371 "GREASE_PENCIL_SMOOTH",
372 ICON_SMOOTHCURVE,
373 "Smooth",
374 "Smooth Grease Pencil strokes"},
376 "GREASE_PENCIL_THICKNESS",
377 ICON_MOD_THICKNESS,
378 "Thickness",
379 "Change stroke thickness"},
381 "GREASE_PENCIL_LATTICE",
382 ICON_MOD_LATTICE,
383 "Lattice",
384 "Deform strokes using a lattice object"},
386 "GREASE_PENCIL_DASH",
387 ICON_MOD_DASH,
388 "Dot Dash",
389 "Generate dot-dash styled strokes"},
391 "GREASE_PENCIL_ARMATURE",
392 ICON_MOD_ARMATURE,
393 "Armature",
394 "Deform stroke points using armature object"},
396 "GREASE_PENCIL_SHRINKWRAP",
397 ICON_MOD_SHRINKWRAP,
398 "Shrinkwrap",
399 "Project the shape onto another object"},
400
401 RNA_ENUM_ITEM_HEADING(N_("Physics"), nullptr),
402 {eModifierType_Cloth, "CLOTH", ICON_MOD_CLOTH, "Cloth", "Physic simulation for cloth"},
404 "COLLISION",
405 ICON_MOD_PHYSICS,
406 "Collision",
407 "For colliders participating in physics simulation, control which level in the modifier "
408 "stack is used as the collision surface"},
410 "DYNAMIC_PAINT",
411 ICON_MOD_DYNAMICPAINT,
412 "Dynamic Paint",
413 "Turn objects into paint canvases and brushes, creating color attributes, image sequences, "
414 "or displacement"},
416 "EXPLODE",
417 ICON_MOD_EXPLODE,
418 "Explode",
419 "Break apart the mesh faces and let them follow particles"},
421 "FLUID",
422 ICON_MOD_FLUIDSIM,
423 "Fluid",
424 "Physics simulation for fluids, like water, oil and smoke"},
425 {eModifierType_Ocean, "OCEAN", ICON_MOD_OCEAN, "Ocean", "Generate a moving ocean surface"},
427 "PARTICLE_INSTANCE",
428 ICON_MOD_PARTICLE_INSTANCE,
429 "Particle Instance",
430 "Duplicate mesh at the location of particles"},
432 "PARTICLE_SYSTEM",
433 ICON_MOD_PARTICLES,
434 "Particle System",
435 "Spawn particles from the shape"},
437 "SOFT_BODY",
438 ICON_MOD_SOFT,
439 "Soft Body",
440 "Simulate soft deformable objects"},
441 {eModifierType_Surface, "SURFACE", ICON_MODIFIER, "Surface", ""},
442 {0, nullptr, 0, nullptr, nullptr},
443};
444
447 "BEAUTY",
448 0,
449 "Beauty",
450 "Split the quads in nice triangles, slower method"},
452 "FIXED",
453 0,
454 "Fixed",
455 "Split the quads on the first and third vertices"},
457 "FIXED_ALTERNATE",
458 0,
459 "Fixed Alternate",
460 "Split the quads on the 2nd and 4th vertices"},
462 "SHORTEST_DIAGONAL",
463 0,
464 "Shortest Diagonal",
465 "Split the quads along their shortest diagonal"},
467 "LONGEST_DIAGONAL",
468 0,
469 "Longest Diagonal",
470 "Split the quads along their longest diagonal"},
471 {0, nullptr, 0, nullptr, nullptr},
472};
473
476 "BEAUTY",
477 0,
478 "Beauty",
479 "Arrange the new triangles evenly (slow)"},
481 "CLIP",
482 0,
483 "Clip",
484 "Split the polygons with an ear clipping algorithm"},
485 {0, nullptr, 0, nullptr, nullptr},
486};
487
490 "ON_SURFACE",
491 0,
492 "On Surface",
493 "The point is constrained to the surface of the target object, "
494 "with distance offset towards the original point location"},
496 "INSIDE",
497 0,
498 "Inside",
499 "The point is constrained to be inside the target object"},
501 "OUTSIDE",
502 0,
503 "Outside",
504 "The point is constrained to be outside the target object"},
506 "OUTSIDE_SURFACE",
507 0,
508 "Outside Surface",
509 "The point is constrained to the surface of the target object, "
510 "with distance offset always to the outside, towards or away from the original location"},
512 "ABOVE_SURFACE",
513 0,
514 "Above Surface",
515 "The point is constrained to the surface of the target object, "
516 "with distance offset applied exactly along the target normal"},
517 {0, nullptr, 0, nullptr, nullptr},
518};
519
522 "NEAREST_SURFACEPOINT",
523 0,
524 "Nearest Surface Point",
525 "Shrink the mesh to the nearest target surface"},
527 "PROJECT",
528 0,
529 "Project",
530 "Shrink the mesh to the nearest target surface along a given axis"},
532 "NEAREST_VERTEX",
533 0,
534 "Nearest Vertex",
535 "Shrink the mesh to the nearest target vertex"},
537 "TARGET_PROJECT",
538 0,
539 "Target Normal Project",
540 "Shrink the mesh to the nearest target surface "
541 "along the interpolated vertex normals of the target"},
542 {0, nullptr, 0, nullptr, nullptr},
543};
544
546 {0, "OFF", 0, "Off", "No culling"},
548 "FRONT",
549 0,
550 "Front",
551 "No projection when in front of the face"},
552 {MOD_SHRINKWRAP_CULL_TARGET_BACKFACE, "BACK", 0, "Back", "No projection when behind the face"},
553 {0, nullptr, 0, nullptr, nullptr},
554};
555
557 {int(blender::nodes::NodeWarningType::Error), "ERROR", ICON_CANCEL, "Error", ""},
558 {int(blender::nodes::NodeWarningType::Warning), "WARNING", ICON_ERROR, "Warning", ""},
559 {int(blender::nodes::NodeWarningType::Info), "INFO", ICON_INFO, "Info", ""},
560 {0, nullptr, 0, nullptr, nullptr},
561};
562
563#ifndef RNA_RUNTIME
564/* use eWarp_Falloff_*** & eHook_Falloff_***, they're in sync */
566 {eWarp_Falloff_None, "NONE", 0, "No Falloff", ""},
567 {eWarp_Falloff_Curve, "CURVE", 0, "Curve", ""},
568 {eWarp_Falloff_Smooth, "SMOOTH", ICON_SMOOTHCURVE, "Smooth", ""},
569 {eWarp_Falloff_Sphere, "SPHERE", ICON_SPHERECURVE, "Sphere", ""},
570 {eWarp_Falloff_Root, "ROOT", ICON_ROOTCURVE, "Root", ""},
571 {eWarp_Falloff_InvSquare, "INVERSE_SQUARE", ICON_ROOTCURVE, "Inverse Square", ""},
572 {eWarp_Falloff_Sharp, "SHARP", ICON_SHARPCURVE, "Sharp", ""},
573 {eWarp_Falloff_Linear, "LINEAR", ICON_LINCURVE, "Linear", ""},
574 {eWarp_Falloff_Const, "CONSTANT", ICON_NOCURVE, "Constant", ""},
575 {0, nullptr, 0, nullptr, nullptr},
576};
577#endif
578
579/* ***** Data Transfer ***** */
580
582 {MREMAP_MODE_TOPOLOGY, "TOPOLOGY", 0, "Topology", "Copy from identical topology meshes"},
583 {MREMAP_MODE_VERT_NEAREST, "NEAREST", 0, "Nearest Vertex", "Copy from closest vertex"},
585 "EDGE_NEAREST",
586 0,
587 "Nearest Edge Vertex",
588 "Copy from closest vertex of closest edge"},
590 "EDGEINTERP_NEAREST",
591 0,
592 "Nearest Edge Interpolated",
593 "Copy from interpolated values of vertices from closest point on closest edge"},
595 "POLY_NEAREST",
596 0,
597 "Nearest Face Vertex",
598 "Copy from closest vertex of closest face"},
600 "POLYINTERP_NEAREST",
601 0,
602 "Nearest Face Interpolated",
603 "Copy from interpolated values of vertices from closest point on closest face"},
605 "POLYINTERP_VNORPROJ",
606 0,
607 "Projected Face Interpolated",
608 "Copy from interpolated values of vertices from point on closest face hit by "
609 "normal-projection"},
610 {0, nullptr, 0, nullptr, nullptr},
611};
612
614 {MREMAP_MODE_TOPOLOGY, "TOPOLOGY", 0, "Topology", "Copy from identical topology meshes"},
616 "VERT_NEAREST",
617 0,
618 "Nearest Vertices",
619 "Copy from most similar edge (edge which vertices are the closest of destination edge's "
620 "ones)"},
622 "NEAREST",
623 0,
624 "Nearest Edge",
625 "Copy from closest edge (using midpoints)"},
627 "POLY_NEAREST",
628 0,
629 "Nearest Face Edge",
630 "Copy from closest edge of closest face (using midpoints)"},
632 "EDGEINTERP_VNORPROJ",
633 0,
634 "Projected Edge Interpolated",
635 "Interpolate all source edges hit by the projection of destination one along its own normal "
636 "(from vertices)"},
637 {0, nullptr, 0, nullptr, nullptr},
638};
639
641 {MREMAP_MODE_TOPOLOGY, "TOPOLOGY", 0, "Topology", "Copy from identical topology meshes"},
643 "NEAREST_NORMAL",
644 0,
645 "Nearest Corner and Best Matching Normal",
646 "Copy from nearest corner which has the best matching normal"},
648 "NEAREST_POLYNOR",
649 0,
650 "Nearest Corner and Best Matching Face Normal",
651 "Copy from nearest corner which has the face with the best matching normal to destination "
652 "corner's face one"},
654 "NEAREST_POLY",
655 0,
656 "Nearest Corner of Nearest Face",
657 "Copy from nearest corner of nearest face"},
659 "POLYINTERP_NEAREST",
660 0,
661 "Nearest Face Interpolated",
662 "Copy from interpolated corners of the nearest source face"},
664 "POLYINTERP_LNORPROJ",
665 0,
666 "Projected Face Interpolated",
667 "Copy from interpolated corners of the source face hit by corner normal projection"},
668 {0, nullptr, 0, nullptr, nullptr},
669};
670
672 {MREMAP_MODE_TOPOLOGY, "TOPOLOGY", 0, "Topology", "Copy from identical topology meshes"},
674 "NEAREST",
675 0,
676 "Nearest Face",
677 "Copy from nearest face (using center points)"},
679 "NORMAL",
680 0,
681 "Best Normal-Matching",
682 "Copy from source face which normal is the closest to destination one"},
684 "POLYINTERP_PNORPROJ",
685 0,
686 "Projected Face Interpolated",
687 "Interpolate all source polygons intersected by the projection of destination one along its "
688 "own normal"},
689 {0, nullptr, 0, nullptr, nullptr},
690};
691
693 {CDT_MIX_TRANSFER, "REPLACE", 0, "Replace", "Overwrite all elements' data"},
695 "ABOVE_THRESHOLD",
696 0,
697 "Above Threshold",
698 "Only replace destination elements where data is above given threshold (exact behavior "
699 "depends on data type)"},
701 "BELOW_THRESHOLD",
702 0,
703 "Below Threshold",
704 "Only replace destination elements where data is below given threshold (exact behavior "
705 "depends on data type)"},
707 "MIX",
708 0,
709 "Mix",
710 "Mix source value into destination one, using given threshold as factor"},
712 "ADD",
713 0,
714 "Add",
715 "Add source value to destination one, using given threshold as factor"},
717 "SUB",
718 0,
719 "Subtract",
720 "Subtract source value to destination one, using given threshold as factor"},
722 "MUL",
723 0,
724 "Multiply",
725 "Multiply source value to destination one, using given threshold as factor"},
726 /* Etc. */
727 {0, nullptr, 0, nullptr, nullptr},
728};
729
731 {DT_LAYERS_ACTIVE_SRC, "ACTIVE", 0, "Active Layer", "Only transfer active data layer"},
732 {DT_LAYERS_ALL_SRC, "ALL", 0, "All Layers", "Transfer all data layers"},
734 "BONE_SELECT",
735 0,
736 "Selected Pose Bones",
737 "Transfer all vertex groups used by selected pose bones"},
739 "BONE_DEFORM",
740 0,
741 "Deform Pose Bones",
742 "Transfer all vertex groups used by deform bones"},
743 {0, nullptr, 0, nullptr, nullptr},
744};
745
747 {DT_LAYERS_ACTIVE_DST, "ACTIVE", 0, "Active Layer", "Affect active data layer of all targets"},
748 {DT_LAYERS_NAME_DST, "NAME", 0, "By Name", "Match target data layers to affect by name"},
750 "INDEX",
751 0,
752 "By Order",
753 "Match target data layers to affect by order (indices)"},
754 {0, nullptr, 0, nullptr, nullptr},
755};
756
758 {0, "X", 0, "X", ""},
759 {1, "Y", 0, "Y", ""},
760 {0, nullptr, 0, nullptr, nullptr},
761};
762
764 {0, "X", 0, "X", ""},
765 {1, "Y", 0, "Y", ""},
766 {2, "Z", 0, "Z", ""},
767 {0, nullptr, 0, nullptr, nullptr},
768};
769
771 {(1 << 0), "X", 0, "X", ""},
772 {(1 << 1), "Y", 0, "Y", ""},
773 {(1 << 2), "Z", 0, "Z", ""},
774 {0, nullptr, 0, nullptr, nullptr},
775};
776
778 {SUBSURF_UV_SMOOTH_NONE, "NONE", 0, "None", "UVs are not smoothed, boundaries are kept sharp"},
780 "PRESERVE_CORNERS",
781 0,
782 "Keep Corners",
783 "UVs are smoothed, corners on discontinuous boundary are kept sharp"},
785 "PRESERVE_CORNERS_AND_JUNCTIONS",
786 0,
787 "Keep Corners, Junctions",
788 "UVs are smoothed, corners on discontinuous boundary and "
789 "junctions of 3 or more regions are kept sharp"},
791 "PRESERVE_CORNERS_JUNCTIONS_AND_CONCAVE",
792 0,
793 "Keep Corners, Junctions, Concave",
794 "UVs are smoothed, corners on discontinuous boundary, "
795 "junctions of 3 or more regions and darts and concave corners are kept sharp"},
797 "PRESERVE_BOUNDARIES",
798 0,
799 "Keep Boundaries",
800 "UVs are smoothed, boundaries are kept sharp"},
801 {SUBSURF_UV_SMOOTH_ALL, "SMOOTH_ALL", 0, "All", "UVs and boundaries are smoothed"},
802 {0, nullptr, 0, nullptr, nullptr},
803};
804
807 "PRESERVE_CORNERS",
808 0,
809 "Keep Corners",
810 "Smooth boundaries, but corners are kept sharp"},
811 {SUBSURF_BOUNDARY_SMOOTH_ALL, "ALL", 0, "All", "Smooth boundaries, including corners"},
812 {0, nullptr, 0, nullptr, nullptr},
813};
814
817 "DRAWSPEED",
818 0,
819 "Natural Drawing Speed",
820 "Use recorded speed multiplied by a factor"},
822 "FRAMES",
823 0,
824 "Number of Frames",
825 "Set a fixed number of frames for all build animations"},
827 "PERCENTAGE",
828 0,
829 "Percentage Factor",
830 "Set a manual percentage to build"},
831 {0, nullptr, 0, nullptr, nullptr},
832};
833
834#ifdef RNA_RUNTIME
835
836# include <algorithm>
837# include <fmt/format.h>
838
839# include "DNA_curve_types.h"
840# include "DNA_fluid_types.h"
841# include "DNA_material_types.h"
842# include "DNA_mesh_types.h"
843# include "DNA_object_force_types.h"
844# include "DNA_particle_types.h"
845
846# include "BKE_cachefile.hh"
847# include "BKE_compute_contexts.hh"
848# include "BKE_context.hh"
849# include "BKE_curveprofile.h"
850# include "BKE_deform.hh"
851# include "BKE_fluid.h"
852# include "BKE_material.hh"
853# include "BKE_mesh_runtime.hh"
854# include "BKE_modifier.hh"
855# include "BKE_multires.hh"
856# include "BKE_object.hh"
857# include "BKE_ocean.h"
858# include "BKE_particle.h"
859
860# include "BLI_sort_utils.h"
861# include "BLI_string_utils.hh"
862
863# include "DEG_depsgraph.hh"
864# include "DEG_depsgraph_build.hh"
865# include "DEG_depsgraph_query.hh"
866
867# include "MOD_nodes.hh"
868
869# include "ED_object.hh"
870
871# ifdef WITH_ALEMBIC
872# include "ABC_alembic.h"
873# endif
874
875static void rna_UVProject_projectors_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
876{
879 iter, ptr, (void *)uvp->projectors, sizeof(Object *), uvp->projectors_num, 0, nullptr);
880}
881
882static StructRNA *rna_Modifier_refine(PointerRNA *ptr)
883{
884 ModifierData *md = (ModifierData *)ptr->data;
885 const ModifierTypeInfo *modifier_type = BKE_modifier_get_info(ModifierType(md->type));
886 if (modifier_type != nullptr) {
887 return modifier_type->srna;
888 }
889 return &RNA_Modifier;
890}
891
892static void rna_Modifier_name_set(PointerRNA *ptr, const char *value)
893{
894 ModifierData *md = static_cast<ModifierData *>(ptr->data);
895 char oldname[sizeof(md->name)];
896
897 /* make a copy of the old name first */
898 STRNCPY(oldname, md->name);
899
900 /* copy the new name into the name slot */
901 STRNCPY_UTF8(md->name, value);
902
903 /* make sure the name is truly unique */
904 if (ptr->owner_id) {
905 Object *ob = (Object *)ptr->owner_id;
906 BKE_modifier_unique_name(&ob->modifiers, md);
907 }
908
909 /* fix all the animation data which may link to this */
910 BKE_animdata_fix_paths_rename_all(nullptr, "modifiers", oldname, md->name);
911}
912
913static void rna_Modifier_name_update(Main *bmain, Scene * /*scene*/, PointerRNA * /*ptr*/)
914{
916}
917
918static std::optional<std::string> rna_Modifier_path(const PointerRNA *ptr)
919{
920 const ModifierData *md = static_cast<const ModifierData *>(ptr->data);
921 char name_esc[sizeof(md->name) * 2];
922
923 BLI_str_escape(name_esc, md->name, sizeof(name_esc));
924 return fmt::format("modifiers[\"{}\"]", name_esc);
925}
926
927static void rna_Modifier_update(Main * /*bmain*/, Scene * /*scene*/, PointerRNA *ptr)
928{
931}
932
933static void rna_Modifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
934{
935 rna_Modifier_update(bmain, scene, ptr);
937}
938
939static void rna_NodesModifier_bake_update(Main *bmain, Scene *scene, PointerRNA *ptr)
940{
941 rna_Modifier_update(bmain, scene, ptr);
943}
944
945static void rna_Modifier_is_active_set(PointerRNA *ptr, bool value)
946{
947 ModifierData *md = static_cast<ModifierData *>(ptr->data);
948
949 if (value) {
950 /* Disable the active flag of all other modifiers. */
951 for (ModifierData *prev_md = md->prev; prev_md != nullptr; prev_md = prev_md->prev) {
952 prev_md->flag &= ~eModifierFlag_Active;
953 }
954 for (ModifierData *next_md = md->next; next_md != nullptr; next_md = next_md->next) {
955 next_md->flag &= ~eModifierFlag_Active;
956 }
957
960 }
961}
962
963static void rna_Modifier_use_pin_to_last_set(PointerRNA *ptr, bool value)
964{
965 Object *object = reinterpret_cast<Object *>(ptr->owner_id);
966 ModifierData *md = static_cast<ModifierData *>(ptr->data);
968
969 int to_index = BLI_findindex(&object->modifiers, md);
970 if (value) {
971 ModifierData *md_iter = md;
972 while (md_iter->next && (md_iter->next->flag & eModifierFlag_PinLast) == 0) {
973 to_index++;
974 md_iter = md_iter->next;
975 }
976 }
977 else {
978 ModifierData *md_iter = md;
979 while (md_iter->prev && (md_iter->prev->flag & eModifierFlag_PinLast)) {
980 to_index--;
981 md_iter = md_iter->prev;
982 }
983 }
984 blender::ed::object::modifier_move_to_index(nullptr, RPT_ERROR, object, md, to_index, true);
985}
986
987/* Vertex Groups */
988
989# define RNA_MOD_VGROUP_NAME_SET(_type, _prop) \
990 static void rna_##_type##Modifier_##_prop##_set(PointerRNA *ptr, const char *value) \
991 { \
992 _type##ModifierData *tmd = (_type##ModifierData *)ptr->data; \
993 rna_object_vgroup_name_set(ptr, value, tmd->_prop, sizeof(tmd->_prop)); \
994 }
995
996RNA_MOD_VGROUP_NAME_SET(Armature, defgrp_name);
997RNA_MOD_VGROUP_NAME_SET(Bevel, defgrp_name);
998RNA_MOD_VGROUP_NAME_SET(Cast, defgrp_name);
999RNA_MOD_VGROUP_NAME_SET(Curve, name);
1000RNA_MOD_VGROUP_NAME_SET(DataTransfer, defgrp_name);
1001RNA_MOD_VGROUP_NAME_SET(Decimate, defgrp_name);
1002RNA_MOD_VGROUP_NAME_SET(CorrectiveSmooth, defgrp_name);
1003RNA_MOD_VGROUP_NAME_SET(Displace, defgrp_name);
1004RNA_MOD_VGROUP_NAME_SET(Hook, name);
1005RNA_MOD_VGROUP_NAME_SET(LaplacianDeform, anchor_grp_name);
1006RNA_MOD_VGROUP_NAME_SET(LaplacianSmooth, defgrp_name);
1007RNA_MOD_VGROUP_NAME_SET(Lattice, name);
1008RNA_MOD_VGROUP_NAME_SET(Mask, vgroup);
1009RNA_MOD_VGROUP_NAME_SET(MeshCache, defgrp_name);
1010RNA_MOD_VGROUP_NAME_SET(MeshDeform, defgrp_name);
1011RNA_MOD_VGROUP_NAME_SET(NormalEdit, defgrp_name);
1012RNA_MOD_VGROUP_NAME_SET(Shrinkwrap, vgroup_name);
1013RNA_MOD_VGROUP_NAME_SET(SimpleDeform, vgroup_name);
1014RNA_MOD_VGROUP_NAME_SET(Smooth, defgrp_name);
1015RNA_MOD_VGROUP_NAME_SET(Solidify, defgrp_name);
1016RNA_MOD_VGROUP_NAME_SET(Solidify, shell_defgrp_name);
1017RNA_MOD_VGROUP_NAME_SET(Solidify, rim_defgrp_name);
1018RNA_MOD_VGROUP_NAME_SET(SurfaceDeform, defgrp_name);
1019RNA_MOD_VGROUP_NAME_SET(UVWarp, vgroup_name);
1020RNA_MOD_VGROUP_NAME_SET(Warp, defgrp_name);
1021RNA_MOD_VGROUP_NAME_SET(Wave, defgrp_name);
1022RNA_MOD_VGROUP_NAME_SET(WeightVGEdit, defgrp_name);
1023RNA_MOD_VGROUP_NAME_SET(WeightVGEdit, mask_defgrp_name);
1024RNA_MOD_VGROUP_NAME_SET(WeightVGMix, defgrp_name_a);
1025RNA_MOD_VGROUP_NAME_SET(WeightVGMix, defgrp_name_b);
1026RNA_MOD_VGROUP_NAME_SET(WeightVGMix, mask_defgrp_name);
1027RNA_MOD_VGROUP_NAME_SET(WeightVGProximity, defgrp_name);
1028RNA_MOD_VGROUP_NAME_SET(WeightVGProximity, mask_defgrp_name);
1029RNA_MOD_VGROUP_NAME_SET(WeightedNormal, defgrp_name);
1030RNA_MOD_VGROUP_NAME_SET(Weld, defgrp_name);
1031RNA_MOD_VGROUP_NAME_SET(Wireframe, defgrp_name);
1032RNA_MOD_VGROUP_NAME_SET(GreasePencilWeightAngle, target_vgname);
1033RNA_MOD_VGROUP_NAME_SET(GreasePencilWeightProximity, target_vgname);
1034RNA_MOD_VGROUP_NAME_SET(GreasePencilLineart, vgname);
1035RNA_MOD_VGROUP_NAME_SET(GreasePencilBuild, target_vgname);
1036
1037static void rna_ExplodeModifier_vgroup_get(PointerRNA *ptr, char *value)
1038{
1040 rna_object_vgroup_name_index_get(ptr, value, emd->vgroup);
1041}
1042
1043static int rna_ExplodeModifier_vgroup_length(PointerRNA *ptr)
1044{
1046 return rna_object_vgroup_name_index_length(ptr, emd->vgroup);
1047}
1048
1049static void rna_ExplodeModifier_vgroup_set(PointerRNA *ptr, const char *value)
1050{
1052 rna_object_vgroup_name_index_set(ptr, value, &emd->vgroup);
1053}
1054
1055# undef RNA_MOD_VGROUP_NAME_SET
1056
1057/* UV layers */
1058
1059# define RNA_MOD_UVLAYER_NAME_SET(_type, _prop) \
1060 static void rna_##_type##Modifier_##_prop##_set(PointerRNA *ptr, const char *value) \
1061 { \
1062 _type##ModifierData *tmd = (_type##ModifierData *)ptr->data; \
1063 rna_object_uvlayer_name_set(ptr, value, tmd->_prop, sizeof(tmd->_prop)); \
1064 }
1065
1066RNA_MOD_UVLAYER_NAME_SET(MappingInfo, uvlayer_name);
1067RNA_MOD_UVLAYER_NAME_SET(UVProject, uvlayer_name);
1068RNA_MOD_UVLAYER_NAME_SET(UVWarp, uvlayer_name);
1069RNA_MOD_UVLAYER_NAME_SET(WeightVGEdit, mask_tex_uvlayer_name);
1070RNA_MOD_UVLAYER_NAME_SET(WeightVGMix, mask_tex_uvlayer_name);
1071RNA_MOD_UVLAYER_NAME_SET(WeightVGProximity, mask_tex_uvlayer_name);
1072
1073# undef RNA_MOD_UVLAYER_NAME_SET
1074
1075/* Objects */
1076
1077static void modifier_object_set(Object *self, Object **ob_p, int type, PointerRNA value)
1078{
1079 Object *ob = static_cast<Object *>(value.data);
1080
1081 if (!self || ob != self) {
1082 if (!ob || type == OB_EMPTY || ob->type == type) {
1083 id_lib_extern((ID *)ob);
1084 *ob_p = ob;
1085 }
1086 }
1087}
1088
1089# define RNA_MOD_OBJECT_SET(_type, _prop, _obtype) \
1090 static void rna_##_type##Modifier_##_prop##_set( \
1091 PointerRNA *ptr, PointerRNA value, ReportList * /*reports*/) \
1092 { \
1093 _type##ModifierData *tmd = (_type##ModifierData *)ptr->data; \
1094 modifier_object_set((Object *)ptr->owner_id, &tmd->_prop, _obtype, value); \
1095 }
1096
1097RNA_MOD_OBJECT_SET(Armature, object, OB_ARMATURE);
1098RNA_MOD_OBJECT_SET(Array, start_cap, OB_MESH);
1099RNA_MOD_OBJECT_SET(Array, end_cap, OB_MESH);
1100RNA_MOD_OBJECT_SET(Array, curve_ob, OB_CURVES_LEGACY);
1101RNA_MOD_OBJECT_SET(Boolean, object, OB_MESH);
1102RNA_MOD_OBJECT_SET(Cast, object, OB_EMPTY);
1103RNA_MOD_OBJECT_SET(Curve, object, OB_CURVES_LEGACY);
1104RNA_MOD_OBJECT_SET(DataTransfer, ob_source, OB_MESH);
1105RNA_MOD_OBJECT_SET(Lattice, object, OB_LATTICE);
1106RNA_MOD_OBJECT_SET(Mask, ob_arm, OB_ARMATURE);
1107RNA_MOD_OBJECT_SET(MeshDeform, object, OB_MESH);
1108RNA_MOD_OBJECT_SET(NormalEdit, target, OB_EMPTY);
1109RNA_MOD_OBJECT_SET(Shrinkwrap, target, OB_MESH);
1110RNA_MOD_OBJECT_SET(Shrinkwrap, auxTarget, OB_MESH);
1111RNA_MOD_OBJECT_SET(SurfaceDeform, target, OB_MESH);
1112RNA_MOD_OBJECT_SET(GreasePencilMirror, object, OB_EMPTY);
1113RNA_MOD_OBJECT_SET(GreasePencilTint, object, OB_EMPTY);
1114RNA_MOD_OBJECT_SET(GreasePencilLattice, object, OB_LATTICE);
1115RNA_MOD_OBJECT_SET(GreasePencilWeightProximity, object, OB_EMPTY);
1116RNA_MOD_OBJECT_SET(GreasePencilHook, object, OB_EMPTY);
1117RNA_MOD_OBJECT_SET(GreasePencilArmature, object, OB_ARMATURE);
1118RNA_MOD_OBJECT_SET(GreasePencilOutline, object, OB_EMPTY);
1119RNA_MOD_OBJECT_SET(GreasePencilShrinkwrap, target, OB_MESH);
1120RNA_MOD_OBJECT_SET(GreasePencilShrinkwrap, aux_target, OB_MESH);
1121RNA_MOD_OBJECT_SET(GreasePencilBuild, object, OB_EMPTY);
1122
1123static void rna_HookModifier_object_set(PointerRNA *ptr,
1124 PointerRNA value,
1125 ReportList * /*reports*/)
1126{
1127 Object *owner = (Object *)ptr->owner_id;
1128 HookModifierData *hmd = static_cast<HookModifierData *>(ptr->data);
1129 Object *ob = (Object *)value.data;
1130
1131 hmd->object = ob;
1132 id_lib_extern((ID *)ob);
1134}
1135
1136static bool rna_HookModifier_object_override_apply(Main *bmain,
1137 RNAPropertyOverrideApplyContext &rnaapply_ctx)
1138{
1139 PointerRNA *ptr_dst = &rnaapply_ctx.ptr_dst;
1140 PointerRNA *ptr_src = &rnaapply_ctx.ptr_src;
1141 PointerRNA *ptr_storage = &rnaapply_ctx.ptr_storage;
1142 PropertyRNA *prop_dst = rnaapply_ctx.prop_dst;
1143 PropertyRNA *prop_src = rnaapply_ctx.prop_src;
1144 const int len_dst = rnaapply_ctx.len_src;
1145 const int len_src = rnaapply_ctx.len_src;
1146 const int len_storage = rnaapply_ctx.len_storage;
1148
1149 BLI_assert(len_dst == len_src && (!ptr_storage || len_dst == len_storage) && len_dst == 0);
1151 "Unsupported RNA override operation on Hook modifier target object pointer");
1152 UNUSED_VARS_NDEBUG(ptr_storage, len_dst, len_src, len_storage, opop);
1153
1154 /* We need a special handling here because setting hook target resets invert parent matrix,
1155 * which is evil in our case. */
1156 HookModifierData *hmd = static_cast<HookModifierData *>(ptr_dst->data);
1157 Object *owner = (Object *)ptr_dst->owner_id;
1158 Object *target_dst = static_cast<Object *>(RNA_property_pointer_get(ptr_dst, prop_dst).data);
1159 Object *target_src = static_cast<Object *>(RNA_property_pointer_get(ptr_src, prop_src).data);
1160
1161 BLI_assert(target_dst == hmd->object);
1162
1163 if (target_src == target_dst) {
1164 return false;
1165 }
1166
1167 hmd->object = target_src;
1168 if (target_src == nullptr) {
1169 /* The only case where we do want default behavior (with matrix reset). */
1171 }
1172 RNA_property_update_main(bmain, nullptr, ptr_dst, prop_dst);
1173 return true;
1174}
1175
1176static void rna_HookModifier_subtarget_set(PointerRNA *ptr, const char *value)
1177{
1178 Object *owner = (Object *)ptr->owner_id;
1179 HookModifierData *hmd = static_cast<HookModifierData *>(ptr->data);
1180
1181 STRNCPY(hmd->subtarget, value);
1183}
1184
1185static int rna_HookModifier_vertex_indices_get_length(const PointerRNA *ptr,
1187{
1188 const HookModifierData *hmd = static_cast<const HookModifierData *>(ptr->data);
1189 int indexar_num = hmd->indexar ? hmd->indexar_num : 0;
1190 return (length[0] = indexar_num);
1191}
1192
1193static void rna_HookModifier_vertex_indices_get(PointerRNA *ptr, int *values)
1194{
1195 HookModifierData *hmd = static_cast<HookModifierData *>(ptr->data);
1196 if (hmd->indexar != nullptr) {
1197 memcpy(values, hmd->indexar, sizeof(int) * hmd->indexar_num);
1198 }
1199}
1200
1201static void rna_HookModifier_vertex_indices_set(HookModifierData *hmd,
1203 const int *indices,
1204 int indices_num)
1205{
1206 if (indices_num <= 0) {
1207 MEM_SAFE_FREE(hmd->indexar);
1208 hmd->indexar_num = 0;
1209 }
1210 else {
1211 /* Reject negative indices. */
1212 for (int i = 0; i < indices_num; i++) {
1213 if (indices[i] < 0) {
1214 BKE_reportf(reports, RPT_ERROR, "Negative vertex index in vertex_indices_set");
1215 return;
1216 }
1217 }
1218
1219 /* Copy and sort the index array. */
1220 size_t size = sizeof(int) * indices_num;
1221 int *buffer = MEM_malloc_arrayN<int>(size_t(indices_num), "hook indexar");
1222 memcpy(buffer, indices, size);
1223
1224 qsort(buffer, indices_num, sizeof(int), BLI_sortutil_cmp_int);
1225
1226 /* Reject duplicate indices. */
1227 for (int i = 1; i < indices_num; i++) {
1228 if (buffer[i] == buffer[i - 1]) {
1229 BKE_reportf(reports, RPT_ERROR, "Duplicate index %d in vertex_indices_set", buffer[i]);
1230 MEM_freeN(buffer);
1231 return;
1232 }
1233 }
1234
1235 /* Success - save the new array. */
1236 MEM_SAFE_FREE(hmd->indexar);
1237 hmd->indexar = buffer;
1238 hmd->indexar_num = indices_num;
1239 }
1240}
1241
1242static PointerRNA rna_UVProjector_object_get(PointerRNA *ptr)
1243{
1244 Object **ob = (Object **)ptr->data;
1245 return RNA_id_pointer_create(reinterpret_cast<ID *>(*ob));
1246}
1247
1248static void rna_UVProjector_object_set(PointerRNA *ptr, PointerRNA value, ReportList * /*reports*/)
1249{
1250 Object **ob_p = (Object **)ptr->data;
1251 Object *ob = (Object *)value.data;
1252 id_lib_extern((ID *)ob);
1253 *ob_p = ob;
1254}
1255
1256# undef RNA_MOD_OBJECT_SET
1257
1258/* Other rna callbacks */
1259
1260static void rna_fluid_set_type(Main *bmain, Scene *scene, PointerRNA *ptr)
1261{
1262 FluidModifierData *fmd = (FluidModifierData *)ptr->data;
1263 Object *ob = (Object *)ptr->owner_id;
1264
1265 /* nothing changed */
1266 if ((fmd->type & MOD_FLUID_TYPE_DOMAIN) && fmd->domain) {
1267 return;
1268 }
1269
1270# ifdef WITH_FLUID
1271 BKE_fluid_modifier_free(fmd); /* XXX TODO: completely free all 3 pointers */
1272 BKE_fluid_modifier_create_type_data(fmd); /* create regarding of selected type */
1273# endif
1274
1275 switch (fmd->type) {
1277 ob->dt = OB_WIRE;
1278 break;
1281 case 0:
1282 default:
1283 break;
1284 }
1285
1286 /* update dependency since a domain - other type switch could have happened */
1287 rna_Modifier_dependency_update(bmain, scene, ptr);
1288}
1289
1290static void rna_MultiresModifier_level_range(
1291 PointerRNA *ptr, int *min, int *max, int * /*softmin*/, int * /*softmax*/)
1292{
1294
1295 *min = 0;
1296 *max = max_ii(0, mmd->totlvl); /* intentionally _not_ -1 */
1297}
1298
1299static bool rna_MultiresModifier_external_get(PointerRNA *ptr)
1300{
1301 Object *ob = (Object *)ptr->owner_id;
1302 Mesh *mesh = static_cast<Mesh *>(ob->data);
1303
1305}
1306
1307static void rna_MultiresModifier_filepath_get(PointerRNA *ptr, char *value)
1308{
1309 Object *ob = (Object *)ptr->owner_id;
1310 CustomDataExternal *external = ((Mesh *)ob->data)->corner_data.external;
1311
1312 strcpy(value, (external) ? external->filepath : "");
1313}
1314
1315static void rna_MultiresModifier_filepath_set(PointerRNA *ptr, const char *value)
1316{
1317 Object *ob = (Object *)ptr->owner_id;
1318 CustomDataExternal *external = ((Mesh *)ob->data)->corner_data.external;
1319
1320 if (external && !STREQ(external->filepath, value)) {
1321 STRNCPY(external->filepath, value);
1323 }
1324}
1325
1326static int rna_MultiresModifier_filepath_length(PointerRNA *ptr)
1327{
1328 Object *ob = (Object *)ptr->owner_id;
1329 CustomDataExternal *external = ((Mesh *)ob->data)->corner_data.external;
1330
1331 return strlen((external) ? external->filepath : "");
1332}
1333
1334static int rna_ShrinkwrapModifier_face_cull_get(PointerRNA *ptr)
1335{
1337 return swm->shrinkOpts & MOD_SHRINKWRAP_CULL_TARGET_MASK;
1338}
1339
1340static void rna_ShrinkwrapModifier_face_cull_set(PointerRNA *ptr, int value)
1341{
1343 swm->shrinkOpts = (swm->shrinkOpts & ~MOD_SHRINKWRAP_CULL_TARGET_MASK) | value;
1344}
1345
1346static bool rna_MeshDeformModifier_is_bound_get(PointerRNA *ptr)
1347{
1348 return (((MeshDeformModifierData *)ptr->data)->bindcagecos != nullptr);
1349}
1350
1351static PointerRNA rna_SoftBodyModifier_settings_get(PointerRNA *ptr)
1352{
1353 Object *ob = (Object *)ptr->owner_id;
1354 return RNA_pointer_create_with_parent(*ptr, &RNA_SoftBodySettings, ob->soft);
1355}
1356
1357static PointerRNA rna_SoftBodyModifier_point_cache_get(PointerRNA *ptr)
1358{
1359 Object *ob = (Object *)ptr->owner_id;
1360 return RNA_pointer_create_with_parent(*ptr, &RNA_PointCache, ob->soft->shared->pointcache);
1361}
1362
1363static PointerRNA rna_CollisionModifier_settings_get(PointerRNA *ptr)
1364{
1365 Object *ob = (Object *)ptr->owner_id;
1366 return RNA_pointer_create_with_parent(*ptr, &RNA_CollisionSettings, ob->pd);
1367}
1368
1369/* Special update function for setting the number of segments of the modifier that also resamples
1370 * the segments in the custom profile. */
1371static void rna_BevelModifier_update_segments(Main *bmain, Scene *scene, PointerRNA *ptr)
1372{
1373 BevelModifierData *bmd = (BevelModifierData *)ptr->data;
1374 if (RNA_enum_get(ptr, "profile_type") == MOD_BEVEL_PROFILE_CUSTOM) {
1375 short segments = short(RNA_int_get(ptr, "segments"));
1376 BKE_curveprofile_init(bmd->custom_profile, segments);
1377 }
1378 rna_Modifier_update(bmain, scene, ptr);
1379}
1380
1381static void rna_BevelModifier_weight_attribute_visit_for_search(
1382 const bContext * /*C*/,
1383 PointerRNA *ptr,
1384 PropertyRNA * /*prop*/,
1385 const char * /*edit_text*/,
1387{
1388 Object *ob = (Object *)ptr->owner_id;
1389 if (ob->type != OB_MESH) {
1390 return;
1391 }
1392 PointerRNA mesh_ptr = RNA_id_pointer_create(static_cast<ID *>(ob->data));
1393 PropertyRNA *attributes_prop = RNA_struct_find_property(&mesh_ptr, "attributes");
1394 RNA_PROP_BEGIN (&mesh_ptr, itemptr, attributes_prop) {
1395 const CustomDataLayer *layer = static_cast<const CustomDataLayer *>(itemptr.data);
1397 StringPropertySearchVisitParams visit_params{};
1398 visit_params.text = layer->name;
1399 visit_fn(visit_params);
1400 }
1401 }
1403}
1404
1405static void rna_UVProjectModifier_num_projectors_set(PointerRNA *ptr, int value)
1406{
1408 int a;
1409
1410 md->projectors_num = std::clamp(value, 1, MOD_UVPROJECT_MAXPROJECTORS);
1411 for (a = md->projectors_num; a < MOD_UVPROJECT_MAXPROJECTORS; a++) {
1412 md->projectors[a] = nullptr;
1413 }
1414}
1415
1416static void rna_OceanModifier_init_update(Main *bmain, Scene *scene, PointerRNA *ptr)
1417{
1418 OceanModifierData *omd = (OceanModifierData *)ptr->data;
1419
1421 rna_Modifier_update(bmain, scene, ptr);
1422}
1423
1424static void rna_OceanModifier_ocean_chop_set(PointerRNA *ptr, float value)
1425{
1426 OceanModifierData *omd = (OceanModifierData *)ptr->data;
1427 float old_value = omd->chop_amount;
1428
1429 omd->chop_amount = value;
1430
1431 if ((old_value == 0.0f && value > 0.0f) || (old_value > 0.0f && value == 0.0f)) {
1433 }
1434}
1435
1436static bool rna_LaplacianDeformModifier_is_bind_get(PointerRNA *ptr)
1437{
1439 return ((lmd->flag & MOD_LAPLACIANDEFORM_BIND) && (lmd->vertexco != nullptr));
1440}
1441
1442/* NOTE: Curve and array modifiers requires curve path to be evaluated,
1443 * dependency graph will make sure that curve eval would create such a path,
1444 * but if curve was already evaluated we might miss path.
1445 *
1446 * So what we do here is: if path was not calculated for target curve we
1447 * tag it for update.
1448 */
1449
1450static void rna_CurveModifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
1451{
1452 CurveModifierData *cmd = (CurveModifierData *)ptr->data;
1453 rna_Modifier_update(bmain, scene, ptr);
1455 if (cmd->object != nullptr) {
1456 Curve *curve = static_cast<Curve *>(cmd->object->data);
1457 if ((curve->flag & CU_PATH) == 0) {
1459 }
1460 }
1461}
1462
1463static void rna_ArrayModifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
1464{
1465 ArrayModifierData *amd = (ArrayModifierData *)ptr->data;
1466 rna_Modifier_update(bmain, scene, ptr);
1468 if (amd->curve_ob != nullptr) {
1469 Curve *curve = static_cast<Curve *>(amd->curve_ob->data);
1470 if ((curve->flag & CU_PATH) == 0) {
1472 }
1473 }
1474}
1475
1476static void rna_DataTransferModifier_use_data_update(Main *bmain, Scene *scene, PointerRNA *ptr)
1477{
1479
1480 if (!(dtmd->flags & MOD_DATATRANSFER_USE_VERT)) {
1481 dtmd->data_types &= ~DT_TYPE_VERT_ALL;
1482 }
1483 if (!(dtmd->flags & MOD_DATATRANSFER_USE_EDGE)) {
1484 dtmd->data_types &= ~DT_TYPE_EDGE_ALL;
1485 }
1486 if (!(dtmd->flags & MOD_DATATRANSFER_USE_LOOP)) {
1487 dtmd->data_types &= ~DT_TYPE_LOOP_ALL;
1488 }
1489 if (!(dtmd->flags & MOD_DATATRANSFER_USE_POLY)) {
1490 dtmd->data_types &= ~DT_TYPE_POLY_ALL;
1491 }
1492
1493 rna_Modifier_dependency_update(bmain, scene, ptr);
1494}
1495
1496static void rna_DataTransferModifier_data_types_update(Main *bmain, Scene *scene, PointerRNA *ptr)
1497{
1499 const int item_types = BKE_object_data_transfer_get_dttypes_item_types(dtmd->data_types);
1500
1501 if (item_types & ME_VERT) {
1502 dtmd->flags |= MOD_DATATRANSFER_USE_VERT;
1503 }
1504 if (item_types & ME_EDGE) {
1505 dtmd->flags |= MOD_DATATRANSFER_USE_EDGE;
1506 }
1507 if (item_types & ME_LOOP) {
1508 dtmd->flags |= MOD_DATATRANSFER_USE_LOOP;
1509 }
1510 if (item_types & ME_POLY) {
1511 dtmd->flags |= MOD_DATATRANSFER_USE_POLY;
1512 }
1513
1514 rna_Modifier_dependency_update(bmain, scene, ptr);
1515}
1516
1517static void rna_DataTransferModifier_verts_data_types_set(PointerRNA *ptr, int value)
1518{
1520
1521 dtmd->data_types &= ~DT_TYPE_VERT_ALL;
1522 dtmd->data_types |= value;
1523}
1524
1525static void rna_DataTransferModifier_edges_data_types_set(PointerRNA *ptr, int value)
1526{
1528
1529 dtmd->data_types &= ~DT_TYPE_EDGE_ALL;
1530 dtmd->data_types |= value;
1531}
1532
1533static void rna_DataTransferModifier_loops_data_types_set(PointerRNA *ptr, int value)
1534{
1536
1537 dtmd->data_types &= ~DT_TYPE_LOOP_ALL;
1538 dtmd->data_types |= value;
1539}
1540
1541static void rna_DataTransferModifier_polys_data_types_set(PointerRNA *ptr, int value)
1542{
1544
1545 dtmd->data_types &= ~DT_TYPE_POLY_ALL;
1546 dtmd->data_types |= value;
1547}
1548
1549static const EnumPropertyItem *rna_DataTransferModifier_layers_select_src_itemf(bContext *C,
1550 PointerRNA *ptr,
1551 PropertyRNA *prop,
1552 bool *r_free)
1553{
1554 using namespace blender;
1556 EnumPropertyItem *item = nullptr, tmp_item = {0};
1557 int totitem = 0;
1558
1559 if (!C) { /* needed for docs and i18n tools */
1561 }
1562
1563 /* No active here! */
1566
1567 if (STREQ(RNA_property_identifier(prop), "layers_vgroup_select_src")) {
1568 Object *ob_src = dtmd->ob_source;
1569
1570# if 0 /* XXX Don't think we want this in modifier version... */
1571 if (BKE_object_pose_armature_get(ob_src)) {
1576 }
1577# endif
1578
1579 if (ob_src) {
1580 const bDeformGroup *dg;
1581 int i;
1582
1583 RNA_enum_item_add_separator(&item, &totitem);
1584
1585 const ListBase *defbase = BKE_object_defgroup_list(ob_src);
1586 for (i = 0, dg = static_cast<const bDeformGroup *>(defbase->first); dg; i++, dg = dg->next) {
1587 tmp_item.value = i;
1588 tmp_item.identifier = tmp_item.name = dg->name;
1589 RNA_enum_item_add(&item, &totitem, &tmp_item);
1590 }
1591 }
1592 }
1593 else if (STREQ(RNA_property_identifier(prop), "layers_shapekey_select_src")) {
1594 /* TODO */
1595 }
1596 else if (STREQ(RNA_property_identifier(prop), "layers_uv_select_src")) {
1597 Object *ob_src = dtmd->ob_source;
1598
1599 if (ob_src) {
1600 int num_data, i;
1601
1603 const Object *ob_eval = DEG_get_evaluated(depsgraph, ob_src);
1604 if (!ob_eval) {
1605 RNA_enum_item_end(&item, &totitem);
1606 *r_free = true;
1607 return item;
1608 }
1609 const Mesh *mesh_eval = BKE_object_get_evaluated_mesh(ob_eval);
1610 if (!mesh_eval) {
1611 RNA_enum_item_end(&item, &totitem);
1612 *r_free = true;
1613 return item;
1614 }
1615
1617
1618 RNA_enum_item_add_separator(&item, &totitem);
1619
1620 for (i = 0; i < num_data; i++) {
1621 tmp_item.value = i;
1622 tmp_item.identifier = tmp_item.name = CustomData_get_layer_name(
1623 &mesh_eval->corner_data, CD_PROP_FLOAT2, i);
1624 RNA_enum_item_add(&item, &totitem, &tmp_item);
1625 }
1626 }
1627 }
1628 else if (STREQ(RNA_property_identifier(prop), "layers_vcol_vert_select_src") ||
1629 STREQ(RNA_property_identifier(prop), "layers_vcol_loop_select_src"))
1630 {
1631 Object *ob_src = dtmd->ob_source;
1632
1633 if (ob_src) {
1635 "layers_vcol_vert_select_src") ?
1638
1640 const Object *ob_eval = DEG_get_evaluated(depsgraph, ob_src);
1641 if (!ob_eval) {
1642 RNA_enum_item_end(&item, &totitem);
1643 *r_free = true;
1644 return item;
1645 }
1646 const Mesh *mesh_eval = BKE_object_get_evaluated_mesh(ob_eval);
1647 if (!mesh_eval) {
1648 RNA_enum_item_end(&item, &totitem);
1649 *r_free = true;
1650 return item;
1651 }
1652
1653 const CustomData *cdata;
1654 if (domain == bke::AttrDomain::Point) {
1655 cdata = &mesh_eval->vert_data;
1656 }
1657 else {
1658 cdata = &mesh_eval->corner_data;
1659 }
1660
1662
1663 int idx = 0;
1664 for (int i = 0; i < 2; i++) {
1665 int num_data = CustomData_number_of_layers(cdata, types[i]);
1666
1667 RNA_enum_item_add_separator(&item, &totitem);
1668
1669 for (int j = 0; j < num_data; j++) {
1670 tmp_item.value = idx++;
1671 tmp_item.identifier = tmp_item.name = CustomData_get_layer_name(cdata, types[i], j);
1672 RNA_enum_item_add(&item, &totitem, &tmp_item);
1673 }
1674 }
1675 }
1676 }
1677
1678 RNA_enum_item_end(&item, &totitem);
1679 *r_free = true;
1680
1681 return item;
1682}
1683
1684static const EnumPropertyItem *rna_DataTransferModifier_layers_select_dst_itemf(bContext *C,
1685 PointerRNA *ptr,
1686 PropertyRNA *prop,
1687 bool *r_free)
1688{
1690 EnumPropertyItem *item = nullptr, tmp_item = {0};
1691 int totitem = 0;
1692
1693 if (!C) { /* needed for docs and i18n tools */
1695 }
1696
1697 /* No active here! */
1702
1703 if (STREQ(RNA_property_identifier(prop), "layers_vgroup_select_dst")) {
1704 /* Only list destination layers if we have a single source! */
1705 if (dtmd->layers_select_src[DT_MULTILAYER_INDEX_MDEFORMVERT] >= 0) {
1706 Object *ob_dst = CTX_data_active_object(C); /* XXX Is this OK? */
1707
1708 if (ob_dst) {
1709 const bDeformGroup *dg;
1710 int i;
1711
1712 RNA_enum_item_add_separator(&item, &totitem);
1713
1714 const ListBase *defbase = BKE_object_defgroup_list(ob_dst);
1715 for (i = 0, dg = static_cast<const bDeformGroup *>(defbase->first); dg; i++, dg = dg->next)
1716 {
1717 tmp_item.value = i;
1718 tmp_item.identifier = tmp_item.name = dg->name;
1719 RNA_enum_item_add(&item, &totitem, &tmp_item);
1720 }
1721 }
1722 }
1723 }
1724 else if (STREQ(RNA_property_identifier(prop), "layers_shapekey_select_dst")) {
1725 /* TODO */
1726 }
1727 else if (STREQ(RNA_property_identifier(prop), "layers_uv_select_dst")) {
1728 /* Only list destination layers if we have a single source! */
1729 if (dtmd->layers_select_src[DT_MULTILAYER_INDEX_UV] >= 0) {
1730 Object *ob_dst = CTX_data_active_object(C); /* XXX Is this OK? */
1731
1732 if (ob_dst && ob_dst->data) {
1733 Mesh *me_dst;
1734 CustomData *corner_data;
1735 int num_data, i;
1736
1737 me_dst = static_cast<Mesh *>(ob_dst->data);
1738 corner_data = &me_dst->corner_data;
1739 num_data = CustomData_number_of_layers(corner_data, CD_PROP_FLOAT2);
1740
1741 RNA_enum_item_add_separator(&item, &totitem);
1742
1743 for (i = 0; i < num_data; i++) {
1744 tmp_item.value = i;
1745 tmp_item.identifier = tmp_item.name = CustomData_get_layer_name(
1746 corner_data, CD_PROP_FLOAT2, i);
1747 RNA_enum_item_add(&item, &totitem, &tmp_item);
1748 }
1749 }
1750 }
1751 }
1752 else if (STREQ(RNA_property_identifier(prop), "layers_vcol_vert_select_dst") ||
1753 STREQ(RNA_property_identifier(prop), "layers_vcol_loop_select_dst"))
1754 {
1755 int multilayer_index = STREQ(RNA_property_identifier(prop), "layers_vcol_vert_select_dst") ?
1758
1759 /* Only list destination layers if we have a single source! */
1760 if (dtmd->layers_select_src[multilayer_index] >= 0) {
1761 Object *ob_dst = CTX_data_active_object(C); /* XXX Is this OK? */
1762
1763 if (ob_dst && ob_dst->data) {
1765
1766 Mesh *me_dst = static_cast<Mesh *>(ob_dst->data);
1767 CustomData *cdata = STREQ(RNA_property_identifier(prop), "layers_vcol_vert_select_dst") ?
1768 &me_dst->vert_data :
1769 &me_dst->corner_data;
1770
1771 int idx = 0;
1772 for (int i = 0; i < 2; i++) {
1773 int num_data = CustomData_number_of_layers(cdata, types[i]);
1774
1775 RNA_enum_item_add_separator(&item, &totitem);
1776
1777 for (int j = 0; j < num_data; j++) {
1778 tmp_item.value = idx++;
1779 tmp_item.identifier = tmp_item.name = CustomData_get_layer_name(cdata, types[i], j);
1780 RNA_enum_item_add(&item, &totitem, &tmp_item);
1781 }
1782 }
1783 }
1784 }
1785 }
1786
1787 RNA_enum_item_end(&item, &totitem);
1788 *r_free = true;
1789
1790 return item;
1791}
1792
1793static const EnumPropertyItem *rna_DataTransferModifier_mix_mode_itemf(bContext *C,
1794 PointerRNA *ptr,
1795 PropertyRNA * /*prop*/,
1796 bool *r_free)
1797{
1799 EnumPropertyItem *item = nullptr;
1800 int totitem = 0;
1801
1802 bool support_advanced_mixing, support_threshold;
1803
1804 if (!C) { /* needed for docs and i18n tools */
1806 }
1807
1809
1811 dtmd->data_types, &support_advanced_mixing, &support_threshold);
1812
1813 if (support_threshold) {
1818 }
1819
1820 if (support_advanced_mixing) {
1821 RNA_enum_item_add_separator(&item, &totitem);
1826 }
1827
1828 RNA_enum_item_end(&item, &totitem);
1829 *r_free = true;
1830
1831 return item;
1832}
1833
1834static void rna_CorrectiveSmoothModifier_update(Main *bmain, Scene *scene, PointerRNA *ptr)
1835{
1837
1838 MEM_SAFE_FREE(csmd->delta_cache.deltas);
1839
1840 rna_Modifier_update(bmain, scene, ptr);
1841}
1842
1843static void rna_CorrectiveSmoothModifier_rest_source_update(Main *bmain,
1844 Scene *scene,
1845 PointerRNA *ptr)
1846{
1848
1849 if (csmd->rest_source != MOD_CORRECTIVESMOOTH_RESTSOURCE_BIND) {
1850 MEM_SAFE_FREE(csmd->bind_coords);
1851 csmd->bind_coords_num = 0;
1852 }
1853
1854 rna_CorrectiveSmoothModifier_update(bmain, scene, ptr);
1855}
1856
1857static bool rna_CorrectiveSmoothModifier_is_bind_get(PointerRNA *ptr)
1858{
1860 return (csmd->bind_coords != nullptr);
1861}
1862
1863static bool rna_SurfaceDeformModifier_is_bound_get(PointerRNA *ptr)
1864{
1865 return (((SurfaceDeformModifierData *)ptr->data)->verts != nullptr);
1866}
1867
1868static bool rna_ParticleInstanceModifier_particle_system_poll(PointerRNA *ptr,
1869 const PointerRNA value)
1870{
1872 ParticleSystem *psys = static_cast<ParticleSystem *>(value.data);
1873
1874 if (!psmd->ob) {
1875 return false;
1876 }
1877
1878 /* make sure psys is in the object */
1879 return BLI_findindex(&psmd->ob->particlesystem, psys) != -1;
1880}
1881
1882static PointerRNA rna_ParticleInstanceModifier_particle_system_get(PointerRNA *ptr)
1883{
1885 ParticleSystem *psys;
1886
1887 if (!psmd->ob) {
1888 return PointerRNA_NULL;
1889 }
1890
1891 psys = static_cast<ParticleSystem *>(BLI_findlink(&psmd->ob->particlesystem, psmd->psys - 1));
1892 PointerRNA rptr = RNA_pointer_create_discrete((ID *)psmd->ob, &RNA_ParticleSystem, psys);
1893 return rptr;
1894}
1895
1896static void rna_ParticleInstanceModifier_particle_system_set(PointerRNA *ptr,
1897 const PointerRNA value,
1898 ReportList * /*reports*/)
1899{
1901
1902 if (!psmd->ob) {
1903 return;
1904 }
1905
1906 psmd->psys = BLI_findindex(&psmd->ob->particlesystem, value.data) + 1;
1907 CLAMP_MIN(psmd->psys, 1);
1908}
1909
1914static void rna_Modifier_show_expanded_set(PointerRNA *ptr, bool value)
1915{
1916 ModifierData *md = static_cast<ModifierData *>(ptr->data);
1918}
1919
1925static bool rna_Modifier_show_expanded_get(PointerRNA *ptr)
1926{
1927 ModifierData *md = static_cast<ModifierData *>(ptr->data);
1929}
1930
1931static bool rna_NodesModifier_node_group_poll(PointerRNA * /*ptr*/, PointerRNA value)
1932{
1933 bNodeTree *ntree = static_cast<bNodeTree *>(value.data);
1934 if (ntree->type != NTREE_GEOMETRY) {
1935 return false;
1936 }
1937 if (!ntree->geometry_node_asset_traits) {
1938 return false;
1939 }
1941 return false;
1942 }
1943 return true;
1944}
1945
1946static void rna_NodesModifier_node_group_update(Main *bmain, Scene *scene, PointerRNA *ptr)
1947{
1948 Object *object = (Object *)ptr->owner_id;
1949 NodesModifierData *nmd = static_cast<NodesModifierData *>(ptr->data);
1950 rna_Modifier_dependency_update(bmain, scene, ptr);
1951 MOD_nodes_update_interface(object, nmd);
1952}
1953
1954static blender::nodes::geo_eval_log::GeoTreeLog *get_nodes_modifier_log(NodesModifierData &nmd)
1955{
1956 if (!nmd.runtime->eval_log) {
1957 return nullptr;
1958 }
1959 blender::bke::ModifierComputeContext compute_context{nullptr, nmd};
1960 return &nmd.runtime->eval_log->get_tree_log(compute_context.hash());
1961}
1962
1963static blender::Span<blender::nodes::geo_eval_log::NodeWarning> get_node_modifier_warnings(
1964 NodesModifierData &nmd)
1965{
1966 if (auto *log = get_nodes_modifier_log(nmd)) {
1967 log->ensure_node_warnings(nmd);
1968 return log->all_warnings;
1969 }
1970 return {};
1971}
1972
1973static void rna_NodesModifier_node_warnings_iterator_begin(CollectionPropertyIterator *iter,
1974 PointerRNA *ptr)
1975{
1976 NodesModifierData *nmd = static_cast<NodesModifierData *>(ptr->data);
1977 iter->internal.count.item = 0;
1978 iter->valid = !get_node_modifier_warnings(*nmd).is_empty();
1979}
1980
1981static void rna_NodesModifier_node_warnings_iterator_next(CollectionPropertyIterator *iter)
1982{
1983 NodesModifierData *nmd = static_cast<NodesModifierData *>(iter->parent.data);
1984 iter->internal.count.item++;
1985 iter->valid = get_node_modifier_warnings(*nmd).size() > iter->internal.count.item;
1986}
1987
1988static PointerRNA rna_NodesModifier_node_warnings_iterator_get(CollectionPropertyIterator *iter)
1989{
1990 NodesModifierData *nmd = static_cast<NodesModifierData *>(iter->parent.data);
1991 blender::Span warnings = get_node_modifier_warnings(*nmd);
1993 iter->parent, &RNA_NodesModifierWarning, (void *)&warnings[iter->internal.count.item]);
1994}
1995
1996static int rna_NodesModifier_node_warnings_length(PointerRNA *ptr)
1997{
1998 NodesModifierData *nmd = static_cast<NodesModifierData *>(ptr->data);
1999 return get_node_modifier_warnings(*nmd).size();
2000}
2001
2002static void rna_NodesModifierWarning_message_get(PointerRNA *ptr, char *r_value)
2003{
2004 const auto *warning = static_cast<const blender::nodes::geo_eval_log::NodeWarning *>(ptr->data);
2005 strcpy(r_value, warning->message.c_str());
2006}
2007
2008static int rna_NodesModifierWarning_message_length(PointerRNA *ptr)
2009{
2010 const auto *warning = static_cast<const blender::nodes::geo_eval_log::NodeWarning *>(ptr->data);
2011 return warning->message.size();
2012}
2013
2014static int rna_NodesModifierWarning_type_get(PointerRNA *ptr)
2015{
2016 const auto *warning = static_cast<const blender::nodes::geo_eval_log::NodeWarning *>(ptr->data);
2017 return int(warning->type);
2018}
2019
2020static IDProperty **rna_NodesModifier_properties(PointerRNA *ptr)
2021{
2022 NodesModifierData *nmd = static_cast<NodesModifierData *>(ptr->data);
2023 NodesModifierSettings *settings = &nmd->settings;
2024 return &settings->properties;
2025}
2026
2027static void rna_Lineart_start_level_set(PointerRNA *ptr, int value)
2028{
2030
2031 value = std::clamp(value, 0, 128);
2032 lmd->level_start = value;
2033 lmd->level_end = std::max(value, int(lmd->level_end));
2034}
2035
2036static void rna_Lineart_end_level_set(PointerRNA *ptr, int value)
2037{
2039
2040 value = std::clamp(value, 0, 128);
2041 lmd->level_end = value;
2042 lmd->level_start = std::min(value, int(lmd->level_start));
2043}
2044
2045static void rna_Lineart_thickness_set(PointerRNA *ptr, int value)
2046{
2048 ptr->data);
2049 lmd->thickness_legacy = value;
2051}
2052
2053static const NodesModifierData *find_nodes_modifier_by_bake(const Object &object,
2054 const NodesModifierBake &bake)
2055{
2056 LISTBASE_FOREACH (const ModifierData *, md, &object.modifiers) {
2057 if (md->type != eModifierType_Nodes) {
2058 continue;
2059 }
2060 const NodesModifierData *nmd = reinterpret_cast<const NodesModifierData *>(md);
2061 const blender::Span<NodesModifierBake> bakes{nmd->bakes, nmd->bakes_num};
2062 if (bakes.contains_ptr(&bake)) {
2063 return nmd;
2064 }
2065 }
2066 return nullptr;
2067}
2068
2069static PointerRNA rna_NodesModifierBake_node_get(PointerRNA *ptr)
2070{
2071 const Object *ob = reinterpret_cast<Object *>(ptr->owner_id);
2072 const NodesModifierBake *bake = static_cast<NodesModifierBake *>(ptr->data);
2073 const NodesModifierData *nmd = find_nodes_modifier_by_bake(*ob, *bake);
2074 if (!nmd->node_group) {
2075 return PointerRNA_NULL;
2076 }
2077 const bNodeTree *tree;
2078 const bNode *node = nmd->node_group->find_nested_node(bake->id, &tree);
2079 if (!node) {
2080 return PointerRNA_NULL;
2081 }
2082 BLI_assert(tree != nullptr);
2084 const_cast<ID *>(&tree->id), &RNA_Node, const_cast<bNode *>(node));
2085}
2086
2087static StructRNA *rna_NodesModifierBake_data_block_typef(PointerRNA *ptr)
2088{
2089 NodesModifierDataBlock *data_block = static_cast<NodesModifierDataBlock *>(ptr->data);
2090 return ID_code_to_RNA_type(data_block->id_type);
2091}
2092
2093bool rna_GreasePencilModifier_material_poll(PointerRNA *ptr, PointerRNA value)
2094{
2095 Object *ob = reinterpret_cast<Object *>(ptr->owner_id);
2096 Material *ma = reinterpret_cast<Material *>(value.owner_id);
2097
2098 return BKE_object_material_index_get(ob, ma) != -1;
2099}
2100
2101/* Write material to a generic target pointer without the final modifier struct. */
2102static void rna_GreasePencilModifier_material_set(PointerRNA *ptr,
2103 PointerRNA value,
2105 Material **ma_target)
2106{
2107 Object *ob = reinterpret_cast<Object *>(ptr->owner_id);
2108 Material *ma_old = *ma_target;
2109 Material *ma = reinterpret_cast<Material *>(value.data);
2110
2111 if (ma == nullptr || BKE_object_material_index_get(ob, ma) != -1) {
2112 id_us_min(&ma_old->id);
2113 id_us_plus_no_lib(&ma->id);
2114 if (!ID_IS_LINKED(&ob->id)) {
2115 id_lib_extern(&ma->id);
2116 }
2117 *ma_target = ma;
2118 }
2119 else {
2121 reports,
2122 RPT_ERROR,
2123 "Cannot assign material '%s', it has to be used by the Grease Pencil object already",
2124 ma->id.name);
2125 }
2126}
2127
2128# define RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(_type) \
2129 static void rna_##_type##Modifier_material_filter_set( \
2130 PointerRNA *ptr, PointerRNA value, ReportList *reports) \
2131 { \
2132 _type##ModifierData *tmd = static_cast<_type##ModifierData *>(ptr->data); \
2133 rna_GreasePencilModifier_material_set(ptr, value, reports, &tmd->influence.material); \
2134 }
2135
2136# define RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(_type) \
2137 static void rna_##_type##Modifier_vertex_group_name_set(PointerRNA *ptr, const char *value) \
2138 { \
2139 _type##ModifierData *tmd = static_cast<_type##ModifierData *>(ptr->data); \
2140 rna_object_vgroup_name_set(ptr, \
2141 value, \
2142 tmd->influence.vertex_group_name, \
2143 sizeof(tmd->influence.vertex_group_name)); \
2144 }
2145
2146RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilColor);
2147RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilMirror);
2148RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilOffset);
2149RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilOpacity);
2150RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilSubdiv);
2151RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilTint);
2152RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilSmooth);
2153RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilNoise);
2154RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilThick);
2155RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilLattice);
2156RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilDash);
2157RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilMulti);
2158RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilLength);
2159RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilWeightAngle);
2160RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilArray);
2161RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilWeightProximity);
2162RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilHook);
2163RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilSimplify);
2164RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilEnvelope);
2165RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilOutline);
2166RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilShrinkwrap);
2167RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilBuild);
2168RNA_MOD_GREASE_PENCIL_MATERIAL_FILTER_SET(GreasePencilTexture);
2169
2170RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilOffset);
2171RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilOpacity);
2172RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilTint);
2173RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilSmooth);
2174RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilNoise);
2175RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilThick);
2176RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilLattice);
2177RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilWeightAngle);
2178RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilWeightProximity);
2179RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilHook);
2180RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilArmature);
2181RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilSimplify);
2182RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilEnvelope);
2183RNA_MOD_GREASE_PENCIL_VERTEX_GROUP_SET(GreasePencilShrinkwrap);
2184
2185static void rna_GreasePencilLineartModifier_material_set(PointerRNA *ptr,
2186 PointerRNA value,
2188{
2190 ptr->data);
2191 Material **ma_target = &lmd->target_material;
2192
2193 rna_GreasePencilModifier_material_set(ptr, value, reports, ma_target);
2194}
2195
2196static void rna_GreasePencilOpacityModifier_opacity_factor_range(
2197 PointerRNA *ptr, float *min, float *max, float *softmin, float *softmax)
2198{
2200
2201 *min = 0.0f;
2202 *softmin = 0.0f;
2203 *softmax = (omd->flag & MOD_GREASE_PENCIL_OPACITY_USE_UNIFORM_OPACITY) ? 1.0f : 2.0f;
2204 *max = *softmax;
2205}
2206
2207static void rna_GreasePencilOpacityModifier_opacity_factor_max_set(PointerRNA *ptr, float value)
2208{
2210
2212 std::min(value, 1.0f) :
2213 value;
2214}
2215
2216static const GreasePencilDashModifierData *find_grease_pencil_dash_modifier_of_segment(
2217 const Object &ob, const GreasePencilDashModifierSegment &dash_segment)
2218{
2219 LISTBASE_FOREACH (const ModifierData *, md, &ob.modifiers) {
2221 const auto *dmd = reinterpret_cast<const GreasePencilDashModifierData *>(md);
2222 if (dmd->segments().contains_ptr(&dash_segment)) {
2223 return dmd;
2224 }
2225 }
2226 }
2227 return nullptr;
2228}
2229
2230static std::optional<std::string> rna_GreasePencilDashModifierSegment_path(const PointerRNA *ptr)
2231
2232{
2233 const Object *ob = reinterpret_cast<Object *>(ptr->owner_id);
2234 const auto *dash_segment = static_cast<GreasePencilDashModifierSegment *>(ptr->data);
2235 const GreasePencilDashModifierData *dmd = find_grease_pencil_dash_modifier_of_segment(
2236 *ob, *dash_segment);
2237 BLI_assert(dmd != nullptr);
2238
2239 char name_esc[sizeof(dmd->modifier.name) * 2];
2240 BLI_str_escape(name_esc, dmd->modifier.name, sizeof(name_esc));
2241
2242 char ds_name_esc[sizeof(dash_segment->name) * 2];
2243 BLI_str_escape(ds_name_esc, dash_segment->name, sizeof(ds_name_esc));
2244
2245 return fmt::format("modifiers[\"{}\"].segments[\"{}\"]", name_esc, ds_name_esc);
2246}
2247
2248static void rna_GreasePencilDashModifierSegment_name_set(PointerRNA *ptr, const char *value)
2249{
2250 const Object *ob = reinterpret_cast<Object *>(ptr->owner_id);
2251 auto *dash_segment = static_cast<GreasePencilDashModifierSegment *>(ptr->data);
2252 const GreasePencilDashModifierData *dmd = find_grease_pencil_dash_modifier_of_segment(
2253 *ob, *dash_segment);
2254 BLI_assert(dmd != nullptr);
2255
2256 const std::string oldname = dash_segment->name;
2257 STRNCPY_UTF8(dash_segment->name, value);
2259 [dmd, dash_segment](const blender::StringRef name) {
2260 for (const GreasePencilDashModifierSegment &ds : dmd->segments()) {
2261 if (&ds != dash_segment && ds.name == name) {
2262 return true;
2263 }
2264 }
2265 return false;
2266 },
2267 '.',
2268 dash_segment->name);
2269
2270 /* Fix all the animation data which may link to this. */
2271 char name_esc[sizeof(dmd->modifier.name) * 2];
2272 BLI_str_escape(name_esc, dmd->modifier.name, sizeof(name_esc));
2273 char rna_path_prefix[36 + sizeof(name_esc) + 1];
2274 SNPRINTF(rna_path_prefix, "modifiers[\"%s\"].segments", name_esc);
2275 BKE_animdata_fix_paths_rename_all(nullptr, rna_path_prefix, oldname.c_str(), dash_segment->name);
2276}
2277
2278static void rna_GreasePencilDashModifier_segments_begin(CollectionPropertyIterator *iter,
2279 PointerRNA *ptr)
2280{
2281 auto *dmd = static_cast<GreasePencilDashModifierData *>(ptr->data);
2283 ptr,
2284 dmd->segments_array,
2286 dmd->segments_num,
2287 false,
2288 nullptr);
2289}
2290
2291const EnumPropertyItem *grease_pencil_build_time_mode_filter(bContext * /*C*/,
2292 PointerRNA *ptr,
2293 PropertyRNA * /*prop*/,
2294 bool *r_free)
2295{
2296
2297 auto *md = static_cast<ModifierData *>(ptr->data);
2298 auto *mmd = reinterpret_cast<BuildGpencilModifierData *>(md);
2299 const bool is_concurrent = (mmd->mode == MOD_GREASE_PENCIL_BUILD_MODE_CONCURRENT);
2300
2301 EnumPropertyItem *item_list = nullptr;
2302 int totitem = 0;
2303
2305 item->identifier != nullptr;
2306 item++)
2307 {
2308 if (is_concurrent && (item->value == MOD_GREASE_PENCIL_BUILD_TIMEMODE_DRAWSPEED)) {
2309 continue;
2310 }
2311 RNA_enum_item_add(&item_list, &totitem, item);
2312 }
2313
2314 RNA_enum_item_end(&item_list, &totitem);
2315 *r_free = true;
2316
2317 return item_list;
2318}
2319
2320static const GreasePencilTimeModifierData *find_grease_pencil_time_modifier_of_segment(
2321 const Object &ob, const GreasePencilTimeModifierSegment &time_segment)
2322{
2323 LISTBASE_FOREACH (const ModifierData *, md, &ob.modifiers) {
2325 const auto *tmd = reinterpret_cast<const GreasePencilTimeModifierData *>(md);
2326 if (tmd->segments().contains_ptr(&time_segment)) {
2327 return tmd;
2328 }
2329 }
2330 }
2331 return nullptr;
2332}
2333
2334static std::optional<std::string> rna_GreasePencilTimeModifierSegment_path(const PointerRNA *ptr)
2335
2336{
2337 const Object *ob = reinterpret_cast<Object *>(ptr->owner_id);
2338 const auto *segment = static_cast<GreasePencilTimeModifierSegment *>(ptr->data);
2339 const GreasePencilTimeModifierData *tmd = find_grease_pencil_time_modifier_of_segment(*ob,
2340 *segment);
2341 BLI_assert(tmd != nullptr);
2342
2343 char name_esc[sizeof(tmd->modifier.name) * 2];
2344 BLI_str_escape(name_esc, tmd->modifier.name, sizeof(name_esc));
2345
2346 char ds_name_esc[sizeof(segment->name) * 2];
2347 BLI_str_escape(ds_name_esc, segment->name, sizeof(ds_name_esc));
2348
2349 return fmt::format("modifiers[\"{}\"].segments[\"{}\"]", name_esc, ds_name_esc);
2350}
2351
2352static void rna_GreasePencilTimeModifierSegment_name_set(PointerRNA *ptr, const char *value)
2353{
2354 const Object *ob = reinterpret_cast<Object *>(ptr->owner_id);
2355 auto *segment = static_cast<GreasePencilTimeModifierSegment *>(ptr->data);
2356 const GreasePencilTimeModifierData *tmd = find_grease_pencil_time_modifier_of_segment(*ob,
2357 *segment);
2358 BLI_assert(tmd != nullptr);
2359
2360 const std::string oldname = segment->name;
2361 STRNCPY_UTF8(segment->name, value);
2363 [tmd, segment](const blender::StringRef name) {
2364 for (const GreasePencilTimeModifierSegment &ds : tmd->segments()) {
2365 if (&ds != segment && ds.name == name) {
2366 return true;
2367 }
2368 }
2369 return false;
2370 },
2371 '.',
2372 segment->name);
2373
2374 /* Fix all the animation data which may link to this. */
2375 char name_esc[sizeof(tmd->modifier.name) * 2];
2376 BLI_str_escape(name_esc, tmd->modifier.name, sizeof(name_esc));
2377 char rna_path_prefix[36 + sizeof(name_esc) + 1];
2378 SNPRINTF(rna_path_prefix, "modifiers[\"%s\"].segments", name_esc);
2379 BKE_animdata_fix_paths_rename_all(nullptr, rna_path_prefix, oldname.c_str(), segment->name);
2380}
2381
2382static void rna_GreasePencilTimeModifier_segments_begin(CollectionPropertyIterator *iter,
2383 PointerRNA *ptr)
2384{
2385 auto *tmd = static_cast<GreasePencilTimeModifierData *>(ptr->data);
2387 ptr,
2388 tmd->segments_array,
2390 tmd->segments_num,
2391 false,
2392 nullptr);
2393}
2394
2395static void rna_GreasePencilTimeModifier_start_frame_set(PointerRNA *ptr, int value)
2396{
2397 auto *tmd = static_cast<GreasePencilTimeModifierData *>(ptr->data);
2398 CLAMP(value, MINFRAME, MAXFRAME);
2399 tmd->sfra = value;
2400
2401 if (tmd->sfra >= tmd->efra) {
2402 tmd->efra = std::min(tmd->sfra, MAXFRAME);
2403 }
2404}
2405
2406static void rna_GreasePencilTimeModifier_end_frame_set(PointerRNA *ptr, int value)
2407{
2408 auto *tmd = static_cast<GreasePencilTimeModifierData *>(ptr->data);
2409 CLAMP(value, MINFRAME, MAXFRAME);
2410 tmd->efra = value;
2411
2412 if (tmd->sfra >= tmd->efra) {
2413 tmd->sfra = std::max(tmd->efra, MINFRAME);
2414 }
2415}
2416
2417static void rna_GreasePencilOutlineModifier_outline_material_set(PointerRNA *ptr,
2418 PointerRNA value,
2420{
2422 rna_GreasePencilModifier_material_set(ptr, value, reports, &omd->outline_material);
2423}
2424
2425static int rna_GreasePencilShrinkwrapModifier_face_cull_get(PointerRNA *ptr)
2426{
2428 static_cast<GreasePencilShrinkwrapModifierData *>(ptr->data);
2430}
2431
2432static void rna_GreasePencilShrinkwrapModifier_face_cull_set(PointerRNA *ptr, int value)
2433{
2435 ptr->data);
2437}
2438
2439static void rna_VertexWeightProximityModifier_proximity_geometry_set(PointerRNA *ptr, int value)
2440{
2442 ptr->data);
2443
2444 /* The geometry mode shares the `proximity_flags` variable with a few other boolean properties,
2445 * setting the mode value this way ensures only relevant bits are changed. */
2448}
2449
2450#else
2451
2452static void rna_def_modifier_panel_open_prop(StructRNA *srna, const char *identifier, const int id)
2453{
2454 BLI_assert(id >= 0);
2456
2457 PropertyRNA *prop;
2458 prop = RNA_def_property(srna, identifier, PROP_BOOLEAN, PROP_NONE);
2461 prop, nullptr, "modifier.layout_panel_open_flag", (int64_t(1) << id));
2463}
2464
2466{
2467 PropertyRNA *prop;
2469
2470 prop = RNA_def_property(srna, "uv_smooth", PROP_ENUM, PROP_NONE);
2471 RNA_def_property_enum_sdna(prop, nullptr, "uv_smooth");
2473 RNA_def_property_ui_text(prop, "UV Smooth", "Controls how smoothing is applied to UVs");
2474 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2475
2476 prop = RNA_def_property(srna, "quality", PROP_INT, PROP_UNSIGNED);
2477 RNA_def_property_int_sdna(prop, nullptr, "quality");
2478 RNA_def_property_range(prop, 1, 10);
2479 RNA_def_property_ui_range(prop, 1, 6, 1, -1);
2481 prop, "Quality", "Accuracy of vertex positions, lower value is faster but less precise");
2482 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2483
2484 prop = RNA_def_property(srna, "boundary_smooth", PROP_ENUM, PROP_NONE);
2485 RNA_def_property_enum_sdna(prop, nullptr, "boundary_smooth");
2487 RNA_def_property_ui_text(prop, "Boundary Smooth", "Controls how open boundaries are smoothed");
2488 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2489
2491}
2492
2494{
2495 static const EnumPropertyItem prop_subdivision_type_items[] = {
2497 "CATMULL_CLARK",
2498 0,
2499 "Catmull-Clark",
2500 "Create a smooth curved surface using the Catmull-Clark subdivision scheme"},
2501 {SUBSURF_TYPE_SIMPLE, "SIMPLE", 0, "Simple", "Subdivide faces without changing shape"},
2502 {0, nullptr, 0, nullptr, nullptr},
2503 };
2504
2505 StructRNA *srna;
2506 PropertyRNA *prop;
2507
2508 srna = RNA_def_struct(brna, "SubsurfModifier", "Modifier");
2509 RNA_def_struct_ui_text(srna, "Subdivision Surface Modifier", "Subdivision surface modifier");
2510 RNA_def_struct_sdna(srna, "SubsurfModifierData");
2511 RNA_def_struct_ui_icon(srna, ICON_MOD_SUBSURF);
2512
2514
2516
2517 prop = RNA_def_property(srna, "subdivision_type", PROP_ENUM, PROP_NONE);
2518 RNA_def_property_enum_sdna(prop, nullptr, "subdivType");
2519 RNA_def_property_enum_items(prop, prop_subdivision_type_items);
2520 RNA_def_property_ui_text(prop, "Subdivision Type", "Select type of subdivision algorithm");
2521 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2522
2523 /* see CCGSUBSURF_LEVEL_MAX for max limit */
2524 prop = RNA_def_property(srna, "levels", PROP_INT, PROP_UNSIGNED);
2525 RNA_def_property_int_sdna(prop, nullptr, "levels");
2526 RNA_def_property_range(prop, 0, 11);
2527 RNA_def_property_ui_range(prop, 0, 6, 1, -1);
2528 RNA_def_property_ui_text(prop, "Levels", "Number of subdivisions to perform in the 3D viewport");
2529 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2530
2531 prop = RNA_def_property(srna, "render_levels", PROP_INT, PROP_UNSIGNED);
2532 RNA_def_property_int_sdna(prop, nullptr, "renderLevels");
2533 RNA_def_property_range(prop, 0, 11);
2534 RNA_def_property_ui_range(prop, 0, 6, 1, -1);
2536 prop, "Render Levels", "Number of subdivisions to perform when rendering");
2537
2538 prop = RNA_def_property(srna, "show_only_control_edges", PROP_BOOLEAN, PROP_NONE);
2540 RNA_def_property_ui_text(prop, "Optimal Display", "Skip displaying interior subdivided edges");
2541 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2542
2543 prop = RNA_def_property(srna, "use_creases", PROP_BOOLEAN, PROP_NONE);
2546 prop, "Use Creases", "Use mesh crease information to sharpen edges or corners");
2547 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2548
2549 prop = RNA_def_property(srna, "use_custom_normals", PROP_BOOLEAN, PROP_NONE);
2552 prop, "Use Custom Normals", "Interpolates existing custom normals to resulting mesh");
2553 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2554
2555 prop = RNA_def_property(srna, "use_limit_surface", PROP_BOOLEAN, PROP_NONE);
2557 prop, nullptr, "flags", eSubsurfModifierFlag_UseRecursiveSubdivision);
2559 "Use Limit Surface",
2560 "Place vertices at the surface that would be produced with infinite "
2561 "levels of subdivision (smoothest possible shape)");
2562 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2563
2564 rna_def_modifier_panel_open_prop(srna, "open_adaptive_subdivision_panel", 0);
2565 rna_def_modifier_panel_open_prop(srna, "open_advanced_panel", 1);
2566
2568}
2569
2571{
2572 static const EnumPropertyItem prop_texture_coordinates_items[] = {
2574 "LOCAL",
2575 0,
2576 "Local",
2577 "Use the local coordinate system for the texture coordinates"},
2579 "GLOBAL",
2580 0,
2581 "Global",
2582 "Use the global coordinate system for the texture coordinates"},
2584 "OBJECT",
2585 0,
2586 "Object",
2587 "Use the linked object's local coordinate system for the texture coordinates"},
2588 {MOD_DISP_MAP_UV, "UV", 0, "UV", "Use UV coordinates for the texture coordinates"},
2589 {0, nullptr, 0, nullptr, nullptr},
2590 };
2591
2592 PropertyRNA *prop;
2593
2595
2596 prop = RNA_def_property(srna, "texture", PROP_POINTER, PROP_NONE);
2597 RNA_def_property_ui_text(prop, "Texture", "");
2599 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
2600
2601 prop = RNA_def_property(srna, "texture_coords", PROP_ENUM, PROP_NONE);
2602 RNA_def_property_enum_sdna(prop, nullptr, "texmapping");
2603 RNA_def_property_enum_items(prop, prop_texture_coordinates_items);
2604 RNA_def_property_ui_text(prop, "Texture Coordinates", "");
2605 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
2606
2607 prop = RNA_def_property(srna, "uv_layer", PROP_STRING, PROP_NONE);
2608 RNA_def_property_string_sdna(prop, nullptr, "uvlayer_name");
2609 RNA_def_property_ui_text(prop, "UV Map", "UV map name");
2611 prop, nullptr, nullptr, "rna_MappingInfoModifier_uvlayer_name_set");
2612 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2613
2614 prop = RNA_def_property(srna, "texture_coords_object", PROP_POINTER, PROP_NONE);
2615 RNA_def_property_pointer_sdna(prop, nullptr, "map_object");
2617 prop, "Texture Coordinate Object", "Object to set the texture coordinates");
2619 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
2620
2621 prop = RNA_def_property(srna, "texture_coords_bone", PROP_STRING, PROP_NONE);
2622 RNA_def_property_string_sdna(prop, nullptr, "map_bone");
2623 RNA_def_property_ui_text(prop, "Texture Coordinate Bone", "Bone to set the texture coordinates");
2624 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
2625
2627}
2628
2630{
2631 StructRNA *srna;
2632 PropertyRNA *prop;
2633
2634 srna = RNA_def_struct(brna, "WarpModifier", "Modifier");
2635 RNA_def_struct_ui_text(srna, "Warp Modifier", "Warp modifier");
2636 RNA_def_struct_sdna(srna, "WarpModifierData");
2637 RNA_def_struct_ui_icon(srna, ICON_MOD_WARP);
2638
2640
2641 prop = RNA_def_property(srna, "object_from", PROP_POINTER, PROP_NONE);
2642 RNA_def_property_pointer_sdna(prop, nullptr, "object_from");
2643 RNA_def_property_ui_text(prop, "Object From", "Object to transform from");
2645 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
2646
2647 prop = RNA_def_property(srna, "bone_from", PROP_STRING, PROP_NONE);
2648 RNA_def_property_string_sdna(prop, nullptr, "bone_from");
2649 RNA_def_property_ui_text(prop, "Bone From", "Bone to transform from");
2650 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
2651
2652 prop = RNA_def_property(srna, "object_to", PROP_POINTER, PROP_NONE);
2653 RNA_def_property_pointer_sdna(prop, nullptr, "object_to");
2654 RNA_def_property_ui_text(prop, "Object To", "Object to transform to");
2656 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
2657
2658 prop = RNA_def_property(srna, "bone_to", PROP_STRING, PROP_NONE);
2659 RNA_def_property_string_sdna(prop, nullptr, "bone_to");
2660 RNA_def_property_ui_text(prop, "Bone To", "Bone defining offset");
2661 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
2662
2663 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
2665 RNA_def_property_ui_range(prop, -100, 100, 10, 2);
2666 RNA_def_property_ui_text(prop, "Strength", "");
2667 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2668
2669 prop = RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);
2671 RNA_def_property_ui_text(prop, "Falloff Type", "");
2673 BLT_I18NCONTEXT_ID_CURVE_LEGACY); /* Abusing id_curve :/ */
2674 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2675
2676 prop = RNA_def_property(srna, "falloff_radius", PROP_FLOAT, PROP_DISTANCE);
2677 RNA_def_property_ui_text(prop, "Radius", "Radius to apply");
2678 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2679
2680 prop = RNA_def_property(srna, "falloff_curve", PROP_POINTER, PROP_NONE);
2681 RNA_def_property_pointer_sdna(prop, nullptr, "curfalloff");
2682 RNA_def_property_ui_text(prop, "Falloff Curve", "Custom falloff curve");
2683 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2684
2685 prop = RNA_def_property(srna, "use_volume_preserve", PROP_BOOLEAN, PROP_NONE);
2687 RNA_def_property_ui_text(prop, "Preserve Volume", "Preserve volume when rotations are used");
2688 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2689
2690 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
2691 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
2692 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
2693 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_WarpModifier_defgrp_name_set");
2694 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2695
2696 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
2698 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
2699 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2700
2702
2704}
2705
2707{
2708 StructRNA *srna;
2709 PropertyRNA *prop;
2710
2711 srna = RNA_def_struct(brna, "MultiresModifier", "Modifier");
2712 RNA_def_struct_ui_text(srna, "Multires Modifier", "Multiresolution mesh modifier");
2713 RNA_def_struct_sdna(srna, "MultiresModifierData");
2714 RNA_def_struct_ui_icon(srna, ICON_MOD_MULTIRES);
2715
2717
2719
2720 prop = RNA_def_property(srna, "levels", PROP_INT, PROP_UNSIGNED);
2721 RNA_def_property_int_sdna(prop, nullptr, "lvl");
2722 RNA_def_property_ui_text(prop, "Levels", "Number of subdivisions to use in the viewport");
2723 RNA_def_property_int_funcs(prop, nullptr, nullptr, "rna_MultiresModifier_level_range");
2724 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2725
2726 prop = RNA_def_property(srna, "sculpt_levels", PROP_INT, PROP_UNSIGNED);
2727 RNA_def_property_int_sdna(prop, nullptr, "sculptlvl");
2728 RNA_def_property_ui_text(prop, "Sculpt Levels", "Number of subdivisions to use in sculpt mode");
2729 RNA_def_property_int_funcs(prop, nullptr, nullptr, "rna_MultiresModifier_level_range");
2730 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2731
2732 prop = RNA_def_property(srna, "render_levels", PROP_INT, PROP_UNSIGNED);
2733 RNA_def_property_int_sdna(prop, nullptr, "renderlvl");
2734 RNA_def_property_ui_text(prop, "Render Levels", "The subdivision level visible at render time");
2735 RNA_def_property_int_funcs(prop, nullptr, nullptr, "rna_MultiresModifier_level_range");
2736
2737 prop = RNA_def_property(srna, "total_levels", PROP_INT, PROP_UNSIGNED);
2738 RNA_def_property_int_sdna(prop, nullptr, "totlvl");
2741 prop, "Total Levels", "Number of subdivisions for which displacements are stored");
2742
2743 prop = RNA_def_property(srna, "is_external", PROP_BOOLEAN, PROP_NONE);
2745 RNA_def_property_boolean_funcs(prop, "rna_MultiresModifier_external_get", nullptr);
2747 prop, "External", "Store multires displacements outside the .blend file, to save memory");
2748
2749 prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH);
2751 "rna_MultiresModifier_filepath_get",
2752 "rna_MultiresModifier_filepath_length",
2753 "rna_MultiresModifier_filepath_set");
2754 RNA_def_property_ui_text(prop, "File Path", "Path to external displacements file");
2756 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2757
2758 prop = RNA_def_property(srna, "show_only_control_edges", PROP_BOOLEAN, PROP_NONE);
2761 prop, "Optimal Display", "Skip drawing/rendering of interior subdivided edges");
2762 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2763
2764 prop = RNA_def_property(srna, "use_creases", PROP_BOOLEAN, PROP_NONE);
2767 prop, "Use Creases", "Use mesh crease information to sharpen edges or corners");
2768 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2769
2770 prop = RNA_def_property(srna, "use_custom_normals", PROP_BOOLEAN, PROP_NONE);
2773 prop, "Use Custom Normals", "Interpolates existing custom normals to resulting mesh");
2774 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2775
2776 prop = RNA_def_property(srna, "use_sculpt_base_mesh", PROP_BOOLEAN, PROP_NONE);
2779 "Sculpt Base Mesh",
2780 "Make Sculpt Mode tools deform the base mesh while previewing the "
2781 "displacement of higher subdivision levels");
2782 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2783
2785}
2786
2788{
2789 StructRNA *srna;
2790 PropertyRNA *prop;
2791
2792 srna = RNA_def_struct(brna, "LatticeModifier", "Modifier");
2793 RNA_def_struct_ui_text(srna, "Lattice Modifier", "Lattice deformation modifier");
2794 RNA_def_struct_sdna(srna, "LatticeModifierData");
2795 RNA_def_struct_ui_icon(srna, ICON_MOD_LATTICE);
2796
2798
2799 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
2800 RNA_def_property_ui_text(prop, "Object", "Lattice object to deform with");
2802 prop, nullptr, "rna_LatticeModifier_object_set", nullptr, "rna_Lattice_object_poll");
2804 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
2805
2806 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
2807 RNA_def_property_string_sdna(prop, nullptr, "name");
2809 prop,
2810 "Vertex Group",
2811 "Name of Vertex Group which determines influence of modifier per point");
2812 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_LatticeModifier_name_set");
2813 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2814
2815 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
2817 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
2818 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2819
2820 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
2822 RNA_def_property_ui_range(prop, 0, 1, 10, 2);
2823 RNA_def_property_ui_text(prop, "Strength", "Strength of modifier effect");
2824 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2825
2827}
2828
2830{
2831 StructRNA *srna;
2832 PropertyRNA *prop;
2833
2834 static const EnumPropertyItem prop_deform_axis_items[] = {
2835 {MOD_CURVE_POSX, "POS_X", 0, "X", ""},
2836 {MOD_CURVE_POSY, "POS_Y", 0, "Y", ""},
2837 {MOD_CURVE_POSZ, "POS_Z", 0, "Z", ""},
2838 {MOD_CURVE_NEGX, "NEG_X", 0, "-X", ""},
2839 {MOD_CURVE_NEGY, "NEG_Y", 0, "-Y", ""},
2840 {MOD_CURVE_NEGZ, "NEG_Z", 0, "-Z", ""},
2841 {0, nullptr, 0, nullptr, nullptr},
2842 };
2843
2844 srna = RNA_def_struct(brna, "CurveModifier", "Modifier");
2845 RNA_def_struct_ui_text(srna, "Curve Modifier", "Curve deformation modifier");
2846 RNA_def_struct_sdna(srna, "CurveModifierData");
2847 RNA_def_struct_ui_icon(srna, ICON_MOD_CURVE);
2848
2850
2851 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
2852 RNA_def_property_ui_text(prop, "Object", "Curve object to deform with");
2854 prop, nullptr, "rna_CurveModifier_object_set", nullptr, "rna_Curve_object_poll");
2856 RNA_def_property_update(prop, 0, "rna_CurveModifier_dependency_update");
2857
2858 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
2859 RNA_def_property_string_sdna(prop, nullptr, "name");
2861 prop,
2862 "Vertex Group",
2863 "Name of Vertex Group which determines influence of modifier per point");
2864 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_CurveModifier_name_set");
2865 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2866
2867 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
2869 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
2870 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2871
2872 prop = RNA_def_property(srna, "deform_axis", PROP_ENUM, PROP_NONE);
2873 RNA_def_property_enum_sdna(prop, nullptr, "defaxis");
2874 RNA_def_property_enum_items(prop, prop_deform_axis_items);
2875 RNA_def_property_ui_text(prop, "Deform Axis", "The axis that the curve deforms along");
2876 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2877
2879}
2880
2882{
2883 StructRNA *srna;
2884 PropertyRNA *prop;
2885
2886 srna = RNA_def_struct(brna, "BuildModifier", "Modifier");
2887 RNA_def_struct_ui_text(srna, "Build Modifier", "Build effect modifier");
2888 RNA_def_struct_sdna(srna, "BuildModifierData");
2889 RNA_def_struct_ui_icon(srna, ICON_MOD_BUILD);
2890
2892
2893 prop = RNA_def_property(srna, "frame_start", PROP_FLOAT, PROP_TIME);
2894 RNA_def_property_float_sdna(prop, nullptr, "start");
2896 RNA_def_property_ui_text(prop, "Start Frame", "Start frame of the effect");
2897 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2898
2899 prop = RNA_def_property(srna, "frame_duration", PROP_FLOAT, PROP_TIME);
2900 RNA_def_property_float_sdna(prop, nullptr, "length");
2902 RNA_def_property_ui_text(prop, "Length", "Total time the build effect requires");
2903 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2904
2905 prop = RNA_def_property(srna, "use_reverse", PROP_BOOLEAN, PROP_NONE);
2907 RNA_def_property_ui_text(prop, "Reversed", "Deconstruct the mesh instead of building it");
2908 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2909
2910 prop = RNA_def_property(srna, "use_random_order", PROP_BOOLEAN, PROP_NONE);
2912 RNA_def_property_ui_text(prop, "Randomize", "Randomize the faces or edges during build");
2913 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2914
2915 prop = RNA_def_property(srna, "seed", PROP_INT, PROP_NONE);
2917 RNA_def_property_ui_text(prop, "Seed", "Seed for random if used");
2918 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2919
2921}
2922
2924{
2925 StructRNA *srna;
2926 PropertyRNA *prop;
2927
2928 srna = RNA_def_struct(brna, "MirrorModifier", "Modifier");
2929 RNA_def_struct_ui_text(srna, "Mirror Modifier", "Mirroring modifier");
2930 RNA_def_struct_sdna(srna, "MirrorModifierData");
2931 RNA_def_struct_ui_icon(srna, ICON_MOD_MIRROR);
2932
2934
2935 prop = RNA_def_property(srna, "use_axis", PROP_BOOLEAN, PROP_NONE);
2937 RNA_def_property_ui_text(prop, "Mirror Axis", "Enable axis mirror");
2938 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2939
2940 prop = RNA_def_property(srna, "use_bisect_axis", PROP_BOOLEAN, PROP_NONE);
2942 RNA_def_property_ui_text(prop, "Bisect Axis", "Cuts the mesh across the mirror plane");
2943 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2944
2945 prop = RNA_def_property(srna, "use_bisect_flip_axis", PROP_BOOLEAN, PROP_NONE);
2947 RNA_def_property_ui_text(prop, "Bisect Flip Axis", "Flips the direction of the slice");
2948 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2949
2950 prop = RNA_def_property(srna, "use_clip", PROP_BOOLEAN, PROP_NONE);
2951 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_MIR_CLIPPING);
2953 prop, "Clip", "Prevent vertices from going through the mirror during transform");
2954 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2955
2956 prop = RNA_def_property(srna, "use_mirror_vertex_groups", PROP_BOOLEAN, PROP_NONE);
2957 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_MIR_VGROUP);
2958 RNA_def_property_ui_text(prop, "Mirror Vertex Groups", "Mirror vertex groups (e.g. .R->.L)");
2959 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2960
2961 prop = RNA_def_property(srna, "use_mirror_merge", PROP_BOOLEAN, PROP_NONE);
2963 RNA_def_property_ui_text(prop, "Merge Vertices", "Merge vertices within the merge threshold");
2964 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2965
2966 prop = RNA_def_property(srna, "use_mirror_u", PROP_BOOLEAN, PROP_NONE);
2967 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_MIR_MIRROR_U);
2969 prop, "Mirror U", "Mirror the U texture coordinate around the flip offset point");
2970 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2971
2972 prop = RNA_def_property(srna, "use_mirror_v", PROP_BOOLEAN, PROP_NONE);
2973 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_MIR_MIRROR_V);
2975 prop, "Mirror V", "Mirror the V texture coordinate around the flip offset point");
2976 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2977
2978 prop = RNA_def_property(srna, "use_mirror_udim", PROP_BOOLEAN, PROP_NONE);
2979 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_MIR_MIRROR_UDIM);
2981 prop, "Mirror UDIM", "Mirror the texture coordinate around each tile center");
2982 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2983
2984 prop = RNA_def_property(srna, "mirror_offset_u", PROP_FLOAT, PROP_FACTOR);
2985 RNA_def_property_float_sdna(prop, nullptr, "uv_offset[0]");
2986 RNA_def_property_range(prop, -1, 1);
2987 RNA_def_property_ui_range(prop, -1, 1, 2, 4);
2989 prop,
2990 "Flip U Offset",
2991 "Amount to offset mirrored UVs flipping point from the 0.5 on the U axis");
2992 RNA_def_property_update(prop, 0, "rna_Modifier_update");
2993
2994 prop = RNA_def_property(srna, "mirror_offset_v", PROP_FLOAT, PROP_FACTOR);
2995 RNA_def_property_float_sdna(prop, nullptr, "uv_offset[1]");
2996 RNA_def_property_range(prop, -1, 1);
2997 RNA_def_property_ui_range(prop, -1, 1, 2, 4);
2999 prop,
3000 "Flip V Offset",
3001 "Amount to offset mirrored UVs flipping point from the 0.5 point on the V axis");
3002 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3003
3004 prop = RNA_def_property(srna, "offset_u", PROP_FLOAT, PROP_FACTOR);
3005 RNA_def_property_float_sdna(prop, nullptr, "uv_offset_copy[0]");
3006 RNA_def_property_range(prop, -10000.0f, 10000.0f);
3007 RNA_def_property_ui_range(prop, -1, 1, 2, 4);
3008 RNA_def_property_ui_text(prop, "U Offset", "Mirrored UV offset on the U axis");
3009 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3010
3011 prop = RNA_def_property(srna, "offset_v", PROP_FLOAT, PROP_FACTOR);
3012 RNA_def_property_float_sdna(prop, nullptr, "uv_offset_copy[1]");
3013 RNA_def_property_range(prop, -10000.0f, 10000.0f);
3014 RNA_def_property_ui_range(prop, -1, 1, 2, 4);
3015 RNA_def_property_ui_text(prop, "V Offset", "Mirrored UV offset on the V axis");
3016 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3017
3018 prop = RNA_def_property(srna, "merge_threshold", PROP_FLOAT, PROP_DISTANCE);
3019 RNA_def_property_float_sdna(prop, nullptr, "tolerance");
3021 RNA_def_property_ui_range(prop, 0, 1, 0.01, 6);
3023 prop, "Merge Distance", "Distance within which mirrored vertices are merged");
3024 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3025
3026 prop = RNA_def_property(srna, "bisect_threshold", PROP_FLOAT, PROP_DISTANCE);
3027 RNA_def_property_float_sdna(prop, nullptr, "bisect_threshold");
3029 RNA_def_property_ui_range(prop, 0, 1, 0.01, 6);
3031 prop, "Bisect Distance", "Distance from the bisect plane within which vertices are removed");
3032 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3033
3034 prop = RNA_def_property(srna, "mirror_object", PROP_POINTER, PROP_NONE);
3035 RNA_def_property_pointer_sdna(prop, nullptr, "mirror_ob");
3036 RNA_def_property_ui_text(prop, "Mirror Object", "Object to use as mirror");
3038 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3039
3041}
3042
3044{
3045 static const EnumPropertyItem modifier_decim_mode_items[] = {
3046 {MOD_DECIM_MODE_COLLAPSE, "COLLAPSE", 0, "Collapse", "Use edge collapsing"},
3047 {MOD_DECIM_MODE_UNSUBDIV, "UNSUBDIV", 0, "Un-Subdivide", "Use un-subdivide face reduction"},
3049 "DISSOLVE",
3050 0,
3051 "Planar",
3052 "Dissolve geometry to form planar polygons"},
3053 {0, nullptr, 0, nullptr, nullptr},
3054 };
3055
3056 /* NOTE: keep in sync with operator `MESH_OT_decimate`. */
3057
3058 StructRNA *srna;
3059 PropertyRNA *prop;
3060
3061 srna = RNA_def_struct(brna, "DecimateModifier", "Modifier");
3062 RNA_def_struct_ui_text(srna, "Decimate Modifier", "Decimation modifier");
3063 RNA_def_struct_sdna(srna, "DecimateModifierData");
3064 RNA_def_struct_ui_icon(srna, ICON_MOD_DECIM);
3065
3067
3068 prop = RNA_def_property(srna, "decimate_type", PROP_ENUM, PROP_NONE);
3069 RNA_def_property_enum_sdna(prop, nullptr, "mode");
3070 RNA_def_property_enum_items(prop, modifier_decim_mode_items);
3071 RNA_def_property_ui_text(prop, "Mode", "");
3073 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3074
3075 /* (mode == MOD_DECIM_MODE_COLLAPSE) */
3076 prop = RNA_def_property(srna, "ratio", PROP_FLOAT, PROP_FACTOR);
3077 RNA_def_property_float_sdna(prop, nullptr, "percent");
3078 RNA_def_property_range(prop, 0, 1);
3079 RNA_def_property_ui_range(prop, 0, 1, 1, 4);
3080 RNA_def_property_ui_text(prop, "Ratio", "Ratio of triangles to reduce to (collapse only)");
3081 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3082
3083 /* (mode == MOD_DECIM_MODE_UNSUBDIV) */
3084 prop = RNA_def_property(srna, "iterations", PROP_INT, PROP_UNSIGNED);
3085 RNA_def_property_int_sdna(prop, nullptr, "iter");
3086 RNA_def_property_range(prop, 0, SHRT_MAX);
3087 RNA_def_property_ui_range(prop, 0, 100, 1, -1);
3089 prop, "Iterations", "Number of times reduce the geometry (unsubdivide only)");
3090 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3091
3092 /* (mode == MOD_DECIM_MODE_DISSOLVE) */
3093 prop = RNA_def_property(srna, "angle_limit", PROP_FLOAT, PROP_ANGLE);
3094 RNA_def_property_float_sdna(prop, nullptr, "angle");
3095 RNA_def_property_range(prop, 0, DEG2RAD(180));
3096 RNA_def_property_ui_range(prop, 0, DEG2RAD(180), 10, 4);
3097 RNA_def_property_ui_text(prop, "Angle Limit", "Only dissolve angles below this (planar only)");
3098 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3099
3100 /* (mode == MOD_DECIM_MODE_COLLAPSE) */
3101 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
3102 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
3103 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name (collapse only)");
3104 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_DecimateModifier_defgrp_name_set");
3105 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3106
3107 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
3109 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence (collapse only)");
3110 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3111
3112 prop = RNA_def_property(srna, "use_collapse_triangulate", PROP_BOOLEAN, PROP_NONE);
3115 prop, "Triangulate", "Keep triangulated faces resulting from decimation (collapse only)");
3116 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3117
3118 prop = RNA_def_property(srna, "use_symmetry", PROP_BOOLEAN, PROP_NONE);
3120 RNA_def_property_ui_text(prop, "Symmetry", "Maintain symmetry on an axis");
3121 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3122
3123 prop = RNA_def_property(srna, "symmetry_axis", PROP_ENUM, PROP_NONE);
3124 RNA_def_property_enum_sdna(prop, nullptr, "symmetry_axis");
3126 RNA_def_property_ui_text(prop, "Axis", "Axis of symmetry");
3127 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3128
3129 prop = RNA_def_property(srna, "vertex_group_factor", PROP_FLOAT, PROP_FACTOR);
3130 RNA_def_property_float_sdna(prop, nullptr, "defgrp_factor");
3131 RNA_def_property_range(prop, 0, 1000);
3132 RNA_def_property_ui_range(prop, 0, 10, 1, 4);
3133 RNA_def_property_ui_text(prop, "Factor", "Vertex group strength");
3134 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3135 /* end collapse-only option */
3136
3137 /* (mode == MOD_DECIM_MODE_DISSOLVE) */
3138 prop = RNA_def_property(srna, "use_dissolve_boundaries", PROP_BOOLEAN, PROP_NONE);
3141 prop, "All Boundaries", "Dissolve all vertices in between face boundaries (planar only)");
3142 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3143
3144 prop = RNA_def_property(srna, "delimit", PROP_ENUM, PROP_NONE);
3145 RNA_def_property_flag(prop, PROP_ENUM_FLAG); /* important to run before default set */
3147 RNA_def_property_ui_text(prop, "Delimit", "Limit merging geometry");
3148 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3149
3150 /* end dissolve-only option */
3151
3152 /* all modes use this */
3153 prop = RNA_def_property(srna, "face_count", PROP_INT, PROP_NONE);
3156 prop, "Face Count", "The current number of faces in the decimated mesh");
3157
3159}
3160
3162{
3163 StructRNA *srna;
3164 PropertyRNA *prop;
3165
3166 srna = RNA_def_struct(brna, "WaveModifier", "Modifier");
3167 RNA_def_struct_ui_text(srna, "Wave Modifier", "Wave effect modifier");
3168 RNA_def_struct_sdna(srna, "WaveModifierData");
3169 RNA_def_struct_ui_icon(srna, ICON_MOD_WAVE);
3170
3172
3173 prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
3174 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_WAVE_X);
3175 RNA_def_property_ui_text(prop, "X", "X axis motion");
3176 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3177
3178 prop = RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
3179 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_WAVE_Y);
3180 RNA_def_property_ui_text(prop, "Y", "Y axis motion");
3181 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3182
3183 prop = RNA_def_property(srna, "use_cyclic", PROP_BOOLEAN, PROP_NONE);
3184 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_WAVE_CYCL);
3185 RNA_def_property_ui_text(prop, "Cyclic", "Cyclic wave effect");
3186 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3187
3188 prop = RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE);
3189 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_WAVE_NORM);
3190 RNA_def_property_ui_text(prop, "Normals", "Displace along normals");
3191 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3192
3193 prop = RNA_def_property(srna, "use_normal_x", PROP_BOOLEAN, PROP_NONE);
3194 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_WAVE_NORM_X);
3195 RNA_def_property_ui_text(prop, "X Normal", "Enable displacement along the X normal");
3196 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3197
3198 prop = RNA_def_property(srna, "use_normal_y", PROP_BOOLEAN, PROP_NONE);
3199 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_WAVE_NORM_Y);
3200 RNA_def_property_ui_text(prop, "Y Normal", "Enable displacement along the Y normal");
3201 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3202
3203 prop = RNA_def_property(srna, "use_normal_z", PROP_BOOLEAN, PROP_NONE);
3204 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_WAVE_NORM_Z);
3205 RNA_def_property_ui_text(prop, "Z Normal", "Enable displacement along the Z normal");
3206 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3207
3208 prop = RNA_def_property(srna, "time_offset", PROP_FLOAT, PROP_TIME);
3209 RNA_def_property_float_sdna(prop, nullptr, "timeoffs");
3212 prop,
3213 "Time Offset",
3214 "Either the starting frame (for positive speed) or ending frame (for negative speed)");
3215 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3216
3217 prop = RNA_def_property(srna, "lifetime", PROP_FLOAT, PROP_TIME);
3218 RNA_def_property_float_sdna(prop, nullptr, "lifetime");
3221 prop, "Lifetime", "Lifetime of the wave in frames, zero means infinite");
3222 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3223
3224 prop = RNA_def_property(srna, "damping_time", PROP_FLOAT, PROP_TIME);
3225 RNA_def_property_float_sdna(prop, nullptr, "damp");
3228 prop, "Damping Time", "Number of frames in which the wave damps out after it dies");
3229 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3230
3231 prop = RNA_def_property(srna, "falloff_radius", PROP_FLOAT, PROP_DISTANCE);
3232 RNA_def_property_float_sdna(prop, nullptr, "falloff");
3234 RNA_def_property_ui_range(prop, 0, 100, 100, 2);
3235 RNA_def_property_ui_text(prop, "Falloff Radius", "Distance after which it fades out");
3236 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3237
3238 prop = RNA_def_property(srna, "start_position_x", PROP_FLOAT, PROP_DISTANCE);
3239 RNA_def_property_float_sdna(prop, nullptr, "startx");
3241 RNA_def_property_ui_range(prop, -100, 100, 100, 2);
3242 RNA_def_property_ui_text(prop, "Start Position X", "X coordinate of the start position");
3243 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3244
3245 prop = RNA_def_property(srna, "start_position_y", PROP_FLOAT, PROP_DISTANCE);
3246 RNA_def_property_float_sdna(prop, nullptr, "starty");
3248 RNA_def_property_ui_range(prop, -100, 100, 100, 2);
3249 RNA_def_property_ui_text(prop, "Start Position Y", "Y coordinate of the start position");
3250 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3251
3252 prop = RNA_def_property(srna, "start_position_object", PROP_POINTER, PROP_NONE);
3253 RNA_def_property_pointer_sdna(prop, nullptr, "objectcenter");
3254 RNA_def_property_ui_text(prop, "Start Position Object", "Object which defines the wave center");
3256 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3257
3258 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
3259 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
3260 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the wave");
3261 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_WaveModifier_defgrp_name_set");
3262 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3263
3264 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
3266 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
3267 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3268
3269 prop = RNA_def_property(srna, "speed", PROP_FLOAT, PROP_NONE);
3271 RNA_def_property_ui_range(prop, -1, 1, 10, 2);
3273 prop, "Speed", "Speed of the wave, towards the starting point when negative");
3274 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3275
3276 prop = RNA_def_property(srna, "height", PROP_FLOAT, PROP_DISTANCE);
3278 RNA_def_property_ui_range(prop, -2, 2, 10, 2);
3279 RNA_def_property_ui_text(prop, "Height", "Height of the wave");
3280 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3281
3282 prop = RNA_def_property(srna, "width", PROP_FLOAT, PROP_DISTANCE);
3284 RNA_def_property_ui_range(prop, 0, 5, 10, 2);
3285 RNA_def_property_ui_text(prop, "Width", "Distance between the waves");
3286 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3287
3288 prop = RNA_def_property(srna, "narrowness", PROP_FLOAT, PROP_DISTANCE);
3289 RNA_def_property_float_sdna(prop, nullptr, "narrow");
3291 RNA_def_property_ui_range(prop, 0, 10, 10, 2);
3293 prop,
3294 "Narrowness",
3295 "Distance between the top and the base of a wave, the higher the value, "
3296 "the more narrow the wave");
3297 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3298
3300
3302}
3303
3305{
3306 StructRNA *srna;
3307 PropertyRNA *prop;
3308
3309 srna = RNA_def_struct(brna, "ArmatureModifier", "Modifier");
3310 RNA_def_struct_ui_text(srna, "Armature Modifier", "Armature deformation modifier");
3311 RNA_def_struct_sdna(srna, "ArmatureModifierData");
3312 RNA_def_struct_ui_icon(srna, ICON_MOD_ARMATURE);
3313
3315
3316 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
3317 RNA_def_property_ui_text(prop, "Object", "Armature object to deform with");
3319 prop, nullptr, "rna_ArmatureModifier_object_set", nullptr, "rna_Armature_object_poll");
3321 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3322
3323 prop = RNA_def_property(srna, "use_bone_envelopes", PROP_BOOLEAN, PROP_NONE);
3324 RNA_def_property_boolean_sdna(prop, nullptr, "deformflag", ARM_DEF_ENVELOPE);
3326 RNA_def_property_ui_text(prop, "Use Bone Envelopes", "Bind Bone envelopes to armature modifier");
3327 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3328
3329 prop = RNA_def_property(srna, "use_vertex_groups", PROP_BOOLEAN, PROP_NONE);
3330 RNA_def_property_boolean_sdna(prop, nullptr, "deformflag", ARM_DEF_VGROUP);
3332 RNA_def_property_ui_text(prop, "Use Vertex Groups", "Bind vertex groups to armature modifier");
3333 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3334
3335 prop = RNA_def_property(srna, "use_deform_preserve_volume", PROP_BOOLEAN, PROP_NONE);
3336 RNA_def_property_boolean_sdna(prop, nullptr, "deformflag", ARM_DEF_QUATERNION);
3338 prop, "Preserve Volume", "Deform rotation interpolation with quaternions");
3339 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3340
3341 prop = RNA_def_property(srna, "use_multi_modifier", PROP_BOOLEAN, PROP_NONE);
3342 RNA_def_property_boolean_sdna(prop, nullptr, "multi", 0);
3344 prop,
3345 "Multi Modifier",
3346 "Use same input as previous modifier, and mix results using overall vgroup");
3347 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3348
3349 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
3350 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
3352 prop,
3353 "Vertex Group",
3354 "Name of Vertex Group which determines influence of modifier per point");
3355 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_ArmatureModifier_defgrp_name_set");
3356 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3357
3358 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
3359 RNA_def_property_boolean_sdna(prop, nullptr, "deformflag", ARM_DEF_INVERT_VGROUP);
3360 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
3361 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3362
3364}
3365
3367{
3368 StructRNA *srna;
3369 PropertyRNA *prop;
3370 FunctionRNA *func;
3371 PropertyRNA *parm;
3372
3373 srna = RNA_def_struct(brna, "HookModifier", "Modifier");
3375 srna, "Hook Modifier", "Hook modifier to modify the location of vertices");
3376 RNA_def_struct_sdna(srna, "HookModifierData");
3377 RNA_def_struct_ui_icon(srna, ICON_HOOK);
3378
3380
3381 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_FACTOR);
3382 RNA_def_property_float_sdna(prop, nullptr, "force");
3383 RNA_def_property_range(prop, 0, 1);
3384 RNA_def_property_ui_text(prop, "Strength", "Relative force of the hook");
3385 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3386
3387 prop = RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);
3388 RNA_def_property_enum_items(prop, modifier_warp_falloff_items); /* share the enum */
3389 RNA_def_property_ui_text(prop, "Falloff Type", "");
3391 BLT_I18NCONTEXT_ID_CURVE_LEGACY); /* Abusing id_curve :/ */
3392 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3393
3394 prop = RNA_def_property(srna, "falloff_radius", PROP_FLOAT, PROP_DISTANCE);
3395 RNA_def_property_float_sdna(prop, nullptr, "falloff");
3397 RNA_def_property_ui_range(prop, 0, 100, 100, 2);
3399 prop, "Radius", "If not zero, the distance from the hook where influence ends");
3400 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3401
3402 prop = RNA_def_property(srna, "falloff_curve", PROP_POINTER, PROP_NONE);
3403 RNA_def_property_pointer_sdna(prop, nullptr, "curfalloff");
3404 RNA_def_property_ui_text(prop, "Falloff Curve", "Custom falloff curve");
3405 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3406
3407 prop = RNA_def_property(srna, "center", PROP_FLOAT, PROP_TRANSLATION);
3408 RNA_def_property_float_sdna(prop, nullptr, "cent");
3410 prop, "Hook Center", "Center of the hook, used for falloff and display");
3411 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3412
3413 prop = RNA_def_property(srna, "matrix_inverse", PROP_FLOAT, PROP_MATRIX);
3414 RNA_def_property_float_sdna(prop, nullptr, "parentinv");
3417 prop, "Matrix", "Reverse the transformation between this object and its target");
3418 RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Modifier_update");
3419
3420 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
3422 prop, "Object", "Parent Object for hook, also recalculates and clears offset");
3425 prop, nullptr, nullptr, "rna_HookModifier_object_override_apply");
3426 RNA_def_property_pointer_funcs(prop, nullptr, "rna_HookModifier_object_set", nullptr, nullptr);
3427 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3428
3429 prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
3430 RNA_def_property_string_sdna(prop, nullptr, "subtarget");
3432 prop,
3433 "Sub-Target",
3434 "Name of Parent Bone for hook (if applicable), also recalculates and clears offset");
3435 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_HookModifier_subtarget_set");
3436 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3437
3438 prop = RNA_def_property(srna, "use_falloff_uniform", PROP_BOOLEAN, PROP_NONE);
3440 RNA_def_property_ui_text(prop, "Uniform Falloff", "Compensate for non-uniform object scale");
3441 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3442
3443 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
3444 RNA_def_property_string_sdna(prop, nullptr, "name");
3446 prop,
3447 "Vertex Group",
3448 "Name of Vertex Group which determines influence of modifier per point");
3449 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_HookModifier_name_set");
3450 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3451
3452 prop = RNA_def_property(srna, "vertex_indices", PROP_INT, PROP_UNSIGNED);
3456 RNA_def_property_dynamic_array_funcs(prop, "rna_HookModifier_vertex_indices_get_length");
3457 RNA_def_property_int_funcs(prop, "rna_HookModifier_vertex_indices_get", nullptr, nullptr);
3459 "Vertex Indices",
3460 "Indices of vertices bound to the modifier. For Bézier curves, "
3461 "handles count as additional vertices.");
3462
3463 func = RNA_def_function(srna, "vertex_indices_set", "rna_HookModifier_vertex_indices_set");
3465 func, "Validates and assigns the array of vertex indices bound to the modifier");
3467 parm = RNA_def_int_array(
3468 func, "indices", 1, nullptr, INT_MIN, INT_MAX, "", "Vertex Indices", 0, INT_MAX);
3471
3472 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
3474 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
3475 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3476
3478}
3479
3481{
3482 StructRNA *srna;
3483 PropertyRNA *prop;
3484
3485 srna = RNA_def_struct(brna, "SoftBodyModifier", "Modifier");
3486 RNA_def_struct_ui_text(srna, "Soft Body Modifier", "Soft body simulation modifier");
3487 RNA_def_struct_sdna(srna, "SoftbodyModifierData");
3488 RNA_def_struct_ui_icon(srna, ICON_MOD_SOFT);
3489
3490 prop = RNA_def_property(srna, "settings", PROP_POINTER, PROP_NONE);
3492 RNA_def_property_struct_type(prop, "SoftBodySettings");
3494 prop, "rna_SoftBodyModifier_settings_get", nullptr, nullptr, nullptr);
3495 RNA_def_property_ui_text(prop, "Soft Body Settings", "");
3496
3497 prop = RNA_def_property(srna, "point_cache", PROP_POINTER, PROP_NONE);
3499 RNA_def_property_struct_type(prop, "PointCache");
3501 prop, "rna_SoftBodyModifier_point_cache_get", nullptr, nullptr, nullptr);
3502 RNA_def_property_ui_text(prop, "Soft Body Point Cache", "");
3503}
3504
3506{
3507 StructRNA *srna;
3508 PropertyRNA *prop;
3509
3510 static const EnumPropertyItem prop_operand_items[] = {
3512 "OBJECT",
3513 0,
3514 "Object",
3515 "Use a mesh object as the operand for the Boolean operation"},
3517 "COLLECTION",
3518 0,
3519 "Collection",
3520 "Use a collection of mesh objects as the operand for the Boolean operation"},
3521 {0, nullptr, 0, nullptr, nullptr},
3522 };
3523
3524 static const EnumPropertyItem prop_operation_items[] = {
3526 "INTERSECT",
3527 0,
3528 "Intersect",
3529 "Keep the part of the mesh that is common between all operands"},
3530 {eBooleanModifierOp_Union, "UNION", 0, "Union", "Combine meshes in an additive way"},
3532 "DIFFERENCE",
3533 0,
3534 "Difference",
3535 "Combine meshes in a subtractive way"},
3536 {0, nullptr, 0, nullptr, nullptr},
3537 };
3538
3539 static const EnumPropertyItem prop_solver_items[] = {
3541 "FAST",
3542 0,
3543 "Float",
3544 "Simple solver with good performance, without support for overlapping geometry"},
3546 "EXACT",
3547 0,
3548 "Exact",
3549 "Slower solver with the best results for coplanar faces"},
3551 "MANIFOLD",
3552 0,
3553 "Manifold",
3554 "Fastest solver that works only on manifold meshes but gives better results"},
3555 {0, nullptr, 0, nullptr, nullptr},
3556 };
3557
3558 static const EnumPropertyItem material_mode_items[] = {
3560 "INDEX",
3561 0,
3562 "Index Based",
3563 "Set the material on new faces based on the order of the material slot lists. If a "
3564 "material doesn't exist on the modifier object, the face will use the same material slot "
3565 "or the first if the object doesn't have enough slots."},
3567 "TRANSFER",
3568 0,
3569 "Transfer",
3570 "Transfer materials from non-empty slots to the result mesh, adding new materials as "
3571 "necessary. For empty slots, fall back to using the same material index as the operand "
3572 "mesh."},
3573 {0, nullptr, 0, nullptr, nullptr},
3574 };
3575
3576 srna = RNA_def_struct(brna, "BooleanModifier", "Modifier");
3577 RNA_def_struct_ui_text(srna, "Boolean Modifier", "Boolean operations modifier");
3578 RNA_def_struct_sdna(srna, "BooleanModifierData");
3579 RNA_def_struct_ui_icon(srna, ICON_MOD_BOOLEAN);
3580
3582
3583 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
3584 RNA_def_property_ui_text(prop, "Object", "Mesh object to use for Boolean operation");
3586 prop, nullptr, "rna_BooleanModifier_object_set", nullptr, "rna_Mesh_object_poll");
3588 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3589
3590 prop = RNA_def_property(srna, "collection", PROP_POINTER, PROP_NONE);
3591 RNA_def_property_pointer_sdna(prop, nullptr, "collection");
3592 RNA_def_property_struct_type(prop, "Collection");
3595 prop, "Collection", "Use mesh objects in this collection for Boolean operation");
3596 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3597
3598 prop = RNA_def_property(srna, "operation", PROP_ENUM, PROP_NONE);
3599 RNA_def_property_enum_items(prop, prop_operation_items);
3601 RNA_def_property_ui_text(prop, "Operation", "");
3602 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3603
3604 prop = RNA_def_property(srna, "operand_type", PROP_ENUM, PROP_NONE);
3605 RNA_def_property_enum_bitflag_sdna(prop, nullptr, "flag");
3606 RNA_def_property_enum_items(prop, prop_operand_items);
3607 RNA_def_property_ui_text(prop, "Operand Type", "");
3608 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3609
3610 prop = RNA_def_property(srna, "double_threshold", PROP_FLOAT, PROP_DISTANCE);
3611 RNA_def_property_float_sdna(prop, nullptr, "double_threshold");
3612 RNA_def_property_range(prop, 0, 1.0f);
3613 RNA_def_property_ui_range(prop, 0, 1, 1.0, 6);
3616 prop, "Overlap Threshold", "Threshold for checking overlapping geometry");
3617 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3618
3619 prop = RNA_def_property(srna, "solver", PROP_ENUM, PROP_NONE);
3622 RNA_def_property_ui_text(prop, "Solver", "Method for calculating booleans");
3623 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3624
3625 prop = RNA_def_property(srna, "use_self", PROP_BOOLEAN, PROP_NONE);
3627 RNA_def_property_ui_text(prop, "Self Intersection", "Allow self-intersection in operands");
3628 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3629
3630 prop = RNA_def_property(srna, "use_hole_tolerant", PROP_BOOLEAN, PROP_NONE);
3632 RNA_def_property_ui_text(prop, "Hole Tolerant", "Better results when there are holes (slower)");
3633 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3634
3635 prop = RNA_def_property(srna, "material_mode", PROP_ENUM, PROP_NONE);
3636 RNA_def_property_enum_items(prop, material_mode_items);
3638 RNA_def_property_ui_text(prop, "Material Mode", "Method for setting materials on the new faces");
3639 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3640
3641 /* BMesh debugging options, only used when G_DEBUG is set */
3642
3643 /* BMesh intersection options */
3644 static const EnumPropertyItem debug_items[] = {
3645 {eBooleanModifierBMeshFlag_BMesh_Separate, "SEPARATE", 0, "Separate", ""},
3646 {eBooleanModifierBMeshFlag_BMesh_NoDissolve, "NO_DISSOLVE", 0, "No Dissolve", ""},
3648 "NO_CONNECT_REGIONS",
3649 0,
3650 "No Connect Regions",
3651 ""},
3652 {0, nullptr, 0, nullptr, nullptr},
3653 };
3654
3655 prop = RNA_def_property(srna, "debug_options", PROP_ENUM, PROP_NONE);
3656 RNA_def_property_enum_items(prop, debug_items);
3657 RNA_def_property_enum_sdna(prop, nullptr, "bm_flag");
3659 RNA_def_property_ui_text(prop, "Debug", "Debugging options, only when started with '-d'");
3660 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3661
3663}
3664
3666{
3667 StructRNA *srna;
3668 PropertyRNA *prop;
3669
3670 static const EnumPropertyItem prop_fit_type_items[] = {
3672 "FIXED_COUNT",
3673 0,
3674 "Fixed Count",
3675 "Duplicate the object a certain number of times"},
3677 "FIT_LENGTH",
3678 0,
3679 "Fit Length",
3680 "Duplicate the object as many times as fits in a certain length"},
3681 {MOD_ARR_FITCURVE, "FIT_CURVE", 0, "Fit Curve", "Fit the duplicated objects to a curve"},
3682 {0, nullptr, 0, nullptr, nullptr},
3683 };
3684
3685 srna = RNA_def_struct(brna, "ArrayModifier", "Modifier");
3686 RNA_def_struct_ui_text(srna, "Array Modifier", "Array duplication modifier");
3687 RNA_def_struct_sdna(srna, "ArrayModifierData");
3688 RNA_def_struct_ui_icon(srna, ICON_MOD_ARRAY);
3689
3691
3692 /* Length parameters */
3693 prop = RNA_def_property(srna, "fit_type", PROP_ENUM, PROP_NONE);
3694 RNA_def_property_enum_items(prop, prop_fit_type_items);
3695 RNA_def_property_ui_text(prop, "Fit Type", "Array length calculation method");
3696 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3697
3698 prop = RNA_def_property(srna, "count", PROP_INT, PROP_NONE);
3699 RNA_def_property_range(prop, 1, INT_MAX);
3700 RNA_def_property_ui_range(prop, 1, 1000, 1, -1);
3701 RNA_def_property_ui_text(prop, "Count", "Number of duplicates to make");
3702 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3703
3704 prop = RNA_def_property(srna, "fit_length", PROP_FLOAT, PROP_DISTANCE);
3705 RNA_def_property_float_sdna(prop, nullptr, "length");
3706 RNA_def_property_range(prop, 0, INT_MAX);
3707 RNA_def_property_ui_range(prop, 0, 10000, 10, 2);
3708 RNA_def_property_ui_text(prop, "Length", "Length to fit array within");
3709 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3710
3711 prop = RNA_def_property(srna, "curve", PROP_POINTER, PROP_NONE);
3712 RNA_def_property_pointer_sdna(prop, nullptr, "curve_ob");
3713 RNA_def_property_ui_text(prop, "Curve", "Curve object to fit array length to");
3715 prop, nullptr, "rna_ArrayModifier_curve_ob_set", nullptr, "rna_Curve_object_poll");
3717 RNA_def_property_update(prop, 0, "rna_ArrayModifier_dependency_update");
3718
3719 /* Offset parameters */
3720 prop = RNA_def_property(srna, "use_constant_offset", PROP_BOOLEAN, PROP_NONE);
3721 RNA_def_property_boolean_sdna(prop, nullptr, "offset_type", MOD_ARR_OFF_CONST);
3722 RNA_def_property_ui_text(prop, "Constant Offset", "Add a constant offset");
3723 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3724
3725 prop = RNA_def_property(srna, "constant_offset_displace", PROP_FLOAT, PROP_TRANSLATION);
3726 RNA_def_property_float_sdna(prop, nullptr, "offset");
3728 prop, "Constant Offset Displacement", "Value for the distance between arrayed items");
3730 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3731
3732 prop = RNA_def_property(srna, "use_relative_offset", PROP_BOOLEAN, PROP_NONE);
3733 RNA_def_property_boolean_sdna(prop, nullptr, "offset_type", MOD_ARR_OFF_RELATIVE);
3735 prop, "Relative Offset", "Add an offset relative to the object's bounding box");
3736 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3737
3738 /* PROP_TRANSLATION causes units to be used which we don't want */
3739 prop = RNA_def_property(srna, "relative_offset_displace", PROP_FLOAT, PROP_XYZ);
3740 RNA_def_property_float_sdna(prop, nullptr, "scale");
3742 prop,
3743 "Relative Offset Displacement",
3744 "The size of the geometry will determine the distance between arrayed items");
3745 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3746
3747 /* Vertex merging parameters */
3748 prop = RNA_def_property(srna, "use_merge_vertices", PROP_BOOLEAN, PROP_NONE);
3749 RNA_def_property_boolean_sdna(prop, nullptr, "flags", MOD_ARR_MERGE);
3750 RNA_def_property_ui_text(prop, "Merge Vertices", "Merge vertices in adjacent duplicates");
3751 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3752
3753 prop = RNA_def_property(srna, "use_merge_vertices_cap", PROP_BOOLEAN, PROP_NONE);
3754 RNA_def_property_boolean_sdna(prop, nullptr, "flags", MOD_ARR_MERGEFINAL);
3756 prop, "Merge End Vertices", "Merge vertices in first and last duplicates");
3757 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3758
3759 prop = RNA_def_property(srna, "merge_threshold", PROP_FLOAT, PROP_DISTANCE);
3760 RNA_def_property_float_sdna(prop, nullptr, "merge_dist");
3762 RNA_def_property_ui_range(prop, 0, 1, 1, 4);
3763 RNA_def_property_ui_text(prop, "Merge Distance", "Limit below which to merge vertices");
3764 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3765
3766 /* Offset object */
3767 prop = RNA_def_property(srna, "use_object_offset", PROP_BOOLEAN, PROP_NONE);
3768 RNA_def_property_boolean_sdna(prop, nullptr, "offset_type", MOD_ARR_OFF_OBJ);
3770 prop, "Object Offset", "Add another object's transformation to the total offset");
3771 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3772
3773 prop = RNA_def_property(srna, "offset_object", PROP_POINTER, PROP_NONE);
3774 RNA_def_property_pointer_sdna(prop, nullptr, "offset_ob");
3776 prop,
3777 "Object Offset",
3778 "Use the location and rotation of another object to determine the distance and "
3779 "rotational change between arrayed items");
3781 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3782
3783 /* Caps */
3784 prop = RNA_def_property(srna, "start_cap", PROP_POINTER, PROP_NONE);
3785 RNA_def_property_ui_text(prop, "Start Cap", "Mesh object to use as a start cap");
3787 prop, nullptr, "rna_ArrayModifier_start_cap_set", nullptr, "rna_Mesh_object_poll");
3789 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3790
3791 prop = RNA_def_property(srna, "end_cap", PROP_POINTER, PROP_NONE);
3792 RNA_def_property_ui_text(prop, "End Cap", "Mesh object to use as an end cap");
3794 prop, nullptr, "rna_ArrayModifier_end_cap_set", nullptr, "rna_Mesh_object_poll");
3796 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3797
3798 prop = RNA_def_property(srna, "offset_u", PROP_FLOAT, PROP_FACTOR);
3799 RNA_def_property_float_sdna(prop, nullptr, "uv_offset[0]");
3800 RNA_def_property_range(prop, -1, 1);
3801 RNA_def_property_ui_range(prop, -1, 1, 2, 4);
3802 RNA_def_property_ui_text(prop, "U Offset", "Amount to offset array UVs on the U axis");
3803 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3804
3805 prop = RNA_def_property(srna, "offset_v", PROP_FLOAT, PROP_FACTOR);
3806 RNA_def_property_float_sdna(prop, nullptr, "uv_offset[1]");
3807 RNA_def_property_range(prop, -1, 1);
3808 RNA_def_property_ui_range(prop, -1, 1, 2, 4);
3809 RNA_def_property_ui_text(prop, "V Offset", "Amount to offset array UVs on the V axis");
3810 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3811
3813}
3814
3816{
3817 StructRNA *srna;
3818 PropertyRNA *prop;
3819
3820 srna = RNA_def_struct(brna, "EdgeSplitModifier", "Modifier");
3822 srna, "EdgeSplit Modifier", "Edge splitting modifier to create sharp edges");
3823 RNA_def_struct_sdna(srna, "EdgeSplitModifierData");
3824 RNA_def_struct_ui_icon(srna, ICON_MOD_EDGESPLIT);
3825
3827
3828 prop = RNA_def_property(srna, "split_angle", PROP_FLOAT, PROP_ANGLE);
3829 RNA_def_property_range(prop, 0.0f, DEG2RADF(180.0f));
3830 RNA_def_property_ui_range(prop, 0.0f, DEG2RADF(180.0f), 10, 2);
3831 RNA_def_property_ui_text(prop, "Split Angle", "Angle above which to split edges");
3832 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3833
3834 prop = RNA_def_property(srna, "use_edge_angle", PROP_BOOLEAN, PROP_NONE);
3836 RNA_def_property_ui_text(prop, "Use Edge Angle", "Split edges with high angle between faces");
3837 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3838
3839 prop = RNA_def_property(srna, "use_edge_sharp", PROP_BOOLEAN, PROP_NONE);
3841 RNA_def_property_ui_text(prop, "Use Sharp Edges", "Split edges that are marked as sharp");
3842 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3843
3845}
3846
3848{
3849 StructRNA *srna;
3850 PropertyRNA *prop;
3851
3852 static const EnumPropertyItem prop_direction_items[] = {
3854 "X",
3855 0,
3856 "X",
3857 "Use the texture's intensity value to displace in the X direction"},
3859 "Y",
3860 0,
3861 "Y",
3862 "Use the texture's intensity value to displace in the Y direction"},
3864 "Z",
3865 0,
3866 "Z",
3867 "Use the texture's intensity value to displace in the Z direction"},
3869 "NORMAL",
3870 0,
3871 "Normal",
3872 "Use the texture's intensity value to displace along the vertex normal"},
3874 "CUSTOM_NORMAL",
3875 0,
3876 "Custom Normal",
3877 "Use the texture's intensity value to displace along the (averaged) custom normal (falls "
3878 "back to vertex)"},
3880 "RGB_TO_XYZ",
3881 0,
3882 "RGB to XYZ",
3883 "Use the texture's RGB values to displace the mesh in the XYZ direction"},
3884 {0, nullptr, 0, nullptr, nullptr},
3885 };
3886
3887 static const EnumPropertyItem prop_space_items[] = {
3888 {MOD_DISP_SPACE_LOCAL, "LOCAL", 0, "Local", "Direction is defined in local coordinates"},
3889 {MOD_DISP_SPACE_GLOBAL, "GLOBAL", 0, "Global", "Direction is defined in global coordinates"},
3890 {0, nullptr, 0, nullptr, nullptr},
3891 };
3892
3893 srna = RNA_def_struct(brna, "DisplaceModifier", "Modifier");
3894 RNA_def_struct_ui_text(srna, "Displace Modifier", "Displacement modifier");
3895 RNA_def_struct_sdna(srna, "DisplaceModifierData");
3896 RNA_def_struct_ui_icon(srna, ICON_MOD_DISPLACE);
3897
3899
3900 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
3901 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
3903 prop,
3904 "Vertex Group",
3905 "Name of Vertex Group which determines influence of modifier per point");
3906 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_DisplaceModifier_defgrp_name_set");
3907 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3908
3909 prop = RNA_def_property(srna, "mid_level", PROP_FLOAT, PROP_FACTOR);
3910 RNA_def_property_float_sdna(prop, nullptr, "midlevel");
3912 RNA_def_property_ui_range(prop, 0, 1, 10, 3);
3913 RNA_def_property_ui_text(prop, "Midlevel", "Material value that gives no displacement");
3914 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3915
3916 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
3918 RNA_def_property_ui_range(prop, -100, 100, 10, 3);
3919 RNA_def_property_ui_text(prop, "Strength", "Amount to displace geometry");
3921 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3922
3923 prop = RNA_def_property(srna, "direction", PROP_ENUM, PROP_NONE);
3925 RNA_def_property_ui_text(prop, "Direction", "");
3926 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3927
3928 prop = RNA_def_property(srna, "space", PROP_ENUM, PROP_NONE);
3929 RNA_def_property_enum_items(prop, prop_space_items);
3930 RNA_def_property_ui_text(prop, "Space", "");
3931 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
3932
3933 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
3935 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
3936 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3937
3939
3941}
3942
3944{
3945 StructRNA *srna;
3946 PropertyRNA *prop;
3947
3948 srna = RNA_def_struct(brna, "UVProjectModifier", "Modifier");
3950 srna, "UV Project Modifier", "UV projection modifier to set UVs from a projector");
3951 RNA_def_struct_sdna(srna, "UVProjectModifierData");
3952 RNA_def_struct_ui_icon(srna, ICON_MOD_UVPROJECT);
3953
3955
3956 prop = RNA_def_property(srna, "uv_layer", PROP_STRING, PROP_NONE);
3957 RNA_def_property_string_sdna(prop, nullptr, "uvlayer_name");
3958 RNA_def_property_ui_text(prop, "UV Map", "UV map name");
3959 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_UVProjectModifier_uvlayer_name_set");
3960 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3961
3962 prop = RNA_def_property(srna, "projector_count", PROP_INT, PROP_NONE);
3963 RNA_def_property_int_sdna(prop, nullptr, "projectors_num");
3964 RNA_def_property_ui_text(prop, "Number of Projectors", "Number of projectors to use");
3965 RNA_def_property_int_funcs(prop, nullptr, "rna_UVProjectModifier_num_projectors_set", nullptr);
3967 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3968
3969 prop = RNA_def_property(srna, "projectors", PROP_COLLECTION, PROP_NONE);
3970 RNA_def_property_struct_type(prop, "UVProjector");
3972 "rna_UVProject_projectors_begin",
3973 "rna_iterator_array_next",
3974 "rna_iterator_array_end",
3975 "rna_iterator_array_get",
3976 nullptr,
3977 nullptr,
3978 nullptr,
3979 nullptr);
3980 RNA_def_property_ui_text(prop, "Projectors", "");
3981
3982 prop = RNA_def_property(srna, "aspect_x", PROP_FLOAT, PROP_NONE);
3983 RNA_def_property_float_sdna(prop, nullptr, "aspectx");
3986 RNA_def_property_ui_range(prop, 1, 1000, 1, 3);
3988 prop, "Aspect X", "Horizontal aspect ratio (only used for camera projectors)");
3989 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3990
3991 prop = RNA_def_property(srna, "aspect_y", PROP_FLOAT, PROP_NONE);
3992 RNA_def_property_float_sdna(prop, nullptr, "aspecty");
3995 RNA_def_property_ui_range(prop, 1, 1000, 1, 3);
3997 prop, "Aspect Y", "Vertical aspect ratio (only used for camera projectors)");
3998 RNA_def_property_update(prop, 0, "rna_Modifier_update");
3999
4000 prop = RNA_def_property(srna, "scale_x", PROP_FLOAT, PROP_NONE);
4001 RNA_def_property_float_sdna(prop, nullptr, "scalex");
4004 RNA_def_property_ui_range(prop, 0, 1000, 1, 3);
4005 RNA_def_property_ui_text(prop, "Scale X", "Horizontal scale (only used for camera projectors)");
4006 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4007
4008 prop = RNA_def_property(srna, "scale_y", PROP_FLOAT, PROP_NONE);
4009 RNA_def_property_float_sdna(prop, nullptr, "scaley");
4012 RNA_def_property_ui_range(prop, 0, 1000, 1, 3);
4013 RNA_def_property_ui_text(prop, "Scale Y", "Vertical scale (only used for camera projectors)");
4014 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4015
4016 srna = RNA_def_struct(brna, "UVProjector", nullptr);
4017 RNA_def_struct_ui_text(srna, "UVProjector", "UV projector used by the UV project modifier");
4018
4019 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
4020 RNA_def_property_struct_type(prop, "Object");
4022 prop, "rna_UVProjector_object_get", "rna_UVProjector_object_set", nullptr, nullptr);
4024 RNA_def_property_ui_text(prop, "Object", "Object to use as projector transform");
4025 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
4026
4028}
4029
4031{
4032 StructRNA *srna;
4033 PropertyRNA *prop;
4034
4035 srna = RNA_def_struct(brna, "SmoothModifier", "Modifier");
4036 RNA_def_struct_ui_text(srna, "Smooth Modifier", "Smoothing effect modifier");
4037 RNA_def_struct_sdna(srna, "SmoothModifierData");
4038 RNA_def_struct_ui_icon(srna, ICON_MOD_SMOOTH);
4039
4041
4042 prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
4043 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_SMOOTH_X);
4044 RNA_def_property_ui_text(prop, "X", "Smooth object along X axis");
4045 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4046
4047 prop = RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
4048 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_SMOOTH_Y);
4049 RNA_def_property_ui_text(prop, "Y", "Smooth object along Y axis");
4050 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4051
4052 prop = RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
4053 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_SMOOTH_Z);
4054 RNA_def_property_ui_text(prop, "Z", "Smooth object along Z axis");
4055 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4056
4057 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR);
4058 RNA_def_property_float_sdna(prop, nullptr, "fac");
4060 RNA_def_property_ui_range(prop, -10, 10, 1, 3);
4061 RNA_def_property_ui_text(prop, "Factor", "Strength of modifier effect");
4062 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4063
4064 prop = RNA_def_property(srna, "iterations", PROP_INT, PROP_UNSIGNED);
4065 RNA_def_property_int_sdna(prop, nullptr, "repeat");
4066 RNA_def_property_ui_range(prop, 0, 30, 1, -1);
4067 RNA_def_property_ui_text(prop, "Repeat", "");
4068 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4069
4070 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
4071 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
4073 prop,
4074 "Vertex Group",
4075 "Name of Vertex Group which determines influence of modifier per point");
4076 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_SmoothModifier_defgrp_name_set");
4077 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4078
4079 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
4081 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
4082 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4083
4085}
4086
4088{
4089 StructRNA *srna;
4090 PropertyRNA *prop;
4091
4092 static const EnumPropertyItem modifier_smooth_type_items[] = {
4094 "SIMPLE",
4095 0,
4096 "Simple",
4097 "Use the average of adjacent edge-vertices"},
4099 "LENGTH_WEIGHTED",
4100 0,
4101 "Length Weight",
4102 "Use the average of adjacent edge-vertices weighted by their length"},
4103 {0, nullptr, 0, nullptr, nullptr},
4104 };
4105
4106 static const EnumPropertyItem modifier_rest_source_items[] = {
4108 "ORCO",
4109 0,
4110 "Original Coords",
4111 "Use base mesh vertex coordinates as the rest position"},
4113 "BIND",
4114 0,
4115 "Bind Coords",
4116 "Use bind vertex coordinates for rest position"},
4117 {0, nullptr, 0, nullptr, nullptr},
4118 };
4119
4120 srna = RNA_def_struct(brna, "CorrectiveSmoothModifier", "Modifier");
4122 srna, "Corrective Smooth Modifier", "Correct distortion caused by deformation");
4123 RNA_def_struct_sdna(srna, "CorrectiveSmoothModifierData");
4124 RNA_def_struct_ui_icon(srna, ICON_MOD_SMOOTH);
4125
4127
4128 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR);
4129 RNA_def_property_float_sdna(prop, nullptr, "lambda");
4131 RNA_def_property_ui_range(prop, 0.0, 1.0, 5, 3);
4132 RNA_def_property_ui_text(prop, "Lambda Factor", "Smooth effect factor");
4133 RNA_def_property_update(prop, 0, "rna_CorrectiveSmoothModifier_update");
4134
4135 prop = RNA_def_property(srna, "iterations", PROP_INT, PROP_UNSIGNED);
4136 RNA_def_property_int_sdna(prop, nullptr, "repeat");
4137 RNA_def_property_ui_range(prop, 0, 200, 1, -1);
4138 RNA_def_property_ui_text(prop, "Repeat", "");
4139 RNA_def_property_update(prop, 0, "rna_CorrectiveSmoothModifier_update");
4140
4141 prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_FACTOR);
4142 RNA_def_property_float_sdna(prop, nullptr, "scale");
4144 RNA_def_property_ui_range(prop, 0.0, 10.0, 5, 3);
4145 RNA_def_property_ui_text(prop, "Scale", "Compensate for scale applied by other modifiers");
4146 RNA_def_property_update(prop, 0, "rna_CorrectiveSmoothModifier_update");
4147
4148 prop = RNA_def_property(srna, "rest_source", PROP_ENUM, PROP_NONE);
4149 RNA_def_property_enum_sdna(prop, nullptr, "rest_source");
4150 RNA_def_property_enum_items(prop, modifier_rest_source_items);
4151 RNA_def_property_ui_text(prop, "Rest Source", "Select the source of rest positions");
4152 RNA_def_property_update(prop, 0, "rna_CorrectiveSmoothModifier_rest_source_update");
4153
4154 prop = RNA_def_property(srna, "smooth_type", PROP_ENUM, PROP_NONE);
4155 RNA_def_property_enum_sdna(prop, nullptr, "smooth_type");
4156 RNA_def_property_enum_items(prop, modifier_smooth_type_items);
4157 RNA_def_property_ui_text(prop, "Smooth Type", "Method used for smoothing");
4158 RNA_def_property_update(prop, 0, "rna_CorrectiveSmoothModifier_update");
4159
4160 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
4162 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
4163 RNA_def_property_update(prop, 0, "rna_CorrectiveSmoothModifier_update");
4164
4165 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
4166 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
4168 prop,
4169 "Vertex Group",
4170 "Name of Vertex Group which determines influence of modifier per point");
4172 prop, nullptr, nullptr, "rna_CorrectiveSmoothModifier_defgrp_name_set");
4173 RNA_def_property_update(prop, 0, "rna_CorrectiveSmoothModifier_update");
4174
4175 prop = RNA_def_property(srna, "is_bind", PROP_BOOLEAN, PROP_NONE);
4176 RNA_def_property_ui_text(prop, "Bind current shape", "");
4177 RNA_def_property_boolean_funcs(prop, "rna_CorrectiveSmoothModifier_is_bind_get", nullptr);
4179 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4180
4181 prop = RNA_def_property(srna, "use_only_smooth", PROP_BOOLEAN, PROP_NONE);
4184 prop, "Only Smooth", "Apply smoothing without reconstructing the surface");
4185 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4186
4187 prop = RNA_def_property(srna, "use_pin_boundary", PROP_BOOLEAN, PROP_NONE);
4190 prop, "Pin Boundaries", "Excludes boundary vertices from being smoothed");
4191 RNA_def_property_update(prop, 0, "rna_CorrectiveSmoothModifier_update");
4192
4194}
4195
4197{
4198 StructRNA *srna;
4199 PropertyRNA *prop;
4200
4201 srna = RNA_def_struct(brna, "LaplacianSmoothModifier", "Modifier");
4202 RNA_def_struct_ui_text(srna, "Laplacian Smooth Modifier", "Smoothing effect modifier");
4203 RNA_def_struct_sdna(srna, "LaplacianSmoothModifierData");
4204 RNA_def_struct_ui_icon(srna, ICON_MOD_SMOOTH);
4205
4207
4208 prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
4210 RNA_def_property_ui_text(prop, "X", "Smooth object along X axis");
4211 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4212
4213 prop = RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
4215 RNA_def_property_ui_text(prop, "Y", "Smooth object along Y axis");
4216 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4217
4218 prop = RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
4220 RNA_def_property_ui_text(prop, "Z", "Smooth object along Z axis");
4221 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4222
4223 prop = RNA_def_property(srna, "use_volume_preserve", PROP_BOOLEAN, PROP_NONE);
4225 RNA_def_property_ui_text(prop, "Preserve Volume", "Apply volume preservation after smooth");
4226 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4227
4228 prop = RNA_def_property(srna, "use_normalized", PROP_BOOLEAN, PROP_NONE);
4230 RNA_def_property_ui_text(prop, "Normalized", "Improve and stabilize the enhanced shape");
4231 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4232
4233 prop = RNA_def_property(srna, "lambda_factor", PROP_FLOAT, PROP_NONE);
4234 RNA_def_property_float_sdna(prop, nullptr, "lambda");
4236 RNA_def_property_ui_range(prop, -1000.0, 1000.0, 5, 3);
4237 RNA_def_property_ui_text(prop, "Lambda Factor", "Smooth effect factor");
4238 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4239
4240 prop = RNA_def_property(srna, "lambda_border", PROP_FLOAT, PROP_NONE);
4241 RNA_def_property_float_sdna(prop, nullptr, "lambda_border");
4243 RNA_def_property_ui_range(prop, -1000.0, 1000.0, 5, 3);
4244 RNA_def_property_ui_text(prop, "Lambda Border", "Lambda factor in border");
4245 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4246
4247 prop = RNA_def_property(srna, "iterations", PROP_INT, PROP_UNSIGNED);
4248 RNA_def_property_int_sdna(prop, nullptr, "repeat");
4249 RNA_def_property_ui_range(prop, 0, 200, 1, -1);
4250 RNA_def_property_ui_text(prop, "Repeat", "");
4251 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4252
4253 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
4254 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
4256 prop,
4257 "Vertex Group",
4258 "Name of Vertex Group which determines influence of modifier per point");
4260 prop, nullptr, nullptr, "rna_LaplacianSmoothModifier_defgrp_name_set");
4261 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4262
4263 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
4265 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
4266 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4267
4269}
4270
4272{
4273 StructRNA *srna;
4274 PropertyRNA *prop;
4275
4276 static const EnumPropertyItem prop_cast_type_items[] = {
4277 {MOD_CAST_TYPE_SPHERE, "SPHERE", 0, "Sphere", ""},
4278 {MOD_CAST_TYPE_CYLINDER, "CYLINDER", 0, "Cylinder", ""},
4279 {MOD_CAST_TYPE_CUBOID, "CUBOID", 0, "Cuboid", ""},
4280 {0, nullptr, 0, nullptr, nullptr},
4281 };
4282
4283 srna = RNA_def_struct(brna, "CastModifier", "Modifier");
4284 RNA_def_struct_ui_text(srna, "Cast Modifier", "Modifier to cast to other shapes");
4285 RNA_def_struct_sdna(srna, "CastModifierData");
4286 RNA_def_struct_ui_icon(srna, ICON_MOD_CAST);
4287
4289
4290 prop = RNA_def_property(srna, "cast_type", PROP_ENUM, PROP_NONE);
4291 RNA_def_property_enum_sdna(prop, nullptr, "type");
4292 RNA_def_property_enum_items(prop, prop_cast_type_items);
4293 RNA_def_property_ui_text(prop, "Shape", "Target object shape");
4294 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4295
4296 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
4298 prop,
4299 "Object",
4300 "Control object: if available, its location determines the center of the effect");
4301 RNA_def_property_pointer_funcs(prop, nullptr, "rna_CastModifier_object_set", nullptr, nullptr);
4303 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
4304
4305 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
4307 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
4308 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4309
4310 prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
4311 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_CAST_X);
4312 RNA_def_property_ui_text(prop, "X", "");
4313 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4314
4315 prop = RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
4316 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_CAST_Y);
4317 RNA_def_property_ui_text(prop, "Y", "");
4318 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4319
4320 prop = RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
4321 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_CAST_Z);
4322 RNA_def_property_ui_text(prop, "Z", "");
4323 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4324
4325 prop = RNA_def_property(srna, "use_radius_as_size", PROP_BOOLEAN, PROP_NONE);
4328 prop, "Size from Radius", "Use radius as size of projection shape (0 = auto)");
4329 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4330
4331 prop = RNA_def_property(srna, "use_transform", PROP_BOOLEAN, PROP_NONE);
4334 prop, "Use Transform", "Use object transform to control projection shape");
4335 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4336
4337 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR);
4338 RNA_def_property_float_sdna(prop, nullptr, "fac");
4340 RNA_def_property_ui_range(prop, -10, 10, 5, 2);
4341 RNA_def_property_ui_text(prop, "Factor", "");
4342 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4343
4344 prop = RNA_def_property(srna, "radius", PROP_FLOAT, PROP_DISTANCE);
4346 RNA_def_property_ui_range(prop, 0, 100, 5, 2);
4348 prop,
4349 "Radius",
4350 "Only deform vertices within this distance from the center of the effect "
4351 "(leave as 0 for infinite.)");
4352 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4353
4354 prop = RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE);
4356 RNA_def_property_ui_range(prop, 0, 100, 5, 2);
4357 RNA_def_property_ui_text(prop, "Size", "Size of projection shape (leave as 0 for auto)");
4358 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4359
4360 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
4361 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
4362 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
4363 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_CastModifier_defgrp_name_set");
4364 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4365
4367}
4368
4370{
4371 StructRNA *srna;
4372 PropertyRNA *prop;
4373# if 0
4374 static const EnumPropertyItem prop_mode_items[] = {
4375 {0, "VOLUME", 0, "Volume", "Bind to volume inside cage mesh"},
4376 {1, "SURFACE", 0, "Surface", "Bind to surface of cage mesh"},
4377 {0, nullptr, 0, nullptr, nullptr},
4378 };
4379# endif
4380
4381 srna = RNA_def_struct(brna, "MeshDeformModifier", "Modifier");
4383 srna, "MeshDeform Modifier", "Mesh deformation modifier to deform with other meshes");
4384 RNA_def_struct_sdna(srna, "MeshDeformModifierData");
4385 RNA_def_struct_ui_icon(srna, ICON_MOD_MESHDEFORM);
4386
4388
4389 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
4390 RNA_def_property_ui_text(prop, "Object", "Mesh object to deform with");
4392 prop, nullptr, "rna_MeshDeformModifier_object_set", nullptr, "rna_Mesh_object_poll");
4394 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
4395
4396 prop = RNA_def_property(srna, "is_bound", PROP_BOOLEAN, PROP_NONE);
4397 RNA_def_property_boolean_funcs(prop, "rna_MeshDeformModifier_is_bound_get", nullptr);
4398 RNA_def_property_ui_text(prop, "Bound", "Whether geometry has been bound to control cage");
4400
4401 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
4403 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
4404 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4405
4406 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
4407 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
4408 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
4409 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_MeshDeformModifier_defgrp_name_set");
4410 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4411
4412 prop = RNA_def_property(srna, "precision", PROP_INT, PROP_NONE);
4413 RNA_def_property_int_sdna(prop, nullptr, "gridsize");
4414 RNA_def_property_range(prop, 2, 10);
4415 RNA_def_property_ui_text(prop, "Precision", "The grid size for binding");
4416 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4417
4418 prop = RNA_def_property(srna, "use_dynamic_bind", PROP_BOOLEAN, PROP_NONE);
4421 "Dynamic",
4422 "Recompute binding dynamically on top of other deformers "
4423 "(slower and more memory consuming)");
4424 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4425
4426# if 0
4427 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
4428 RNA_def_property_enum_items(prop, prop_mode_items);
4429 RNA_def_property_ui_text(prop, "Mode", "Method of binding vertices are bound to cage mesh");
4430 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4431# endif
4432
4434}
4435
4437{
4438 StructRNA *srna;
4439 PropertyRNA *prop;
4440
4441 srna = RNA_def_struct(brna, "ParticleSystemModifier", "Modifier");
4442 RNA_def_struct_ui_text(srna, "ParticleSystem Modifier", "Particle system simulation modifier");
4443 RNA_def_struct_sdna(srna, "ParticleSystemModifierData");
4444 RNA_def_struct_ui_icon(srna, ICON_MOD_PARTICLES);
4445
4447
4448 prop = RNA_def_property(srna, "particle_system", PROP_POINTER, PROP_NONE);
4450 RNA_def_property_pointer_sdna(prop, nullptr, "psys");
4451 RNA_def_property_ui_text(prop, "Particle System", "Particle System that this modifier controls");
4452
4454}
4455
4457{
4458 StructRNA *srna;
4459 PropertyRNA *prop;
4460
4461 static EnumPropertyItem particleinstance_space[] = {
4463 "LOCAL",
4464 0,
4465 "Local",
4466 "Use offset from the particle object in the instance object"},
4468 "WORLD",
4469 0,
4470 "World",
4471 "Use world space offset in the instance object"},
4472 {0, nullptr, 0, nullptr, nullptr},
4473 };
4474
4475 srna = RNA_def_struct(brna, "ParticleInstanceModifier", "Modifier");
4476 RNA_def_struct_ui_text(srna, "ParticleInstance Modifier", "Particle system instancing modifier");
4477 RNA_def_struct_sdna(srna, "ParticleInstanceModifierData");
4478 RNA_def_struct_ui_icon(srna, ICON_MOD_PARTICLES);
4479
4481
4482 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
4483 RNA_def_property_pointer_sdna(prop, nullptr, "ob");
4484 RNA_def_property_pointer_funcs(prop, nullptr, nullptr, nullptr, "rna_Mesh_object_poll");
4485 RNA_def_property_ui_text(prop, "Object", "Object that has the particle system");
4487 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
4488
4489 prop = RNA_def_property(srna, "particle_system_index", PROP_INT, PROP_NONE);
4490 RNA_def_property_int_sdna(prop, nullptr, "psys");
4491 RNA_def_property_range(prop, 1, SHRT_MAX);
4492 RNA_def_property_ui_text(prop, "Particle System Number", "");
4493 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4494
4495 prop = RNA_def_property(srna, "particle_system", PROP_POINTER, PROP_NONE);
4496 RNA_def_property_struct_type(prop, "ParticleSystem");
4498 "rna_ParticleInstanceModifier_particle_system_get",
4499 "rna_ParticleInstanceModifier_particle_system_set",
4500 nullptr,
4501 "rna_ParticleInstanceModifier_particle_system_poll");
4503 RNA_def_property_ui_text(prop, "Particle System", "");
4504 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4505
4506 prop = RNA_def_property(srna, "axis", PROP_ENUM, PROP_NONE);
4507 RNA_def_property_enum_sdna(prop, nullptr, "axis");
4509 RNA_def_property_ui_text(prop, "Axis", "Pole axis for rotation");
4510 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4511
4512 prop = RNA_def_property(srna, "space", PROP_ENUM, PROP_NONE);
4513 RNA_def_property_enum_sdna(prop, nullptr, "space");
4514 RNA_def_property_enum_items(prop, particleinstance_space);
4515 RNA_def_property_ui_text(prop, "Space", "Space to use for copying mesh data");
4516 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4517
4518 prop = RNA_def_property(srna, "use_normal", PROP_BOOLEAN, PROP_NONE);
4520 RNA_def_property_ui_text(prop, "Regular", "Create instances from normal particles");
4521 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4522
4523 prop = RNA_def_property(srna, "use_children", PROP_BOOLEAN, PROP_NONE);
4525 RNA_def_property_ui_text(prop, "Children", "Create instances from child particles");
4527 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4528
4529 prop = RNA_def_property(srna, "use_path", PROP_BOOLEAN, PROP_NONE);
4531 RNA_def_property_ui_text(prop, "Path", "Create instances along particle paths");
4532 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4533
4534 prop = RNA_def_property(srna, "show_unborn", PROP_BOOLEAN, PROP_NONE);
4536 RNA_def_property_ui_text(prop, "Unborn", "Show instances when particles are unborn");
4537 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4538
4539 prop = RNA_def_property(srna, "show_alive", PROP_BOOLEAN, PROP_NONE);
4541 RNA_def_property_ui_text(prop, "Alive", "Show instances when particles are alive");
4542 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4543
4544 prop = RNA_def_property(srna, "show_dead", PROP_BOOLEAN, PROP_NONE);
4546 RNA_def_property_ui_text(prop, "Dead", "Show instances when particles are dead");
4547 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4548
4549 prop = RNA_def_property(srna, "use_preserve_shape", PROP_BOOLEAN, PROP_NONE);
4551 RNA_def_property_ui_text(prop, "Keep Shape", "Don't stretch the object");
4552 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4553
4554 prop = RNA_def_property(srna, "use_size", PROP_BOOLEAN, PROP_NONE);
4556 RNA_def_property_ui_text(prop, "Size", "Use particle size to scale the instances");
4557 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4558
4559 prop = RNA_def_property(srna, "position", PROP_FLOAT, PROP_NONE);
4560 RNA_def_property_float_sdna(prop, nullptr, "position");
4561 RNA_def_property_range(prop, 0.0, 1.0);
4562 RNA_def_property_ui_text(prop, "Position", "Position along path");
4563 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4564
4565 prop = RNA_def_property(srna, "random_position", PROP_FLOAT, PROP_NONE);
4566 RNA_def_property_float_sdna(prop, nullptr, "random_position");
4567 RNA_def_property_range(prop, 0.0, 1.0);
4568 RNA_def_property_ui_text(prop, "Random Position", "Randomize position along path");
4569 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4570
4571 prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_FACTOR);
4572 RNA_def_property_float_sdna(prop, nullptr, "rotation");
4573 RNA_def_property_range(prop, 0.0, 1.0);
4574 RNA_def_property_ui_text(prop, "Rotation", "Rotation around path");
4575 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4576
4577 prop = RNA_def_property(srna, "random_rotation", PROP_FLOAT, PROP_FACTOR);
4578 RNA_def_property_float_sdna(prop, nullptr, "random_rotation");
4579 RNA_def_property_range(prop, 0.0, 1.0);
4580 RNA_def_property_ui_text(prop, "Random Rotation", "Randomize rotation around path");
4581 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4582
4583 prop = RNA_def_property(srna, "particle_amount", PROP_FLOAT, PROP_FACTOR);
4584 RNA_def_property_range(prop, 0.0, 1.0);
4585 RNA_def_property_ui_text(prop, "Particle Amount", "Amount of particles to use for instancing");
4586 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4587
4588 prop = RNA_def_property(srna, "particle_offset", PROP_FLOAT, PROP_FACTOR);
4589 RNA_def_property_range(prop, 0.0, 1.0);
4591 "Particle Offset",
4592 "Relative offset of particles to use for instancing, to avoid overlap "
4593 "of multiple instances");
4594 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4595
4596 prop = RNA_def_property(srna, "index_layer_name", PROP_STRING, PROP_NONE);
4597 RNA_def_property_string_sdna(prop, nullptr, "index_layer_name");
4598 RNA_def_property_ui_text(prop, "Index Layer Name", "Custom data layer name for the index");
4599 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4600
4601 prop = RNA_def_property(srna, "value_layer_name", PROP_STRING, PROP_NONE);
4602 RNA_def_property_string_sdna(prop, nullptr, "value_layer_name");
4604 prop, "Value Layer Name", "Custom data layer name for the randomized value");
4605 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4606
4608}
4609
4611{
4612 StructRNA *srna;
4613 PropertyRNA *prop;
4614
4615 srna = RNA_def_struct(brna, "ExplodeModifier", "Modifier");
4617 srna, "Explode Modifier", "Explosion effect modifier based on a particle system");
4618 RNA_def_struct_sdna(srna, "ExplodeModifierData");
4619 RNA_def_struct_ui_icon(srna, ICON_MOD_EXPLODE);
4620
4622
4623 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
4625 "rna_ExplodeModifier_vgroup_get",
4626 "rna_ExplodeModifier_vgroup_length",
4627 "rna_ExplodeModifier_vgroup_set");
4628 RNA_def_property_ui_text(prop, "Vertex Group", "");
4629
4630 prop = RNA_def_property(srna, "protect", PROP_FLOAT, PROP_NONE);
4631 RNA_def_property_range(prop, 0, 1);
4632 RNA_def_property_ui_text(prop, "Protect", "Clean vertex group edges");
4633 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4634
4635 prop = RNA_def_property(srna, "use_edge_cut", PROP_BOOLEAN, PROP_NONE);
4637 RNA_def_property_ui_text(prop, "Cut Edges", "Cut face edges for nicer shrapnel");
4638 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4639
4640 prop = RNA_def_property(srna, "show_unborn", PROP_BOOLEAN, PROP_NONE);
4641 RNA_def_property_boolean_sdna(prop, nullptr, "flag", eExplodeFlag_Unborn);
4642 RNA_def_property_ui_text(prop, "Unborn", "Show mesh when particles are unborn");
4643 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4644
4645 prop = RNA_def_property(srna, "show_alive", PROP_BOOLEAN, PROP_NONE);
4646 RNA_def_property_boolean_sdna(prop, nullptr, "flag", eExplodeFlag_Alive);
4647 RNA_def_property_ui_text(prop, "Alive", "Show mesh when particles are alive");
4648 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4649
4650 prop = RNA_def_property(srna, "show_dead", PROP_BOOLEAN, PROP_NONE);
4651 RNA_def_property_boolean_sdna(prop, nullptr, "flag", eExplodeFlag_Dead);
4652 RNA_def_property_ui_text(prop, "Dead", "Show mesh when particles are dead");
4653 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4654
4655 prop = RNA_def_property(srna, "use_size", PROP_BOOLEAN, PROP_NONE);
4656 RNA_def_property_boolean_sdna(prop, nullptr, "flag", eExplodeFlag_PaSize);
4657 RNA_def_property_ui_text(prop, "Size", "Use particle size for the shrapnel");
4658 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4659
4660 prop = RNA_def_property(srna, "particle_uv", PROP_STRING, PROP_NONE);
4661 RNA_def_property_string_sdna(prop, nullptr, "uvname");
4663 RNA_def_property_ui_text(prop, "Particle UV", "UV map to change with particle age");
4664 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4665
4666 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
4668 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
4669 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4670
4672}
4673
4675{
4676 StructRNA *srna;
4677 PropertyRNA *prop;
4678
4679 srna = RNA_def_struct(brna, "ClothModifier", "Modifier");
4680 RNA_def_struct_ui_text(srna, "Cloth Modifier", "Cloth simulation modifier");
4681 RNA_def_struct_sdna(srna, "ClothModifierData");
4682 RNA_def_struct_ui_icon(srna, ICON_MOD_CLOTH);
4683
4685
4686 prop = RNA_def_property(srna, "settings", PROP_POINTER, PROP_NONE);
4688 RNA_def_property_pointer_sdna(prop, nullptr, "sim_parms");
4689 RNA_def_property_ui_text(prop, "Cloth Settings", "");
4690
4691 prop = RNA_def_property(srna, "collision_settings", PROP_POINTER, PROP_NONE);
4693 RNA_def_property_pointer_sdna(prop, nullptr, "coll_parms");
4694 RNA_def_property_ui_text(prop, "Cloth Collision Settings", "");
4695
4696 prop = RNA_def_property(srna, "solver_result", PROP_POINTER, PROP_NONE);
4697 RNA_def_property_struct_type(prop, "ClothSolverResult");
4698 RNA_def_property_pointer_sdna(prop, nullptr, "solver_result");
4699 RNA_def_property_ui_text(prop, "Solver Result", "");
4700
4701 prop = RNA_def_property(srna, "point_cache", PROP_POINTER, PROP_NONE);
4703 RNA_def_property_ui_text(prop, "Point Cache", "");
4704
4705 prop = RNA_def_property(srna, "hair_grid_min", PROP_FLOAT, PROP_NONE);
4706 RNA_def_property_float_sdna(prop, nullptr, "hair_grid_min");
4708 RNA_def_property_ui_text(prop, "Hair Grid Minimum", "");
4709
4710 prop = RNA_def_property(srna, "hair_grid_max", PROP_FLOAT, PROP_NONE);
4711 RNA_def_property_float_sdna(prop, nullptr, "hair_grid_max");
4713 RNA_def_property_ui_text(prop, "Hair Grid Maximum", "");
4714
4715 prop = RNA_def_property(srna, "hair_grid_resolution", PROP_INT, PROP_NONE);
4716 RNA_def_property_int_sdna(prop, nullptr, "hair_grid_res");
4718 RNA_def_property_ui_text(prop, "Hair Grid Resolution", "");
4719
4721}
4722
4724{
4725 StructRNA *srna;
4726 PropertyRNA *prop;
4727
4728 static const EnumPropertyItem prop_fluid_type_items[] = {
4729 {0, "NONE", 0, "None", ""},
4730 {MOD_FLUID_TYPE_DOMAIN, "DOMAIN", 0, "Domain", "Container of the fluid simulation"},
4731 {MOD_FLUID_TYPE_FLOW, "FLOW", 0, "Flow", "Add or remove fluid to a domain object"},
4733 "EFFECTOR",
4734 0,
4735 "Effector",
4736 "Deflect fluids and influence the fluid flow"},
4737 {0, nullptr, 0, nullptr, nullptr},
4738 };
4739
4740 srna = RNA_def_struct(brna, "FluidModifier", "Modifier");
4741 RNA_def_struct_ui_text(srna, "Fluid Modifier", "Fluid simulation modifier");
4742 RNA_def_struct_sdna(srna, "FluidModifierData");
4743 RNA_def_struct_ui_icon(srna, ICON_MOD_FLUIDSIM);
4744
4746
4747 prop = RNA_def_property(srna, "domain_settings", PROP_POINTER, PROP_NONE);
4748 RNA_def_property_pointer_sdna(prop, nullptr, "domain");
4749 RNA_def_property_ui_text(prop, "Domain Settings", "");
4750
4751 prop = RNA_def_property(srna, "flow_settings", PROP_POINTER, PROP_NONE);
4752 RNA_def_property_pointer_sdna(prop, nullptr, "flow");
4753 RNA_def_property_ui_text(prop, "Flow Settings", "");
4754
4755 prop = RNA_def_property(srna, "effector_settings", PROP_POINTER, PROP_NONE);
4756 RNA_def_property_pointer_sdna(prop, nullptr, "effector");
4757 RNA_def_property_ui_text(prop, "Effector Settings", "");
4758
4759 prop = RNA_def_property(srna, "fluid_type", PROP_ENUM, PROP_NONE);
4760 RNA_def_property_enum_sdna(prop, nullptr, "type");
4761 RNA_def_property_enum_items(prop, prop_fluid_type_items);
4762 RNA_def_property_ui_text(prop, "Type", "");
4764 RNA_def_property_update(prop, 0, "rna_fluid_set_type");
4765
4767}
4768
4770{
4771 StructRNA *srna;
4772 PropertyRNA *prop;
4773
4774 srna = RNA_def_struct(brna, "DynamicPaintModifier", "Modifier");
4775 RNA_def_struct_ui_text(srna, "Dynamic Paint Modifier", "Dynamic Paint modifier");
4776 RNA_def_struct_sdna(srna, "DynamicPaintModifierData");
4777 RNA_def_struct_ui_icon(srna, ICON_MOD_DYNAMICPAINT);
4778
4780
4781 prop = RNA_def_property(srna, "canvas_settings", PROP_POINTER, PROP_NONE);
4782 RNA_def_property_pointer_sdna(prop, nullptr, "canvas");
4783 RNA_def_property_ui_text(prop, "Canvas Settings", "");
4784
4785 prop = RNA_def_property(srna, "brush_settings", PROP_POINTER, PROP_NONE);
4786 RNA_def_property_pointer_sdna(prop, nullptr, "brush");
4787 RNA_def_property_ui_text(prop, "Brush Settings", "");
4788
4789 prop = RNA_def_property(srna, "ui_type", PROP_ENUM, PROP_NONE);
4791 RNA_def_property_enum_sdna(prop, nullptr, "type");
4794 RNA_def_property_ui_text(prop, "Type", "");
4795
4797}
4798
4800{
4801 StructRNA *srna;
4802 PropertyRNA *prop;
4803
4804 srna = RNA_def_struct(brna, "CollisionModifier", "Modifier");
4806 "Collision Modifier",
4807 "Collision modifier defining modifier stack position used for collision");
4808 RNA_def_struct_sdna(srna, "CollisionModifierData");
4809 RNA_def_struct_ui_icon(srna, ICON_MOD_PHYSICS);
4810
4812
4813 prop = RNA_def_property(srna, "settings", PROP_POINTER, PROP_NONE);
4815 RNA_def_property_struct_type(prop, "CollisionSettings");
4817 prop, "rna_CollisionModifier_settings_get", nullptr, nullptr, nullptr);
4818 RNA_def_property_ui_text(prop, "Settings", "");
4819
4821}
4822
4824{
4825 StructRNA *srna;
4826 PropertyRNA *prop;
4827
4828 static const EnumPropertyItem prop_limit_method_items[] = {
4829 {0, "NONE", 0, "None", "Bevel the entire mesh by a constant amount"},
4831 "ANGLE",
4832 0,
4833 "Angle",
4834 "Only bevel edges with sharp enough angles between faces"},
4836 "WEIGHT",
4837 0,
4838 "Weight",
4839 "Use bevel weights to determine how much bevel is applied in edge mode"},
4841 "VGROUP",
4842 0,
4843 "Vertex Group",
4844 "Use vertex group weights to select whether vertex or edge is beveled"},
4845 {0, nullptr, 0, nullptr, nullptr},
4846 };
4847
4848 static const EnumPropertyItem prop_val_type_items[] = {
4849 {MOD_BEVEL_AMT_OFFSET, "OFFSET", 0, "Offset", "Amount is offset of new edges from original"},
4850 {MOD_BEVEL_AMT_WIDTH, "WIDTH", 0, "Width", "Amount is width of new face"},
4852 "DEPTH",
4853 0,
4854 "Depth",
4855 "Amount is perpendicular distance from original edge to bevel face"},
4857 "PERCENT",
4858 0,
4859 "Percent",
4860 "Amount is percent of adjacent edge length"},
4862 "ABSOLUTE",
4863 0,
4864 "Absolute",
4865 "Amount is absolute distance along adjacent edge"},
4866 {0, nullptr, 0, nullptr, nullptr},
4867 };
4868
4869 static const EnumPropertyItem prop_profile_type_items[] = {
4871 "SUPERELLIPSE",
4872 0,
4873 "Superellipse",
4874 "The profile can be a concave or convex curve"},
4876 "CUSTOM",
4877 0,
4878 "Custom",
4879 "The profile can be any arbitrary path between its endpoints"},
4880 {0, nullptr, 0, nullptr, nullptr},
4881 };
4882
4883 static EnumPropertyItem prop_harden_normals_items[] = {
4884 {MOD_BEVEL_FACE_STRENGTH_NONE, "FSTR_NONE", 0, "None", "Do not set face strength"},
4885 {MOD_BEVEL_FACE_STRENGTH_NEW, "FSTR_NEW", 0, "New", "Set face strength on new faces only"},
4887 "FSTR_AFFECTED",
4888 0,
4889 "Affected",
4890 "Set face strength on new and affected faces only"},
4891 {MOD_BEVEL_FACE_STRENGTH_ALL, "FSTR_ALL", 0, "All", "Set face strength on all faces"},
4892 {0, nullptr, 0, nullptr, nullptr},
4893 };
4894
4895 static const EnumPropertyItem prop_miter_outer_items[] = {
4896 {MOD_BEVEL_MITER_SHARP, "MITER_SHARP", 0, "Sharp", "Outside of miter is sharp"},
4897 {MOD_BEVEL_MITER_PATCH, "MITER_PATCH", 0, "Patch", "Outside of miter is squared-off patch"},
4898 {MOD_BEVEL_MITER_ARC, "MITER_ARC", 0, "Arc", "Outside of miter is arc"},
4899 {0, nullptr, 0, nullptr, nullptr},
4900 };
4901
4902 static const EnumPropertyItem prop_miter_inner_items[] = {
4903 {MOD_BEVEL_MITER_SHARP, "MITER_SHARP", 0, "Sharp", "Inside of miter is sharp"},
4904 {MOD_BEVEL_MITER_ARC, "MITER_ARC", 0, "Arc", "Inside of miter is arc"},
4905 {0, nullptr, 0, nullptr, nullptr},
4906 };
4907
4908 static EnumPropertyItem prop_vmesh_method_items[] = {
4909 {MOD_BEVEL_VMESH_ADJ, "ADJ", 0, "Grid Fill", "Default patterned fill"},
4911 "CUTOFF",
4912 0,
4913 "Cutoff",
4914 "A cut-off at the end of each profile before the intersection"},
4915 {0, nullptr, 0, nullptr, nullptr},
4916 };
4917
4918 static const EnumPropertyItem prop_affect_items[] = {
4919 {MOD_BEVEL_AFFECT_VERTICES, "VERTICES", 0, "Vertices", "Affect only vertices"},
4920 {MOD_BEVEL_AFFECT_EDGES, "EDGES", 0, "Edges", "Affect only edges"},
4921 {0, nullptr, 0, nullptr, nullptr},
4922 };
4923
4924 srna = RNA_def_struct(brna, "BevelModifier", "Modifier");
4926 srna, "Bevel Modifier", "Bevel modifier to make edges and vertices more rounded");
4927 RNA_def_struct_sdna(srna, "BevelModifierData");
4928 RNA_def_struct_ui_icon(srna, ICON_MOD_BEVEL);
4929
4931
4932 prop = RNA_def_property(srna, "width", PROP_FLOAT, PROP_DISTANCE);
4933 RNA_def_property_float_sdna(prop, nullptr, "value");
4935 RNA_def_property_ui_range(prop, 0.0f, 100.0f, 0.1, 4);
4936 RNA_def_property_ui_text(prop, "Width", "Bevel amount");
4937 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4938
4939 prop = RNA_def_property(srna, "width_pct", PROP_FLOAT, PROP_PERCENTAGE);
4940 RNA_def_property_float_sdna(prop, nullptr, "value");
4942 RNA_def_property_ui_range(prop, 0.0f, 100.0f, 5.0, 2);
4943 RNA_def_property_ui_text(prop, "Width Percent", "Bevel amount for percentage method");
4944 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4945
4946 prop = RNA_def_property(srna, "segments", PROP_INT, PROP_NONE);
4947 RNA_def_property_int_sdna(prop, nullptr, "res");
4948 RNA_def_property_range(prop, 1, 1000);
4949 RNA_def_property_ui_range(prop, 1, 100, 1, -1);
4950 RNA_def_property_ui_text(prop, "Segments", "Number of segments for round edges/verts");
4951 RNA_def_property_update(prop, 0, "rna_BevelModifier_update_segments");
4952
4953 prop = RNA_def_property(srna, "affect", PROP_ENUM, PROP_NONE); /* as an enum */
4954 RNA_def_property_enum_sdna(prop, nullptr, "affect_type");
4955 RNA_def_property_enum_items(prop, prop_affect_items);
4956 RNA_def_property_ui_text(prop, "Affect", "Affect edges or vertices");
4957 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4958
4959 prop = RNA_def_property(srna, "limit_method", PROP_ENUM, PROP_NONE);
4960 RNA_def_property_enum_sdna(prop, nullptr, "lim_flags");
4961 RNA_def_property_enum_items(prop, prop_limit_method_items);
4962 RNA_def_property_ui_text(prop, "Limit Method", "");
4963 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4964
4965 prop = RNA_def_property(srna, "edge_weight", PROP_STRING, PROP_NONE);
4966 RNA_def_property_string_sdna(prop, nullptr, "edge_weight_name");
4967 RNA_def_property_ui_text(prop, "Edge Weight", "Attribute name for edge weight");
4969 prop, "rna_BevelModifier_weight_attribute_visit_for_search", PROP_STRING_SEARCH_SUGGESTION);
4970 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4971
4972 prop = RNA_def_property(srna, "vertex_weight", PROP_STRING, PROP_NONE);
4973 RNA_def_property_string_sdna(prop, nullptr, "vertex_weight_name");
4974 RNA_def_property_ui_text(prop, "Vertex Weight", "Attribute name for vertex weight");
4976 prop, "rna_BevelModifier_weight_attribute_visit_for_search", PROP_STRING_SEARCH_SUGGESTION);
4977 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4978
4979 prop = RNA_def_property(srna, "angle_limit", PROP_FLOAT, PROP_ANGLE);
4980 RNA_def_property_float_sdna(prop, nullptr, "bevel_angle");
4981 RNA_def_property_range(prop, 0.0f, DEG2RADF(180.0f));
4982 RNA_def_property_ui_range(prop, 0.0f, DEG2RADF(180.0f), 10, 4);
4983 RNA_def_property_ui_text(prop, "Angle", "Angle above which to bevel edges");
4984 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4985
4986 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
4987 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
4988 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
4989 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_BevelModifier_defgrp_name_set");
4990 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4991
4992 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
4994 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
4995 RNA_def_property_update(prop, 0, "rna_Modifier_update");
4996
4997 prop = RNA_def_property(srna, "use_clamp_overlap", PROP_BOOLEAN, PROP_NONE);
4999 RNA_def_property_ui_text(prop, "Clamp Overlap", "Clamp the width to avoid overlap");
5000 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5001
5002 prop = RNA_def_property(srna, "offset_type", PROP_ENUM, PROP_NONE);
5003 RNA_def_property_enum_sdna(prop, nullptr, "val_flags");
5004 RNA_def_property_enum_items(prop, prop_val_type_items);
5005 RNA_def_property_ui_text(prop, "Width Type", "What distance Width measures");
5006 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5007
5008 prop = RNA_def_property(srna, "profile_type", PROP_ENUM, PROP_NONE);
5009 RNA_def_property_enum_sdna(prop, nullptr, "profile_type");
5010 RNA_def_property_enum_items(prop, prop_profile_type_items);
5012 prop, "Profile Type", "The type of shape used to rebuild a beveled section");
5013 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5014
5015 prop = RNA_def_property(srna, "profile", PROP_FLOAT, PROP_FACTOR);
5016 RNA_def_property_range(prop, 0.0f, 1.0f);
5017 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.05, 2);
5018 RNA_def_property_ui_text(prop, "Profile", "The profile shape (0.5 = round)");
5019 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5020
5021 prop = RNA_def_property(srna, "material", PROP_INT, PROP_NONE);
5022 RNA_def_property_int_sdna(prop, nullptr, "mat");
5023 RNA_def_property_range(prop, -1, SHRT_MAX);
5025 prop, "Material Index", "Material index of generated faces, -1 for automatic");
5026 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5027
5028 prop = RNA_def_property(srna, "loop_slide", PROP_BOOLEAN, PROP_NONE);
5030 RNA_def_property_ui_text(prop, "Loop Slide", "Prefer sliding along edges to having even widths");
5031 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5032
5033 prop = RNA_def_property(srna, "mark_seam", PROP_BOOLEAN, PROP_NONE);
5034 RNA_def_property_boolean_sdna(prop, nullptr, "edge_flags", MOD_BEVEL_MARK_SEAM);
5035 RNA_def_property_ui_text(prop, "Mark Seams", "Mark Seams along beveled edges");
5036 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5037
5038 prop = RNA_def_property(srna, "mark_sharp", PROP_BOOLEAN, PROP_NONE);
5039 RNA_def_property_boolean_sdna(prop, nullptr, "edge_flags", MOD_BEVEL_MARK_SHARP);
5040 RNA_def_property_ui_text(prop, "Mark Sharp", "Mark beveled edges as sharp");
5041 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5042
5043 prop = RNA_def_property(srna, "harden_normals", PROP_BOOLEAN, PROP_NONE);
5045 RNA_def_property_ui_text(prop, "Harden Normals", "Match normals of new faces to adjacent faces");
5046 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5047
5048 prop = RNA_def_property(srna, "face_strength_mode", PROP_ENUM, PROP_NONE);
5049 RNA_def_property_enum_sdna(prop, nullptr, "face_str_mode");
5050 RNA_def_property_enum_items(prop, prop_harden_normals_items);
5052 prop, "Face Strength", "Whether to set face strength, and which faces to set it on");
5053 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5054
5055 prop = RNA_def_property(srna, "miter_outer", PROP_ENUM, PROP_NONE);
5056 RNA_def_property_enum_sdna(prop, nullptr, "miter_outer");
5057 RNA_def_property_enum_items(prop, prop_miter_outer_items);
5058 RNA_def_property_ui_text(prop, "Outer Miter", "Pattern to use for outside of miters");
5059 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5060
5061 prop = RNA_def_property(srna, "miter_inner", PROP_ENUM, PROP_NONE);
5062 RNA_def_property_enum_sdna(prop, nullptr, "miter_inner");
5063 RNA_def_property_enum_items(prop, prop_miter_inner_items);
5064 RNA_def_property_ui_text(prop, "Inner Miter", "Pattern to use for inside of miters");
5065 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5066
5067 prop = RNA_def_property(srna, "spread", PROP_FLOAT, PROP_DISTANCE);
5068 RNA_def_property_float_sdna(prop, nullptr, "spread");
5070 RNA_def_property_ui_range(prop, 0.0f, 100.0f, 0.1, 4);
5071 RNA_def_property_ui_text(prop, "Spread", "Spread distance for inner miter arcs");
5072 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5073
5074 prop = RNA_def_property(srna, "custom_profile", PROP_POINTER, PROP_NONE);
5075 RNA_def_property_struct_type(prop, "CurveProfile");
5076 RNA_def_property_pointer_sdna(prop, nullptr, "custom_profile");
5077 RNA_def_property_ui_text(prop, "Custom Profile Path", "The path for the custom profile");
5078 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5079
5080 prop = RNA_def_property(srna, "vmesh_method", PROP_ENUM, PROP_NONE);
5081 RNA_def_property_enum_sdna(prop, nullptr, "vmesh_method");
5082 RNA_def_property_enum_items(prop, prop_vmesh_method_items);
5084 prop, "Vertex Mesh Method", "The method to use to create the mesh at intersections");
5085 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5086
5088}
5089
5091{
5092 StructRNA *srna;
5093 PropertyRNA *prop;
5094
5095 srna = RNA_def_struct(brna, "ShrinkwrapModifier", "Modifier");
5097 "Shrinkwrap Modifier",
5098 "Shrink wrapping modifier to shrink wrap and object to a target");
5099 RNA_def_struct_sdna(srna, "ShrinkwrapModifierData");
5100 RNA_def_struct_ui_icon(srna, ICON_MOD_SHRINKWRAP);
5101
5103
5104 prop = RNA_def_property(srna, "wrap_method", PROP_ENUM, PROP_NONE);
5105 RNA_def_property_enum_sdna(prop, nullptr, "shrinkType");
5107 RNA_def_property_ui_text(prop, "Wrap Method", "");
5108 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5109
5110 prop = RNA_def_property(srna, "wrap_mode", PROP_ENUM, PROP_NONE);
5111 RNA_def_property_enum_sdna(prop, nullptr, "shrinkMode");
5114 prop, "Snap Mode", "Select how vertices are constrained to the target surface");
5115 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5116
5117 prop = RNA_def_property(srna, "cull_face", PROP_ENUM, PROP_NONE);
5118 RNA_def_property_enum_sdna(prop, nullptr, "shrinkOpts");
5121 "rna_ShrinkwrapModifier_face_cull_get",
5122 "rna_ShrinkwrapModifier_face_cull_set",
5123 nullptr);
5125 prop,
5126 "Face Cull",
5127 "Stop vertices from projecting to a face on the target when facing towards/away");
5128 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5129
5130 prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
5131 RNA_def_property_ui_text(prop, "Target", "Mesh target to shrink to");
5133 prop, nullptr, "rna_ShrinkwrapModifier_target_set", nullptr, "rna_Mesh_object_poll");
5135 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5136
5137 prop = RNA_def_property(srna, "auxiliary_target", PROP_POINTER, PROP_NONE);
5138 RNA_def_property_pointer_sdna(prop, nullptr, "auxTarget");
5139 RNA_def_property_ui_text(prop, "Auxiliary Target", "Additional mesh target to shrink to");
5141 prop, nullptr, "rna_ShrinkwrapModifier_auxTarget_set", nullptr, "rna_Mesh_object_poll");
5143 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5144
5145 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
5146 RNA_def_property_string_sdna(prop, nullptr, "vgroup_name");
5147 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
5148 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_ShrinkwrapModifier_vgroup_name_set");
5149 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5150
5151 prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_DISTANCE);
5152 RNA_def_property_float_sdna(prop, nullptr, "keepDist");
5154 RNA_def_property_ui_range(prop, -100, 100, 1, 2);
5155 RNA_def_property_ui_text(prop, "Offset", "Distance to keep from the target");
5156 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5157
5158 prop = RNA_def_property(srna, "project_limit", PROP_FLOAT, PROP_DISTANCE);
5159 RNA_def_property_float_sdna(prop, nullptr, "projLimit");
5160 RNA_def_property_range(prop, 0.0, FLT_MAX);
5161 RNA_def_property_ui_range(prop, 0, 100, 1, 2);
5163 prop, "Project Limit", "Limit the distance used for projection (zero disables)");
5164 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5165
5166 prop = RNA_def_property(srna, "use_project_x", PROP_BOOLEAN, PROP_NONE);
5168 RNA_def_property_ui_text(prop, "X", "");
5169 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5170
5171 prop = RNA_def_property(srna, "use_project_y", PROP_BOOLEAN, PROP_NONE);
5173 RNA_def_property_ui_text(prop, "Y", "");
5174 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5175
5176 prop = RNA_def_property(srna, "use_project_z", PROP_BOOLEAN, PROP_NONE);
5178 RNA_def_property_ui_text(prop, "Z", "");
5179 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5180
5181 prop = RNA_def_property(srna, "subsurf_levels", PROP_INT, PROP_NONE);
5182 RNA_def_property_int_sdna(prop, nullptr, "subsurfLevels");
5183 RNA_def_property_range(prop, 0, 6);
5184 RNA_def_property_ui_range(prop, 0, 6, 1, -1);
5186 prop,
5187 "Subdivision Levels",
5188 "Number of subdivisions that must be performed before extracting vertices' "
5189 "positions and normals");
5190 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5191
5192 prop = RNA_def_property(srna, "use_negative_direction", PROP_BOOLEAN, PROP_NONE);
5195 prop, "Negative", "Allow vertices to move in the negative direction of axis");
5196 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5197
5198 prop = RNA_def_property(srna, "use_positive_direction", PROP_BOOLEAN, PROP_NONE);
5201 prop, "Positive", "Allow vertices to move in the positive direction of axis");
5202 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5203
5204 prop = RNA_def_property(srna, "use_invert_cull", PROP_BOOLEAN, PROP_NONE);
5207 prop, "Invert Cull", "When projecting in the negative direction invert the face cull mode");
5208 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5209
5210 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
5211 RNA_def_property_boolean_sdna(prop, nullptr, "shrinkOpts", MOD_SHRINKWRAP_INVERT_VGROUP);
5212 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
5213 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5214
5216}
5217
5219{
5220 StructRNA *srna;
5221 PropertyRNA *prop;
5222
5223 static const EnumPropertyItem modifier_mask_mode_items[] = {
5224 {MOD_MASK_MODE_VGROUP, "VERTEX_GROUP", 0, "Vertex Group", ""},
5225 {MOD_MASK_MODE_ARM, "ARMATURE", 0, "Armature", ""},
5226 {0, nullptr, 0, nullptr, nullptr},
5227 };
5228
5229 srna = RNA_def_struct(brna, "MaskModifier", "Modifier");
5230 RNA_def_struct_ui_text(srna, "Mask Modifier", "Mask modifier to hide parts of the mesh");
5231 RNA_def_struct_sdna(srna, "MaskModifierData");
5232 RNA_def_struct_ui_icon(srna, ICON_MOD_MASK);
5233
5235
5236 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
5237 RNA_def_property_enum_items(prop, modifier_mask_mode_items);
5238 RNA_def_property_ui_text(prop, "Mode", "");
5239 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5240
5241 prop = RNA_def_property(srna, "armature", PROP_POINTER, PROP_NONE);
5242 RNA_def_property_pointer_sdna(prop, nullptr, "ob_arm");
5243 RNA_def_property_ui_text(prop, "Armature", "Armature to use as source of bones to mask");
5245 prop, nullptr, "rna_MaskModifier_ob_arm_set", nullptr, "rna_Armature_object_poll");
5247 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5248
5249 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
5250 RNA_def_property_string_sdna(prop, nullptr, "vgroup");
5251 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
5252 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_MaskModifier_vgroup_set");
5253 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5254
5255 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
5256 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_MASK_INV);
5257 RNA_def_property_ui_text(prop, "Invert", "Use vertices that are not part of region defined");
5258 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5259
5260 prop = RNA_def_property(srna, "use_smooth", PROP_BOOLEAN, PROP_NONE);
5261 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_MASK_SMOOTH);
5263 prop, "Smooth", "Use vertex group weights to cut faces at the weight contour");
5264 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5265
5266 prop = RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_FACTOR);
5267 RNA_def_property_float_sdna(prop, nullptr, "threshold");
5268 RNA_def_property_range(prop, 0.0, 1.0);
5269 RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
5270 RNA_def_property_ui_text(prop, "Threshold", "Weights over this threshold remain");
5271 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5272
5274}
5275
5277{
5278 StructRNA *srna;
5279 PropertyRNA *prop;
5280
5281 static const EnumPropertyItem simple_deform_mode_items[] = {
5283 "TWIST",
5284 0,
5285 "Twist",
5286 "Rotate around the Z axis of the modifier space"},
5288 "BEND",
5289 0,
5290 "Bend",
5291 "Bend the mesh over the Z axis of the modifier space"},
5293 "TAPER",
5294 0,
5295 "Taper",
5296 "Linearly scale along Z axis of the modifier space"},
5298 "STRETCH",
5299 0,
5300 "Stretch",
5301 "Stretch the object along the Z axis of the modifier space"},
5302 {0, nullptr, 0, nullptr, nullptr},
5303 };
5304
5305 srna = RNA_def_struct(brna, "SimpleDeformModifier", "Modifier");
5307 srna,
5308 "SimpleDeform Modifier",
5309 "Simple deformation modifier to apply effects such as twisting and bending");
5310 RNA_def_struct_sdna(srna, "SimpleDeformModifierData");
5311 RNA_def_struct_ui_icon(srna, ICON_MOD_SIMPLEDEFORM);
5312
5314
5315 prop = RNA_def_property(srna, "deform_method", PROP_ENUM, PROP_NONE);
5316 RNA_def_property_enum_sdna(prop, nullptr, "mode");
5317 RNA_def_property_enum_items(prop, simple_deform_mode_items);
5318 RNA_def_property_ui_text(prop, "Mode", "");
5320 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5321
5322 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
5323 RNA_def_property_string_sdna(prop, nullptr, "vgroup_name");
5324 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
5326 prop, nullptr, nullptr, "rna_SimpleDeformModifier_vgroup_name_set");
5327 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5328
5329 prop = RNA_def_property(srna, "deform_axis", PROP_ENUM, PROP_NONE);
5331 RNA_def_property_ui_text(prop, "Axis", "Deform around local axis");
5332 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5333
5334 prop = RNA_def_property(srna, "origin", PROP_POINTER, PROP_NONE);
5335 RNA_def_property_ui_text(prop, "Origin", "Offset the origin and orientation of the deformation");
5337 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5338
5339 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
5341 RNA_def_property_ui_range(prop, -10.0, 10.0, 1.0, 3);
5342 RNA_def_property_ui_text(prop, "Factor", "Amount to deform object");
5343 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5344
5345 prop = RNA_def_property(srna, "angle", PROP_FLOAT, PROP_ANGLE);
5346 RNA_def_property_float_sdna(prop, nullptr, "factor");
5348 RNA_def_property_ui_range(prop, DEG2RAD(-360.0), DEG2RAD(360.0), 10.0, 3);
5349 RNA_def_property_ui_text(prop, "Angle", "Angle of deformation");
5350 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5351
5352 prop = RNA_def_property(srna, "limits", PROP_FLOAT, PROP_NONE);
5353 RNA_def_property_float_sdna(prop, nullptr, "limit");
5354 RNA_def_property_array(prop, 2);
5355 RNA_def_property_range(prop, 0, 1);
5356 RNA_def_property_ui_range(prop, 0, 1, 5, 2);
5357 RNA_def_property_ui_text(prop, "Limits", "Lower/Upper limits for deform");
5358 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5359
5360 prop = RNA_def_property(srna, "lock_x", PROP_BOOLEAN, PROP_NONE);
5362 RNA_def_property_ui_text(prop, "X", "Do not allow deformation along the X axis");
5363 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5364
5365 prop = RNA_def_property(srna, "lock_y", PROP_BOOLEAN, PROP_NONE);
5367 RNA_def_property_ui_text(prop, "Y", "Do not allow deformation along the Y axis");
5368 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5369
5370 prop = RNA_def_property(srna, "lock_z", PROP_BOOLEAN, PROP_NONE);
5372 RNA_def_property_ui_text(prop, "Z", "Do not allow deformation along the Z axis");
5373 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5374
5375 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
5377 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
5378 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5379
5381}
5382
5384{
5385 StructRNA *srna;
5386
5387 srna = RNA_def_struct(brna, "SurfaceModifier", "Modifier");
5389 srna,
5390 "Surface Modifier",
5391 "Surface modifier defining modifier stack position used for surface fields");
5392 RNA_def_struct_sdna(srna, "SurfaceModifierData");
5393 RNA_def_struct_ui_icon(srna, ICON_MOD_PHYSICS);
5394}
5395
5397{
5398 static const EnumPropertyItem mode_items[] = {
5400 "EXTRUDE",
5401 0,
5402 "Simple",
5403 "Output a solidified version of a mesh by simple extrusion"},
5405 "NON_MANIFOLD",
5406 0,
5407 "Complex",
5408 "Output a manifold mesh even if the base mesh is non-manifold, "
5409 "where edges have 3 or more connecting faces. "
5410 "This method is slower."},
5411 {0, nullptr, 0, nullptr, nullptr},
5412 };
5413
5414 static const EnumPropertyItem nonmanifold_thickness_mode_items[] = {
5416 "FIXED",
5417 0,
5418 "Fixed",
5419 "Most basic thickness calculation"},
5421 "EVEN",
5422 0,
5423 "Even",
5424 "Even thickness calculation which takes the angle between faces into account"},
5426 "CONSTRAINTS",
5427 0,
5428 "Constraints",
5429 "Thickness calculation using constraints, most advanced"},
5430 {0, nullptr, 0, nullptr, nullptr},
5431 };
5432
5433 static const EnumPropertyItem nonmanifold_boundary_mode_items[] = {
5434 {MOD_SOLIDIFY_NONMANIFOLD_BOUNDARY_MODE_NONE, "NONE", 0, "None", "No shape correction"},
5436 "ROUND",
5437 0,
5438 "Round",
5439 "Round open perimeter shape"},
5441 "FLAT",
5442 0,
5443 "Flat",
5444 "Flat open perimeter shape"},
5445 {0, nullptr, 0, nullptr, nullptr},
5446 };
5447
5448 StructRNA *srna;
5449 PropertyRNA *prop;
5450
5451 srna = RNA_def_struct(brna, "SolidifyModifier", "Modifier");
5453 srna, "Solidify Modifier", "Create a solid skin, compensating for sharp angles");
5454 RNA_def_struct_sdna(srna, "SolidifyModifierData");
5455 RNA_def_struct_ui_icon(srna, ICON_MOD_SOLIDIFY);
5456
5458
5459 prop = RNA_def_property(srna, "solidify_mode", PROP_ENUM, PROP_NONE);
5460 RNA_def_property_enum_sdna(prop, nullptr, "mode");
5461 RNA_def_property_enum_items(prop, mode_items);
5462 RNA_def_property_ui_text(prop, "Mode", "Selects the used algorithm");
5463 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5464
5465 prop = RNA_def_property(srna, "thickness", PROP_FLOAT, PROP_DISTANCE);
5466 RNA_def_property_float_sdna(prop, nullptr, "offset");
5468 RNA_def_property_ui_range(prop, -10, 10, 0.1, 4);
5469 RNA_def_property_ui_text(prop, "Thickness", "Thickness of the shell");
5470 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5471
5472 prop = RNA_def_property(srna, "thickness_clamp", PROP_FLOAT, PROP_FACTOR);
5473 RNA_def_property_float_sdna(prop, nullptr, "offset_clamp");
5474 RNA_def_property_range(prop, 0, 100.0);
5475 RNA_def_property_ui_range(prop, 0, 2.0, 0.1, 4);
5476 RNA_def_property_ui_text(prop, "Clamp", "Offset clamp based on geometry scale");
5477 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5478
5479 prop = RNA_def_property(srna, "use_thickness_angle_clamp", PROP_BOOLEAN, PROP_NONE);
5481 RNA_def_property_ui_text(prop, "Angle Clamp", "Clamp thickness based on angles");
5482 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5483
5484 prop = RNA_def_property(srna, "thickness_vertex_group", PROP_FLOAT, PROP_FACTOR);
5485 RNA_def_property_float_sdna(prop, nullptr, "offset_fac_vg");
5486 RNA_def_property_range(prop, 0.0, 1.0);
5487 RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
5489 prop, "Vertex Group Factor", "Thickness factor to use for zero vertex group influence");
5490 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5491
5492 prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_FACTOR);
5493 RNA_def_property_float_sdna(prop, nullptr, "offset_fac");
5495 RNA_def_property_ui_range(prop, -1, 1, 0.1, 4);
5496 RNA_def_property_ui_text(prop, "Offset", "Offset the thickness from the center");
5497 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5498
5499 prop = RNA_def_property(srna, "edge_crease_inner", PROP_FLOAT, PROP_FACTOR);
5500 RNA_def_property_float_sdna(prop, nullptr, "crease_inner");
5501 RNA_def_property_range(prop, 0, 1);
5502 RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
5503 RNA_def_property_ui_text(prop, "Inner Crease", "Assign a crease to inner edges");
5504 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5505
5506 prop = RNA_def_property(srna, "edge_crease_outer", PROP_FLOAT, PROP_FACTOR);
5507 RNA_def_property_float_sdna(prop, nullptr, "crease_outer");
5508 RNA_def_property_range(prop, 0, 1);
5509 RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
5510 RNA_def_property_ui_text(prop, "Outer Crease", "Assign a crease to outer edges");
5511 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5512
5513 prop = RNA_def_property(srna, "edge_crease_rim", PROP_FLOAT, PROP_FACTOR);
5514 RNA_def_property_float_sdna(prop, nullptr, "crease_rim");
5515 RNA_def_property_range(prop, 0, 1);
5516 RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
5517 RNA_def_property_ui_text(prop, "Rim Crease", "Assign a crease to the edges making up the rim");
5518 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5519
5520 prop = RNA_def_property(srna, "material_offset", PROP_INT, PROP_NONE);
5521 RNA_def_property_int_sdna(prop, nullptr, "mat_ofs");
5522 RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
5523 RNA_def_property_ui_text(prop, "Material Offset", "Offset material index of generated faces");
5524 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5525
5526 prop = RNA_def_property(srna, "material_offset_rim", PROP_INT, PROP_NONE);
5527 RNA_def_property_int_sdna(prop, nullptr, "mat_ofs_rim");
5528 RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
5530 prop, "Rim Material Offset", "Offset material index of generated rim faces");
5531 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5532
5533 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
5534 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
5535 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
5536 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_SolidifyModifier_defgrp_name_set");
5537 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5538
5539 prop = RNA_def_property(srna, "shell_vertex_group", PROP_STRING, PROP_NONE);
5540 RNA_def_property_string_sdna(prop, nullptr, "shell_defgrp_name");
5542 "Shell Vertex Group",
5543 "Vertex group that the generated shell geometry will be weighted to");
5545 prop, nullptr, nullptr, "rna_SolidifyModifier_shell_defgrp_name_set");
5546 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5547
5548 prop = RNA_def_property(srna, "rim_vertex_group", PROP_STRING, PROP_NONE);
5549 RNA_def_property_string_sdna(prop, nullptr, "rim_defgrp_name");
5551 "Rim Vertex Group",
5552 "Vertex group that the generated rim geometry will be weighted to");
5554 prop, nullptr, nullptr, "rna_SolidifyModifier_rim_defgrp_name_set");
5555 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5556
5557 prop = RNA_def_property(srna, "use_rim", PROP_BOOLEAN, PROP_NONE);
5558 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_SOLIDIFY_RIM);
5560 "Fill Rim",
5561 "Create edge loops between the inner and outer surfaces on face edges "
5562 "(slow, disable when not needed)");
5563 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5564
5565 prop = RNA_def_property(srna, "use_even_offset", PROP_BOOLEAN, PROP_NONE);
5566 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_SOLIDIFY_EVEN);
5568 prop,
5569 "Even Thickness",
5570 "Maintain thickness by adjusting for sharp corners (slow, disable when not needed)");
5571 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5572
5573 prop = RNA_def_property(srna, "use_quality_normals", PROP_BOOLEAN, PROP_NONE);
5576 prop,
5577 "High Quality Normals",
5578 "Calculate normals which result in more even thickness (slow, disable when not needed)");
5579 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5580
5581 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
5583 RNA_def_property_ui_text(prop, "Vertex Group Invert", "Invert the vertex group influence");
5584 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5585
5586 prop = RNA_def_property(srna, "use_flat_faces", PROP_BOOLEAN, PROP_NONE);
5589 "Flat Faces",
5590 "Make faces use the minimal vertex weight assigned to their vertices "
5591 "(ensures new faces remain parallel to their original ones, slow, "
5592 "disable when not needed)");
5593 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5594
5595 prop = RNA_def_property(srna, "use_flip_normals", PROP_BOOLEAN, PROP_NONE);
5596 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_SOLIDIFY_FLIP);
5597 RNA_def_property_ui_text(prop, "Flip Normals", "Invert the face direction");
5598 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5599
5600 prop = RNA_def_property(srna, "use_rim_only", PROP_BOOLEAN, PROP_NONE);
5602 RNA_def_property_ui_text(prop, "Only Rim", "Only add the rim to the original data");
5603 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5604
5605 /* Settings for #MOD_SOLIDIFY_MODE_NONMANIFOLD */
5606 prop = RNA_def_property(srna, "nonmanifold_thickness_mode", PROP_ENUM, PROP_NONE);
5607 RNA_def_property_enum_sdna(prop, nullptr, "nonmanifold_offset_mode");
5608 RNA_def_property_enum_items(prop, nonmanifold_thickness_mode_items);
5609 RNA_def_property_ui_text(prop, "Thickness Mode", "Selects the used thickness algorithm");
5610 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5611
5612 prop = RNA_def_property(srna, "nonmanifold_boundary_mode", PROP_ENUM, PROP_NONE);
5613 RNA_def_property_enum_items(prop, nonmanifold_boundary_mode_items);
5614 RNA_def_property_ui_text(prop, "Boundary Shape", "Selects the boundary adjustment algorithm");
5616 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5617
5618 prop = RNA_def_property(srna, "nonmanifold_merge_threshold", PROP_FLOAT, PROP_DISTANCE);
5619 RNA_def_property_float_sdna(prop, nullptr, "merge_tolerance");
5620 RNA_def_property_range(prop, 0.0, 1.0);
5621 RNA_def_property_ui_range(prop, 0.0, 1.0, 0.01, 4);
5623 prop, "Merge Threshold", "Distance within which degenerated geometry is merged");
5624 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5625
5626 prop = RNA_def_property(srna, "bevel_convex", PROP_FLOAT, PROP_NONE);
5627 RNA_def_property_float_sdna(prop, nullptr, "bevel_convex");
5628 RNA_def_property_range(prop, -1.0, 1.0);
5629 RNA_def_property_ui_range(prop, -1.0, 1.0, 0.1, 3);
5630 RNA_def_property_ui_text(prop, "Bevel Convex", "Edge bevel weight to be added to outside edges");
5631 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5632
5634}
5635
5637{
5638 StructRNA *srna;
5639 PropertyRNA *prop;
5640
5641 srna = RNA_def_struct(brna, "ScrewModifier", "Modifier");
5642 RNA_def_struct_ui_text(srna, "Screw Modifier", "Revolve edges");
5643 RNA_def_struct_sdna(srna, "ScrewModifierData");
5644 RNA_def_struct_ui_icon(srna, ICON_MOD_SCREW);
5645
5647
5648 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
5649 RNA_def_property_pointer_sdna(prop, nullptr, "ob_axis");
5650 RNA_def_property_ui_text(prop, "Object", "Object to define the screw axis");
5652 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5653
5654 prop = RNA_def_property(srna, "steps", PROP_INT, PROP_UNSIGNED);
5655 RNA_def_property_range(prop, 1, 10000);
5656 RNA_def_property_ui_range(prop, 1, 512, 1, -1);
5657 RNA_def_property_ui_text(prop, "Steps", "Number of steps in the revolution");
5658 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5659
5660 prop = RNA_def_property(srna, "render_steps", PROP_INT, PROP_UNSIGNED);
5661 RNA_def_property_range(prop, 1, 10000);
5662 RNA_def_property_ui_range(prop, 1, 512, 1, -1);
5663 RNA_def_property_ui_text(prop, "Render Steps", "Number of steps in the revolution");
5664 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5665
5666 prop = RNA_def_property(srna, "iterations", PROP_INT, PROP_UNSIGNED);
5667 RNA_def_property_int_sdna(prop, nullptr, "iter");
5668 RNA_def_property_range(prop, 1, 10000);
5669 RNA_def_property_ui_range(prop, 1, 100, 1, -1);
5670 RNA_def_property_ui_text(prop, "Iterations", "Number of times to apply the screw operation");
5671 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5672
5673 prop = RNA_def_property(srna, "axis", PROP_ENUM, PROP_NONE);
5675 RNA_def_property_ui_text(prop, "Axis", "Screw axis");
5676 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5677
5678 prop = RNA_def_property(srna, "angle", PROP_FLOAT, PROP_ANGLE);
5679 RNA_def_property_ui_range(prop, -M_PI * 2, M_PI * 2, 10, -1);
5681 RNA_def_property_ui_text(prop, "Angle", "Angle of revolution");
5682 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5683
5684 prop = RNA_def_property(srna, "screw_offset", PROP_FLOAT, PROP_DISTANCE);
5685 RNA_def_property_float_sdna(prop, nullptr, "screw_ofs");
5686 RNA_def_property_ui_text(prop, "Screw", "Offset the revolution along its axis");
5687 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5688
5689 prop = RNA_def_property(srna, "merge_threshold", PROP_FLOAT, PROP_DISTANCE);
5690 RNA_def_property_float_sdna(prop, nullptr, "merge_dist");
5692 RNA_def_property_ui_range(prop, 0, 1, 1, 4);
5693 RNA_def_property_ui_text(prop, "Merge Distance", "Limit below which to merge vertices");
5694 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5695
5696 prop = RNA_def_property(srna, "use_normal_flip", PROP_BOOLEAN, PROP_NONE);
5698 RNA_def_property_ui_text(prop, "Flip", "Flip normals of lathed faces");
5699 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5700
5701 prop = RNA_def_property(srna, "use_normal_calculate", PROP_BOOLEAN, PROP_NONE);
5704 prop, "Calculate Order", "Calculate the order of edges (needed for meshes, but not curves)");
5705 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5706
5707 prop = RNA_def_property(srna, "use_object_screw_offset", PROP_BOOLEAN, PROP_NONE);
5710 prop, "Object Screw", "Use the distance between the objects to make a screw");
5711 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5712
5713 /* Vertex merging parameters */
5714 prop = RNA_def_property(srna, "use_merge_vertices", PROP_BOOLEAN, PROP_NONE);
5715 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_SCREW_MERGE);
5717 prop, "Merge Vertices", "Merge adjacent vertices (screw offset must be zero)");
5718 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5719
5720 prop = RNA_def_property(srna, "use_smooth_shade", PROP_BOOLEAN, PROP_NONE);
5723 prop, "Smooth Shading", "Output faces with smooth shading rather than flat shaded");
5724 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5725
5726 prop = RNA_def_property(srna, "use_stretch_u", PROP_BOOLEAN, PROP_NONE);
5729 prop, "Stretch U", "Stretch the U coordinates between 0 and 1 when UVs are present");
5730 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5731
5732 prop = RNA_def_property(srna, "use_stretch_v", PROP_BOOLEAN, PROP_NONE);
5735 prop, "Stretch V", "Stretch the V coordinates between 0 and 1 when UVs are present");
5736 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5737
5738# if 0
5739 prop = RNA_def_property(srna, "use_angle_object", PROP_BOOLEAN, PROP_NONE);
5740 RNA_def_property_boolean_sdna(prop, nullptr, "flag", MOD_SCREW_OBJECT_ANGLE);
5742 prop, "Object Angle", "Use the angle between the objects rather than the fixed angle");
5743 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5744# endif
5745
5747}
5748
5750{
5751 StructRNA *srna;
5752 PropertyRNA *prop;
5753
5754 srna = RNA_def_struct(brna, "UVWarpModifier", "Modifier");
5755 RNA_def_struct_ui_text(srna, "UVWarp Modifier", "Add target position to UV coordinates");
5756 RNA_def_struct_sdna(srna, "UVWarpModifierData");
5757 RNA_def_struct_ui_icon(srna, ICON_MOD_UVPROJECT);
5758
5760
5761 prop = RNA_def_property(srna, "axis_u", PROP_ENUM, PROP_NONE);
5762 RNA_def_property_enum_sdna(prop, nullptr, "axis_u");
5764 RNA_def_property_ui_text(prop, "U-Axis", "Pole axis for rotation");
5765 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5766
5767 prop = RNA_def_property(srna, "axis_v", PROP_ENUM, PROP_NONE);
5768 RNA_def_property_enum_sdna(prop, nullptr, "axis_v");
5770 RNA_def_property_ui_text(prop, "V-Axis", "Pole axis for rotation");
5771 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5772
5773 prop = RNA_def_property(srna, "center", PROP_FLOAT, PROP_NONE);
5774 RNA_def_property_float_sdna(prop, nullptr, "center");
5775 RNA_def_property_ui_text(prop, "UV Center", "Center point for rotate/scale");
5776 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5777
5778 prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
5779 RNA_def_property_float_sdna(prop, nullptr, "offset");
5780 RNA_def_property_ui_text(prop, "Offset", "2D Offset for the warp");
5781 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5782
5783 prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_NONE);
5784 RNA_def_property_float_sdna(prop, nullptr, "scale");
5785 RNA_def_property_ui_text(prop, "Scale", "2D Scale for the warp");
5786 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5787
5788 prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_ANGLE);
5789 RNA_def_property_float_sdna(prop, nullptr, "rotation");
5790 RNA_def_property_ui_text(prop, "Rotation", "2D Rotation for the warp");
5791 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5792
5793 prop = RNA_def_property(srna, "object_from", PROP_POINTER, PROP_NONE);
5794 RNA_def_property_pointer_sdna(prop, nullptr, "object_src");
5795 RNA_def_property_ui_text(prop, "Object From", "Object defining offset");
5797 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5798
5799 prop = RNA_def_property(srna, "bone_from", PROP_STRING, PROP_NONE);
5800 RNA_def_property_string_sdna(prop, nullptr, "bone_src");
5801 RNA_def_property_ui_text(prop, "Bone From", "Bone defining offset");
5802 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5803
5804 prop = RNA_def_property(srna, "object_to", PROP_POINTER, PROP_NONE);
5805 RNA_def_property_pointer_sdna(prop, nullptr, "object_dst");
5806 RNA_def_property_ui_text(prop, "Object To", "Object defining offset");
5808 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5809
5810 prop = RNA_def_property(srna, "bone_to", PROP_STRING, PROP_NONE);
5811 RNA_def_property_string_sdna(prop, nullptr, "bone_dst");
5812 RNA_def_property_ui_text(prop, "Bone To", "Bone defining offset");
5813 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5814
5815 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
5816 RNA_def_property_string_sdna(prop, nullptr, "vgroup_name");
5817 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
5818 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_UVWarpModifier_vgroup_name_set");
5819 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5820
5821 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
5823 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
5824 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5825
5826 prop = RNA_def_property(srna, "uv_layer", PROP_STRING, PROP_NONE);
5827 RNA_def_property_string_sdna(prop, nullptr, "uvlayer_name");
5828 RNA_def_property_ui_text(prop, "UV Map", "UV map name");
5829 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_UVWarpModifier_uvlayer_name_set");
5830 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5831
5833}
5834
5836 StructRNA *srna,
5837 const char *mask_flags,
5838 const int invert_vgroup_mask_flag,
5839 const char *mask_vgroup_setter,
5840 const char *mask_uvlayer_setter)
5841{
5842 static const EnumPropertyItem weightvg_mask_tex_map_items[] = {
5843 {MOD_DISP_MAP_LOCAL, "LOCAL", 0, "Local", "Use local generated coordinates"},
5844 {MOD_DISP_MAP_GLOBAL, "GLOBAL", 0, "Global", "Use global coordinates"},
5846 "OBJECT",
5847 0,
5848 "Object",
5849 "Use local generated coordinates of another object"},
5850 {MOD_DISP_MAP_UV, "UV", 0, "UV", "Use coordinates from a UV layer"},
5851 {0, nullptr, 0, nullptr, nullptr},
5852 };
5853
5854 static const EnumPropertyItem weightvg_mask_tex_used_items[] = {
5855 {MOD_WVG_MASK_TEX_USE_INT, "INT", 0, "Intensity", ""},
5856 {MOD_WVG_MASK_TEX_USE_RED, "RED", 0, "Red", ""},
5857 {MOD_WVG_MASK_TEX_USE_GREEN, "GREEN", 0, "Green", ""},
5858 {MOD_WVG_MASK_TEX_USE_BLUE, "BLUE", 0, "Blue", ""},
5859 {MOD_WVG_MASK_TEX_USE_HUE, "HUE", 0, "Hue", ""},
5860 {MOD_WVG_MASK_TEX_USE_SAT, "SAT", 0, "Saturation", ""},
5861 {MOD_WVG_MASK_TEX_USE_VAL, "VAL", 0, "Value", ""},
5862 {MOD_WVG_MASK_TEX_USE_ALPHA, "ALPHA", 0, "Alpha", ""},
5863 {0, nullptr, 0, nullptr, nullptr},
5864 };
5865
5866 PropertyRNA *prop;
5867
5869
5870 prop = RNA_def_property(srna, "mask_constant", PROP_FLOAT, PROP_FACTOR);
5872 RNA_def_property_ui_range(prop, 0.0, 1.0, 1, -1);
5874 prop, "Influence", "Global influence of current modifications on vgroup");
5875 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5876
5877 prop = RNA_def_property(srna, "mask_vertex_group", PROP_STRING, PROP_NONE);
5878 RNA_def_property_string_sdna(prop, nullptr, "mask_defgrp_name");
5879 RNA_def_property_ui_text(prop, "Mask Vertex Group", "Masking vertex group name");
5880 RNA_def_property_string_funcs(prop, nullptr, nullptr, mask_vgroup_setter);
5881 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5882
5883 prop = RNA_def_property(srna, "invert_mask_vertex_group", PROP_BOOLEAN, PROP_NONE);
5884 RNA_def_property_boolean_sdna(prop, nullptr, mask_flags, invert_vgroup_mask_flag);
5885 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group mask influence");
5886 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5887
5888 prop = RNA_def_property(srna, "mask_texture", PROP_POINTER, PROP_NONE);
5889 RNA_def_property_ui_text(prop, "Masking Tex", "Masking texture");
5891 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5892
5893 prop = RNA_def_property(srna, "mask_tex_use_channel", PROP_ENUM, PROP_NONE);
5894 RNA_def_property_enum_items(prop, weightvg_mask_tex_used_items);
5895 RNA_def_property_ui_text(prop, "Use Channel", "Which texture channel to use for masking");
5896 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5897
5898 prop = RNA_def_property(srna, "mask_tex_mapping", PROP_ENUM, PROP_NONE);
5899 RNA_def_property_enum_items(prop, weightvg_mask_tex_map_items);
5901 "Texture Coordinates",
5902 "Which texture coordinates "
5903 "to use for mapping");
5904 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5905
5906 prop = RNA_def_property(srna, "mask_tex_uv_layer", PROP_STRING, PROP_NONE);
5907 RNA_def_property_string_sdna(prop, nullptr, "mask_tex_uvlayer_name");
5908 RNA_def_property_ui_text(prop, "UV Map", "UV map name");
5909 RNA_def_property_string_funcs(prop, nullptr, nullptr, mask_uvlayer_setter);
5910 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5911
5912 prop = RNA_def_property(srna, "mask_tex_map_object", PROP_POINTER, PROP_NONE);
5913 RNA_def_property_pointer_sdna(prop, nullptr, "mask_tex_map_obj");
5915 "Texture Coordinate Object",
5916 "Which object to take texture "
5917 "coordinates from");
5919 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5920
5921 prop = RNA_def_property(srna, "mask_tex_map_bone", PROP_STRING, PROP_NONE);
5922 RNA_def_property_string_sdna(prop, nullptr, "mask_tex_map_bone");
5924 prop, "Texture Coordinate Bone", "Which bone to take texture coordinates from");
5925 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
5926
5928}
5929
5931{
5932 static const EnumPropertyItem weightvg_edit_falloff_type_items[] = {
5933 {MOD_WVG_MAPPING_NONE, "LINEAR", ICON_LINCURVE, "Linear", "Null action"},
5934 {MOD_WVG_MAPPING_CURVE, "CURVE", ICON_RNDCURVE, "Custom Curve", ""},
5935 {MOD_WVG_MAPPING_SHARP, "SHARP", ICON_SHARPCURVE, "Sharp", ""},
5936 {MOD_WVG_MAPPING_SMOOTH, "SMOOTH", ICON_SMOOTHCURVE, "Smooth", ""},
5937 {MOD_WVG_MAPPING_ROOT, "ROOT", ICON_ROOTCURVE, "Root", ""},
5938 {MOD_WVG_MAPPING_SPHERE, "ICON_SPHERECURVE", ICON_SPHERECURVE, "Sphere", ""},
5939 {MOD_WVG_MAPPING_RANDOM, "RANDOM", ICON_RNDCURVE, "Random", ""},
5941 "STEP",
5942 ICON_IPO_CONSTANT,
5943 "Median Step",
5944 "Map all values below 0.5 to 0.0, and all others to 1.0"},
5945 {0, nullptr, 0, nullptr, nullptr},
5946 };
5947
5948 StructRNA *srna;
5949 PropertyRNA *prop;
5950
5951 srna = RNA_def_struct(brna, "VertexWeightEditModifier", "Modifier");
5953 srna, "WeightVG Edit Modifier", "Edit the weights of vertices in a group");
5954 RNA_def_struct_sdna(srna, "WeightVGEditModifierData");
5955 RNA_def_struct_ui_icon(srna, ICON_MOD_VERTEX_WEIGHT);
5956
5958
5959 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
5960 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
5961 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
5963 prop, nullptr, nullptr, "rna_WeightVGEditModifier_defgrp_name_set");
5964 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5965
5966 prop = RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);
5967 RNA_def_property_enum_items(prop, weightvg_edit_falloff_type_items);
5968 RNA_def_property_ui_text(prop, "Falloff Type", "How weights are mapped to their new values");
5970 BLT_I18NCONTEXT_ID_CURVE_LEGACY); /* Abusing id_curve :/ */
5971 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5972
5973 prop = RNA_def_property(srna, "invert_falloff", PROP_BOOLEAN, PROP_NONE);
5974 RNA_def_property_boolean_sdna(prop, nullptr, "edit_flags", MOD_WVG_INVERT_FALLOFF);
5975 RNA_def_property_ui_text(prop, "Invert Falloff", "Invert the resulting falloff weight");
5976 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5977
5978 prop = RNA_def_property(srna, "normalize", PROP_BOOLEAN, PROP_NONE);
5981 prop,
5982 "Normalize Weights",
5983 "Normalize the resulting weights (otherwise they are only clamped within 0.0 to 1.0 range)");
5984 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5985
5986 prop = RNA_def_property(srna, "map_curve", PROP_POINTER, PROP_NONE);
5987 RNA_def_property_pointer_sdna(prop, nullptr, "cmap_curve");
5988 RNA_def_property_ui_text(prop, "Mapping Curve", "Custom mapping curve");
5989 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5990
5991 prop = RNA_def_property(srna, "use_add", PROP_BOOLEAN, PROP_NONE);
5992 RNA_def_property_boolean_sdna(prop, nullptr, "edit_flags", MOD_WVG_EDIT_ADD2VG);
5994 "Group Add",
5995 "Add vertices with weight over threshold "
5996 "to vgroup");
5997 RNA_def_property_update(prop, 0, "rna_Modifier_update");
5998
5999 prop = RNA_def_property(srna, "use_remove", PROP_BOOLEAN, PROP_NONE);
6000 RNA_def_property_boolean_sdna(prop, nullptr, "edit_flags", MOD_WVG_EDIT_REMFVG);
6002 "Group Remove",
6003 "Remove vertices with weight below threshold "
6004 "from vgroup");
6005 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6006
6007 prop = RNA_def_property(srna, "default_weight", PROP_FLOAT, PROP_FACTOR);
6008 RNA_def_property_range(prop, 0.0, 1.0f);
6009 RNA_def_property_ui_range(prop, 0.0, 1.0, 1, -1);
6011 "Default Weight",
6012 "Default weight a vertex will have if "
6013 "it is not in the vgroup");
6014 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6015
6016 prop = RNA_def_property(srna, "add_threshold", PROP_FLOAT, PROP_NONE);
6017 RNA_def_property_float_sdna(prop, nullptr, "add_threshold");
6018 RNA_def_property_range(prop, -1000.0, 1000.0);
6019 RNA_def_property_ui_range(prop, 0.0, 1.0, 1, -1);
6021 "Add Threshold",
6022 "Lower (inclusive) bound for a vertex's weight "
6023 "to be added to the vgroup");
6024 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6025
6026 prop = RNA_def_property(srna, "remove_threshold", PROP_FLOAT, PROP_NONE);
6027 RNA_def_property_float_sdna(prop, nullptr, "rem_threshold");
6028 RNA_def_property_range(prop, -1000.0, 1000.0);
6029 RNA_def_property_ui_range(prop, 0.0, 1.0, 1, -1);
6031 "Remove Threshold",
6032 "Upper (inclusive) bound for a vertex's weight "
6033 "to be removed from the vgroup");
6034 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6035
6037
6038 /* Common masking properties. */
6040 srna,
6041 "edit_flags",
6043 "rna_WeightVGEditModifier_mask_defgrp_name_set",
6044 "rna_WeightVGEditModifier_mask_tex_uvlayer_name_set");
6045}
6046
6048{
6049 static const EnumPropertyItem weightvg_mix_modes_items[] = {
6050 {MOD_WVG_MIX_SET, "SET", 0, "Replace", "Replace VGroup A's weights by VGroup B's ones"},
6051 {MOD_WVG_MIX_ADD, "ADD", 0, "Add", "Add VGroup B's weights to VGroup A's ones"},
6052 {MOD_WVG_MIX_SUB, "SUB", 0, "Subtract", "Subtract VGroup B's weights from VGroup A's ones"},
6053 {MOD_WVG_MIX_MUL, "MUL", 0, "Multiply", "Multiply VGroup A's weights by VGroup B's ones"},
6054 {MOD_WVG_MIX_DIV, "DIV", 0, "Divide", "Divide VGroup A's weights by VGroup B's ones"},
6056 "DIF",
6057 0,
6058 "Difference",
6059 "Difference between VGroup A's and VGroup B's weights"},
6060 {MOD_WVG_MIX_AVG, "AVG", 0, "Average", "Average value of VGroup A's and VGroup B's weights"},
6061 {MOD_WVG_MIX_MIN, "MIN", 0, "Minimum", "Minimum of VGroup A's and VGroup B's weights"},
6062 {MOD_WVG_MIX_MAX, "MAX", 0, "Maximum", "Maximum of VGroup A's and VGroup B's weights"},
6063 {0, nullptr, 0, nullptr, nullptr},
6064 };
6065
6066 static const EnumPropertyItem weightvg_mix_set_items[] = {
6067 {MOD_WVG_SET_ALL, "ALL", 0, "All", "Affect all vertices (might add some to VGroup A)"},
6068 {MOD_WVG_SET_A, "A", 0, "VGroup A", "Affect vertices in VGroup A"},
6070 "B",
6071 0,
6072 "VGroup B",
6073 "Affect vertices in VGroup B (might add some to VGroup A)"},
6075 "OR",
6076 0,
6077 "VGroup A or B",
6078 "Affect vertices in at least one of both VGroups (might add some to VGroup A)"},
6079 {MOD_WVG_SET_AND, "AND", 0, "VGroup A and B", "Affect vertices in both groups"},
6080 {0, nullptr, 0, nullptr, nullptr},
6081 };
6082
6083 StructRNA *srna;
6084 PropertyRNA *prop;
6085
6086 srna = RNA_def_struct(brna, "VertexWeightMixModifier", "Modifier");
6087 RNA_def_struct_ui_text(srna, "WeightVG Mix Modifier", "Mix the weights of two vertex groups");
6088 RNA_def_struct_sdna(srna, "WeightVGMixModifierData");
6089 RNA_def_struct_ui_icon(srna, ICON_MOD_VERTEX_WEIGHT);
6090
6092
6093 prop = RNA_def_property(srna, "vertex_group_a", PROP_STRING, PROP_NONE);
6094 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name_a");
6095 RNA_def_property_ui_text(prop, "Vertex Group A", "First vertex group name");
6097 prop, nullptr, nullptr, "rna_WeightVGMixModifier_defgrp_name_a_set");
6098 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6099
6100 prop = RNA_def_property(srna, "vertex_group_b", PROP_STRING, PROP_NONE);
6101 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name_b");
6102 RNA_def_property_ui_text(prop, "Vertex Group B", "Second vertex group name");
6104 prop, nullptr, nullptr, "rna_WeightVGMixModifier_defgrp_name_b_set");
6105 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6106
6107 prop = RNA_def_property(srna, "invert_vertex_group_a", PROP_BOOLEAN, PROP_NONE);
6109 RNA_def_property_ui_text(prop, "Invert Weights A", "Invert the influence of vertex group A");
6110 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6111
6112 prop = RNA_def_property(srna, "invert_vertex_group_b", PROP_BOOLEAN, PROP_NONE);
6114 RNA_def_property_ui_text(prop, "Invert Weights B", "Invert the influence of vertex group B");
6115 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6116
6117 prop = RNA_def_property(srna, "default_weight_a", PROP_FLOAT, PROP_FACTOR);
6118 RNA_def_property_range(prop, 0.0, 1.0f);
6119 RNA_def_property_ui_range(prop, 0.0, 1.0, 1, -1);
6121 "Default Weight A",
6122 "Default weight a vertex will have if "
6123 "it is not in the first A vgroup");
6124 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6125
6126 prop = RNA_def_property(srna, "default_weight_b", PROP_FLOAT, PROP_FACTOR);
6127 RNA_def_property_range(prop, 0.0, 1.0f);
6128 RNA_def_property_ui_range(prop, 0.0, 1.0, 1, -1);
6130 "Default Weight B",
6131 "Default weight a vertex will have if "
6132 "it is not in the second B vgroup");
6133 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6134
6135 prop = RNA_def_property(srna, "mix_mode", PROP_ENUM, PROP_NONE);
6136 RNA_def_property_enum_items(prop, weightvg_mix_modes_items);
6138 "Mix Mode",
6139 "How weights from vgroup B affect weights "
6140 "of vgroup A");
6141 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6142
6143 prop = RNA_def_property(srna, "mix_set", PROP_ENUM, PROP_NONE);
6144 RNA_def_property_enum_items(prop, weightvg_mix_set_items);
6145 RNA_def_property_ui_text(prop, "Vertex Set", "Which vertices should be affected");
6146 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6147
6148 prop = RNA_def_property(srna, "normalize", PROP_BOOLEAN, PROP_NONE);
6151 prop,
6152 "Normalize Weights",
6153 "Normalize the resulting weights (otherwise they are only clamped within 0.0 to 1.0 range)");
6154 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6155
6157
6158 /* Common masking properties. */
6160 srna,
6161 "flag",
6163 "rna_WeightVGMixModifier_mask_defgrp_name_set",
6164 "rna_WeightVGMixModifier_mask_tex_uvlayer_name_set");
6165}
6166
6168{
6169 static const EnumPropertyItem weightvg_proximity_modes_items[] = {
6171 "OBJECT",
6172 0,
6173 "Object",
6174 "Use distance between affected and target objects"},
6176 "GEOMETRY",
6177 0,
6178 "Geometry",
6179 "Use distance between affected object's vertices and target "
6180 "object, or target object's geometry"},
6181 {0, nullptr, 0, nullptr, nullptr},
6182 };
6183
6184 static const EnumPropertyItem proximity_geometry_items[] = {
6185 {MOD_WVG_PROXIMITY_GEOM_VERTS, "VERTEX", 0, "Vertex", "Compute distance to nearest vertex"},
6186 {MOD_WVG_PROXIMITY_GEOM_EDGES, "EDGE", 0, "Edge", "Compute distance to nearest edge"},
6187 {MOD_WVG_PROXIMITY_GEOM_FACES, "FACE", 0, "Face", "Compute distance to nearest face"},
6188 {0, nullptr, 0, nullptr, nullptr},
6189 };
6190
6191 static const EnumPropertyItem weightvg_proximity_falloff_type_items[] = {
6192 {MOD_WVG_MAPPING_NONE, "LINEAR", ICON_LINCURVE, "Linear", "Null action"},
6193 {MOD_WVG_MAPPING_CURVE, "CURVE", ICON_RNDCURVE, "Custom Curve", ""},
6194 {MOD_WVG_MAPPING_SHARP, "SHARP", ICON_SHARPCURVE, "Sharp", ""},
6195 {MOD_WVG_MAPPING_SMOOTH, "SMOOTH", ICON_SMOOTHCURVE, "Smooth", ""},
6196 {MOD_WVG_MAPPING_ROOT, "ROOT", ICON_ROOTCURVE, "Root", ""},
6197 {MOD_WVG_MAPPING_SPHERE, "ICON_SPHERECURVE", ICON_SPHERECURVE, "Sphere", ""},
6198 {MOD_WVG_MAPPING_RANDOM, "RANDOM", ICON_RNDCURVE, "Random", ""},
6200 "STEP",
6201 ICON_IPO_CONSTANT,
6202 "Median Step",
6203 "Map all values below 0.5 to 0.0, and all others to 1.0"},
6204 {0, nullptr, 0, nullptr, nullptr},
6205 };
6206
6207 StructRNA *srna;
6208 PropertyRNA *prop;
6209
6210 srna = RNA_def_struct(brna, "VertexWeightProximityModifier", "Modifier");
6212 "WeightVG Proximity Modifier",
6213 "Set the weights of vertices in a group from a target object's "
6214 "distance");
6215 RNA_def_struct_sdna(srna, "WeightVGProximityModifierData");
6216 RNA_def_struct_ui_icon(srna, ICON_MOD_VERTEX_WEIGHT);
6217
6219
6220 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
6221 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
6222 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name");
6224 prop, nullptr, nullptr, "rna_WeightVGProximityModifier_defgrp_name_set");
6225 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6226
6227 prop = RNA_def_property(srna, "proximity_mode", PROP_ENUM, PROP_NONE);
6228 RNA_def_property_enum_items(prop, weightvg_proximity_modes_items);
6230 RNA_def_property_ui_text(prop, "Proximity Mode", "Which distances to target object to use");
6231 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6232
6233 prop = RNA_def_property(srna, "proximity_geometry", PROP_ENUM, PROP_NONE);
6234 RNA_def_property_enum_sdna(prop, nullptr, "proximity_flags");
6235 RNA_def_property_enum_items(prop, proximity_geometry_items);
6236 RNA_def_property_flag(prop, PROP_ENUM_FLAG); /* important to run before default set */
6239 prop, nullptr, "rna_VertexWeightProximityModifier_proximity_geometry_set", nullptr);
6241 "Proximity Geometry",
6242 "Use the shortest computed distance to target object's geometry "
6243 "as weight");
6244 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6245
6246 prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
6247 RNA_def_property_pointer_sdna(prop, nullptr, "proximity_ob_target");
6248 RNA_def_property_ui_text(prop, "Target Object", "Object to calculate vertices distances from");
6250 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
6251
6252 prop = RNA_def_property(srna, "min_dist", PROP_FLOAT, PROP_DISTANCE);
6253 RNA_def_property_range(prop, 0.0, FLT_MAX);
6254 RNA_def_property_ui_range(prop, 0.0, 1000.0, 10, -1);
6255 RNA_def_property_ui_text(prop, "Lowest", "Distance mapping to weight 0.0");
6256 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6257
6258 prop = RNA_def_property(srna, "max_dist", PROP_FLOAT, PROP_DISTANCE);
6259 RNA_def_property_range(prop, 0.0, FLT_MAX);
6260 RNA_def_property_ui_range(prop, 0.0, 1000.0, 10, -1);
6261 RNA_def_property_ui_text(prop, "Highest", "Distance mapping to weight 1.0");
6262 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6263
6264 prop = RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);
6265 RNA_def_property_enum_items(prop, weightvg_proximity_falloff_type_items);
6266 RNA_def_property_ui_text(prop, "Falloff Type", "How weights are mapped to their new values");
6268 BLT_I18NCONTEXT_ID_CURVE_LEGACY); /* Abusing id_curve :/ */
6269 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6270
6271 prop = RNA_def_property(srna, "invert_falloff", PROP_BOOLEAN, PROP_NONE);
6273 prop, nullptr, "proximity_flags", MOD_WVG_PROXIMITY_INVERT_FALLOFF);
6274 RNA_def_property_ui_text(prop, "Invert Falloff", "Invert the resulting falloff weight");
6275 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6276
6277 prop = RNA_def_property(srna, "normalize", PROP_BOOLEAN, PROP_NONE);
6279 prop, nullptr, "proximity_flags", MOD_WVG_PROXIMITY_WEIGHTS_NORMALIZE);
6281 prop,
6282 "Normalize Weights",
6283 "Normalize the resulting weights (otherwise they are only clamped within 0.0 to 1.0 range)");
6284 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6285
6286 prop = RNA_def_property(srna, "map_curve", PROP_POINTER, PROP_NONE);
6287 RNA_def_property_pointer_sdna(prop, nullptr, "cmap_curve");
6288 RNA_def_property_ui_text(prop, "Mapping Curve", "Custom mapping curve");
6289 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6290
6292
6293 /* Common masking properties. */
6295 srna,
6296 "proximity_flags",
6298 "rna_WeightVGProximityModifier_mask_defgrp_name_set",
6299 "rna_WeightVGProximityModifier_mask_tex_uvlayer_name_set");
6300}
6301
6303{
6304 static const EnumPropertyItem mode_items[] = {
6305 {MOD_REMESH_CENTROID, "BLOCKS", 0, "Blocks", "Output a blocky surface with no smoothing"},
6307 "SMOOTH",
6308 0,
6309 "Smooth",
6310 "Output a smooth surface with no sharp-features detection"},
6312 "SHARP",
6313 0,
6314 "Sharp",
6315 "Output a surface that reproduces sharp edges and corners from the input mesh"},
6317 "VOXEL",
6318 0,
6319 "Voxel",
6320 "Output a mesh corresponding to the volume of the original mesh"},
6321 {0, nullptr, 0, nullptr, nullptr},
6322 };
6323
6324 StructRNA *srna;
6325 PropertyRNA *prop;
6326
6327 srna = RNA_def_struct(brna, "RemeshModifier", "Modifier");
6329 srna,
6330 "Remesh Modifier",
6331 "Generate a new surface with regular topology that follows the shape of the input mesh");
6332 RNA_def_struct_sdna(srna, "RemeshModifierData");
6333 RNA_def_struct_ui_icon(srna, ICON_MOD_REMESH);
6334
6336
6337 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
6338 RNA_def_property_enum_items(prop, mode_items);
6339 RNA_def_property_ui_text(prop, "Mode", "");
6341 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6342
6343 prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_NONE);
6344 RNA_def_property_ui_range(prop, 0, 0.99, 0.01, 3);
6345 RNA_def_property_range(prop, 0, 0.99);
6347 prop, "Scale", "The ratio of the largest dimension of the model over the size of the grid");
6348 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6349
6350 prop = RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE);
6351 RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
6352 RNA_def_property_range(prop, 0, 1);
6354 prop,
6355 "Threshold",
6356 "If removing disconnected pieces, minimum size of components to preserve as a ratio "
6357 "of the number of polygons in the largest component");
6358 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6359
6360 prop = RNA_def_property(srna, "octree_depth", PROP_INT, PROP_NONE);
6361 RNA_def_property_int_sdna(prop, nullptr, "depth");
6362 RNA_def_property_range(prop, 1, 24);
6363 RNA_def_property_ui_range(prop, 1, 12, 1, 3);
6365 prop, "Octree Depth", "Resolution of the octree; higher values give finer details");
6366 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6367
6368 prop = RNA_def_property(srna, "sharpness", PROP_FLOAT, PROP_NONE);
6369 RNA_def_property_float_sdna(prop, nullptr, "hermite_num");
6370 RNA_def_property_ui_range(prop, 0, 2, 0.1, 3);
6372 prop,
6373 "Sharpness",
6374 "Tolerance for outliers; lower values filter noise while higher values will reproduce "
6375 "edges closer to the input");
6376 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6377
6378 /* NOTE: allow zero (which skips computation), to avoid zero clamping
6379 * to a small value which is likely to run out of memory, see: #130526. */
6380 prop = RNA_def_property(srna, "voxel_size", PROP_FLOAT, PROP_DISTANCE);
6381 RNA_def_property_float_sdna(prop, nullptr, "voxel_size");
6382 RNA_def_property_range(prop, 0.0f, FLT_MAX);
6383 RNA_def_property_ui_range(prop, 0.0001, 2, 0.1, 3);
6386 "Voxel Size",
6387 "Size of the voxel in object space used for volume evaluation. Lower "
6388 "values preserve finer details.");
6389 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6390
6391 prop = RNA_def_property(srna, "adaptivity", PROP_FLOAT, PROP_DISTANCE);
6392 RNA_def_property_float_sdna(prop, nullptr, "adaptivity");
6393 RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
6395 prop,
6396 "Adaptivity",
6397 "Reduces the final face count by simplifying geometry where detail is not needed, "
6398 "generating triangles. A value greater than 0 disables Fix Poles.");
6399 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6400
6401 prop = RNA_def_property(srna, "use_remove_disconnected", PROP_BOOLEAN, PROP_NONE);
6403 RNA_def_property_ui_text(prop, "Remove Disconnected", "");
6404 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6405
6406 prop = RNA_def_property(srna, "use_smooth_shade", PROP_BOOLEAN, PROP_NONE);
6409 prop, "Smooth Shading", "Output faces with smooth shading rather than flat shaded");
6410 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6411
6413}
6414
6416{
6417 StructRNA *srna;
6418 PropertyRNA *prop;
6419
6420 static const EnumPropertyItem geometry_items[] = {
6422 "GENERATE",
6423 0,
6424 "Generate",
6425 "Generate ocean surface geometry at the specified resolution"},
6427 "DISPLACE",
6428 0,
6429 "Displace",
6430 "Displace existing geometry according to simulation"},
6431# if 0
6433 "SIM_ONLY",
6434 0,
6435 "Sim Only",
6436 "Leaves geometry unchanged, but still runs simulation (to be used from texture)"},
6437# endif
6438 {0, nullptr, 0, nullptr, nullptr},
6439 };
6440
6441 static const EnumPropertyItem spectrum_items[] = {
6443 "PHILLIPS",
6444 0,
6445 "Turbulent Ocean",
6446 "Use for turbulent seas with foam"},
6448 "PIERSON_MOSKOWITZ",
6449 0,
6450 "Established Ocean",
6451 "Use for a large area, established ocean (Pierson-Moskowitz method)"},
6453 "JONSWAP",
6454 0,
6455 "Established Ocean (Sharp Peaks)",
6456 "Use for established oceans ('JONSWAP', Pierson-Moskowitz method) with peak sharpening"},
6458 "TEXEL_MARSEN_ARSLOE",
6459 0,
6460 "Shallow Water",
6461 "Use for shallow water ('JONSWAP', 'TMA' - Texel-Marsen-Arsloe method)"},
6462 {0, nullptr, 0, nullptr, nullptr},
6463 };
6464
6465 srna = RNA_def_struct(brna, "OceanModifier", "Modifier");
6466 RNA_def_struct_ui_text(srna, "Ocean Modifier", "Simulate an ocean surface");
6467 RNA_def_struct_sdna(srna, "OceanModifierData");
6468 RNA_def_struct_ui_icon(srna, ICON_MOD_OCEAN);
6469
6471
6472 prop = RNA_def_property(srna, "geometry_mode", PROP_ENUM, PROP_NONE);
6473 RNA_def_property_enum_sdna(prop, nullptr, "geometry_mode");
6474 RNA_def_property_enum_items(prop, geometry_items);
6475 RNA_def_property_ui_text(prop, "Geometry", "Method of modifying geometry");
6476 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6477
6478 prop = RNA_def_property(srna, "size", PROP_FLOAT, PROP_UNSIGNED);
6479 RNA_def_property_float_sdna(prop, nullptr, "size");
6481 prop, "Size", "Surface scale factor (does not affect the height of the waves)");
6483 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6484
6485 prop = RNA_def_property(srna, "repeat_x", PROP_INT, PROP_UNSIGNED);
6486 RNA_def_property_int_sdna(prop, nullptr, "repeat_x");
6488 RNA_def_property_range(prop, 1, 1024);
6489 RNA_def_property_ui_range(prop, 1, 100, 1, -1);
6490 RNA_def_property_ui_text(prop, "Repeat X", "Repetitions of the generated surface in X");
6491 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6492
6493 prop = RNA_def_property(srna, "repeat_y", PROP_INT, PROP_UNSIGNED);
6494 RNA_def_property_int_sdna(prop, nullptr, "repeat_y");
6496 RNA_def_property_range(prop, 1, 1024);
6497 RNA_def_property_ui_range(prop, 1, 100, 1, -1);
6498 RNA_def_property_ui_text(prop, "Repeat Y", "Repetitions of the generated surface in Y");
6499 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6500
6501 prop = RNA_def_property(srna, "use_normals", PROP_BOOLEAN, PROP_NONE);
6505 prop,
6506 "Generate Normals",
6507 "Output normals for bump mapping - disabling can speed up performance if it's not needed");
6508 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6509
6510 prop = RNA_def_property(srna, "use_foam", PROP_BOOLEAN, PROP_NONE);
6513 RNA_def_property_ui_text(prop, "Generate Foam", "Generate foam mask as a vertex color channel");
6514 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6515
6516 prop = RNA_def_property(srna, "use_spray", PROP_BOOLEAN, PROP_NONE);
6520 prop, "Generate Spray Map", "Generate map of spray direction as a vertex color channel");
6521 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6522
6523 prop = RNA_def_property(srna, "invert_spray", PROP_BOOLEAN, PROP_NONE);
6526 RNA_def_property_ui_text(prop, "Invert Spray", "Invert the spray direction map");
6527 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6528
6529 prop = RNA_def_property(srna, "spray_layer_name", PROP_STRING, PROP_NONE);
6530 RNA_def_property_string_sdna(prop, nullptr, "spraylayername");
6533 prop, "Spray Map", "Name of the vertex color layer used for the spray direction map");
6534 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6535
6536 prop = RNA_def_property(srna, "resolution", PROP_INT, PROP_UNSIGNED);
6537 RNA_def_property_int_sdna(prop, nullptr, "resolution");
6539 RNA_def_property_range(prop, 1, 1024);
6540 RNA_def_property_ui_range(prop, 1, 32, 1, -1);
6542 prop, "Render Resolution", "Resolution of the generated surface for rendering and baking");
6543 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6544
6545 prop = RNA_def_property(srna, "viewport_resolution", PROP_INT, PROP_UNSIGNED);
6546 RNA_def_property_int_sdna(prop, nullptr, "viewport_resolution");
6548 RNA_def_property_range(prop, 1, 1024);
6549 RNA_def_property_ui_range(prop, 1, 32, 1, -1);
6551 prop, "Viewport Resolution", "Viewport resolution of the generated surface");
6552 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6553
6554 prop = RNA_def_property(srna, "spatial_size", PROP_INT, PROP_NONE);
6555 RNA_def_property_int_sdna(prop, nullptr, "spatial_size");
6556 RNA_def_property_ui_range(prop, 1, 512, 2, -1);
6559 prop,
6560 "Spatial Size",
6561 "Size of the simulation domain (in meters), and of the generated geometry (in BU)");
6562 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6563
6564 prop = RNA_def_property(srna, "wind_velocity", PROP_FLOAT, PROP_VELOCITY);
6565 RNA_def_property_float_sdna(prop, nullptr, "wind_velocity");
6567 RNA_def_property_ui_text(prop, "Wind Velocity", "Wind speed");
6568 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6569
6570 prop = RNA_def_property(srna, "damping", PROP_FLOAT, PROP_FACTOR);
6571 RNA_def_property_float_sdna(prop, nullptr, "damp");
6574 prop, "Damping", "Damp reflected waves going in opposite direction to the wind");
6575 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6576
6577 prop = RNA_def_property(srna, "wave_scale_min", PROP_FLOAT, PROP_DISTANCE);
6578 RNA_def_property_float_sdna(prop, nullptr, "smallest_wave");
6580 RNA_def_property_range(prop, 0.0, FLT_MAX);
6581 RNA_def_property_ui_text(prop, "Smallest Wave", "Shortest allowed wavelength");
6582 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6583
6584 prop = RNA_def_property(srna, "wave_alignment", PROP_FLOAT, PROP_UNSIGNED);
6585 RNA_def_property_float_sdna(prop, nullptr, "wave_alignment");
6587 RNA_def_property_range(prop, 0.0, 1.0);
6588 RNA_def_property_ui_text(prop, "Wave Alignment", "How much the waves are aligned to each other");
6589 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6590
6591 prop = RNA_def_property(srna, "wave_direction", PROP_FLOAT, PROP_ANGLE);
6592 RNA_def_property_float_sdna(prop, nullptr, "wave_direction");
6595 prop, "Wave Direction", "Main direction of the waves when they are (partially) aligned");
6596 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6597
6598 prop = RNA_def_property(srna, "wave_scale", PROP_FLOAT, PROP_UNSIGNED);
6599 RNA_def_property_float_sdna(prop, nullptr, "wave_scale");
6600 RNA_def_property_ui_text(prop, "Wave Scale", "Scale of the displacement effect");
6601 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6602
6603 prop = RNA_def_property(srna, "depth", PROP_FLOAT, PROP_DISTANCE);
6604 RNA_def_property_float_sdna(prop, nullptr, "depth");
6606 RNA_def_property_ui_text(prop, "Depth", "Depth of the solid ground below the water surface");
6607 RNA_def_property_ui_range(prop, 0, 250, 1, -1);
6608 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6609
6610 prop = RNA_def_property(srna, "foam_coverage", PROP_FLOAT, PROP_NONE);
6611 RNA_def_property_float_sdna(prop, nullptr, "foam_coverage");
6612 RNA_def_property_ui_text(prop, "Foam Coverage", "Amount of generated foam");
6613 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6614
6615 prop = RNA_def_property(srna, "bake_foam_fade", PROP_FLOAT, PROP_UNSIGNED);
6616 RNA_def_property_float_sdna(prop, nullptr, "foam_fade");
6619 prop, "Foam Fade", "How much foam accumulates over time (baked ocean only)");
6620 RNA_def_property_ui_range(prop, 0.0, 10.0, 1, -1);
6621 RNA_def_property_update(prop, 0, nullptr);
6622
6623 prop = RNA_def_property(srna, "foam_layer_name", PROP_STRING, PROP_NONE);
6624 RNA_def_property_string_sdna(prop, nullptr, "foamlayername");
6626 prop, "Foam Layer Name", "Name of the vertex color layer used for foam");
6627 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6628
6629 prop = RNA_def_property(srna, "choppiness", PROP_FLOAT, PROP_UNSIGNED);
6630 RNA_def_property_float_sdna(prop, nullptr, "chop_amount");
6632 prop,
6633 "Choppiness",
6634 "Choppiness of the wave's crest (adds some horizontal component to the displacement)");
6635 RNA_def_property_ui_range(prop, 0.0, 4.0, 3, -1);
6636 RNA_def_property_float_funcs(prop, nullptr, "rna_OceanModifier_ocean_chop_set", nullptr);
6637 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6638
6639 prop = RNA_def_property(srna, "time", PROP_FLOAT, PROP_UNSIGNED);
6640 RNA_def_property_float_sdna(prop, nullptr, "time");
6641 RNA_def_property_ui_text(prop, "Time", "Current time of the simulation");
6643 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6644
6645 prop = RNA_def_property(srna, "spectrum", PROP_ENUM, PROP_NONE);
6646 RNA_def_property_enum_sdna(prop, nullptr, "spectrum");
6648 RNA_def_property_enum_items(prop, spectrum_items);
6649 RNA_def_property_ui_text(prop, "Spectrum", "Spectrum to use");
6650 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6651
6652 prop = RNA_def_property(srna, "fetch_jonswap", PROP_FLOAT, PROP_UNSIGNED);
6653 RNA_def_property_float_sdna(prop, nullptr, "fetch_jonswap");
6655 RNA_def_property_range(prop, 0.0, FLT_MAX);
6657 prop,
6658 "Fetch",
6659 "This is the distance from a lee shore, "
6660 "called the fetch, or the distance over which the wind blows with constant velocity. "
6661 "Used by 'JONSWAP' and 'TMA' models.");
6662 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6663
6664 prop = RNA_def_property(srna, "sharpen_peak_jonswap", PROP_FLOAT, PROP_UNSIGNED);
6665 RNA_def_property_float_sdna(prop, nullptr, "sharpen_peak_jonswap");
6667 RNA_def_property_range(prop, 0.0, 1.0);
6668 RNA_def_property_ui_text(prop, "Sharpen peak", "Peak sharpening for 'JONSWAP' and 'TMA' models");
6669 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6670
6671 prop = RNA_def_property(srna, "random_seed", PROP_INT, PROP_UNSIGNED);
6672 RNA_def_property_int_sdna(prop, nullptr, "seed");
6674 RNA_def_property_ui_text(prop, "Random Seed", "Seed of the random generator");
6675 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6676
6677 prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_TIME);
6678 RNA_def_property_int_sdna(prop, nullptr, "bakestart");
6680 RNA_def_property_ui_text(prop, "Bake Start", "Start frame of the ocean baking");
6681 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6682
6683 prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_TIME);
6684 RNA_def_property_int_sdna(prop, nullptr, "bakeend");
6686 RNA_def_property_ui_text(prop, "Bake End", "End frame of the ocean baking");
6687 RNA_def_property_update(prop, 0, "rna_OceanModifier_init_update");
6688
6689 prop = RNA_def_property(srna, "is_cached", PROP_BOOLEAN, PROP_NONE);
6690 RNA_def_property_boolean_sdna(prop, nullptr, "cached", 1);
6693 prop, "Ocean is Cached", "Whether the ocean is using cached data or simulating");
6694
6695 /* TODO: rename to `dirpath`. */
6696 prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_DIRPATH);
6697 RNA_def_property_string_sdna(prop, nullptr, "cachepath");
6699 RNA_def_property_ui_text(prop, "Cache Path", "Path to a folder to store external baked images");
6700 // RNA_def_property_update(prop, 0, "rna_Modifier_update");
6701 /* XXX how to update? */
6702
6704}
6705
6707{
6708 StructRNA *srna;
6709 PropertyRNA *prop;
6710
6711 srna = RNA_def_struct(brna, "SkinModifier", "Modifier");
6712 RNA_def_struct_ui_text(srna, "Skin Modifier", "Generate Skin");
6713 RNA_def_struct_sdna(srna, "SkinModifierData");
6714 RNA_def_struct_ui_icon(srna, ICON_MOD_SKIN);
6715
6717
6718 prop = RNA_def_property(srna, "branch_smoothing", PROP_FLOAT, PROP_FACTOR);
6719 RNA_def_property_ui_text(prop, "Branch Smoothing", "Smooth complex geometry around branches");
6720 RNA_def_property_ui_range(prop, 0, 1, 1, -1);
6721 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6722
6723 prop = RNA_def_property(srna, "use_smooth_shade", PROP_BOOLEAN, PROP_NONE);
6726 prop, "Smooth Shading", "Output faces with smooth shading rather than flat shaded");
6727 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6728
6729 prop = RNA_def_property(srna, "use_x_symmetry", PROP_BOOLEAN, PROP_NONE);
6730 RNA_def_property_boolean_sdna(prop, nullptr, "symmetry_axes", MOD_SKIN_SYMM_X);
6731 RNA_def_property_ui_text(prop, "X", "Avoid making unsymmetrical quads across the X axis");
6732 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6733
6734 prop = RNA_def_property(srna, "use_y_symmetry", PROP_BOOLEAN, PROP_NONE);
6735 RNA_def_property_boolean_sdna(prop, nullptr, "symmetry_axes", MOD_SKIN_SYMM_Y);
6736 RNA_def_property_ui_text(prop, "Y", "Avoid making unsymmetrical quads across the Y axis");
6737 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6738
6739 prop = RNA_def_property(srna, "use_z_symmetry", PROP_BOOLEAN, PROP_NONE);
6740 RNA_def_property_boolean_sdna(prop, nullptr, "symmetry_axes", MOD_SKIN_SYMM_Z);
6741 RNA_def_property_ui_text(prop, "Z", "Avoid making unsymmetrical quads across the Z axis");
6742 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6743
6745}
6746
6748{
6749 StructRNA *srna;
6750 PropertyRNA *prop;
6751
6752 srna = RNA_def_struct(brna, "TriangulateModifier", "Modifier");
6753 RNA_def_struct_ui_text(srna, "Triangulate Modifier", "Triangulate Mesh");
6754 RNA_def_struct_sdna(srna, "TriangulateModifierData");
6755 RNA_def_struct_ui_icon(srna, ICON_MOD_TRIANGULATE);
6756
6758
6759 prop = RNA_def_property(srna, "quad_method", PROP_ENUM, PROP_NONE);
6760 RNA_def_property_enum_sdna(prop, nullptr, "quad_method");
6762 RNA_def_property_ui_text(prop, "Quad Method", "Method for splitting the quads into triangles");
6763 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6764
6765 prop = RNA_def_property(srna, "ngon_method", PROP_ENUM, PROP_NONE);
6766 RNA_def_property_enum_sdna(prop, nullptr, "ngon_method");
6768 RNA_def_property_ui_text(prop, "N-gon Method", "Method for splitting the n-gons into triangles");
6769 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6770
6771 prop = RNA_def_property(srna, "min_vertices", PROP_INT, PROP_UNSIGNED);
6772 RNA_def_property_int_sdna(prop, nullptr, "min_vertices");
6773 RNA_def_property_range(prop, 4, INT_MAX);
6775 prop,
6776 "Minimum Vertices",
6777 "Triangulate only polygons with vertex count greater than or equal to this number");
6778 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6779
6780 prop = RNA_def_property(srna, "keep_custom_normals", PROP_BOOLEAN, PROP_NONE);
6783 prop,
6784 "Keep Normals",
6785 "Try to preserve custom normals.\n"
6786 "Warning: Depending on chosen triangulation method, "
6787 "shading may not be fully preserved, \"Fixed\" method usually gives the best result here");
6788 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6789
6791}
6792
6794{
6795 static const EnumPropertyItem prop_format_type_items[] = {
6796 {MOD_MESHCACHE_TYPE_MDD, "MDD", 0, "MDD", ""},
6797 {MOD_MESHCACHE_TYPE_PC2, "PC2", 0, "PC2", ""},
6798 {0, nullptr, 0, nullptr, nullptr},
6799 };
6800
6801 static const EnumPropertyItem prop_deform_mode_items[] = {
6803 "OVERWRITE",
6804 0,
6805 "Overwrite",
6806 "Replace vertex coordinates with cached values"},
6808 "INTEGRATE",
6809 0,
6810 "Integrate",
6811 "Integrate deformation from this modifier's input with the mesh-cache coordinates "
6812 "(useful for shape keys)"},
6813 {0, nullptr, 0, nullptr, nullptr},
6814 };
6815
6816 static const EnumPropertyItem prop_interpolation_type_items[] = {
6817 {MOD_MESHCACHE_INTERP_NONE, "NONE", 0, "None", ""},
6818 {MOD_MESHCACHE_INTERP_LINEAR, "LINEAR", 0, "Linear", ""},
6819 /* for cardinal we'd need to read 4x cache's */
6820 // {MOD_MESHCACHE_INTERP_CARDINAL, "CARDINAL", 0, "Cardinal", ""},
6821 {0, nullptr, 0, nullptr, nullptr},
6822 };
6823
6824 static const EnumPropertyItem prop_time_type_items[] = {
6825 /* use 'eval_frame' */
6827 "FRAME",
6828 0,
6829 "Frame",
6830 "Control playback using a frame-number "
6831 "(ignoring time FPS and start frame from the file)"},
6832 /* use 'eval_time' */
6833 {MOD_MESHCACHE_TIME_SECONDS, "TIME", 0, "Time", "Control playback using time in seconds"},
6834 /* use 'eval_factor' */
6836 "FACTOR",
6837 0,
6838 "Factor",
6839 "Control playback using a value between 0 and 1"},
6840 {0, nullptr, 0, nullptr, nullptr},
6841 };
6842
6843 static const EnumPropertyItem prop_time_play_items[] = {
6844 {MOD_MESHCACHE_PLAY_CFEA, "SCENE", 0, "Scene", "Use the time from the scene"},
6845 {MOD_MESHCACHE_PLAY_EVAL, "CUSTOM", 0, "Custom", "Use the modifier's own time evaluation"},
6846 {0, nullptr, 0, nullptr, nullptr},
6847 };
6848
6849 StructRNA *srna;
6850 PropertyRNA *prop;
6851
6852 srna = RNA_def_struct(brna, "MeshCacheModifier", "Modifier");
6853 RNA_def_struct_ui_text(srna, "Cache Modifier", "Cache Mesh");
6854 RNA_def_struct_sdna(srna, "MeshCacheModifierData");
6855 RNA_def_struct_ui_icon(srna, ICON_MOD_MESHDEFORM); /* XXX, needs own icon */
6856
6858
6859 prop = RNA_def_property(srna, "cache_format", PROP_ENUM, PROP_NONE);
6860 RNA_def_property_enum_sdna(prop, nullptr, "type");
6861 RNA_def_property_enum_items(prop, prop_format_type_items);
6862 RNA_def_property_ui_text(prop, "Format", "");
6863 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6864
6865 prop = RNA_def_property(srna, "interpolation", PROP_ENUM, PROP_NONE);
6866 RNA_def_property_enum_sdna(prop, nullptr, "interp");
6867 RNA_def_property_enum_items(prop, prop_interpolation_type_items);
6868 RNA_def_property_ui_text(prop, "Interpolation", "");
6869 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6870
6871 prop = RNA_def_property(srna, "time_mode", PROP_ENUM, PROP_NONE);
6872 RNA_def_property_enum_sdna(prop, nullptr, "time_mode");
6873 RNA_def_property_enum_items(prop, prop_time_type_items);
6874 RNA_def_property_ui_text(prop, "Time Mode", "Method to control playback time");
6875 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6876
6877 prop = RNA_def_property(srna, "play_mode", PROP_ENUM, PROP_NONE);
6878 RNA_def_property_enum_sdna(prop, nullptr, "play_mode");
6879 RNA_def_property_enum_items(prop, prop_time_play_items);
6880 RNA_def_property_ui_text(prop, "Play Mode", "");
6881 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6882
6883 prop = RNA_def_property(srna, "deform_mode", PROP_ENUM, PROP_NONE);
6884 RNA_def_property_enum_sdna(prop, nullptr, "deform_mode");
6885 RNA_def_property_enum_items(prop, prop_deform_mode_items);
6886 RNA_def_property_ui_text(prop, "Deform Mode", "");
6887 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6888
6889 prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH);
6890 RNA_def_property_ui_text(prop, "File Path", "Path to external displacements file");
6892 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6893
6894 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
6895 RNA_def_property_float_sdna(prop, nullptr, "factor");
6896 RNA_def_property_range(prop, 0.0f, 1.0f);
6897 RNA_def_property_ui_text(prop, "Influence", "Influence of the deformation");
6898 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6899
6900 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
6901 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
6903 prop,
6904 "Vertex Group",
6905 "Name of the Vertex Group which determines the influence of the modifier per point");
6906 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_MeshCacheModifier_defgrp_name_set");
6907 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6908
6909 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
6911 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
6912 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6913
6914 /* -------------------------------------------------------------------- */
6915 /* Axis Conversion */
6916 prop = RNA_def_property(srna, "forward_axis", PROP_ENUM, PROP_NONE);
6917 RNA_def_property_enum_sdna(prop, nullptr, "forward_axis");
6919 RNA_def_property_ui_text(prop, "Forward", "");
6920 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6921
6922 prop = RNA_def_property(srna, "up_axis", PROP_ENUM, PROP_NONE);
6923 RNA_def_property_enum_sdna(prop, nullptr, "up_axis");
6925 RNA_def_property_ui_text(prop, "Up", "");
6926 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6927
6928 prop = RNA_def_property(srna, "flip_axis", PROP_BOOLEAN, PROP_NONE);
6930 prop, nullptr, "flip_axis", MOD_MESHCACHE_FLIP_AXIS_X, 3);
6931 RNA_def_property_ui_text(prop, "Flip Axis", "");
6932 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6933
6934 /* -------------------------------------------------------------------- */
6935 /* For Scene time */
6936 prop = RNA_def_property(srna, "frame_start", PROP_FLOAT, PROP_TIME);
6937 RNA_def_property_float_sdna(prop, nullptr, "frame_start");
6939 RNA_def_property_ui_text(prop, "Frame Start", "Add this to the start frame");
6940 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6941
6942 prop = RNA_def_property(srna, "frame_scale", PROP_FLOAT, PROP_NONE);
6943 RNA_def_property_float_sdna(prop, nullptr, "frame_scale");
6944 RNA_def_property_range(prop, 0.0f, 100.0f);
6945 RNA_def_property_ui_text(prop, "Frame Scale", "Evaluation time in seconds");
6946 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6947
6948 /* -------------------------------------------------------------------- */
6949 /* eval values depend on 'time_mode' */
6950 prop = RNA_def_property(srna, "eval_frame", PROP_FLOAT, PROP_NONE);
6951 RNA_def_property_float_sdna(prop, nullptr, "eval_frame");
6953 RNA_def_property_ui_text(prop, "Evaluation Frame", "The frame to evaluate (starting at 0)");
6954 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6955
6956 prop = RNA_def_property(srna, "eval_time", PROP_FLOAT, PROP_NONE);
6957 RNA_def_property_float_sdna(prop, nullptr, "eval_time");
6958 RNA_def_property_range(prop, 0.0f, FLT_MAX);
6959 RNA_def_property_ui_text(prop, "Evaluation Time", "Evaluation time in seconds");
6960 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6961
6962 prop = RNA_def_property(srna, "eval_factor", PROP_FLOAT, PROP_FACTOR);
6963 RNA_def_property_float_sdna(prop, nullptr, "eval_factor");
6964 RNA_def_property_range(prop, 0.0f, 1.0f);
6965 RNA_def_property_ui_text(prop, "Evaluation Factor", "Evaluation time in seconds");
6966 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6967
6969}
6970
6972{
6973 StructRNA *srna;
6974 PropertyRNA *prop;
6975
6976 srna = RNA_def_struct(brna, "MeshSequenceCacheModifier", "Modifier");
6977 RNA_def_struct_ui_text(srna, "Cache Modifier", "Cache Mesh");
6978 RNA_def_struct_sdna(srna, "MeshSeqCacheModifierData");
6979 RNA_def_struct_ui_icon(srna, ICON_MOD_MESHDEFORM); /* XXX, needs own icon */
6980
6982
6983 prop = RNA_def_property(srna, "cache_file", PROP_POINTER, PROP_NONE);
6984 RNA_def_property_pointer_sdna(prop, nullptr, "cache_file");
6985 RNA_def_property_struct_type(prop, "CacheFile");
6986 RNA_def_property_ui_text(prop, "Cache File", "");
6988 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
6989
6990 prop = RNA_def_property(srna, "object_path", PROP_STRING, PROP_NONE);
6992 prop,
6993 "Object Path",
6994 "Path to the object in the Alembic archive used to lookup geometric data");
6995 RNA_def_property_update(prop, 0, "rna_Modifier_update");
6996
6997 static const EnumPropertyItem read_flag_items[] = {
6998 {MOD_MESHSEQ_READ_VERT, "VERT", 0, "Vertex", ""},
6999 {MOD_MESHSEQ_READ_POLY, "POLY", 0, "Faces", ""},
7000 {MOD_MESHSEQ_READ_UV, "UV", 0, "UV", ""},
7001 {MOD_MESHSEQ_READ_COLOR, "COLOR", 0, "Color", ""},
7002 {MOD_MESHSEQ_READ_ATTRIBUTES, "ATTRIBUTES", 0, "Attributes", ""},
7003 {0, nullptr, 0, nullptr, nullptr},
7004 };
7005
7006 prop = RNA_def_property(srna, "read_data", PROP_ENUM, PROP_NONE);
7008 RNA_def_property_enum_sdna(prop, nullptr, "read_flag");
7009 RNA_def_property_enum_items(prop, read_flag_items);
7010 RNA_def_property_ui_text(prop, "Read Data", "Data to read from the cache");
7011 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7012
7013 prop = RNA_def_property(srna, "use_vertex_interpolation", PROP_BOOLEAN, PROP_NONE);
7016 prop, "Vertex Interpolation", "Allow interpolation of vertex positions");
7017 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7018
7019 prop = RNA_def_property(srna, "velocity_scale", PROP_FLOAT, PROP_NONE);
7020 RNA_def_property_float_sdna(prop, nullptr, "velocity_scale");
7021 RNA_def_property_range(prop, 0.0f, FLT_MAX);
7023 prop,
7024 "Velocity Scale",
7025 "Multiplier used to control the magnitude of the velocity vectors for time effects");
7026 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7027
7029}
7030
7032{
7033 StructRNA *srna;
7034 PropertyRNA *prop;
7035
7036 srna = RNA_def_struct(brna, "LaplacianDeformModifier", "Modifier");
7037 RNA_def_struct_ui_text(srna, "Laplacian Deform Modifier", "Mesh deform modifier");
7038 RNA_def_struct_sdna(srna, "LaplacianDeformModifierData");
7039 RNA_def_struct_ui_icon(srna, ICON_MOD_MESHDEFORM);
7040
7042
7043 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
7044 RNA_def_property_string_sdna(prop, nullptr, "anchor_grp_name");
7046 prop, "Anchor Weights", "Name of Vertex Group which determines Anchors");
7048 prop, nullptr, nullptr, "rna_LaplacianDeformModifier_anchor_grp_name_set");
7049
7050 prop = RNA_def_property(srna, "iterations", PROP_INT, PROP_UNSIGNED);
7051 RNA_def_property_int_sdna(prop, nullptr, "repeat");
7052 RNA_def_property_ui_range(prop, 1, 50, 1, -1);
7053 RNA_def_property_ui_text(prop, "Repeat", "");
7054 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7055
7056 prop = RNA_def_property(srna, "is_bind", PROP_BOOLEAN, PROP_NONE);
7057 RNA_def_property_boolean_funcs(prop, "rna_LaplacianDeformModifier_is_bind_get", nullptr);
7058 RNA_def_property_ui_text(prop, "Bound", "Whether geometry has been bound to anchors");
7060
7061 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
7063 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
7064 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7065
7067
7068 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7069}
7070
7072{
7073 StructRNA *srna;
7074 PropertyRNA *prop;
7075
7076 static const EnumPropertyItem mode_items[] = {
7077 {MOD_WELD_MODE_ALL, "ALL", 0, "All", "Full merge by distance"},
7078 {MOD_WELD_MODE_CONNECTED, "CONNECTED", 0, "Connected", "Only merge along the edges"},
7079 {0, nullptr, 0, nullptr, nullptr},
7080 };
7081
7082 srna = RNA_def_struct(brna, "WeldModifier", "Modifier");
7083 RNA_def_struct_ui_text(srna, "Weld Modifier", "Weld modifier");
7084 RNA_def_struct_sdna(srna, "WeldModifierData");
7085 RNA_def_struct_ui_icon(srna, ICON_AUTOMERGE_OFF);
7086
7088
7089 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
7090 RNA_def_property_enum_items(prop, mode_items);
7091 RNA_def_property_ui_text(prop, "Mode", "Mode defines the merge rule");
7092 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7093
7094 prop = RNA_def_property(srna, "merge_threshold", PROP_FLOAT, PROP_DISTANCE);
7095 RNA_def_property_float_sdna(prop, nullptr, "merge_dist");
7097 RNA_def_property_ui_range(prop, 0, 1, 0.001, 6);
7098 RNA_def_property_ui_text(prop, "Merge Distance", "Limit below which to merge vertices");
7099 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7100
7101 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
7102 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
7104 prop, "Vertex Group", "Vertex group name for selecting the affected areas");
7105 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_WeldModifier_defgrp_name_set");
7106 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7107
7108 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
7110 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
7111 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7112
7113 prop = RNA_def_property(srna, "loose_edges", PROP_BOOLEAN, PROP_NONE);
7116 prop, "Only Loose Edges", "Collapse edges without faces, cloth sewing edges");
7117 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7118
7120}
7121
7123{
7124 StructRNA *srna;
7125 PropertyRNA *prop;
7126
7127 srna = RNA_def_struct(brna, "WireframeModifier", "Modifier");
7128 RNA_def_struct_ui_text(srna, "Wireframe Modifier", "Wireframe effect modifier");
7129 RNA_def_struct_sdna(srna, "WireframeModifierData");
7130 RNA_def_struct_ui_icon(srna, ICON_MOD_WIREFRAME);
7131
7133
7134 prop = RNA_def_property(srna, "thickness", PROP_FLOAT, PROP_DISTANCE);
7135 RNA_def_property_float_sdna(prop, nullptr, "offset");
7137 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.01, 4);
7138 RNA_def_property_ui_text(prop, "Thickness", "Thickness factor");
7139 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7140
7141 prop = RNA_def_property(srna, "thickness_vertex_group", PROP_FLOAT, PROP_FACTOR);
7142 RNA_def_property_float_sdna(prop, nullptr, "offset_fac_vg");
7143 RNA_def_property_range(prop, 0.0, 1.0);
7144 RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
7146 prop, "Vertex Group Factor", "Thickness factor to use for zero vertex group influence");
7147 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7148
7149 prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_FACTOR);
7150 RNA_def_property_float_sdna(prop, nullptr, "offset_fac");
7152 RNA_def_property_ui_range(prop, -1, 1, 0.1, 4);
7153 RNA_def_property_ui_text(prop, "Offset", "Offset the thickness from the center");
7154 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7155
7156 prop = RNA_def_property(srna, "use_replace", PROP_BOOLEAN, PROP_NONE);
7158 RNA_def_property_ui_text(prop, "Replace", "Remove original geometry");
7159 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7160
7161 prop = RNA_def_property(srna, "use_boundary", PROP_BOOLEAN, PROP_NONE);
7163 RNA_def_property_ui_text(prop, "Boundary", "Support face boundaries");
7164 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7165
7166 prop = RNA_def_property(srna, "use_even_offset", PROP_BOOLEAN, PROP_NONE);
7168 RNA_def_property_ui_text(prop, "Offset Even", "Scale the offset to give more even thickness");
7169 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7170
7171 prop = RNA_def_property(srna, "use_relative_offset", PROP_BOOLEAN, PROP_NONE);
7173 RNA_def_property_ui_text(prop, "Offset Relative", "Scale the offset by surrounding geometry");
7174 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7175
7176 prop = RNA_def_property(srna, "use_crease", PROP_BOOLEAN, PROP_NONE);
7179 prop, "Offset Relative", "Crease hub edges for improved subdivision surface");
7180 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7181
7182 prop = RNA_def_property(srna, "crease_weight", PROP_FLOAT, PROP_NONE);
7183 RNA_def_property_float_sdna(prop, nullptr, "crease_weight");
7185 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1, 1);
7186 RNA_def_property_ui_text(prop, "Weight", "Crease weight (if active)");
7187 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7188
7189 prop = RNA_def_property(srna, "material_offset", PROP_INT, PROP_NONE);
7190 RNA_def_property_int_sdna(prop, nullptr, "mat_ofs");
7191 RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
7192 RNA_def_property_ui_text(prop, "Material Offset", "Offset material index of generated faces");
7193 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7194
7195 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
7196 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
7198 prop, "Vertex Group", "Vertex group name for selecting the affected areas");
7199 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_WireframeModifier_defgrp_name_set");
7200 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7201
7202 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
7204 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
7205 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7206
7208}
7209
7211{
7212 StructRNA *srna;
7213 PropertyRNA *prop;
7214
7215 static const EnumPropertyItem DT_layer_vert_items[] = {
7217 "VGROUP_WEIGHTS",
7218 0,
7219 "Vertex Groups",
7220 "Transfer active or all vertex groups"},
7221# if 0 /* TODO */
7222 {DT_TYPE_SHAPEKEY, "SHAPEKEYS", 0, "Shapekey(s)", "Transfer active or all shape keys"},
7223# endif
7224 /* XXX When SkinModifier is enabled,
7225 * it seems to erase its own CD_MVERT_SKIN layer from final DM :( */
7226# if 0
7227 {DT_TYPE_SKIN, "SKIN", 0, "Skin Weight", "Transfer skin weights"},
7228# endif
7229 {DT_TYPE_BWEIGHT_VERT, "BEVEL_WEIGHT_VERT", 0, "Bevel Weight", "Transfer bevel weights"},
7231 "COLOR_VERTEX",
7232 0,
7233 "Colors",
7234 "Transfer color attributes"},
7235 {0, nullptr, 0, nullptr, nullptr},
7236 };
7237
7238 static const EnumPropertyItem DT_layer_edge_items[] = {
7239 {DT_TYPE_SHARP_EDGE, "SHARP_EDGE", 0, "Sharp", "Transfer sharp mark"},
7240 {DT_TYPE_SEAM, "SEAM", 0, "UV Seam", "Transfer UV seam mark"},
7241 {DT_TYPE_CREASE, "CREASE", 0, "Crease", "Transfer subdivision crease values"},
7242 {DT_TYPE_BWEIGHT_EDGE, "BEVEL_WEIGHT_EDGE", 0, "Bevel Weight", "Transfer bevel weights"},
7243 {DT_TYPE_FREESTYLE_EDGE, "FREESTYLE_EDGE", 0, "Freestyle", "Transfer Freestyle edge mark"},
7244 {0, nullptr, 0, nullptr, nullptr},
7245 };
7246
7247 static const EnumPropertyItem DT_layer_loop_items[] = {
7248 {DT_TYPE_LNOR, "CUSTOM_NORMAL", 0, "Custom Normals", "Transfer custom normals"},
7250 "COLOR_CORNER",
7251 0,
7252 "Colors",
7253 "Transfer color attributes"},
7254 {DT_TYPE_UV, "UV", 0, "UVs", "Transfer UV layers"},
7255 {0, nullptr, 0, nullptr, nullptr},
7256 };
7257
7258 static const EnumPropertyItem DT_layer_poly_items[] = {
7259 {DT_TYPE_SHARP_FACE, "SMOOTH", 0, "Smooth", "Transfer flat/smooth mark"},
7261 "FREESTYLE_FACE",
7262 0,
7263 "Freestyle Mark",
7264 "Transfer Freestyle face mark"},
7265 {0, nullptr, 0, nullptr, nullptr},
7266 };
7267
7268 srna = RNA_def_struct(brna, "DataTransferModifier", "Modifier");
7270 srna, "Data Transfer Modifier", "Modifier transferring some data from a source mesh");
7271 RNA_def_struct_sdna(srna, "DataTransferModifierData");
7272 RNA_def_struct_ui_icon(srna, ICON_MOD_DATA_TRANSFER);
7273
7275
7276 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
7277 RNA_def_property_pointer_sdna(prop, nullptr, "ob_source");
7278 RNA_def_property_ui_text(prop, "Source Object", "Object to transfer data from");
7281 prop, nullptr, "rna_DataTransferModifier_ob_source_set", nullptr, "rna_Mesh_object_poll");
7282 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
7283
7284 prop = RNA_def_boolean(srna,
7285 "use_object_transform",
7286 true,
7287 "Object Transform",
7288 "Evaluate source and destination meshes in global space");
7290 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7291
7292 /* Generic, UI-only data types toggles. */
7293 prop = RNA_def_boolean(
7294 srna, "use_vert_data", false, "Vertex Data", "Enable vertex data transfer");
7296 RNA_def_property_update(prop, 0, "rna_DataTransferModifier_use_data_update");
7297
7298 prop = RNA_def_boolean(srna, "use_edge_data", false, "Edge Data", "Enable edge data transfer");
7300 RNA_def_property_update(prop, 0, "rna_DataTransferModifier_use_data_update");
7301
7302 prop = RNA_def_boolean(
7303 srna, "use_loop_data", false, "Face Corner Data", "Enable face corner data transfer");
7305 RNA_def_property_update(prop, 0, "rna_DataTransferModifier_use_data_update");
7306
7307 prop = RNA_def_boolean(srna, "use_poly_data", false, "Face Data", "Enable face data transfer");
7309 RNA_def_property_update(prop, 0, "rna_DataTransferModifier_use_data_update");
7310
7311 /* Actual data types selection. */
7312 prop = RNA_def_enum(srna,
7313 "data_types_verts",
7314 DT_layer_vert_items,
7315 0,
7316 "Vertex Data Types",
7317 "Which vertex data layers to transfer");
7319 RNA_def_property_enum_sdna(prop, nullptr, "data_types");
7321 prop, nullptr, "rna_DataTransferModifier_verts_data_types_set", nullptr);
7322 RNA_def_property_update(prop, 0, "rna_DataTransferModifier_data_types_update");
7323
7324 prop = RNA_def_enum(srna,
7325 "data_types_edges",
7326 DT_layer_edge_items,
7327 0,
7328 "Edge Data Types",
7329 "Which edge data layers to transfer");
7331 RNA_def_property_enum_sdna(prop, nullptr, "data_types");
7333 prop, nullptr, "rna_DataTransferModifier_edges_data_types_set", nullptr);
7334 RNA_def_property_update(prop, 0, "rna_DataTransferModifier_data_types_update");
7335
7336 prop = RNA_def_enum(srna,
7337 "data_types_loops",
7338 DT_layer_loop_items,
7339 0,
7340 "Face Corner Data Types",
7341 "Which face corner data layers to transfer");
7343 RNA_def_property_enum_sdna(prop, nullptr, "data_types");
7345 prop, nullptr, "rna_DataTransferModifier_loops_data_types_set", nullptr);
7346 RNA_def_property_update(prop, 0, "rna_DataTransferModifier_data_types_update");
7347
7348 prop = RNA_def_enum(srna,
7349 "data_types_polys",
7350 DT_layer_poly_items,
7351 0,
7352 "Poly Data Types",
7353 "Which face data layers to transfer");
7355 RNA_def_property_enum_sdna(prop, nullptr, "data_types");
7357 prop, nullptr, "rna_DataTransferModifier_polys_data_types_set", nullptr);
7358 RNA_def_property_update(prop, 0, "rna_DataTransferModifier_data_types_update");
7359
7360 /* Mapping methods. */
7361 prop = RNA_def_enum(srna,
7362 "vert_mapping",
7365 "Vertex Mapping",
7366 "Method used to map source vertices to destination ones");
7367 RNA_def_property_enum_sdna(prop, nullptr, "vmap_mode");
7368 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7369
7370 prop = RNA_def_enum(srna,
7371 "edge_mapping",
7374 "Edge Mapping",
7375 "Method used to map source edges to destination ones");
7376 RNA_def_property_enum_sdna(prop, nullptr, "emap_mode");
7377 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7378
7379 prop = RNA_def_enum(srna,
7380 "loop_mapping",
7383 "Face Corner Mapping",
7384 "Method used to map source faces' corners to destination ones");
7385 RNA_def_property_enum_sdna(prop, nullptr, "lmap_mode");
7386 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7387
7388 prop = RNA_def_enum(srna,
7389 "poly_mapping",
7392 "Face Mapping",
7393 "Method used to map source faces to destination ones");
7394 RNA_def_property_enum_sdna(prop, nullptr, "pmap_mode");
7395 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7396
7397 /* Mapping options and filtering. */
7398 prop = RNA_def_boolean(
7399 srna,
7400 "use_max_distance",
7401 false,
7402 "Only Neighbor Geometry",
7403 "Source elements must be closer than given distance from destination one");
7405 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7406
7407 prop = RNA_def_float(
7408 srna,
7409 "max_distance",
7410 1.0f,
7411 0.0f,
7412 FLT_MAX,
7413 "Max Distance",
7414 "Maximum allowed distance between source and destination element, for non-topology mappings",
7415 0.0f,
7416 100.0f);
7417 RNA_def_property_float_sdna(prop, nullptr, "map_max_distance");
7419 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7420
7421 prop = RNA_def_float(
7422 srna,
7423 "ray_radius",
7424 0.0f,
7425 0.0f,
7426 FLT_MAX,
7427 "Ray Radius",
7428 "'Width' of rays (especially useful when raycasting against vertices or edges)",
7429 0.0f,
7430 10.0f);
7431 RNA_def_property_float_sdna(prop, nullptr, "map_ray_radius");
7433 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7434
7435 prop = RNA_def_float(
7436 srna,
7437 "islands_precision",
7438 0.0f,
7439 0.0f,
7440 1.0f,
7441 "Islands Precision",
7442 "Factor controlling precision of islands handling "
7443 "(typically, 0.1 should be enough, higher values can make things really slow)",
7444 0.0f,
7445 1.0f);
7447 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7448
7449 /* How to handle multi-layers types of data. */
7450 prop = RNA_def_enum(srna,
7451 "layers_vgroup_select_src",
7454 "Source Layers Selection",
7455 "Which layers to transfer, in case of multi-layers types");
7456 RNA_def_property_enum_sdna(prop, nullptr, "layers_select_src[DT_MULTILAYER_INDEX_MDEFORMVERT]");
7458 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_src_itemf");
7459 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7460
7461# if 0
7462 prop = RNA_def_enum(srna,
7463 "layers_shapekey_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_SHAPEKEY]");
7470 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_src_itemf");
7471 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7472# endif
7473
7474 prop = RNA_def_enum(srna,
7475 "layers_vcol_vert_select_src",
7478 "Source Layers Selection",
7479 "Which layers to transfer, in case of multi-layers types");
7480 RNA_def_property_enum_sdna(prop, nullptr, "layers_select_src[DT_MULTILAYER_INDEX_VCOL_VERT]");
7482 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_src_itemf");
7483 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7484
7485 prop = RNA_def_enum(srna,
7486 "layers_vcol_loop_select_src",
7489 "Source Layers Selection",
7490 "Which layers to transfer, in case of multi-layers types");
7491 RNA_def_property_enum_sdna(prop, nullptr, "layers_select_src[DT_MULTILAYER_INDEX_VCOL_LOOP]");
7493 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_src_itemf");
7494 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7495
7496 prop = RNA_def_enum(srna,
7497 "layers_uv_select_src",
7500 "Source Layers Selection",
7501 "Which layers to transfer, in case of multi-layers types");
7502 RNA_def_property_enum_sdna(prop, nullptr, "layers_select_src[DT_MULTILAYER_INDEX_UV]");
7504 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_src_itemf");
7505 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7506
7507 prop = RNA_def_enum(srna,
7508 "layers_vgroup_select_dst",
7511 "Destination Layers Matching",
7512 "How to match source and destination layers");
7513 RNA_def_property_enum_sdna(prop, nullptr, "layers_select_dst[DT_MULTILAYER_INDEX_MDEFORMVERT]");
7515 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_dst_itemf");
7516 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7517
7518# if 0
7519 prop = RNA_def_enum(srna,
7520 "layers_shapekey_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_SHAPEKEY]");
7527 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_dst_itemf");
7528 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7529# endif
7530
7531 prop = RNA_def_enum(srna,
7532 "layers_vcol_vert_select_dst",
7535 "Destination Layers Matching",
7536 "How to match source and destination layers");
7537 RNA_def_property_enum_sdna(prop, nullptr, "layers_select_dst[DT_MULTILAYER_INDEX_VCOL_VERT]");
7539 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_dst_itemf");
7540 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7541
7542 prop = RNA_def_enum(srna,
7543 "layers_vcol_loop_select_dst",
7546 "Destination Layers Matching",
7547 "How to match source and destination layers");
7548 RNA_def_property_enum_sdna(prop, nullptr, "layers_select_dst[DT_MULTILAYER_INDEX_VCOL_LOOP]");
7550 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_dst_itemf");
7551 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7552
7553 prop = RNA_def_enum(srna,
7554 "layers_uv_select_dst",
7557 "Destination Layers Matching",
7558 "How to match source and destination layers");
7559 RNA_def_property_enum_sdna(prop, nullptr, "layers_select_dst[DT_MULTILAYER_INDEX_UV]");
7561 prop, nullptr, nullptr, "rna_DataTransferModifier_layers_select_dst_itemf");
7562 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7563
7564 /* Mix stuff */
7565 prop = RNA_def_enum(srna,
7566 "mix_mode",
7569 "Mix Mode",
7570 "How to affect destination elements with source values");
7571 RNA_def_property_enum_funcs(prop, nullptr, nullptr, "rna_DataTransferModifier_mix_mode_itemf");
7572 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7573
7574 prop = RNA_def_float_factor(
7575 srna,
7576 "mix_factor",
7577 0.0f,
7578 0.0f,
7579 1.0f,
7580 "Mix Factor",
7581 "Factor to use when applying data to destination (exact behavior depends on mix mode, "
7582 "multiplied with weights from vertex group when defined)",
7583 0.0f,
7584 1.0f);
7585 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7586
7587 prop = RNA_def_string(srna,
7588 "vertex_group",
7589 nullptr,
7591 "Vertex Group",
7592 "Vertex group name for selecting the affected areas");
7593 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
7595 prop, nullptr, nullptr, "rna_DataTransferModifier_defgrp_name_set");
7596 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7597
7598 prop = RNA_def_boolean(
7599 srna, "invert_vertex_group", false, "Invert", "Invert vertex group influence");
7601 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7602
7604}
7605
7607{
7608 StructRNA *srna;
7609 PropertyRNA *prop;
7610
7611 static const EnumPropertyItem prop_mode_items[] = {
7613 "RADIAL",
7614 0,
7615 "Radial",
7616 "From an ellipsoid (shape defined by the boundbox's dimensions, target is optional)"},
7618 "DIRECTIONAL",
7619 0,
7620 "Directional",
7621 "Normals 'track' (point to) the target object"},
7622 {0, nullptr, 0, nullptr, nullptr},
7623 };
7624
7625 static const EnumPropertyItem prop_mix_mode_items[] = {
7626 {MOD_NORMALEDIT_MIX_COPY, "COPY", 0, "Copy", "Copy new normals (overwrite existing)"},
7627 {MOD_NORMALEDIT_MIX_ADD, "ADD", 0, "Add", "Copy sum of new and old normals"},
7628 {MOD_NORMALEDIT_MIX_SUB, "SUB", 0, "Subtract", "Copy new normals minus old normals"},
7630 "MUL",
7631 0,
7632 "Multiply",
7633 "Copy product of old and new normals (not cross product)"},
7634 {0, nullptr, 0, nullptr, nullptr},
7635 };
7636
7637 srna = RNA_def_struct(brna, "NormalEditModifier", "Modifier");
7639 srna, "Normal Edit Modifier", "Modifier affecting/generating custom normals");
7640 RNA_def_struct_sdna(srna, "NormalEditModifierData");
7641 RNA_def_struct_ui_icon(srna, ICON_MOD_NORMALEDIT);
7642
7644
7645 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
7646 RNA_def_property_enum_items(prop, prop_mode_items);
7647 RNA_def_property_ui_text(prop, "Mode", "How to affect (generate) normals");
7648 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7649
7650 prop = RNA_def_float_array(srna,
7651 "offset",
7652 3,
7653 nullptr,
7654 -FLT_MAX,
7655 FLT_MAX,
7656 "Offset",
7657 "Offset from object's center",
7658 -100.0f,
7659 100.0f);
7661 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7662
7663 prop = RNA_def_property(srna, "mix_mode", PROP_ENUM, PROP_NONE);
7664 RNA_def_property_enum_items(prop, prop_mix_mode_items);
7665 RNA_def_property_ui_text(prop, "Mix Mode", "How to mix generated normals with existing ones");
7666 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7667
7668 prop = RNA_def_property(srna, "mix_factor", PROP_FLOAT, PROP_FACTOR);
7669 RNA_def_property_range(prop, 0.0, 1.0);
7671 prop, "Mix Factor", "How much of generated normals to mix with existing ones");
7672 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7673
7674 prop = RNA_def_property(srna, "mix_limit", PROP_FLOAT, PROP_ANGLE);
7675 RNA_def_property_range(prop, 0.0, DEG2RADF(180.0f));
7676 RNA_def_property_ui_text(prop, "Max Angle", "Maximum angle between old and new normals");
7677 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7678
7679 prop = RNA_def_property(srna, "no_polynors_fix", PROP_BOOLEAN, PROP_NONE);
7683 "Lock Polygon Normals",
7684 "Do not flip polygons when their normals are not consistent "
7685 "with their newly computed custom vertex normals");
7686 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7687
7688 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
7689 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
7691 prop, "Vertex Group", "Vertex group name for selecting/weighting the affected areas");
7692 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_NormalEditModifier_defgrp_name_set");
7693 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7694
7695 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
7697 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
7698 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7699
7700 prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
7701 RNA_def_property_ui_text(prop, "Target", "Target object used to affect normals");
7703 prop, nullptr, "rna_NormalEditModifier_target_set", nullptr, nullptr);
7705 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
7706
7707 prop = RNA_def_property(srna, "use_direction_parallel", PROP_BOOLEAN, PROP_NONE);
7711 "Parallel Normals",
7712 "Use same direction for all normals, from origin to target's center "
7713 "(Directional mode only)");
7714 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7715
7717}
7718
7720{
7721 StructRNA *srna;
7722 PropertyRNA *prop;
7723
7724 srna = RNA_def_struct(brna, "SurfaceDeformModifier", "Modifier");
7725 RNA_def_struct_ui_text(srna, "SurfaceDeform Modifier", "");
7726 RNA_def_struct_sdna(srna, "SurfaceDeformModifierData");
7727 RNA_def_struct_ui_icon(srna, ICON_MOD_MESHDEFORM);
7728
7730
7731 prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
7732 RNA_def_property_ui_text(prop, "Target", "Mesh object to deform with");
7734 prop, nullptr, "rna_SurfaceDeformModifier_target_set", nullptr, "rna_Mesh_object_poll");
7736 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
7737
7738 prop = RNA_def_property(srna, "falloff", PROP_FLOAT, PROP_NONE);
7739 RNA_def_property_range(prop, 2.0f, 16.0f);
7741 prop, "Interpolation Falloff", "Controls how much nearby polygons influence deformation");
7742 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7743
7744 prop = RNA_def_property(srna, "is_bound", PROP_BOOLEAN, PROP_NONE);
7745 RNA_def_property_boolean_funcs(prop, "rna_SurfaceDeformModifier_is_bound_get", nullptr);
7746 RNA_def_property_ui_text(prop, "Bound", "Whether geometry has been bound to target mesh");
7748
7749 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
7750 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
7752 prop, "Vertex Group", "Vertex group name for selecting/weighting the affected areas");
7754 prop, nullptr, nullptr, "rna_SurfaceDeformModifier_defgrp_name_set");
7755 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7756
7757 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
7759 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
7760 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7761
7762 prop = RNA_def_property(srna, "use_sparse_bind", PROP_BOOLEAN, PROP_NONE);
7763 RNA_def_property_boolean_sdna(prop, nullptr, "flags", MOD_SDEF_SPARSE_BIND);
7766 prop,
7767 "Sparse Bind",
7768 "Only record binding data for vertices matching the vertex group at the time of bind");
7769 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7770
7771 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
7772 RNA_def_property_range(prop, -100, 100);
7773 RNA_def_property_ui_range(prop, -100, 100, 10, 2);
7774 RNA_def_property_ui_text(prop, "Strength", "Strength of modifier deformations");
7775 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7776
7778}
7779
7781{
7782 StructRNA *srna;
7783 PropertyRNA *prop;
7784
7785 static EnumPropertyItem prop_weighting_mode_items[] = {
7787 "FACE_AREA",
7788 0,
7789 "Face Area",
7790 "Generate face area weighted normals"},
7792 "CORNER_ANGLE",
7793 0,
7794 "Corner Angle",
7795 "Generate corner angle weighted normals"},
7797 "FACE_AREA_WITH_ANGLE",
7798 0,
7799 "Face Area & Angle",
7800 "Generated normals weighted by both face area and angle"},
7801 {0, nullptr, 0, nullptr, nullptr},
7802 };
7803
7804 srna = RNA_def_struct(brna, "WeightedNormalModifier", "Modifier");
7805 RNA_def_struct_ui_text(srna, "WeightedNormal Modifier", "");
7806 RNA_def_struct_sdna(srna, "WeightedNormalModifierData");
7807 RNA_def_struct_ui_icon(srna, ICON_MOD_NORMALEDIT);
7808
7810
7811 prop = RNA_def_property(srna, "weight", PROP_INT, PROP_NONE);
7812 RNA_def_property_range(prop, 1, 100);
7813 RNA_def_property_ui_range(prop, 1, 100, 1, -1);
7815 "Weight",
7816 "Corrective factor applied to faces' weights, 50 is neutral, "
7817 "lower values increase weight of weak faces, "
7818 "higher values increase weight of strong faces");
7819 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7820
7821 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
7822 RNA_def_property_enum_items(prop, prop_weighting_mode_items);
7823 RNA_def_property_ui_text(prop, "Weighting Mode", "Weighted vertex normal mode to use");
7824 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7825
7826 prop = RNA_def_property(srna, "thresh", PROP_FLOAT, PROP_NONE);
7827 RNA_def_property_range(prop, 0, 10);
7828 RNA_def_property_ui_range(prop, 0, 10, 1, 2);
7830 prop, "Threshold", "Threshold value for different weights to be considered equal");
7831 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7832
7833 prop = RNA_def_property(srna, "keep_sharp", PROP_BOOLEAN, PROP_NONE);
7836 "Keep Sharp",
7837 "Keep sharp edges as computed for default split normals, "
7838 "instead of setting a single weighted normal for each vertex");
7839 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7840
7841 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
7842 RNA_def_property_string_sdna(prop, nullptr, "defgrp_name");
7844 prop, "Vertex Group", "Vertex group name for modifying the selected areas");
7846 prop, nullptr, nullptr, "rna_WeightedNormalModifier_defgrp_name_set");
7847 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7848
7849 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
7851 RNA_def_property_ui_text(prop, "Invert", "Invert vertex group influence");
7852 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7853
7854 prop = RNA_def_property(srna, "use_face_influence", PROP_BOOLEAN, PROP_NONE);
7856 RNA_def_property_ui_text(prop, "Face Influence", "Use influence of face for weighting");
7857 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7858
7860}
7861
7863{
7864 StructRNA *srna;
7865 PropertyRNA *prop;
7866
7867 srna = RNA_def_struct(brna, "NodesModifierDataBlock", nullptr);
7868 RNA_def_struct_sdna(srna, "NodesModifierDataBlock");
7869
7871
7872 prop = RNA_def_property(srna, "id_name", PROP_STRING, PROP_NONE);
7875 prop, "Data-Block Name", "Name that is mapped to the referenced data-block");
7876 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7877
7878 prop = RNA_def_property(srna, "lib_name", PROP_STRING, PROP_NONE);
7881 "Library Name",
7882 "Used when the data block is not local to the current .blend file but "
7883 "is linked from some library");
7884 RNA_def_property_update(prop, 0, "rna_Modifier_update");
7885
7886 prop = RNA_def_property(srna, "id", PROP_POINTER, PROP_NONE);
7887 RNA_def_property_struct_type(prop, "ID");
7890 prop, nullptr, nullptr, "rna_NodesModifierBake_data_block_typef", nullptr);
7891 RNA_def_property_ui_text(prop, "Data-Block", "");
7892 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
7893
7894 prop = RNA_def_property(srna, "id_type", PROP_ENUM, PROP_NONE);
7898
7900}
7901
7903{
7904 StructRNA *srna;
7905 PropertyRNA *prop;
7906
7907 srna = RNA_def_struct(brna, "NodesModifierBakeDataBlocks", nullptr);
7908 RNA_def_struct_sdna(srna, "NodesModifierBake");
7910 srna, "Data-Blocks", "Collection of data-blocks that can be referenced by baked data");
7911
7912 prop = RNA_def_property(srna, "active_index", PROP_INT, PROP_NONE);
7913 RNA_def_property_int_sdna(prop, nullptr, "active_data_block");
7914}
7915
7918 "INHERIT",
7919 0,
7920 "Inherit from Modifier",
7921 "Use setting from the modifier"},
7923 "PACKED",
7924 0,
7925 "Packed",
7926 "Pack the baked data into the .blend file"},
7928 "DISK",
7929 0,
7930 "Disk",
7931 "Store the baked data in a directory on disk"},
7932 {0, nullptr, 0, nullptr, nullptr},
7933};
7934
7937 "PACKED",
7938 0,
7939 "Packed",
7940 "Pack the baked data into the .blend file"},
7942 "DISK",
7943 0,
7944 "Disk",
7945 "Store the baked data in a directory on disk"},
7946 {0, nullptr, 0, nullptr, nullptr},
7947};
7948
7950{
7952
7953 static EnumPropertyItem bake_mode_items[] = {
7954 {NODES_MODIFIER_BAKE_MODE_ANIMATION, "ANIMATION", 0, "Animation", "Bake a frame range"},
7955 {NODES_MODIFIER_BAKE_MODE_STILL, "STILL", 0, "Still", "Bake a single frame"},
7956 {0, nullptr, 0, nullptr, nullptr},
7957 };
7958
7959 StructRNA *srna;
7960 PropertyRNA *prop;
7961
7963
7964 srna = RNA_def_struct(brna, "NodesModifierBake", nullptr);
7965 RNA_def_struct_ui_text(srna, "Nodes Modifier Bake", "");
7966
7967 prop = RNA_def_property(srna, "directory", PROP_STRING, PROP_DIRPATH);
7969 RNA_def_property_ui_text(prop, "Directory", "Location on disk where the bake data is stored");
7970 RNA_def_property_update(prop, 0, "rna_NodesModifier_bake_update");
7971
7972 prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_TIME);
7973 RNA_def_property_ui_text(prop, "Start Frame", "Frame where the baking starts");
7974 RNA_def_property_update(prop, 0, "rna_NodesModifier_bake_update");
7975
7976 prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_TIME);
7977 RNA_def_property_ui_text(prop, "End Frame", "Frame where the baking ends");
7978 RNA_def_property_update(prop, 0, "rna_NodesModifier_bake_update");
7979
7980 prop = RNA_def_property(srna, "use_custom_simulation_frame_range", PROP_BOOLEAN, PROP_NONE);
7984 prop, "Custom Simulation Frame Range", "Override the simulation frame range from the scene");
7985 RNA_def_property_update(prop, 0, "rna_NodesModifier_bake_update");
7986
7987 prop = RNA_def_property(srna, "use_custom_path", PROP_BOOLEAN, PROP_NONE);
7990 prop, "Custom Path", "Specify a path where the baked data should be stored manually");
7991 RNA_def_property_update(prop, 0, "rna_NodesModifier_bake_update");
7992
7993 prop = RNA_def_property(srna, "bake_target", PROP_ENUM, PROP_NONE);
7995 RNA_def_property_ui_text(prop, "Bake Target", "Where to store the baked data");
7996 RNA_def_property_update(prop, 0, "rna_NodesModifier_bake_update");
7997
7998 prop = RNA_def_property(srna, "bake_mode", PROP_ENUM, PROP_NONE);
7999 RNA_def_property_enum_items(prop, bake_mode_items);
8000 RNA_def_property_ui_text(prop, "Bake Mode", "");
8001 RNA_def_property_update(prop, 0, "rna_NodesModifier_bake_update");
8002
8003 prop = RNA_def_property(srna, "bake_id", PROP_INT, PROP_NONE);
8005 "Bake ID",
8006 "Identifier for this bake which remains unchanged even when the bake "
8007 "node is renamed, grouped or ungrouped");
8008 RNA_def_property_int_sdna(prop, nullptr, "id");
8010
8011 prop = RNA_def_property(srna, "node", PROP_POINTER, PROP_NONE);
8012 RNA_def_property_struct_type(prop, "Node");
8014 "Node",
8015 "Bake node or simulation output node that corresponds to this bake. "
8016 "This node may be deeply nested in the modifier node group. It can be "
8017 "none in some cases like missing linked data blocks.");
8019 prop, "rna_NodesModifierBake_node_get", nullptr, nullptr, nullptr);
8020
8021 prop = RNA_def_property(srna, "data_blocks", PROP_COLLECTION, PROP_NONE);
8022 RNA_def_property_struct_type(prop, "NodesModifierDataBlock");
8023 RNA_def_property_collection_sdna(prop, nullptr, "data_blocks", "data_blocks_num");
8024 RNA_def_property_srna(prop, "NodesModifierBakeDataBlocks");
8026
8028}
8029
8031{
8032 StructRNA *srna;
8033
8034 srna = RNA_def_struct(brna, "NodesModifierBakes", nullptr);
8035 RNA_def_struct_sdna(srna, "NodesModifierData");
8036 RNA_def_struct_ui_text(srna, "Bakes", "Bake data for every bake node");
8037}
8038
8040{
8041 StructRNA *srna;
8042 PropertyRNA *prop;
8043
8044 srna = RNA_def_struct(brna, "NodesModifierPanel", nullptr);
8045 RNA_def_struct_ui_text(srna, "Nodes Modifier Panel", "");
8046
8047 prop = RNA_def_property(srna, "is_open", PROP_BOOLEAN, PROP_NONE);
8049 RNA_def_property_ui_text(prop, "Is Open", "Whether the panel is expanded or closed");
8052}
8053
8055{
8056 StructRNA *srna;
8057
8058 srna = RNA_def_struct(brna, "NodesModifierPanels", nullptr);
8059 RNA_def_struct_sdna(srna, "NodesModifierData");
8060 RNA_def_struct_ui_text(srna, "Panels", "State of all panels defined by the node group");
8061}
8062
8064{
8065 StructRNA *srna;
8066 PropertyRNA *prop;
8067
8068 srna = RNA_def_struct(brna, "NodesModifierWarning", nullptr);
8070 "Nodes Modifier Warning",
8071 "Warning created during evaluation of a geometry nodes modifier");
8072
8073 prop = RNA_def_property(srna, "message", PROP_STRING, PROP_NONE);
8074 RNA_def_property_ui_text(prop, "Message", nullptr);
8077 "rna_NodesModifierWarning_message_get",
8078 "rna_NodesModifierWarning_message_length",
8079 nullptr);
8080
8081 prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
8082 RNA_def_property_ui_text(prop, "Type", nullptr);
8085 RNA_def_property_enum_funcs(prop, "rna_NodesModifierWarning_type_get", nullptr, nullptr);
8086}
8087
8089{
8090 StructRNA *srna;
8091 PropertyRNA *prop;
8092
8094
8097
8100
8102
8103 srna = RNA_def_struct(brna, "NodesModifier", "Modifier");
8104 RNA_def_struct_ui_text(srna, "Nodes Modifier", "");
8105 RNA_def_struct_sdna(srna, "NodesModifierData");
8106 RNA_def_struct_idprops_func(srna, "rna_NodesModifier_properties");
8107 RNA_def_struct_ui_icon(srna, ICON_GEOMETRY_NODES);
8108
8110
8111 prop = RNA_def_property(srna, "node_group", PROP_POINTER, PROP_NONE);
8112 RNA_def_property_ui_text(prop, "Node Group", "Node group that controls what this modifier does");
8114 prop, nullptr, nullptr, nullptr, "rna_NodesModifier_node_group_poll");
8116 RNA_def_property_update(prop, 0, "rna_NodesModifier_node_group_update");
8117
8118 prop = RNA_def_property(srna, "bake_directory", PROP_STRING, PROP_DIRPATH);
8121 prop, "Simulation Bake Directory", "Location on disk where the bake data is stored");
8122 RNA_def_property_update(prop, 0, "rna_NodesModifier_bake_update");
8123
8124 prop = RNA_def_property(srna, "bake_target", PROP_ENUM, PROP_NONE);
8126 RNA_def_property_ui_text(prop, "Bake Target", "Where to store the baked data");
8127 RNA_def_property_update(prop, 0, "rna_NodesModifier_bake_update");
8128
8129 prop = RNA_def_property(srna, "bakes", PROP_COLLECTION, PROP_NONE);
8130 RNA_def_property_struct_type(prop, "NodesModifierBake");
8131 RNA_def_property_collection_sdna(prop, nullptr, "bakes", "bakes_num");
8132 RNA_def_property_srna(prop, "NodesModifierBakes");
8133
8134 prop = RNA_def_property(srna, "panels", PROP_COLLECTION, PROP_NONE);
8135 RNA_def_property_struct_type(prop, "NodesModifierPanel");
8136 RNA_def_property_collection_sdna(prop, nullptr, "panels", "panels_num");
8137 RNA_def_property_srna(prop, "NodesModifierPanels");
8138
8139 prop = RNA_def_property(srna, "show_group_selector", PROP_BOOLEAN, PROP_NONE);
8141 prop, nullptr, "flag", NODES_MODIFIER_HIDE_DATABLOCK_SELECTOR);
8142 RNA_def_property_ui_text(prop, "Show Node Group", "");
8145
8146 prop = RNA_def_property(srna, "node_warnings", PROP_COLLECTION, PROP_NONE);
8148 "rna_NodesModifier_node_warnings_iterator_begin",
8149 "rna_NodesModifier_node_warnings_iterator_next",
8150 nullptr,
8151 "rna_NodesModifier_node_warnings_iterator_get",
8152 "rna_NodesModifier_node_warnings_length",
8153 nullptr,
8154 nullptr,
8155 nullptr);
8156 RNA_def_property_struct_type(prop, "NodesModifierWarning");
8159
8161 srna, "open_output_attributes_panel", NODES_MODIFIER_PANEL_OUTPUT_ATTRIBUTES);
8165 srna, "open_named_attributes_panel", NODES_MODIFIER_PANEL_NAMED_ATTRIBUTES);
8167 srna, "open_bake_data_blocks_panel", NODES_MODIFIER_PANEL_BAKE_DATA_BLOCKS);
8169
8171}
8172
8174{
8175 StructRNA *srna;
8176 PropertyRNA *prop;
8177
8178 static EnumPropertyItem resolution_mode_items[] = {
8180 "VOXEL_AMOUNT",
8181 0,
8182 "Voxel Amount",
8183 "Desired number of voxels along one axis"},
8185 "VOXEL_SIZE",
8186 0,
8187 "Voxel Size",
8188 "Desired voxel side length"},
8189 {0, nullptr, 0, nullptr, nullptr},
8190 };
8191
8192 srna = RNA_def_struct(brna, "MeshToVolumeModifier", "Modifier");
8193 RNA_def_struct_ui_text(srna, "Mesh to Volume Modifier", "");
8194 RNA_def_struct_sdna(srna, "MeshToVolumeModifierData");
8195 RNA_def_struct_ui_icon(srna, ICON_VOLUME_DATA); /* TODO: Use correct icon. */
8196
8198
8199 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
8200 RNA_def_property_ui_text(prop, "Object", "Object");
8202 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8203
8204 prop = RNA_def_property(srna, "resolution_mode", PROP_ENUM, PROP_NONE);
8205 RNA_def_property_enum_items(prop, resolution_mode_items);
8207 prop, "Resolution Mode", "Mode for how the desired voxel size is specified");
8208 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8209
8210 /* NOTE: allow zero (which skips computation), to avoid zero clamping
8211 * to a small value which is likely to run out of memory, see: #130526. */
8212 prop = RNA_def_property(srna, "voxel_size", PROP_FLOAT, PROP_NONE);
8214 prop, "Voxel Size", "Smaller values result in a higher resolution output");
8215 RNA_def_property_range(prop, 0.0, FLT_MAX);
8216 RNA_def_property_ui_range(prop, 0.0, FLT_MAX, 0.01, 4);
8217 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8218
8219 prop = RNA_def_property(srna, "voxel_amount", PROP_INT, PROP_NONE);
8220 RNA_def_property_ui_text(prop, "Voxel Amount", "Approximate number of voxels along one axis");
8221 RNA_def_property_range(prop, 0, INT_MAX);
8222 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8223
8224 prop = RNA_def_property(srna, "interior_band_width", PROP_FLOAT, PROP_NONE);
8226 prop, "Interior Band Width", "Width of the gradient inside of the mesh");
8227 RNA_def_property_range(prop, 0.0, FLT_MAX);
8228 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8229
8230 prop = RNA_def_property(srna, "density", PROP_FLOAT, PROP_NONE);
8231 RNA_def_property_ui_text(prop, "Density", "Density of the new volume");
8232 RNA_def_property_range(prop, 0.0, FLT_MAX);
8233 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8234
8236}
8237
8239{
8240 static const EnumPropertyItem prop_texture_map_mode_items[] = {
8242 "LOCAL",
8243 0,
8244 "Local",
8245 "Use the local coordinate system for the texture coordinates"},
8247 "GLOBAL",
8248 0,
8249 "Global",
8250 "Use the global coordinate system for the texture coordinates"},
8252 "OBJECT",
8253 0,
8254 "Object",
8255 "Use the linked object's local coordinate system for the texture coordinates"},
8256 {0, nullptr, 0, nullptr, nullptr},
8257 };
8258
8259 StructRNA *srna;
8260 PropertyRNA *prop;
8261
8262 srna = RNA_def_struct(brna, "VolumeDisplaceModifier", "Modifier");
8263 RNA_def_struct_ui_text(srna, "Volume Displace Modifier", "");
8264 RNA_def_struct_sdna(srna, "VolumeDisplaceModifierData");
8265 RNA_def_struct_ui_icon(srna, ICON_VOLUME_DATA); /* TODO: Use correct icon. */
8266
8268
8269 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
8270 RNA_def_property_ui_text(prop, "Strength", "Strength of the displacement");
8271 RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 0.1, 4);
8272 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8273
8274 prop = RNA_def_property(srna, "texture", PROP_POINTER, PROP_NONE);
8275 RNA_def_property_ui_text(prop, "Texture", "");
8277 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8278
8279 prop = RNA_def_property(srna, "texture_map_mode", PROP_ENUM, PROP_NONE);
8280 RNA_def_property_enum_items(prop, prop_texture_map_mode_items);
8281 RNA_def_property_ui_text(prop, "Texture Mapping Mode", "");
8282 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8283
8284 prop = RNA_def_property(srna, "texture_map_object", PROP_POINTER, PROP_NONE);
8285 RNA_def_property_ui_text(prop, "Object", "Object to use for texture mapping");
8287 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8288
8289 prop = RNA_def_property(srna, "texture_mid_level", PROP_FLOAT, PROP_XYZ);
8291 prop, "Texture Mid Level", "Subtracted from the texture color to get a displacement vector");
8293 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1f, 5);
8294 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8295
8296 prop = RNA_def_property(srna, "texture_sample_radius", PROP_FLOAT, PROP_FACTOR);
8298 prop,
8299 "Texture Sample Radius",
8300 "Smaller values result in better performance but might cut off the volume");
8301 RNA_def_property_range(prop, 0.0f, FLT_MAX);
8302 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1f, 5);
8303 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8304
8306}
8307
8309{
8310 StructRNA *srna;
8311 PropertyRNA *prop;
8312
8313 static EnumPropertyItem resolution_mode_items[] = {
8315 "GRID",
8316 0,
8317 "Grid",
8318 "Use resolution of the volume grid"},
8320 "VOXEL_AMOUNT",
8321 0,
8322 "Voxel Amount",
8323 "Desired number of voxels along one axis"},
8325 "VOXEL_SIZE",
8326 0,
8327 "Voxel Size",
8328 "Desired voxel side length"},
8329 {0, nullptr, 0, nullptr, nullptr},
8330 };
8331
8332 srna = RNA_def_struct(brna, "VolumeToMeshModifier", "Modifier");
8333 RNA_def_struct_ui_text(srna, "Volume to Mesh Modifier", "");
8334 RNA_def_struct_sdna(srna, "VolumeToMeshModifierData");
8335 RNA_def_struct_ui_icon(srna, ICON_VOLUME_DATA); /* TODO: Use correct icon. */
8336
8338
8339 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
8340 RNA_def_property_ui_text(prop, "Object", "Object");
8342 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8343
8344 prop = RNA_def_property(srna, "threshold", PROP_FLOAT, PROP_NONE);
8346 prop, "Threshold", "Voxels with a larger value are inside the generated mesh");
8347 RNA_def_property_range(prop, 0.0f, FLT_MAX);
8348 RNA_def_property_ui_range(prop, 0.001f, 1.0f, 0.1f, 5);
8349 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8350
8351 prop = RNA_def_property(srna, "adaptivity", PROP_FLOAT, PROP_NONE);
8353 prop,
8354 "Adaptivity",
8355 "Reduces the final face count by simplifying geometry where detail is not needed");
8356 RNA_def_property_range(prop, 0.0f, 1.0f);
8357 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8358
8359 prop = RNA_def_property(srna, "use_smooth_shade", PROP_BOOLEAN, PROP_NONE);
8362 prop, "Smooth Shading", "Output faces with smooth shading rather than flat shaded");
8363 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8364
8365 prop = RNA_def_property(srna, "grid_name", PROP_STRING, PROP_NONE);
8367 prop, "Grid Name", "Grid in the volume object that is converted to a mesh");
8368 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8369
8370 prop = RNA_def_property(srna, "resolution_mode", PROP_ENUM, PROP_NONE);
8371 RNA_def_property_enum_items(prop, resolution_mode_items);
8373 prop, "Resolution Mode", "Mode for how the desired voxel size is specified");
8374 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8375
8376 /* NOTE: allow zero (which skips computation), to avoid zero clamping
8377 * to a small value which is likely to run out of memory, see: #130526. */
8378 prop = RNA_def_property(srna, "voxel_size", PROP_FLOAT, PROP_NONE);
8380 prop, "Voxel Size", "Smaller values result in a higher resolution output");
8381 RNA_def_property_range(prop, 0.0, FLT_MAX);
8382 RNA_def_property_ui_range(prop, 0.0, FLT_MAX, 0.01, 4);
8383 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8384
8385 prop = RNA_def_property(srna, "voxel_amount", PROP_INT, PROP_NONE);
8386 RNA_def_property_ui_text(prop, "Voxel Amount", "Approximate number of voxels along one axis");
8387 RNA_def_property_range(prop, 0, INT_MAX);
8388 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8389
8391}
8392
8394{
8395 PropertyRNA *prop;
8396
8397 prop = RNA_def_property(srna, "tree_node_filter", PROP_STRING, PROP_NONE);
8398 RNA_def_property_string_sdna(prop, nullptr, "influence.layer_name");
8399 RNA_def_property_ui_text(prop, "Layer", "Layer name");
8400 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8401
8402 prop = RNA_def_property(srna, "use_layer_pass_filter", PROP_BOOLEAN, PROP_NONE);
8404 prop, nullptr, "influence.flag", GREASE_PENCIL_INFLUENCE_USE_LAYER_PASS_FILTER);
8405 RNA_def_property_ui_text(prop, "Use Layer Pass", "Use layer pass filter");
8406 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8407
8408 prop = RNA_def_property(srna, "layer_pass_filter", PROP_INT, PROP_NONE);
8409 RNA_def_property_int_sdna(prop, nullptr, "influence.layer_pass");
8410 RNA_def_property_range(prop, 0, 100);
8411 RNA_def_property_ui_text(prop, "Layer Pass", "Layer pass filter");
8412 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8413
8414 prop = RNA_def_property(srna, "invert_layer_filter", PROP_BOOLEAN, PROP_NONE);
8416 prop, nullptr, "influence.flag", GREASE_PENCIL_INFLUENCE_INVERT_LAYER_FILTER);
8417 RNA_def_property_ui_text(prop, "Invert Layer", "Invert layer filter");
8418 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8419
8420 prop = RNA_def_property(srna, "invert_layer_pass_filter", PROP_BOOLEAN, PROP_NONE);
8422 prop, nullptr, "influence.flag", GREASE_PENCIL_INFLUENCE_INVERT_LAYER_PASS_FILTER);
8423 RNA_def_property_ui_text(prop, "Invert Layer Pass", "Invert layer pass filter");
8424 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8425
8426 prop = RNA_def_property(srna, "use_layer_group_filter", PROP_BOOLEAN, PROP_NONE);
8428 prop, nullptr, "influence.flag", GREASE_PENCIL_INFLUENCE_USE_LAYER_GROUP_FILTER);
8429 RNA_def_property_ui_text(prop, "Layer Group", "Filter by layer group name");
8430 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8431}
8432
8434 const char *material_set_fn)
8435{
8436 PropertyRNA *prop;
8437
8438 prop = RNA_def_property(srna, "material_filter", PROP_POINTER, PROP_NONE);
8439 RNA_def_property_pointer_sdna(prop, nullptr, "influence.material");
8442 prop, nullptr, material_set_fn, nullptr, "rna_GreasePencilModifier_material_poll");
8443 RNA_def_property_ui_text(prop, "Material", "Material used for filtering");
8444 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8445
8446 prop = RNA_def_property(srna, "use_material_pass_filter", PROP_BOOLEAN, PROP_NONE);
8448 prop, nullptr, "influence.flag", GREASE_PENCIL_INFLUENCE_USE_MATERIAL_PASS_FILTER);
8449 RNA_def_property_ui_text(prop, "Use Material Pass", "Use material pass filter");
8450 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8451
8452 prop = RNA_def_property(srna, "material_pass_filter", PROP_INT, PROP_NONE);
8453 RNA_def_property_int_sdna(prop, nullptr, "influence.material_pass");
8454 RNA_def_property_range(prop, 0, 100);
8455 RNA_def_property_ui_text(prop, "Material Pass", "Material pass");
8456 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8457
8458 prop = RNA_def_property(srna, "invert_material_filter", PROP_BOOLEAN, PROP_NONE);
8460 prop, nullptr, "influence.flag", GREASE_PENCIL_INFLUENCE_INVERT_MATERIAL_FILTER);
8461 RNA_def_property_ui_text(prop, "Invert Material", "Invert material filter");
8462 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8463
8464 prop = RNA_def_property(srna, "invert_material_pass_filter", PROP_BOOLEAN, PROP_NONE);
8466 prop, nullptr, "influence.flag", GREASE_PENCIL_INFLUENCE_INVERT_MATERIAL_PASS_FILTER);
8467 RNA_def_property_ui_text(prop, "Invert Material Pass", "Invert material pass filter");
8468 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8469}
8470
8472 const char *vertex_group_name_set_fn)
8473{
8474 PropertyRNA *prop;
8475
8476 prop = RNA_def_property(srna, "vertex_group_name", PROP_STRING, PROP_NONE);
8477 RNA_def_property_string_sdna(prop, nullptr, "influence.vertex_group_name");
8478 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
8479 RNA_def_property_string_funcs(prop, nullptr, nullptr, vertex_group_name_set_fn);
8480 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8481
8482 prop = RNA_def_property(srna, "invert_vertex_group", PROP_BOOLEAN, PROP_NONE);
8484 prop, nullptr, "influence.flag", GREASE_PENCIL_INFLUENCE_INVERT_VERTEX_GROUP);
8485 RNA_def_property_ui_text(prop, "Invert Vertex Group", "Invert vertex group weights");
8486 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8487}
8488
8490{
8491 PropertyRNA *prop;
8492
8493 prop = RNA_def_property(srna, "use_custom_curve", PROP_BOOLEAN, PROP_NONE);
8495 prop, nullptr, "influence.flag", GREASE_PENCIL_INFLUENCE_USE_CUSTOM_CURVE);
8497 prop, "Use Custom Curve", "Use a custom curve to define a factor along the strokes");
8498 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8499
8500 prop = RNA_def_property(srna, "custom_curve", PROP_POINTER, PROP_NONE);
8501 RNA_def_property_pointer_sdna(prop, nullptr, "influence.custom_curve");
8502 RNA_def_property_ui_text(prop, "Curve", "Custom curve to apply effect");
8503 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8504}
8505
8507{
8508 StructRNA *srna;
8509 PropertyRNA *prop;
8510 static const EnumPropertyItem color_mode_items[] = {
8511 {MOD_GREASE_PENCIL_COLOR_BOTH, "BOTH", 0, "Stroke & Fill", "Modify fill and stroke colors"},
8512 {MOD_GREASE_PENCIL_COLOR_STROKE, "STROKE", 0, "Stroke", "Modify stroke color only"},
8513 {MOD_GREASE_PENCIL_COLOR_FILL, "FILL", 0, "Fill", "Modify fill color only"},
8514 {MOD_GREASE_PENCIL_COLOR_HARDNESS, "HARDNESS", 0, "Hardness", "Modify stroke hardness"},
8515 {0, nullptr, 0, nullptr, nullptr},
8516 };
8517
8518 srna = RNA_def_struct(brna, "GreasePencilOpacityModifier", "Modifier");
8519 RNA_def_struct_ui_text(srna, "Grease Pencil Opacity Modifier", "");
8520 RNA_def_struct_sdna(srna, "GreasePencilOpacityModifierData");
8521 RNA_def_struct_ui_icon(srna, ICON_MOD_OPACITY);
8522
8525 srna, "rna_GreasePencilOpacityModifier_material_filter_set");
8527 srna, "rna_GreasePencilOpacityModifier_vertex_group_name_set");
8529
8530 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
8531
8533
8534 prop = RNA_def_property(srna, "color_mode", PROP_ENUM, PROP_NONE);
8535 RNA_def_property_enum_items(prop, color_mode_items);
8536 RNA_def_property_ui_text(prop, "Mode", "Attributes to modify");
8537 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8538
8539 prop = RNA_def_property(srna, "color_factor", PROP_FLOAT, PROP_NONE);
8540 RNA_def_property_float_sdna(prop, nullptr, "color_factor");
8541 RNA_def_property_ui_range(prop, 0, 2.0, 0.1, 2);
8543 nullptr,
8544 "rna_GreasePencilOpacityModifier_opacity_factor_max_set",
8545 "rna_GreasePencilOpacityModifier_opacity_factor_range");
8546 RNA_def_property_ui_text(prop, "Opacity Factor", "Factor of opacity");
8547 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8548
8549 prop = RNA_def_property(srna, "hardness_factor", PROP_FLOAT, PROP_NONE);
8550 RNA_def_property_float_sdna(prop, nullptr, "hardness_factor");
8551 RNA_def_property_range(prop, 0.0, FLT_MAX);
8552 RNA_def_property_ui_range(prop, 0.0, FLT_MAX, 0.1, 2);
8553 RNA_def_property_ui_text(prop, "Hardness Factor", "Factor of stroke hardness");
8554 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8555
8556 prop = RNA_def_property(srna, "use_weight_as_factor", PROP_BOOLEAN, PROP_NONE);
8558 prop, nullptr, "flag", MOD_GREASE_PENCIL_OPACITY_USE_WEIGHT_AS_FACTOR);
8560 prop, "Use Weight as Factor", "Use vertex group weight as factor instead of influence");
8561 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8562
8563 prop = RNA_def_property(srna, "use_uniform_opacity", PROP_BOOLEAN, PROP_NONE);
8565 prop, nullptr, "flag", MOD_GREASE_PENCIL_OPACITY_USE_UNIFORM_OPACITY);
8567 prop, "Uniform Opacity", "Replace the stroke opacity instead of modulating each point");
8568
8569 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8570
8572}
8573
8575{
8576 StructRNA *srna;
8577 PropertyRNA *prop;
8578
8579 static const EnumPropertyItem subdivision_type_items[] = {
8580 {MOD_GREASE_PENCIL_SUBDIV_CATMULL, "CATMULL_CLARK", 0, "Catmull-Clark", ""},
8581 {MOD_GREASE_PENCIL_SUBDIV_SIMPLE, "SIMPLE", 0, "Simple", ""},
8582 {0, nullptr, 0, nullptr, nullptr},
8583 };
8584
8585 srna = RNA_def_struct(brna, "GreasePencilSubdivModifier", "Modifier");
8586 RNA_def_struct_ui_text(srna, "Subdivision Modifier", "Subdivide Stroke modifier");
8587 RNA_def_struct_sdna(srna, "GreasePencilSubdivModifierData");
8588 RNA_def_struct_ui_icon(srna, ICON_MOD_SUBSURF);
8589
8592 srna, "rna_GreasePencilSubdivModifier_material_filter_set");
8593
8594 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
8595
8597
8598 prop = RNA_def_property(srna, "level", PROP_INT, PROP_NONE);
8599 RNA_def_property_int_sdna(prop, nullptr, "level");
8600 RNA_def_property_range(prop, 0, 16);
8601 RNA_def_property_ui_range(prop, 0, 6, 1, 0);
8602 RNA_def_property_ui_text(prop, "Level", "Level of subdivision");
8603 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8604
8605 prop = RNA_def_property(srna, "subdivision_type", PROP_ENUM, PROP_NONE);
8606 RNA_def_property_enum_sdna(prop, nullptr, "type");
8607 RNA_def_property_enum_items(prop, subdivision_type_items);
8608 RNA_def_property_ui_text(prop, "Subdivision Type", "Select type of subdivision algorithm");
8609 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8610
8611 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8612
8614}
8615
8617{
8618 StructRNA *srna;
8619 PropertyRNA *prop;
8620
8621 static const EnumPropertyItem color_mode_items[] = {
8622 {MOD_GREASE_PENCIL_COLOR_BOTH, "BOTH", 0, "Stroke & Fill", "Modify fill and stroke colors"},
8623 {MOD_GREASE_PENCIL_COLOR_STROKE, "STROKE", 0, "Stroke", "Modify stroke color only"},
8624 {MOD_GREASE_PENCIL_COLOR_FILL, "FILL", 0, "Fill", "Modify fill color only"},
8625 {0, nullptr, 0, nullptr, nullptr},
8626 };
8627
8628 srna = RNA_def_struct(brna, "GreasePencilColorModifier", "Modifier");
8629 RNA_def_struct_ui_text(srna, "Grease Pencil Color Modifier", "");
8630 RNA_def_struct_sdna(srna, "GreasePencilColorModifierData");
8631 RNA_def_struct_ui_icon(srna, ICON_MOD_HUE_SATURATION);
8632
8635 srna, "rna_GreasePencilColorModifier_material_filter_set");
8637
8638 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
8639
8641
8642 prop = RNA_def_property(srna, "color_mode", PROP_ENUM, PROP_NONE);
8643 RNA_def_property_enum_items(prop, color_mode_items);
8644 RNA_def_property_ui_text(prop, "Mode", "Attributes to modify");
8645 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8646
8647 prop = RNA_def_property(srna, "hue", PROP_FLOAT, PROP_NONE);
8648 RNA_def_property_range(prop, 0.0, 1.0);
8649 RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 3);
8650 RNA_def_property_float_sdna(prop, nullptr, "hsv[0]");
8651 RNA_def_property_ui_text(prop, "Hue", "Color hue offset");
8652 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8653
8654 prop = RNA_def_property(srna, "saturation", PROP_FLOAT, PROP_NONE);
8655 RNA_def_property_range(prop, 0.0, FLT_MAX);
8656 RNA_def_property_ui_range(prop, 0.0, 2.0, 0.1, 3);
8657 RNA_def_property_float_sdna(prop, nullptr, "hsv[1]");
8658 RNA_def_property_ui_text(prop, "Saturation", "Color saturation factor");
8659 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8660
8661 prop = RNA_def_property(srna, "value", PROP_FLOAT, PROP_NONE);
8662 RNA_def_property_range(prop, 0.0, FLT_MAX);
8663 RNA_def_property_ui_range(prop, 0.0, 2.0, 0.1, 3);
8664 RNA_def_property_float_sdna(prop, nullptr, "hsv[2]");
8665 RNA_def_property_ui_text(prop, "Value", "Color value factor");
8666 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8667
8669}
8670
8672{
8673 StructRNA *srna;
8674 PropertyRNA *prop;
8675
8676 static const EnumPropertyItem color_mode_items[] = {
8677 {MOD_GREASE_PENCIL_COLOR_BOTH, "BOTH", 0, "Stroke & Fill", "Modify fill and stroke colors"},
8678 {MOD_GREASE_PENCIL_COLOR_STROKE, "STROKE", 0, "Stroke", "Modify stroke color only"},
8679 {MOD_GREASE_PENCIL_COLOR_FILL, "FILL", 0, "Fill", "Modify fill color only"},
8680 {0, nullptr, 0, nullptr, nullptr},
8681 };
8682
8683 static const EnumPropertyItem tint_mode_items[] = {
8684 {MOD_GREASE_PENCIL_TINT_UNIFORM, "UNIFORM", 0, "Uniform", ""},
8685 {MOD_GREASE_PENCIL_TINT_GRADIENT, "GRADIENT", 0, "Gradient", ""},
8686 {0, nullptr, 0, nullptr, nullptr},
8687 };
8688
8689 srna = RNA_def_struct(brna, "GreasePencilTintModifier", "Modifier");
8690 RNA_def_struct_ui_text(srna, "Grease Pencil Tint Modifier", "");
8691 RNA_def_struct_sdna(srna, "GreasePencilTintModifierData");
8692 RNA_def_struct_ui_icon(srna, ICON_MOD_TINT);
8693
8696 srna, "rna_GreasePencilTintModifier_material_filter_set");
8698 srna, "rna_GreasePencilTintModifier_vertex_group_name_set");
8700
8701 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
8702
8704
8705 prop = RNA_def_property(srna, "color_mode", PROP_ENUM, PROP_NONE);
8706 RNA_def_property_enum_items(prop, color_mode_items);
8707 RNA_def_property_ui_text(prop, "Mode", "Attributes to modify");
8708 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8709
8710 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
8711 RNA_def_property_range(prop, 0, 2.0);
8712 RNA_def_property_ui_range(prop, 0, 2.0, 0.1, 2);
8713 RNA_def_property_ui_text(prop, "Factor", "Factor for tinting");
8714 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8715
8716 /* Type of Tint. */
8717 prop = RNA_def_property(srna, "tint_mode", PROP_ENUM, PROP_NONE);
8718 RNA_def_property_enum_items(prop, tint_mode_items);
8719 RNA_def_property_ui_text(prop, "Tint Mode", "");
8720 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8721
8722 /* Simple Color. */
8723 prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
8724 RNA_def_property_range(prop, 0.0, 1.0);
8725 RNA_def_property_array(prop, 3);
8726 RNA_def_property_ui_text(prop, "Color", "Color used for tinting");
8727 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8728
8729 /* Color band. */
8730 prop = RNA_def_property(srna, "color_ramp", PROP_POINTER, PROP_NONE);
8731 RNA_def_property_struct_type(prop, "ColorRamp");
8732 RNA_def_property_ui_text(prop, "Color Ramp", "Gradient tinting colors");
8733 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8734
8735 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
8736 RNA_def_property_ui_text(prop, "Object", "Object used for the gradient direction");
8739 prop, nullptr, "rna_GreasePencilTintModifier_object_set", nullptr, nullptr);
8740 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8741
8742 prop = RNA_def_property(srna, "radius", PROP_FLOAT, PROP_DISTANCE);
8743 RNA_def_property_range(prop, 1e-6f, FLT_MAX);
8744 RNA_def_property_ui_range(prop, 0.001f, FLT_MAX, 1, 3);
8745 RNA_def_property_ui_text(prop, "Radius", "Influence distance from the object");
8746 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8747
8749
8750 prop = RNA_def_property(srna, "use_weight_as_factor", PROP_BOOLEAN, PROP_NONE);
8752 prop, nullptr, "flag", MOD_GREASE_PENCIL_TINT_USE_WEIGHT_AS_FACTOR);
8754 prop, "Use Weight as Factor", "Use vertex group weight as factor instead of influence");
8755 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8756}
8757
8759{
8760 StructRNA *srna;
8761 PropertyRNA *prop;
8762
8763 static const EnumPropertyItem modifier_lineart_source_type[] = {
8764 {LINEART_SOURCE_COLLECTION, "COLLECTION", 0, "Collection", ""},
8765 {LINEART_SOURCE_OBJECT, "OBJECT", 0, "Object", ""},
8766 {LINEART_SOURCE_SCENE, "SCENE", 0, "Scene", ""},
8767 {0, nullptr, 0, nullptr, nullptr},
8768 };
8769
8770 static const EnumPropertyItem modifier_lineart_shadow_region_filtering[] = {
8772 "NONE",
8773 0,
8774 "None",
8775 "Not filtering any lines based on illumination region"},
8777 "ILLUMINATED",
8778 0,
8779 "Illuminated",
8780 "Only selecting lines from illuminated regions"},
8782 "SHADED",
8783 0,
8784 "Shaded",
8785 "Only selecting lines from shaded regions"},
8787 "ILLUMINATED_ENCLOSED",
8788 0,
8789 "Illuminated (Enclosed Shapes)",
8790 "Selecting lines from lit regions, and make the combination of contour, light contour and "
8791 "shadow lines into enclosed shapes"},
8792 {0, nullptr, 0, nullptr, nullptr},
8793 };
8794
8795 static const EnumPropertyItem modifier_lineart_silhouette_filtering[] = {
8796 {LINEART_SILHOUETTE_FILTER_NONE, "NONE", 0, "Contour", ""},
8797 {LINEART_SILHOUETTE_FILTER_GROUP, "GROUP", 0, "Silhouette", ""},
8798 {LINEART_SILHOUETTE_FILTER_INDIVIDUAL, "INDIVIDUAL", 0, "Individual Silhouette", ""},
8799 {0, nullptr, 0, nullptr, nullptr},
8800 };
8801
8802 srna = RNA_def_struct(brna, "GreasePencilLineartModifier", "Modifier");
8804 srna, "Line Art Modifier", "Generate Line Art strokes from selected source");
8805 RNA_def_struct_sdna(srna, "GreasePencilLineartModifierData");
8806 RNA_def_struct_ui_icon(srna, ICON_MOD_LINEART);
8807
8809
8810 prop = RNA_def_property(srna, "use_custom_camera", PROP_BOOLEAN, PROP_NONE);
8811 RNA_def_property_boolean_sdna(prop, nullptr, "calculation_flags", MOD_LINEART_USE_CUSTOM_CAMERA);
8813 prop, "Use Custom Camera", "Use custom camera instead of the active camera");
8814 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8815
8816 prop = RNA_def_property(srna, "use_fuzzy_intersections", PROP_BOOLEAN, PROP_NONE);
8818 prop, nullptr, "calculation_flags", MOD_LINEART_INTERSECTION_AS_CONTOUR);
8820 "Intersection With Contour",
8821 "Treat intersection and contour lines as if they were the same type so "
8822 "they can be chained together");
8823 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8824
8825 prop = RNA_def_property(srna, "use_fuzzy_all", PROP_BOOLEAN, PROP_NONE);
8827 prop, nullptr, "calculation_flags", MOD_LINEART_EVERYTHING_AS_CONTOUR);
8829 prop, "All Lines", "Treat all lines as the same line type so they can be chained together");
8830 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8831
8832 prop = RNA_def_property(srna, "use_object_instances", PROP_BOOLEAN, PROP_NONE);
8834 prop, nullptr, "calculation_flags", MOD_LINEART_ALLOW_DUPLI_OBJECTS);
8836 "Instanced Objects",
8837 "Allow particle objects and face/vertex instances to show in Line Art");
8838 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8839
8840 prop = RNA_def_property(srna, "use_edge_overlap", PROP_BOOLEAN, PROP_NONE);
8842 prop, nullptr, "calculation_flags", MOD_LINEART_ALLOW_OVERLAPPING_EDGES);
8844 prop,
8845 "Handle Overlapping Edges",
8846 "Allow edges in the same location (i.e. from edge split) to show properly. May run slower.");
8847 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8848
8849 prop = RNA_def_property(srna, "use_clip_plane_boundaries", PROP_BOOLEAN, PROP_NONE);
8851 prop, nullptr, "calculation_flags", MOD_LINEART_ALLOW_CLIPPING_BOUNDARIES);
8853 "Clipping Boundaries",
8854 "Allow lines generated by the near/far clipping plane to be shown");
8855 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8856
8857 prop = RNA_def_property(srna, "crease_threshold", PROP_FLOAT, PROP_ANGLE);
8858 RNA_def_property_range(prop, 0, DEG2RAD(180.0f));
8859 RNA_def_property_ui_range(prop, 0.0f, DEG2RAD(180.0f), 0.01f, 1);
8861 "Crease Threshold",
8862 "Angles smaller than this will be treated as creases. Crease angle "
8863 "priority: object Line Art crease override > mesh auto smooth angle > "
8864 "Line Art default crease.");
8865 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8866
8867 prop = RNA_def_property(srna, "split_angle", PROP_FLOAT, PROP_ANGLE);
8868 RNA_def_property_float_sdna(prop, nullptr, "angle_splitting_threshold");
8870 prop, "Angle Splitting", "Angle in screen space below which a stroke is split in two");
8871 /* Don't allow value very close to PI, or we get a lot of small segments. */
8872 RNA_def_property_ui_range(prop, 0.0f, DEG2RAD(179.5f), 0.01f, 1);
8873 RNA_def_property_range(prop, 0.0f, DEG2RAD(180.0f));
8874 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8875
8876 prop = RNA_def_property(srna, "smooth_tolerance", PROP_FLOAT, PROP_NONE);
8877 RNA_def_property_float_sdna(prop, nullptr, "chain_smooth_tolerance");
8879 prop, "Smooth Tolerance", "Strength of smoothing applied on jagged chains");
8880 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.05f, 4);
8881 RNA_def_property_range(prop, 0.0f, 30.0f);
8882 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8883
8884 prop = RNA_def_property(srna, "use_loose_as_contour", PROP_BOOLEAN, PROP_NONE);
8885 RNA_def_property_boolean_sdna(prop, nullptr, "calculation_flags", MOD_LINEART_LOOSE_AS_CONTOUR);
8886 RNA_def_property_ui_text(prop, "Loose As Contour", "Loose edges will have contour type");
8887 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8888
8889 prop = RNA_def_property(srna, "invert_source_vertex_group", PROP_BOOLEAN, PROP_NONE);
8891 prop, nullptr, "calculation_flags", MOD_LINEART_INVERT_SOURCE_VGROUP);
8892 RNA_def_property_ui_text(prop, "Invert Vertex Group", "Invert source vertex group values");
8893 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8894
8895 prop = RNA_def_property(srna, "use_output_vertex_group_match_by_name", PROP_BOOLEAN, PROP_NONE);
8897 prop, nullptr, "calculation_flags", MOD_LINEART_MATCH_OUTPUT_VGROUP);
8898 RNA_def_property_ui_text(prop, "Match Output", "Match output vertex group based on name");
8899 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8900
8901 prop = RNA_def_property(srna, "use_face_mark", PROP_BOOLEAN, PROP_NONE);
8902 RNA_def_property_boolean_sdna(prop, nullptr, "calculation_flags", MOD_LINEART_FILTER_FACE_MARK);
8904 prop, "Filter Face Marks", "Filter feature lines using Freestyle face marks");
8905 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8906
8907 prop = RNA_def_property(srna, "use_face_mark_invert", PROP_BOOLEAN, PROP_NONE);
8909 prop, nullptr, "calculation_flags", MOD_LINEART_FILTER_FACE_MARK_INVERT);
8910 RNA_def_property_ui_text(prop, "Invert", "Invert face mark filtering");
8911 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8912
8913 prop = RNA_def_property(srna, "use_face_mark_boundaries", PROP_BOOLEAN, PROP_NONE);
8915 prop, nullptr, "calculation_flags", MOD_LINEART_FILTER_FACE_MARK_BOUNDARIES);
8917 prop, "Boundaries", "Filter feature lines based on face mark boundaries");
8918 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8919
8920 prop = RNA_def_property(srna, "use_face_mark_keep_contour", PROP_BOOLEAN, PROP_NONE);
8922 prop, nullptr, "calculation_flags", MOD_LINEART_FILTER_FACE_MARK_KEEP_CONTOUR);
8923 RNA_def_property_ui_text(prop, "Keep Contour", "Preserve contour lines while filtering");
8924 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8925
8926 prop = RNA_def_property(srna, "chaining_image_threshold", PROP_FLOAT, PROP_DISTANCE);
8928 prop,
8929 "Image Threshold",
8930 "Segments with an image distance smaller than this will be chained together");
8931 RNA_def_property_ui_range(prop, 0.0f, 0.3f, 0.001f, 4);
8932 RNA_def_property_range(prop, 0.0f, 0.3f);
8933 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8934
8935 prop = RNA_def_property(srna, "use_loose_edge_chain", PROP_BOOLEAN, PROP_NONE);
8936 RNA_def_property_boolean_sdna(prop, nullptr, "calculation_flags", MOD_LINEART_CHAIN_LOOSE_EDGES);
8937 RNA_def_property_ui_text(prop, "Chain Loose Edges", "Allow loose edges to be chained together");
8938 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8939
8940 prop = RNA_def_property(srna, "use_geometry_space_chain", PROP_BOOLEAN, PROP_NONE);
8942 prop, nullptr, "calculation_flags", MOD_LINEART_CHAIN_GEOMETRY_SPACE);
8944 prop, "Use Geometry Space", "Use geometry distance for chaining instead of image space");
8945 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8946
8947 prop = RNA_def_property(srna, "use_detail_preserve", PROP_BOOLEAN, PROP_NONE);
8949 prop, nullptr, "calculation_flags", MOD_LINEART_CHAIN_PRESERVE_DETAILS);
8951 prop, "Preserve Details", "Keep the zig-zag \"noise\" in initial chaining");
8952 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8953
8954 prop = RNA_def_property(srna, "use_overlap_edge_type_support", PROP_BOOLEAN, PROP_NONE);
8956 prop, nullptr, "calculation_flags", MOD_LINEART_ALLOW_OVERLAP_EDGE_TYPES);
8958 "Overlapping Edge Types",
8959 "Allow an edge to have multiple overlapping types. This will create a "
8960 "separate stroke for each overlapping type.");
8961 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8962
8963 prop = RNA_def_property(srna, "stroke_depth_offset", PROP_FLOAT, PROP_DISTANCE);
8965 "Stroke Depth Offset",
8966 "Move strokes slightly towards the camera to avoid clipping while "
8967 "preserve depth for the viewport");
8968 RNA_def_property_ui_range(prop, 0.0, 0.5, 0.001, 4);
8969 RNA_def_property_range(prop, -0.1, FLT_MAX);
8970 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
8971
8972 prop = RNA_def_property(srna, "use_offset_towards_custom_camera", PROP_BOOLEAN, PROP_NONE);
8974 prop, nullptr, "flags", LINEART_GPENCIL_OFFSET_TOWARDS_CUSTOM_CAMERA);
8976 "Offset Towards Custom Camera",
8977 "Offset strokes towards selected camera instead of the active camera");
8978 RNA_def_property_update(prop, 0, "rna_Modifier_update");
8979
8980 prop = RNA_def_property(srna, "source_camera", PROP_POINTER, PROP_NONE);
8982 RNA_def_property_struct_type(prop, "Object");
8985 prop, "Camera Object", "Use specified camera object for generating Line Art strokes");
8986 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8987
8988 prop = RNA_def_property(srna, "light_contour_object", PROP_POINTER, PROP_NONE);
8990 RNA_def_property_struct_type(prop, "Object");
8993 prop, "Light Object", "Use this light object to generate light contour");
8994 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
8995
8996 prop = RNA_def_property(srna, "source_type", PROP_ENUM, PROP_NONE);
8997 RNA_def_property_enum_items(prop, modifier_lineart_source_type);
8998 RNA_def_property_ui_text(prop, "Source Type", "Line Art stroke source type");
8999 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
9000
9001 prop = RNA_def_property(srna, "source_object", PROP_POINTER, PROP_NONE);
9003 RNA_def_property_struct_type(prop, "Object");
9004 RNA_def_property_ui_text(prop, "Object", "Generate strokes from this object");
9005 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
9006
9007 prop = RNA_def_property(srna, "source_collection", PROP_POINTER, PROP_NONE);
9009 RNA_def_property_struct_type(prop, "Collection");
9011 prop, "Collection", "Generate strokes from the objects in this collection");
9012 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
9013
9014 /* types */
9015 prop = RNA_def_property(srna, "use_contour", PROP_BOOLEAN, PROP_NONE);
9017 RNA_def_property_ui_text(prop, "Use Contour", "Generate strokes from contours lines");
9018 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9019
9020 prop = RNA_def_property(srna, "use_loose", PROP_BOOLEAN, PROP_NONE);
9021 RNA_def_property_boolean_sdna(prop, nullptr, "edge_types", MOD_LINEART_EDGE_FLAG_LOOSE);
9022 RNA_def_property_ui_text(prop, "Use Loose", "Generate strokes from loose edges");
9023 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9024
9025 prop = RNA_def_property(srna, "use_crease", PROP_BOOLEAN, PROP_NONE);
9026 RNA_def_property_boolean_sdna(prop, nullptr, "edge_types", MOD_LINEART_EDGE_FLAG_CREASE);
9027 RNA_def_property_ui_text(prop, "Use Crease", "Generate strokes from creased edges");
9028 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9029
9030 prop = RNA_def_property(srna, "use_material", PROP_BOOLEAN, PROP_NONE);
9033 prop, "Use Material", "Generate strokes from borders between materials");
9034 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9035
9036 prop = RNA_def_property(srna, "use_edge_mark", PROP_BOOLEAN, PROP_NONE);
9038 RNA_def_property_ui_text(prop, "Use Edge Mark", "Generate strokes from Freestyle marked edges");
9039 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9040
9041 prop = RNA_def_property(srna, "use_intersection", PROP_BOOLEAN, PROP_NONE);
9043 RNA_def_property_ui_text(prop, "Use Intersection", "Generate strokes from intersections");
9044 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9045
9046 prop = RNA_def_property(srna, "use_light_contour", PROP_BOOLEAN, PROP_NONE);
9049 "Use Light Contour",
9050 "Generate light/shadow separation lines from a reference light object");
9051 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9052
9053 prop = RNA_def_property(srna, "use_shadow", PROP_BOOLEAN, PROP_NONE);
9055 prop, nullptr, "edge_types", MOD_LINEART_EDGE_FLAG_PROJECTED_SHADOW);
9057 prop, "Use Shadow", "Project contour lines using a light source object");
9058 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9059
9060 prop = RNA_def_property(srna, "shadow_region_filtering", PROP_ENUM, PROP_NONE);
9061 RNA_def_property_enum_sdna(prop, nullptr, "shadow_selection");
9062 RNA_def_property_enum_items(prop, modifier_lineart_shadow_region_filtering);
9064 "Shadow Region Filtering",
9065 "Select feature lines that comes from lit or shaded regions. Will not "
9066 "affect cast shadow and light contour since they are at the border.");
9068 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
9069
9070 prop = RNA_def_property(srna, "silhouette_filtering", PROP_ENUM, PROP_NONE);
9071 RNA_def_property_enum_sdna(prop, nullptr, "silhouette_selection");
9072 RNA_def_property_enum_items(prop, modifier_lineart_silhouette_filtering);
9073 RNA_def_property_ui_text(prop, "Silhouette Filtering", "Select contour or silhouette");
9074 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
9075
9076 prop = RNA_def_property(srna, "use_multiple_levels", PROP_BOOLEAN, PROP_NONE);
9077 RNA_def_property_boolean_sdna(prop, nullptr, "use_multiple_levels", 0);
9079 prop, "Use Occlusion Range", "Generate strokes from a range of occlusion levels");
9080 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9081
9082 prop = RNA_def_property(srna, "level_start", PROP_INT, PROP_NONE);
9084 prop, "Level Start", "Minimum number of occlusions for the generated strokes");
9085 RNA_def_property_range(prop, 0, 128);
9086 RNA_def_property_int_funcs(prop, nullptr, "rna_Lineart_start_level_set", nullptr);
9087 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9088
9089 prop = RNA_def_property(srna, "level_end", PROP_INT, PROP_NONE);
9091 prop, "Level End", "Maximum number of occlusions for the generated strokes");
9092 RNA_def_property_range(prop, 0, 128);
9093 RNA_def_property_int_funcs(prop, nullptr, "rna_Lineart_end_level_set", nullptr);
9094 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9095
9096 prop = RNA_def_property(srna, "target_layer", PROP_STRING, PROP_NONE);
9098 prop, "Layer", "Grease Pencil layer to which assign the generated strokes");
9099 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9100
9101 prop = RNA_def_property(srna, "target_material", PROP_POINTER, PROP_NONE);
9103 RNA_def_property_struct_type(prop, "Material");
9105 nullptr,
9106 "rna_GreasePencilLineartModifier_material_set",
9107 nullptr,
9108 "rna_GreasePencilModifier_material_poll");
9110 prop, "Material", "Grease Pencil material assigned to the generated strokes");
9111 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9112
9113 prop = RNA_def_property(srna, "source_vertex_group", PROP_STRING, PROP_NONE);
9115 prop,
9116 "Source Vertex Group",
9117 "Match the beginning of vertex group names from mesh objects, match all when left empty");
9118 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9119
9120 prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
9121 RNA_def_property_string_sdna(prop, nullptr, "vgname");
9123 prop, nullptr, nullptr, "rna_GreasePencilLineartModifier_vgname_set");
9124 RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for selected strokes");
9125 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9126
9127 prop = RNA_def_property(srna, "is_baked", PROP_BOOLEAN, PROP_NONE);
9129 RNA_def_property_ui_text(prop, "Is Baked", "This modifier has baked data");
9130 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9131
9132 prop = RNA_def_property(srna, "use_cache", PROP_BOOLEAN, PROP_NONE);
9135 "Use Cache",
9136 "Use cached scene data from the first Line Art modifier in the stack. "
9137 "Certain settings will be unavailable.");
9138 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9139
9140 prop = RNA_def_property(srna, "overscan", PROP_FLOAT, PROP_NONE);
9142 prop,
9143 "Overscan",
9144 "A margin to prevent strokes from ending abruptly at the edge of the image");
9145 RNA_def_property_ui_range(prop, 0.0f, 0.5f, 0.01f, 3);
9146 RNA_def_property_range(prop, 0.0f, 0.5f);
9147 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
9148
9149 /* For 4.5 LTS only, thickness is deprecated in 5.0, but keep this RNA access for compatibility.
9150 */
9151 prop = RNA_def_property(srna, "thickness", PROP_INT, PROP_NONE);
9152 RNA_def_property_ui_text(prop, "Thickness", "The thickness for the generated strokes");
9153 RNA_def_property_int_sdna(prop, "GreasePencilLineartModifierData", "thickness_legacy");
9154 RNA_def_property_ui_range(prop, 1, 100, 1, 1);
9155 RNA_def_property_range(prop, 1, 200);
9156 RNA_def_property_int_funcs(prop, nullptr, "rna_Lineart_thickness_set", nullptr);
9157 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9158
9159 prop = RNA_def_property(srna, "radius", PROP_FLOAT, PROP_FACTOR);
9160 RNA_def_property_ui_text(prop, "Radius", "The radius for the generated strokes");
9161 RNA_def_property_ui_range(prop, 0.0f, 0.25f, 0.01f, 2);
9162 RNA_def_property_range(prop, 0.0f, 1.0f);
9163 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9164
9165 prop = RNA_def_property(srna, "opacity", PROP_FLOAT, PROP_FACTOR);
9166 RNA_def_property_ui_text(prop, "Opacity", "The strength value for the generate strokes");
9167 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.01f, 2);
9168 RNA_def_property_range(prop, 0.0f, 1.0f);
9169 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9170
9171 prop = RNA_def_property(srna, "use_material_mask", PROP_BOOLEAN, PROP_NONE);
9173 prop, nullptr, "mask_switches", LINEART_GPENCIL_MATERIAL_MASK_ENABLE);
9175 prop, "Use Material Mask", "Use material masks to filter out occluded strokes");
9176 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9177
9178 prop = RNA_def_property(srna, "use_material_mask_match", PROP_BOOLEAN, PROP_NONE);
9180 prop, nullptr, "mask_switches", LINEART_GPENCIL_MATERIAL_MASK_MATCH);
9182 prop, "Match Masks", "Require matching all material masks instead of just one");
9183 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9184
9185 prop = RNA_def_property(srna, "use_material_mask_bits", PROP_BOOLEAN, PROP_NONE);
9186 RNA_def_property_boolean_bitset_array_sdna(prop, nullptr, "material_mask_bits", 1 << 0, 8);
9187 RNA_def_property_ui_text(prop, "Masks", "Mask bits to match from Material Line Art settings");
9188 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9189
9190 prop = RNA_def_property(srna, "use_intersection_match", PROP_BOOLEAN, PROP_NONE);
9192 prop, nullptr, "mask_switches", LINEART_GPENCIL_INTERSECTION_MATCH);
9194 prop, "Match Intersection", "Require matching all intersection masks instead of just one");
9195 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9196
9197 prop = RNA_def_property(srna, "use_intersection_mask", PROP_BOOLEAN, PROP_NONE);
9198 RNA_def_property_boolean_bitset_array_sdna(prop, nullptr, "intersection_mask", 1 << 0, 8);
9199 RNA_def_property_ui_text(prop, "Masks", "Mask bits to match from Collection Line Art settings");
9200 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9201
9202 prop = RNA_def_property(srna, "use_crease_on_smooth", PROP_BOOLEAN, PROP_NONE);
9204 prop, nullptr, "calculation_flags", MOD_LINEART_USE_CREASE_ON_SMOOTH_SURFACES);
9206 prop, "Crease On Smooth Surfaces", "Allow crease edges to show inside smooth surfaces");
9207 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9208
9209 prop = RNA_def_property(srna, "use_crease_on_sharp", PROP_BOOLEAN, PROP_NONE);
9211 prop, nullptr, "calculation_flags", MOD_LINEART_USE_CREASE_ON_SHARP_EDGES);
9212 RNA_def_property_ui_text(prop, "Crease On Sharp Edges", "Allow crease to show on sharp edges");
9213 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9214
9215 prop = RNA_def_property(srna, "use_image_boundary_trimming", PROP_BOOLEAN, PROP_NONE);
9217 prop, nullptr, "calculation_flags", MOD_LINEART_USE_IMAGE_BOUNDARY_TRIMMING);
9219 prop,
9220 "Image Boundary Trimming",
9221 "Trim all edges right at the boundary of image (including overscan region)");
9222
9223 prop = RNA_def_property(srna, "use_back_face_culling", PROP_BOOLEAN, PROP_NONE);
9225 prop, nullptr, "calculation_flags", MOD_LINEART_USE_BACK_FACE_CULLING);
9227 prop,
9228 "Back Face Culling",
9229 "Remove all back faces to speed up calculation, this will create edges in "
9230 "different occlusion levels than when disabled");
9231 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9232
9233 prop = RNA_def_property(srna, "shadow_camera_near", PROP_FLOAT, PROP_NONE);
9234 RNA_def_property_ui_text(prop, "Shadow Camera Near", "Near clipping distance of shadow camera");
9235 RNA_def_property_ui_range(prop, 0.0f, 500.0f, 0.1f, 2);
9236 RNA_def_property_range(prop, 0.0f, 10000.0f);
9237 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9238
9239 prop = RNA_def_property(srna, "shadow_camera_far", PROP_FLOAT, PROP_NONE);
9240 RNA_def_property_ui_text(prop, "Shadow Camera Far", "Far clipping distance of shadow camera");
9241 RNA_def_property_ui_range(prop, 0.0f, 500.0f, 0.1f, 2);
9242 RNA_def_property_range(prop, 0.0f, 10000.0f);
9243 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9244
9245 prop = RNA_def_property(srna, "shadow_camera_size", PROP_FLOAT, PROP_NONE);
9247 prop,
9248 "Shadow Camera Size",
9249 "Represents the \"Orthographic Scale\" of an orthographic camera. "
9250 "If the camera is positioned at the light's location with this scale, it will "
9251 "represent the coverage of the shadow \"camera\".");
9252 RNA_def_property_ui_range(prop, 0.0f, 500.0f, 0.1f, 2);
9253 RNA_def_property_range(prop, 0.0f, 10000.0f);
9254
9255 prop = RNA_def_property(srna, "use_invert_collection", PROP_BOOLEAN, PROP_NONE);
9258 "Invert Collection Filtering",
9259 "Select everything except lines from specified collection");
9260 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9261
9262 prop = RNA_def_property(srna, "use_invert_silhouette", PROP_BOOLEAN, PROP_NONE);
9264 RNA_def_property_ui_text(prop, "Invert Silhouette Filtering", "Select anti-silhouette lines");
9265 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9266
9268}
9269
9271{
9272 StructRNA *srna;
9273 PropertyRNA *prop;
9274
9275 srna = RNA_def_struct(brna, "GreasePencilSmoothModifier", "Modifier");
9276 RNA_def_struct_ui_text(srna, "Smooth Modifier", "Smooth effect modifier");
9277 RNA_def_struct_sdna(srna, "GreasePencilSmoothModifierData");
9278 RNA_def_struct_ui_icon(srna, ICON_MOD_SMOOTH);
9279
9282 srna, "rna_GreasePencilSmoothModifier_material_filter_set");
9284 srna, "rna_GreasePencilSmoothModifier_vertex_group_name_set");
9286
9287 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
9288
9290
9291 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR);
9292 RNA_def_property_float_sdna(prop, nullptr, "factor");
9293 RNA_def_property_range(prop, 0, 1);
9294 RNA_def_property_ui_text(prop, "Factor", "Amount of smooth to apply");
9295 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9296
9297 prop = RNA_def_property(srna, "use_edit_position", PROP_BOOLEAN, PROP_NONE);
9300 prop, "Affect Position", "The modifier affects the position of the point");
9301 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9302
9303 prop = RNA_def_property(srna, "use_edit_strength", PROP_BOOLEAN, PROP_NONE);
9306 prop, "Affect Strength", "The modifier affects the color strength of the point");
9307 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9308
9309 prop = RNA_def_property(srna, "use_edit_thickness", PROP_BOOLEAN, PROP_NONE);
9312 prop, "Affect Thickness", "The modifier affects the thickness of the point");
9313 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9314
9315 prop = RNA_def_property(srna, "use_edit_uv", PROP_BOOLEAN, PROP_NONE);
9318 prop, "Affect UV", "The modifier affects the UV rotation factor of the point");
9319 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9320
9321 prop = RNA_def_property(srna, "step", PROP_INT, PROP_NONE);
9322 RNA_def_property_int_sdna(prop, nullptr, "step");
9323 RNA_def_property_range(prop, 1, 1000);
9325 prop, "Steps", "Number of times to apply smooth (high numbers can reduce fps)");
9326 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9327
9328 prop = RNA_def_property(srna, "use_keep_shape", PROP_BOOLEAN, PROP_NONE);
9330 RNA_def_property_ui_text(prop, "Keep Shape", "Smooth the details, but keep the overall shape");
9331 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9332
9333 prop = RNA_def_property(srna, "use_smooth_ends", PROP_BOOLEAN, PROP_NONE);
9335 RNA_def_property_ui_text(prop, "Smooth Ends", "Smooth ends of strokes");
9336 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9337
9339}
9340
9342{
9343 StructRNA *srna;
9344 PropertyRNA *prop;
9345
9347 static EnumPropertyItem offset_mode_items[] = {
9348 {MOD_GREASE_PENCIL_OFFSET_RANDOM, "RANDOM", 0, "Random", "Randomize stroke offset"},
9349 {MOD_GREASE_PENCIL_OFFSET_LAYER, "LAYER", 0, "Layer", "Offset layers by the same factor"},
9351 "STROKE",
9352 0,
9353 "Stroke",
9354 "Offset strokes by the same factor based on stroke draw order"},
9356 "MATERIAL",
9357 0,
9358 "Material",
9359 "Offset materials by the same factor"},
9360 {0, nullptr, 0, nullptr, nullptr},
9361 };
9362
9363 srna = RNA_def_struct(brna, "GreasePencilOffsetModifier", "Modifier");
9364 RNA_def_struct_ui_text(srna, "Grease Pencil Offset Modifier", "");
9365 RNA_def_struct_sdna(srna, "GreasePencilOffsetModifierData");
9366 RNA_def_struct_ui_icon(srna, ICON_MOD_OFFSET);
9367
9370 srna, "rna_GreasePencilOffsetModifier_material_filter_set");
9372 srna, "rna_GreasePencilOffsetModifier_vertex_group_name_set");
9373
9374 rna_def_modifier_panel_open_prop(srna, "open_general_panel", 0);
9375 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 1);
9376
9377 prop = RNA_def_property(srna, "offset_mode", PROP_ENUM, PROP_NONE);
9378 RNA_def_property_enum_items(prop, offset_mode_items);
9379 RNA_def_property_ui_text(prop, "Mode", "");
9380 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9381
9383
9384 prop = RNA_def_property(srna, "location", PROP_FLOAT, PROP_TRANSLATION);
9385 RNA_def_property_float_sdna(prop, nullptr, "loc");
9386 RNA_def_property_ui_text(prop, "Location", "Values for change location");
9388 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9389
9390 prop = RNA_def_property(srna, "rotation", PROP_FLOAT, PROP_EULER);
9391 RNA_def_property_float_sdna(prop, nullptr, "rot");
9392 RNA_def_property_ui_text(prop, "Rotation", "Values for changes in rotation");
9394 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9395
9396 prop = RNA_def_property(srna, "scale", PROP_FLOAT, PROP_XYZ);
9397 RNA_def_property_float_sdna(prop, nullptr, "scale");
9398 RNA_def_property_ui_text(prop, "Scale", "Values for changes in scale");
9400 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9401
9402 prop = RNA_def_property(srna, "stroke_location", PROP_FLOAT, PROP_XYZ);
9403 RNA_def_property_float_sdna(prop, nullptr, "stroke_loc");
9404 RNA_def_property_ui_text(prop, "Random Offset", "Value for changes in location");
9406 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9407
9408 prop = RNA_def_property(srna, "stroke_rotation", PROP_FLOAT, PROP_EULER);
9409 RNA_def_property_float_sdna(prop, nullptr, "stroke_rot");
9410 RNA_def_property_ui_text(prop, "Random Rotation", "Value for changes in rotation");
9412 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9413
9414 prop = RNA_def_property(srna, "stroke_scale", PROP_FLOAT, PROP_XYZ);
9415 RNA_def_property_float_sdna(prop, nullptr, "stroke_scale");
9416 RNA_def_property_ui_text(prop, "Scale", "Value for changes in scale");
9418 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9419
9420 prop = RNA_def_property(srna, "seed", PROP_INT, PROP_UNSIGNED);
9421 RNA_def_property_ui_text(prop, "Seed", "Random seed");
9422 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9423
9424 prop = RNA_def_property(srna, "stroke_step", PROP_INT, PROP_UNSIGNED);
9425 RNA_def_property_ui_text(prop, "Step", "Number of elements that will be grouped");
9426 RNA_def_property_range(prop, 1, 500);
9427 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9428
9429 prop = RNA_def_property(srna, "stroke_start_offset", PROP_INT, PROP_UNSIGNED);
9430 RNA_def_property_ui_text(prop, "Start Offset", "Offset starting point");
9431 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9432
9433 prop = RNA_def_property(srna, "use_uniform_random_scale", PROP_BOOLEAN, PROP_NONE);
9435 prop, nullptr, "flag", MOD_GREASE_PENCIL_OFFSET_UNIFORM_RANDOM_SCALE);
9437 prop, "Uniform Scale", "Use the same random seed for each scale axis for a uniform scale");
9438 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9439
9441}
9442
9444{
9445 StructRNA *srna;
9446 PropertyRNA *prop;
9447
9448 static const EnumPropertyItem modifier_noise_random_mode_items[] = {
9449 {GP_NOISE_RANDOM_STEP, "STEP", 0, "Steps", "Randomize every number of frames"},
9450 {GP_NOISE_RANDOM_KEYFRAME, "KEYFRAME", 0, "Keyframes", "Randomize on keyframes only"},
9451 {0, nullptr, 0, nullptr, nullptr},
9452 };
9453
9454 srna = RNA_def_struct(brna, "GreasePencilNoiseModifier", "Modifier");
9455 RNA_def_struct_ui_text(srna, "Grease Pencil Noise Modifier", "Noise effect modifier");
9456 RNA_def_struct_sdna(srna, "GreasePencilNoiseModifierData");
9457 RNA_def_struct_ui_icon(srna, ICON_MOD_NOISE);
9458
9461 srna, "rna_GreasePencilNoiseModifier_material_filter_set");
9463 srna, "rna_GreasePencilNoiseModifier_vertex_group_name_set");
9465
9466 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
9467 rna_def_modifier_panel_open_prop(srna, "open_random_panel", 1);
9468
9470
9471 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR);
9472 RNA_def_property_float_sdna(prop, nullptr, "factor");
9473 RNA_def_property_range(prop, 0.0, FLT_MAX);
9474 RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 2);
9475 RNA_def_property_ui_text(prop, "Position Factor", "Amount of noise to apply");
9476 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9477
9478 prop = RNA_def_property(srna, "factor_strength", PROP_FLOAT, PROP_FACTOR);
9479 RNA_def_property_float_sdna(prop, nullptr, "factor_strength");
9480 RNA_def_property_range(prop, 0.0, FLT_MAX);
9481 RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 2);
9482 RNA_def_property_ui_text(prop, "Strength Factor", "Amount of noise to apply to opacity");
9483 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9484
9485 prop = RNA_def_property(srna, "factor_thickness", PROP_FLOAT, PROP_FACTOR);
9486 RNA_def_property_float_sdna(prop, nullptr, "factor_thickness");
9487 RNA_def_property_range(prop, 0.0, FLT_MAX);
9488 RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 2);
9489 RNA_def_property_ui_text(prop, "Thickness Factor", "Amount of noise to apply to thickness");
9490 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9491
9492 prop = RNA_def_property(srna, "factor_uvs", PROP_FLOAT, PROP_FACTOR);
9493 RNA_def_property_float_sdna(prop, nullptr, "factor_uvs");
9494 RNA_def_property_range(prop, 0.0, FLT_MAX);
9495 RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 2);
9496 RNA_def_property_ui_text(prop, "UV Factor", "Amount of noise to apply to UV rotation");
9497 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9498
9499 prop = RNA_def_property(srna, "use_random", PROP_BOOLEAN, PROP_NONE);
9500 RNA_def_property_boolean_sdna(prop, nullptr, "flag", GP_NOISE_USE_RANDOM);
9501 RNA_def_property_ui_text(prop, "Random", "Use random values over time");
9502 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9503
9504 prop = RNA_def_property(srna, "seed", PROP_INT, PROP_UNSIGNED);
9505 RNA_def_property_ui_text(prop, "Noise Seed", "Random seed");
9506 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9507
9508 prop = RNA_def_property(srna, "noise_scale", PROP_FLOAT, PROP_FACTOR);
9509 RNA_def_property_float_sdna(prop, nullptr, "noise_scale");
9510 RNA_def_property_range(prop, 0.0, 1.0);
9511 RNA_def_property_ui_text(prop, "Noise Scale", "Scale the noise frequency");
9512 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9513
9514 prop = RNA_def_property(srna, "noise_offset", PROP_FLOAT, PROP_FACTOR);
9515 RNA_def_property_float_sdna(prop, nullptr, "noise_offset");
9516 RNA_def_property_range(prop, 0.0, FLT_MAX);
9517 RNA_def_property_ui_range(prop, 0.0, 100.0, 0.1, 3);
9518 RNA_def_property_ui_text(prop, "Noise Offset", "Offset the noise along the strokes");
9519 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9520
9521 prop = RNA_def_property(srna, "step", PROP_INT, PROP_NONE);
9522 RNA_def_property_int_sdna(prop, nullptr, "step");
9523 RNA_def_property_range(prop, 1, 100);
9524 RNA_def_property_ui_text(prop, "Step", "Number of frames between randomization steps");
9525 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9526
9527 prop = RNA_def_property(srna, "random_mode", PROP_ENUM, PROP_NONE);
9528 RNA_def_property_enum_sdna(prop, nullptr, "noise_mode");
9529 RNA_def_property_enum_items(prop, modifier_noise_random_mode_items);
9531 RNA_def_property_ui_text(prop, "Mode", "Where to perform randomization");
9532
9534}
9535
9537{
9538 StructRNA *srna;
9539 PropertyRNA *prop;
9540 static const EnumPropertyItem gpencil_length_mode_items[] = {
9541 {GP_LENGTH_RELATIVE, "RELATIVE", 0, "Relative", "Length in ratio to the stroke's length"},
9542 {GP_LENGTH_ABSOLUTE, "ABSOLUTE", 0, "Absolute", "Length in geometry space"},
9543 {0, nullptr, 0, nullptr, nullptr},
9544 };
9545
9546 srna = RNA_def_struct(brna, "GreasePencilLengthModifier", "Modifier");
9547 RNA_def_struct_ui_text(srna, "Length Modifier", "Stretch or shrink strokes");
9548 RNA_def_struct_sdna(srna, "GreasePencilLengthModifierData");
9549 RNA_def_struct_ui_icon(srna, ICON_MOD_LENGTH);
9550
9553 srna, "rna_GreasePencilLengthModifier_material_filter_set");
9554
9555 rna_def_modifier_panel_open_prop(srna, "open_random_panel", 0);
9556 rna_def_modifier_panel_open_prop(srna, "open_curvature_panel", 1);
9557 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 2);
9558
9560
9561 prop = RNA_def_property(srna, "start_factor", PROP_FLOAT, PROP_NONE);
9562 RNA_def_property_float_sdna(prop, nullptr, "start_fac");
9563 RNA_def_property_ui_range(prop, -10.0f, 10.0f, 0.1, 2);
9565 prop, "Start Factor", "Added length to the start of each stroke relative to its length");
9566 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9567
9568 prop = RNA_def_property(srna, "end_factor", PROP_FLOAT, PROP_NONE);
9569 RNA_def_property_float_sdna(prop, nullptr, "end_fac");
9570 RNA_def_property_ui_range(prop, -10.0f, 10.0f, 0.1, 2);
9572 prop, "End Factor", "Added length to the end of each stroke relative to its length");
9573 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9574
9575 prop = RNA_def_property(srna, "start_length", PROP_FLOAT, PROP_DISTANCE);
9576 RNA_def_property_float_sdna(prop, nullptr, "start_fac");
9577 RNA_def_property_ui_range(prop, -100.0f, 100.0f, 0.1f, 3);
9579 prop, "Start Factor", "Absolute added length to the start of each stroke");
9580 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9581
9582 prop = RNA_def_property(srna, "end_length", PROP_FLOAT, PROP_DISTANCE);
9583 RNA_def_property_float_sdna(prop, nullptr, "end_fac");
9584 RNA_def_property_ui_range(prop, -100.0f, 100.0f, 0.1f, 3);
9585 RNA_def_property_ui_text(prop, "End Factor", "Absolute added length to the end of each stroke");
9586 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9587
9588 prop = RNA_def_property(srna, "random_start_factor", PROP_FLOAT, PROP_NONE);
9589 RNA_def_property_float_sdna(prop, nullptr, "rand_start_fac");
9590 RNA_def_property_ui_range(prop, -10.0f, 10.0f, 0.1, 1);
9592 prop, "Random Start Factor", "Size of random length added to the start of each stroke");
9593 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9594
9595 prop = RNA_def_property(srna, "random_end_factor", PROP_FLOAT, PROP_NONE);
9596 RNA_def_property_float_sdna(prop, nullptr, "rand_end_fac");
9597 RNA_def_property_ui_range(prop, -10.0f, 10.0f, 0.1, 1);
9599 prop, "Random End Factor", "Size of random length added to the end of each stroke");
9600 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9601
9602 prop = RNA_def_property(srna, "random_offset", PROP_FLOAT, PROP_NONE);
9603 RNA_def_property_float_sdna(prop, nullptr, "rand_offset");
9604 RNA_def_property_ui_range(prop, 0.0f, 100.0f, 0.1, 3);
9606 prop, "Random Noise Offset", "Smoothly offset each stroke's random value");
9607 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9608
9609 prop = RNA_def_property(srna, "use_random", PROP_BOOLEAN, PROP_NONE);
9611 RNA_def_property_ui_text(prop, "Random", "Use random values over time");
9612 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9613
9614 prop = RNA_def_property(srna, "seed", PROP_INT, PROP_UNSIGNED);
9615 RNA_def_property_ui_text(prop, "Seed", "Random seed");
9616 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9617
9618 prop = RNA_def_property(srna, "step", PROP_INT, PROP_NONE);
9619 RNA_def_property_int_sdna(prop, nullptr, "step");
9620 RNA_def_property_range(prop, 1, 100);
9621 RNA_def_property_ui_text(prop, "Step", "Number of frames between randomization steps");
9622 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9623
9624 prop = RNA_def_property(srna, "overshoot_factor", PROP_FLOAT, PROP_FACTOR);
9625 RNA_def_property_float_sdna(prop, nullptr, "overshoot_fac");
9626 RNA_def_property_range(prop, 0.0f, 1.0f);
9628 prop,
9629 "Used Length",
9630 "Defines what portion of the stroke is used for the calculation of the extension");
9631 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9632
9633 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
9634 RNA_def_property_enum_sdna(prop, nullptr, "mode");
9635 RNA_def_property_enum_items(prop, gpencil_length_mode_items);
9636 RNA_def_property_ui_text(prop, "Mode", "Mode to define length");
9637 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9638
9639 prop = RNA_def_property(srna, "use_curvature", PROP_BOOLEAN, PROP_NONE);
9641 RNA_def_property_ui_text(prop, "Use Curvature", "Follow the curvature of the stroke");
9642 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9643
9644 prop = RNA_def_property(srna, "invert_curvature", PROP_BOOLEAN, PROP_NONE);
9647 prop, "Invert Curvature", "Invert the curvature of the stroke's extension");
9648 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9649
9650 prop = RNA_def_property(srna, "point_density", PROP_FLOAT, PROP_NONE);
9651 RNA_def_property_range(prop, 0.1f, 1000.0f);
9652 RNA_def_property_ui_range(prop, 0.1f, 1000.0f, 1.0f, 1);
9655 prop, "Point Density", "Multiplied by Start/End for the total added point count");
9656 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9657
9658 prop = RNA_def_property(srna, "segment_influence", PROP_FLOAT, PROP_FACTOR);
9659 RNA_def_property_range(prop, -2.0f, 3.0f);
9660 RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1f, 2);
9662 "Segment Influence",
9663 "Factor to determine how much the length of the individual segments "
9664 "should influence the final computed curvature. Higher factors makes "
9665 "small segments influence the overall curvature less.");
9666 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9667
9668 prop = RNA_def_property(srna, "max_angle", PROP_FLOAT, PROP_ANGLE);
9670 "Filter Angle",
9671 "Ignore points on the stroke that deviate from their neighbors by more "
9672 "than this angle when determining the extrapolation shape");
9673 RNA_def_property_range(prop, 0.0f, DEG2RAD(180.0f));
9674 RNA_def_property_ui_range(prop, 0.0f, DEG2RAD(179.5f), 10.0f, 1);
9675 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
9676
9678}
9679
9681{
9682 StructRNA *srna;
9683 PropertyRNA *prop;
9684
9685 srna = RNA_def_struct(brna, "GreasePencilMirrorModifier", "Modifier");
9686 RNA_def_struct_ui_text(srna, "Grease Pencil Mirror Modifier", "");
9687 RNA_def_struct_sdna(srna, "GreasePencilMirrorModifierData");
9688 RNA_def_struct_ui_icon(srna, ICON_MOD_MIRROR);
9689
9692 srna, "rna_GreasePencilMirrorModifier_material_filter_set");
9693
9694 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
9695
9697
9698 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
9699 RNA_def_property_ui_text(prop, "Object", "Object used as center");
9701 prop, nullptr, "rna_GreasePencilMirrorModifier_object_set", nullptr, nullptr);
9703 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
9704
9705 prop = RNA_def_property(srna, "use_axis_x", PROP_BOOLEAN, PROP_NONE);
9707 RNA_def_property_ui_text(prop, "X", "Mirror the X axis");
9708 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9709
9710 prop = RNA_def_property(srna, "use_axis_y", PROP_BOOLEAN, PROP_NONE);
9712 RNA_def_property_ui_text(prop, "Y", "Mirror the Y axis");
9713 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9714
9715 prop = RNA_def_property(srna, "use_axis_z", PROP_BOOLEAN, PROP_NONE);
9717 RNA_def_property_ui_text(prop, "Z", "Mirror the Z axis");
9718 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9719
9721}
9722
9724{
9725 StructRNA *srna;
9726 PropertyRNA *prop;
9727
9728 srna = RNA_def_struct(brna, "GreasePencilThickModifierData", "Modifier");
9729 RNA_def_struct_ui_text(srna, "Grease Pencil Thickness Modifier", "Adjust stroke thickness");
9730 RNA_def_struct_sdna(srna, "GreasePencilThickModifierData");
9731 RNA_def_struct_ui_icon(srna, ICON_MOD_THICKNESS);
9732
9735 srna, "rna_GreasePencilThickModifier_material_filter_set");
9737 srna, "rna_GreasePencilThickModifier_vertex_group_name_set");
9739
9740 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
9741
9743
9744 prop = RNA_def_property(srna, "thickness", PROP_FLOAT, PROP_NONE);
9745 RNA_def_property_float_sdna(prop, nullptr, "thickness");
9746 RNA_def_property_range(prop, -10.0f, 100.0f);
9747 RNA_def_property_ui_range(prop, -1.0f, 1.0f, 0.005, 3);
9748 RNA_def_property_ui_text(prop, "Thickness", "Absolute thickness to apply everywhere");
9749 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9750
9751 prop = RNA_def_property(srna, "thickness_factor", PROP_FLOAT, PROP_NONE);
9752 RNA_def_property_float_sdna(prop, nullptr, "thickness_fac");
9753 RNA_def_property_range(prop, 0.0, FLT_MAX);
9754 RNA_def_property_ui_range(prop, 0.0, 10.0, 0.1, 3);
9755 RNA_def_property_ui_text(prop, "Thickness Factor", "Factor to multiply the thickness with");
9756 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9757
9758 prop = RNA_def_property(srna, "use_weight_factor", PROP_BOOLEAN, PROP_NONE);
9760 RNA_def_property_ui_text(prop, "Weighted", "Use weight to modulate effect");
9761 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9762
9763 prop = RNA_def_property(srna, "use_uniform_thickness", PROP_BOOLEAN, PROP_NONE);
9765 RNA_def_property_ui_text(prop, "Uniform Thickness", "Replace the stroke thickness");
9766 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9767
9769}
9770
9772{
9773 StructRNA *srna;
9774 PropertyRNA *prop;
9775
9776 srna = RNA_def_struct(brna, "GreasePencilArrayModifier", "Modifier");
9777 RNA_def_struct_ui_text(srna, "Instance Modifier", "Create grid of duplicate instances");
9778 RNA_def_struct_sdna(srna, "GreasePencilArrayModifierData");
9779 RNA_def_struct_ui_icon(srna, ICON_MOD_ARRAY);
9780
9783 srna, "rna_GreasePencilArrayModifier_material_filter_set");
9784
9785 rna_def_modifier_panel_open_prop(srna, "open_constant_offset_panel", 0);
9786 rna_def_modifier_panel_open_prop(srna, "open_relative_offset_panel", 1);
9787 rna_def_modifier_panel_open_prop(srna, "open_object_offset_panel", 2);
9788 rna_def_modifier_panel_open_prop(srna, "open_randomize_panel", 3);
9789 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 4);
9790
9792
9793 prop = RNA_def_property(srna, "count", PROP_INT, PROP_NONE);
9794 RNA_def_property_range(prop, 1, SHRT_MAX);
9795 RNA_def_property_ui_range(prop, 1, 50, 1, -1);
9796 RNA_def_property_ui_text(prop, "Count", "Number of items");
9797 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9798
9799 /* Offset parameters */
9800 prop = RNA_def_property(srna, "offset_object", PROP_POINTER, PROP_NONE);
9801 RNA_def_property_pointer_sdna(prop, nullptr, "object");
9803 prop,
9804 "Offset Object",
9805 "Use the location and rotation of another object to determine the distance and "
9806 "rotational change between arrayed items");
9808 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
9809
9810 prop = RNA_def_property(srna, "constant_offset", PROP_FLOAT, PROP_TRANSLATION);
9811 RNA_def_property_float_sdna(prop, nullptr, "offset");
9812 RNA_def_property_ui_text(prop, "Constant Offset", "Value for the distance between items");
9814 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9815
9816 prop = RNA_def_property(srna, "relative_offset", PROP_FLOAT, PROP_XYZ);
9817 RNA_def_property_float_sdna(prop, nullptr, "shift");
9819 prop,
9820 "Relative Offset",
9821 "The size of the geometry will determine the distance between arrayed items");
9823 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9824
9825 prop = RNA_def_property(srna, "random_offset", PROP_FLOAT, PROP_XYZ);
9826 RNA_def_property_float_sdna(prop, nullptr, "rnd_offset");
9827 RNA_def_property_ui_text(prop, "Random Offset", "Value for changes in location");
9829 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9830
9831 prop = RNA_def_property(srna, "random_rotation", PROP_FLOAT, PROP_EULER);
9832 RNA_def_property_float_sdna(prop, nullptr, "rnd_rot");
9833 RNA_def_property_ui_text(prop, "Random Rotation", "Value for changes in rotation");
9835 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9836
9837 prop = RNA_def_property(srna, "random_scale", PROP_FLOAT, PROP_XYZ);
9838 RNA_def_property_float_sdna(prop, nullptr, "rnd_scale");
9839 RNA_def_property_ui_text(prop, "Scale", "Value for changes in scale");
9841 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9842
9843 prop = RNA_def_property(srna, "seed", PROP_INT, PROP_UNSIGNED);
9844 RNA_def_property_ui_text(prop, "Seed", "Random seed");
9845 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9846
9847 prop = RNA_def_property(srna, "replace_material", PROP_INT, PROP_NONE);
9848 RNA_def_property_int_sdna(prop, nullptr, "mat_rpl");
9849 RNA_def_property_range(prop, 0, SHRT_MAX);
9851 prop,
9852 "Material",
9853 "Index of the material used for generated strokes (0 keep original material)");
9854 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9855
9856 prop = RNA_def_property(srna, "use_constant_offset", PROP_BOOLEAN, PROP_NONE);
9858 RNA_def_property_ui_text(prop, "Offset", "Enable offset");
9859 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9860
9861 prop = RNA_def_property(srna, "use_object_offset", PROP_BOOLEAN, PROP_NONE);
9864 prop, "Use Object Offset", "Add another object's transformation to the total offset");
9865 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9866
9867 prop = RNA_def_property(srna, "use_relative_offset", PROP_BOOLEAN, PROP_NONE);
9869 RNA_def_property_ui_text(prop, "Shift", "Add an offset relative to the object's bounding box");
9870 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9871
9872 prop = RNA_def_property(srna, "use_uniform_random_scale", PROP_BOOLEAN, PROP_NONE);
9874 prop, nullptr, "flag", MOD_GREASE_PENCIL_ARRAY_UNIFORM_RANDOM_SCALE);
9876 prop, "Uniform Scale", "Use the same random seed for each scale axis for a uniform scale");
9877 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9878
9880}
9881
9883{
9884 StructRNA *srna;
9885 PropertyRNA *prop;
9886
9887 srna = RNA_def_struct(brna, "GreasePencilLatticeModifier", "Modifier");
9889 srna, "Grease Pencil Lattice Modifier", "Deform strokes using a lattice object");
9890 RNA_def_struct_sdna(srna, "GreasePencilLatticeModifierData");
9891 RNA_def_struct_ui_icon(srna, ICON_MOD_LATTICE);
9892
9895 srna, "rna_GreasePencilLatticeModifier_material_filter_set");
9897 srna, "rna_GreasePencilLatticeModifier_vertex_group_name_set");
9898
9899 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
9900
9902
9903 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
9904 RNA_def_property_ui_text(prop, "Object", "Lattice object to deform with");
9906 nullptr,
9907 "rna_GreasePencilLatticeModifier_object_set",
9908 nullptr,
9909 "rna_Lattice_object_poll");
9911 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
9912
9913 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
9915 RNA_def_property_ui_range(prop, 0, 1, 10, 2);
9916 RNA_def_property_ui_text(prop, "Strength", "Strength of modifier effect");
9917 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9918
9920}
9921
9923{
9924 StructRNA *srna;
9925 PropertyRNA *prop;
9926
9927 srna = RNA_def_struct(brna, "GreasePencilDashModifierSegment", nullptr);
9928 RNA_def_struct_ui_text(srna, "Dash Modifier Segment", "Configuration for a single dash segment");
9929 RNA_def_struct_sdna(srna, "GreasePencilDashModifierSegment");
9930 RNA_def_struct_path_func(srna, "rna_GreasePencilDashModifierSegment_path");
9931
9932 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
9933 RNA_def_property_ui_text(prop, "Name", "Name of the dash segment");
9935 prop, nullptr, nullptr, "rna_GreasePencilDashModifierSegment_name_set");
9936 RNA_def_struct_name_property(srna, prop);
9938
9939 prop = RNA_def_property(srna, "dash", PROP_INT, PROP_NONE);
9942 prop,
9943 "Dash",
9944 "The number of consecutive points from the original stroke to include in this segment");
9945 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9946
9947 prop = RNA_def_property(srna, "gap", PROP_INT, PROP_NONE);
9949 RNA_def_property_ui_text(prop, "Gap", "The number of points skipped after this segment");
9950 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9951
9952 prop = RNA_def_property(srna, "radius", PROP_FLOAT, PROP_FACTOR | PROP_UNSIGNED);
9953 RNA_def_property_ui_range(prop, 0, 1, 0.1, 2);
9955 prop, "Radius", "The factor to apply to the original point's radius for the new points");
9956 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9957
9958 prop = RNA_def_property(srna, "opacity", PROP_FLOAT, PROP_FACTOR);
9959 RNA_def_property_ui_range(prop, 0, 1, 0.1, 2);
9961 prop, "Opacity", "The factor to apply to the original point's opacity for the new points");
9962 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9963
9964 prop = RNA_def_property(srna, "material_index", PROP_INT, PROP_NONE);
9965 RNA_def_property_int_sdna(prop, nullptr, "mat_nr");
9968 prop,
9969 "Material Index",
9970 "Use this index on generated segment. -1 means using the existing material.");
9971 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9972
9973 prop = RNA_def_property(srna, "use_cyclic", PROP_BOOLEAN, PROP_NONE);
9975 RNA_def_property_ui_text(prop, "Cyclic", "Enable cyclic on individual stroke dashes");
9976 RNA_def_property_update(prop, 0, "rna_Modifier_update");
9977}
9978
9980{
9981 StructRNA *srna;
9982 PropertyRNA *prop;
9983
9984 srna = RNA_def_struct(brna, "GreasePencilDashModifierData", "Modifier");
9986 srna, "Grease Pencil Dash Modifier", "Create dot-dash effect for strokes");
9987 RNA_def_struct_sdna(srna, "GreasePencilDashModifierData");
9988 RNA_def_struct_ui_icon(srna, ICON_MOD_DASH);
9989
9992 srna, "rna_GreasePencilDashModifier_material_filter_set");
9993
9994 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
9995
9997
9998 prop = RNA_def_property(srna, "segments", PROP_COLLECTION, PROP_NONE);
9999 RNA_def_property_struct_type(prop, "GreasePencilDashModifierSegment");
10000 RNA_def_property_collection_sdna(prop, nullptr, "segments_array", nullptr);
10002 "rna_GreasePencilDashModifier_segments_begin",
10003 "rna_iterator_array_next",
10004 "rna_iterator_array_end",
10005 "rna_iterator_array_get",
10006 nullptr,
10007 nullptr,
10008 nullptr,
10009 nullptr);
10010 RNA_def_property_ui_text(prop, "Segments", "");
10011
10012 prop = RNA_def_property(srna, "segment_active_index", PROP_INT, PROP_UNSIGNED);
10014 RNA_def_property_ui_text(prop, "Active Dash Segment Index", "Active index in the segment list");
10015
10016 prop = RNA_def_property(srna, "dash_offset", PROP_INT, PROP_NONE);
10018 prop,
10019 "Offset",
10020 "Offset into each stroke before the beginning of the dashed segment generation");
10021 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10022
10024}
10025
10027{
10028 StructRNA *srna;
10029 PropertyRNA *prop;
10030
10031 static const EnumPropertyItem axis_items[] = {
10032 {0, "X", 0, "X", ""},
10033 {1, "Y", 0, "Y", ""},
10034 {2, "Z", 0, "Z", ""},
10035 {0, nullptr, 0, nullptr, nullptr},
10036 };
10037
10038 static const EnumPropertyItem space_items[] = {
10039 {MOD_GREASE_PENCIL_WEIGHT_ANGLE_SPACE_LOCAL, "LOCAL", 0, "Local Space", ""},
10040 {MOD_GREASE_PENCIL_WEIGHT_ANGLE_SPACE_WORLD, "WORLD", 0, "World Space", ""},
10041 {0, nullptr, 0, nullptr, nullptr},
10042 };
10043
10044 srna = RNA_def_struct(brna, "GreasePencilWeightAngleModifier", "Modifier");
10045 RNA_def_struct_ui_text(srna, "Weight Modifier Angle", "Calculate Vertex Weight dynamically");
10046 RNA_def_struct_sdna(srna, "GreasePencilWeightAngleModifierData");
10047 RNA_def_struct_ui_icon(srna, ICON_MOD_VERTEX_WEIGHT);
10048
10051 srna, "rna_GreasePencilWeightAngleModifier_material_filter_set");
10053 srna, "rna_GreasePencilWeightAngleModifier_vertex_group_name_set");
10054
10055 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10056
10058
10059 prop = RNA_def_property(srna, "target_vertex_group", PROP_STRING, PROP_NONE);
10060 RNA_def_property_string_sdna(prop, nullptr, "target_vgname");
10061 RNA_def_property_ui_text(prop, "Vertex Group", "Output Vertex group");
10063 prop, nullptr, nullptr, "rna_GreasePencilWeightAngleModifier_target_vgname_set");
10064 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10065
10066 prop = RNA_def_property(srna, "use_multiply", PROP_BOOLEAN, PROP_NONE);
10069 prop,
10070 "Multiply Weights",
10071 "Multiply the calculated weights with the existing values in the vertex group");
10072 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10073
10074 prop = RNA_def_property(srna, "use_invert_output", PROP_BOOLEAN, PROP_NONE);
10076 RNA_def_property_ui_text(prop, "Invert", "Invert output weight values");
10077 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10078
10079 prop = RNA_def_property(srna, "angle", PROP_FLOAT, PROP_ANGLE);
10080 RNA_def_property_float_sdna(prop, nullptr, "angle");
10081 RNA_def_property_ui_text(prop, "Angle", "Angle");
10082 RNA_def_property_range(prop, 0.0f, DEG2RAD(180.0f));
10083 RNA_def_property_update(prop, NC_SCENE, "rna_Modifier_update");
10084
10085 prop = RNA_def_property(srna, "axis", PROP_ENUM, PROP_NONE);
10086 RNA_def_property_enum_sdna(prop, nullptr, "axis");
10087 RNA_def_property_enum_items(prop, axis_items);
10088 RNA_def_property_ui_text(prop, "Axis", "");
10089 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10090
10091 prop = RNA_def_property(srna, "space", PROP_ENUM, PROP_NONE);
10092 RNA_def_property_enum_sdna(prop, nullptr, "space");
10094 RNA_def_property_ui_text(prop, "Space", "Coordinates space");
10095 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10096
10097 prop = RNA_def_property(srna, "minimum_weight", PROP_FLOAT, PROP_FACTOR);
10098 RNA_def_property_float_sdna(prop, nullptr, "min_weight");
10099 RNA_def_property_ui_text(prop, "Minimum", "Minimum value for vertex weight");
10100 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10101
10103}
10104
10106{
10107 StructRNA *srna;
10108 PropertyRNA *prop;
10109
10110 srna = RNA_def_struct(brna, "GreasePencilMultiplyModifier", "Modifier");
10111 RNA_def_struct_ui_text(srna, "Multiply Modifier", "Generate multiple strokes from one stroke");
10112 RNA_def_struct_sdna(srna, "GreasePencilMultiModifierData");
10113 RNA_def_struct_ui_icon(srna, ICON_GP_MULTIFRAME_EDITING);
10114
10117 srna, "rna_GreasePencilMultiModifier_material_filter_set");
10118
10119 rna_def_modifier_panel_open_prop(srna, "open_fading_panel", 1);
10120 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10121
10123
10124 prop = RNA_def_property(srna, "use_fade", PROP_BOOLEAN, PROP_NONE);
10126 RNA_def_property_ui_text(prop, "Fade", "Fade the stroke thickness for each generated stroke");
10127 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10128
10129 prop = RNA_def_property(srna, "duplicates", PROP_INT, PROP_NONE);
10130 RNA_def_property_int_sdna(prop, nullptr, "duplications");
10131 RNA_def_property_range(prop, 0, 999);
10132 RNA_def_property_ui_range(prop, 1, 10, 1, 1);
10133 RNA_def_property_ui_text(prop, "Duplicates", "How many copies of strokes be displayed");
10134 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10135
10136 prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE);
10138 RNA_def_property_ui_range(prop, 0.0, 1.0, 0.01, 3);
10139 RNA_def_property_ui_text(prop, "Distance", "Distance of duplications");
10140 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10141
10142 prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_NONE);
10143 RNA_def_property_ui_range(prop, -1, 1, 0.01, 3);
10144 RNA_def_property_ui_text(prop, "Offset", "Offset of duplicates, -1 to 1 (inner to outer)");
10145 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10146
10147 prop = RNA_def_property(srna, "fading_thickness", PROP_FLOAT, PROP_NONE);
10148 RNA_def_property_range(prop, 0, 1);
10149 RNA_def_property_ui_text(prop, "Thickness", "Fade influence of stroke's thickness");
10150 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10151
10152 prop = RNA_def_property(srna, "fading_opacity", PROP_FLOAT, PROP_NONE);
10153 RNA_def_property_range(prop, 0, 1);
10154 RNA_def_property_ui_text(prop, "Opacity", "Fade influence of stroke's opacity");
10155 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10156
10157 prop = RNA_def_property(srna, "fading_center", PROP_FLOAT, PROP_FACTOR);
10158 RNA_def_property_range(prop, 0, 1);
10159 RNA_def_property_ui_text(prop, "Center", "Fade center");
10160 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10161
10163}
10164
10166{
10167 StructRNA *srna;
10168 PropertyRNA *prop;
10169
10170 static const EnumPropertyItem hook_falloff_items[] = {
10171 {MOD_GREASE_PENCIL_HOOK_Falloff_None, "NONE", 0, "No Falloff", ""},
10172 {MOD_GREASE_PENCIL_HOOK_Falloff_Curve, "CURVE", 0, "Curve", ""},
10173 {MOD_GREASE_PENCIL_HOOK_Falloff_Smooth, "SMOOTH", ICON_SMOOTHCURVE, "Smooth", ""},
10174 {MOD_GREASE_PENCIL_HOOK_Falloff_Sphere, "SPHERE", ICON_SPHERECURVE, "Sphere", ""},
10175 {MOD_GREASE_PENCIL_HOOK_Falloff_Root, "ROOT", ICON_ROOTCURVE, "Root", ""},
10177 "INVERSE_SQUARE",
10178 ICON_ROOTCURVE,
10179 "Inverse Square",
10180 ""},
10181 {MOD_GREASE_PENCIL_HOOK_Falloff_Sharp, "SHARP", ICON_SHARPCURVE, "Sharp", ""},
10182 {MOD_GREASE_PENCIL_HOOK_Falloff_Linear, "LINEAR", ICON_LINCURVE, "Linear", ""},
10183 {MOD_GREASE_PENCIL_HOOK_Falloff_Const, "CONSTANT", ICON_NOCURVE, "Constant", ""},
10184 {0, nullptr, 0, nullptr, nullptr},
10185 };
10186
10187 srna = RNA_def_struct(brna, "GreasePencilHookModifier", "Modifier");
10189 srna, "Hook Modifier", "Hook modifier to modify the location of stroke points");
10190 RNA_def_struct_sdna(srna, "GreasePencilHookModifierData");
10191 RNA_def_struct_ui_icon(srna, ICON_HOOK);
10192
10195 srna, "rna_GreasePencilHookModifier_material_filter_set");
10197 srna, "rna_GreasePencilHookModifier_vertex_group_name_set");
10199
10200 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10201 rna_def_modifier_panel_open_prop(srna, "open_falloff_panel", 1);
10202
10204
10205 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
10207 prop, "Object", "Parent Object for hook, also recalculates and clears offset");
10210 prop, nullptr, "rna_GreasePencilHookModifier_object_set", nullptr, nullptr);
10211 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
10212
10213 prop = RNA_def_property(srna, "subtarget", PROP_STRING, PROP_NONE);
10214 RNA_def_property_string_sdna(prop, nullptr, "subtarget");
10216 prop,
10217 "Sub-Target",
10218 "Name of Parent Bone for hook (if applicable), also recalculates and clears offset");
10219 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
10220
10221 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
10222 RNA_def_property_float_sdna(prop, nullptr, "force");
10223 RNA_def_property_range(prop, 0, 1);
10224 RNA_def_property_ui_text(prop, "Strength", "Relative force of the hook");
10225 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10226
10227 prop = RNA_def_property(srna, "falloff_type", PROP_ENUM, PROP_NONE);
10228 RNA_def_property_enum_items(prop, hook_falloff_items); /* share the enum */
10229 RNA_def_property_ui_text(prop, "Falloff Type", "");
10231 BLT_I18NCONTEXT_ID_CURVE_LEGACY); /* Abusing id_curve :/ */
10232 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10233
10234 prop = RNA_def_property(srna, "falloff_radius", PROP_FLOAT, PROP_DISTANCE);
10235 RNA_def_property_float_sdna(prop, nullptr, "falloff");
10237 RNA_def_property_ui_range(prop, 0, 100, 100, 2);
10239 prop, "Radius", "If not zero, the distance from the hook where influence ends");
10240 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10241
10242 prop = RNA_def_property(srna, "center", PROP_FLOAT, PROP_NONE);
10243 RNA_def_property_float_sdna(prop, nullptr, "cent");
10244 RNA_def_property_ui_text(prop, "Hook Center", "");
10245 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10246
10247 prop = RNA_def_property(srna, "matrix_inverse", PROP_FLOAT, PROP_MATRIX);
10248 RNA_def_property_float_sdna(prop, nullptr, "parentinv");
10251 prop, "Matrix", "Reverse the transformation between this object and its target");
10252 RNA_def_property_update(prop, NC_OBJECT | ND_TRANSFORM, "rna_Modifier_update");
10253
10254 prop = RNA_def_property(srna, "use_falloff_uniform", PROP_BOOLEAN, PROP_NONE);
10256 RNA_def_property_ui_text(prop, "Uniform Falloff", "Compensate for non-uniform object scale");
10257 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10258
10260}
10261
10263{
10264 StructRNA *srna;
10265 PropertyRNA *prop;
10266
10267 srna = RNA_def_struct(brna, "GreasePencilWeightProximityModifier", "Modifier");
10268 RNA_def_struct_ui_text(srna, "Weight Modifier Proximity", "Calculate Vertex Weight dynamically");
10269 RNA_def_struct_sdna(srna, "GreasePencilWeightProximityModifierData");
10270 RNA_def_struct_ui_icon(srna, ICON_MOD_VERTEX_WEIGHT);
10271
10274 srna, "rna_GreasePencilWeightProximityModifier_material_filter_set");
10276 srna, "rna_GreasePencilWeightProximityModifier_vertex_group_name_set");
10277
10278 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10279
10281
10282 prop = RNA_def_property(srna, "use_multiply", PROP_BOOLEAN, PROP_NONE);
10286 prop,
10287 "Multiply Weights",
10288 "Multiply the calculated weights with the existing values in the vertex group");
10289 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10290
10291 prop = RNA_def_property(srna, "use_invert_output", PROP_BOOLEAN, PROP_NONE);
10294 RNA_def_property_ui_text(prop, "Invert", "Invert output weight values");
10295 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10296
10297 prop = RNA_def_property(srna, "target_vertex_group", PROP_STRING, PROP_NONE);
10298 RNA_def_property_string_sdna(prop, nullptr, "target_vgname");
10299 RNA_def_property_ui_text(prop, "Vertex Group", "Output Vertex group");
10301 prop, nullptr, nullptr, "rna_GreasePencilWeightProximityModifier_target_vgname_set");
10302 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10303
10304 /* Distance reference object */
10305 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
10306 RNA_def_property_ui_text(prop, "Target Object", "Object used as distance reference");
10308 prop, nullptr, "rna_GreasePencilWeightProximityModifier_object_set", nullptr, nullptr);
10310 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
10311
10312 prop = RNA_def_property(srna, "distance_start", PROP_FLOAT, PROP_DISTANCE);
10313 RNA_def_property_float_sdna(prop, nullptr, "dist_start");
10314 RNA_def_property_range(prop, 0.0, FLT_MAX);
10315 RNA_def_property_ui_range(prop, 0.0, 1000.0, 1.0, 2);
10316 RNA_def_property_ui_text(prop, "Lowest", "Distance mapping to 0.0 weight");
10317 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10318
10319 prop = RNA_def_property(srna, "minimum_weight", PROP_FLOAT, PROP_FACTOR);
10320 RNA_def_property_float_sdna(prop, nullptr, "min_weight");
10321 RNA_def_property_ui_text(prop, "Minimum", "Minimum value for vertex weight");
10322 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10323
10324 prop = RNA_def_property(srna, "distance_end", PROP_FLOAT, PROP_DISTANCE);
10325 RNA_def_property_float_sdna(prop, nullptr, "dist_end");
10326 RNA_def_property_range(prop, 0.0, FLT_MAX);
10327 RNA_def_property_ui_range(prop, 0.0, 1000.0, 1.0, 2);
10328 RNA_def_property_ui_text(prop, "Highest", "Distance mapping to 1.0 weight");
10329 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10330
10332}
10333
10335{
10336 StructRNA *srna;
10337 PropertyRNA *prop;
10338
10339 static EnumPropertyItem prop_gpencil_simplify_mode_items[] = {
10341 "FIXED",
10342 ICON_IPO_CONSTANT,
10343 "Fixed",
10344 "Delete alternating vertices in the stroke, except extremes"},
10346 "ADAPTIVE",
10347 ICON_IPO_EASE_IN_OUT,
10348 "Adaptive",
10349 "Use a Ramer-Douglas-Peucker algorithm to simplify the stroke preserving main shape"},
10351 "SAMPLE",
10352 ICON_IPO_EASE_IN_OUT,
10353 "Sample",
10354 "Re-sample the stroke with segments of the specified length"},
10356 "MERGE",
10357 ICON_IPO_EASE_IN_OUT,
10358 "Merge",
10359 "Simplify the stroke by merging vertices closer than a given distance"},
10360 {0, nullptr, 0, nullptr, nullptr},
10361 };
10362
10363 srna = RNA_def_struct(brna, "GreasePencilSimplifyModifier", "Modifier");
10364 RNA_def_struct_ui_text(srna, "Simplify Modifier", "Simplify Stroke modifier");
10365 RNA_def_struct_sdna(srna, "GreasePencilSimplifyModifierData");
10366 RNA_def_struct_ui_icon(srna, ICON_MOD_SIMPLIFY);
10367
10370 srna, "rna_GreasePencilSimplifyModifier_material_filter_set");
10372 srna, "rna_GreasePencilSimplifyModifier_vertex_group_name_set");
10373
10374 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10375
10376 prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_FACTOR);
10377 RNA_def_property_float_sdna(prop, nullptr, "factor");
10378 RNA_def_property_range(prop, 0, 100.0);
10379 RNA_def_property_ui_range(prop, 0, 5.0f, 1.0f, 3);
10380 RNA_def_property_ui_text(prop, "Factor", "Factor of Simplify");
10381 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10382
10383 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
10384 RNA_def_property_enum_items(prop, prop_gpencil_simplify_mode_items);
10385 RNA_def_property_ui_text(prop, "Mode", "How to simplify the stroke");
10386 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10387
10388 prop = RNA_def_property(srna, "step", PROP_INT, PROP_UNSIGNED);
10389 RNA_def_property_int_sdna(prop, nullptr, "step");
10390 RNA_def_property_range(prop, 1, 50);
10391 RNA_def_property_ui_text(prop, "Iterations", "Number of times to apply simplify");
10392 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10393
10394 prop = RNA_def_property(srna, "length", PROP_FLOAT, PROP_DISTANCE);
10395 RNA_def_property_float_sdna(prop, nullptr, "length");
10397 RNA_def_property_ui_range(prop, 0.005, 1.0, 0.05, 3);
10398 RNA_def_property_ui_text(prop, "Length", "Length of each segment");
10399 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10400
10401 prop = RNA_def_property(srna, "sharp_threshold", PROP_FLOAT, PROP_ANGLE);
10402 RNA_def_property_float_sdna(prop, nullptr, "sharp_threshold");
10403 RNA_def_property_range(prop, 0, M_PI);
10404 RNA_def_property_ui_range(prop, 0, M_PI, 1.0, 1);
10406 prop, "Sharp Threshold", "Preserve corners that have sharper angle than this threshold");
10407 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10408
10409 prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_DISTANCE);
10410 RNA_def_property_float_sdna(prop, nullptr, "distance");
10412 RNA_def_property_ui_range(prop, 0, 1.0, 0.01, 3);
10413 RNA_def_property_ui_text(prop, "Distance", "Distance between points");
10414 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10415
10417}
10418
10420{
10421 StructRNA *srna;
10422 PropertyRNA *prop;
10423
10424 srna = RNA_def_struct(brna, "GreasePencilArmatureModifier", "Modifier");
10425 RNA_def_struct_ui_text(srna, "Armature Modifier", "Deform stroke points using armature object");
10426 RNA_def_struct_sdna(srna, "GreasePencilArmatureModifierData");
10427 RNA_def_struct_ui_icon(srna, ICON_MOD_ARMATURE);
10428
10430 srna, "rna_GreasePencilArmatureModifier_vertex_group_name_set");
10431
10432 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10433
10435
10436 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
10437 RNA_def_property_ui_text(prop, "Object", "Armature object to deform with");
10439 nullptr,
10440 "rna_GreasePencilArmatureModifier_object_set",
10441 nullptr,
10442 "rna_Armature_object_poll");
10444 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
10445
10446 prop = RNA_def_property(srna, "use_bone_envelopes", PROP_BOOLEAN, PROP_NONE);
10447 RNA_def_property_boolean_sdna(prop, nullptr, "deformflag", ARM_DEF_ENVELOPE);
10448 RNA_def_property_ui_text(prop, "Use Bone Envelopes", "Bind Bone envelopes to armature modifier");
10449 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10450
10451 prop = RNA_def_property(srna, "use_vertex_groups", PROP_BOOLEAN, PROP_NONE);
10452 RNA_def_property_boolean_sdna(prop, nullptr, "deformflag", ARM_DEF_VGROUP);
10453 RNA_def_property_ui_text(prop, "Use Vertex Groups", "Bind vertex groups to armature modifier");
10454 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10455
10456 prop = RNA_def_property(srna, "use_deform_preserve_volume", PROP_BOOLEAN, PROP_NONE);
10457 RNA_def_property_boolean_sdna(prop, nullptr, "deformflag", ARM_DEF_QUATERNION);
10459 prop, "Preserve Volume", "Deform rotation interpolation with quaternions");
10460 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10461
10463}
10464
10466{
10467 StructRNA *srna;
10468 PropertyRNA *prop;
10469
10470 static const EnumPropertyItem segment_mode_items[] = {
10472 "NORMAL",
10473 0,
10474 "Regular",
10475 "Apply offset in usual animation direction"},
10477 "REVERSE",
10478 0,
10479 "Reverse",
10480 "Apply offset in reverse animation direction"},
10482 "PINGPONG",
10483 0,
10484 "Ping Pong",
10485 "Loop back and forth"},
10486 {0, nullptr, 0, nullptr, nullptr},
10487 };
10488
10489 srna = RNA_def_struct(brna, "GreasePencilTimeModifierSegment", nullptr);
10490 RNA_def_struct_ui_text(srna, "Time Modifier Segment", "Configuration for a single dash segment");
10491 RNA_def_struct_sdna(srna, "GreasePencilTimeModifierSegment");
10492 RNA_def_struct_path_func(srna, "rna_GreasePencilTimeModifierSegment_path");
10493
10494 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
10495 RNA_def_property_ui_text(prop, "Name", "Name of the dash segment");
10497 prop, nullptr, nullptr, "rna_GreasePencilTimeModifierSegment_name_set");
10498 RNA_def_struct_name_property(srna, prop);
10500
10501 prop = RNA_def_property(srna, "segment_start", PROP_INT, PROP_NONE);
10503 RNA_def_property_ui_text(prop, "Frame Start", "First frame of the segment");
10504 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10505
10506 prop = RNA_def_property(srna, "segment_end", PROP_INT, PROP_NONE);
10508 RNA_def_property_ui_text(prop, "End", "Last frame of the segment");
10509 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10510
10511 prop = RNA_def_property(srna, "segment_repeat", PROP_INT, PROP_NONE);
10513 RNA_def_property_ui_text(prop, "Repeat", "Number of cycle repeats");
10514 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10515
10516 prop = RNA_def_property(srna, "segment_mode", PROP_ENUM, PROP_NONE);
10517 RNA_def_property_enum_sdna(prop, nullptr, "segment_mode");
10518 RNA_def_property_enum_items(prop, segment_mode_items);
10519 RNA_def_property_ui_text(prop, "Mode", "");
10520 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10521}
10522
10524{
10525 StructRNA *srna;
10526 PropertyRNA *prop;
10527
10528 static const EnumPropertyItem time_mode_items[] = {
10530 "NORMAL",
10531 0,
10532 "Regular",
10533 "Apply offset in usual animation direction"},
10535 "REVERSE",
10536 0,
10537 "Reverse",
10538 "Apply offset in reverse animation direction"},
10540 "FIX",
10541 0,
10542 "Fixed Frame",
10543 "Keep frame and do not change with time"},
10545 "PINGPONG",
10546 0,
10547 "Ping Pong",
10548 "Loop back and forth starting in reverse"},
10550 "CHAIN",
10551 0,
10552 "Chain",
10553 "List of chained animation segments"},
10554 {0, nullptr, 0, nullptr, nullptr},
10555 };
10556
10557 srna = RNA_def_struct(brna, "GreasePencilTimeModifier", "Modifier");
10558 RNA_def_struct_ui_text(srna, "Grease Pencil Time Modifier", "Offset keyframes");
10559 RNA_def_struct_sdna(srna, "GreasePencilTimeModifierData");
10560 RNA_def_struct_ui_icon(srna, ICON_MOD_TIME);
10561
10563
10564 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10565 rna_def_modifier_panel_open_prop(srna, "open_custom_range_panel", 1);
10566
10568
10569 prop = RNA_def_property(srna, "segments", PROP_COLLECTION, PROP_NONE);
10570 RNA_def_property_struct_type(prop, "GreasePencilTimeModifierSegment");
10571 RNA_def_property_collection_sdna(prop, nullptr, "segments_array", nullptr);
10573 "rna_GreasePencilTimeModifier_segments_begin",
10574 "rna_iterator_array_next",
10575 "rna_iterator_array_end",
10576 "rna_iterator_array_get",
10577 nullptr,
10578 nullptr,
10579 nullptr,
10580 nullptr);
10581 RNA_def_property_ui_text(prop, "Segments", "");
10582
10583 prop = RNA_def_property(srna, "segment_active_index", PROP_INT, PROP_UNSIGNED);
10585 RNA_def_property_ui_text(prop, "Active Time Segment Index", "Active index in the segment list");
10586
10587 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
10588 RNA_def_property_enum_sdna(prop, nullptr, "mode");
10589 RNA_def_property_enum_items(prop, time_mode_items);
10590 RNA_def_property_ui_text(prop, "Mode", "");
10591 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10592
10593 prop = RNA_def_property(srna, "offset", PROP_INT, PROP_NONE);
10594 RNA_def_property_int_sdna(prop, nullptr, "offset");
10595 RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
10597 prop, "Frame Offset", "Number of frames to offset original keyframe number or frame to fix");
10598 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10599
10600 prop = RNA_def_property(srna, "frame_scale", PROP_FLOAT, PROP_NONE);
10601 RNA_def_property_float_sdna(prop, nullptr, "frame_scale");
10602 RNA_def_property_range(prop, 0.001f, 100.0f);
10603 RNA_def_property_ui_text(prop, "Frame Scale", "Evaluation time in seconds");
10604 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10605
10606 prop = RNA_def_property(srna, "frame_start", PROP_INT, PROP_TIME);
10608 RNA_def_property_int_sdna(prop, nullptr, "sfra");
10610 prop, nullptr, "rna_GreasePencilTimeModifier_start_frame_set", nullptr);
10612 RNA_def_property_ui_text(prop, "Start Frame", "First frame of the range");
10613 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10614
10615 prop = RNA_def_property(srna, "frame_end", PROP_INT, PROP_TIME);
10617 RNA_def_property_int_sdna(prop, nullptr, "efra");
10618 RNA_def_property_int_funcs(prop, nullptr, "rna_GreasePencilTimeModifier_end_frame_set", nullptr);
10620 RNA_def_property_ui_text(prop, "End Frame", "Final frame of the range");
10621 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10622
10623 prop = RNA_def_property(srna, "use_keep_loop", PROP_BOOLEAN, PROP_NONE);
10626 prop, "Keep Loop", "Retiming end frames and move to start of animation to keep loop");
10627 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10628
10629 prop = RNA_def_property(srna, "use_custom_frame_range", PROP_BOOLEAN, PROP_NONE);
10632 prop, "Custom Range", "Define a custom range of frames to use in modifier");
10633 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10634
10636}
10637
10639{
10640 StructRNA *srna;
10641 PropertyRNA *prop;
10642
10643 static const EnumPropertyItem envelope_mode_items[] = {
10645 "DEFORM",
10646 0,
10647 "Deform",
10648 "Deform the stroke to best match the envelope shape"},
10650 "SEGMENTS",
10651 0,
10652 "Segments",
10653 "Add segments to create the envelope. Keep the original stroke."},
10655 "FILLS",
10656 0,
10657 "Fills",
10658 "Add fill segments to create the envelope. Don't keep the original stroke."},
10659 {0, nullptr, 0, nullptr, nullptr},
10660 };
10661
10662 srna = RNA_def_struct(brna, "GreasePencilEnvelopeModifier", "Modifier");
10664 srna, "Grease Pencil Envelope Modifier", "Envelope stroke effect modifier");
10665 RNA_def_struct_sdna(srna, "GreasePencilEnvelopeModifierData");
10666 RNA_def_struct_ui_icon(srna, ICON_MOD_ENVELOPE);
10667
10670 srna, "rna_GreasePencilEnvelopeModifier_material_filter_set");
10672 srna, "rna_GreasePencilEnvelopeModifier_vertex_group_name_set");
10673
10674 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10675
10677
10678 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
10679 RNA_def_property_enum_sdna(prop, nullptr, "mode");
10680 RNA_def_property_enum_items(prop, envelope_mode_items);
10681 RNA_def_property_ui_text(prop, "Mode", "Algorithm to use for generating the envelope");
10682 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10683
10684 prop = RNA_def_property(srna, "spread", PROP_INT, PROP_NONE);
10685 RNA_def_property_int_sdna(prop, nullptr, "spread");
10686 RNA_def_property_range(prop, 1, INT_MAX);
10688 prop, "Spread Length", "The number of points to skip to create straight segments");
10689 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10690
10691 prop = RNA_def_property(srna, "mat_nr", PROP_INT, PROP_NONE);
10692 RNA_def_property_int_sdna(prop, nullptr, "mat_nr");
10694 RNA_def_property_ui_text(prop, "Material Index", "The material to use for the new strokes");
10695 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10696
10697 prop = RNA_def_property(srna, "thickness", PROP_FLOAT, PROP_FACTOR);
10698 RNA_def_property_float_sdna(prop, nullptr, "thickness");
10700 RNA_def_property_ui_range(prop, 0, 1, 10, 3);
10701 RNA_def_property_ui_text(prop, "Thickness", "Multiplier for the thickness of the new strokes");
10702 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10703
10704 prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_FACTOR);
10705 RNA_def_property_float_sdna(prop, nullptr, "strength");
10707 RNA_def_property_ui_range(prop, 0, 1, 10, 3);
10708 RNA_def_property_ui_text(prop, "Strength", "Multiplier for the strength of the new strokes");
10710 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10711
10712 prop = RNA_def_property(srna, "skip", PROP_INT, PROP_NONE);
10713 RNA_def_property_int_sdna(prop, nullptr, "skip");
10714 RNA_def_property_range(prop, 0, INT_MAX);
10716 prop, "Skip Segments", "The number of generated segments to skip to reduce complexity");
10717 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10718
10720}
10721
10723{
10724 StructRNA *srna;
10725 PropertyRNA *prop;
10726
10727 srna = RNA_def_struct(brna, "GreasePencilOutlineModifier", "Modifier");
10728 RNA_def_struct_ui_text(srna, "Outline Modifier", "Outline of Strokes modifier from camera view");
10729 RNA_def_struct_sdna(srna, "GreasePencilOutlineModifierData");
10730 RNA_def_struct_ui_icon(srna, ICON_MOD_OUTLINE);
10731
10734 srna, "rna_GreasePencilOutlineModifier_material_filter_set");
10735
10736 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10737
10739
10740 prop = RNA_def_property(srna, "thickness", PROP_INT, PROP_NONE);
10741 RNA_def_property_int_sdna(prop, nullptr, "thickness");
10742 RNA_def_property_range(prop, 1, 1000);
10743 RNA_def_property_ui_text(prop, "Thickness", "Thickness of the perimeter stroke");
10744 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10745
10746 prop = RNA_def_property(srna, "sample_length", PROP_FLOAT, PROP_NONE);
10747 RNA_def_property_float_sdna(prop, nullptr, "sample_length");
10748 RNA_def_property_ui_range(prop, 0.0f, 100.0f, 0.1f, 2);
10749 RNA_def_property_ui_text(prop, "Sample Length", "");
10750 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10751
10752 prop = RNA_def_property(srna, "subdivision", PROP_INT, PROP_NONE);
10753 RNA_def_property_int_sdna(prop, nullptr, "subdiv");
10754 RNA_def_property_range(prop, 0, 10);
10755 RNA_def_property_ui_text(prop, "Subdivisions", "Number of subdivisions");
10756 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10757
10758 prop = RNA_def_property(srna, "use_keep_shape", PROP_BOOLEAN, PROP_NONE);
10760 RNA_def_property_ui_text(prop, "Keep Shape", "Try to keep global shape");
10761 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10762
10763 prop = RNA_def_property(srna, "outline_material", PROP_POINTER, PROP_NONE);
10766 nullptr,
10767 "rna_GreasePencilOutlineModifier_outline_material_set",
10768 nullptr,
10769 "rna_GreasePencilModifier_material_poll");
10770 RNA_def_property_ui_text(prop, "Outline Material", "Material used for outline strokes");
10771 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10772
10773 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
10774 RNA_def_property_ui_text(prop, "Target Object", "Target object to define stroke start");
10777 prop, nullptr, "rna_GreasePencilOutlineModifier_object_set", nullptr, nullptr);
10778 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
10779
10781}
10782
10784{
10785 StructRNA *srna;
10786 PropertyRNA *prop;
10787
10788 srna = RNA_def_struct(brna, "GreasePencilShrinkwrapModifier", "Modifier");
10790 "Shrinkwrap Modifier",
10791 "Shrink wrapping modifier to shrink wrap an object to a target");
10792 RNA_def_struct_sdna(srna, "GreasePencilShrinkwrapModifierData");
10793 RNA_def_struct_ui_icon(srna, ICON_MOD_SHRINKWRAP);
10794
10797 srna, "rna_GreasePencilShrinkwrapModifier_material_filter_set");
10799 srna, "rna_GreasePencilShrinkwrapModifier_vertex_group_name_set");
10800
10801 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10802
10804
10805 prop = RNA_def_property(srna, "wrap_method", PROP_ENUM, PROP_NONE);
10806 RNA_def_property_enum_sdna(prop, nullptr, "shrink_type");
10808 RNA_def_property_ui_text(prop, "Wrap Method", "");
10809 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
10810
10811 prop = RNA_def_property(srna, "wrap_mode", PROP_ENUM, PROP_NONE);
10812 RNA_def_property_enum_sdna(prop, nullptr, "shrink_mode");
10815 prop, "Snap Mode", "Select how vertices are constrained to the target surface");
10816 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
10817
10818 prop = RNA_def_property(srna, "cull_face", PROP_ENUM, PROP_NONE);
10819 RNA_def_property_enum_sdna(prop, nullptr, "shrink_opts");
10822 "rna_GreasePencilShrinkwrapModifier_face_cull_get",
10823 "rna_GreasePencilShrinkwrapModifier_face_cull_set",
10824 nullptr);
10826 prop,
10827 "Face Cull",
10828 "Stop vertices from projecting to a face on the target when facing towards/away");
10829 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10830
10831 prop = RNA_def_property(srna, "target", PROP_POINTER, PROP_NONE);
10832 RNA_def_property_ui_text(prop, "Target", "Mesh target to shrink to");
10834 nullptr,
10835 "rna_GreasePencilShrinkwrapModifier_target_set",
10836 nullptr,
10837 "rna_Mesh_object_poll");
10839 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
10840
10841 prop = RNA_def_property(srna, "auxiliary_target", PROP_POINTER, PROP_NONE);
10842 RNA_def_property_pointer_sdna(prop, nullptr, "aux_target");
10843 RNA_def_property_ui_text(prop, "Auxiliary Target", "Additional mesh target to shrink to");
10845 nullptr,
10846 "rna_GreasePencilShrinkwrapModifier_aux_target_set",
10847 nullptr,
10848 "rna_Mesh_object_poll");
10850 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
10851
10852 prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_DISTANCE);
10853 RNA_def_property_float_sdna(prop, nullptr, "keep_dist");
10855 RNA_def_property_ui_range(prop, -100, 100, 1, 2);
10856 RNA_def_property_ui_text(prop, "Offset", "Distance to keep from the target");
10857 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10858
10859 prop = RNA_def_property(srna, "project_limit", PROP_FLOAT, PROP_DISTANCE);
10860 RNA_def_property_float_sdna(prop, nullptr, "proj_limit");
10861 RNA_def_property_range(prop, 0.0, FLT_MAX);
10862 RNA_def_property_ui_range(prop, 0, 100, 1, 2);
10864 prop, "Project Limit", "Limit the distance used for projection (zero disables)");
10865 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10866
10867 prop = RNA_def_property(srna, "use_project_x", PROP_BOOLEAN, PROP_NONE);
10869 RNA_def_property_ui_text(prop, "X", "");
10870 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10871
10872 prop = RNA_def_property(srna, "use_project_y", PROP_BOOLEAN, PROP_NONE);
10874 RNA_def_property_ui_text(prop, "Y", "");
10875 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10876
10877 prop = RNA_def_property(srna, "use_project_z", PROP_BOOLEAN, PROP_NONE);
10879 RNA_def_property_ui_text(prop, "Z", "");
10880 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10881
10882 prop = RNA_def_property(srna, "subsurf_levels", PROP_INT, PROP_NONE);
10883 RNA_def_property_int_sdna(prop, nullptr, "subsurf_levels");
10884 RNA_def_property_range(prop, 0, 6);
10885 RNA_def_property_ui_range(prop, 0, 6, 1, -1);
10887 prop,
10888 "Subdivision Levels",
10889 "Number of subdivisions that must be performed before extracting vertices' "
10890 "positions and normals");
10891 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10892
10893 prop = RNA_def_property(srna, "use_negative_direction", PROP_BOOLEAN, PROP_NONE);
10895 prop, nullptr, "shrink_opts", MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR);
10897 prop, "Negative", "Allow vertices to move in the negative direction of axis");
10898 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10899
10900 prop = RNA_def_property(srna, "use_positive_direction", PROP_BOOLEAN, PROP_NONE);
10902 prop, nullptr, "shrink_opts", MOD_SHRINKWRAP_PROJECT_ALLOW_POS_DIR);
10904 prop, "Positive", "Allow vertices to move in the positive direction of axis");
10905 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10906
10907 prop = RNA_def_property(srna, "use_invert_cull", PROP_BOOLEAN, PROP_NONE);
10910 prop, "Invert Cull", "When projecting in the negative direction invert the face cull mode");
10911 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10912
10913 prop = RNA_def_property(srna, "smooth_factor", PROP_FLOAT, PROP_FACTOR);
10914 RNA_def_property_float_sdna(prop, nullptr, "smooth_factor");
10915 RNA_def_property_range(prop, 0, 1);
10916 RNA_def_property_ui_text(prop, "Smooth Factor", "Amount of smoothing to apply");
10917 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10918
10919 prop = RNA_def_property(srna, "smooth_step", PROP_INT, PROP_NONE);
10920 RNA_def_property_int_sdna(prop, nullptr, "smooth_step");
10921 RNA_def_property_range(prop, 1, 10);
10923 prop, "Steps", "Number of times to apply smooth (high numbers can reduce FPS)");
10924 RNA_def_property_update(prop, 0, "rna_Modifier_update");
10925
10927}
10928
10930{
10931 static EnumPropertyItem prop_gpencil_build_mode_items[] = {
10933 "SEQUENTIAL",
10934 0,
10935 "Sequential",
10936 "Strokes appear/disappear one after the other, but only a single one changes at a time"},
10938 "CONCURRENT",
10939 0,
10940 "Concurrent",
10941 "Multiple strokes appear/disappear at once"},
10943 "ADDITIVE",
10944 0,
10945 "Additive",
10946 "Builds only new strokes (assuming 'additive' drawing)"},
10947 {0, nullptr, 0, nullptr, nullptr},
10948 };
10949
10950 static EnumPropertyItem prop_gpencil_build_transition_items[] = {
10952 "GROW",
10953 0,
10954 "Grow",
10955 "Show points in the order they occur in each stroke "
10956 "(e.g. for animating lines being drawn)"},
10958 "SHRINK",
10959 0,
10960 "Shrink",
10961 "Hide points from the end of each stroke to the start "
10962 "(e.g. for animating lines being erased)"},
10964 "FADE", /* "Fade" is the original id string kept for compatibility purpose. */
10965 0,
10966 "Vanish",
10967 "Hide points in the order they occur in each stroke "
10968 "(e.g. for animating ink fading or vanishing after getting drawn)"},
10969 {0, nullptr, 0, nullptr, nullptr},
10970 };
10971
10972 static EnumPropertyItem prop_gpencil_build_time_align_items[] = {
10974 "START",
10975 0,
10976 "Align Start",
10977 "All strokes start at same time (i.e. short strokes finish earlier)"},
10979 "END",
10980 0,
10981 "Align End",
10982 "All strokes end at same time (i.e. short strokes start later)"},
10983 {0, nullptr, 0, nullptr, nullptr},
10984 };
10985
10986 StructRNA *srna;
10987 PropertyRNA *prop;
10988
10989 srna = RNA_def_struct(brna, "GreasePencilBuildModifier", "Modifier");
10990 RNA_def_struct_ui_text(srna, "Build Modifier", "Animate strokes appearing and disappearing");
10991 RNA_def_struct_sdna(srna, "GreasePencilBuildModifierData");
10992 RNA_def_struct_ui_icon(srna, ICON_MOD_BUILD);
10993
10996 srna, "rna_GreasePencilBuildModifier_material_filter_set");
10997
10998 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
10999 rna_def_modifier_panel_open_prop(srna, "open_frame_range_panel", 1);
11000 rna_def_modifier_panel_open_prop(srna, "open_fading_panel", 2);
11001
11003
11004 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
11005 RNA_def_property_enum_items(prop, prop_gpencil_build_mode_items);
11006 RNA_def_property_ui_text(prop, "Mode", "How strokes are being built");
11008 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11009
11010 prop = RNA_def_property(srna, "transition", PROP_ENUM, PROP_NONE);
11011 RNA_def_property_enum_items(prop, prop_gpencil_build_transition_items);
11013 prop, "Transition", "How are strokes animated (i.e. are they appearing or disappearing)");
11014 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11015
11016 prop = RNA_def_property(srna, "start_delay", PROP_FLOAT, PROP_NONE);
11017 RNA_def_property_float_sdna(prop, nullptr, "start_delay");
11019 prop, "Delay", "Number of frames after each GP keyframe before the modifier has any effect");
11021 RNA_def_property_ui_range(prop, 0, 200, 1, -1);
11022 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11023
11024 prop = RNA_def_property(srna, "length", PROP_FLOAT, PROP_NONE);
11025 RNA_def_property_float_sdna(prop, nullptr, "length");
11027 "Length",
11028 "Maximum number of frames that the build effect can run for "
11029 "(unless another GP keyframe occurs before this time has elapsed)");
11031 RNA_def_property_ui_range(prop, 1, 1000, 1, -1);
11032 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11033
11034 prop = RNA_def_property(srna, "concurrent_time_alignment", PROP_ENUM, PROP_NONE);
11035 RNA_def_property_enum_sdna(prop, nullptr, "time_alignment");
11036 RNA_def_property_enum_items(prop, prop_gpencil_build_time_align_items);
11037 RNA_def_property_ui_text(prop, "Time Alignment", "How should strokes start to appear/disappear");
11038 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11039
11040 prop = RNA_def_property(srna, "time_mode", PROP_ENUM, PROP_NONE);
11041 RNA_def_property_enum_sdna(prop, nullptr, "time_mode");
11043 RNA_def_property_enum_funcs(prop, nullptr, nullptr, "grease_pencil_build_time_mode_filter");
11045 prop,
11046 "Timing",
11047 "Use drawing speed, a number of frames, or a manual factor to build strokes");
11048 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11049
11050 /* Speed factor for MOD_GREASE_PENCIL_BUILD_TIMEMODE_DRAWSPEED. */
11051 /* TODO: Does it work? */
11052 prop = RNA_def_property(srna, "speed_factor", PROP_FLOAT, PROP_FACTOR);
11053 RNA_def_property_float_sdna(prop, nullptr, "speed_fac");
11054 RNA_def_property_ui_text(prop, "Speed Factor", "Multiply recorded drawing speed by a factor");
11055 RNA_def_property_range(prop, 0.0f, 100.0f);
11056 RNA_def_property_ui_range(prop, 0, 5, 0.001, -1);
11057 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11058
11059 /* Max gap in seconds between strokes for MOD_GREASE_PENCIL_BUILD_TIMEMODE_DRAWSPEED. */
11060 prop = RNA_def_property(srna, "speed_maxgap", PROP_FLOAT, PROP_NONE);
11061 RNA_def_property_float_sdna(prop, nullptr, "speed_maxgap");
11062 RNA_def_property_ui_text(prop, "Maximum Gap", "The maximum gap between strokes in seconds");
11063 RNA_def_property_range(prop, 0.0f, 100.0f);
11064 RNA_def_property_ui_range(prop, 0, 4, 0.01, -1);
11065 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11066
11067 prop = RNA_def_property(srna, "use_restrict_frame_range", PROP_BOOLEAN, PROP_NONE);
11070 prop, "Restrict Frame Range", "Only modify strokes during the specified frame range");
11071 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11072
11073 /* Use percentage bool (used by sequential & concurrent modes) */
11074 prop = RNA_def_property(srna, "use_percentage", PROP_BOOLEAN, PROP_NONE);
11076 prop, nullptr, "time_mode", MOD_GREASE_PENCIL_BUILD_TIMEMODE_PERCENTAGE);
11078 prop, "Restrict Visible Points", "Use a percentage factor to determine the visible points");
11079 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11080 prop = RNA_def_property(srna, "percentage_factor", PROP_FLOAT, PROP_FACTOR);
11081 RNA_def_property_float_sdna(prop, nullptr, "percentage_fac");
11082 RNA_def_property_ui_text(prop, "Factor", "Defines how much of the stroke is visible");
11083 RNA_def_property_range(prop, 0.0f, 1.0f);
11084 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11085
11086 prop = RNA_def_property(srna, "frame_start", PROP_FLOAT, PROP_NONE);
11087 RNA_def_property_float_sdna(prop, nullptr, "start_frame");
11089 prop, "Start Frame", "Start Frame (when Restrict Frame Range is enabled)");
11091 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11092
11093 prop = RNA_def_property(srna, "frame_end", PROP_FLOAT, PROP_NONE);
11094 RNA_def_property_float_sdna(prop, nullptr, "end_frame");
11095 RNA_def_property_ui_text(prop, "End Frame", "End Frame (when Restrict Frame Range is enabled)");
11097 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11098
11099 prop = RNA_def_property(srna, "use_fading", PROP_BOOLEAN, PROP_NONE);
11101 RNA_def_property_ui_text(prop, "Use Fading", "Fade out strokes instead of directly cutting off");
11102 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11103
11104 prop = RNA_def_property(srna, "fade_factor", PROP_FLOAT, PROP_FACTOR);
11105 RNA_def_property_float_sdna(prop, nullptr, "fade_fac");
11106 RNA_def_property_ui_text(prop, "Fade Factor", "Defines how much of the stroke is fading in/out");
11107 RNA_def_property_range(prop, 0.0f, 1.0f);
11108 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11109
11110 prop = RNA_def_property(srna, "target_vertex_group", PROP_STRING, PROP_NONE);
11111 RNA_def_property_string_sdna(prop, nullptr, "target_vgname");
11112 RNA_def_property_ui_text(prop, "Vertex Group", "Output Vertex group");
11114 prop, nullptr, nullptr, "rna_GreasePencilBuildModifier_target_vgname_set");
11115 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11116
11117 prop = RNA_def_property(srna, "fade_opacity_strength", PROP_FLOAT, PROP_FACTOR);
11118 RNA_def_property_float_sdna(prop, nullptr, "fade_opacity_strength");
11120 prop, "Opacity Strength", "How much strength fading applies on top of stroke opacity");
11121 RNA_def_property_range(prop, 0.0f, 1.0f);
11122 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11123
11124 prop = RNA_def_property(srna, "fade_thickness_strength", PROP_FLOAT, PROP_FACTOR);
11125 RNA_def_property_float_sdna(prop, nullptr, "fade_thickness_strength");
11127 prop, "Thickness Strength", "How much strength fading applies on top of stroke thickness");
11128 RNA_def_property_range(prop, 0.0f, 1.0f);
11129 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11130
11131 prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
11132 RNA_def_property_ui_text(prop, "Object", "Object used as build starting position");
11134 prop, nullptr, "rna_GreasePencilBuildModifier_object_set", nullptr, nullptr);
11136 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
11137
11139}
11140
11142{
11143 StructRNA *srna;
11144 PropertyRNA *prop;
11145
11146 static const EnumPropertyItem fit_type_items[] = {
11148 "CONSTANT_LENGTH",
11149 0,
11150 "Constant Length",
11151 "Keep the texture at a constant length regardless of the length of each stroke"},
11153 "FIT_STROKE",
11154 0,
11155 "Stroke Length",
11156 "Scale the texture to fit the length of each stroke"},
11157 {0, nullptr, 0, nullptr, nullptr},
11158 };
11159
11160 static const EnumPropertyItem mode_items[] = {
11162 "STROKE",
11163 0,
11164 "Stroke",
11165 "Manipulate only stroke texture coordinates"},
11167 "FILL",
11168 0,
11169 "Fill",
11170 "Manipulate only fill texture coordinates"},
11172 "STROKE_AND_FILL",
11173 0,
11174 "Stroke & Fill",
11175 "Manipulate both stroke and fill texture coordinates"},
11176 {0, nullptr, 0, nullptr, nullptr},
11177 };
11178
11179 srna = RNA_def_struct(brna, "GreasePencilTextureModifier", "Modifier");
11181 srna, "Grease Pencil Texture Modifier", "Transform stroke texture coordinates Modifier");
11182 RNA_def_struct_sdna(srna, "GreasePencilTextureModifierData");
11183 RNA_def_struct_ui_icon(srna, ICON_MOD_UVPROJECT);
11184
11187 srna, "rna_GreasePencilTextureModifier_material_filter_set");
11188
11189 rna_def_modifier_panel_open_prop(srna, "open_influence_panel", 0);
11190
11192
11193 prop = RNA_def_property(srna, "uv_offset", PROP_FLOAT, PROP_NONE);
11194 RNA_def_property_float_sdna(prop, nullptr, "uv_offset");
11196 RNA_def_property_ui_range(prop, -100.0, 100.0, 0.1, 3);
11197 RNA_def_property_ui_text(prop, "UV Offset", "Offset value to add to stroke UVs");
11198 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11199
11200 prop = RNA_def_property(srna, "uv_scale", PROP_FLOAT, PROP_NONE);
11201 RNA_def_property_float_sdna(prop, nullptr, "uv_scale");
11202 RNA_def_property_range(prop, 0.0, FLT_MAX);
11203 RNA_def_property_ui_range(prop, 0.0, 100.0, 0.1, 3);
11204 RNA_def_property_ui_text(prop, "UV Scale", "Factor to scale the UVs");
11205 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11206
11207 /* Rotation of Dot Texture. */
11208 prop = RNA_def_property(srna, "alignment_rotation", PROP_FLOAT, PROP_ANGLE);
11209 RNA_def_property_float_sdna(prop, nullptr, "alignment_rotation");
11211 RNA_def_property_range(prop, -DEG2RADF(90.0f), DEG2RADF(90.0f));
11212 RNA_def_property_ui_range(prop, -DEG2RADF(90.0f), DEG2RADF(90.0f), 10, 3);
11214 prop, "Rotation", "Additional rotation applied to dots and square strokes");
11215 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11216
11217 prop = RNA_def_property(srna, "fill_rotation", PROP_FLOAT, PROP_ANGLE);
11218 RNA_def_property_float_sdna(prop, nullptr, "fill_rotation");
11219 RNA_def_property_ui_text(prop, "Fill Rotation", "Additional rotation of the fill UV");
11220 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11221
11222 prop = RNA_def_property(srna, "fill_offset", PROP_FLOAT, PROP_COORDS);
11223 RNA_def_property_float_sdna(prop, nullptr, "fill_offset");
11224 RNA_def_property_array(prop, 2);
11225 RNA_def_property_ui_text(prop, "Fill Offset", "Additional offset of the fill UV");
11226 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11227
11228 prop = RNA_def_property(srna, "fill_scale", PROP_FLOAT, PROP_COORDS);
11229 RNA_def_property_float_sdna(prop, nullptr, "fill_scale");
11230 RNA_def_property_range(prop, 0.01f, 100.0f);
11231 RNA_def_property_ui_text(prop, "Fill Scale", "Additional scale of the fill UV");
11232 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11233
11234 prop = RNA_def_property(srna, "fit_method", PROP_ENUM, PROP_NONE);
11235 RNA_def_property_enum_sdna(prop, nullptr, "fit_method");
11236 RNA_def_property_enum_items(prop, fit_type_items);
11237 RNA_def_property_ui_text(prop, "Fit Method", "");
11238 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
11239
11240 prop = RNA_def_property(srna, "mode", PROP_ENUM, PROP_NONE);
11241 RNA_def_property_enum_sdna(prop, nullptr, "mode");
11242 RNA_def_property_enum_items(prop, mode_items);
11243 RNA_def_property_ui_text(prop, "Mode", "");
11244 RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
11245
11247}
11248
11250{
11251 StructRNA *srna;
11252 PropertyRNA *prop;
11253
11254 /* data */
11255 srna = RNA_def_struct(brna, "Modifier", nullptr);
11256 RNA_def_struct_ui_text(srna, "Modifier", "Modifier affecting the geometry data of an object");
11257 RNA_def_struct_refine_func(srna, "rna_Modifier_refine");
11258 RNA_def_struct_path_func(srna, "rna_Modifier_path");
11259 RNA_def_struct_sdna(srna, "ModifierData");
11260 RNA_def_struct_ui_icon(srna, ICON_MODIFIER);
11261
11262 /* strings */
11263 prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
11264 RNA_def_property_string_funcs(prop, nullptr, nullptr, "rna_Modifier_name_set");
11265 RNA_def_property_ui_text(prop, "Name", "Modifier name");
11266 RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER | NA_RENAME, "rna_Modifier_name_update");
11267 RNA_def_struct_name_property(srna, prop);
11268
11269 /* enums */
11270 prop = RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE);
11272 RNA_def_property_enum_sdna(prop, nullptr, "type");
11274 RNA_def_property_ui_text(prop, "Type", "");
11275
11276 /* flags */
11277 prop = RNA_def_property(srna, "show_viewport", PROP_BOOLEAN, PROP_NONE);
11279 RNA_def_property_ui_text(prop, "Realtime", "Display modifier in viewport");
11282 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11283 RNA_def_property_ui_icon(prop, ICON_RESTRICT_VIEW_ON, 1);
11284
11285 prop = RNA_def_property(srna, "show_render", PROP_BOOLEAN, PROP_NONE);
11288 RNA_def_property_ui_text(prop, "Render", "Use modifier during render");
11289 RNA_def_property_ui_icon(prop, ICON_RESTRICT_RENDER_ON, 1);
11291
11292 prop = RNA_def_property(srna, "show_in_editmode", PROP_BOOLEAN, PROP_NONE);
11294 RNA_def_property_ui_text(prop, "Edit Mode", "Display modifier in Edit mode");
11295 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11296 RNA_def_property_ui_icon(prop, ICON_EDITMODE_HLT, 0);
11297
11298 prop = RNA_def_property(srna, "show_on_cage", PROP_BOOLEAN, PROP_NONE);
11300 RNA_def_property_ui_text(prop, "On Cage", "Adjust edit cage to modifier result");
11301 RNA_def_property_ui_icon(prop, ICON_MESH_DATA, 0);
11302 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11303
11304 prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
11306 prop, "rna_Modifier_show_expanded_get", "rna_Modifier_show_expanded_set");
11308 RNA_def_property_boolean_sdna(prop, nullptr, "ui_expand_flag", 0);
11310 RNA_def_property_ui_text(prop, "Expanded", "Set modifier expanded in the user interface");
11311 RNA_def_property_ui_icon(prop, ICON_RIGHTARROW, 1);
11313
11314 prop = RNA_def_property(srna, "is_active", PROP_BOOLEAN, PROP_NONE);
11316 RNA_def_property_boolean_funcs(prop, nullptr, "rna_Modifier_is_active_set");
11320 RNA_def_property_ui_text(prop, "Active", "The active modifier in the list");
11322
11323 prop = RNA_def_property(srna, "use_pin_to_last", PROP_BOOLEAN, PROP_NONE);
11325 RNA_def_property_boolean_funcs(prop, nullptr, "rna_Modifier_use_pin_to_last_set");
11328 RNA_def_property_ui_text(prop, "Pin to Last", "Keep the modifier at the end of the list");
11330
11331 prop = RNA_def_boolean(srna,
11332 "is_override_data",
11333 false,
11334 "Override Modifier",
11335 "In a local override object, whether this modifier comes from the linked "
11336 "reference object, or is local to the override");
11339 prop, nullptr, "flag", eModifierFlag_OverrideLibrary_Local);
11340
11341 prop = RNA_def_property(srna, "use_apply_on_spline", PROP_BOOLEAN, PROP_NONE);
11344 prop,
11345 "Apply on Spline",
11346 "Apply this and all preceding deformation modifiers on splines' points rather than "
11347 "on filled curve/surface");
11348 RNA_def_property_ui_icon(prop, ICON_SURFACE_DATA, 0);
11349 RNA_def_property_update(prop, 0, "rna_Modifier_update");
11350
11351 prop = RNA_def_property(srna, "execution_time", PROP_FLOAT, PROP_TIME_ABSOLUTE);
11354 prop,
11355 "Execution Time",
11356 "Time in seconds that the modifier took to evaluate. This is only set on evaluated objects. "
11357 "If multiple modifiers run in parallel, execution time is not a reliable metric.");
11358
11359 prop = RNA_def_property(srna, "persistent_uid", PROP_INT, PROP_NONE);
11362 prop,
11363 "Persistent UID",
11364 "Uniquely identifies the modifier within the modifier stack that it is part of");
11365
11366 /* types */
11452}
11453
11454#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.
const char * CustomData_get_layer_name(const CustomData *data, eCustomDataType type, int n)
@ ME_VERT
@ ME_POLY
@ ME_LOOP
@ ME_EDGE
int CustomData_number_of_layers(const CustomData *data, eCustomDataType type)
bool CustomData_external_test(CustomData *data, eCustomDataType type)
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)
support for deformation groups and hooks.
const ListBase * BKE_object_defgroup_list(const Object *ob)
Definition deform.cc:574
void BKE_fluid_modifier_create_type_data(struct FluidModifierData *fmd)
Definition fluid.cc:4761
void BKE_fluid_modifier_free(struct FluidModifierData *fmd)
Definition fluid.cc:4750
Low-level operations for grease pencil.
void id_lib_extern(ID *id)
Definition lib_id.cc:285
void id_us_plus_no_lib(ID *id)
Definition lib_id.cc:337
void id_us_min(ID *id)
Definition lib_id.cc:361
General operations, lookup, etc. for materials.
int BKE_object_material_index_get(Object *ob, const Material *ma)
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:457
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:1670
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
#define BLI_assert(a)
Definition BLI_assert.h:46
int BLI_findindex(const ListBase *listbase, const void *vlink) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition listbase.cc:586
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
Definition listbase.cc:534
#define LISTBASE_FOREACH(type, var, list)
MINLINE int max_ii(int a, int b)
#define DEG2RAD(_deg)
#define DEG2RADF(_deg)
#define M_PI
int BLI_sortutil_cmp_int(const void *a_, const void *b_)
Definition sort_utils.cc:53
#define SNPRINTF(dst, format,...)
Definition BLI_string.h:599
char * STRNCPY(char(&dst)[N], const char *src)
Definition BLI_string.h:688
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(blender::FunctionRef< bool(blender::StringRefNull)> unique_check, const char *defname, char delim, char *name, size_t name_maxncpy) ATTR_NONNULL(2
#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_AMOUNT
#define BLT_I18NCONTEXT_MODIFIER
#define BLT_I18NCONTEXT_ID_SIMULATION
#define BLT_I18NCONTEXT_ID_ID
#define BLT_I18NCONTEXT_ID_CURVE_LEGACY
#define BLT_I18NCONTEXT_ID_GPENCIL
#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)
T * DEG_get_evaluated(const Depsgraph *depsgraph, T *id)
@ ID_RECALC_GEOMETRY
Definition DNA_ID.h:982
@ LIBOVERRIDE_OP_REPLACE
Definition DNA_ID.h:220
@ 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
@ 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
@ GP_LENGTH_INVERT_CURVATURE
@ GP_LENGTH_USE_RANDOM
@ GP_LENGTH_USE_CURVATURE
@ MOD_SHRINKWRAP_ON_SURFACE
@ MOD_SHRINKWRAP_OUTSIDE
@ MOD_SHRINKWRAP_INSIDE
@ MOD_SHRINKWRAP_ABOVE_SURFACE
@ MOD_SHRINKWRAP_OUTSIDE_SURFACE
@ DT_TYPE_MLOOPCOL_LOOP
@ DT_TYPE_SKIN
@ DT_TYPE_UV
@ DT_TYPE_MPROPCOL_VERT
@ DT_TYPE_VERT_ALL
@ DT_TYPE_BWEIGHT_VERT
@ DT_TYPE_FREESTYLE_FACE
@ DT_TYPE_SHAPEKEY
@ DT_TYPE_CREASE
@ DT_TYPE_LOOP_ALL
@ DT_TYPE_SEAM
@ DT_TYPE_POLY_ALL
@ DT_TYPE_MLOOPCOL_VERT
@ DT_TYPE_LNOR
@ DT_TYPE_MPROPCOL_LOOP
@ DT_TYPE_EDGE_ALL
@ DT_TYPE_SHARP_FACE
@ DT_TYPE_MDEFORMVERT
@ DT_TYPE_BWEIGHT_EDGE
@ DT_TYPE_FREESTYLE_EDGE
@ DT_TYPE_SHARP_EDGE
@ MOD_SHRINKWRAP_PROJECT_OVER_X_AXIS
@ MOD_SHRINKWRAP_PROJECT_OVER_Y_AXIS
@ MOD_SHRINKWRAP_PROJECT_OVER_Z_AXIS
@ DT_LAYERS_VGROUP_SRC_BONE_SELECT
@ DT_LAYERS_VGROUP_SRC_BONE_DEFORM
@ DT_LAYERS_ALL_SRC
@ DT_LAYERS_ACTIVE_SRC
@ GP_LENGTH_ABSOLUTE
@ GP_LENGTH_RELATIVE
@ 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
#define MOD_SHRINKWRAP_CULL_TARGET_MASK
@ 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
@ MOD_SHRINKWRAP_TARGET_PROJECT
@ MOD_SHRINKWRAP_NEAREST_VERTEX
@ MOD_SHRINKWRAP_PROJECT
@ MOD_SHRINKWRAP_NEAREST_SURFACE
@ DT_LAYERS_ACTIVE_DST
@ DT_LAYERS_INDEX_DST
@ DT_LAYERS_NAME_DST
@ 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
@ GP_NOISE_RANDOM_STEP
@ GP_NOISE_RANDOM_KEYFRAME
@ DT_MULTILAYER_INDEX_MDEFORMVERT
@ DT_MULTILAYER_INDEX_UV
@ DT_MULTILAYER_INDEX_VCOL_VERT
@ DT_MULTILAYER_INDEX_VCOL_LOOP
@ GP_NOISE_USE_RANDOM
@ MOD_BEVEL_AMT_DEPTH
@ MOD_BEVEL_AMT_PERCENT
@ MOD_BEVEL_AMT_OFFSET
@ MOD_BEVEL_AMT_ABSOLUTE
@ MOD_BEVEL_AMT_WIDTH
@ 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
@ 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_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
@ MOD_MESHCACHE_INTERP_LINEAR
@ MOD_MESHCACHE_INTERP_NONE
@ 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_EDGESPLIT_FROMANGLE
@ MOD_EDGESPLIT_FROMFLAG
@ LINEART_SHADOW_FILTER_ILLUMINATED_ENCLOSED_SHAPES
@ LINEART_SHADOW_FILTER_NONE
@ LINEART_SHADOW_FILTER_SHADED
@ LINEART_SHADOW_FILTER_ILLUMINATED
@ 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
@ MOD_MDEF_DYNAMIC_BIND
@ MOD_MDEF_INVERT_VGROUP
@ 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
@ eMultiresModifierFlag_UseSculptBaseMesh
@ eMultiresModifierFlag_UseCrease
@ eMultiresModifierFlag_UseCustomNormals
@ eMultiresModifierFlag_ControlEdges
@ MOD_OCEAN_SPECTRUM_TEXEL_MARSEN_ARSLOE
@ MOD_OCEAN_SPECTRUM_JONSWAP
@ MOD_OCEAN_SPECTRUM_PHILLIPS
@ MOD_OCEAN_SPECTRUM_PIERSON_MOSKOWITZ
@ 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_USE_LAYER_GROUP_FILTER
@ 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_BEVEL_MITER_PATCH
@ MOD_BEVEL_MITER_SHARP
@ MOD_BEVEL_MITER_ARC
@ 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_ALL
@ MOD_WVG_PROXIMITY_GEOM_FACES
@ eBooleanModifierSolver_Float
@ eBooleanModifierSolver_Manifold
@ eBooleanModifierSolver_Mesh_Arr
@ MOD_SKIN_SMOOTH_SHADING
@ MOD_SOLIDIFY_MODE_NONMANIFOLD
@ MOD_SOLIDIFY_MODE_EXTRUDE
@ MOD_GREASE_PENCIL_WEIGHT_ANGLE_SPACE_WORLD
@ MOD_GREASE_PENCIL_WEIGHT_ANGLE_SPACE_LOCAL
@ 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
@ LINEART_SILHOUETTE_FILTER_NONE
@ LINEART_SILHOUETTE_FILTER_INDIVIDUAL
@ LINEART_SILHOUETTE_FILTER_GROUP
@ MOD_MESHCACHE_TYPE_PC2
@ MOD_MESHCACHE_TYPE_MDD
@ 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
@ 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
@ SUBSURF_TYPE_SIMPLE
@ SUBSURF_TYPE_CATMULL_CLARK
@ MOD_ARR_MERGE
@ MOD_ARR_MERGEFINAL
@ MOD_BEVEL_VMESH_ADJ
@ MOD_BEVEL_VMESH_CUTOFF
@ MOD_SOLIDIFY_NONMANIFOLD_OFFSET_MODE_EVEN
@ MOD_SOLIDIFY_NONMANIFOLD_OFFSET_MODE_FIXED
@ MOD_SOLIDIFY_NONMANIFOLD_OFFSET_MODE_CONSTRAINTS
@ MOD_OCEAN_GEOM_GENERATE
@ MOD_OCEAN_GEOM_SIM_ONLY
@ MOD_OCEAN_GEOM_DISPLACE
@ MOD_DISP_INVERT_VGROUP
@ MOD_SIMPLEDEFORM_FLAG_INVERT_VGROUP
@ MOD_REMESH_VOXEL
@ MOD_REMESH_MASS_POINT
@ MOD_REMESH_SHARP_FEATURES
@ MOD_REMESH_CENTROID
@ MOD_WELD_MODE_CONNECTED
@ MOD_WELD_MODE_ALL
@ eBooleanModifierMaterialMode_Index
@ eBooleanModifierMaterialMode_Transfer
@ MOD_GREASE_PENCIL_OPACITY_USE_WEIGHT_AS_FACTOR
@ MOD_GREASE_PENCIL_OPACITY_USE_UNIFORM_OPACITY
@ MOD_SIMPLEDEFORM_LOCK_AXIS_Z
@ MOD_SIMPLEDEFORM_LOCK_AXIS_X
@ MOD_SIMPLEDEFORM_LOCK_AXIS_Y
@ 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_WEIGHTEDNORMAL_MODE_FACE
@ MOD_WEIGHTEDNORMAL_MODE_FACE_ANGLE
@ MOD_WEIGHTEDNORMAL_MODE_ANGLE
@ MOD_HOOK_UNIFORM_SPACE
@ MOD_HOOK_INVERT_VGROUP
@ 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_WEIGHTEDNORMAL_KEEP_SHARP
@ MOD_WEIGHTEDNORMAL_FACE_INFLUENCE
@ MOD_WEIGHTEDNORMAL_INVERT_VGROUP
@ MOD_NORMALEDIT_NO_POLYNORS_FIX
@ MOD_NORMALEDIT_INVERT_VGROUP
@ MOD_NORMALEDIT_USE_DIRECTION_PARALLEL
@ MOD_BEVEL_MARK_SHARP
@ MOD_BEVEL_MARK_SEAM
@ MOD_GREASE_PENCIL_BUILD_TIMEMODE_PERCENTAGE
@ MOD_GREASE_PENCIL_BUILD_TIMEMODE_DRAWSPEED
@ MOD_GREASE_PENCIL_BUILD_TIMEMODE_FRAMES
@ MOD_LAPLACIANSMOOTH_X
@ MOD_LAPLACIANSMOOTH_Y
@ MOD_LAPLACIANSMOOTH_PRESERVE_VOLUME
@ MOD_LAPLACIANSMOOTH_NORMALIZED
@ MOD_LAPLACIANSMOOTH_Z
@ MOD_LAPLACIANSMOOTH_INVERT_VGROUP
@ MOD_VOLUME_DISPLACE_MAP_GLOBAL
@ MOD_VOLUME_DISPLACE_MAP_LOCAL
@ MOD_VOLUME_DISPLACE_MAP_OBJECT
@ MOD_GREASE_PENCIL_BUILD_TIMEALIGN_START
@ MOD_GREASE_PENCIL_BUILD_TIMEALIGN_END
@ MOD_GREASE_PENCIL_THICK_WEIGHT_FACTOR
@ MOD_GREASE_PENCIL_THICK_NORMALIZE
@ MOD_ARR_OFF_RELATIVE
@ MOD_ARR_OFF_CONST
@ MOD_ARR_OFF_OBJ
@ 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_CAST_TYPE_CYLINDER
@ MOD_CAST_TYPE_SPHERE
@ MOD_CAST_TYPE_CUBOID
@ MOD_MASK_MODE_ARM
@ MOD_MASK_MODE_VGROUP
@ MOD_TRIANGULATE_NGON_BEAUTY
@ MOD_TRIANGULATE_NGON_EARCLIP
@ 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
@ NODES_MODIFIER_BAKE_CUSTOM_PATH
@ NODES_MODIFIER_BAKE_CUSTOM_SIMULATION_FRAME_RANGE
@ 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
@ MOD_GREASE_PENCIL_SUBDIV_CATMULL
@ MOD_GREASE_PENCIL_SUBDIV_SIMPLE
@ 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_SDEF_INVERT_VGROUP
@ MOD_SDEF_SPARSE_BIND
@ 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_GREASE_PENCIL_DASH_USE_CYCLIC
@ MOD_NORMALEDIT_MODE_RADIAL
@ MOD_NORMALEDIT_MODE_DIRECTIONAL
@ MOD_BUILD_FLAG_REVERSE
@ MOD_BUILD_FLAG_RANDOMIZE
@ NODES_MODIFIER_PANEL_OPEN
@ MOD_MESHCACHE_FLIP_AXIS_X
@ MOD_MESHCACHE_TIME_FRAME
@ MOD_MESHCACHE_TIME_FACTOR
@ MOD_MESHCACHE_TIME_SECONDS
@ MOD_GREASE_PENCIL_TINT_UNIFORM
@ MOD_GREASE_PENCIL_TINT_GRADIENT
@ MOD_GREASE_PENCIL_OUTLINE_KEEP_SHAPE
@ MOD_DISP_SPACE_GLOBAL
@ MOD_DISP_SPACE_LOCAL
@ NODES_MODIFIER_HIDE_DATABLOCK_SELECTOR
@ 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
@ LINEART_SOURCE_SCENE
@ LINEART_SOURCE_OBJECT
@ LINEART_SOURCE_COLLECTION
@ eBooleanModifierFlag_Collection
@ eBooleanModifierFlag_Self
@ eBooleanModifierFlag_HoleTolerant
@ eBooleanModifierFlag_Object
@ 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_CORRECTIVESMOOTH_SMOOTH_LENGTH_WEIGHT
@ MOD_CORRECTIVESMOOTH_SMOOTH_SIMPLE
@ MOD_WVG_EDIT_INVERT_VGROUP_MASK
@ MOD_WVG_EDIT_WEIGHTS_NORMALIZE
@ MOD_WVG_INVERT_FALLOFF
@ MOD_WVG_EDIT_REMFVG
@ MOD_WVG_EDIT_ADD2VG
@ MOD_DISP_MAP_OBJECT
@ MOD_DISP_MAP_GLOBAL
@ MOD_DISP_MAP_LOCAL
@ MOD_DISP_MAP_UV
@ MOD_MESHSEQ_READ_COLOR
@ MOD_MESHSEQ_READ_VERT
@ MOD_MESHSEQ_INTERPOLATE_VERTICES
@ MOD_MESHSEQ_READ_ATTRIBUTES
@ MOD_MESHSEQ_READ_UV
@ MOD_MESHSEQ_READ_POLY
@ MOD_MASK_SMOOTH
@ MOD_MASK_INV
@ 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_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
@ eBooleanModifierBMeshFlag_BMesh_NoDissolve
@ eBooleanModifierBMeshFlag_BMesh_Separate
@ eBooleanModifierBMeshFlag_BMesh_NoConnectRegions
@ MOD_NORMALEDIT_MIX_COPY
@ MOD_NORMALEDIT_MIX_ADD
@ MOD_NORMALEDIT_MIX_SUB
@ MOD_NORMALEDIT_MIX_MUL
@ LINEART_GPENCIL_INVERT_COLLECTION
@ LINEART_GPENCIL_OFFSET_TOWARDS_CUSTOM_CAMERA
@ LINEART_GPENCIL_INVERT_SILHOUETTE_FILTER
@ LINEART_GPENCIL_IS_BAKED
@ LINEART_GPENCIL_USE_CACHE
@ MOD_SMOOTH_Y
@ MOD_SMOOTH_INVERT_VGROUP
@ MOD_SMOOTH_X
@ MOD_SMOOTH_Z
@ MOD_BEVEL_PROFILE_CUSTOM
@ MOD_BEVEL_PROFILE_SUPERELLIPSE
@ MOD_MESHCACHE_INVERT_VERTEX_GROUP
@ MOD_UVWARP_INVERT_VGROUP
@ 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
@ MOD_CURVE_INVERT_VGROUP
@ VOLUME_TO_MESH_USE_SMOOTH_SHADE
@ MOD_WVG_PROXIMITY_OBJECT
@ MOD_WVG_PROXIMITY_GEOMETRY
@ MOD_CORRECTIVESMOOTH_RESTSOURCE_ORCO
@ MOD_CORRECTIVESMOOTH_RESTSOURCE_BIND
@ eExplodeFlag_Alive
@ eExplodeFlag_Dead
@ eExplodeFlag_EdgeCut
@ eExplodeFlag_INVERT_VGROUP
@ eExplodeFlag_PaSize
@ eExplodeFlag_Unborn
@ MOD_WVG_MIX_INVERT_VGROUP_MASK
@ MOD_WVG_MIX_INVERT_VGROUP_B
@ MOD_WVG_MIX_WEIGHTS_NORMALIZE
@ MOD_WVG_MIX_INVERT_VGROUP_A
@ MOD_BEVEL_FACE_STRENGTH_NONE
@ MOD_BEVEL_FACE_STRENGTH_AFFECTED
@ MOD_BEVEL_FACE_STRENGTH_NEW
@ MOD_BEVEL_FACE_STRENGTH_ALL
@ MOD_TRIANGULATE_QUAD_SHORTEDGE
@ MOD_TRIANGULATE_QUAD_FIXED
@ MOD_TRIANGULATE_QUAD_LONGEDGE
@ MOD_TRIANGULATE_QUAD_BEAUTY
@ MOD_TRIANGULATE_QUAD_ALTERNATE
@ eSubsurfModifierFlag_UseRecursiveSubdivision
@ eSubsurfModifierFlag_UseCrease
@ eSubsurfModifierFlag_ControlEdges
@ eSubsurfModifierFlag_UseCustomNormals
@ MOD_SKIN_SYMM_X
@ MOD_SKIN_SYMM_Z
@ MOD_SKIN_SYMM_Y
@ MOD_OCEAN_GENERATE_NORMALS
@ MOD_OCEAN_GENERATE_FOAM
@ MOD_OCEAN_INVERT_SPRAY
@ MOD_OCEAN_GENERATE_SPRAY
@ MOD_GREASE_PENCIL_TEXTURE_STROKE_AND_FILL
@ MOD_GREASE_PENCIL_TEXTURE_FILL
@ MOD_GREASE_PENCIL_TEXTURE_STROKE
@ 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_MODE_TAPER
@ MOD_SIMPLEDEFORM_MODE_STRETCH
@ MOD_SIMPLEDEFORM_MODE_BEND
@ MOD_SIMPLEDEFORM_MODE_TWIST
@ MOD_CAST_USE_OB_TRANSFORM
@ MOD_CAST_INVERT_VGROUP
@ MOD_CAST_Y
@ MOD_CAST_X
@ MOD_CAST_Z
@ MOD_CAST_SIZE_FROM_RADIUS
@ 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_GREASE_PENCIL_WEIGHT_PROXIMITY_INVERT_OUTPUT
@ MOD_GREASE_PENCIL_WEIGHT_PROXIMITY_MULTIPLY_DATA
@ MOD_LAPLACIANDEFORM_BIND
@ MOD_LAPLACIANDEFORM_INVERT_VGROUP
@ MOD_MESHCACHE_PLAY_CFEA
@ MOD_MESHCACHE_PLAY_EVAL
@ 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_DECIM_FLAG_INVERT_VGROUP
@ MOD_DECIM_FLAG_SYMMETRY
@ MOD_DECIM_FLAG_TRIANGULATE
@ MOD_DECIM_FLAG_ALL_BOUNDARY_VERTS
@ MOD_LATTICE_INVERT_VGROUP
@ MOD_WIREFRAME_OFS_EVEN
@ MOD_WIREFRAME_OFS_RELATIVE
@ MOD_WIREFRAME_INVERT_VGROUP
@ MOD_WIREFRAME_CREASE
@ MOD_WIREFRAME_BOUNDARY
@ MOD_WIREFRAME_REPLACE
#define MOD_UVPROJECT_MAXPROJECTORS
@ MOD_WARP_VOLUME_PRESERVE
@ MOD_WARP_INVERT_VGROUP
@ MOD_CORRECTIVESMOOTH_ONLY_SMOOTH
@ MOD_CORRECTIVESMOOTH_PIN_BOUNDARY
@ MOD_CORRECTIVESMOOTH_INVERT_VGROUP
@ MOD_GREASE_PENCIL_TEXTURE_FIT_STROKE
@ MOD_GREASE_PENCIL_TEXTURE_CONSTANT_LENGTH
@ eBooleanModifierOp_Intersect
@ eBooleanModifierOp_Union
@ eBooleanModifierOp_Difference
@ MOD_BEVEL_AFFECT_EDGES
@ MOD_BEVEL_AFFECT_VERTICES
@ MOD_WELD_LOOSE_EDGES
@ MOD_WELD_INVERT_VGROUP
@ eParticleInstanceSpace_World
@ eParticleInstanceSpace_Local
@ MOD_MESHCACHE_DEFORM_INTEGRATE
@ MOD_MESHCACHE_DEFORM_OVERWRITE
@ MOD_GREASE_PENCIL_OFFSET_STROKE
@ MOD_GREASE_PENCIL_OFFSET_MATERIAL
@ MOD_GREASE_PENCIL_OFFSET_LAYER
@ MOD_GREASE_PENCIL_OFFSET_RANDOM
@ MOD_TRIANGULATE_KEEP_CUSTOMLOOP_NORMALS
@ MOD_ARR_FITCURVE
@ MOD_ARR_FIXEDCOUNT
@ MOD_ARR_FITLENGTH
@ MOD_FLUID_TYPE_EFFEC
@ MOD_FLUID_TYPE_DOMAIN
@ MOD_FLUID_TYPE_FLOW
@ MOD_DECIM_MODE_UNSUBDIV
@ MOD_DECIM_MODE_COLLAPSE
@ MOD_DECIM_MODE_DISSOLVE
@ 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_SOLIDIFY_NONMANIFOLD_BOUNDARY_MODE_FLAT
@ MOD_SOLIDIFY_NONMANIFOLD_BOUNDARY_MODE_ROUND
@ MOD_SOLIDIFY_NONMANIFOLD_BOUNDARY_MODE_NONE
@ MOD_WVG_SET_AND
@ MOD_WVG_SET_B
@ MOD_WVG_SET_ALL
@ MOD_WVG_SET_OR
@ MOD_WVG_SET_A
@ GEO_NODE_ASSET_MODIFIER
@ NTREE_GEOMETRY
@ 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
void MOD_nodes_update_interface(Object *object, NodesModifierData *nmd)
Definition MOD_nodes.cc:448
#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:511
@ PROP_SCALE_LOG
Definition RNA_types.hh:198
@ PROP_SCALE_CUBIC
Definition RNA_types.hh:203
@ FUNC_USE_REPORTS
Definition RNA_types.hh:805
@ PROP_STRING_SEARCH_SUGGESTION
Definition RNA_types.hh:701
@ PROP_FLOAT
Definition RNA_types.hh:152
@ PROP_BOOLEAN
Definition RNA_types.hh:150
@ PROP_ENUM
Definition RNA_types.hh:154
@ PROP_INT
Definition RNA_types.hh:151
@ PROP_STRING
Definition RNA_types.hh:153
@ PROP_POINTER
Definition RNA_types.hh:155
@ PROP_COLLECTION
Definition RNA_types.hh:156
#define RNA_TRANSLATION_PREC_DEFAULT
Definition RNA_types.hh:212
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
Definition RNA_types.hh:469
@ PROPOVERRIDE_NO_COMPARISON
Definition RNA_types.hh:477
@ PROP_DYNAMIC
Definition RNA_types.hh:402
@ PROP_ANIMATABLE
Definition RNA_types.hh:305
@ PROP_PROPORTIONAL
Definition RNA_types.hh:335
@ PROP_PATH_SUPPORTS_BLEND_RELATIVE
Definition RNA_types.hh:430
@ PROP_EDITABLE
Definition RNA_types.hh:292
@ PROP_ENUM_FLAG
Definition RNA_types.hh:378
@ PROP_LIB_EXCEPTION
Definition RNA_types.hh:298
@ PROP_NEVER_NULL
Definition RNA_types.hh:351
@ PROP_NO_DEG_UPDATE
Definition RNA_types.hh:413
@ PROP_ID_SELF_CHECK
Definition RNA_types.hh:344
@ PROP_ID_REFCOUNT
Definition RNA_types.hh:338
#define RNA_ENUM_ITEM_HEADING(name, description)
Definition RNA_types.hh:639
@ PROP_TIME
Definition RNA_types.hh:241
@ PROP_MATRIX
Definition RNA_types.hh:253
@ PROP_XYZ
Definition RNA_types.hh:257
@ PROP_DISTANCE
Definition RNA_types.hh:244
@ PROP_COLOR
Definition RNA_types.hh:248
@ PROP_ANGLE
Definition RNA_types.hh:240
@ PROP_TIME_ABSOLUTE
Definition RNA_types.hh:242
@ PROP_EULER
Definition RNA_types.hh:254
@ PROP_COORDS
Definition RNA_types.hh:262
@ PROP_NONE
Definition RNA_types.hh:221
@ PROP_DIRPATH
Definition RNA_types.hh:225
@ PROP_PERCENTAGE
Definition RNA_types.hh:238
@ PROP_FACTOR
Definition RNA_types.hh:239
@ PROP_TRANSLATION
Definition RNA_types.hh:249
@ PROP_UNSIGNED
Definition RNA_types.hh:237
@ PROP_FILEPATH
Definition RNA_types.hh:224
@ PROP_VELOCITY
Definition RNA_types.hh:251
#define C
Definition RandGen.cpp:29
#define NC_NODE
Definition WM_types.hh:391
#define NC_SCENE
Definition WM_types.hh:375
#define ND_MODIFIER
Definition WM_types.hh:459
#define NA_EDITED
Definition WM_types.hh:581
ReportList * reports
Definition WM_types.hh:1025
#define ND_TRANSFORM
Definition WM_types.hh:453
#define NA_RENAME
Definition WM_types.hh:585
#define NC_OBJECT
Definition WM_types.hh:376
PyObject * self
BPy_StructRNA * depsgraph
long long int int64_t
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
const ComputeContextHash & hash() const
constexpr bool contains_ptr(const T *ptr) const
Definition BLI_span.hh:291
KDTree_3d * tree
static ushort indices[]
#define INT16_MAX
#define log
#define external
float length(VecOp< float, D >) RET
#define MEM_SAFE_FREE(v)
#define ID_IS_LINKED(_id)
#define MAX_CUSTOMDATA_LAYER_NAME_NO_PREFIX
static char ** types
Definition makesdna.cc:71
void * MEM_malloc_arrayN(size_t len, size_t size, const char *str)
Definition mallocn.cc:133
void MEM_freeN(void *vmemh)
Definition mallocn.cc:113
Segment< FEdge *, Vec3r > segment
constexpr float LEGACY_RADIUS_CONVERSION_FACTOR
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:29
void rna_iterator_array_begin(CollectionPropertyIterator *iter, PointerRNA *ptr, void *data, int itemsize, int length, bool free_ptr, IteratorSkipFunc skip)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
const PointerRNA PointerRNA_NULL
PointerRNA RNA_property_pointer_get(PointerRNA *ptr, PropertyRNA *prop)
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_create_discrete(ID *id, StructRNA *type, void *data)
int RNA_enum_get(PointerRNA *ptr, const char *name)
PointerRNA RNA_pointer_create_with_parent(const PointerRNA &parent, StructRNA *type, void *data)
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_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
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_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_bitset_array_sdna(PropertyRNA *prop, const char *structname, const char *propname, const int64_t booleanbit, const int length)
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:26
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:708
static const EnumPropertyItem prop_direction_items[]
#define min(a, b)
Definition sort.cc:36
#define FLT_MAX
Definition stdcycles.h:14
union CollectionPropertyIterator::@251313231040372062304153161337117373343066046335 internal
const char * identifier
Definition RNA_types.hh:623
GreasePencilDashModifierSegment * segments_array
GreasePencilTimeModifierSegment * segments_array
Definition DNA_ID.h:404
char name[66]
Definition DNA_ID.h:415
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:51
void * data
Definition RNA_types.hh:53
IDOverrideLibraryPropertyOperation * liboverride_operation
struct PointCache * pointcache
struct SoftBody_Shared * shared
struct bDeformGroup * next
struct GeometryNodeAssetTraits * geometry_node_asset_traits
i
Definition text_draw.cc:230
max
Definition text_draw.cc:251
#define N_(msgid)
void WM_main_add_notifier(uint type, void *reference)
PointerRNA * ptr
Definition wm_files.cc:4227