@@ -153,6 +153,8 @@ def __init__(self, node: OperatorNode):
153153 "selected_ik_legs" : [], # last node.selected_ik_legs
154154 "selected_joints" : [], # last node.selected_joints
155155 "selected_wheel_joints" : [], # last node.selected_wheel_joints
156+ "joint_has_ready" : False ,
157+ "wheel_has_ready" : False ,
156158 }
157159
158160 # ───────────── CHECKBOX STORAGE ────────────────────────
@@ -278,10 +280,19 @@ def _refresh(self, loop, _data):
278280 cb .set_state (leg in sel )
279281 loop .draw_screen ()
280282
281- # if in joint_select, rebuild if legs changed
282283 elif mode == "joint_select" :
283- if legs != self .state .get ("leg_list" , []):
284+ joint_ready = any (
285+ jh .ready .done () and jh .limb_number in self .node .selected_legs
286+ for jh in self .node .joint_handlers
287+ )
288+
289+ if (
290+ legs != self .state .get ("leg_list" , [])
291+ or joint_ready != self .state .get ("joint_has_ready" , False )
292+ ):
293+ # legs changed or ready state changed
284294 self .state ["leg_list" ] = legs
295+ self .state ["joint_has_ready" ] = joint_ready
285296 self .rebuild_joint_select (legs )
286297 loop .draw_screen ()
287298 else :
@@ -290,7 +301,6 @@ def _refresh(self, loop, _data):
290301 )
291302 if current != self .state ["selected_joints" ]:
292303 self .state ["selected_joints" ] = current
293- # update each tri-state checkbox
294304 for (leg , jn ), cb in self .joint_checkboxes .items ():
295305 if (leg , jn ) in self .node .selected_joints :
296306 cb .set_state (True )
@@ -300,18 +310,26 @@ def _refresh(self, loop, _data):
300310 cb .set_state (False )
301311 loop .draw_screen ()
302312
303- # if in wheel_select, rebuild if legs changed
304313 elif mode == "wheel_select" :
305- if legs != self .state .get ("leg_list" , []):
314+ wheel_ready = any (
315+ jh .ready .done () and jh .limb_number in self .node .selected_legs
316+ for jh in self .node .joint_handlers
317+ )
318+
319+ if (
320+ legs != self .state .get ("leg_list" , [])
321+ or wheel_ready != self .state .get ("wheel_has_ready" , False )
322+ ):
306323 self .state ["leg_list" ] = legs
324+ self .state ["wheel_has_ready" ] = wheel_ready
307325 self .rebuild_wheel_select (legs )
326+ loop .draw_screen ()
308327 else :
309328 current = sorted (self .node .selected_wheel_joints ) + sorted (
310329 self .node .selected_wheel_joints_inv
311330 )
312331 if current != self .state ["selected_wheel_joints" ]:
313332 self .state ["selected_wheel_joints" ] = current
314- # update each tri-state checkbox
315333 for (leg , jn ), cb in self .joint_checkboxes .items ():
316334 if (leg , jn ) in self .node .selected_wheel_joints :
317335 cb .set_state (True )
0 commit comments