Skip to content

Commit

Permalink
Update 2.1.0
Browse files Browse the repository at this point in the history
General:

* Reworked weighting system with asset managment features.
* Viewport widgets.
* Asset Manager: support for assets without previews.

UI:

* New tool icons.

New tools:

* Resize: scale objects to a new size.
* Convert Deprecated Gem IDs.
* Edit Cut and Edit Stone merged into Edit Gem tool.

Tool changes:

* Make Dupli-face: reworked parent behaviour, now the same as standard Make Dupli-face tool, new option Apply Scale.
* Lattice Project: projection Axis option.
* Lattice Profile: new Axis, Lattice Type, Curvature Scale options.
* Stretch: now works on global X axis.
* Move Over/Under: Move as a group option, now works with global Z axis.

Removed:

* Distance Helper tool (replaced with viewport widgets).
* Product Report: support for deprecated gem IDs (now there is a dedicated tool for coverting old IDs).
* Product Report: weighting options (functionality merged with Weighting panel).
  • Loading branch information
mrachinskiy committed Aug 16, 2018
1 parent b409374 commit cbebe8a
Show file tree
Hide file tree
Showing 65 changed files with 8,729 additions and 5,824 deletions.
693 changes: 674 additions & 19 deletions LICENSE.txt

Large diffs are not rendered by default.

53 changes: 40 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,34 @@ Features:
* Calculate weight in a variety of precious alloys.
* Present summary information about your design with product report.

Watch:
Video:

v1.0

* [Demo v1.0][2]
* [Камни][3]
* [Инструменты закрепки][4]
* [Менеджер ассетов][5]
* [Отчёт изделия][6]
* [Оценка веса][7]
* [Инструменты кривых и объектов][8]

v2.0

* [Gems][3]
* [Jeweling][4]
* [Asset Manager][5]
* [Curve & Object tools][6]

Видео:

v2.0

* [Камни][7]
* [Инструменты закрепки][8]
* [Менеджер ассетов][9]
* [Отчёт изделия][10]
* [Оценка веса][11]
* [Инструменты кривых и объектов][12]

v2.1

* [Оценка веса][13]
* [Виджеты][14]


How to install
Expand All @@ -42,10 +61,18 @@ How to install


[1]: https://github.com/mrachinskiy/jewelcraft/archive/master.zip

[2]: https://youtu.be/XZ6uIdNnrHk
[3]: https://youtu.be/DqzDK7dSlUM
[4]: https://youtu.be/VVooIV8u1JI
[5]: https://youtu.be/S_SkB3dn4co
[6]: https://youtu.be/lOt1wpfUQT8
[7]: https://youtu.be/qb4OriNIRQg
[8]: https://youtu.be/RoeWbrNPGPU
[3]: https://youtu.be/SdoJWLVSyuQ
[4]: https://youtu.be/mAqSwtdHwxw
[5]: https://youtu.be/G3B259jEN74
[6]: https://youtu.be/czpxIUfnxBM

[7]: https://youtu.be/DqzDK7dSlUM
[8]: https://youtu.be/VVooIV8u1JI
[9]: https://youtu.be/S_SkB3dn4co
[10]: https://youtu.be/lOt1wpfUQT8
[11]: https://youtu.be/qb4OriNIRQg
[12]: https://youtu.be/RoeWbrNPGPU
[13]: https://youtu.be/w2VWn8UlmPM
[14]: https://youtu.be/Ck26lgKQ64Y
291 changes: 166 additions & 125 deletions __init__.py
Original file line number Diff line number Diff line change
@@ -1,154 +1,195 @@
# ##### BEGIN GPL LICENSE BLOCK #####
#
# JewelCraft jewelry design toolkit for Blender.
# Copyright (C) 2015-2018 Mikhail Rachinskiy
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
# ##### END GPL LICENSE BLOCK #####


bl_info = {
'name': 'JewelCraft',
'author': 'Mikhail Rachinskiy (jewelcourses.com)',
'version': (2, 0, 0),
'blender': (2, 79, 0),
'location': '3D View > Tool Shelf',
'description': 'Jewelry design toolkit.',
'wiki_url': 'https://github.com/mrachinskiy/jewelcraft#readme',
'tracker_url': 'https://github.com/mrachinskiy/jewelcraft/issues',
'category': 'Object',
}
"name": "JewelCraft",
"author": "Mikhail Rachinskiy",
"version": (2, 1, 0),
"blender": (2, 79, 0),
"location": "3D View > Tool Shelf",
"description": "Jewelry design toolkit.",
"wiki_url": "https://github.com/mrachinskiy/jewelcraft#readme",
"tracker_url": "https://github.com/mrachinskiy/jewelcraft/issues",
"category": "Object",
}


