Ver código fonte

Add a proper attribution editing system

master
Fen Dweller 4 anos atrás
pai
commit
b4371afae9
4 arquivos alterados com 155 adições e 22 exclusões
  1. +140
    -18
      __init__.py
  2. +11
    -0
      attribution.py
  3. BIN
      libs/Buildings.blend
  4. BIN
      libs/Vehicles.blend

+ 140
- 18
__init__.py Ver arquivo

@@ -1,7 +1,8 @@
import bpy
from bpy.props import CollectionProperty, EnumProperty, PointerProperty, StringProperty
from bpy.types import PropertyGroup
from . attribution import people
from . import attribution
import importlib

bl_info = {
"name": "Microvision",
@@ -19,10 +20,15 @@ class MicrovisionPerson(PropertyGroup):
class MicrovisionSource(PropertyGroup):
url: StringProperty(name="URL")

class MicrovisionTool(PropertyGroup):
id: StringProperty(name="identifier")

class MicrovisionAttribution(PropertyGroup):
authors: CollectionProperty(name="Authors", type=MicrovisionPerson)
owners: CollectionProperty(name="Owners", type=MicrovisionPerson)
sources: CollectionProperty(name="Owners", type=MicrovisionSource)
citations: CollectionProperty(name="Owners", type=MicrovisionSource)
tools: CollectionProperty(name="Owners", type=MicrovisionTool)

class MicrovisionData(PropertyGroup):
attribution: PointerProperty(type=MicrovisionAttribution)
@@ -96,7 +102,7 @@ class LoadAssets(bpy.types.Operator):
def execute(self, context: bpy.types.Context):
link_data(context)

return {'FINISHED'}
return {'FINISHED'}

class Spawn(bpy.types.Operator):
bl_idname = "microvision.spawn"
@@ -110,12 +116,89 @@ class Spawn(bpy.types.Operator):
empty.show_instancer_for_viewport = False
empty.show_instancer_for_render = False

context.view_layer.layer_collection.collection.children["Microvision Objects"].objects.link(empty)

context.scene.collection.objects.link(empty)
context.view_layer.objects.active = empty
bpy.ops.object.select_all(action="DESELECT")
empty.select_set(state=True)

return {'FINISHED'}

class AddListItem(bpy.types.Operator):
bl_idname = "microvision.addlist"
bl_label = "Add Entry"
target: StringProperty()
action: StringProperty()

def execute(self, context: bpy.types.Context):
if self.action == "add":
context.collection.microvision.attribution.__getattribute__(self.target).add()
if self.action == "remove":
context.collection.microvision.attribution.__getattribute__(self.target).remove(len(context.collection.microvision.attribution.__getattribute__(self.target)) - 1)

return {'FINISHED'}

class MicrovisionAttributionEditPanel(bpy.types.Panel):
bl_idname = "OBJECT_PT_microvision_attribution_edit_panel"
bl_label = "Attribution Editor"
bl_space_type = "VIEW_3D"
bl_region_type = "UI"
bl_category = "Microvision"
bl_context = "objectmode"

@classmethod
def poll(self, context: bpy.types.Context):
return context.view_layer.layer_collection.collection.children[0].name == "Assets"

def add_buttons(self, layout, target):
row = layout.row()
op = row.operator('microvision.addlist', text="Add")
op.target = target
op.action = "add"
op = row.operator('microvision.addlist', text="Remove")
op.target = target
op.action = "remove"

def draw(self, context: bpy.types.Context):
layout = self.layout
scene = context.scene

attribution_data = context.collection.microvision.attribution

layout.label(text="Authors")
for author in attribution_data.authors:
layout.prop(author, "id")
self.add_buttons(layout, "authors")

layout.label(text="Owners")
for owner in attribution_data.owners:
layout.prop(owner, "id")

self.add_buttons(layout, "owners")

layout.label(text="Sources")
for source in attribution_data.sources:
layout.prop(source, "url")
self.add_buttons(layout, "sources")

layout.label(text="Citations")
for citation in attribution_data.citations:
layout.prop(citation, "url")
self.add_buttons(layout, "citations")

layout.label(text="Tools")
for tool in attribution_data.tools:
layout.prop(tool, "id")

self.add_buttons(layout, "tools")


class MicrovisionAttributionPanel(bpy.types.Panel):
bl_idname = "OBJECT_PT_microvision_attribution_panel"
bl_label = "Attribution"
@@ -136,50 +219,85 @@ class MicrovisionAttributionPanel(bpy.types.Panel):
layout = self.layout
scene = context.scene

layout.label(text="Authors")
attribution_data = context.active_object.instance_collection.microvision.attribution

for author in context.active_object.instance_collection.microvision.attribution.authors:
layout.label(text="Authors")
for author in attribution_data.authors:
id = author.id
layout.operator('wm.url_open', text=people[id]["name"]).url=people[id]["url"]
layout.operator('wm.url_open', text=attribution.people[id]["name"]).url=attribution.people[id]["url"]

layout.label(text="Owners")
for owner in attribution_data.owners:
id = owner.id
layout.operator('wm.url_open', text=attribution.people[id]["name"]).url=attribution.people[id]["url"]

layout.label(text="Sources")
for source in attribution_data.sources:
url = source.url
layout.operator('wm.url_open', text="Source").url=url

layout.label(text="Citations")
for citation in attribution_data.citations:
url = citation.url
layout.operator('wm.url_open', text="Citation").url=url

layout.label(text="Tools")
for tool in attribution_data.tools:
id = tool.id
layout.operator('wm.url_open', text=attribution.tools[id]["name"]).url=attribution.tools[id]["url"]

class MicrovisionPanel(bpy.types.Panel):
bl_idname = "OBJECT_PT_microvision_panel"
bl_label = "Microvision"
bl_label = "Spawn"
bl_space_type = "VIEW_3D"
bl_region_type = "UI"
bl_category = "Microvision"
bl_context = "objectmode"

@classmethod
def poll(self, context: bpy.types.Context):
return context.view_layer.layer_collection.collection.children[0].name != "Assets"


def draw(self, context: bpy.types.Context):
layout = self.layout
scene = context.scene

layout.label(text="BIG TIME")

layout.operator("microvision.load_assets")

layout.prop(context.scene.micro, "group")
layout.prop(context.scene.micro, "kind")
layout.prop(context.scene.micro, "object")
if "Microvision Assets" not in bpy.context.view_layer.layer_collection.children:
layout.operator("microvision.load_assets")
else:
layout.prop(context.scene.micro, "group")
layout.prop(context.scene.micro, "kind")
layout.prop(context.scene.micro, "object")

layout.operator("microvision.spawn")
layout.operator("microvision.spawn")

classes = [
LoadAssets,
Spawn,
MicrovisionPerson,
MicrovisionSource,
MicrovisionPanel,
MicrovisionAttributionPanel,
MicrovisionTool,
MicrovisionAttribution,
MicrovisionData,
AddListItem,
MicrovisionPanel,
MicrovisionAttributionEditPanel,
MicrovisionAttributionPanel,
MicrovisionProperties,
]

def remove_recursive(collection: bpy.types.Collection):
print(collection)
for child in collection.children:
remove_recursive(child)
collection.children.unlink(child)
bpy.data.collections.remove(child)

def link_data(context: bpy.types.Context):
top = bpy.data.collections.new(name="Microvision Assets")
context.view_layer.layer_collection.collection.children.link(top)
context.view_layer.layer_collection.children["Microvision Assets"].hide_viewport = True
context.view_layer.layer_collection.collection.children["Microvision Assets"].hide_viewport = True
for lib in ["Buildings", "Vehicles"]:
path = f"C:/Users/hausss/AppData/Roaming/Blender Foundation/Blender/2.93/scripts/addons/microvision/libs/{lib}.blend"

@@ -194,9 +312,13 @@ def link_data(context: bpy.types.Context):
print(coll)
if coll is not None:
category.children.link(coll)
objects = bpy.data.collections.new(name="Microvision Objects")
context.view_layer.layer_collection.collection.children.link(objects)

def register():
print("Hi")
importlib.reload(attribution)
for cls in classes:
bpy.utils.register_class(cls)
bpy.types.Scene.micro = PointerProperty(type=MicrovisionProperties)


+ 11
- 0
attribution.py Ver arquivo

@@ -2,5 +2,16 @@ people = {
"chemicalcrux": {
"name": "chemicalcrux",
"url": "https://furaffinity.net/user/chemicalcrux/"
},
"Boldly Building": {
"name": "Boldly Building",
"url": "https://sketchfab.com/TitanicKyle"
}
}

tools = {
"Building Tools": {
"name": "Building Tools",
"url": "https://ranjian0.github.io/building_tools/"
}
}

BIN
libs/Buildings.blend (Armazenado com Git LFS) Ver arquivo

oid sha256:05f09405070520f9f1dec1ac9068b696985a11e13ddb269b9cbdfb33a8572a18
size 3143996

BIN
libs/Vehicles.blend (Armazenado com Git LFS) Ver arquivo

oid sha256:a8877d530320721965138d70db1e84e2aa3251ed76974b5449e1887d62313c33
size 811328

Carregando…
Cancelar
Salvar