Создание свойств устройства

Чтобы задать свойства для устройства, выполните эту процедуру:

  1. Создайте свойство с помощью соответствующей функции членства IPropFactory для типа данных. Механизм передает в указателе на объект IPropFactory к функции getDeviceAttributes().

    Например, чтобы создать свойство типа double, используйте метод createDoubleProperty() объекта IPropFactory, задавая имя свойства и значение по умолчанию в качестве аргументов.

    hprop = devicePropFact->createDoubleProperty("Brightness",100)
    

    Класс IPropFactory поддерживает функции, чтобы создать свойства различных типов данных — смотрите Выбор Property Creation Function.

  2. Задайте, может ли пользователь изменить свойство, с помощью метода setPropReadOnly() объекта IPropFactory. Используйте одну из следующих констант (заданный в IEngine.h): READONLY_ALWAYS, READONLY_NEVER и READONLY_WHILE_RUNNING. Например,

    devicePropFact->setPropReadOnly(hProp, 
                     imaqkit::propreadonly::READONLY_WHILE_RUNNING);
    
  3. Добавьте свойство в специфичный для устройства контейнер свойства, с помощью метода addProperty() объекта IPropFactory. Например,

    devicePropFact->addProperty(hProp);
    

    где hProp является указателем на свойство, вы создали на шаге 1.

Выбор функции создания свойства

Функции поддержки объектов IPropFactory(), которые можно использовать, чтобы создать свойства различных типов данных, включая:

  • int

  • double

  • character vector

  • Перечислимые типы

Например, используйте функцию createDoubleProperty(), чтобы создать свойство, значение которого имеет тип double.

hprop = devicePropFact->createDoubleProperty("MyDoubleProp",2.5)

Для int и типов double, можно также задать свойства, которые имеют пары значений или значений в заданной области значений. Например, этот код создает целочисленное свойство с верхними и нижними границами.

hprop = devicePropFact->createIntProperty("MyBoundedIntProp", 
                                    0,100,50)

Чтобы создать свойство с перечисляемыми значениями, используйте createEnumProperty(), задавая имя свойства и одно перечисление, например,

hprop = devicePropFact->createEnumProperty("MyEnum", 
                                    "green",1)

Вы затем добавляете дополнительные свойства с помощью addEnumValue().

Для получения дополнительной информации о классе IPropFactory, см. Справочную документацию API Набора Адаптера Image Acquisition Toolbox™.

Создание справки свойства

Можно использовать файлы IMDF, чтобы задать текст справки для специфичных для устройства свойств, которые вы создаете. Для получения дополнительной информации смотрите Справку Определения в Файле IMDF.

Пример getDeviceAttributes () Функция

Следующий пример представляет скелетную реализацию функции getDeviceAttributes(). Намерение этого примера состоит в том, чтобы показать, как использовать объекты набора адаптера задать источники видеосигнала и свойства различных типов.

Этот код не читает источник, свойство, или инициировал информацию из файла IMDF. Для получения информации об этой теме смотрите Используя Язык разметки IMDF.

  1. Добавьте следующий код в функцию getDeviceAttributes() в адаптере. Вы создали скелетную версию этой функции в Идентификации Источников видеосигнала. Этот код создает несколько свойств различных типов.

        void* hProp;  // Declare a handle to a property object.
    
    	// Create a property of type double with a default value
    	hProp = devicePropFact->createDoubleProperty("MyDoubleProp",2.5);
    
    	//  Specify when the property value can be modified.
    	devicePropFact->setPropReadOnly(hProp,
                                   imaqkit::imaqengine::READONLY_ALWAYS);
    
    	// Add the property to the device-specific property container.
    	devicePropFact->addProperty(hProp);
    
    	// Create a bounded int property with maximum and minimum values
    	hProp = devicePropFact->createIntProperty("MyBoundedIntProp",
                                                  0, 100, 50);
    
    	//  Specify when the property value can be modified.
    	devicePropFact->setPropReadOnly(hProp,
                                    imaqkit::imaqengine::READONLY_NEVER);
    
    	// Add the property to the device-specific property container.
    	devicePropFact->addProperty(hProp);
    
    	// Create an enumerated property
    	hProp = devicePropFact->createEnumProperty("MyEnumeratedProp",
                                                   "green", 1);
        
    	// Add additional enumerations
    	devicePropFact->addEnumValue(hProp, "blue", 2);
    	devicePropFact->addEnumValue(hProp, "red", 3);
    	
    	// Specify when the property value can be modified.
      	devicePropFact->setPropReadOnly(hProp,
                             imaqkit::imaqengine::READONLY_WHILE_RUNNING);
    
     // Add the property to the device-specific property container.
    	devicePropFact->addProperty(hProp);
    
  2. Скомпилируйте и соедините свой адаптер, чтобы создать DLL.

  3. Запустите MATLAB.

  4. Создайте объект ввода видео для своего адаптера.

    vid = videoinput('mydevice',1)
    
  5. Используйте функцию getselectedsource, чтобы добраться, указатель на источник видеосигнала возражают и просматривают специфичные для устройства свойства, которые вы создали.

    src = getselectedsource(vid);
    get(vid)
    General Settings:
        Parent = [1x1 videoinput]
        Selected = on
        SourceName = input1
        Tag = 
        Type = videosource
    
      Device Specific Properties:
        MyDoubleProp = 2.5
    MyBoundedIntProp = 100
    MyEnumeratedProp = green