Не имеется никакого свойственного предела размера на сумму данных, которые Вы можете сохранять в record. Xrecords может принадлежать любому другому объекту, включая словарь расширения{*продления*} любого объекта, словари имен объектов, любого другого словаря, или другого xrecords.
Никакое уведомление не послано, когда xrecord изменяется. Если приложение должно знать, когда объект, имеющий xrecord изменился, приложение будет должно послать его собственное уведомление.
AcDbXrecord класс обеспечивает две функции члена для установки и получения resbuf цепочками, setfromRbChain () и rbChain () функциями:
Acad::ErrorStatus
AcDbXrecord::setFromRbChain(
resbuf& pRb,
AcDbDatabase* auxDb=NULL);
Acad::ErrorStatus
AcDbXrecord::rbChain(
resbuf** ppRb,
AcDbDatabase* auxDb=NULL) const;
AcDbXrecord:: setFromRbChain() функция заменяет существующую resbuf цепочку.
DXF Коды Группы для Xrecords
Следующая таблица перечисляет коды группы DXF, которые могут использоваться в records.
Диапазоны кодов DXF-групп для xrecords
From | To | DataType |
1 | 4 | Text |
6 | 9 | Text |
10 | 17 | Point or vector (3 reals) |
38 | 59 | Real |
60 | 79 | 16-bit integer |
90 | 99 | 32-bit integer |
102 | 102 | Control string “{“ or “}” |
140 | 149 | real |
170 | 179 | 16-bit integer |
210 | 219 | Real |
270 | 279 | 16-bit integer |
280 | 289 | 8-bit integer |
300 | 309 | Text |
310 | 319 | Binary chunk |
320 | 329 | Handle |
330 | 339 | Soft pointer ID |
340 | 349 | Hard pointer ID |
350 | 359 | Soft ownership ID |
360 | 369 | Hard ownership ID |
Для описания жестких и мягких владельцев и указателей, см. главу 12, “ Происходящий от AcDbObject. ”
Примеры
Следующие ObjectARX примеры состоят из двух функций: createXrecord () и listXrecord (). Первая функция добавляет новый xrecord к словарю, добавляет словарь к словари имен объектов, и затем добавляет данные к xrecord. ListXrecord () функция открывает xrecord, получает его список данных, и посылает список, который будет напечатан.
void
createXrecord()
{
AcDbDictionary *pNamedobj, *pDict;
acdbHostApplicationServices()->workingDatabase()
->getNamedObjectsDictionary(pNamedobj, AcDb::kForWrite);
// Check to see if the dictionary we want to create is
// already present. If not, then create it and add
// it to the named object dictionary.
//
if (pNamedobj->getAt("ASDK_DICT", (AcDbObject*&) pDict,
AcDb::kForWrite) == Acad::eKeyNotFound)
{
pDict = new AcDbDictionary;
AcDbObjectId DictId;
pNamedobj->setAt("ASDK_DICT", pDict, DictId);
}
pNamedobj->close();
// Add a new xrecord to the ASDK_DICT dictionary.
//
AcDbXrecord *pXrec = new AcDbXrecord;
AcDbObjectId xrecObjId;
pDict->setAt("XREC1", pXrec, xrecObjId);
pDict->close();
// Create a resbuf list to add to the xrecord.
//
struct resbuf *pHead;
ads_point testpt = {1.0, 2.0, 0.0};
pHead = acutBuildList(AcDb::kDxfText,
"This is a test Xrecord list",
AcDb::kDxfXCoord, testpt,
AcDb::kDxfReal, 3.14159,
AcDb::kDxfAngle, 3.14159,
AcDb::kDxfColor, 1,
AcDb::kDxfInt16, 180,
0);
// Add the data list to the xrecord. Notice that this
// member function takes a reference to resbuf, NOT a
// pointer to resbuf, so you must dereference the
// pointer before sending it.
//
pXrec->setFromRbChain(*pHead);
acutRelRb(pHead);
pXrec->close();
}
// Gets the xrecord associated with the key XREC1 and
// lists out its contents by passing the resbuf list to the
// function printList.
//
void
listXrecord()
{
AcDbDictionary *pNamedobj;
acdbHostApplicationServices()->workingDatabase()
->getNamedObjectsDictionary(pNamedobj, AcDb::kForRead);
// Get the dictionary object associated with the key ASDK_DICT.
//
AcDbDictionary *pDict;
pNamedobj->getAt("ASDK_DICT", (AcDbObject*&)pDict,
AcDb::kForRead);
pNamedobj->close();
// Get the xrecord associated with the key XREC1.
//
AcDbXrecord *pXrec;
pDict->getAt("XREC1", (AcDbObject*&) pXrec,
AcDb::kForRead);
pDict->close();
struct resbuf *pRbList;
pXrec->rbChain(&pRbList);
pXrec->close();
printList(pRbList);
acutRelRb(pRbList);
}
Часть 2. Интерфейсы пользователя
Глава 8. MFC
Библиотека фундаментальных классов Microsoft (MFC) позволяет разработчику осуществлять стандартные интерфейсы пользователя быстро. ObjectARX среда обеспечивает набор классов, что разработчик может использовать, чтобы создать MFC-ОСНОВАННЫЕ интерфейсы пользователя, которые ведут себя и появляются как встроенные интерфейсы пользователя Autodesk. Эта глава описывает, как использовать MFC библиотеку как часть Приложения ObjectArx.
§ Введение
§ Использование MFC с Приложениями ObjectArx
§ Приложения ObjectArx с Динамически Связанным MFC
§ Встроенная MFC Поддержка Интерфейса пользователя
§ Использование AdUi и AcUi с VC ++ AppWizard
Введение
Приложения ObjectArx могут быть созданы, чтобы воспользоваться преимуществом Microsoft
Фундаментальный класс (MFC) библиотека. Эта глава обсуждает, как формировать ваш
Приложения ObjectArx, чтобы использовать MFC и как встроенный AutoCAD
MFC система может использоваться, чтобы создать диалоги, которые ведут себя и работают
AutoCAD.
Использование MFC с Приложениями ObjectArx
Вы имеете выбор формирования Приложений ObjectArx с любым a
Динамически связанный MFC библиотека или статически связанная MFC библиотека. Вы также
Имейте выбор использования регулярного DLL или расширения{*продления*} DLL.
ПРИМЕЧАНИЮ Это строго рекомендуют динамически связать ваш MFC ObjectARX
Приложение И делает это расширением{*продлением*} DLL, так как это - единственный метод, который позволяет
Вы, чтобы использовать Autodesk AdUi и AcUi базовые классы MFC.
Для законченной информации относительно MFC, см. интерактивную справку Microsoft и
Технические примечания. В частности см. примечания 11 и 33 для информации относительно
Использование MFC как{*поскольку*} часть DLL, который является важной концепцией для ObjectARX.
MFC и Немодальные Диалоговые окна
Так как AutoCAD пытается забирать центр от всех его дочерних окон, немодальные диалоги имеют специальное требование. Равномерно, немодальный диалог получит сообщение окна WM_ACAD_KEEPFOCUS, которое определено в adscodes. h как 1001. Когда ваш диалог получает это сообщение, это возвратило бы ИСТИНУ, если это сохранило центр. Если ответ на это сообщение ЛОЖНЫЙ (который является также значением по умолчанию), то ваше диалоговое окно будет терять центр, как только пользователь перемещает указатель от окна поля диалога.
Вы можете делать это с картой сообщения поля диалога, и ON_MESSAGE () объявление типа
BEGIN_MESSAGE_MAP (HelloDlg, CDialog)
ON_COMMAND (IDCLOSE, OnClose)
ON_COMMAND (IDC_DRAW_CIRCLE, OnDrawCircle)
ON_MESSAGE (WM_ACAD_KEEPFOCUS, onAcadKeepFocus)
END_MESSAGE_MAP ()
В этом примере, диалоговый класс приложения - HelloDlg, который получен из CDialog. Когда Вы добавляете этот вход в карту сообщения, Вы должны также записать функцию обработчика для сообщения. Предположите, что Вы написали функцию, вызвал keepTheFocus(), который возвращает ИСТИНУ, если ваш диалог хочет сохранить фокус ввода и ЛОЖЬ, если диалог желает выдавать фокус AutoCAD. Обработчик сообщения примера обеспечивается здесь:
afx_msg LONG HelloDlg::onAcadKeepFocus(UINT, LONG)
{
return keepTheFocus() ? TRUE : FALSE;
}
Приложения ObjectArx с Динамически Связанным MFC
Привилегированный метод для формирования MFC-ОСНОВАННОГО Приложения ObjectArx состоит в том, чтобы использовать динамически связанные MFC библиотеки.
Параметры настройки Проекта Visual C++ для Динамически Связанного MFC
Формировать Приложение ObjectArx, используя общедоступную MFC библиотеку
1 Выбирают MFC AppWizard опция (DLL) для проекта.
2 Расширение Выбора DLL использование общедоступного MFC DLL.
3 Идут к диалоговому окну Project Settings и выбирают позицию табуляции General.
4 Использование Выбора MFC в Общедоступном DLL для поля Microsoft foundation class.
5 Добавляют функцию acrxEntryPoint к CPP файлу проекта. См. пример в конце главы для законченной установки для проекта MFC.
Отладка Приложений ObjectArx с Динамический MFC
При отладке Приложений ObjectArx, сформированных с динамически связанной MFC библиотекой, свяжите с выпускаемой версией C время выполнения и MFC библиотеки.
Это позволяет использование MFC или C отладку время выполнения средств, но не позволяет шагать в Microsoft MFC отлаживающий исходный текст.
Управление ресурсами
Управление ресурсами - важное соображение{*рассмотрение*} при проектировании Приложения ObjectArx, которое использует MFC библиотеку, общедоступную с AutoCAD и другими приложениями.
Вы должны вставить ваше состояние модуля (использование CDynaLinkLibrary) в цепочку, которую MFC исследует, когда это исполняет операции типа расположения ресурса.
Однако, строго рекомендуется, чтобы Вы явно управляли ресурсами вашего приложения так, чтобы они не нашлись в противоречии с другими ресурсами от AutoCAD или других Приложений ObjectArx.
|
Из за большого объема этот материал размещен на нескольких страницах:
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 |


