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