if 'bpy' in locals():
import importlib
import os
if "bpy" in locals():
import importlib

for entry in os.scandir(var.addon_dir):
for entry in os.scandir(var.ADDON_DIR):

if entry.is_file() and entry.name.endswith('.py') and not entry.name.startswith('__'):
_module = entry.name[:-3]
importlib.reload(eval(_module))
if entry.is_file() and entry.name.endswith(".py") and not entry.name.startswith("__"):
module = os.path.splitext(entry.name)[0]
importlib.reload(eval(module))

elif entry.is_dir() and not entry.name.startswith(('.', '__')) and not entry.name.endswith('updater'):
elif entry.is_dir() and not entry.name.startswith((".", "__")) and not entry.name.endswith("updater"):

for subentry in os.scandir(entry.path):
for subentry in os.scandir(entry.path):

if subentry.name.endswith('.py'):
_module = '{}.{}'.format(entry.name, subentry.name[:-3])
importlib.reload(eval(_module))
if subentry.name.endswith(".py"):
module = "{}.{}".format(entry.name, os.path.splitext(subentry.name)[0])
importlib.reload(eval(module))
else:
import bpy
import bpy.utils.previews
from bpy.props import PointerProperty

from . import var, ui, locale, preferences, dynamic_lists
from .op_cutter import cutter_op
from .op_prongs import prongs_op
from .op_scatter import scatter_op
from .op_product_report import product_report_op
from .ops_asset import asset_ops, folder_ops
from .ops_curve import curve_ops
from .ops_gem import gem_ops, gem_select_ops
from .ops_jeweling import jeweling_ops
from .ops_object import object_ops
from .ops_utils import presets_ops, search_ops

# Extern
from . import addon_updater_ops
import os

import bpy
import bpy.utils.previews
from bpy.props import PointerProperty

from . import var, ui, translations, preferences, dynamic_lists, addon_updater_ops
from .lib import widgets
from .op_cutter import cutter_op
from .op_prongs import prongs_op
from .op_scatter import scatter_op
from .op_product_report import product_report_op
from .ops_asset import asset_ops, folder_ops
from .ops_curve import curve_ops
from .ops_gem import gem_ops, gem_select_ops
from .ops_object import object_ops
from .ops_utils import search_ops, widgets_ops
from .ops_weighting import weighting_list_ops, weighting_set_ops, weighting_op


