For Modo user switching to Blender 2.8

You can also select all the edges and RMB click>Subdivide that’s a quicker way to slice selected edges/polygons.

Thanks for sharing the script its gonna be super useful!

@Gregg_Hartley Ctrl key to snap with knife doesn’t work?

yeah id does but it would be cool if it stayed live so i can move it too . its no big deal, as time goes by blender gets better so for now i will just use as is. thanks for the tip by the way.

1 Like

@APEC You know what’s funny? If I change obj.display_type to obj.show_wire in your script (and set appropriate True/False values instead of Textured/Wire) then your script perfectly replicates Maya’s wireframe-on-shaded (or edged faces, however you call it) object display for selected objects while leaving unselected objects solid shaded.

import bpy
from bpy.types import Panel
from bpy.app.handlers import persistent

bl_info = {
    "name": "Inactive Shading Style",
    "author": "APEC",
    "version": (1, 0),
    "blender": (2, 81, 0),
    "location": "View3D > Properties > IS",
    "description": "Toggle between shading style for inactive meshes.",
    "wiki_url": "https://blenderartists.org/t/for-modo-user-switching-to-blender-2-8/1145429/337",
    "tracker_url": "",
    "category": "3D View"
}


oldactive = None
oldsel = None


@persistent
def update_shading_style(scene):
    '''
    watch changes in selection or active object
    set show_wire accordingly
    '''
    if scene.inactive_shading:
        global oldactive, oldsel

        context = bpy.context

        active = context.active_object if context.active_object else None
        sel = context.selected_objects

        if active != oldactive or sel != oldsel:
            oldactive = active
            oldsel = sel

            for obj in context.visible_objects:
                obj.show_wire = True if obj in sel else False


class PanelInactiveShading(Panel):
    bl_idname = "VIEW3D_PT_inactive_shading"
    bl_label = "Inactive Shading"
    bl_space_type = "VIEW_3D"
    bl_region_type = "UI"
    bl_category = 'IS'

    def draw(self, context):
        layout = self.layout
        col = layout.column()

        split = col.split(factor=0.5)

        #split.label(text="Inactive Shading")
        label = "Wire" if context.scene.inactive_shading else "Default"
        split.prop(context.scene, "inactive_shading", text=label, toggle=True)


def register():
    def update_inactive_shading(self, context):
        '''
        reset the display type of all visible objects, when scene.inactive_shading is toggled
        '''

        vis = context.visible_objects

        # enabled - set display style according to 1. object being active or among selection: True, 2. object not selected: False
        if context.scene.inactive_shading:
            active = context.active_object if context.active_object else None

            sel = [obj for obj in context.selected_objects if obj != active]

            for obj in vis:
                if obj in sel or obj == active:
                    obj.show_wire = True

                else:
                    obj.show_wire = False

        # disabled - set all visible objects to TEXUTURED
        else:
            for obj in vis:
                obj.show_wire = False

    bpy.types.Scene.inactive_shading = bpy.props.BoolProperty(name="Inactive Shading", default=True, update=update_inactive_shading)

    bpy.utils.register_class(PanelInactiveShading)

    bpy.app.handlers.depsgraph_update_post.append(update_shading_style)
    bpy.app.handlers.undo_post.append(update_shading_style)
    bpy.app.handlers.redo_post.append(update_shading_style)


def unregister():
    bpy.app.handlers.depsgraph_update_post.remove(update_shading_style)
    bpy.app.handlers.undo_post.remove(update_shading_style)
    bpy.app.handlers.redo_post.remove(update_shading_style)

    bpy.utils.unregister_class(PanelInactiveShading)

    del bpy.types.Scene.inactive_shading
    
if __name__ == "__main__":
    register()

As for how to get your button into the Shading menu, you can prepend to the start or append to the end in your register/unregister (to my knowledge you can’t inject to an arbitrary location in an existing Blender menu, only prepend/append). I need to go to sleep now so no time to try doing it for your script but it looks something sort of like this:

def register():
    bpy.types.VIEW3D_PT_shading.prepend(your_thing_goes_here)

def unregister():
    bpy.types.VIEW3D_PT_shading.remove(your_thing_goes_here)

butts2

2 Likes

I forgot to mention, if you don’t want the inactive objects to be a wire automatically when loading the blender, replace the (line 88 ):

bpy.types.Scene.inactive_shading = bpy.props.BoolProperty(name="Inactive Shading", default=True, update=update_inactive_shading)
default=True to default=False

