|
|
|
@@ -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) |
|
|
|
|