classes = (
preferences.PREFS_JewelCraft_Props,
preferences.WM_JewelCraft_Props,
preferences.SCENE_JewelCraft_Props,

ui.VIEW3D_MT_JewelCraft_Weighting_Presets,
ui.VIEW3D_MT_JewelCraft_Select_Gem_By,
ui.VIEW3D_MT_JewelCraft_Folder_Tools,
ui.VIEW3D_MT_JewelCraft_Asset_Tools,
ui.VIEW3D_MT_JewelCraft_Alloy_Tools,
ui.VIEW3D_MT_JewelCraft_Product_Report_Tools,

ui.VIEW3D_PT_JewelCraft_Gems,
ui.VIEW3D_PT_JewelCraft_Assets,
ui.VIEW3D_PT_JewelCraft_Jeweling,
ui.VIEW3D_PT_JewelCraft_Curve,
ui.VIEW3D_PT_JewelCraft_Curve_Editmesh,
ui.VIEW3D_PT_JewelCraft_Object,
ui.VIEW3D_PT_JewelCraft_Weighting,
ui.VIEW3D_PT_JewelCraft_Product_Report,

prongs_op.OBJECT_OT_JewelCraft_Prongs_Add,
cutter_op.OBJECT_OT_JewelCraft_Cutter_Add,
scatter_op.OBJECT_OT_JewelCraft_Scatter_Along_Curve,
scatter_op.OBJECT_OT_JewelCraft_Redistribute_Along_Curve,
product_report_op.WM_OT_JewelCraft_Product_Report,

gem_ops.OBJECT_OT_JewelCraft_Gem_Add,
gem_ops.OBJECT_OT_JewelCraft_Stone_Replace,
gem_ops.OBJECT_OT_JewelCraft_Cut_Replace,
gem_ops.OBJECT_OT_JewelCraft_Gem_ID_Add,

gem_select_ops.OBJECT_OT_JewelCraft_Select_Gems_By_Trait,
gem_select_ops.OBJECT_OT_JewelCraft_Select_Doubles,

folder_ops.WM_OT_JewelCraft_Asset_Library_Open,
folder_ops.WM_OT_JewelCraft_Asset_Folder_Create,
folder_ops.WM_OT_JewelCraft_Asset_Folder_Rename,
folder_ops.WM_OT_JewelCraft_Asset_UI_Refresh,

asset_ops.WM_OT_JewelCraft_Asset_Add_To_Library,
asset_ops.WM_OT_JewelCraft_Asset_Remove_From_Library,
asset_ops.WM_OT_JewelCraft_Asset_Rename,
asset_ops.WM_OT_JewelCraft_Asset_Replace,
asset_ops.WM_OT_JewelCraft_Asset_Preview_Replace,
asset_ops.WM_OT_JewelCraft_Asset_Import,

jeweling_ops.OBJECT_OT_JewelCraft_Make_Dupliface,
jeweling_ops.OBJECT_OT_JewelCraft_Dist_Helper_Add,

curve_ops.CURVE_OT_JewelCraft_Size_Curve_Add,
curve_ops.CURVE_OT_JewelCraft_Length_Display,
curve_ops.OBJECT_OT_JewelCraft_Stretch_Along_Curve,
curve_ops.OBJECT_OT_JewelCraft_Move_Over_Under,

object_ops.OBJECT_OT_JewelCraft_Object_Mirror,
object_ops.OBJECT_OT_JewelCraft_Lattice_Project,
object_ops.OBJECT_OT_JewelCraft_Lattice_Profile,
object_ops.MESH_OT_JewelCraft_Weight_Display,

presets_ops.VIEW3D_OT_JewelCraft_Add_Preset_Weighting,

search_ops.VIEW3D_OT_JewelCraft_Search_Stone,
search_ops.VIEW3D_OT_JewelCraft_Search_Alloy,
search_ops.VIEW3D_OT_JewelCraft_Search_Asset,
)
preferences.JewelCraftMaterialsCollection,
preferences.JewelCraftMaterialsList,
preferences.JewelCraftPreferences,
preferences.JewelCraftPropertiesWm,
preferences.JewelCraftPropertiesScene,
ui.VIEW3D_UL_jewelcraft_weighting_set,
ui.VIEW3D_MT_jewelcraft_select_gem_by,
ui.VIEW3D_MT_jewelcraft_folder,
ui.VIEW3D_MT_jewelcraft_asset,
ui.VIEW3D_MT_jewelcraft_weighting_set,
ui.VIEW3D_MT_jewelcraft_weighting_list,
ui.VIEW3D_MT_jewelcraft_product_report,
ui.VIEW3D_PT_jewelcraft_update,
ui.VIEW3D_PT_jewelcraft_gems,
ui.VIEW3D_PT_jewelcraft_widgets,
ui.VIEW3D_PT_jewelcraft_assets,
ui.VIEW3D_PT_jewelcraft_jeweling,
ui.VIEW3D_PT_jewelcraft_object,
ui.VIEW3D_PT_jewelcraft_curve,
ui.VIEW3D_PT_jewelcraft_curve_editmesh,
ui.VIEW3D_PT_jewelcraft_weighting,
ui.VIEW3D_PT_jewelcraft_product_report,
prongs_op.OBJECT_OT_jewelcraft_prongs_add,
cutter_op.OBJECT_OT_jewelcraft_cutter_add,
scatter_op.OBJECT_OT_jewelcraft_curve_scatter,
scatter_op.OBJECT_OT_jewelcraft_curve_redistribute,
product_report_op.WM_OT_jewelcraft_product_report,
gem_ops.OBJECT_OT_jewelcraft_gem_add,
gem_ops.OBJECT_OT_jewelcraft_gem_edit,
gem_ops.OBJECT_OT_jewelcraft_gem_id_add,
gem_ops.OBJECT_OT_jewelcraft_gem_id_convert_deprecated,
gem_select_ops.OBJECT_OT_jewelcraft_select_gems_by_trait,
gem_select_ops.OBJECT_OT_jewelcraft_select_doubles,
folder_ops.WM_OT_jewelcraft_asset_folder_create,
folder_ops.WM_OT_jewelcraft_asset_folder_rename,
folder_ops.WM_OT_jewelcraft_asset_ui_refresh,
asset_ops.WM_OT_jewelcraft_asset_add_to_library,
asset_ops.WM_OT_jewelcraft_asset_remove_from_library,
asset_ops.WM_OT_jewelcraft_asset_rename,
asset_ops.WM_OT_jewelcraft_asset_replace,
asset_ops.WM_OT_jewelcraft_asset_preview_replace,
asset_ops.WM_OT_jewelcraft_asset_import,
curve_ops.CURVE_OT_jewelcraft_size_curve_add,
curve_ops.CURVE_OT_jewelcraft_length_display,
curve_ops.OBJECT_OT_jewelcraft_stretch_along_curve,
curve_ops.OBJECT_OT_jewelcraft_move_over_under,
object_ops.OBJECT_OT_jewelcraft_mirror,
object_ops.OBJECT_OT_jewelcraft_make_dupliface,
object_ops.OBJECT_OT_jewelcraft_lattice_project,
object_ops.OBJECT_OT_jewelcraft_lattice_profile,
object_ops.OBJECT_OT_jewelcraft_resize,
search_ops.VIEW3D_OT_jewelcraft_search_stone,
search_ops.VIEW3D_OT_jewelcraft_search_asset,
widgets_ops.OBJECT_OT_jewelcraft_widgets_overrides_set,
widgets_ops.OBJECT_OT_jewelcraft_widgets_overrides_del,
weighting_list_ops.WM_OT_jewelcraft_ul_item_add,
weighting_list_ops.WM_OT_jewelcraft_ul_item_del,
weighting_list_ops.WM_OT_jewelcraft_ul_item_clear,
weighting_list_ops.WM_OT_jewelcraft_ul_item_move,
weighting_op.OBJECT_OT_jewelcraft_weight_display,
weighting_set_ops.WM_OT_jewelcraft_weighting_set_add,
weighting_set_ops.WM_OT_jewelcraft_weighting_set_replace,
weighting_set_ops.WM_OT_jewelcraft_weighting_set_del,
weighting_set_ops.WM_OT_jewelcraft_weighting_set_load,
weighting_set_ops.WM_OT_jewelcraft_weighting_set_load_append,
weighting_set_ops.WM_OT_jewelcraft_weighting_set_rename,
weighting_set_ops.WM_OT_jewelcraft_weighting_set_refresh,
)