Welcome to the friendly team of blender users (and not just users)!
It would great if you try after.

Disclaimer: I am not a programmer, so, caveat emptor, but this seems to work.

import bpy
from bpy.types import Menu
from bpy.app.handlers import persistent

bl_info = {
    "name": "Inactive Shading Style",
    "author": "APEC",
    "version": (1, 0, 1),
    "blender": (2, 81, 0),
    "location": "View3D > Properties",
    "description": "Toggle between shading style for inactive meshes.",
    "wiki_url": "https://blenderartists.org/t/for-modo-user-switching-to-blender-2-8/1145429/348",
    "tracker_url": "",
    "category": "3D View"
}


oldactive = None
oldsel = None


@persistent
def update_shading_style(scene):
    '''
    watch changes in selection or active object
    set display_type accordingly
    '''
    if scene.inactive_shading:
        global oldactive, oldsel

        context = bpy.context

        active = context.active_object if context.active_object else None
        sel = context.selected_objects

        if active != oldactive or sel != oldsel:
            oldactive = active
            oldsel = sel

            for obj in context.visible_objects:
                obj.display_type = 'TEXTURED' if obj in sel else 'WIRE'


def PanelInactiveShading(self, context):
    layout = self.layout
    col = layout.column()
    split = col.split(factor=0.5)
    split.label(text="Inactive Shading")
    label = "Wire" if context.scene.inactive_shading else "Current"
    split.prop(context.scene, "inactive_shading", text=label, toggle=True)


def register():
    def update_inactive_shading(self, context):
        '''
        reset the display type of all visible objects, when scene.inactive_shading is toggled
        '''

        vis = context.visible_objects

        # enabled - set display style according to 1. object being active or among selection: TEXTURED, 2. object not selected: WIRE
        if context.scene.inactive_shading:
            active = context.active_object if context.active_object else None

            sel = [obj for obj in context.selected_objects if obj != active]

            for obj in vis:
                if obj in sel or obj == active:
                    obj.display_type = 'TEXTURED'

                else:
                    obj.display_type = 'WIRE'

        # disabled - set all visible objects to TEXUTURED
        else:
            for obj in vis:
                obj.display_type = 'TEXTURED'

    bpy.types.Scene.inactive_shading = bpy.props.BoolProperty(name="Inactive Shading", default=True, update=update_inactive_shading)

    bpy.types.VIEW3D_PT_shading.prepend(PanelInactiveShading)

    bpy.app.handlers.depsgraph_update_post.append(update_shading_style)
    bpy.app.handlers.undo_post.append(update_shading_style)
    bpy.app.handlers.redo_post.append(update_shading_style)


def unregister():
    bpy.app.handlers.depsgraph_update_post.remove(update_shading_style)
    bpy.app.handlers.undo_post.remove(update_shading_style)
    bpy.app.handlers.redo_post.remove(update_shading_style)

    bpy.types.VIEW3D_PT_shading.remove(PanelInactiveShading)

    del bpy.types.Scene.inactive_shading
    
if __name__ == "__main__":
    register()

I don’t really know how the shading menu is constructed so despite the fact that I tried both prepend and append the button always appears at the top of the menu. I know that the sub-sections of the menu have their own definitions, so you could try VIEW3D_PT_shading_lighting VIEW3D_PT_shading_color or VIEW3D_PT_shading_options instead on line 81 and 93. (VIEW3D_PT_shading_color seems like a good spot to insert it.)

1 Like

Thanks.
A little modified panel

def PanelInactiveShading(self, context):
    layout = self.layout
    layout.separator()
    layout.label(text="Inactive Shading")
    label = "Wire" if context.scene.inactive_shading else "Current"
    layout.prop(context.scene, "inactive_shading", text=label, toggle=True)

and used
bpy.types.VIEW3D_PT_shading_color.append(PanelInactiveShading)
to get this


Inactive_Shading_v_1_0_1.py (3.0 KB)
or even like “Background” have their switching options

P.S. I’ll probably create a separate topic and (ask to transfer there all our discussions) related to this mini add-on or a simple add a link to the start of making this add-on.
P.P.S. done Shading for Inactive objects in viewport (wireframe)

3 Likes

Have another question.
In Modo I can freeze scale/rotation/position any object, even if it in group (folder).
In Blender I cant do this, some “multi user error”.

