Не имеется никакого свойственного предела размера на сумму данных, которые Вы можете сохранять в 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