def print_dynamic(self, name, dyn, pos, alias, prop): def assert_pos(name, n): if len(pos) != n: raise Exception('%s dynamic expects %d offsets, provided %d' % (name, n, len(pos))) if dyn == 'force': assert_pos('force', 4) d = Shapes.Arrow(pos[0], pos[1], pos[2], pos[3], alias) elif dyn == 'weight': assert_pos('weight', 4) d = Shapes.Arrow(pos[0], pos[1], pos[2], pos[3], alias) elif dyn == 'rod': assert_pos('rod', 4) d = Shapes.Rod(pos[0], pos[1], pos[2], pos[3], alias) elif dyn == 'spring': assert_pos('spring', 4) d = Shapes.Spring(pos[0], pos[1], pos[2], pos[3], alias) elif dyn == 'dampener': assert_pos('dampener', 4) d = Shapes.Dampener(pos[0], pos[1], pos[2], pos[3], alias) elif dyn == 'torque': assert_pos('torque', 2) r = float(prop.get('radius', Shapes.getDefaultCArrowRadius())) c = prop.get('ccw', '0') if c == '0': c = False else: c = True d = Shapes.CircularArrow(pos[0], pos[1], r, alias) elif dyn == 'belt': assert_pos('belt', 4) c = prop.get('crossed', '0') r0 = float(prop['r0']) r1 = float(prop['r1']) if c == '0': c = False else: c = True d = Shapes.Belt(pos[0], pos[1], r0, pos[2], pos[3], r1, c, alias) elif dyn == 'angularspring': assert_pos('angularspring', 2) r = float(prop.get('radius', Shapes.getDefaultCArrowRadius())) d = Shapes.AngularSpring(pos[0], pos[1], r, alias) elif dyn == 'angulardampener': assert_pos('angulardampener', 2) r = float(prop.get('radius', Shapes.getDefaultCArrowRadius())) d = Shapes.AngularDampener(pos[0], pos[1], r, alias) else: raise Exception('unknown dynamic type %s' % dyn) self.dynscene[name] = d self.scene.addItem(d)