if (dispID == 0x03) {
AcGePoint3d acgePt;
pSq->squareCenter(acgePt);
AcAxPoint3d acaxPt(acgePt);
acaxPt[dwCookie] = V_R8(&VarIn);
pSq->upgradeOpen();
pSq->setSquareCenter(acaxPt);
}
return S_OK;
}
STDMETHODIMP CAsdkSquareWrapper::GetElementStrings(
/* [in] */ DISPID dispID,
/* [out] */ OPMLPOLESTR __RPC_FAR *pCaStringsOut,
/* [out] */ OPMDWORD __RPC_FAR *pCaCookiesOut)
{
if (dispID == 0x03)
{
long size;
size = 3;
pCaStringsOut->pElems =
(LPOLESTR *)::CoTaskMemAlloc(sizeof(LPOLESTR) * size);
pCaCookiesOut->pElems =
(DWORD *)::CoTaskMemAlloc(sizeof(DWORD) * size);
for (long i=0;i<size;i++)
pCaCookiesOut->pElems[i] = i;
pCaStringsOut->cElems = size;
pCaCookiesOut->cElems = size;
pCaStringsOut->pElems[0] = ::SysAllocString(L"Center X");
pCaStringsOut->pElems[1] = ::SysAllocString(L"Center Y");
pCaStringsOut->pElems[2] = ::SysAllocString(L"Center Z");
}
return S_OK;
}
STDMETHODIMP CAsdkSquareWrapper::GetElementGrouping(
/* [in] */ DISPID dispID,
/* [out] */ short *groupingNumber)
{
return E_NOTIMPL;
}
STDMETHODIMP CAsdkSquareWrapper::GetGroupCount(
/* [in] */ DISPID dispID,
/* [out] */ long *nGroupCnt)
{
return E_NOTIMPL;
}
STDMETHODIMP CAsdkSquareWrapper::GetPredefinedStrings(
DISPID dispID, CALPOLESTR *pCaStringsOut,
CADWORD *pCaCookiesOut)
{
return E_NOTIMPL;
}
STDMETHODIMP CAsdkSquareWrapper::GetPredefinedValue(
DISPID dispID, DWORD dwCookie, VARIANT *pVarOut)
{
return E_NOTIMPL;
}
Динамические Свойства и OPM
Проблема с информацией типа состоит в том, что это является статическим. Это определено во времени компиляции в. idl файлах и не может изменяться легко во время выполнения. Microsoft обеспечивает интерфейсы, наиболее особенно ITypeInfo2 и ICreateTypeInfo, для так называемого динамического создания информации типа. Однако, эти интерфейсы только позволяют Вам добавлять информацию типа от существующей структуры ITypeInfo, которая относится к существующему интерфейсу отправки. Не имеется никакого метода во время выполнения для опроса объекта относительно его информации свойства. Чтобы заполнять этот промежуток и позволять любому DLL добавлять свойства к OPM, IDynamicProperty интерфейс был определен. Это позволяет Вам осуществлять IDynamicProperty полученный класс для каждого свойства, которое Вы желаете добавить к OPM. OPM может тогда вызывать методы этого класса, чтобы получить всю информацию, которую требоваться отобразить любой тип свойства.
IPropertyManager управляет, как OPM может получить указатели на эти интерфейсы свойства во время выполнения. Для каждого объекта AcRxClass в AutoCAD, клиент может получить указатель на объект, который осуществляет IPropertyManager. Это обработано внутренне через расширения протокола. Как только Вы имеете менеджера свойства для AcRxClass, Вы заинтересованы, Вы можете добавлять ваши классы свойства к этому через IPropertyManager:: AddProperty (). Когда пользователь выбирает объект того класса, OPM получит менеджера свойства для того класса, перечислит все классы свойства, и опрашивать те классы для их информации свойства, которую это тогда отобразит наряду с статическими свойствами того объекта. Обратите внимание, что класс IDynamicProperty не делает никакие предположения относительно того, где данные свойства сохранены. Это просто требует, чтобы реализация IDynamicProperty обеспечила это, когда GetCurrentValueData () вызван. Точно так же, когда пользователь изменяет динамическое свойство, OPM назовет SetCurrentValueData () с новым значением, оставляя это до реализации, чтобы решить, как установить то значение. Это оставляет это до Вы, чтобы решить, как делать динамические данные свойства постоянными.
OPM использует IPropertyManager и IDynamicProperty не только для свойств объектов, но также и для отображающихся свойств текущего пространства, когда никакой объект не отобран. Например, когда никакой объект не отобран в рисунке, OPM должен отобразить свойства, касающиеся UCS. Также, некоторые команды требуют, чтобы OPM отобразил информацию свойства (типа команд ОРБИТЫ). Эти ситуации требуют определяющих специальных менеджеров свойства для этих определенных “режимов”. Получение менеджеров свойства для режимов требует слегка различного механизма чем процедура для получения менеджеров свойства для выбираемых объектов. Как упомянуто ранее для свойств объектов, имеется расширение протокола для каждого класса объекта. Этот объект расширения протокола может использоваться разработчиком, чтобы получить менеджера свойства и добавлять его классы свойства. Для модальных ситуаций, будет иметься набор предопределенных расширений протокола на базе данных, что разработчик может использовать, чтобы отыскать менеджера свойства для той модальной ситуации.
IDynamicProperty
Как упомянуто ранее, Вы должны осуществить образец этого класса для каждого свойства, которое Вы желаете добавить к примитивам специфического класса.
Глава 24. API COM дизайн-центра AutoCAD
AutoCAD имеет особенности, которые используют механизм COM, чтобы сделать запрос и изменить объекты. AutoCAD Дизайн-центр (ADC) использует механизм COM, чтобы обеспечить легко доступное содержание рисунка. Эта глава описывает интерфейсы COM, которые должны быть осуществлены вашим приложением для этого, чтобы участвовать и расширить AutoCAD Дизайн-центр r.
§ AutoCAD Дизайн-центр API
§ Требования Системного реестра для AutoCAD Дизайн-центр Компонент
§ Реализация Интерфейсы для AutoCAD Дизайн-центр
§ Настройка AutoCAD Дизайн-центр
API Дизайн-центра AutoCAD
Дизайн-центр AutoCAD обеспечивает API, который может использоваться, чтобы обеспечить информацию относительно содержания, которое это выставляет{*подвергает*}. Этот API состоит из четырех Объектной модели программных компонентов интерфейсы (COM) для управления содержания. Два из этих интерфейсов (IAcDcContentBrowser и IAcDcContentView) разработаны{*предназначены*}, чтобы позволить составляющему средству доступа отобразить их содержание в Дизайн-центре AutoCAD, и сохранении, два интерфейса (IAcDcContentFinder и IAcDcContentFinderSite) разработаны{*предназначены*}, чтобы позволить составляющему средству доступа участвовать в механизме Средства поиска Дизайн-центра AutoCAD. Интерфейсы описаны в следующих секциях. Имеется также другой интерфейс (IAcPostDrop), который составляющие средства доступа могут осуществлять к заказной метке щелкн&ый правой кнопкой мыши, перемещаются элементов{*пунктов*} от Дизайн-центра AutoCAD.
Интерфейс IAcDcContentBrowser
Этот интерфейс осуществлен в структуре Дизайн-центра AutoCAD и используется компонентами, чтобы связаться, получают и устанавливают информацию. Указатель на этот интерфейс будет даваться компонентам, когда их метод инициализации вызван{*назван*}, и компоненты, как ожидается, будут кэшировать этот указатель, чтобы возразить к структуре.
Этот интерфейс подобен интерфейсу IShellBrowser Windows namespace расширение{*продление*}.
Интерфейс IAcDcContentView
Этот интерфейс осуществлен компонентами и используется структурой Дизайн-центра AutoCAD, чтобы получить довольную информацию от компонента. Компоненте, который зарегистрировал себя как довольное средство доступа к Дизайн-центру AutoCAD, делали бы запрос для этого интерфейса в соответствующее время, и будет попросить инициализировать себя. После того, как инициализированный, функции в этом интерфейсе будут вызваны{*названы*} в различные времена, чтобы получить или установить информацию в Дизайн-центре AutoCAD.
Этот интерфейс подобен интерфейсу IShellView Windows namespace расширение{*продление*}.
Интерфейс IAcDcContentFinderSite
Этот интерфейс осуществлен в структуре Дизайн-центра AutoCAD и используется компонентами, чтобы обеспечить результатов поиска довольного типа.
Интерфейс IAcDcContentFinder
Этот интерфейс осуществлен компонентами и используется структурой Дизайн-центра AutoCAD, чтобы получить информацию поиска от компонентов. Компоненте, который зарегистрировал себя как довольное средство доступа к Дизайн-центру AutoCAD, делали бы запрос для этого интерфейса в соответствующее время, и будет попросить инициализировать себя. После того, как инициализированный, функции в этом интерфейсе будут вызваны в различные времена, чтобы статься информационными соответствующими диалогу Средства поиска в Дизайн-центре AutoCAD.
Интерфейс IAcPostDrop
Этот интерфейс осуществлен компонентами и используется во время щелкнул правой кнопкой мыши, перетащат и опустить довольных примитивов.
Требования системного реестра для компонента Дизайн-центра AutoCAD
Для вашего компонента, который будет замечен Дизайн-центром AutoCAD, это должно быть должным образом зарегистрировано. Это означает, что это должно быть включено во вхождения системного реестра Дизайн-центра AutoCAD. Получить правильный путь системного реестра, сначала получают начальный путь AutoCAD. Это может быть выполнено, используя acrxProductKey () функция. Добавьте \AutodeskApps\AcadDC к начальному пути, чтобы закончить путь Дизайн-центра AutoCAD. Под путем Дизайн-центра AutoCAD - ключи для довольных приложений средства доступа. Следующие параграфы описывают основные ключи и их определенные дополнительные клавиши.
Ключи приложений
Этот ключ - для довольных средств доступа, кто хотят регистрировать себя и участвовать в Дизайн-центре AutoCAD заказной режим.
Прикладное Имя
Вся информация потребности Дизайн-центра AutoCAD от довольного средства доступа, участвующего в его заказном режиме сохранена под этой ключом. Имя ключа было бы имя приложения, поскольку это появляется в заказном режиме.
Под ключом Application Name может быть следующие дополнительные клавиши:
§ Расширения
Это содержит список расширений что довольные поддержки средства доступа (типа. dwg). Каждый ключ под расширениями представляет одно расширение. Имя ключа - имя расширения.
§ Средство поиска
Этот ключ необязатен. Если приложение хочет участвовать в находящихся функциональных возможностях, то это требовано, чтобы заполнить этот ключ.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |


