public static Sensor CreateSensor(SensorUnity sensorUnity, SensorType sensorType)
        {
            Visualizer          visualizer          = VisualizerFactory.CreateVisualizer(sensorUnity, sensorType);
            Sensor              sensor              = CreateSensorInternal(sensorUnity, sensorType);
            VisualizerAttribute visualizerAttribute = (VisualizerAttribute)visualizer.GetType().GetCustomAttribute(typeof(VisualizerAttribute));

            if (visualizerAttribute.unity != sensorUnity)
            {
                sensor = (Sensor)ConverterFactory.CreateConverter(visualizerAttribute.unity, sensorUnity, sensor, visualizer);
            }
            return(sensor);
        }
        public static Visualizer CreateVisualizer(SensorUnity sensorUnity, SensorType sensorType)
        {
            Type finalVisualizerType = null;

            foreach (Type visualizerType in typeof(Visualizer).Assembly.GetTypes())
            {
                VisualizerAttribute visualizerAttribute = (VisualizerAttribute)visualizerType.GetCustomAttribute(typeof(VisualizerAttribute));
                if (visualizerAttribute != null && !visualizerType.IsInterface && visualizerAttribute.type == sensorType)
                {
                    if (visualizerAttribute.unity == sensorUnity)
                    {
                        finalVisualizerType = visualizerType;
                        break;
                    }
                    finalVisualizerType = visualizerType;
                }
            }
            if (finalVisualizerType == null)
            {
                throw new Exception("There is no visualizer supporting the type: " + sensorType.ToString());
            }
            return((Visualizer)Activator.CreateInstance(finalVisualizerType));
        }