Sorcar icon indicating copy to clipboard operation
Sorcar copied to clipboard

[BUG] Select Random throws error

Open crowbait opened this issue 3 years ago • 3 comments

Describe the bug When adding Select Random, Blender throws an error and the node doesn't work.

To Reproduce

  1. Add geometry, for example "Create Icosphere"
  2. Add "Select Random"
  3. See error

Desktop (please complete the following information):

  • OS: Win10 x64 20H2 b.19042.1052
  • Blender Version: 2.93.0
  • Sorcar Version: 3.2.1

Output

Python: Traceback (most recent call last):
  File "C:\Users\fabia\AppData\Roaming\Blender Foundation\Blender\2.93\scripts\addons\sorcar\operators\ScExecuteNode.py", line 19, in execute
    curr_tree.execute_node()
  File "C:\Users\fabia\AppData\Roaming\Blender Foundation\Blender\2.93\scripts\addons\sorcar\tree\ScNodeTree.py", line 77, in execute_node
    if (not n.execute()):
  File "C:\Users\fabia\AppData\Roaming\Blender Foundation\Blender\2.93\scripts\addons\sorcar\nodes\_base\node_base.py", line 56, in execute
    self.functionality()
  File "C:\Users\fabia\AppData\Roaming\Blender Foundation\Blender\2.93\scripts\addons\sorcar\nodes\selection\ScSelectRandom.py", line 31, in functionality
    bpy.ops.mesh.select_random(
  File "E:\Blender 2.93\2.93\scripts\modules\bpy\ops.py", line 132, in __call__
    ret = _op_call(self.idname_py(), None, kw)
TypeError: Converting py args to operator properties: : keyword "percent" unrecognized

location: <unknown location>:-1

crowbait avatar Jun 23 '21 12:06 crowbait

Same error, OS and Sorcar Version. Using Blender V2.93.1

paulrobello avatar Jul 21 '21 22:07 paulrobello

Hello, problem occurs due to blender API evolution

API https://docs.blender.org/api/current/bpy.ops.mesh.html

bpy.ops.mesh.select_random(ratio=0.5, seed=0, action='SELECT')
    Randomly select vertices
    Parameters
            ratio (float in [0, 1], (optional)) – Ratio, Portion of items to select randomly
            seed (int in [0, inf], (optional)) – Random Seed, Seed for the random number generator
            action (enum in ['SELECT', 'DESELECT'], (optional)) –
            Action, Selection action to execute
                SELECT Select, Select all elements.
                DESELECT Deselect, Deselect all elements.

Code evolution C:\Users[user]\AppData\Roaming\Blender Foundation\Blender\2.93\scripts\addons\Sorcar-master\nodes\selection\ScSelectRandom.py

import bpy

from bpy.props import EnumProperty, IntProperty, FloatProperty
from bpy.types import Node
from .._base.node_base import ScNode
from .._base.node_selection import ScSelectionNode

class ScSelectRandom(Node, ScSelectionNode):
    bl_idname = "ScSelectRandom"
    bl_label = "Select Random"
    
    #in_percent: FloatProperty(default=50.0, min=0.0, max=100.0, update=ScNode.update_value)
    in_ratio: FloatProperty(default=0.5, min=0.0, max=1.0, update=ScNode.update_value)
    in_seed: IntProperty(default=0, min=0, update=ScNode.update_value)
    in_action: EnumProperty(items=[("SELECT", "Select", ""), ("DESELECT", "Deselect", "")], default="SELECT", update=ScNode.update_value)
    
    def init(self, context):
        super().init(context)
        #self.inputs.new("ScNodeSocketNumber", "Percent").init("in_percent", True)
        self.inputs.new("ScNodeSocketNumber", "Ratio").init("in_ratio", True)
        self.inputs.new("ScNodeSocketNumber", "Seed").init("in_seed", True)
        self.inputs.new("ScNodeSocketString", "Action").init("in_action", True)
    
    def error_condition(self):
        return(
            super().error_condition()
            #or (self.inputs["Percent"].default_value < 0 or self.inputs["Percent"].default_value > 100)
            or (self.inputs["Ratio"].default_value < 0 or self.inputs["Ratio"].default_value > 1)
            or self.inputs["Seed"].default_value < 0
            or (not self.inputs["Action"].default_value in ["SELECT", "DESELECT"])
        )
    
    def functionality(self):
        bpy.ops.mesh.select_random(
            #percent = self.inputs["Percent"].default_value,
            ratio = self.inputs["Ratio"].default_value,
            seed = int(self.inputs["Seed"].default_value),
            action = self.inputs["Action"].default_value
        )

Credomo avatar Jul 31 '21 10:07 Credomo

Getting this error in blender 3.1.2 and sorcar 3.2.1 OS: Windows

wyhinton avatar May 30 '22 20:05 wyhinton