def register():
addon_updater_ops.register(bl_info)
addon_updater_ops.register(bl_info)

for cls in classes:
bpy.utils.register_class(cls)

bpy.types.WindowManager.jewelcraft = PointerProperty(type=preferences.JewelCraftPropertiesWm)
bpy.types.Scene.jewelcraft = PointerProperty(type=preferences.JewelCraftPropertiesScene)

bpy.app.translations.register(__name__, translations.DICTIONARY)

for cls in classes:
bpy.utils.register_class(cls)
# Previews
# ---------------------------

bpy.types.WindowManager.jewelcraft = PointerProperty(type=preferences.WM_JewelCraft_Props)
bpy.types.Scene.jewelcraft = PointerProperty(type=preferences.SCENE_JewelCraft_Props)
pcoll = bpy.utils.previews.new()

bpy.app.translations.register(__name__, locale.lc_reg)
for entry in os.scandir(var.ICONS_DIR):

if entry.name.endswith(".png"):
name = os.path.splitext(entry.name)[0]
pcoll.load(name, entry.path, "IMAGE")

var.preview_collections["icons"] = pcoll


def unregister():
addon_updater_ops.unregister()
addon_updater_ops.unregister()

for cls in classes:
bpy.utils.unregister_class(cls)

del bpy.types.WindowManager.jewelcraft
del bpy.types.Scene.jewelcraft

for cls in classes:
bpy.utils.unregister_class(cls)
bpy.app.translations.unregister(__name__)

del bpy.types.WindowManager.jewelcraft
del bpy.types.Scene.jewelcraft
# Previews
# ---------------------------

bpy.app.translations.unregister(__name__)
for pcoll in var.preview_collections.values():
bpy.utils.previews.remove(pcoll)

# Previews
# ---------------------------
var.preview_collections.clear()
dynamic_lists._cache.clear()

for pcoll in ui.preview_collections.values():
bpy.utils.previews.remove(pcoll)
# Widgets
# ---------------------------

ui.preview_collections.clear()
dynamic_lists._cache.clear()
widgets.handler_del()


if __name__ == '__main__':
register()
if __name__ == "__main__":
register()
Loading

0 comments on commit cbebe8a

Please sign in to comment.