// extenstions to convert C# Xamla.Robotics.Types to Python Xamla.Robotics.Types
        public static PyObject ToPython(this JointSet obj)
        {
            PyObject jointNames = PyConvert.ToPyObject(obj.ToArray());

            using (Py.GIL())
            {
                return(pyXamlaMotionTypes.JointSet(jointNames));
            }
        }
        public static PyObject ToPython(this JointValues obj)
        {
            PyObject jointSet = obj.JointSet.ToPython();
            PyObject values   = PyConvert.ToPyObject(obj.Values);

            using (Py.GIL())
            {
                return(pyXamlaMotionTypes.JointValues(jointSet, values));
            }
        }
        public static PyObject ToPython(this JointStates obj)
        {
            var positions  = PyConvert.ToPyObject(obj.Positions);
            var velocities = PyConvert.ToPyObject(obj.Velocities);
            var efforts    = PyConvert.ToPyObject(obj.Efforts);

            using (Py.GIL())
            {
                return(pyXamlaMotionTypes.JointStates(positions, velocities, efforts));
            }
        }
        public static PyObject ToPython(this TimeSpan obj)
        {
            var days         = PyConvert.ToPyObject(obj.Days);
            var seconds      = PyConvert.ToPyObject(obj.Hours * 3600 + obj.Minutes * 60 + obj.Seconds);
            var microseconds = PyConvert.ToPyObject(obj.Milliseconds * 1000);

            using (Py.GIL())
            {
                return(pyDateTime.timedelta(days: days, seconds: seconds, microseconds: microseconds));
            }
        }
        public static PyObject ToPython(this CollisionPrimitive obj)
        {
            var kindInt    = PyConvert.ToPyObject((int)obj.Kind);
            var parameters = PyConvert.ToPyObject(obj.Parameters);
            var pose       = PyConvert.ToPyObject(obj.Pose);

            using (Py.GIL())
            {
                var kind = pyXamlaMotionTypes.CollisionPrimitiveKind(kindInt);
                return(pyXamlaMotionTypes.CollisionPrimitive(kind, parameters, pose));
            }
        }
 public static PyObject ToPython(this CartesianPath obj)
 {
     using (Py.GIL())
     {
         var poses = new PyList();
         foreach (var p in obj)
         {
             poses.Append(PyConvert.ToPyObject(p));
         }
         return(pyXamlaMotionTypes.CartesianPath(poses));
     }
 }
        public static PyObject ToPython(this JointTrajectoryPoint obj)
        {
            var timeFromStart = PyConvert.ToPyObject(obj.TimeFromStart);
            var positions     = PyConvert.ToPyObject(obj.Positions);
            var velocities    = PyConvert.ToPyObject(obj.Velocities);
            var accelerations = PyConvert.ToPyObject(obj.Accelerations);
            var efforts       = PyConvert.ToPyObject(obj.Effort);

            using (Py.GIL())
            {
                return(pyXamlaMotionTypes.JointTrajectoryPoint(timeFromStart, positions, velocities, accelerations, efforts));
            }
        }
        public static PyObject ToPython(this CollisionObject obj)
        {
            var frame = PyConvert.ToPyObject(obj.Frame);

            using (Py.GIL())
            {
                var primitives = new PyList();
                foreach (var p in obj.Primitives)
                {
                    primitives.Append(PyConvert.ToPyObject(p));
                }
                return(pyXamlaMotionTypes.CollisionObject(primitives, frame));
            }
        }
        public static PyObject ToPython(this JointPath obj)
        {
            var jointSet = PyConvert.ToPyObject(obj.JointSet);

            using (Py.GIL())
            {
                var jointValues = new PyList();
                foreach (var v in obj)
                {
                    jointValues.Append(PyConvert.ToPyObject(v));
                }
                return(pyXamlaMotionTypes.JointPath(jointSet, jointValues));
            }
        }
        public static PyObject ToPython(this JointTrajectory obj)
        {
            var jointSet = PyConvert.ToPyObject(obj.JointSet);

            using (Py.GIL())
            {
                var points = new PyList();
                foreach (var p in obj)
                {
                    points.Append(PyConvert.ToPyObject(p));
                }
                return(pyXamlaMotionTypes.JointTrajectory(jointSet, points));
            }
        }
        private PyObject[] CreateArguments(object[] inputs, int firstArgIndex)
        {
            var args = new PyObject[argumentPins.Count];

            if (firstArgIndex + args.Length != inputs.Length)
            {
                throw new Exception("Invalid argument count");
            }

            for (int i = 0; i < args.Length; i++)
            {
                var x = inputs[firstArgIndex + i];

                args[i] = PyConvert.ToPyObject(x);
            }

            return(args);
        }
        public static PyObject ToPython(this PlanParameters obj)
        {
            var nullObject = new object();

            nullObject = null;
            var none             = nullObject.ToPython();
            var moveGroupName    = PyConvert.ToPyObject(obj.MoveGroupName);
            var jointSet         = PyConvert.ToPyObject(obj.JointSet);
            var maxVelocity      = PyConvert.ToPyObject(obj.MaxVelocity);
            var maxAcceleration  = PyConvert.ToPyObject(obj.MaxAcceleration);
            var sampleResolution = PyConvert.ToPyObject(obj.SampleResolution);
            var collisionCheck   = PyConvert.ToPyObject(obj.CollisionCheck);
            var maxDeviation     = PyConvert.ToPyObject(obj.MaxDeviation);

            using (Py.GIL())
            {
                return(pyXamlaMotionTypes.PlanParameters.from_arguments(moveGroupName, jointSet, maxVelocity, maxAcceleration, none, none,
                                                                        sample_resolution: sampleResolution, collisionCheck: collisionCheck,
                                                                        max_devitation: maxDeviation));
            }
        }
Example #13
0
        public object Run(
            [InputPin(Name = "caption", Description = "The caption of this module", PropertyMode = PropertyMode.Always, Editor = WellKnownEditors.SingleLineText)] string caption,
            [InputPin(Name = "expression", Description = "The Python expression", PropertyMode = PropertyMode.Always, Editor = WellKnownEditors.SingleLineText)] string expression,
            [InputPin(Name = "useMainThread", Description = "Whether to run the code on the Python main thread", PropertyMode = PropertyMode.Always, Editor = WellKnownEditors.CheckBox, DefaultValue = "false")] bool useMainThread,
            [InputPin(Name = "input", Description = "These are the inputs for the expression", PropertyMode = PropertyMode.Never)] params object[] inputs
            )
        {
            object evalBlock()
            {
                using (PyScope ps = Py.CreateScope())
                {
                    int i = 0;
                    foreach (var inputPin in this.dynamicInputPin.Pins)
                    {
                        if (inputPin.Connections.Any())
                        {
                            ps.Set(inputPin.Id, PyConvert.ToPyObject(inputs[i]));
                        }
                        i++;
                    }

                    ps.Set(dynamicInputPin.Alias + "s", inputs);
                    PyObject evalResult = ps.Eval(expression);
                    return(PyConvert.ToClrObject(evalResult, typeof(object)));
                }
            }

            if (useMainThread)
            {
                return(mainThread.EvalSync(evalBlock));
            }
            else
            {
                using (Py.GIL())
                {
                    return(evalBlock());
                }
            }
        }