File: properties_collection.py

package info (click to toggle)
blender 4.3.2%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 309,564 kB
  • sloc: cpp: 2,385,210; python: 330,236; ansic: 280,972; xml: 2,446; sh: 972; javascript: 317; makefile: 170
file content (132 lines) | stat: -rw-r--r-- 4,125 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# SPDX-FileCopyrightText: 2017-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later

from bpy.types import (
    Collection,
    Menu,
    Panel,
)

from rna_prop_ui import PropertyPanel


class CollectionButtonsPanel:
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'
    bl_context = "collection"

    @classmethod
    def poll(cls, context):
        return context.collection != context.scene.collection


def lineart_make_line_type_entry(col, line_type, text_disp, expand, search_from):
    col.prop(line_type, "use", text=text_disp)
    if line_type.use and expand:
        col.prop_search(line_type, "layer", search_from, "layers", icon='GREASEPENCIL')
        col.prop_search(line_type, "material", search_from, "materials", icon='SHADING_TEXTURE')


class COLLECTION_PT_collection_flags(CollectionButtonsPanel, Panel):
    bl_label = "Restrictions"

    def draw(self, context):
        layout = self.layout
        layout.use_property_split = True
        layout.use_property_decorate = False

        collection = context.collection
        vl = context.view_layer
        vlc = vl.active_layer_collection

        col = layout.column(align=True)
        col.prop(collection, "hide_select", text="Selectable", toggle=False, invert_checkbox=True)
        col.prop(collection, "hide_render", toggle=False)

        col = layout.column(align=True)
        col.prop(vlc, "holdout", toggle=False)
        col.prop(vlc, "indirect_only", toggle=False)


class COLLECTION_PT_exporters(CollectionButtonsPanel, Panel):
    bl_label = "Exporters"

    def draw(self, context):
        layout = self.layout

        layout.template_collection_exporters()


class COLLECTION_MT_context_menu_instance_offset(Menu):
    bl_label = "Instance Offset"

    def draw(self, _context):
        layout = self.layout
        layout.operator("object.instance_offset_from_cursor")
        layout.operator("object.instance_offset_from_object")
        layout.operator("object.instance_offset_to_cursor")


class COLLECTION_PT_instancing(CollectionButtonsPanel, Panel):
    bl_label = "Instancing"

    def draw(self, context):
        layout = self.layout
        layout.use_property_split = True
        layout.use_property_decorate = False
        collection = context.collection

        row = layout.row(align=True)
        row.prop(collection, "instance_offset")
        row.menu("COLLECTION_MT_context_menu_instance_offset", icon='DOWNARROW_HLT', text="")


class COLLECTION_PT_lineart_collection(CollectionButtonsPanel, Panel):
    bl_label = "Line Art"
    bl_order = 10

    def draw(self, context):
        layout = self.layout
        layout.use_property_split = True
        layout.use_property_decorate = False
        collection = context.collection

        row = layout.row()
        row.prop(collection, "lineart_usage")

        layout.prop(collection, "lineart_use_intersection_mask", text="Collection Mask")

        col = layout.column(align=True)
        col.active = collection.lineart_use_intersection_mask
        row = col.row(align=True, heading="Masks")
        for i in range(8):
            row.prop(collection, "lineart_intersection_mask", index=i, text=" ", toggle=True)
            if i == 3:
                row = col.row(align=True)

        row = layout.row(heading="Intersection Priority")
        row.prop(collection, "use_lineart_intersection_priority", text="")
        subrow = row.row()
        subrow.active = collection.use_lineart_intersection_priority
        subrow.prop(collection, "lineart_intersection_priority", text="")


class COLLECTION_PT_collection_custom_props(CollectionButtonsPanel, PropertyPanel, Panel):
    _context_path = "collection"
    _property_type = Collection


classes = (
    COLLECTION_MT_context_menu_instance_offset,
    COLLECTION_PT_collection_flags,
    COLLECTION_PT_instancing,
    COLLECTION_PT_lineart_collection,
    COLLECTION_PT_collection_custom_props,
    COLLECTION_PT_exporters,
)

if __name__ == "__main__":  # only for live edit.
    from bpy.utils import register_class
    for cls in classes:
        register_class(cls)