Example:
I have a Modo file exported in FBX to import in Blender. Modo file have many objects organized by folders (groups) and have instanced objects. When I import this file to blender it correct rotation and scale to match blender dimension. I want to freeze this to every objects so the materials and normals looked correctly.
So how can I do this?

I’ve been doing alot of UVing in Blender lately and I have to agree the UV should always be visible, unless you hide it. This is pretty much standard behavior across all 3d apps. Toggling Sync on/off is not productive and down right frustrating at time, because you lose your selection(edge selection). They need to standardize this workflow, the quirks in the current system doesn’t make it special or makes it faster to UV a mesh…

One of thee best UVing tutorial for Blender: https://www.youtube.com/watch?v=L3654VGZObg

edit: my opinion above was after watching this video and applying what I learn in UVing a bunch of 3d props(not organic characters).

1 Like

I wonder if that is a consequence of the subscription model.

In the traditional licence model you have to pack your software with new and exciting features in order to tempt users to buy newer versions and make it worth their while to upgrade.

With the subscription model, the company gets paid regardless of whether they make any meaningful updates or not.

4 Likes

The only officials you can contact are developers and support. People who depend on the job and they of course work hard for there living. So they always say, everything is fine, until they switch the job suddenly and of course they do it free will and are totally quit about the reason.
It took the Yost group, which developed 3d studio 1-4 and max till 4.0, exactly 10 years till they could tell people what really happened. It’s a typical NDA case of companies. They had a new core for 3dsmax in work along a lot improvements but Autodesk planned to rather keep development low and save money for acquiring the competitiors. They did a few years later, but first raised the price.
Now, looking back, the most naive and stupid thought is to think, every will be good. Subscription is not an idea of developers, it’s a marketing decision to bind user to a product, followed by rental. When Maxon did that move, my investment in a C4D Studio licenses suddenly dropped to worthless.
Just think of the stock market. You might have good running Apple shares, but suddenly they switch the contract and you not own them, you have to pay to own the shares one year in advance. So if they continue to be successful, why should they do such a step? Simple, because your investment now got screwed. Subscription is nothing else then stealing your money.
Now, in every case on the entire branch you see how that turned out. It’s not that Blender suddenly got the better developers, it’s different. Blender moves forward, while the rest stays.
A good example is Adobe Photoshop. If Affinity Photo cost less then the yearly subscription, then why isn’t Photoshop development increasing? Because they keep buying companies BY taking YOUR money.
Foundry is just making cash with Modo as long as possible, then the investors will sell the Company again.

3 Likes

PS Modo is still a fantastic software and the developer still working on improving it. It has a huge advantage in many areas over Blender, but also disadvantages never got fixed. Blenders problem is to switch it’s software architecture to be more like other 3d software standards are. The right mouse button was a key element to many who now started to learn. More of that and they continue even better. With more user, more money will come, indirectly of course. And more add-one ideas etc.
So if you ask for investment of your time and money and love. Then Blender is certainly the best.

1 Like

Investigation of Modo to Blender texture tiling, be careful if you transfer your projects with tiling textures from Modo to Blender and back.

What I really miss is input the same value of transformation fur all selected object, or mesh parts.
Blender not even has got a set position function, where you can set the position of selected mesh/part relative to local or global space.

hm… in some of your posts you admit that you simply don’t know how blender works.

1 Like

Well better say you don‘t know, then you know and forgot.

Really wish Blender devs would focus a release on Game Tools like Modo did. It would be such an easy lift compared to some of the bigger issues they’re taking on and would give Blender a gigantic leg up in an area that it’s already so close to gaining serious traction and lifting off in a very large way.

Baking tools (by name/collections, shape tools as cages, average normals to not need a cage to bake, etc.), round edge shader that works across separate objects, antialiased map baking (baking is useless without this), UV tools rehaul, etc.

The easiest and most obvious needs to cater to (and some of the biggest easy wins) feel either unseen or ignored.

At any rate, slightly ranting, but one of the things I miss most about Modo.

6 Likes

Actually they started to develop blender plugin again. They already showed screenshot where meshes were renderer in inside of blender.

Do you got a link?

https://forums.chaosgroup.com/forum/v-ray-for-blender-forums/v-ray-for-blender-announcements/1044525-vray-for-blender-2-8-when?p=1059989#post1059989

It maybe needs login to see the screenshot.

Wow, that’s new. Took them quite long to finally confirm that. I can’t see any beta build. And as I know them, it will take time. C4D plugin is still 3.7… and they didn’t start at zero.