IO: Add FileHandler for importing SVG as curves
This enables drag-n-drop support for the `import_curve.svg` operator. Since the existing `Import SVG as Grease Pencil` operator handles the same file type, when dropping `.svg` files this will prompt to choose between theses 2 operators. See PR for examples and notes on eventually changing the operator description. Pull Request: https://projects.blender.org/blender/blender/pulls/140603
This commit is contained in:
committed by
Jesse Yurkovich
parent
bb895e13e2
commit
1adf9ce9dc
@@ -29,7 +29,10 @@ from bpy.props import (
|
||||
StringProperty,
|
||||
CollectionProperty
|
||||
)
|
||||
from bpy_extras.io_utils import ImportHelper
|
||||
from bpy_extras.io_utils import (
|
||||
ImportHelper,
|
||||
poll_file_object_drop,
|
||||
)
|
||||
|
||||
|
||||
class ImportSVG(bpy.types.Operator, ImportHelper):
|
||||
@@ -41,20 +44,25 @@ class ImportSVG(bpy.types.Operator, ImportHelper):
|
||||
filename_ext = ".svg"
|
||||
filter_glob: StringProperty(default="*.svg", options={'HIDDEN'})
|
||||
|
||||
directory: StringProperty(subtype='DIR_PATH', options={'SKIP_SAVE', 'HIDDEN'})
|
||||
files: CollectionProperty(
|
||||
name="File Path",
|
||||
type=bpy.types.OperatorFileListElement,
|
||||
)
|
||||
|
||||
def invoke(self, context, event):
|
||||
if self.properties.is_property_set("filepath"):
|
||||
return self.execute(context)
|
||||
context.window_manager.fileselect_add(self)
|
||||
return {'RUNNING_MODAL'}
|
||||
|
||||
def execute(self, context):
|
||||
from . import import_svg
|
||||
|
||||
if self.files:
|
||||
ret = {'CANCELLED'}
|
||||
dirname = os.path.dirname(self.filepath)
|
||||
for file in self.files:
|
||||
path = os.path.join(dirname, file.name)
|
||||
path = os.path.join(self.directory, file.name)
|
||||
if import_svg.load(self, context, filepath=path) == {'FINISHED'}:
|
||||
ret = {'FINISHED'}
|
||||
return ret
|
||||
@@ -62,20 +70,38 @@ class ImportSVG(bpy.types.Operator, ImportHelper):
|
||||
return import_svg.load(self, context, filepath=self.filepath)
|
||||
|
||||
|
||||
class IO_FH_svg_as_curves(bpy.types.FileHandler):
|
||||
bl_idname = "IO_FH_svg_as_curves"
|
||||
bl_label = "SVG as Curves"
|
||||
bl_import_operator = "import_curve.svg"
|
||||
bl_file_extensions = ".svg"
|
||||
|
||||
@classmethod
|
||||
def poll_drop(cls, context):
|
||||
return poll_file_object_drop(context)
|
||||
|
||||
|
||||
def menu_func_import(self, context):
|
||||
self.layout.operator(ImportSVG.bl_idname,
|
||||
text="Scalable Vector Graphics (.svg)")
|
||||
|
||||
|
||||
classes = [
|
||||
ImportSVG,
|
||||
IO_FH_svg_as_curves,
|
||||
]
|
||||
|
||||
|
||||
def register():
|
||||
bpy.utils.register_class(ImportSVG)
|
||||
for cls in classes:
|
||||
bpy.utils.register_class(cls)
|
||||
|
||||
bpy.types.TOPBAR_MT_file_import.append(menu_func_import)
|
||||
|
||||
|
||||
def unregister():
|
||||
bpy.utils.unregister_class(ImportSVG)
|
||||
for cls in classes:
|
||||
bpy.utils.unregister_class(cls)
|
||||
|
||||
bpy.types.TOPBAR_MT_file_import.remove(menu_func_import)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user